@preply/ds-docs 0.17.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/config/main.js +2 -2
- package/{utils → config/utils}/globs.js +0 -0
- package/{utils → config/utils}/statics.js +0 -0
- package/dist/0.c2c52a48.iframe.bundle.js +1 -0
- package/dist/{15.08d41143.iframe.bundle.js → 17.36e3b147.iframe.bundle.js} +1 -1
- package/dist/{16.6d35c467.iframe.bundle.js → 18.c82cd4f6.iframe.bundle.js} +1 -1
- package/dist/{17.e5e0cff4.iframe.bundle.js → 19.a7c546de.iframe.bundle.js} +1 -1
- package/dist/{4.b747d0126f12a3174989.manager.bundle.js → 4.f22207b64e4d1767a207.manager.bundle.js} +2 -2
- package/dist/{4.b747d0126f12a3174989.manager.bundle.js.LICENSE.txt → 4.f22207b64e4d1767a207.manager.bundle.js.LICENSE.txt} +0 -0
- package/dist/global/docs/static/data/features.json +1 -0
- package/dist/global/docs/static/data/projects.json +1 -0
- package/dist/global/docs/static/data/used-by.json +1 -0
- package/dist/iframe.html +1 -1
- package/dist/index.html +1 -1
- package/dist/main~3c949452.603af522.iframe.bundle.js +1 -0
- package/dist/main~493df0b3.9a80c8ad.iframe.bundle.js +1 -0
- package/dist/main~6dcfc2f7.ac42cfb7.iframe.bundle.js +1 -0
- package/dist/main~adec5aba.03d9d978.iframe.bundle.js +1 -0
- package/dist/main~dc51bad7.41dee229.iframe.bundle.js +1 -0
- package/dist/{runtime~main.b74eee19.iframe.bundle.js → runtime~main.4e3eae6c.iframe.bundle.js} +1 -1
- package/dist/{runtime~main.8e5bef40c9e66074a4b5.manager.bundle.js → runtime~main.b6fd37872fbce985f385.manager.bundle.js} +1 -1
- package/dist/vendors~main~253ae210.94345bce.iframe.bundle.js +1 -0
- package/dist/vendors~main~4134d62c.fa875551.iframe.bundle.js +1 -0
- package/dist/{vendors~main~678f84af.0ec649e4.iframe.bundle.js → vendors~main~678f84af.8ccf9640.iframe.bundle.js} +1 -1
- package/dist/{vendors~main~a353122d.a896d87b.iframe.bundle.js → vendors~main~a353122d.6c9e7044.iframe.bundle.js} +1 -1
- package/dist/{vendors~main~ab68c3a7.9826dc9a.iframe.bundle.js → vendors~main~ab68c3a7.76cee064.iframe.bundle.js} +1 -1
- package/dist/{vendors~main~bdc480fb.645475cd.iframe.bundle.js → vendors~main~bdc480fb.408ce141.iframe.bundle.js} +1 -1
- package/dist/{vendors~main~d88e64ba.8bc6102b.iframe.bundle.js → vendors~main~d88e64ba.9e502858.iframe.bundle.js} +1 -1
- package/package.json +11 -8
- package/scripts/copy-statics.js +1 -1
- package/dist/0.bef0adc4.iframe.bundle.js +0 -1
- package/dist/main~493df0b3.a330297e.iframe.bundle.js +0 -1
- package/dist/main~6dcfc2f7.ea82fa4d.iframe.bundle.js +0 -1
- package/dist/main~dc51bad7.819adf82.iframe.bundle.js +0 -1
- package/dist/vendors~main~253ae210.1378a211.iframe.bundle.js +0 -1
- package/dist/vendors~main~4134d62c.c3c3dc77.iframe.bundle.js +0 -1
- package/scripts/copy-metadata-and-assets.js +0 -87
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{"../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _assertThisInitialized; });\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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanM/ZTY2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\n')},"../../node_modules/@babel/runtime/helpers/esm/defineProperty.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; });\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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcz8zODAzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\n')},"../../node_modules/@babel/runtime/helpers/esm/extends.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });\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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzP2ZiNTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZTtBQUNmO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/extends.js\n')},"../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _inheritsLoose; });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js");\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n Object(_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(subClass, superClass);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzP2RmMTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFpRDtBQUNsQztBQUNmO0FBQ0E7QUFDQSxFQUFFLDBFQUFjO0FBQ2hCIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js\n')},"../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _objectWithoutPropertiesLoose; });\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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzP2JmYjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\n')},"../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _setPrototypeOf; });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcz9hNzczIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgIG8uX19wcm90b19fID0gcDtcbiAgICByZXR1cm4gbztcbiAgfTtcblxuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\n')},"../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _taggedTemplateLiteralLoose; });\nfunction _taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n strings.raw = raw;\n return strings;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWxMb29zZS5qcz84MjBiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90YWdnZWRUZW1wbGF0ZUxpdGVyYWxMb29zZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWxMb29zZShzdHJpbmdzLCByYXcpIHtcbiAgaWYgKCFyYXcpIHtcbiAgICByYXcgPSBzdHJpbmdzLnNsaWNlKDApO1xuICB9XG5cbiAgc3RyaW5ncy5yYXcgPSByYXc7XG4gIHJldHVybiBzdHJpbmdzO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js\n')},"../../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, "a", function() { return /* binding */ wrapNativeSuper_wrapNativeSuper; });\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/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// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\nvar setPrototypeOf = __webpack_require__("../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf("[native code]") !== -1;\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js\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 Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@babel/runtime/helpers/esm/construct.js\n\n\nfunction construct_construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n construct_construct = Reflect.construct;\n } else {\n construct_construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) Object(setPrototypeOf["a" /* default */])(instance, Class.prototype);\n return instance;\n };\n }\n\n return construct_construct.apply(null, arguments);\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js\n\n\n\n\nfunction wrapNativeSuper_wrapNativeSuper(Class) {\n var _cache = typeof Map === "function" ? new Map() : undefined;\n\n wrapNativeSuper_wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== "function") {\n throw new TypeError("Super expression must either be null or a function");\n }\n\n if (typeof _cache !== "undefined") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct_construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return Object(setPrototypeOf["a" /* default */])(Wrapper, Class);\n };\n\n return wrapNativeSuper_wrapNativeSuper(Class);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9nZXRQcm90b3R5cGVPZi5qcz9kMWJkIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2lzTmF0aXZlRnVuY3Rpb24uanM/NGU5NCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanM/Y2I5NyIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jb25zdHJ1Y3QuanM/Y2Q2ZSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS93cmFwTmF0aXZlU3VwZXIuanM/NjQ0OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDOzs7OztBQ0xlO0FBQ2Y7QUFDQSxDOztBQ0ZlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDOztBQ1hpRDtBQUNvQjtBQUN0RCxTQUFTLG1CQUFVO0FBQ2xDLE1BQU0seUJBQXdCO0FBQzlCLElBQUksbUJBQVU7QUFDZCxHQUFHO0FBQ0gsSUFBSSxtQkFBVTtBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHlDQUFjO0FBQy9CO0FBQ0E7QUFDQTs7QUFFQSxTQUFTLG1CQUFVO0FBQ25CLEM7O0FDakJpRDtBQUNBO0FBQ0k7QUFDZDtBQUN4QixTQUFTLCtCQUFnQjtBQUN4Qzs7QUFFQSxFQUFFLCtCQUFnQjtBQUNsQiwyQkFBMkIsaUJBQWdCOztBQUUzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxtQkFBUyxtQkFBbUIsZUFBYztBQUN2RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxXQUFXLHlDQUFjO0FBQ3pCOztBQUVBLFNBQVMsK0JBQWdCO0FBQ3pCIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS93cmFwTmF0aXZlU3VwZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7XG4gIH07XG4gIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoXCJbbmF0aXZlIGNvZGVdXCIpICE9PSAtMTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG5cbiAgdHJ5IHtcbiAgICBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn0iLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgZnJvbSBcIi4vaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgaWYgKGlzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICB9IGVsc2Uge1xuICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgYS5wdXNoLmFwcGx5KGEsIGFyZ3MpO1xuICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICBpZiAoQ2xhc3MpIHNldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufSIsImltcG9ydCBnZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9nZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVGdW5jdGlvbiBmcm9tIFwiLi9pc05hdGl2ZUZ1bmN0aW9uLmpzXCI7XG5pbXBvcnQgY29uc3RydWN0IGZyb20gXCIuL2NvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiID8gbmV3IE1hcCgpIDogdW5kZWZpbmVkO1xuXG4gIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFpc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdChDbGFzcywgYXJndW1lbnRzLCBnZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgV3JhcHBlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENsYXNzLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IFdyYXBwZXIsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js\n')},"../../node_modules/@babel/runtime/helpers/inheritsLoose.js":function(module,exports,__webpack_require__){eval('var setPrototypeOf = __webpack_require__("../../node_modules/@babel/runtime/helpers/setPrototypeOf.js");\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzTG9vc2UuanM/MDczNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBcUIsbUJBQU8sQ0FBQyw2REFBcUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c0xvb3NlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0c0xvb3NlO1xubW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/inheritsLoose.js\n')},"../../node_modules/@babel/runtime/helpers/setPrototypeOf.js":function(module,exports){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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzPzUxZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2Y7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@babel/runtime/helpers/setPrototypeOf.js\n')},"../../node_modules/@base2/pretty-print-object/dist/index.js":function(module,exports,__webpack_require__){"use strict";eval("\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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\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 return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar seen = [];\n/**\n * Check if a value is an object or a function. Keep in mind that array, function, regexp, etc, are objects in JavaScript.\n *\n * @param value the value to check\n * @return true if the value is an object or a function\n */\nfunction isObj(value) {\n var type = typeof value;\n return value !== null && (type === 'object' || type === 'function');\n}\n/**\n * Check if a value is a regular expression.\n *\n * @param value the value to check\n * @return true if the value is a regular expression\n */\nfunction isRegexp(value) {\n return Object.prototype.toString.call(value) === '[object RegExp]';\n}\n/**\n * Get an array of all of the enumerable symbols for an object.\n *\n * @param object the object to get the enumerable symbols for\n */\nfunction getOwnEnumPropSymbols(object) {\n return Object.getOwnPropertySymbols(object).filter(function (keySymbol) { return Object.prototype.propertyIsEnumerable.call(object, keySymbol); });\n}\n/**\n * pretty print an object\n *\n * @param input the object to pretty print\n * @param options the formatting options, transforms, and filters\n * @param pad the padding string\n */\nfunction prettyPrint(input, options, pad) {\n if (pad === void 0) { pad = ''; }\n // sensible option defaults\n var defaultOptions = {\n indent: '\\t',\n singleQuotes: true\n };\n var combinedOptions = __assign(__assign({}, defaultOptions), options);\n var tokens;\n if (combinedOptions.inlineCharacterLimit === undefined) {\n tokens = {\n newLine: '\\n',\n newLineOrSpace: '\\n',\n pad: pad,\n indent: pad + combinedOptions.indent\n };\n }\n else {\n tokens = {\n newLine: '@@__PRETTY_PRINT_NEW_LINE__@@',\n newLineOrSpace: '@@__PRETTY_PRINT_NEW_LINE_OR_SPACE__@@',\n pad: '@@__PRETTY_PRINT_PAD__@@',\n indent: '@@__PRETTY_PRINT_INDENT__@@'\n };\n }\n var expandWhiteSpace = function (string) {\n if (combinedOptions.inlineCharacterLimit === undefined) {\n return string;\n }\n var oneLined = string\n .replace(new RegExp(tokens.newLine, 'g'), '')\n .replace(new RegExp(tokens.newLineOrSpace, 'g'), ' ')\n .replace(new RegExp(tokens.pad + '|' + tokens.indent, 'g'), '');\n if (oneLined.length <= combinedOptions.inlineCharacterLimit) {\n return oneLined;\n }\n return string\n .replace(new RegExp(tokens.newLine + '|' + tokens.newLineOrSpace, 'g'), '\\n')\n .replace(new RegExp(tokens.pad, 'g'), pad)\n .replace(new RegExp(tokens.indent, 'g'), pad + combinedOptions.indent);\n };\n if (seen.indexOf(input) !== -1) {\n return '\"[Circular]\"';\n }\n if (input === null ||\n input === undefined ||\n typeof input === 'number' ||\n typeof input === 'boolean' ||\n typeof input === 'function' ||\n typeof input === 'symbol' ||\n isRegexp(input)) {\n return String(input);\n }\n if (input instanceof Date) {\n return \"new Date('\" + input.toISOString() + \"')\";\n }\n if (Array.isArray(input)) {\n if (input.length === 0) {\n return '[]';\n }\n seen.push(input);\n var ret = '[' + tokens.newLine + input.map(function (el, i) {\n var eol = input.length - 1 === i ? tokens.newLine : ',' + tokens.newLineOrSpace;\n var value = prettyPrint(el, combinedOptions, pad + combinedOptions.indent);\n if (combinedOptions.transform) {\n value = combinedOptions.transform(input, i, value);\n }\n return tokens.indent + value + eol;\n }).join('') + tokens.pad + ']';\n seen.pop();\n return expandWhiteSpace(ret);\n }\n if (isObj(input)) {\n var objKeys_1 = __spreadArrays(Object.keys(input), (getOwnEnumPropSymbols(input)));\n if (combinedOptions.filter) {\n objKeys_1 = objKeys_1.filter(function (el) { return combinedOptions.filter && combinedOptions.filter(input, el); });\n }\n if (objKeys_1.length === 0) {\n return '{}';\n }\n seen.push(input);\n var ret = '{' + tokens.newLine + objKeys_1.map(function (el, i) {\n var eol = objKeys_1.length - 1 === i ? tokens.newLine : ',' + tokens.newLineOrSpace;\n var isSymbol = typeof el === 'symbol';\n var isClassic = !isSymbol && /^[a-z$_][a-z$_0-9]*$/i.test(el.toString());\n var key = isSymbol || isClassic ? el : prettyPrint(el, combinedOptions);\n var value = prettyPrint(input[el], combinedOptions, pad + combinedOptions.indent);\n if (combinedOptions.transform) {\n value = combinedOptions.transform(input, el, value);\n }\n return tokens.indent + String(key) + ': ' + value + eol;\n }).join('') + tokens.pad + '}';\n seen.pop();\n return expandWhiteSpace(ret);\n }\n input = String(input).replace(/[\\r\\n]/g, function (x) { return x === '\\n' ? '\\\\n' : '\\\\r'; });\n if (!combinedOptions.singleQuotes) {\n input = input.replace(/\"/g, '\\\\\"');\n return \"\\\"\" + input + \"\\\"\";\n }\n input = input.replace(/\\\\?'/g, '\\\\\\'');\n return \"'\" + input + \"'\";\n}\nexports.prettyPrint = prettyPrint;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AYmFzZTIvcHJldHR5LXByaW50LW9iamVjdC9kaXN0L2luZGV4LmpzPzc0ZTEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7QUFDYjtBQUNBO0FBQ0EsZ0RBQWdELE9BQU87QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELFFBQVE7QUFDekQsd0NBQXdDLFFBQVE7QUFDaEQsd0RBQXdELFFBQVE7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RSxzRUFBc0UsRUFBRTtBQUNySjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsVUFBVTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Qsb0VBQW9FLEVBQUU7QUFDOUg7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNEJBQTRCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxtQ0FBbUMsRUFBRTtBQUNoRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AYmFzZTIvcHJldHR5LXByaW50LW9iamVjdC9kaXN0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgc2VlbiA9IFtdO1xuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLiBLZWVwIGluIG1pbmQgdGhhdCBhcnJheSwgZnVuY3Rpb24sIHJlZ2V4cCwgZXRjLCBhcmUgb2JqZWN0cyBpbiBKYXZhU2NyaXB0LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gaXNPYmoodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgcmVndWxhciBleHByZXNzaW9uLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSByZWd1bGFyIGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNSZWdleHAodmFsdWUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG4vKipcbiAqIEdldCBhbiBhcnJheSBvZiBhbGwgb2YgdGhlIGVudW1lcmFibGUgc3ltYm9scyBmb3IgYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBvYmplY3QgdGhlIG9iamVjdCB0byBnZXQgdGhlIGVudW1lcmFibGUgc3ltYm9scyBmb3JcbiAqL1xuZnVuY3Rpb24gZ2V0T3duRW51bVByb3BTeW1ib2xzKG9iamVjdCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCkuZmlsdGVyKGZ1bmN0aW9uIChrZXlTeW1ib2wpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIGtleVN5bWJvbCk7IH0pO1xufVxuLyoqXG4gKiBwcmV0dHkgcHJpbnQgYW4gb2JqZWN0XG4gKlxuICogQHBhcmFtIGlucHV0IHRoZSBvYmplY3QgdG8gcHJldHR5IHByaW50XG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgZm9ybWF0dGluZyBvcHRpb25zLCB0cmFuc2Zvcm1zLCBhbmQgZmlsdGVyc1xuICogQHBhcmFtIHBhZCB0aGUgcGFkZGluZyBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gcHJldHR5UHJpbnQoaW5wdXQsIG9wdGlvbnMsIHBhZCkge1xuICAgIGlmIChwYWQgPT09IHZvaWQgMCkgeyBwYWQgPSAnJzsgfVxuICAgIC8vIHNlbnNpYmxlIG9wdGlvbiBkZWZhdWx0c1xuICAgIHZhciBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgaW5kZW50OiAnXFx0JyxcbiAgICAgICAgc2luZ2xlUXVvdGVzOiB0cnVlXG4gICAgfTtcbiAgICB2YXIgY29tYmluZWRPcHRpb25zID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgdmFyIHRva2VucztcbiAgICBpZiAoY29tYmluZWRPcHRpb25zLmlubGluZUNoYXJhY3RlckxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdG9rZW5zID0ge1xuICAgICAgICAgICAgbmV3TGluZTogJ1xcbicsXG4gICAgICAgICAgICBuZXdMaW5lT3JTcGFjZTogJ1xcbicsXG4gICAgICAgICAgICBwYWQ6IHBhZCxcbiAgICAgICAgICAgIGluZGVudDogcGFkICsgY29tYmluZWRPcHRpb25zLmluZGVudFxuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdG9rZW5zID0ge1xuICAgICAgICAgICAgbmV3TGluZTogJ0BAX19QUkVUVFlfUFJJTlRfTkVXX0xJTkVfX0BAJyxcbiAgICAgICAgICAgIG5ld0xpbmVPclNwYWNlOiAnQEBfX1BSRVRUWV9QUklOVF9ORVdfTElORV9PUl9TUEFDRV9fQEAnLFxuICAgICAgICAgICAgcGFkOiAnQEBfX1BSRVRUWV9QUklOVF9QQURfX0BAJyxcbiAgICAgICAgICAgIGluZGVudDogJ0BAX19QUkVUVFlfUFJJTlRfSU5ERU5UX19AQCdcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdmFyIGV4cGFuZFdoaXRlU3BhY2UgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIGlmIChjb21iaW5lZE9wdGlvbnMuaW5saW5lQ2hhcmFjdGVyTGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICB2YXIgb25lTGluZWQgPSBzdHJpbmdcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAodG9rZW5zLm5ld0xpbmUsICdnJyksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCh0b2tlbnMubmV3TGluZU9yU3BhY2UsICdnJyksICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAodG9rZW5zLnBhZCArICd8JyArIHRva2Vucy5pbmRlbnQsICdnJyksICcnKTtcbiAgICAgICAgaWYgKG9uZUxpbmVkLmxlbmd0aCA8PSBjb21iaW5lZE9wdGlvbnMuaW5saW5lQ2hhcmFjdGVyTGltaXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvbmVMaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKHRva2Vucy5uZXdMaW5lICsgJ3wnICsgdG9rZW5zLm5ld0xpbmVPclNwYWNlLCAnZycpLCAnXFxuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAodG9rZW5zLnBhZCwgJ2cnKSwgcGFkKVxuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCh0b2tlbnMuaW5kZW50LCAnZycpLCBwYWQgKyBjb21iaW5lZE9wdGlvbnMuaW5kZW50KTtcbiAgICB9O1xuICAgIGlmIChzZWVuLmluZGV4T2YoaW5wdXQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gJ1wiW0NpcmN1bGFyXVwiJztcbiAgICB9XG4gICAgaWYgKGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgIGlucHV0ID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnc3ltYm9sJyB8fFxuICAgICAgICBpc1JlZ2V4cChpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dCk7XG4gICAgfVxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIFwibmV3IERhdGUoJ1wiICsgaW5wdXQudG9JU09TdHJpbmcoKSArIFwiJylcIjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnW10nO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4ucHVzaChpbnB1dCk7XG4gICAgICAgIHZhciByZXQgPSAnWycgKyB0b2tlbnMubmV3TGluZSArIGlucHV0Lm1hcChmdW5jdGlvbiAoZWwsIGkpIHtcbiAgICAgICAgICAgIHZhciBlb2wgPSBpbnB1dC5sZW5ndGggLSAxID09PSBpID8gdG9rZW5zLm5ld0xpbmUgOiAnLCcgKyB0b2tlbnMubmV3TGluZU9yU3BhY2U7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBwcmV0dHlQcmludChlbCwgY29tYmluZWRPcHRpb25zLCBwYWQgKyBjb21iaW5lZE9wdGlvbnMuaW5kZW50KTtcbiAgICAgICAgICAgIGlmIChjb21iaW5lZE9wdGlvbnMudHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjb21iaW5lZE9wdGlvbnMudHJhbnNmb3JtKGlucHV0LCBpLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5zLmluZGVudCArIHZhbHVlICsgZW9sO1xuICAgICAgICB9KS5qb2luKCcnKSArIHRva2Vucy5wYWQgKyAnXSc7XG4gICAgICAgIHNlZW4ucG9wKCk7XG4gICAgICAgIHJldHVybiBleHBhbmRXaGl0ZVNwYWNlKHJldCk7XG4gICAgfVxuICAgIGlmIChpc09iaihpbnB1dCkpIHtcbiAgICAgICAgdmFyIG9iaktleXNfMSA9IF9fc3ByZWFkQXJyYXlzKE9iamVjdC5rZXlzKGlucHV0KSwgKGdldE93bkVudW1Qcm9wU3ltYm9scyhpbnB1dCkpKTtcbiAgICAgICAgaWYgKGNvbWJpbmVkT3B0aW9ucy5maWx0ZXIpIHtcbiAgICAgICAgICAgIG9iaktleXNfMSA9IG9iaktleXNfMS5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7IHJldHVybiBjb21iaW5lZE9wdGlvbnMuZmlsdGVyICYmIGNvbWJpbmVkT3B0aW9ucy5maWx0ZXIoaW5wdXQsIGVsKTsgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iaktleXNfMS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAne30nO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4ucHVzaChpbnB1dCk7XG4gICAgICAgIHZhciByZXQgPSAneycgKyB0b2tlbnMubmV3TGluZSArIG9iaktleXNfMS5tYXAoZnVuY3Rpb24gKGVsLCBpKSB7XG4gICAgICAgICAgICB2YXIgZW9sID0gb2JqS2V5c18xLmxlbmd0aCAtIDEgPT09IGkgPyB0b2tlbnMubmV3TGluZSA6ICcsJyArIHRva2Vucy5uZXdMaW5lT3JTcGFjZTtcbiAgICAgICAgICAgIHZhciBpc1N5bWJvbCA9IHR5cGVvZiBlbCA9PT0gJ3N5bWJvbCc7XG4gICAgICAgICAgICB2YXIgaXNDbGFzc2ljID0gIWlzU3ltYm9sICYmIC9eW2EteiRfXVthLXokXzAtOV0qJC9pLnRlc3QoZWwudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB2YXIga2V5ID0gaXNTeW1ib2wgfHwgaXNDbGFzc2ljID8gZWwgOiBwcmV0dHlQcmludChlbCwgY29tYmluZWRPcHRpb25zKTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByZXR0eVByaW50KGlucHV0W2VsXSwgY29tYmluZWRPcHRpb25zLCBwYWQgKyBjb21iaW5lZE9wdGlvbnMuaW5kZW50KTtcbiAgICAgICAgICAgIGlmIChjb21iaW5lZE9wdGlvbnMudHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjb21iaW5lZE9wdGlvbnMudHJhbnNmb3JtKGlucHV0LCBlbCwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRva2Vucy5pbmRlbnQgKyBTdHJpbmcoa2V5KSArICc6ICcgKyB2YWx1ZSArIGVvbDtcbiAgICAgICAgfSkuam9pbignJykgKyB0b2tlbnMucGFkICsgJ30nO1xuICAgICAgICBzZWVuLnBvcCgpO1xuICAgICAgICByZXR1cm4gZXhwYW5kV2hpdGVTcGFjZShyZXQpO1xuICAgIH1cbiAgICBpbnB1dCA9IFN0cmluZyhpbnB1dCkucmVwbGFjZSgvW1xcclxcbl0vZywgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggPT09ICdcXG4nID8gJ1xcXFxuJyA6ICdcXFxccic7IH0pO1xuICAgIGlmICghY29tYmluZWRPcHRpb25zLnNpbmdsZVF1b3Rlcykge1xuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcbiAgICAgICAgcmV0dXJuIFwiXFxcIlwiICsgaW5wdXQgKyBcIlxcXCJcIjtcbiAgICB9XG4gICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC9cXFxcPycvZywgJ1xcXFxcXCcnKTtcbiAgICByZXR1cm4gXCInXCIgKyBpbnB1dCArIFwiJ1wiO1xufVxuZXhwb3J0cy5wcmV0dHlQcmludCA9IHByZXR0eVByaW50O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@base2/pretty-print-object/dist/index.js\n")},"../../node_modules/@emotion/cache/dist/cache.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/sheet/dist/sheet.browser.esm.js\nvar sheet_browser_esm = __webpack_require__(\"../../node_modules/@emotion/sheet/dist/sheet.browser.esm.js\");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/stylis/dist/stylis.browser.esm.js\nfunction stylis_min (W) {\n function M(d, c, e, h, a) {\n for (var m = 0, b = 0, v = 0, n = 0, q, g, x = 0, K = 0, k, u = k = q = 0, l = 0, r = 0, I = 0, t = 0, B = e.length, J = B - 1, y, f = '', p = '', F = '', G = '', C; l < B;) {\n g = e.charCodeAt(l);\n l === J && 0 !== b + n + v + m && (0 !== b && (g = 47 === b ? 10 : 47), n = v = m = 0, B++, J++);\n\n if (0 === b + n + v + m) {\n if (l === J && (0 < r && (f = f.replace(N, '')), 0 < f.trim().length)) {\n switch (g) {\n case 32:\n case 9:\n case 59:\n case 13:\n case 10:\n break;\n\n default:\n f += e.charAt(l);\n }\n\n g = 59;\n }\n\n switch (g) {\n case 123:\n f = f.trim();\n q = f.charCodeAt(0);\n k = 1;\n\n for (t = ++l; l < B;) {\n switch (g = e.charCodeAt(l)) {\n case 123:\n k++;\n break;\n\n case 125:\n k--;\n break;\n\n case 47:\n switch (g = e.charCodeAt(l + 1)) {\n case 42:\n case 47:\n a: {\n for (u = l + 1; u < J; ++u) {\n switch (e.charCodeAt(u)) {\n case 47:\n if (42 === g && 42 === e.charCodeAt(u - 1) && l + 2 !== u) {\n l = u + 1;\n break a;\n }\n\n break;\n\n case 10:\n if (47 === g) {\n l = u + 1;\n break a;\n }\n\n }\n }\n\n l = u;\n }\n\n }\n\n break;\n\n case 91:\n g++;\n\n case 40:\n g++;\n\n case 34:\n case 39:\n for (; l++ < J && e.charCodeAt(l) !== g;) {\n }\n\n }\n\n if (0 === k) break;\n l++;\n }\n\n k = e.substring(t, l);\n 0 === q && (q = (f = f.replace(ca, '').trim()).charCodeAt(0));\n\n switch (q) {\n case 64:\n 0 < r && (f = f.replace(N, ''));\n g = f.charCodeAt(1);\n\n switch (g) {\n case 100:\n case 109:\n case 115:\n case 45:\n r = c;\n break;\n\n default:\n r = O;\n }\n\n k = M(c, r, k, g, a + 1);\n t = k.length;\n 0 < A && (r = X(O, f, I), C = H(3, k, r, c, D, z, t, g, a, h), f = r.join(''), void 0 !== C && 0 === (t = (k = C.trim()).length) && (g = 0, k = ''));\n if (0 < t) switch (g) {\n case 115:\n f = f.replace(da, ea);\n\n case 100:\n case 109:\n case 45:\n k = f + '{' + k + '}';\n break;\n\n case 107:\n f = f.replace(fa, '$1 $2');\n k = f + '{' + k + '}';\n k = 1 === w || 2 === w && L('@' + k, 3) ? '@-webkit-' + k + '@' + k : '@' + k;\n break;\n\n default:\n k = f + k, 112 === h && (k = (p += k, ''));\n } else k = '';\n break;\n\n default:\n k = M(c, X(c, f, I), k, h, a + 1);\n }\n\n F += k;\n k = I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n break;\n\n case 125:\n case 59:\n f = (0 < r ? f.replace(N, '') : f).trim();\n if (1 < (t = f.length)) switch (0 === u && (q = f.charCodeAt(0), 45 === q || 96 < q && 123 > q) && (t = (f = f.replace(' ', ':')).length), 0 < A && void 0 !== (C = H(1, f, c, d, D, z, p.length, h, a, h)) && 0 === (t = (f = C.trim()).length) && (f = '\\x00\\x00'), q = f.charCodeAt(0), g = f.charCodeAt(1), q) {\n case 0:\n break;\n\n case 64:\n if (105 === g || 99 === g) {\n G += f + e.charAt(l);\n break;\n }\n\n default:\n 58 !== f.charCodeAt(t - 1) && (p += P(f, q, g, f.charCodeAt(2)));\n }\n I = r = u = q = 0;\n f = '';\n g = e.charCodeAt(++l);\n }\n }\n\n switch (g) {\n case 13:\n case 10:\n 47 === b ? b = 0 : 0 === 1 + q && 107 !== h && 0 < f.length && (r = 1, f += '\\x00');\n 0 < A * Y && H(0, f, c, d, D, z, p.length, h, a, h);\n z = 1;\n D++;\n break;\n\n case 59:\n case 125:\n if (0 === b + n + v + m) {\n z++;\n break;\n }\n\n default:\n z++;\n y = e.charAt(l);\n\n switch (g) {\n case 9:\n case 32:\n if (0 === n + m + b) switch (x) {\n case 44:\n case 58:\n case 9:\n case 32:\n y = '';\n break;\n\n default:\n 32 !== g && (y = ' ');\n }\n break;\n\n case 0:\n y = '\\\\0';\n break;\n\n case 12:\n y = '\\\\f';\n break;\n\n case 11:\n y = '\\\\v';\n break;\n\n case 38:\n 0 === n + b + m && (r = I = 1, y = '\\f' + y);\n break;\n\n case 108:\n if (0 === n + b + m + E && 0 < u) switch (l - u) {\n case 2:\n 112 === x && 58 === e.charCodeAt(l - 3) && (E = x);\n\n case 8:\n 111 === K && (E = K);\n }\n break;\n\n case 58:\n 0 === n + b + m && (u = l);\n break;\n\n case 44:\n 0 === b + v + n + m && (r = 1, y += '\\r');\n break;\n\n case 34:\n case 39:\n 0 === b && (n = n === g ? 0 : 0 === n ? g : n);\n break;\n\n case 91:\n 0 === n + b + v && m++;\n break;\n\n case 93:\n 0 === n + b + v && m--;\n break;\n\n case 41:\n 0 === n + b + m && v--;\n break;\n\n case 40:\n if (0 === n + b + m) {\n if (0 === q) switch (2 * x + 3 * K) {\n case 533:\n break;\n\n default:\n q = 1;\n }\n v++;\n }\n\n break;\n\n case 64:\n 0 === b + v + n + m + u + k && (k = 1);\n break;\n\n case 42:\n case 47:\n if (!(0 < n + m + v)) switch (b) {\n case 0:\n switch (2 * g + 3 * e.charCodeAt(l + 1)) {\n case 235:\n b = 47;\n break;\n\n case 220:\n t = l, b = 42;\n }\n\n break;\n\n case 42:\n 47 === g && 42 === x && t + 2 !== l && (33 === e.charCodeAt(t + 2) && (p += e.substring(t, l + 1)), y = '', b = 0);\n }\n }\n\n 0 === b && (f += y);\n }\n\n K = x;\n x = g;\n l++;\n }\n\n t = p.length;\n\n if (0 < t) {\n r = c;\n if (0 < A && (C = H(2, p, r, d, D, z, t, h, a, h), void 0 !== C && 0 === (p = C).length)) return G + p + F;\n p = r.join(',') + '{' + p + '}';\n\n if (0 !== w * E) {\n 2 !== w || L(p, 2) || (E = 0);\n\n switch (E) {\n case 111:\n p = p.replace(ha, ':-moz-$1') + p;\n break;\n\n case 112:\n p = p.replace(Q, '::-webkit-input-$1') + p.replace(Q, '::-moz-$1') + p.replace(Q, ':-ms-input-$1') + p;\n }\n\n E = 0;\n }\n }\n\n return G + p + F;\n }\n\n function X(d, c, e) {\n var h = c.trim().split(ia);\n c = h;\n var a = h.length,\n m = d.length;\n\n switch (m) {\n case 0:\n case 1:\n var b = 0;\n\n for (d = 0 === m ? '' : d[0] + ' '; b < a; ++b) {\n c[b] = Z(d, c[b], e).trim();\n }\n\n break;\n\n default:\n var v = b = 0;\n\n for (c = []; b < a; ++b) {\n for (var n = 0; n < m; ++n) {\n c[v++] = Z(d[n] + ' ', h[b], e).trim();\n }\n }\n\n }\n\n return c;\n }\n\n function Z(d, c, e) {\n var h = c.charCodeAt(0);\n 33 > h && (h = (c = c.trim()).charCodeAt(0));\n\n switch (h) {\n case 38:\n return c.replace(F, '$1' + d.trim());\n\n case 58:\n return d.trim() + c.replace(F, '$1' + d.trim());\n\n default:\n if (0 < 1 * e && 0 < c.indexOf('\\f')) return c.replace(F, (58 === d.charCodeAt(0) ? '' : '$1') + d.trim());\n }\n\n return d + c;\n }\n\n function P(d, c, e, h) {\n var a = d + ';',\n m = 2 * c + 3 * e + 4 * h;\n\n if (944 === m) {\n d = a.indexOf(':', 9) + 1;\n var b = a.substring(d, a.length - 1).trim();\n b = a.substring(0, d).trim() + b + ';';\n return 1 === w || 2 === w && L(b, 1) ? '-webkit-' + b + b : b;\n }\n\n if (0 === w || 2 === w && !L(a, 1)) return a;\n\n switch (m) {\n case 1015:\n return 97 === a.charCodeAt(10) ? '-webkit-' + a + a : a;\n\n case 951:\n return 116 === a.charCodeAt(3) ? '-webkit-' + a + a : a;\n\n case 963:\n return 110 === a.charCodeAt(5) ? '-webkit-' + a + a : a;\n\n case 1009:\n if (100 !== a.charCodeAt(4)) break;\n\n case 969:\n case 942:\n return '-webkit-' + a + a;\n\n case 978:\n return '-webkit-' + a + '-moz-' + a + a;\n\n case 1019:\n case 983:\n return '-webkit-' + a + '-moz-' + a + '-ms-' + a + a;\n\n case 883:\n if (45 === a.charCodeAt(8)) return '-webkit-' + a + a;\n if (0 < a.indexOf('image-set(', 11)) return a.replace(ja, '$1-webkit-$2') + a;\n break;\n\n case 932:\n if (45 === a.charCodeAt(4)) switch (a.charCodeAt(5)) {\n case 103:\n return '-webkit-box-' + a.replace('-grow', '') + '-webkit-' + a + '-ms-' + a.replace('grow', 'positive') + a;\n\n case 115:\n return '-webkit-' + a + '-ms-' + a.replace('shrink', 'negative') + a;\n\n case 98:\n return '-webkit-' + a + '-ms-' + a.replace('basis', 'preferred-size') + a;\n }\n return '-webkit-' + a + '-ms-' + a + a;\n\n case 964:\n return '-webkit-' + a + '-ms-flex-' + a + a;\n\n case 1023:\n if (99 !== a.charCodeAt(8)) break;\n b = a.substring(a.indexOf(':', 15)).replace('flex-', '').replace('space-between', 'justify');\n return '-webkit-box-pack' + b + '-webkit-' + a + '-ms-flex-pack' + b + a;\n\n case 1005:\n return ka.test(a) ? a.replace(aa, ':-webkit-') + a.replace(aa, ':-moz-') + a : a;\n\n case 1e3:\n b = a.substring(13).trim();\n c = b.indexOf('-') + 1;\n\n switch (b.charCodeAt(0) + b.charCodeAt(c)) {\n case 226:\n b = a.replace(G, 'tb');\n break;\n\n case 232:\n b = a.replace(G, 'tb-rl');\n break;\n\n case 220:\n b = a.replace(G, 'lr');\n break;\n\n default:\n return a;\n }\n\n return '-webkit-' + a + '-ms-' + b + a;\n\n case 1017:\n if (-1 === a.indexOf('sticky', 9)) break;\n\n case 975:\n c = (a = d).length - 10;\n b = (33 === a.charCodeAt(c) ? a.substring(0, c) : a).substring(d.indexOf(':', 7) + 1).trim();\n\n switch (m = b.charCodeAt(0) + (b.charCodeAt(7) | 0)) {\n case 203:\n if (111 > b.charCodeAt(8)) break;\n\n case 115:\n a = a.replace(b, '-webkit-' + b) + ';' + a;\n break;\n\n case 207:\n case 102:\n a = a.replace(b, '-webkit-' + (102 < m ? 'inline-' : '') + 'box') + ';' + a.replace(b, '-webkit-' + b) + ';' + a.replace(b, '-ms-' + b + 'box') + ';' + a;\n }\n\n return a + ';';\n\n case 938:\n if (45 === a.charCodeAt(5)) switch (a.charCodeAt(6)) {\n case 105:\n return b = a.replace('-items', ''), '-webkit-' + a + '-webkit-box-' + b + '-ms-flex-' + b + a;\n\n case 115:\n return '-webkit-' + a + '-ms-flex-item-' + a.replace(ba, '') + a;\n\n default:\n return '-webkit-' + a + '-ms-flex-line-pack' + a.replace('align-content', '').replace(ba, '') + a;\n }\n break;\n\n case 973:\n case 989:\n if (45 !== a.charCodeAt(3) || 122 === a.charCodeAt(4)) break;\n\n case 931:\n case 953:\n if (!0 === la.test(d)) return 115 === (b = d.substring(d.indexOf(':') + 1)).charCodeAt(0) ? P(d.replace('stretch', 'fill-available'), c, e, h).replace(':fill-available', ':stretch') : a.replace(b, '-webkit-' + b) + a.replace(b, '-moz-' + b.replace('fill-', '')) + a;\n break;\n\n case 962:\n if (a = '-webkit-' + a + (102 === a.charCodeAt(5) ? '-ms-' + a : '') + a, 211 === e + h && 105 === a.charCodeAt(13) && 0 < a.indexOf('transform', 10)) return a.substring(0, a.indexOf(';', 27) + 1).replace(ma, '$1-webkit-$2') + a;\n }\n\n return a;\n }\n\n function L(d, c) {\n var e = d.indexOf(1 === c ? ':' : '{'),\n h = d.substring(0, 3 !== c ? e : 10);\n e = d.substring(e + 1, d.length - 1);\n return R(2 !== c ? h : h.replace(na, '$1'), e, c);\n }\n\n function ea(d, c) {\n var e = P(c, c.charCodeAt(0), c.charCodeAt(1), c.charCodeAt(2));\n return e !== c + ';' ? e.replace(oa, ' or ($1)').substring(4) : '(' + c + ')';\n }\n\n function H(d, c, e, h, a, m, b, v, n, q) {\n for (var g = 0, x = c, w; g < A; ++g) {\n switch (w = S[g].call(B, d, x, e, h, a, m, b, v, n, q)) {\n case void 0:\n case !1:\n case !0:\n case null:\n break;\n\n default:\n x = w;\n }\n }\n\n if (x !== c) return x;\n }\n\n function T(d) {\n switch (d) {\n case void 0:\n case null:\n A = S.length = 0;\n break;\n\n default:\n if ('function' === typeof d) S[A++] = d;else if ('object' === typeof d) for (var c = 0, e = d.length; c < e; ++c) {\n T(d[c]);\n } else Y = !!d | 0;\n }\n\n return T;\n }\n\n function U(d) {\n d = d.prefix;\n void 0 !== d && (R = null, d ? 'function' !== typeof d ? w = 1 : (w = 2, R = d) : w = 0);\n return U;\n }\n\n function B(d, c) {\n var e = d;\n 33 > e.charCodeAt(0) && (e = e.trim());\n V = e;\n e = [V];\n\n if (0 < A) {\n var h = H(-1, c, e, e, D, z, 0, 0, 0, 0);\n void 0 !== h && 'string' === typeof h && (c = h);\n }\n\n var a = M(O, e, c, 0, 0);\n 0 < A && (h = H(-2, a, e, e, D, z, a.length, 0, 0, 0), void 0 !== h && (a = h));\n V = '';\n E = 0;\n z = D = 1;\n return a;\n }\n\n var ca = /^\\0+/g,\n N = /[\\0\\r\\f]/g,\n aa = /: */g,\n ka = /zoo|gra/,\n ma = /([,: ])(transform)/g,\n ia = /,\\r+?/g,\n F = /([\\t\\r\\n ])*\\f?&/g,\n fa = /@(k\\w+)\\s*(\\S*)\\s*/,\n Q = /::(place)/g,\n ha = /:(read-only)/g,\n G = /[svh]\\w+-[tblr]{2}/,\n da = /\\(\\s*(.*)\\s*\\)/g,\n oa = /([\\s\\S]*?);/g,\n ba = /-self|flex-/g,\n na = /[^]*?(:[rp][el]a[\\w-]+)[^]*/,\n la = /stretch|:\\s*\\w+\\-(?:conte|avail)/,\n ja = /([^-])(image-set\\()/,\n z = 1,\n D = 1,\n E = 0,\n w = 1,\n O = [],\n S = [],\n A = 0,\n R = null,\n Y = 0,\n V = '';\n B.use = T;\n B.set = U;\n void 0 !== W && U(W);\n return B;\n}\n\n/* harmony default export */ var stylis_browser_esm = (stylis_min);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js\nvar weak_memoize_browser_esm = __webpack_require__(\"../../node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js\");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/cache/dist/cache.browser.esm.js\n\n\n\n\n// https://github.com/thysultan/stylis.js/tree/master/plugins/rule-sheet\n// inlined to avoid umd wrapper and peerDep warnings/installing stylis\n// since we use stylis after closure compiler\nvar delimiter = '/*|*/';\nvar needle = delimiter + '}';\n\nfunction toSheet(block) {\n if (block) {\n Sheet.current.insert(block + '}');\n }\n}\n\nvar Sheet = {\n current: null\n};\nvar ruleSheet = function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {\n switch (context) {\n // property\n case 1:\n {\n switch (content.charCodeAt(0)) {\n case 64:\n {\n // @import\n Sheet.current.insert(content + ';');\n return '';\n }\n // charcode for l\n\n case 108:\n {\n // charcode for b\n // this ignores label\n if (content.charCodeAt(2) === 98) {\n return '';\n }\n }\n }\n\n break;\n }\n // selector\n\n case 2:\n {\n if (ns === 0) return content + delimiter;\n break;\n }\n // at-rule\n\n case 3:\n {\n switch (ns) {\n // @font-face, @page\n case 102:\n case 112:\n {\n Sheet.current.insert(selectors[0] + content);\n return '';\n }\n\n default:\n {\n return content + (at === 0 ? delimiter : '');\n }\n }\n }\n\n case -2:\n {\n content.split(needle).forEach(toSheet);\n }\n }\n};\n\nvar cache_browser_esm_createCache = function createCache(options) {\n if (options === undefined) options = {};\n var key = options.key || 'css';\n var stylisOptions;\n\n if (options.prefix !== undefined) {\n stylisOptions = {\n prefix: options.prefix\n };\n }\n\n var stylis = new stylis_browser_esm(stylisOptions);\n\n if (false) {}\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n\n {\n container = options.container || document.head;\n var nodes = document.querySelectorAll(\"style[data-emotion-\" + key + \"]\");\n Array.prototype.forEach.call(nodes, function (node) {\n var attrib = node.getAttribute(\"data-emotion-\" + key); // $FlowFixMe\n\n attrib.split(' ').forEach(function (id) {\n inserted[id] = true;\n });\n\n if (node.parentNode !== container) {\n container.appendChild(node);\n }\n });\n }\n\n var _insert;\n\n {\n stylis.use(options.stylisPlugins)(ruleSheet);\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n var name = serialized.name;\n Sheet.current = sheet;\n\n if (false) { var map; }\n\n stylis(selector, serialized.styles);\n\n if (shouldCache) {\n cache.inserted[name] = true;\n }\n };\n }\n\n if (false) { var commentEnd, commentStart; }\n\n var cache = {\n key: key,\n sheet: new sheet_browser_esm[\"a\" /* StyleSheet */]({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n return cache;\n};\n\n/* harmony default export */ var cache_browser_esm = __webpack_exports__[\"a\"] = (cache_browser_esm_createCache);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zdHlsaXMvZGlzdC9zdHlsaXMuYnJvd3Nlci5lc20uanM/ZWNiNiIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2NhY2hlLmJyb3dzZXIuZXNtLmpzPzFkMWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0EseUtBQXlLLE9BQU87QUFDaEw7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx5QkFBeUIsT0FBTztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxPQUFPO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QixrQ0FBa0M7QUFDMUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsVUFBVTtBQUN4Qzs7QUFFQTtBQUNBO0FBQ0EsOEJBQThCLFVBQVU7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsVUFBVTs7QUFFcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwyQ0FBMkMsT0FBTztBQUNs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O0FBRXpCLE1BQU0sS0FBcUMsRUFBRSxFQUsxQzs7QUFFSCxvQkFBb0I7O0FBRXBCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxLQUFxRSxFQUFFLFlBTzFFOztBQUVQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxLQUFxQyxFQUFFLGlDQThDMUM7O0FBRUg7QUFDQTtBQUNBLGVBQWUsdUNBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTs7QUFFZSw4R0FBVyxFQUFDIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jYWNoZS9kaXN0L2NhY2hlLmJyb3dzZXIuZXNtLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc3R5bGlzX21pbiAoVykge1xuICBmdW5jdGlvbiBNKGQsIGMsIGUsIGgsIGEpIHtcbiAgICBmb3IgKHZhciBtID0gMCwgYiA9IDAsIHYgPSAwLCBuID0gMCwgcSwgZywgeCA9IDAsIEsgPSAwLCBrLCB1ID0gayA9IHEgPSAwLCBsID0gMCwgciA9IDAsIEkgPSAwLCB0ID0gMCwgQiA9IGUubGVuZ3RoLCBKID0gQiAtIDEsIHksIGYgPSAnJywgcCA9ICcnLCBGID0gJycsIEcgPSAnJywgQzsgbCA8IEI7KSB7XG4gICAgICBnID0gZS5jaGFyQ29kZUF0KGwpO1xuICAgICAgbCA9PT0gSiAmJiAwICE9PSBiICsgbiArIHYgKyBtICYmICgwICE9PSBiICYmIChnID0gNDcgPT09IGIgPyAxMCA6IDQ3KSwgbiA9IHYgPSBtID0gMCwgQisrLCBKKyspO1xuXG4gICAgICBpZiAoMCA9PT0gYiArIG4gKyB2ICsgbSkge1xuICAgICAgICBpZiAobCA9PT0gSiAmJiAoMCA8IHIgJiYgKGYgPSBmLnJlcGxhY2UoTiwgJycpKSwgMCA8IGYudHJpbSgpLmxlbmd0aCkpIHtcbiAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBmICs9IGUuY2hhckF0KGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGcgPSA1OTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgICAgZiA9IGYudHJpbSgpO1xuICAgICAgICAgICAgcSA9IGYuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIGsgPSAxO1xuXG4gICAgICAgICAgICBmb3IgKHQgPSArK2w7IGwgPCBCOykge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGcgPSBlLmNoYXJDb2RlQXQobCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgICAgICAgICBrLS07XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKGcgPSBlLmNoYXJDb2RlQXQobCArIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gbCArIDE7IHUgPCBKOyArK3UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLmNoYXJDb2RlQXQodSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDQyID09PSBnICYmIDQyID09PSBlLmNoYXJDb2RlQXQodSAtIDEpICYmIGwgKyAyICE9PSB1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDQ3ID09PSBnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1O1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgICAgICBnKys7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgZysrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgZm9yICg7IGwrKyA8IEogJiYgZS5jaGFyQ29kZUF0KGwpICE9PSBnOykge1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoMCA9PT0gaykgYnJlYWs7XG4gICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgayA9IGUuc3Vic3RyaW5nKHQsIGwpO1xuICAgICAgICAgICAgMCA9PT0gcSAmJiAocSA9IChmID0gZi5yZXBsYWNlKGNhLCAnJykudHJpbSgpKS5jaGFyQ29kZUF0KDApKTtcblxuICAgICAgICAgICAgc3dpdGNoIChxKSB7XG4gICAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgICAgMCA8IHIgJiYgKGYgPSBmLnJlcGxhY2UoTiwgJycpKTtcbiAgICAgICAgICAgICAgICBnID0gZi5jaGFyQ29kZUF0KDEpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgICAgICAgICByID0gYztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHIgPSBPO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGsgPSBNKGMsIHIsIGssIGcsIGEgKyAxKTtcbiAgICAgICAgICAgICAgICB0ID0gay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgMCA8IEEgJiYgKHIgPSBYKE8sIGYsIEkpLCBDID0gSCgzLCBrLCByLCBjLCBELCB6LCB0LCBnLCBhLCBoKSwgZiA9IHIuam9pbignJyksIHZvaWQgMCAhPT0gQyAmJiAwID09PSAodCA9IChrID0gQy50cmltKCkpLmxlbmd0aCkgJiYgKGcgPSAwLCBrID0gJycpKTtcbiAgICAgICAgICAgICAgICBpZiAoMCA8IHQpIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICAgICAgICAgIGYgPSBmLnJlcGxhY2UoZGEsIGVhKTtcblxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgJ3snICsgayArICd9JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgICAgICAgICAgICBmID0gZi5yZXBsYWNlKGZhLCAnJDEgJDInKTtcbiAgICAgICAgICAgICAgICAgICAgayA9IGYgKyAneycgKyBrICsgJ30nO1xuICAgICAgICAgICAgICAgICAgICBrID0gMSA9PT0gdyB8fCAyID09PSB3ICYmIEwoJ0AnICsgaywgMykgPyAnQC13ZWJraXQtJyArIGsgKyAnQCcgKyBrIDogJ0AnICsgaztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgaywgMTEyID09PSBoICYmIChrID0gKHAgKz0gaywgJycpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgayA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgayA9IE0oYywgWChjLCBmLCBJKSwgaywgaCwgYSArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBGICs9IGs7XG4gICAgICAgICAgICBrID0gSSA9IHIgPSB1ID0gcSA9IDA7XG4gICAgICAgICAgICBmID0gJyc7XG4gICAgICAgICAgICBnID0gZS5jaGFyQ29kZUF0KCsrbCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBmID0gKDAgPCByID8gZi5yZXBsYWNlKE4sICcnKSA6IGYpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICgxIDwgKHQgPSBmLmxlbmd0aCkpIHN3aXRjaCAoMCA9PT0gdSAmJiAocSA9IGYuY2hhckNvZGVBdCgwKSwgNDUgPT09IHEgfHwgOTYgPCBxICYmIDEyMyA+IHEpICYmICh0ID0gKGYgPSBmLnJlcGxhY2UoJyAnLCAnOicpKS5sZW5ndGgpLCAwIDwgQSAmJiB2b2lkIDAgIT09IChDID0gSCgxLCBmLCBjLCBkLCBELCB6LCBwLmxlbmd0aCwgaCwgYSwgaCkpICYmIDAgPT09ICh0ID0gKGYgPSBDLnRyaW0oKSkubGVuZ3RoKSAmJiAoZiA9ICdcXHgwMFxceDAwJyksIHEgPSBmLmNoYXJDb2RlQXQoMCksIGcgPSBmLmNoYXJDb2RlQXQoMSksIHEpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgICAgaWYgKDEwNSA9PT0gZyB8fCA5OSA9PT0gZykge1xuICAgICAgICAgICAgICAgICAgRyArPSBmICsgZS5jaGFyQXQobCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICA1OCAhPT0gZi5jaGFyQ29kZUF0KHQgLSAxKSAmJiAocCArPSBQKGYsIHEsIGcsIGYuY2hhckNvZGVBdCgyKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSSA9IHIgPSB1ID0gcSA9IDA7XG4gICAgICAgICAgICBmID0gJyc7XG4gICAgICAgICAgICBnID0gZS5jaGFyQ29kZUF0KCsrbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgNDcgPT09IGIgPyBiID0gMCA6IDAgPT09IDEgKyBxICYmIDEwNyAhPT0gaCAmJiAwIDwgZi5sZW5ndGggJiYgKHIgPSAxLCBmICs9ICdcXHgwMCcpO1xuICAgICAgICAgIDAgPCBBICogWSAmJiBIKDAsIGYsIGMsIGQsIEQsIHosIHAubGVuZ3RoLCBoLCBhLCBoKTtcbiAgICAgICAgICB6ID0gMTtcbiAgICAgICAgICBEKys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgaWYgKDAgPT09IGIgKyBuICsgdiArIG0pIHtcbiAgICAgICAgICAgIHorKztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHorKztcbiAgICAgICAgICB5ID0gZS5jaGFyQXQobCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgbSArIGIpIHN3aXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAgIHkgPSAnJztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIDMyICE9PSBnICYmICh5ID0gJyAnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFwwJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXGYnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcdic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgKHIgPSBJID0gMSwgeSA9ICdcXGYnICsgeSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBiICsgbSArIEUgJiYgMCA8IHUpIHN3aXRjaCAobCAtIHUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAxMTIgPT09IHggJiYgNTggPT09IGUuY2hhckNvZGVBdChsIC0gMykgJiYgKEUgPSB4KTtcblxuICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgIDExMSA9PT0gSyAmJiAoRSA9IEspO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgKHUgPSBsKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgIDAgPT09IGIgKyB2ICsgbiArIG0gJiYgKHIgPSAxLCB5ICs9ICdcXHInKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAwID09PSBiICYmIChuID0gbiA9PT0gZyA/IDAgOiAwID09PSBuID8gZyA6IG4pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyB2ICYmIG0rKztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgdiAmJiBtLS07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgdi0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBiICsgbSkge1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBxKSBzd2l0Y2ggKDIgKiB4ICsgMyAqIEspIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTMzOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHYrKztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAwID09PSBiICsgdiArIG4gKyBtICsgdSArIGsgJiYgKGsgPSAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICBpZiAoISgwIDwgbiArIG0gKyB2KSkgc3dpdGNoIChiKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgc3dpdGNoICgyICogZyArIDMgKiBlLmNoYXJDb2RlQXQobCArIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjM1OlxuICAgICAgICAgICAgICAgICAgICAgIGIgPSA0NztcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIyMDpcbiAgICAgICAgICAgICAgICAgICAgICB0ID0gbCwgYiA9IDQyO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgICA0NyA9PT0gZyAmJiA0MiA9PT0geCAmJiB0ICsgMiAhPT0gbCAmJiAoMzMgPT09IGUuY2hhckNvZGVBdCh0ICsgMikgJiYgKHAgKz0gZS5zdWJzdHJpbmcodCwgbCArIDEpKSwgeSA9ICcnLCBiID0gMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAwID09PSBiICYmIChmICs9IHkpO1xuICAgICAgfVxuXG4gICAgICBLID0geDtcbiAgICAgIHggPSBnO1xuICAgICAgbCsrO1xuICAgIH1cblxuICAgIHQgPSBwLmxlbmd0aDtcblxuICAgIGlmICgwIDwgdCkge1xuICAgICAgciA9IGM7XG4gICAgICBpZiAoMCA8IEEgJiYgKEMgPSBIKDIsIHAsIHIsIGQsIEQsIHosIHQsIGgsIGEsIGgpLCB2b2lkIDAgIT09IEMgJiYgMCA9PT0gKHAgPSBDKS5sZW5ndGgpKSByZXR1cm4gRyArIHAgKyBGO1xuICAgICAgcCA9IHIuam9pbignLCcpICsgJ3snICsgcCArICd9JztcblxuICAgICAgaWYgKDAgIT09IHcgKiBFKSB7XG4gICAgICAgIDIgIT09IHcgfHwgTChwLCAyKSB8fCAoRSA9IDApO1xuXG4gICAgICAgIHN3aXRjaCAoRSkge1xuICAgICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgICAgcCA9IHAucmVwbGFjZShoYSwgJzotbW96LSQxJykgKyBwO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoUSwgJzo6LXdlYmtpdC1pbnB1dC0kMScpICsgcC5yZXBsYWNlKFEsICc6Oi1tb3otJDEnKSArIHAucmVwbGFjZShRLCAnOi1tcy1pbnB1dC0kMScpICsgcDtcbiAgICAgICAgfVxuXG4gICAgICAgIEUgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBHICsgcCArIEY7XG4gIH1cblxuICBmdW5jdGlvbiBYKGQsIGMsIGUpIHtcbiAgICB2YXIgaCA9IGMudHJpbSgpLnNwbGl0KGlhKTtcbiAgICBjID0gaDtcbiAgICB2YXIgYSA9IGgubGVuZ3RoLFxuICAgICAgICBtID0gZC5sZW5ndGg7XG5cbiAgICBzd2l0Y2ggKG0pIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIGIgPSAwO1xuXG4gICAgICAgIGZvciAoZCA9IDAgPT09IG0gPyAnJyA6IGRbMF0gKyAnICc7IGIgPCBhOyArK2IpIHtcbiAgICAgICAgICBjW2JdID0gWihkLCBjW2JdLCBlKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHYgPSBiID0gMDtcblxuICAgICAgICBmb3IgKGMgPSBbXTsgYiA8IGE7ICsrYikge1xuICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbTsgKytuKSB7XG4gICAgICAgICAgICBjW3YrK10gPSBaKGRbbl0gKyAnICcsIGhbYl0sIGUpLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZnVuY3Rpb24gWihkLCBjLCBlKSB7XG4gICAgdmFyIGggPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgMzMgPiBoICYmIChoID0gKGMgPSBjLnRyaW0oKSkuY2hhckNvZGVBdCgwKSk7XG5cbiAgICBzd2l0Y2ggKGgpIHtcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIHJldHVybiBjLnJlcGxhY2UoRiwgJyQxJyArIGQudHJpbSgpKTtcblxuICAgICAgY2FzZSA1ODpcbiAgICAgICAgcmV0dXJuIGQudHJpbSgpICsgYy5yZXBsYWNlKEYsICckMScgKyBkLnRyaW0oKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgwIDwgMSAqIGUgJiYgMCA8IGMuaW5kZXhPZignXFxmJykpIHJldHVybiBjLnJlcGxhY2UoRiwgKDU4ID09PSBkLmNoYXJDb2RlQXQoMCkgPyAnJyA6ICckMScpICsgZC50cmltKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBkICsgYztcbiAgfVxuXG4gIGZ1bmN0aW9uIFAoZCwgYywgZSwgaCkge1xuICAgIHZhciBhID0gZCArICc7JyxcbiAgICAgICAgbSA9IDIgKiBjICsgMyAqIGUgKyA0ICogaDtcblxuICAgIGlmICg5NDQgPT09IG0pIHtcbiAgICAgIGQgPSBhLmluZGV4T2YoJzonLCA5KSArIDE7XG4gICAgICB2YXIgYiA9IGEuc3Vic3RyaW5nKGQsIGEubGVuZ3RoIC0gMSkudHJpbSgpO1xuICAgICAgYiA9IGEuc3Vic3RyaW5nKDAsIGQpLnRyaW0oKSArIGIgKyAnOyc7XG4gICAgICByZXR1cm4gMSA9PT0gdyB8fCAyID09PSB3ICYmIEwoYiwgMSkgPyAnLXdlYmtpdC0nICsgYiArIGIgOiBiO1xuICAgIH1cblxuICAgIGlmICgwID09PSB3IHx8IDIgPT09IHcgJiYgIUwoYSwgMSkpIHJldHVybiBhO1xuXG4gICAgc3dpdGNoIChtKSB7XG4gICAgICBjYXNlIDEwMTU6XG4gICAgICAgIHJldHVybiA5NyA9PT0gYS5jaGFyQ29kZUF0KDEwKSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgOTUxOlxuICAgICAgICByZXR1cm4gMTE2ID09PSBhLmNoYXJDb2RlQXQoMykgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk2MzpcbiAgICAgICAgcmV0dXJuIDExMCA9PT0gYS5jaGFyQ29kZUF0KDUpID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSAxMDA5OlxuICAgICAgICBpZiAoMTAwICE9PSBhLmNoYXJDb2RlQXQoNCkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2OTpcbiAgICAgIGNhc2UgOTQyOlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDk3ODpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tb3otJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDEwMTk6XG4gICAgICBjYXNlIDk4MzpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tb3otJyArIGEgKyAnLW1zLScgKyBhICsgYTtcblxuICAgICAgY2FzZSA4ODM6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDgpKSByZXR1cm4gJy13ZWJraXQtJyArIGEgKyBhO1xuICAgICAgICBpZiAoMCA8IGEuaW5kZXhPZignaW1hZ2Utc2V0KCcsIDExKSkgcmV0dXJuIGEucmVwbGFjZShqYSwgJyQxLXdlYmtpdC0kMicpICsgYTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTMyOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg0KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNSkpIHtcbiAgICAgICAgICBjYXNlIDEwMzpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC1ib3gtJyArIGEucmVwbGFjZSgnLWdyb3cnLCAnJykgKyAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnZ3JvdycsICdwb3NpdGl2ZScpICsgYTtcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIGE7XG5cbiAgICAgICAgICBjYXNlIDk4OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgYTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhICsgYTtcblxuICAgICAgY2FzZSA5NjQ6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgMTAyMzpcbiAgICAgICAgaWYgKDk5ICE9PSBhLmNoYXJDb2RlQXQoOCkpIGJyZWFrO1xuICAgICAgICBiID0gYS5zdWJzdHJpbmcoYS5pbmRleE9mKCc6JywgMTUpKS5yZXBsYWNlKCdmbGV4LScsICcnKS5yZXBsYWNlKCdzcGFjZS1iZXR3ZWVuJywgJ2p1c3RpZnknKTtcbiAgICAgICAgcmV0dXJuICctd2Via2l0LWJveC1wYWNrJyArIGIgKyAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1wYWNrJyArIGIgKyBhO1xuXG4gICAgICBjYXNlIDEwMDU6XG4gICAgICAgIHJldHVybiBrYS50ZXN0KGEpID8gYS5yZXBsYWNlKGFhLCAnOi13ZWJraXQtJykgKyBhLnJlcGxhY2UoYWEsICc6LW1vei0nKSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDFlMzpcbiAgICAgICAgYiA9IGEuc3Vic3RyaW5nKDEzKS50cmltKCk7XG4gICAgICAgIGMgPSBiLmluZGV4T2YoJy0nKSArIDE7XG5cbiAgICAgICAgc3dpdGNoIChiLmNoYXJDb2RlQXQoMCkgKyBiLmNoYXJDb2RlQXQoYykpIHtcbiAgICAgICAgICBjYXNlIDIyNjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ3RiJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjMyOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAndGItcmwnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICdscicpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBiICsgYTtcblxuICAgICAgY2FzZSAxMDE3OlxuICAgICAgICBpZiAoLTEgPT09IGEuaW5kZXhPZignc3RpY2t5JywgOSkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3NTpcbiAgICAgICAgYyA9IChhID0gZCkubGVuZ3RoIC0gMTA7XG4gICAgICAgIGIgPSAoMzMgPT09IGEuY2hhckNvZGVBdChjKSA/IGEuc3Vic3RyaW5nKDAsIGMpIDogYSkuc3Vic3RyaW5nKGQuaW5kZXhPZignOicsIDcpICsgMSkudHJpbSgpO1xuXG4gICAgICAgIHN3aXRjaCAobSA9IGIuY2hhckNvZGVBdCgwKSArIChiLmNoYXJDb2RlQXQoNykgfCAwKSkge1xuICAgICAgICAgIGNhc2UgMjAzOlxuICAgICAgICAgICAgaWYgKDExMSA+IGIuY2hhckNvZGVBdCg4KSkgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIGEgPSBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgJzsnICsgYTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDc6XG4gICAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyAoMTAyIDwgbSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gnKSArICc7JyArIGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyAnOycgKyBhLnJlcGxhY2UoYiwgJy1tcy0nICsgYiArICdib3gnKSArICc7JyArIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYSArICc7JztcblxuICAgICAgY2FzZSA5Mzg6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDUpKSBzd2l0Y2ggKGEuY2hhckNvZGVBdCg2KSkge1xuICAgICAgICAgIGNhc2UgMTA1OlxuICAgICAgICAgICAgcmV0dXJuIGIgPSBhLnJlcGxhY2UoJy1pdGVtcycsICcnKSwgJy13ZWJraXQtJyArIGEgKyAnLXdlYmtpdC1ib3gtJyArIGIgKyAnLW1zLWZsZXgtJyArIGIgKyBhO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtaXRlbS0nICsgYS5yZXBsYWNlKGJhLCAnJykgKyBhO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1saW5lLXBhY2snICsgYS5yZXBsYWNlKCdhbGlnbi1jb250ZW50JywgJycpLnJlcGxhY2UoYmEsICcnKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTczOlxuICAgICAgY2FzZSA5ODk6XG4gICAgICAgIGlmICg0NSAhPT0gYS5jaGFyQ29kZUF0KDMpIHx8IDEyMiA9PT0gYS5jaGFyQ29kZUF0KDQpKSBicmVhaztcblxuICAgICAgY2FzZSA5MzE6XG4gICAgICBjYXNlIDk1MzpcbiAgICAgICAgaWYgKCEwID09PSBsYS50ZXN0KGQpKSByZXR1cm4gMTE1ID09PSAoYiA9IGQuc3Vic3RyaW5nKGQuaW5kZXhPZignOicpICsgMSkpLmNoYXJDb2RlQXQoMCkgPyBQKGQucmVwbGFjZSgnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBjLCBlLCBoKS5yZXBsYWNlKCc6ZmlsbC1hdmFpbGFibGUnLCAnOnN0cmV0Y2gnKSA6IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyBhLnJlcGxhY2UoYiwgJy1tb3otJyArIGIucmVwbGFjZSgnZmlsbC0nLCAnJykpICsgYTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTYyOlxuICAgICAgICBpZiAoYSA9ICctd2Via2l0LScgKyBhICsgKDEwMiA9PT0gYS5jaGFyQ29kZUF0KDUpID8gJy1tcy0nICsgYSA6ICcnKSArIGEsIDIxMSA9PT0gZSArIGggJiYgMTA1ID09PSBhLmNoYXJDb2RlQXQoMTMpICYmIDAgPCBhLmluZGV4T2YoJ3RyYW5zZm9ybScsIDEwKSkgcmV0dXJuIGEuc3Vic3RyaW5nKDAsIGEuaW5kZXhPZignOycsIDI3KSArIDEpLnJlcGxhY2UobWEsICckMS13ZWJraXQtJDInKSArIGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiBMKGQsIGMpIHtcbiAgICB2YXIgZSA9IGQuaW5kZXhPZigxID09PSBjID8gJzonIDogJ3snKSxcbiAgICAgICAgaCA9IGQuc3Vic3RyaW5nKDAsIDMgIT09IGMgPyBlIDogMTApO1xuICAgIGUgPSBkLnN1YnN0cmluZyhlICsgMSwgZC5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gUigyICE9PSBjID8gaCA6IGgucmVwbGFjZShuYSwgJyQxJyksIGUsIGMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZWEoZCwgYykge1xuICAgIHZhciBlID0gUChjLCBjLmNoYXJDb2RlQXQoMCksIGMuY2hhckNvZGVBdCgxKSwgYy5jaGFyQ29kZUF0KDIpKTtcbiAgICByZXR1cm4gZSAhPT0gYyArICc7JyA/IGUucmVwbGFjZShvYSwgJyBvciAoJDEpJykuc3Vic3RyaW5nKDQpIDogJygnICsgYyArICcpJztcbiAgfVxuXG4gIGZ1bmN0aW9uIEgoZCwgYywgZSwgaCwgYSwgbSwgYiwgdiwgbiwgcSkge1xuICAgIGZvciAodmFyIGcgPSAwLCB4ID0gYywgdzsgZyA8IEE7ICsrZykge1xuICAgICAgc3dpdGNoICh3ID0gU1tnXS5jYWxsKEIsIGQsIHgsIGUsIGgsIGEsIG0sIGIsIHYsIG4sIHEpKSB7XG4gICAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgICBjYXNlICExOlxuICAgICAgICBjYXNlICEwOlxuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB4ID0gdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoeCAhPT0gYykgcmV0dXJuIHg7XG4gIH1cblxuICBmdW5jdGlvbiBUKGQpIHtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgY2FzZSBudWxsOlxuICAgICAgICBBID0gUy5sZW5ndGggPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBkKSBTW0ErK10gPSBkO2Vsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgZCkgZm9yICh2YXIgYyA9IDAsIGUgPSBkLmxlbmd0aDsgYyA8IGU7ICsrYykge1xuICAgICAgICAgIFQoZFtjXSk7XG4gICAgICAgIH0gZWxzZSBZID0gISFkIHwgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gVDtcbiAgfVxuXG4gIGZ1bmN0aW9uIFUoZCkge1xuICAgIGQgPSBkLnByZWZpeDtcbiAgICB2b2lkIDAgIT09IGQgJiYgKFIgPSBudWxsLCBkID8gJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIGQgPyB3ID0gMSA6ICh3ID0gMiwgUiA9IGQpIDogdyA9IDApO1xuICAgIHJldHVybiBVO1xuICB9XG5cbiAgZnVuY3Rpb24gQihkLCBjKSB7XG4gICAgdmFyIGUgPSBkO1xuICAgIDMzID4gZS5jaGFyQ29kZUF0KDApICYmIChlID0gZS50cmltKCkpO1xuICAgIFYgPSBlO1xuICAgIGUgPSBbVl07XG5cbiAgICBpZiAoMCA8IEEpIHtcbiAgICAgIHZhciBoID0gSCgtMSwgYywgZSwgZSwgRCwgeiwgMCwgMCwgMCwgMCk7XG4gICAgICB2b2lkIDAgIT09IGggJiYgJ3N0cmluZycgPT09IHR5cGVvZiBoICYmIChjID0gaCk7XG4gICAgfVxuXG4gICAgdmFyIGEgPSBNKE8sIGUsIGMsIDAsIDApO1xuICAgIDAgPCBBICYmIChoID0gSCgtMiwgYSwgZSwgZSwgRCwgeiwgYS5sZW5ndGgsIDAsIDAsIDApLCB2b2lkIDAgIT09IGggJiYgKGEgPSBoKSk7XG4gICAgViA9ICcnO1xuICAgIEUgPSAwO1xuICAgIHogPSBEID0gMTtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBjYSA9IC9eXFwwKy9nLFxuICAgICAgTiA9IC9bXFwwXFxyXFxmXS9nLFxuICAgICAgYWEgPSAvOiAqL2csXG4gICAgICBrYSA9IC96b298Z3JhLyxcbiAgICAgIG1hID0gLyhbLDogXSkodHJhbnNmb3JtKS9nLFxuICAgICAgaWEgPSAvLFxccis/L2csXG4gICAgICBGID0gLyhbXFx0XFxyXFxuIF0pKlxcZj8mL2csXG4gICAgICBmYSA9IC9AKGtcXHcrKVxccyooXFxTKilcXHMqLyxcbiAgICAgIFEgPSAvOjoocGxhY2UpL2csXG4gICAgICBoYSA9IC86KHJlYWQtb25seSkvZyxcbiAgICAgIEcgPSAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sXG4gICAgICBkYSA9IC9cXChcXHMqKC4qKVxccypcXCkvZyxcbiAgICAgIG9hID0gLyhbXFxzXFxTXSo/KTsvZyxcbiAgICAgIGJhID0gLy1zZWxmfGZsZXgtL2csXG4gICAgICBuYSA9IC9bXl0qPyg6W3JwXVtlbF1hW1xcdy1dKylbXl0qLyxcbiAgICAgIGxhID0gL3N0cmV0Y2h8OlxccypcXHcrXFwtKD86Y29udGV8YXZhaWwpLyxcbiAgICAgIGphID0gLyhbXi1dKShpbWFnZS1zZXRcXCgpLyxcbiAgICAgIHogPSAxLFxuICAgICAgRCA9IDEsXG4gICAgICBFID0gMCxcbiAgICAgIHcgPSAxLFxuICAgICAgTyA9IFtdLFxuICAgICAgUyA9IFtdLFxuICAgICAgQSA9IDAsXG4gICAgICBSID0gbnVsbCxcbiAgICAgIFkgPSAwLFxuICAgICAgViA9ICcnO1xuICBCLnVzZSA9IFQ7XG4gIEIuc2V0ID0gVTtcbiAgdm9pZCAwICE9PSBXICYmIFUoVyk7XG4gIHJldHVybiBCO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsaXNfbWluO1xuIiwiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCBTdHlsaXMgZnJvbSAnQGVtb3Rpb24vc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoeXN1bHRhbi9zdHlsaXMuanMvdHJlZS9tYXN0ZXIvcGx1Z2lucy9ydWxlLXNoZWV0XG4vLyBpbmxpbmVkIHRvIGF2b2lkIHVtZCB3cmFwcGVyIGFuZCBwZWVyRGVwIHdhcm5pbmdzL2luc3RhbGxpbmcgc3R5bGlzXG4vLyBzaW5jZSB3ZSB1c2Ugc3R5bGlzIGFmdGVyIGNsb3N1cmUgY29tcGlsZXJcbnZhciBkZWxpbWl0ZXIgPSAnLyp8Ki8nO1xudmFyIG5lZWRsZSA9IGRlbGltaXRlciArICd9JztcblxuZnVuY3Rpb24gdG9TaGVldChibG9jaykge1xuICBpZiAoYmxvY2spIHtcbiAgICBTaGVldC5jdXJyZW50Lmluc2VydChibG9jayArICd9Jyk7XG4gIH1cbn1cblxudmFyIFNoZWV0ID0ge1xuICBjdXJyZW50OiBudWxsXG59O1xudmFyIHJ1bGVTaGVldCA9IGZ1bmN0aW9uIHJ1bGVTaGVldChjb250ZXh0LCBjb250ZW50LCBzZWxlY3RvcnMsIHBhcmVudHMsIGxpbmUsIGNvbHVtbiwgbGVuZ3RoLCBucywgZGVwdGgsIGF0KSB7XG4gIHN3aXRjaCAoY29udGV4dCkge1xuICAgIC8vIHByb3BlcnR5XG4gICAgY2FzZSAxOlxuICAgICAge1xuICAgICAgICBzd2l0Y2ggKGNvbnRlbnQuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIEBpbXBvcnRcbiAgICAgICAgICAgICAgU2hlZXQuY3VycmVudC5pbnNlcnQoY29udGVudCArICc7Jyk7XG4gICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjaGFyY29kZSBmb3IgbFxuXG4gICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgICAgICAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gc2VsZWN0b3JcblxuICAgIGNhc2UgMjpcbiAgICAgIHtcbiAgICAgICAgaWYgKG5zID09PSAwKSByZXR1cm4gY29udGVudCArIGRlbGltaXRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gYXQtcnVsZVxuXG4gICAgY2FzZSAzOlxuICAgICAge1xuICAgICAgICBzd2l0Y2ggKG5zKSB7XG4gICAgICAgICAgLy8gQGZvbnQtZmFjZSwgQHBhZ2VcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2hlZXQuY3VycmVudC5pbnNlcnQoc2VsZWN0b3JzWzBdICsgY29udGVudCk7XG4gICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50ICsgKGF0ID09PSAwID8gZGVsaW1pdGVyIDogJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBjYXNlIC0yOlxuICAgICAge1xuICAgICAgICBjb250ZW50LnNwbGl0KG5lZWRsZSkuZm9yRWFjaCh0b1NoZWV0KTtcbiAgICAgIH1cbiAgfVxufTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSBvcHRpb25zID0ge307XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleSB8fCAnY3NzJztcbiAgdmFyIHN0eWxpc09wdGlvbnM7XG5cbiAgaWYgKG9wdGlvbnMucHJlZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsaXNPcHRpb25zID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLnByZWZpeFxuICAgIH07XG4gIH1cblxuICB2YXIgc3R5bGlzID0gbmV3IFN0eWxpcyhzdHlsaXNPcHRpb25zKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307IC8vICRGbG93Rml4TWVcblxuICB2YXIgY29udGFpbmVyO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIHZhciBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb24tXCIgKyBrZXkgKyBcIl1cIik7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvbi1cIiArIGtleSk7IC8vICRGbG93Rml4TWVcblxuICAgICAgYXR0cmliLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgaW5zZXJ0ZWRbaWRdID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobm9kZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAge1xuICAgIHN0eWxpcy51c2Uob3B0aW9ucy5zdHlsaXNQbHVnaW5zKShydWxlU2hlZXQpO1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICB2YXIgbmFtZSA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICAgIFNoZWV0LmN1cnJlbnQgPSBzaGVldDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbWFwID0gc2VyaWFsaXplZC5tYXA7XG4gICAgICAgIFNoZWV0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0KHJ1bGUgKyBtYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3R5bGlzKHNlbGVjdG9yLCBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtuYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmY3MzcxYTRjZDdlNjAwOWVmNjFkMGFcbiAgICB2YXIgY29tbWVudFN0YXJ0ID0gL1xcL1xcKi9nO1xuICAgIHZhciBjb21tZW50RW5kID0gL1xcKlxcLy9nO1xuICAgIHN0eWxpcy51c2UoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRlbnQpIHtcbiAgICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdoaWxlIChjb21tZW50U3RhcnQudGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICBjb21tZW50RW5kLmxhc3RJbmRleCA9IGNvbW1lbnRTdGFydC5sYXN0SW5kZXg7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbW1lbnRFbmQudGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnRTdGFydC5sYXN0SW5kZXggPSBjb21tZW50RW5kLmxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91ciBzdHlsZXMgaGF2ZSBhbiB1bnRlcm1pbmF0ZWQgY29tbWVudCAoXCIvKlwiIHdpdGhvdXQgY29ycmVzcG9uZGluZyBcIiovXCIpLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb21tZW50U3RhcnQubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBzdHlsaXMudXNlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250ZW50LCBzZWxlY3RvcnMpIHtcbiAgICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmbGFnID0gJ2Vtb3Rpb24tZGlzYWJsZS1zZXJ2ZXItcmVuZGVyaW5nLXVuc2FmZS1zZWxlY3Rvci13YXJuaW5nLXBsZWFzZS1kby1ub3QtdXNlLXRoaXMtdGhlLXdhcm5pbmctZXhpc3RzLWZvci1hLXJlYXNvbic7XG4gICAgICAgICAgICB2YXIgdW5zYWZlUHNldWRvQ2xhc3NlcyA9IGNvbnRlbnQubWF0Y2goLyg6Zmlyc3R8Om50aHw6bnRoLWxhc3QpLWNoaWxkL2cpO1xuXG4gICAgICAgICAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3NlcyAmJiBjYWNoZS5jb21wYXQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICAgICAgICAgIHZhciBpZ25vcmVSZWdFeHAgPSBuZXcgUmVnRXhwKHVuc2FmZVBzZXVkb0NsYXNzICsgXCIuKlxcXFwvXFxcXCogXCIgKyBmbGFnICsgXCIgXFxcXCpcXFxcL1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgaWdub3JlID0gaWdub3JlUmVnRXhwLnRlc3QoY29udGVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3MgJiYgIWlnbm9yZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBwc2V1ZG8gY2xhc3MgXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3MgKyBcIlxcXCIgaXMgcG90ZW50aWFsbHkgdW5zYWZlIHdoZW4gZG9pbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBUcnkgY2hhbmdpbmcgaXQgdG8gXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3Muc3BsaXQoJy1jaGlsZCcpWzBdICsgXCItb2YtdHlwZVxcXCIuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeVxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2FjaGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/cache/dist/cache.browser.esm.js\n")},"../../node_modules/@emotion/css/dist/css.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/@emotion/serialize/dist/serialize.browser.esm.js");\n\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return Object(_emotion_serialize__WEBPACK_IMPORTED_MODULE_0__[/* serializeStyles */ "a"])(args);\n}\n\n/* harmony default export */ __webpack_exports__["a"] = (css);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvZGlzdC9jc3MuYnJvd3Nlci5lc20uanM/MWNmZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFxRDs7QUFFckQ7QUFDQSxxRUFBcUUsYUFBYTtBQUNsRjtBQUNBOztBQUVBLFNBQVMsa0ZBQWU7QUFDeEI7O0FBRWUsNERBQUcsRUFBQyIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvY3NzLmJyb3dzZXIuZXNtLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3NzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/css/dist/css.browser.esm.js\n')},"../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/@emotion/memoize/dist/memoize.browser.esm.js");\n\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = Object(_emotion_memoize__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\n/* harmony default export */ __webpack_exports__["a"] = (index);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL2Rpc3QvaXMtcHJvcC12YWxpZC5icm93c2VyLmVzbS5qcz9iMGE0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQXVDOztBQUV2QyxrN0hBQWs3SDs7QUFFbDdILFlBQVksd0VBQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZSw4REFBSyxFQUFDIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkL2Rpc3QvaXMtcHJvcC12YWxpZC5icm93c2VyLmVzbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgcmVhY3RQcm9wc1JlZ2V4ID0gL14oKGNoaWxkcmVufGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfGtleXxyZWZ8YXV0b0ZvY3VzfGRlZmF1bHRWYWx1ZXxkZWZhdWx0Q2hlY2tlZHxpbm5lckhUTUx8c3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nfHN1cHByZXNzSHlkcmF0aW9uV2FybmluZ3x2YWx1ZUxpbmt8YWNjZXB0fGFjY2VwdENoYXJzZXR8YWNjZXNzS2V5fGFjdGlvbnxhbGxvd3xhbGxvd1VzZXJNZWRpYXxhbGxvd1BheW1lbnRSZXF1ZXN0fGFsbG93RnVsbFNjcmVlbnxhbGxvd1RyYW5zcGFyZW5jeXxhbHR8YXN5bmN8YXV0b0NvbXBsZXRlfGF1dG9QbGF5fGNhcHR1cmV8Y2VsbFBhZGRpbmd8Y2VsbFNwYWNpbmd8Y2hhbGxlbmdlfGNoYXJTZXR8Y2hlY2tlZHxjaXRlfGNsYXNzSUR8Y2xhc3NOYW1lfGNvbHN8Y29sU3Bhbnxjb250ZW50fGNvbnRlbnRFZGl0YWJsZXxjb250ZXh0TWVudXxjb250cm9sc3xjb250cm9sc0xpc3R8Y29vcmRzfGNyb3NzT3JpZ2lufGRhdGF8ZGF0ZVRpbWV8ZGVjb2Rpbmd8ZGVmYXVsdHxkZWZlcnxkaXJ8ZGlzYWJsZWR8ZGlzYWJsZVBpY3R1cmVJblBpY3R1cmV8ZG93bmxvYWR8ZHJhZ2dhYmxlfGVuY1R5cGV8Zm9ybXxmb3JtQWN0aW9ufGZvcm1FbmNUeXBlfGZvcm1NZXRob2R8Zm9ybU5vVmFsaWRhdGV8Zm9ybVRhcmdldHxmcmFtZUJvcmRlcnxoZWFkZXJzfGhlaWdodHxoaWRkZW58aGlnaHxocmVmfGhyZWZMYW5nfGh0bWxGb3J8aHR0cEVxdWl2fGlkfGlucHV0TW9kZXxpbnRlZ3JpdHl8aXN8a2V5UGFyYW1zfGtleVR5cGV8a2luZHxsYWJlbHxsYW5nfGxpc3R8bG9hZGluZ3xsb29wfGxvd3xtYXJnaW5IZWlnaHR8bWFyZ2luV2lkdGh8bWF4fG1heExlbmd0aHxtZWRpYXxtZWRpYUdyb3VwfG1ldGhvZHxtaW58bWluTGVuZ3RofG11bHRpcGxlfG11dGVkfG5hbWV8bm9uY2V8bm9WYWxpZGF0ZXxvcGVufG9wdGltdW18cGF0dGVybnxwbGFjZWhvbGRlcnxwbGF5c0lubGluZXxwb3N0ZXJ8cHJlbG9hZHxwcm9maWxlfHJhZGlvR3JvdXB8cmVhZE9ubHl8cmVmZXJyZXJQb2xpY3l8cmVsfHJlcXVpcmVkfHJldmVyc2VkfHJvbGV8cm93c3xyb3dTcGFufHNhbmRib3h8c2NvcGV8c2NvcGVkfHNjcm9sbGluZ3xzZWFtbGVzc3xzZWxlY3RlZHxzaGFwZXxzaXplfHNpemVzfHNsb3R8c3BhbnxzcGVsbENoZWNrfHNyY3xzcmNEb2N8c3JjTGFuZ3xzcmNTZXR8c3RhcnR8c3RlcHxzdHlsZXxzdW1tYXJ5fHRhYkluZGV4fHRhcmdldHx0aXRsZXx0eXBlfHVzZU1hcHx2YWx1ZXx3aWR0aHx3bW9kZXx3cmFwfGFib3V0fGRhdGF0eXBlfGlubGlzdHxwcmVmaXh8cHJvcGVydHl8cmVzb3VyY2V8dHlwZW9mfHZvY2FifGF1dG9DYXBpdGFsaXplfGF1dG9Db3JyZWN0fGF1dG9TYXZlfGNvbG9yfGluZXJ0fGl0ZW1Qcm9wfGl0ZW1TY29wZXxpdGVtVHlwZXxpdGVtSUR8aXRlbVJlZnxvbnxyZXN1bHRzfHNlY3VyaXR5fHVuc2VsZWN0YWJsZXxhY2NlbnRIZWlnaHR8YWNjdW11bGF0ZXxhZGRpdGl2ZXxhbGlnbm1lbnRCYXNlbGluZXxhbGxvd1Jlb3JkZXJ8YWxwaGFiZXRpY3xhbXBsaXR1ZGV8YXJhYmljRm9ybXxhc2NlbnR8YXR0cmlidXRlTmFtZXxhdHRyaWJ1dGVUeXBlfGF1dG9SZXZlcnNlfGF6aW11dGh8YmFzZUZyZXF1ZW5jeXxiYXNlbGluZVNoaWZ0fGJhc2VQcm9maWxlfGJib3h8YmVnaW58Ymlhc3xieXxjYWxjTW9kZXxjYXBIZWlnaHR8Y2xpcHxjbGlwUGF0aFVuaXRzfGNsaXBQYXRofGNsaXBSdWxlfGNvbG9ySW50ZXJwb2xhdGlvbnxjb2xvckludGVycG9sYXRpb25GaWx0ZXJzfGNvbG9yUHJvZmlsZXxjb2xvclJlbmRlcmluZ3xjb250ZW50U2NyaXB0VHlwZXxjb250ZW50U3R5bGVUeXBlfGN1cnNvcnxjeHxjeXxkfGRlY2VsZXJhdGV8ZGVzY2VudHxkaWZmdXNlQ29uc3RhbnR8ZGlyZWN0aW9ufGRpc3BsYXl8ZGl2aXNvcnxkb21pbmFudEJhc2VsaW5lfGR1cnxkeHxkeXxlZGdlTW9kZXxlbGV2YXRpb258ZW5hYmxlQmFja2dyb3VuZHxlbmR8ZXhwb25lbnR8ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZHxmaWxsfGZpbGxPcGFjaXR5fGZpbGxSdWxlfGZpbHRlcnxmaWx0ZXJSZXN8ZmlsdGVyVW5pdHN8Zmxvb2RDb2xvcnxmbG9vZE9wYWNpdHl8Zm9jdXNhYmxlfGZvbnRGYW1pbHl8Zm9udFNpemV8Zm9udFNpemVBZGp1c3R8Zm9udFN0cmV0Y2h8Zm9udFN0eWxlfGZvbnRWYXJpYW50fGZvbnRXZWlnaHR8Zm9ybWF0fGZyb218ZnJ8Znh8Znl8ZzF8ZzJ8Z2x5cGhOYW1lfGdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsfGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbHxnbHlwaFJlZnxncmFkaWVudFRyYW5zZm9ybXxncmFkaWVudFVuaXRzfGhhbmdpbmd8aG9yaXpBZHZYfGhvcml6T3JpZ2luWHxpZGVvZ3JhcGhpY3xpbWFnZVJlbmRlcmluZ3xpbnxpbjJ8aW50ZXJjZXB0fGt8azF8azJ8azN8azR8a2VybmVsTWF0cml4fGtlcm5lbFVuaXRMZW5ndGh8a2VybmluZ3xrZXlQb2ludHN8a2V5U3BsaW5lc3xrZXlUaW1lc3xsZW5ndGhBZGp1c3R8bGV0dGVyU3BhY2luZ3xsaWdodGluZ0NvbG9yfGxpbWl0aW5nQ29uZUFuZ2xlfGxvY2FsfG1hcmtlckVuZHxtYXJrZXJNaWR8bWFya2VyU3RhcnR8bWFya2VySGVpZ2h0fG1hcmtlclVuaXRzfG1hcmtlcldpZHRofG1hc2t8bWFza0NvbnRlbnRVbml0c3xtYXNrVW5pdHN8bWF0aGVtYXRpY2FsfG1vZGV8bnVtT2N0YXZlc3xvZmZzZXR8b3BhY2l0eXxvcGVyYXRvcnxvcmRlcnxvcmllbnR8b3JpZW50YXRpb258b3JpZ2lufG92ZXJmbG93fG92ZXJsaW5lUG9zaXRpb258b3ZlcmxpbmVUaGlja25lc3N8cGFub3NlMXxwYWludE9yZGVyfHBhdGhMZW5ndGh8cGF0dGVybkNvbnRlbnRVbml0c3xwYXR0ZXJuVHJhbnNmb3JtfHBhdHRlcm5Vbml0c3xwb2ludGVyRXZlbnRzfHBvaW50c3xwb2ludHNBdFh8cG9pbnRzQXRZfHBvaW50c0F0WnxwcmVzZXJ2ZUFscGhhfHByZXNlcnZlQXNwZWN0UmF0aW98cHJpbWl0aXZlVW5pdHN8cnxyYWRpdXN8cmVmWHxyZWZZfHJlbmRlcmluZ0ludGVudHxyZXBlYXRDb3VudHxyZXBlYXREdXJ8cmVxdWlyZWRFeHRlbnNpb25zfHJlcXVpcmVkRmVhdHVyZXN8cmVzdGFydHxyZXN1bHR8cm90YXRlfHJ4fHJ5fHNjYWxlfHNlZWR8c2hhcGVSZW5kZXJpbmd8c2xvcGV8c3BhY2luZ3xzcGVjdWxhckNvbnN0YW50fHNwZWN1bGFyRXhwb25lbnR8c3BlZWR8c3ByZWFkTWV0aG9kfHN0YXJ0T2Zmc2V0fHN0ZERldmlhdGlvbnxzdGVtaHxzdGVtdnxzdGl0Y2hUaWxlc3xzdG9wQ29sb3J8c3RvcE9wYWNpdHl8c3RyaWtldGhyb3VnaFBvc2l0aW9ufHN0cmlrZXRocm91Z2hUaGlja25lc3N8c3RyaW5nfHN0cm9rZXxzdHJva2VEYXNoYXJyYXl8c3Ryb2tlRGFzaG9mZnNldHxzdHJva2VMaW5lY2FwfHN0cm9rZUxpbmVqb2lufHN0cm9rZU1pdGVybGltaXR8c3Ryb2tlT3BhY2l0eXxzdHJva2VXaWR0aHxzdXJmYWNlU2NhbGV8c3lzdGVtTGFuZ3VhZ2V8dGFibGVWYWx1ZXN8dGFyZ2V0WHx0YXJnZXRZfHRleHRBbmNob3J8dGV4dERlY29yYXRpb258dGV4dFJlbmRlcmluZ3x0ZXh0TGVuZ3RofHRvfHRyYW5zZm9ybXx1MXx1Mnx1bmRlcmxpbmVQb3NpdGlvbnx1bmRlcmxpbmVUaGlja25lc3N8dW5pY29kZXx1bmljb2RlQmlkaXx1bmljb2RlUmFuZ2V8dW5pdHNQZXJFbXx2QWxwaGFiZXRpY3x2SGFuZ2luZ3x2SWRlb2dyYXBoaWN8dk1hdGhlbWF0aWNhbHx2YWx1ZXN8dmVjdG9yRWZmZWN0fHZlcnNpb258dmVydEFkdll8dmVydE9yaWdpblh8dmVydE9yaWdpbll8dmlld0JveHx2aWV3VGFyZ2V0fHZpc2liaWxpdHl8d2lkdGhzfHdvcmRTcGFjaW5nfHdyaXRpbmdNb2RlfHh8eEhlaWdodHx4MXx4Mnx4Q2hhbm5lbFNlbGVjdG9yfHhsaW5rQWN0dWF0ZXx4bGlua0FyY3JvbGV8eGxpbmtIcmVmfHhsaW5rUm9sZXx4bGlua1Nob3d8eGxpbmtUaXRsZXx4bGlua1R5cGV8eG1sQmFzZXx4bWxuc3x4bWxuc1hsaW5rfHhtbExhbmd8eG1sU3BhY2V8eXx5MXx5Mnx5Q2hhbm5lbFNlbGVjdG9yfHp8em9vbUFuZFBhbnxmb3J8Y2xhc3N8YXV0b2ZvY3VzKXwoKFtEZF1bQWFdW1R0XVtBYV18W0FhXVtScl1bSWldW0FhXXx4KS0uKikpJC87IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWJmZWU2OGE0Y2Q3ZTYwMDllZjYxZDIzXG5cbnZhciBpbmRleCA9IG1lbW9pemUoZnVuY3Rpb24gKHByb3ApIHtcbiAgcmV0dXJuIHJlYWN0UHJvcHNSZWdleC50ZXN0KHByb3ApIHx8IHByb3AuY2hhckNvZGVBdCgwKSA9PT0gMTExXG4gIC8qIG8gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDEpID09PSAxMTBcbiAgLyogbiAqL1xuICAmJiBwcm9wLmNoYXJDb2RlQXQoMikgPCA5MTtcbn1cbi8qIForMSAqL1xuKTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js\n')},"../../node_modules/@emotion/memoize/dist/memoize.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\n/* harmony default export */ __webpack_exports__["a"] = (memoize);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvbWVtb2l6ZS5icm93c2VyLmVzbS5qcz9lNGVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlLGdFQUFPLEVBQUMiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL21lbW9pemUvZGlzdC9tZW1vaXplLmJyb3dzZXIuZXNtLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICByZXR1cm4gY2FjaGVbYXJnXTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/memoize/dist/memoize.browser.esm.js\n')},"../../node_modules/@emotion/serialize/dist/serialize.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, \"a\", function() { return /* binding */ serialize_browser_esm_serializeStyles; });\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/hash/dist/hash.browser.esm.js\n/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\n/* harmony default export */ var hash_browser_esm = (murmur2);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/unitless/dist/unitless.browser.esm.js\nvar unitless_browser_esm = __webpack_require__(\"../../node_modules/@emotion/unitless/dist/unitless.browser.esm.js\");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/memoize/dist/memoize.browser.esm.js\nvar memoize_browser_esm = __webpack_require__(\"../../node_modules/@emotion/memoize/dist/memoize.browser.esm.js\");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@emotion/serialize/dist/serialize.browser.esm.js\n\n\n\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = Object(memoize_browser_esm[\"a\" /* default */])(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar serialize_browser_esm_processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless_browser_esm[\"a\" /* default */][key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (false) { var hyphenatedCache, hyphenPattern, msPattern, oldProcessStyleValue, contentValues, contentValuePattern; }\n\nvar shouldWarnAboutInterpolatingClassNameFromCss = true;\n\nfunction handleInterpolation(mergedProps, registered, interpolation, couldBeSelectorInterpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (false) {}\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (false) {}\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result, couldBeSelectorInterpolation);\n } else if (false) {}\n\n break;\n }\n\n case 'string':\n if (false) { var replaced, matched; }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n\n if (false) {}\n\n return cached !== undefined && !couldBeSelectorInterpolation ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i], false);\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + serialize_browser_esm_processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && \"production\" !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with babel-plugin-emotion.');\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + serialize_browser_esm_processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value, false);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (false) {}\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*;/g;\nvar sourceMapPattern;\n\nif (false) {} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serialize_browser_esm_serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings, false);\n } else {\n if (false) {}\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i], styles.charCodeAt(styles.length - 1) === 46);\n\n if (stringMode) {\n if (false) {}\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (false) {} // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hash_browser_esm(styles) + identifierName;\n\n if (false) {}\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9oYXNoL2Rpc3QvaGFzaC5icm93c2VyLmVzbS5qcz8xM2IwIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L3NlcmlhbGl6ZS5icm93c2VyLmVzbS5qcz9mOTk1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7O0FBRUEsUUFBUSxVQUFVO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZSw0REFBTyxFQUFDOzs7Ozs7Ozs7QUN0RGdCO0FBQ0U7QUFDRjs7QUFFdkMsZ1JBQWdSLHVDQUF1QztBQUN2VDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsOENBQU87QUFDOUI7QUFDQSxDQUFDOztBQUVELElBQUksdUNBQWlCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsTUFBTSx1Q0FBUTtBQUNkO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxJQUFJLEtBQXFDLEVBQUUsNEdBMEIxQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsS0FBNkYsRUFBRSxFQUVsRzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0RBQWdEOztBQUVoRCxjQUFjLEtBQXdFLEVBQUUsRUFFN0U7O0FBRVg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxVQUFVLEtBQXFDLEVBQUUsRUFFakQ7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBLFVBQVUsS0FBcUMsRUFBRSwwQkFXMUM7O0FBRVA7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsTUFBTSxLQUE2SSxFQUFFLEVBR2xKOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkIsMEJBQTBCO0FBQ3ZELFNBQVM7QUFDVCxtREFBbUQsdUNBQWlCLGtCQUFrQjtBQUN0RjtBQUNBLE9BQU87QUFDUCxnREFBZ0QsWUFBb0I7QUFDcEU7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQixtQkFBbUI7QUFDN0M7QUFDQSx1REFBdUQsdUNBQWlCLHNCQUFzQjtBQUM5RjtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixLQUE2RCxFQUFFLEVBRWxFOztBQUVqQixtQ0FBbUMscUJBQXFCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1DQUFtQyxHQUFHLE9BQU87QUFDN0M7O0FBRUEsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0Q7OztBQUdBO0FBQ0EsSUFBSSxxQ0FBZTtBQUNuQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILFFBQVEsS0FBaUUsRUFBRSxFQUV0RTs7QUFFTDtBQUNBLEdBQUc7OztBQUdILGlCQUFpQixpQkFBaUI7QUFDbEM7O0FBRUE7QUFDQSxVQUFVLEtBQWlFLEVBQUUsRUFFdEU7O0FBRVA7QUFDQTtBQUNBOztBQUVBOztBQUVBLE1BQU0sS0FBcUMsRUFBRSxFQUsxQzs7O0FBR0g7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsYUFBYSxnQkFBVTs7QUFFdkIsTUFBTSxLQUFxQyxFQUFFLEVBVzFDOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFMkIiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3NlcmlhbGl6ZS9kaXN0L3NlcmlhbGl6ZS5icm93c2VyLmVzbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtdXJtdXIyO1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUiA9IFwiWW91IGhhdmUgaWxsZWdhbCBlc2NhcGUgc2VxdWVuY2UgaW4geW91ciB0ZW1wbGF0ZSBsaXRlcmFsLCBtb3N0IGxpa2VseSBpbnNpZGUgY29udGVudCdzIHByb3BlcnR5IHZhbHVlLlxcbkJlY2F1c2UgeW91IHdyaXRlIHlvdXIgQ1NTIGluc2lkZSBhIEphdmFTY3JpcHQgc3RyaW5nIHlvdSBhY3R1YWxseSBoYXZlIHRvIGRvIGRvdWJsZSBlc2NhcGluZywgc28gZm9yIGV4YW1wbGUgXFxcImNvbnRlbnQ6ICdcXFxcMDBkNyc7XFxcIiBzaG91bGQgYmVjb21lIFxcXCJjb250ZW50OiAnXFxcXFxcXFwwMGQ3JztcXFwiLlxcbllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRoaXMgaGVyZTpcXG5odHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9UZW1wbGF0ZV9saXRlcmFscyNFUzIwMThfcmV2aXNpb25fb2ZfaWxsZWdhbF9lc2NhcGVfc2VxdWVuY2VzXCI7XG52YXIgVU5ERUZJTkVEX0FTX09CSkVDVF9LRVlfRVJST1IgPSBcIllvdSBoYXZlIHBhc3NlZCBpbiBmYWxzeSB2YWx1ZSBhcyBzdHlsZSBvYmplY3QncyBrZXkgKGNhbiBoYXBwZW4gd2hlbiBpbiBleGFtcGxlIHlvdSBwYXNzIHVuZXhwb3J0ZWQgY29tcG9uZW50IGFzIGNvbXB1dGVkIGtleSkuXCI7XG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IG1lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNvbnRlbnRWYWx1ZVBhdHRlcm4gPSAvKGF0dHJ8Y2FsY3xjb3VudGVycz98dXJsKVxcKC87XG4gIHZhciBjb250ZW50VmFsdWVzID0gWydub3JtYWwnLCAnbm9uZScsICdjb3VudGVyJywgJ29wZW4tcXVvdGUnLCAnY2xvc2UtcXVvdGUnLCAnbm8tb3Blbi1xdW90ZScsICduby1jbG9zZS1xdW90ZScsICdpbml0aWFsJywgJ2luaGVyaXQnLCAndW5zZXQnXTtcbiAgdmFyIG9sZFByb2Nlc3NTdHlsZVZhbHVlID0gcHJvY2Vzc1N0eWxlVmFsdWU7XG4gIHZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuICB2YXIgaHlwaGVuUGF0dGVybiA9IC8tKC4pL2c7XG4gIHZhciBoeXBoZW5hdGVkQ2FjaGUgPSB7fTtcblxuICBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBpZiAoa2V5ID09PSAnY29udGVudCcpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IGNvbnRlbnRWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xICYmICFjb250ZW50VmFsdWVQYXR0ZXJuLnRlc3QodmFsdWUpICYmICh2YWx1ZS5jaGFyQXQoMCkgIT09IHZhbHVlLmNoYXJBdCh2YWx1ZS5sZW5ndGggLSAxKSB8fCB2YWx1ZS5jaGFyQXQoMCkgIT09ICdcIicgJiYgdmFsdWUuY2hhckF0KDApICE9PSBcIidcIikpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIllvdSBzZWVtIHRvIGJlIHVzaW5nIGEgdmFsdWUgZm9yICdjb250ZW50JyB3aXRob3V0IHF1b3RlcywgdHJ5IHJlcGxhY2luZyBpdCB3aXRoIGBjb250ZW50OiAnXFxcIlwiICsgdmFsdWUgKyBcIlxcXCInYFwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvY2Vzc2VkID0gb2xkUHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSk7XG5cbiAgICBpZiAocHJvY2Vzc2VkICE9PSAnJyAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIGtleS5pbmRleE9mKCctJykgIT09IC0xICYmIGh5cGhlbmF0ZWRDYWNoZVtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGh5cGhlbmF0ZWRDYWNoZVtrZXldID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJVc2luZyBrZWJhYi1jYXNlIGZvciBjc3MgcHJvcGVydGllcyBpbiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQuIERpZCB5b3UgbWVhbiBcIiArIGtleS5yZXBsYWNlKG1zUGF0dGVybiwgJ21zLScpLnJlcGxhY2UoaHlwaGVuUGF0dGVybiwgZnVuY3Rpb24gKHN0ciwgX2NoYXIpIHtcbiAgICAgICAgcmV0dXJuIF9jaGFyLnRvVXBwZXJDYXNlKCk7XG4gICAgICB9KSArIFwiP1wiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9O1xufVxuXG52YXIgc2hvdWxkV2FybkFib3V0SW50ZXJwb2xhdGluZ0NsYXNzTmFtZUZyb21Dc3MgPSB0cnVlO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uLCBjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoaW50ZXJwb2xhdGlvbi5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLnRvU3RyaW5nKCkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJhYmVsLXBsdWdpbi1lbW90aW9uLicpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnBvbGF0aW9uO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgaW50ZXJwb2xhdGlvbikge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAge1xuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZTogaW50ZXJwb2xhdGlvbi5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBpbnRlcnBvbGF0aW9uLnN0eWxlcyxcbiAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIGludGVycG9sYXRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcnBvbGF0aW9uLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBpbnRlcnBvbGF0aW9uLm5leHQ7XG5cbiAgICAgICAgICBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHRoaW5nIGV2ZXIgYnV0IHRoaXMgaXMgYSBwcmV0dHkgcmFyZSBjYXNlXG4gICAgICAgICAgICAvLyBhbmQgdGhlcmUgd2lsbCBiZSB2ZXJ5IGZldyBpdGVyYXRpb25zIG9mIHRoaXMgZ2VuZXJhbGx5XG4gICAgICAgICAgICB3aGlsZSAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuZXh0Lm5hbWUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuZXh0LnN0eWxlcyxcbiAgICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc3R5bGVzID0gaW50ZXJwb2xhdGlvbi5zdHlsZXMgKyBcIjtcIjtcblxuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGludGVycG9sYXRpb24ubWFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN0eWxlcyArPSBpbnRlcnBvbGF0aW9uLm1hcDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAge1xuICAgICAgICBpZiAobWVyZ2VkUHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBwcmV2aW91c0N1cnNvciA9IGN1cnNvcjtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgY3Vyc29yID0gcHJldmlvdXNDdXJzb3I7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHJlc3VsdCwgY291bGRCZVNlbGVjdG9ySW50ZXJwb2xhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Z1bmN0aW9ucyB0aGF0IGFyZSBpbnRlcnBvbGF0ZWQgaW4gY3NzIGNhbGxzIHdpbGwgYmUgc3RyaW5naWZpZWQuXFxuJyArICdJZiB5b3Ugd2FudCB0byBoYXZlIGEgY3NzIGNhbGwgYmFzZWQgb24gcHJvcHMsIGNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGNzcyBjYWxsIGxpa2UgdGhpc1xcbicgKyAnbGV0IGR5bmFtaWNTdHlsZSA9IChwcm9wcykgPT4gY3NzYGNvbG9yOiAke3Byb3BzLmNvbG9yfWBcXG4nICsgJ0l0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgd2l0aCBwcm9wcyBvciBpbnRlcnBvbGF0ZWQgaW4gYSBzdHlsZWQgY2FsbCBsaWtlIHRoaXNcXG4nICsgXCJsZXQgU29tZUNvbXBvbmVudCA9IHN0eWxlZCgnZGl2JylgJHtkeW5hbWljU3R5bGV9YFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gW107XG4gICAgICAgIHZhciByZXBsYWNlZCA9IGludGVycG9sYXRpb24ucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICB2YXIgZmFrZVZhck5hbWUgPSBcImFuaW1hdGlvblwiICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKFwiY29uc3QgXCIgKyBmYWtlVmFyTmFtZSArIFwiID0ga2V5ZnJhbWVzYFwiICsgcDIucmVwbGFjZSgvXkBrZXlmcmFtZXMgYW5pbWF0aW9uLVxcdysvLCAnJykgKyBcImBcIik7XG4gICAgICAgICAgcmV0dXJuIFwiJHtcIiArIGZha2VWYXJOYW1lICsgXCJ9XCI7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2BrZXlmcmFtZXNgIG91dHB1dCBnb3QgaW50ZXJwb2xhdGVkIGludG8gcGxhaW4gc3RyaW5nLCBwbGVhc2Ugd3JhcCBpdCB3aXRoIGBjc3NgLlxcblxcbicgKyAnSW5zdGVhZCBvZiBkb2luZyB0aGlzOlxcblxcbicgKyBbXS5jb25jYXQobWF0Y2hlZCwgW1wiYFwiICsgcmVwbGFjZWQgKyBcImBcIl0pLmpvaW4oJ1xcbicpICsgJ1xcblxcbllvdSBzaG91bGQgd3JhcCBpdCB3aXRoIGBjc3NgIGxpa2UgdGhpczpcXG5cXG4nICsgKFwiY3NzYFwiICsgcmVwbGFjZWQgKyBcImBcIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIGlmIChyZWdpc3RlcmVkID09IG51bGwpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2ludGVycG9sYXRpb25dO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24gJiYgc2hvdWxkV2FybkFib3V0SW50ZXJwb2xhdGluZ0NsYXNzTmFtZUZyb21Dc3MgJiYgY2FjaGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLmVycm9yKCdJbnRlcnBvbGF0aW5nIGEgY2xhc3NOYW1lIGZyb20gY3NzYGAgaXMgbm90IHJlY29tbWVuZGVkIGFuZCB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGggY29tcG9zaXRpb24uXFxuJyArICdJbnRlcnBvbGF0aW5nIGEgY2xhc3NOYW1lIGZyb20gY3NzYGAgd2lsbCBiZSBjb21wbGV0ZWx5IHVuc3VwcG9ydGVkIGluIGEgZnV0dXJlIG1ham9yIHZlcnNpb24gb2YgRW1vdGlvbicpO1xuICAgIHNob3VsZFdhcm5BYm91dEludGVycG9sYXRpbmdDbGFzc05hbWVGcm9tQ3NzID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgJiYgIWNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24gPyBjYWNoZWQgOiBpbnRlcnBvbGF0aW9uO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmopIHtcbiAgdmFyIHN0cmluZyA9ICcnO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgc3RyaW5nICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9ialtpXSwgZmFsc2UpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIG9iaikge1xuICAgICAgdmFyIHZhbHVlID0gb2JqW19rZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbdmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgcmVnaXN0ZXJlZFt2YWx1ZV0gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKF9rZXksIHZhbHVlKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoX2tleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYmFiZWwtcGx1Z2luLWVtb3Rpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZVtfaV0pICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCB2YWx1ZSwgZmFsc2UpO1xuXG4gICAgICAgICAgc3dpdGNoIChfa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb24nOlxuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIF9rZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdHJpbmcgKz0gX2tleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7XFxue10rKVxccyo7L2c7XG52YXIgc291cmNlTWFwUGF0dGVybjtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgc291cmNlTWFwUGF0dGVybiA9IC9cXC9cXCojXFxzc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjtcXFMrXFxzK1xcKlxcLy87XG59IC8vIHRoaXMgaXMgdGhlIGN1cnNvciBmb3Iga2V5ZnJhbWVzXG4vLyBrZXlmcmFtZXMgYXJlIHN0b3JlZCBvbiB0aGUgU2VyaWFsaXplZFN0eWxlcyBvYmplY3QgYXMgYSBsaW5rZWQgbGlzdFxuXG5cbnZhciBjdXJzb3I7XG52YXIgc2VyaWFsaXplU3R5bGVzID0gZnVuY3Rpb24gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIHJlZ2lzdGVyZWQsIG1lcmdlZFByb3BzKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ29iamVjdCcgJiYgYXJnc1swXSAhPT0gbnVsbCAmJiBhcmdzWzBdLnN0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyZ3NbMF07XG4gIH1cblxuICB2YXIgc3RyaW5nTW9kZSA9IHRydWU7XG4gIHZhciBzdHlsZXMgPSAnJztcbiAgY3Vyc29yID0gdW5kZWZpbmVkO1xuICB2YXIgc3RyaW5ncyA9IGFyZ3NbMF07XG5cbiAgaWYgKHN0cmluZ3MgPT0gbnVsbCB8fCBzdHJpbmdzLnJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RyaW5nTW9kZSA9IGZhbHNlO1xuICAgIHN0eWxlcyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBzdHJpbmdzLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RyaW5nc1swXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICB9XG5cbiAgICBzdHlsZXMgKz0gc3RyaW5nc1swXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSwgc3R5bGVzLmNoYXJDb2RlQXQoc3R5bGVzLmxlbmd0aCAtIDEpID09PSA0Nik7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc3RyaW5nc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICBzdHlsZXMgKz0gc3RyaW5nc1tpXTtcbiAgICB9XG4gIH1cblxuICB2YXIgc291cmNlTWFwO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgc3R5bGVzID0gc3R5bGVzLnJlcGxhY2Uoc291cmNlTWFwUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICBzb3VyY2VNYXAgPSBtYXRjaDtcbiAgICAgIHJldHVybiAnJztcbiAgICB9KTtcbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyAvLyAkRmxvd0ZpeE1lIHdlIGtub3cgaXQncyBub3QgbnVsbFxuICAgIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWUgU2VyaWFsaXplZFN0eWxlcyB0eXBlIGRvZXNuJ3QgaGF2ZSB0b1N0cmluZyBwcm9wZXJ0eSAoYW5kIHdlIGRvbid0IHdhbnQgdG8gYWRkIGl0KVxuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgICBtYXA6IHNvdXJjZU1hcCxcbiAgICAgIG5leHQ6IGN1cnNvcixcbiAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIFwiWW91IGhhdmUgdHJpZWQgdG8gc3RyaW5naWZ5IG9iamVjdCByZXR1cm5lZCBmcm9tIGBjc3NgIGZ1bmN0aW9uLiBJdCBpc24ndCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5IChlLmcuIGFzIHZhbHVlIG9mIHRoZSBgY2xhc3NOYW1lYCBwcm9wKSwgYnV0IHJhdGhlciBoYW5kZWQgdG8gZW1vdGlvbiBzbyBpdCBjYW4gaGFuZGxlIGl0IChlLmcuIGFzIHZhbHVlIG9mIGBjc3NgIHByb3ApLlwiO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59O1xuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/serialize/dist/serialize.browser.esm.js\n")},"../../node_modules/@emotion/sheet/dist/sheet.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return StyleSheet; });\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n return tag;\n}\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n function StyleSheet(options) {\n this.isSpeedy = options.speedy === undefined ? \"production\" === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n var _tag = createStyleElement(this);\n\n var before;\n\n if (this.tags.length === 0) {\n before = this.before;\n } else {\n before = this.tags[this.tags.length - 1].nextSibling;\n }\n\n this.container.insertBefore(_tag, before);\n this.tags.push(_tag);\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is a really hot path\n // we check the second character first because having \"i\"\n // as the second character will happen less often than\n // having \"@\" as the first character\n var isImportRule = rule.charCodeAt(1) === 105 && rule.charCodeAt(0) === 64; // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n\n sheet.insertRule(rule, // we need to insert @import rules before anything else\n // otherwise there will be an error\n // technically this means that the @import rules will\n // _usually_(not always since there could be multiple style tags)\n // be the first ones in prod and generally later in dev\n // this shouldn't really matter in the real world though\n // @import is generally only used for font faces from google fonts and etc.\n // so while this could be technically correct then it would be slower and larger\n // for a tiny bit of correctness that won't matter in the real world\n isImportRule ? 0 : sheet.cssRules.length);\n } catch (e) {\n if (false) {}\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n };\n\n return StyleSheet;\n}();\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L3NoZWV0LmJyb3dzZXIuZXNtLmpzP2ExYzQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLFFBQVEsYUFBYTs7QUFFckIsaUNBQWlDLG9DQUFvQzs7QUFFckUseUJBQXlCLHVCQUF1QixFQUFFO0FBQ2xEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7O0FBR0EsaUJBQWlCLGlDQUFpQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsWUFBb0I7QUFDdkU7QUFDQTtBQUNBLCtCQUErQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUZBQW1GO0FBQ25GOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLFlBQVksS0FBcUMsRUFBRSxFQUUxQztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVxQiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2hlZXQvZGlzdC9zaGVldC5icm93c2VyLmVzbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5cbkJhc2VkIG9mZiBnbGFtb3IncyBTdHlsZVNoZWV0LCB0aGFua3MgU3VuaWwg4p2k77iPXG5cbmhpZ2ggcGVyZm9ybWFuY2UgU3R5bGVTaGVldCBmb3IgY3NzLWluLWpzIHN5c3RlbXNcblxuLSB1c2VzIG11bHRpcGxlIHN0eWxlIHRhZ3MgYmVoaW5kIHRoZSBzY2VuZXMgZm9yIG1pbGxpb25zIG9mIHJ1bGVzXG4tIHVzZXMgYGluc2VydFJ1bGVgIGZvciBhcHBlbmRpbmcgaW4gcHJvZHVjdGlvbiBmb3IgKm11Y2gqIGZhc3RlciBwZXJmb3JtYW5jZVxuXG4vLyB1c2FnZVxuXG5pbXBvcnQgeyBTdHlsZVNoZWV0IH0gZnJvbSAnQGVtb3Rpb24vc2hlZXQnXG5cbmxldCBzdHlsZVNoZWV0ID0gbmV3IFN0eWxlU2hlZXQoeyBrZXk6ICcnLCBjb250YWluZXI6IGRvY3VtZW50LmhlYWQgfSlcblxuc3R5bGVTaGVldC5pbnNlcnQoJyNib3ggeyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IH0nKVxuLSBhcHBlbmRzIGEgY3NzIHJ1bGUgaW50byB0aGUgc3R5bGVzaGVldFxuXG5zdHlsZVNoZWV0LmZsdXNoKClcbi0gZW1wdGllcyB0aGUgc3R5bGVzaGVldCBvZiBhbGwgaXRzIGNvbnRlbnRzXG5cbiovXG4vLyAkRmxvd0ZpeE1lXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID1cbi8qI19fUFVSRV9fKi9cbmZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nIDogb3B0aW9ucy5zcGVlZHk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICAgIHRoaXMubm9uY2UgPSBvcHRpb25zLm5vbmNlOyAvLyBrZXkgaXMgdGhlIHZhbHVlIG9mIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlLCBpdCdzIHVzZWQgdG8gaWRlbnRpZnkgZGlmZmVyZW50IHNoZWV0c1xuXG4gICAgdGhpcy5rZXkgPSBvcHRpb25zLmtleTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG9wdGlvbnMuY29udGFpbmVyO1xuICAgIHRoaXMuYmVmb3JlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdHlsZVNoZWV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB2YXIgX3RhZyA9IGNyZWF0ZVN0eWxlRWxlbWVudCh0aGlzKTtcblxuICAgICAgdmFyIGJlZm9yZTtcblxuICAgICAgaWYgKHRoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYmVmb3JlID0gdGhpcy5iZWZvcmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoX3RhZywgYmVmb3JlKTtcbiAgICAgIHRoaXMudGFncy5wdXNoKF90YWcpO1xuICAgIH1cblxuICAgIHZhciB0YWcgPSB0aGlzLnRhZ3NbdGhpcy50YWdzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKHRoaXMuaXNTcGVlZHkpIHtcbiAgICAgIHZhciBzaGVldCA9IHNoZWV0Rm9yVGFnKHRhZyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYSByZWFsbHkgaG90IHBhdGhcbiAgICAgICAgLy8gd2UgY2hlY2sgdGhlIHNlY29uZCBjaGFyYWN0ZXIgZmlyc3QgYmVjYXVzZSBoYXZpbmcgXCJpXCJcbiAgICAgICAgLy8gYXMgdGhlIHNlY29uZCBjaGFyYWN0ZXIgd2lsbCBoYXBwZW4gbGVzcyBvZnRlbiB0aGFuXG4gICAgICAgIC8vIGhhdmluZyBcIkBcIiBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgICAgIHZhciBpc0ltcG9ydFJ1bGUgPSBydWxlLmNoYXJDb2RlQXQoMSkgPT09IDEwNSAmJiBydWxlLmNoYXJDb2RlQXQoMCkgPT09IDY0OyAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG5cbiAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZShydWxlLCAvLyB3ZSBuZWVkIHRvIGluc2VydCBAaW1wb3J0IHJ1bGVzIGJlZm9yZSBhbnl0aGluZyBlbHNlXG4gICAgICAgIC8vIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGFuIGVycm9yXG4gICAgICAgIC8vIHRlY2huaWNhbGx5IHRoaXMgbWVhbnMgdGhhdCB0aGUgQGltcG9ydCBydWxlcyB3aWxsXG4gICAgICAgIC8vIF91c3VhbGx5Xyhub3QgYWx3YXlzIHNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIHN0eWxlIHRhZ3MpXG4gICAgICAgIC8vIGJlIHRoZSBmaXJzdCBvbmVzIGluIHByb2QgYW5kIGdlbmVyYWxseSBsYXRlciBpbiBkZXZcbiAgICAgICAgLy8gdGhpcyBzaG91bGRuJ3QgcmVhbGx5IG1hdHRlciBpbiB0aGUgcmVhbCB3b3JsZCB0aG91Z2hcbiAgICAgICAgLy8gQGltcG9ydCBpcyBnZW5lcmFsbHkgb25seSB1c2VkIGZvciBmb250IGZhY2VzIGZyb20gZ29vZ2xlIGZvbnRzIGFuZCBldGMuXG4gICAgICAgIC8vIHNvIHdoaWxlIHRoaXMgY291bGQgYmUgdGVjaG5pY2FsbHkgY29ycmVjdCB0aGVuIGl0IHdvdWxkIGJlIHNsb3dlciBhbmQgbGFyZ2VyXG4gICAgICAgIC8vIGZvciBhIHRpbnkgYml0IG9mIGNvcnJlY3RuZXNzIHRoYXQgd29uJ3QgbWF0dGVyIGluIHRoZSByZWFsIHdvcmxkXG4gICAgICAgIGlzSW1wb3J0UnVsZSA/IDAgOiBzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcIlRoZXJlIHdhcyBhIHByb2JsZW0gaW5zZXJ0aW5nIHRoZSBmb2xsb3dpbmcgcnVsZTogXFxcIlwiICsgcnVsZSArIFwiXFxcIlwiLCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocnVsZSkpO1xuICAgIH1cblxuICAgIHRoaXMuY3RyKys7XG4gIH07XG5cbiAgX3Byb3RvLmZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHJldHVybiB0YWcucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YWcpO1xuICAgIH0pO1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgfTtcblxuICByZXR1cm4gU3R5bGVTaGVldDtcbn0oKTtcblxuZXhwb3J0IHsgU3R5bGVTaGVldCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/sheet/dist/sheet.browser.esm.js\n")},"../../node_modules/@emotion/unitless/dist/unitless.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\n/* harmony default export */ __webpack_exports__["a"] = (unitlessKeys);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L3VuaXRsZXNzLmJyb3dzZXIuZXNtLmpzP2IyYTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlLHFFQUFZLEVBQUMiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3VuaXRsZXNzL2Rpc3QvdW5pdGxlc3MuYnJvd3Nlci5lc20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgdGFiU2l6ZTogMSxcbiAgd2lkb3dzOiAxLFxuICB6SW5kZXg6IDEsXG4gIHpvb206IDEsXG4gIFdlYmtpdExpbmVDbGFtcDogMSxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMSxcbiAgZmxvb2RPcGFjaXR5OiAxLFxuICBzdG9wT3BhY2l0eTogMSxcbiAgc3Ryb2tlRGFzaGFycmF5OiAxLFxuICBzdHJva2VEYXNob2Zmc2V0OiAxLFxuICBzdHJva2VNaXRlcmxpbWl0OiAxLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXaWR0aDogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdW5pdGxlc3NLZXlzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/unitless/dist/unitless.browser.esm.js\n')},"../../node_modules/@emotion/utils/dist/utils.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return getRegisteredStyles; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return insertStyles; });\nvar isBrowser = "object" !== \'undefined\';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = \'\';\n classNames.split(\' \').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className]);\n } else {\n rawClassName += className + " ";\n }\n });\n return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + "-" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it\'s a string tag, we know it won\'t\n // so we don\'t have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we\'re in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false && cache.compat !== undefined) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert("." + className, current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91dGlscy9kaXN0L3V0aWxzLmJyb3dzZXIuZXNtLmpzPzEwNDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFNkMiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL3V0aWxzL2Rpc3QvdXRpbHMuYnJvd3Nlci5lc20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaXNCcm93c2VyID0gXCJvYmplY3RcIiAhPT0gJ3VuZGVmaW5lZCc7XG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmF3Q2xhc3NOYW1lICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByYXdDbGFzc05hbWU7XG59XG52YXIgaW5zZXJ0U3R5bGVzID0gZnVuY3Rpb24gaW5zZXJ0U3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICYmIGNhY2hlLmNvbXBhdCAhPT0gdW5kZWZpbmVkKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG5cbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBjdXJyZW50ID0gc2VyaWFsaXplZDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBtYXliZVN0eWxlcyA9IGNhY2hlLmluc2VydChcIi5cIiArIGNsYXNzTmFtZSwgY3VycmVudCwgY2FjaGUuc2hlZXQsIHRydWUpO1xuXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0O1xuICAgIH0gd2hpbGUgKGN1cnJlbnQgIT09IHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbmV4cG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcyB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/utils/dist/utils.browser.esm.js\n')},"../../node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('var weakMemoize = function weakMemoize(func) {\n // $FlowFixMe flow doesn\'t include all non-primitive types as allowed for weakmaps\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // $FlowFixMe\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\n/* harmony default export */ __webpack_exports__["a"] = (weakMemoize);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AZW1vdGlvbi93ZWFrLW1lbW9pemUvZGlzdC93ZWFrLW1lbW9pemUuYnJvd3Nlci5lc20uanM/ODkxMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWUsb0VBQVcsRUFBQyIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3Qvd2Vhay1tZW1vaXplLmJyb3dzZXIuZXNtLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHdlYWtNZW1vaXplID0gZnVuY3Rpb24gd2Vha01lbW9pemUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lIGZsb3cgZG9lc24ndCBpbmNsdWRlIGFsbCBub24tcHJpbWl0aXZlIHR5cGVzIGFzIGFsbG93ZWQgZm9yIHdlYWttYXBzXG4gIHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGFyZyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IGZ1bmMoYXJnKTtcbiAgICBjYWNoZS5zZXQoYXJnLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3ZWFrTWVtb2l6ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js\n')},"../../node_modules/@mdx-js/react/dist/esm.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* unused harmony export MDXContext */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MDXProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return createElement; });\n/* unused harmony export useMDXComponents */\n/* unused harmony export withMDXComponents */\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("./node_modules/react/index.js");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\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(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 _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\nvar isFunction = function isFunction(obj) {\n return typeof obj === \'function\';\n};\n\nvar MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext({});\nvar withMDXComponents = function withMDXComponents(Component) {\n return function (props) {\n var allComponents = useMDXComponents(props.components);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Component, _extends({}, props, {\n components: allComponents\n }));\n };\n};\nvar useMDXComponents = function useMDXComponents(components) {\n var contextComponents = react__WEBPACK_IMPORTED_MODULE_0___default.a.useContext(MDXContext);\n var allComponents = contextComponents;\n\n if (components) {\n allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);\n }\n\n return allComponents;\n};\nvar MDXProvider = function MDXProvider(props) {\n var allComponents = useMDXComponents(props.components);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(MDXContext.Provider, {\n value: allComponents\n }, props.children);\n};\n\nvar TYPE_PROP_NAME = \'mdxType\';\nvar DEFAULTS = {\n inlineCode: \'code\',\n wrapper: function wrapper(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, {}, children);\n }\n};\nvar MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.forwardRef(function (props, ref) {\n var propComponents = props.components,\n mdxType = props.mdxType,\n originalType = props.originalType,\n parentName = props.parentName,\n etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);\n\n var components = useMDXComponents(propComponents);\n var type = mdxType;\n var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;\n\n if (propComponents) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Component, _objectSpread2(_objectSpread2({\n ref: ref\n }, etc), {}, {\n components: propComponents\n }));\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Component, _objectSpread2({\n ref: ref\n }, etc));\n});\nMDXCreateElement.displayName = \'MDXCreateElement\';\nfunction createElement (type, props) {\n var args = arguments;\n var mdxType = props && props.mdxType;\n\n if (typeof type === \'string\' || mdxType) {\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = MDXCreateElement;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.originalType = type;\n newProps[TYPE_PROP_NAME] = typeof type === \'string\' ? type : mdxType;\n createElementArgArray[1] = newProps;\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement.apply(null, createElementArgArray);\n }\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement.apply(null, args);\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AbWR4LWpzL3JlYWN0L2Rpc3QvZXNtLmpzPzljNGMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMEI7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixzQkFBc0I7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGFBQWEsdUJBQXVCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsNkJBQTZCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEIsNENBQUssaUJBQWlCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qiw0Q0FBSyxxQ0FBcUM7QUFDbEU7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDRDQUFLO0FBQy9COztBQUVBO0FBQ0EsNkdBQTZHO0FBQzdHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDRDQUFLO0FBQzNCO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNENBQUssZUFBZSw0Q0FBSyxhQUFhO0FBQzlEO0FBQ0E7QUFDQSxvQ0FBb0MsNENBQUs7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3QkFBd0IsNENBQUs7QUFDN0I7QUFDQSxLQUFLLFVBQVU7QUFDZjtBQUNBLEtBQUs7QUFDTDs7QUFFQSxzQkFBc0IsNENBQUs7QUFDM0I7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBOztBQUVBLFdBQVcsNENBQUs7QUFDaEI7O0FBRUEsU0FBUyw0Q0FBSztBQUNkOztBQUU4RiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQG1keC1qcy9yZWFjdC9kaXN0L2VzbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XG59O1xuXG52YXIgTURYQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbnZhciB3aXRoTURYQ29tcG9uZW50cyA9IGZ1bmN0aW9uIHdpdGhNRFhDb21wb25lbnRzKENvbXBvbmVudCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGFsbENvbXBvbmVudHMgPSB1c2VNRFhDb21wb25lbnRzKHByb3BzLmNvbXBvbmVudHMpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgY29tcG9uZW50czogYWxsQ29tcG9uZW50c1xuICAgIH0pKTtcbiAgfTtcbn07XG52YXIgdXNlTURYQ29tcG9uZW50cyA9IGZ1bmN0aW9uIHVzZU1EWENvbXBvbmVudHMoY29tcG9uZW50cykge1xuICB2YXIgY29udGV4dENvbXBvbmVudHMgPSBSZWFjdC51c2VDb250ZXh0KE1EWENvbnRleHQpO1xuICB2YXIgYWxsQ29tcG9uZW50cyA9IGNvbnRleHRDb21wb25lbnRzO1xuXG4gIGlmIChjb21wb25lbnRzKSB7XG4gICAgYWxsQ29tcG9uZW50cyA9IGlzRnVuY3Rpb24oY29tcG9uZW50cykgPyBjb21wb25lbnRzKGNvbnRleHRDb21wb25lbnRzKSA6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250ZXh0Q29tcG9uZW50cyksIGNvbXBvbmVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENvbXBvbmVudHM7XG59O1xudmFyIE1EWFByb3ZpZGVyID0gZnVuY3Rpb24gTURYUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIGFsbENvbXBvbmVudHMgPSB1c2VNRFhDb21wb25lbnRzKHByb3BzLmNvbXBvbmVudHMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTURYQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBhbGxDb21wb25lbnRzXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5cbnZhciBUWVBFX1BST1BfTkFNRSA9ICdtZHhUeXBlJztcbnZhciBERUZBVUxUUyA9IHtcbiAgaW5saW5lQ29kZTogJ2NvZGUnLFxuICB3cmFwcGVyOiBmdW5jdGlvbiB3cmFwcGVyKF9yZWYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwge30sIGNoaWxkcmVuKTtcbiAgfVxufTtcbnZhciBNRFhDcmVhdGVFbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByb3BDb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICAgIG1keFR5cGUgPSBwcm9wcy5tZHhUeXBlLFxuICAgICAgb3JpZ2luYWxUeXBlID0gcHJvcHMub3JpZ2luYWxUeXBlLFxuICAgICAgcGFyZW50TmFtZSA9IHByb3BzLnBhcmVudE5hbWUsXG4gICAgICBldGMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImNvbXBvbmVudHNcIiwgXCJtZHhUeXBlXCIsIFwib3JpZ2luYWxUeXBlXCIsIFwicGFyZW50TmFtZVwiXSk7XG5cbiAgdmFyIGNvbXBvbmVudHMgPSB1c2VNRFhDb21wb25lbnRzKHByb3BDb21wb25lbnRzKTtcbiAgdmFyIHR5cGUgPSBtZHhUeXBlO1xuICB2YXIgQ29tcG9uZW50ID0gY29tcG9uZW50c1tcIlwiLmNvbmNhdChwYXJlbnROYW1lLCBcIi5cIikuY29uY2F0KHR5cGUpXSB8fCBjb21wb25lbnRzW3R5cGVdIHx8IERFRkFVTFRTW3R5cGVdIHx8IG9yaWdpbmFsVHlwZTtcblxuICBpZiAocHJvcENvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7XG4gICAgICByZWY6IHJlZlxuICAgIH0sIGV0YyksIHt9LCB7XG4gICAgICBjb21wb25lbnRzOiBwcm9wQ29tcG9uZW50c1xuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9vYmplY3RTcHJlYWQyKHtcbiAgICByZWY6IHJlZlxuICB9LCBldGMpKTtcbn0pO1xuTURYQ3JlYXRlRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdNRFhDcmVhdGVFbGVtZW50JztcbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQgKHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbWR4VHlwZSA9IHByb3BzICYmIHByb3BzLm1keFR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCBtZHhUeXBlKSB7XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICAgIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IE1EWENyZWF0ZUVsZW1lbnQ7XG4gICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5ld1Byb3BzLm9yaWdpbmFsVHlwZSA9IHR5cGU7XG4gICAgbmV3UHJvcHNbVFlQRV9QUk9QX05BTUVdID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZSA6IG1keFR5cGU7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzFdID0gbmV3UHJvcHM7XG5cbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3NMZW5ndGg7IGkrKykge1xuICAgICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgYXJncyk7XG59XG5cbmV4cG9ydCB7IE1EWENvbnRleHQsIE1EWFByb3ZpZGVyLCBjcmVhdGVFbGVtZW50IGFzIG1keCwgdXNlTURYQ29tcG9uZW50cywgd2l0aE1EWENvbXBvbmVudHMgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@mdx-js/react/dist/esm.js\n')},"../../node_modules/@popperjs/core/lib/enums.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"m\", function() { return top; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return bottom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return right; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return left; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return auto; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return basePlacements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"l\", function() { return start; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return end; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return clippingParents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"o\", function() { return viewport; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return popper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return reference; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"n\", function() { return variationPlacements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return placements; });\n/* unused harmony export beforeRead */\n/* unused harmony export read */\n/* unused harmony export afterRead */\n/* unused harmony export beforeMain */\n/* unused harmony export main */\n/* unused harmony export afterMain */\n/* unused harmony export beforeWrite */\n/* unused harmony export write */\n/* unused harmony export afterWrite */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return modifierPhases; });\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanM/YTM4ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0EsQ0FBQztBQUNNO0FBQ1A7QUFDQSxDQUFDLE1BQU07O0FBRUE7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9lbnVtcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@popperjs/core/lib/enums.js\n")},"../../node_modules/@storybook/addon-docs/dist/esm/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, "b", function() { return /* reexport */ Canvas_Canvas; });\n__webpack_require__.d(__webpack_exports__, "c", function() { return /* reexport */ DocsContainer_DocsContainer; });\n__webpack_require__.d(__webpack_exports__, "d", function() { return /* reexport */ Meta; });\n__webpack_require__.d(__webpack_exports__, "a", function() { return /* reexport */ mdx_AddContext; });\n\n// UNUSED EXPORTS: ColorPalette, ColorItem, IconGallery, IconItem, Typeset, anchorBlockIdFromId, Anchor, extractComponentArgTypes, getComponent, StoryTable, ComponentsTable, ArgsTable, SourceState, DescriptionType, getDescriptionProps, Description, DocsContext, DocsPage, DocsStory, Heading, Preview, Primary, Props, getSourceProps, Source, SourceContext, SourceContainer, Stories, storyBlockIdFromId, lookupStoryId, getStoryId, getStoryProps, Story, Subheading, Subtitle, extractTitle, Title, Wrapper, CURRENT_SELECTION, PRIMARY_STORY, assertIsFn, CodeOrSourceMdx, AnchorMdx, HeaderMdx, HeadersMdx\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__("./node_modules/react/index.js");\nvar react_default = /*#__PURE__*/__webpack_require__.n(react);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Anchor.js\n\nvar anchorBlockIdFromId = function anchorBlockIdFromId(storyId) {\n return "anchor--".concat(storyId);\n};\nvar Anchor_Anchor = function Anchor(_ref) {\n var storyId = _ref.storyId,\n children = _ref.children;\n return /*#__PURE__*/react_default.a.createElement("div", {\n id: anchorBlockIdFromId(storyId)\n }, children);\n};\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.includes.js\nvar es_array_includes = __webpack_require__("../../node_modules/core-js/modules/es.array.includes.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.includes.js\nvar es_string_includes = __webpack_require__("../../node_modules/core-js/modules/es.string.includes.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.object.assign.js\nvar es_object_assign = __webpack_require__("../../node_modules/core-js/modules/es.object.assign.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.find.js\nvar es_array_find = __webpack_require__("../../node_modules/core-js/modules/es.array.find.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.object.values.js\nvar es_object_values = __webpack_require__("../../node_modules/core-js/modules/es.object.values.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.symbol.js\nvar es_symbol = __webpack_require__("../../node_modules/core-js/modules/es.symbol.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.symbol.description.js\nvar es_symbol_description = __webpack_require__("../../node_modules/core-js/modules/es.symbol.description.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.object.to-string.js\nvar es_object_to_string = __webpack_require__("../../node_modules/core-js/modules/es.object.to-string.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.symbol.iterator.js\nvar es_symbol_iterator = __webpack_require__("../../node_modules/core-js/modules/es.symbol.iterator.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.iterator.js\nvar es_string_iterator = __webpack_require__("../../node_modules/core-js/modules/es.string.iterator.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.iterator.js\nvar es_array_iterator = __webpack_require__("../../node_modules/core-js/modules/es.array.iterator.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/web.dom-collections.iterator.js\nvar web_dom_collections_iterator = __webpack_require__("../../node_modules/core-js/modules/web.dom-collections.iterator.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.slice.js\nvar es_array_slice = __webpack_require__("../../node_modules/core-js/modules/es.array.slice.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__("../../node_modules/core-js/modules/es.function.name.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.from.js\nvar es_array_from = __webpack_require__("../../node_modules/core-js/modules/es.array.from.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/lodash/mapValues.js\nvar mapValues = __webpack_require__("../../node_modules/lodash/mapValues.js");\nvar mapValues_default = /*#__PURE__*/__webpack_require__.n(mapValues);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/ArgsTable/ArgsTable.js + 10 modules\nvar ArgsTable_ArgsTable = __webpack_require__("./node_modules/@storybook/components/dist/esm/blocks/ArgsTable/ArgsTable.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/ArgsTable/TabbedArgsTable.js\nvar TabbedArgsTable = __webpack_require__("./node_modules/@storybook/components/dist/esm/blocks/ArgsTable/TabbedArgsTable.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/addons/dist/esm/index.js + 1 modules\nvar esm = __webpack_require__("./node_modules/@storybook/addons/dist/esm/index.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/store/dist/esm/filterArgTypes.js\nvar filterArgTypes = __webpack_require__("./node_modules/@storybook/store/dist/esm/filterArgTypes.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/core-events/dist/esm/index.js\nvar dist_esm = __webpack_require__("../../node_modules/@storybook/core-events/dist/esm/index.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/global/window.js\nvar global_window = __webpack_require__("../../node_modules/global/window.js");\nvar window_default = /*#__PURE__*/__webpack_require__.n(global_window);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/DocsContext.js\n\n\n\n// We add DocsContext to window. The reason is that in case DocsContext.ts is\n// imported multiple times (maybe once directly, and another time from a minified bundle)\n// we will have multiple DocsContext definitions - leading to lost context in\n// the React component tree.\n// This was specifically a problem with the Vite builder.\n\n/* eslint-disable no-underscore-dangle */\nif (global_window["window"].__DOCS_CONTEXT__ === undefined) {\n global_window["window"].__DOCS_CONTEXT__ = /*#__PURE__*/Object(react["createContext"])({});\n global_window["window"].__DOCS_CONTEXT__.displayName = \'DocsContext\';\n}\n\nvar DocsContext = global_window["window"].__DOCS_CONTEXT__;\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/types.js\nvar CURRENT_SELECTION = \'.\';\nvar PRIMARY_STORY = \'^\';\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.join.js\nvar es_array_join = __webpack_require__("../../node_modules/core-js/modules/es.array.join.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__("../../node_modules/core-js/modules/es.array.map.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.split.js\nvar es_string_split = __webpack_require__("../../node_modules/core-js/modules/es.string.split.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__("../../node_modules/core-js/modules/es.regexp.exec.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/utils.js\n\n\n\n\n\n\n\n\n\n/* eslint-disable no-underscore-dangle */\nvar titleCase = function titleCase(str) {\n return str.split(\'-\').map(function (part) {\n return part.charAt(0).toUpperCase() + part.slice(1);\n }).join(\'\');\n};\n\nvar getComponentName = function getComponentName(component) {\n if (!component) {\n return undefined;\n }\n\n if (typeof component === \'string\') {\n if (component.includes(\'-\')) {\n return titleCase(component);\n }\n\n return component;\n }\n\n if (component.__docgenInfo && component.__docgenInfo.displayName) {\n return component.__docgenInfo.displayName;\n }\n\n return component.name;\n};\nfunction scrollToElement(element) {\n var block = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \'start\';\n element.scrollIntoView({\n behavior: \'smooth\',\n block: block,\n inline: \'nearest\'\n });\n}\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.promise.js\nvar es_promise = __webpack_require__("../../node_modules/core-js/modules/es.promise.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__("../../node_modules/core-js/modules/es.array.concat.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@mdx-js/react/dist/esm.js\nvar react_dist_esm = __webpack_require__("../../node_modules/@mdx-js/react/dist/esm.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/Story.js + 1 modules\nvar blocks_Story = __webpack_require__("./node_modules/@storybook/components/dist/esm/blocks/Story.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/index.js\nvar components_dist_esm = __webpack_require__("./node_modules/@storybook/components/dist/esm/index.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/csf/dist/index.js\nvar dist = __webpack_require__("../../node_modules/@storybook/csf/dist/index.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/regenerator-runtime/runtime.js\nvar runtime = __webpack_require__("../../node_modules/regenerator-runtime/runtime.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/useStory.js\n\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { 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\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\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\nfunction useStory(storyId, context) {\n var stories = useStories([storyId], context);\n return stories && stories[0];\n}\nfunction useStories(storyIds, context) {\n var initialStoriesById = context.componentStories().reduce(function (acc, story) {\n acc[story.id] = story;\n return acc;\n }, {});\n\n var _useState = Object(react["useState"])(initialStoriesById),\n _useState2 = _slicedToArray(_useState, 2),\n storiesById = _useState2[0],\n setStories = _useState2[1];\n\n Object(react["useEffect"])(function () {\n Promise.all(storyIds.map( /*#__PURE__*/function () {\n var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(storyId) {\n var story;\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return context.loadStory(storyId);\n\n case 2:\n story = _context.sent;\n setStories(function (current) {\n return current[storyId] === story ? current : Object.assign({}, current, _defineProperty({}, storyId, story));\n });\n\n case 4:\n case "end":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }()));\n });\n return storyIds.map(function (storyId) {\n return storiesById[storyId];\n });\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Story.js\nfunction Story_slicedToArray(arr, i) { return Story_arrayWithHoles(arr) || Story_iterableToArrayLimit(arr, i) || Story_unsupportedIterableToArray(arr, i) || Story_nonIterableRest(); }\n\nfunction Story_nonIterableRest() { 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\nfunction Story_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return Story_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 Story_arrayLikeToArray(o, minLen); }\n\nfunction Story_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\nfunction Story_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction Story_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar storyBlockIdFromId = function storyBlockIdFromId(storyId) {\n return "story--".concat(storyId);\n};\nvar Story_lookupStoryId = function lookupStoryId(storyName, _ref) {\n var mdxStoryNameToKey = _ref.mdxStoryNameToKey,\n mdxComponentAnnotations = _ref.mdxComponentAnnotations;\n return Object(dist["toId"])(mdxComponentAnnotations.id || mdxComponentAnnotations.title, Object(dist["storyNameFromExport"])(mdxStoryNameToKey[storyName]));\n};\nvar Story_getStoryId = function getStoryId(props, context) {\n var _ref2 = props,\n id = _ref2.id;\n var _ref3 = props,\n name = _ref3.name;\n var inputId = id === CURRENT_SELECTION ? context.id : id;\n return inputId || Story_lookupStoryId(name, context);\n};\nvar getStoryProps = function getStoryProps(_ref4, story, context, onStoryFnCalled) {\n var height = _ref4.height,\n inline = _ref4.inline;\n var storyName = story.name,\n parameters = story.parameters;\n var _parameters$docs = parameters.docs,\n docs = _parameters$docs === void 0 ? {} : _parameters$docs;\n\n if (docs.disable) {\n return null;\n } // prefer block props, then story parameters defined by the framework-specific settings and optionally overridden by users\n\n\n var _docs$inlineStories = docs.inlineStories,\n inlineStories = _docs$inlineStories === void 0 ? false : _docs$inlineStories,\n _docs$iframeHeight = docs.iframeHeight,\n iframeHeight = _docs$iframeHeight === void 0 ? 100 : _docs$iframeHeight,\n prepareForInline = docs.prepareForInline;\n var storyIsInline = typeof inline === \'boolean\' ? inline : inlineStories;\n\n if (storyIsInline && !prepareForInline) {\n throw new Error("Story \'".concat(storyName, "\' is set to render inline, but no \'prepareForInline\' function is implemented in your docs configuration!"));\n }\n\n var boundStoryFn = function boundStoryFn() {\n var storyResult = story.unboundStoryFn(Object.assign({}, context.getStoryContext(story), {\n loaded: {},\n abortSignal: undefined,\n canvasElement: undefined\n })); // We need to wait until the bound story function has actually been called before we\n // consider the story rendered. Certain frameworks (i.e. angular) don\'t actually render\n // the component in the very first react render cycle, and so we can\'t just wait until the\n // `PureStory` component has been rendered to consider the underlying story "rendered".\n\n onStoryFnCalled();\n return storyResult;\n };\n\n return Object.assign({\n inline: storyIsInline,\n id: story.id,\n height: height || (storyIsInline ? undefined : iframeHeight),\n title: storyName\n }, storyIsInline && {\n parameters: parameters,\n storyFn: function storyFn() {\n return prepareForInline(boundStoryFn, context.getStoryContext(story));\n }\n });\n};\n\nfunction makeGate() {\n var open;\n var gate = new Promise(function (r) {\n open = r;\n });\n return [gate, open];\n}\n\nvar Story_Story = function Story(props) {\n var context = Object(react["useContext"])(DocsContext);\n var channel = esm["a" /* addons */].getChannel();\n var storyRef = Object(react["useRef"])();\n var storyId = Story_getStoryId(props, context);\n var story = useStory(storyId, context);\n\n var _useState = Object(react["useState"])(true),\n _useState2 = Story_slicedToArray(_useState, 2),\n showLoader = _useState2[0],\n setShowLoader = _useState2[1];\n\n Object(react["useEffect"])(function () {\n var cleanup;\n\n if (story && storyRef.current) {\n var componentId = story.componentId,\n id = story.id,\n title = story.title,\n name = story.name;\n var renderContext = {\n componentId: componentId,\n title: title,\n kind: title,\n id: id,\n name: name,\n story: name,\n // TODO what to do when these fail?\n showMain: function showMain() {},\n showError: function showError() {},\n showException: function showException() {}\n };\n cleanup = context.renderStoryToElement({\n story: story,\n renderContext: renderContext,\n element: storyRef.current,\n viewMode: \'docs\'\n });\n setShowLoader(false);\n }\n\n return function () {\n return cleanup && cleanup();\n };\n }, [story]);\n\n var _makeGate = makeGate(),\n _makeGate2 = Story_slicedToArray(_makeGate, 2),\n storyFnRan = _makeGate2[0],\n onStoryFnRan = _makeGate2[1];\n\n var _makeGate3 = makeGate(),\n _makeGate4 = Story_slicedToArray(_makeGate3, 2),\n rendered = _makeGate4[0],\n onRendered = _makeGate4[1];\n\n Object(react["useEffect"])(onRendered);\n\n if (!story) {\n return /*#__PURE__*/react_default.a.createElement(blocks_Story["b" /* StorySkeleton */], null);\n }\n\n var storyProps = getStoryProps(props, story, context, onStoryFnRan);\n\n if (!storyProps) {\n return null;\n }\n\n if (storyProps.inline) {\n var _global$FEATURES;\n\n // If we are rendering a old-style inline Story via `PureStory` below, we want to emit\n // the `STORY_RENDERED` event when it renders. The modern mode below calls out to\n // `Preview.renderStoryToDom()` which itself emits the event.\n if (!(window_default.a !== null && window_default.a !== void 0 && (_global$FEATURES = window_default.a.FEATURES) !== null && _global$FEATURES !== void 0 && _global$FEATURES.modernInlineRender)) {\n // We need to wait for two things before we can consider the story rendered:\n // (a) React\'s `useEffect` hook needs to fire. This is needed for React stories, as\n // decorators of the form `<A><B/></A>` will not actually execute `B` in the first\n // call to the story function.\n // (b) The story function needs to actually have been called.\n // Certain frameworks (i.e.angular) don\'t actually render the component in the very first\n // React render cycle, so we need to wait for the framework to actually do that\n Promise.all([storyFnRan, rendered]).then(function () {\n channel.emit(dist_esm["default"].STORY_RENDERED, storyId);\n });\n } else {\n // We do this so React doesn\'t complain when we replace the span in a secondary render\n var htmlContents = "<span></span>"; // FIXME: height/style/etc. lifted from PureStory\n\n var height = storyProps.height;\n return /*#__PURE__*/react_default.a.createElement("div", {\n id: storyBlockIdFromId(story.id)\n }, /*#__PURE__*/react_default.a.createElement(react_dist_esm["a" /* MDXProvider */], {\n components: components_dist_esm["resetComponents"]\n }, height ? /*#__PURE__*/react_default.a.createElement("style", null, "#story--".concat(story.id, " { min-height: ").concat(height, "; transform: translateZ(0); overflow: auto }")) : null, showLoader && /*#__PURE__*/react_default.a.createElement(blocks_Story["b" /* StorySkeleton */], null), /*#__PURE__*/react_default.a.createElement("div", {\n ref: storyRef,\n "data-name": story.name,\n dangerouslySetInnerHTML: {\n __html: htmlContents\n }\n })));\n }\n }\n\n return /*#__PURE__*/react_default.a.createElement("div", {\n id: storyBlockIdFromId(story.id)\n }, /*#__PURE__*/react_default.a.createElement(react_dist_esm["a" /* MDXProvider */], {\n components: components_dist_esm["resetComponents"]\n }, /*#__PURE__*/react_default.a.createElement(blocks_Story["a" /* Story */], storyProps)));\n};\n\nStory_Story.defaultProps = {\n children: null,\n name: null\n};\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/ArgsTable.js\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ArgsTable_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ArgsTable_slicedToArray(arr, i) { return ArgsTable_arrayWithHoles(arr) || ArgsTable_iterableToArrayLimit(arr, i) || ArgsTable_unsupportedIterableToArray(arr, i) || ArgsTable_nonIterableRest(); }\n\nfunction ArgsTable_nonIterableRest() { 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\nfunction ArgsTable_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return ArgsTable_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 ArgsTable_arrayLikeToArray(o, minLen); }\n\nfunction ArgsTable_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\nfunction ArgsTable_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction ArgsTable_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ArgsTable_useArgs = function useArgs(storyId, context) {\n var channel = esm["a" /* addons */].getChannel();\n var story = context.storyById(storyId);\n\n if (!story) {\n throw new Error("Unknown story: ".concat(storyId));\n }\n\n var storyContext = context.getStoryContext(story);\n\n var _useState = Object(react["useState"])(storyContext.args),\n _useState2 = ArgsTable_slicedToArray(_useState, 2),\n args = _useState2[0],\n setArgs = _useState2[1];\n\n Object(react["useEffect"])(function () {\n var cb = function cb(changed) {\n if (changed.storyId === storyId) {\n setArgs(changed.args);\n }\n };\n\n channel.on(dist_esm["default"].STORY_ARGS_UPDATED, cb);\n return function () {\n return channel.off(dist_esm["default"].STORY_ARGS_UPDATED, cb);\n };\n }, [storyId]);\n var updateArgs = Object(react["useCallback"])(function (updatedArgs) {\n return channel.emit(dist_esm["default"].UPDATE_STORY_ARGS, {\n storyId: storyId,\n updatedArgs: updatedArgs\n });\n }, [storyId]);\n var resetArgs = Object(react["useCallback"])(function (argNames) {\n return channel.emit(dist_esm["default"].RESET_STORY_ARGS, {\n storyId: storyId,\n argNames: argNames\n });\n }, [storyId]);\n return [args, updateArgs, resetArgs];\n};\n\nvar ArgsTable_extractComponentArgTypes = function extractComponentArgTypes(component, _ref, include, exclude) {\n var id = _ref.id,\n storyById = _ref.storyById;\n\n var _storyById = storyById(id),\n parameters = _storyById.parameters;\n\n var _ref2 = parameters.docs || {},\n extractArgTypes = _ref2.extractArgTypes;\n\n if (!extractArgTypes) {\n throw new Error(ArgsTable_ArgsTable["b" /* ArgsTableError */].ARGS_UNSUPPORTED);\n }\n\n var argTypes = extractArgTypes(component);\n argTypes = Object(filterArgTypes["a" /* filterArgTypes */])(argTypes, include, exclude);\n return argTypes;\n};\n\nvar ArgsTable_isShortcut = function isShortcut(value) {\n return value && [CURRENT_SELECTION, PRIMARY_STORY].includes(value);\n};\n\nvar ArgsTable_getComponent = function getComponent() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _ref3 = arguments.length > 1 ? arguments[1] : undefined,\n id = _ref3.id,\n storyById = _ref3.storyById;\n\n var _ref4 = props,\n of = _ref4.of;\n var _ref5 = props,\n story = _ref5.story;\n\n var _storyById2 = storyById(id),\n component = _storyById2.component;\n\n if (ArgsTable_isShortcut(of) || ArgsTable_isShortcut(story)) {\n return component || null;\n }\n\n if (!of) {\n throw new Error(ArgsTable_ArgsTable["b" /* ArgsTableError */].NO_COMPONENT);\n }\n\n return of;\n};\n\nvar ArgsTable_addComponentTabs = function addComponentTabs(tabs, components, context, include, exclude, sort) {\n return Object.assign({}, tabs, mapValues_default()(components, function (comp) {\n return {\n rows: ArgsTable_extractComponentArgTypes(comp, context, include, exclude),\n sort: sort\n };\n }));\n};\n\nvar ArgsTable_StoryTable = function StoryTable(props) {\n var context = Object(react["useContext"])(DocsContext);\n var currentId = context.id,\n componentStories = context.componentStories;\n var storyName = props.story,\n component = props.component,\n subcomponents = props.subcomponents,\n showComponent = props.showComponent,\n include = props.include,\n exclude = props.exclude,\n sort = props.sort;\n\n try {\n var storyId;\n\n switch (storyName) {\n case CURRENT_SELECTION:\n {\n storyId = currentId;\n break;\n }\n\n case PRIMARY_STORY:\n {\n var primaryStory = componentStories()[0];\n storyId = primaryStory.id;\n break;\n }\n\n default:\n {\n storyId = Story_lookupStoryId(storyName, context);\n }\n }\n\n var story = useStory(storyId, context); // eslint-disable-next-line prefer-const\n\n var _useArgs = ArgsTable_useArgs(storyId, context),\n _useArgs2 = ArgsTable_slicedToArray(_useArgs, 3),\n args = _useArgs2[0],\n updateArgs = _useArgs2[1],\n resetArgs = _useArgs2[2];\n\n if (!story) return /*#__PURE__*/react_default.a.createElement(ArgsTable_ArgsTable["a" /* ArgsTable */], {\n isLoading: true,\n updateArgs: updateArgs,\n resetArgs: resetArgs\n });\n var argTypes = Object(filterArgTypes["a" /* filterArgTypes */])(story.argTypes, include, exclude);\n var mainLabel = getComponentName(component) || \'Story\';\n\n var tabs = ArgsTable_defineProperty({}, mainLabel, {\n rows: argTypes,\n args: args,\n updateArgs: updateArgs,\n resetArgs: resetArgs\n }); // Use the dynamically generated component tabs if there are no controls\n\n\n var storyHasArgsWithControls = argTypes && Object.values(argTypes).find(function (v) {\n return !!(v !== null && v !== void 0 && v.control);\n });\n\n if (!storyHasArgsWithControls) {\n updateArgs = null;\n resetArgs = null;\n tabs = {};\n }\n\n if (component && (!storyHasArgsWithControls || showComponent)) {\n tabs = ArgsTable_addComponentTabs(tabs, ArgsTable_defineProperty({}, mainLabel, component), context, include, exclude);\n }\n\n if (subcomponents) {\n if (Array.isArray(subcomponents)) {\n throw new Error("Unexpected subcomponents array. Expected an object whose keys are tab labels and whose values are components.");\n }\n\n tabs = ArgsTable_addComponentTabs(tabs, subcomponents, context, include, exclude);\n }\n\n return /*#__PURE__*/react_default.a.createElement(TabbedArgsTable["a" /* TabbedArgsTable */], {\n tabs: tabs,\n sort: sort\n });\n } catch (err) {\n return /*#__PURE__*/react_default.a.createElement(ArgsTable_ArgsTable["a" /* ArgsTable */], {\n error: err.message\n });\n }\n};\nvar ArgsTable_ComponentsTable = function ComponentsTable(props) {\n var context = Object(react["useContext"])(DocsContext);\n var components = props.components,\n include = props.include,\n exclude = props.exclude,\n sort = props.sort;\n var tabs = ArgsTable_addComponentTabs({}, components, context, include, exclude);\n return /*#__PURE__*/react_default.a.createElement(TabbedArgsTable["a" /* TabbedArgsTable */], {\n tabs: tabs,\n sort: sort\n });\n};\nvar blocks_ArgsTable_ArgsTable = function ArgsTable(props) {\n var context = Object(react["useContext"])(DocsContext);\n var id = context.id,\n storyById = context.storyById;\n\n var _storyById3 = storyById(id),\n controls = _storyById3.parameters.controls,\n subcomponents = _storyById3.subcomponents;\n\n var _ref6 = props,\n include = _ref6.include,\n exclude = _ref6.exclude,\n components = _ref6.components,\n sortProp = _ref6.sort;\n var _ref7 = props,\n storyName = _ref7.story;\n var sort = sortProp || (controls === null || controls === void 0 ? void 0 : controls.sort);\n var main = ArgsTable_getComponent(props, context);\n\n if (storyName) {\n return /*#__PURE__*/react_default.a.createElement(ArgsTable_StoryTable, _extends({}, props, {\n component: main,\n subcomponents: subcomponents,\n sort: sort\n }));\n }\n\n if (!components && !subcomponents) {\n var mainProps;\n\n try {\n mainProps = {\n rows: ArgsTable_extractComponentArgTypes(main, context, include, exclude)\n };\n } catch (err) {\n mainProps = {\n error: err.message\n };\n }\n\n return /*#__PURE__*/react_default.a.createElement(ArgsTable_ArgsTable["a" /* ArgsTable */], _extends({}, mainProps, {\n sort: sort\n }));\n }\n\n if (components) {\n return /*#__PURE__*/react_default.a.createElement(ArgsTable_ComponentsTable, _extends({}, props, {\n components: components,\n sort: sort\n }));\n }\n\n var mainLabel = getComponentName(main);\n return /*#__PURE__*/react_default.a.createElement(ArgsTable_ComponentsTable, _extends({}, props, {\n components: Object.assign(ArgsTable_defineProperty({}, mainLabel, main), subcomponents),\n sort: sort\n }));\n};\nblocks_ArgsTable_ArgsTable.defaultProps = {\n of: CURRENT_SELECTION\n};\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.filter.js\nvar es_array_filter = __webpack_require__("../../node_modules/core-js/modules/es.array.filter.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.object.keys.js\nvar es_object_keys = __webpack_require__("../../node_modules/core-js/modules/es.object.keys.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/Preview.js + 1 modules\nvar Preview = __webpack_require__("./node_modules/@storybook/components/dist/esm/blocks/Preview.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/fast-deep-equal/index.js\nvar fast_deep_equal = __webpack_require__("../../node_modules/fast-deep-equal/index.js");\nvar fast_deep_equal_default = /*#__PURE__*/__webpack_require__.n(fast_deep_equal);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/shared.js\nvar ADDON_ID = \'storybook/docs\';\nvar PANEL_ID = "".concat(ADDON_ID, "/panel");\nvar PARAM_KEY = "docs";\nvar SNIPPET_RENDERED = "".concat(ADDON_ID, "/snippet-rendered");\nvar SourceType;\n\n(function (SourceType) {\n SourceType["AUTO"] = "auto";\n SourceType["CODE"] = "code";\n SourceType["DYNAMIC"] = "dynamic";\n})(SourceType || (SourceType = {}));\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/SourceContainer.js\nfunction SourceContainer_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction SourceContainer_slicedToArray(arr, i) { return SourceContainer_arrayWithHoles(arr) || SourceContainer_iterableToArrayLimit(arr, i) || SourceContainer_unsupportedIterableToArray(arr, i) || SourceContainer_nonIterableRest(); }\n\nfunction SourceContainer_nonIterableRest() { 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\nfunction SourceContainer_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return SourceContainer_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 SourceContainer_arrayLikeToArray(o, minLen); }\n\nfunction SourceContainer_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\nfunction SourceContainer_iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction SourceContainer_arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\nvar SourceContext = /*#__PURE__*/Object(react["createContext"])({\n sources: {}\n});\nvar SourceContainer_SourceContainer = function SourceContainer(_ref) {\n var children = _ref.children;\n\n var _useState = Object(react["useState"])({}),\n _useState2 = SourceContainer_slicedToArray(_useState, 2),\n sources = _useState2[0],\n setSources = _useState2[1];\n\n var channel = esm["a" /* addons */].getChannel();\n Object(react["useEffect"])(function () {\n var handleSnippetRendered = function handleSnippetRendered(id, newItem) {\n if (newItem !== sources[id]) {\n setSources(function (current) {\n var newSources = Object.assign({}, current, SourceContainer_defineProperty({}, id, newItem));\n\n if (!fast_deep_equal_default()(current, newSources)) {\n return newSources;\n }\n\n return current;\n });\n }\n };\n\n channel.on(SNIPPET_RENDERED, handleSnippetRendered);\n return function () {\n return channel.off(SNIPPET_RENDERED, handleSnippetRendered);\n };\n });\n return /*#__PURE__*/react_default.a.createElement(SourceContext.Provider, {\n value: {\n sources: sources\n }\n }, children);\n};\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/Source.js\nvar blocks_Source = __webpack_require__("./node_modules/@storybook/components/dist/esm/blocks/Source.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__("../../node_modules/core-js/modules/es.string.replace.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/store/dist/esm/parameters.js\nvar esm_parameters = __webpack_require__("./node_modules/@storybook/store/dist/esm/parameters.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/enhanceSource.js\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || enhanceSource_unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction enhanceSource_unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return enhanceSource_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 enhanceSource_arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return enhanceSource_arrayLikeToArray(arr); }\n\nfunction enhanceSource_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\n\n\n\n\n\n\n\n\n // ============================================================\n// START @storybook/source-loader/extract-source\n//\n// This code duplicated because tree-shaking isn\'t working.\n// It\'s not DRY, but source-loader is on the chopping block for\n// the next version of addon-docs, so it\'s not the worst sin.\n// ============================================================\n\n/**\n * given a location, extract the text from the full source\n */\nfunction extractSource(location, lines) {\n var start = location.startBody,\n end = location.endBody;\n\n if (start.line === end.line && lines[start.line - 1] !== undefined) {\n return lines[start.line - 1].substring(start.col, end.col);\n } // NOTE: storysource locations are 1-based not 0-based!\n\n\n var startLine = lines[start.line - 1];\n var endLine = lines[end.line - 1];\n\n if (startLine === undefined || endLine === undefined) {\n return null;\n }\n\n return [startLine.substring(start.col)].concat(_toConsumableArray(lines.slice(start.line, end.line - 1)), [endLine.substring(0, end.col)]).join(\'\\n\');\n} // ============================================================\n// END @storybook/source-loader/extract-source\n// ============================================================\n\n\n/**\n * Replaces full story id name like: story-kind--story-name -> story-name\n * @param id\n */\nvar storyIdToSanitizedStoryName = function storyIdToSanitizedStoryName(id) {\n return id.replace(/^.*?--/, \'\');\n};\n\nvar extract = function extract(targetId, _ref) {\n var source = _ref.source,\n locationsMap = _ref.locationsMap;\n\n if (!locationsMap) {\n return source;\n }\n\n var sanitizedStoryName = storyIdToSanitizedStoryName(targetId);\n var location = locationsMap[sanitizedStoryName];\n\n if (!location) {\n return source;\n }\n\n var lines = source.split(\'\\n\');\n return extractSource(location, lines);\n};\n\nvar enhanceSource_enhanceSource = function enhanceSource(story) {\n var _docs$source;\n\n var id = story.id,\n parameters = story.parameters;\n var storySource = parameters.storySource,\n _parameters$docs = parameters.docs,\n docs = _parameters$docs === void 0 ? {} : _parameters$docs;\n var transformSource = docs.transformSource; // no input or user has manually overridden the output\n\n if (!(storySource !== null && storySource !== void 0 && storySource.source) || (_docs$source = docs.source) !== null && _docs$source !== void 0 && _docs$source.code) {\n return null;\n }\n\n var input = extract(id, storySource);\n var code = transformSource ? transformSource(input, story) : input;\n return {\n docs: Object(esm_parameters["a" /* combineParameters */])(docs, {\n source: {\n code: code\n }\n })\n };\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Source.js\n\n\n\n\n\n\n\n\n\n\n\nvar SourceState;\n\n(function (SourceState) {\n SourceState["OPEN"] = "open";\n SourceState["CLOSED"] = "closed";\n SourceState["NONE"] = "none";\n})(SourceState || (SourceState = {}));\n\nvar getSourceState = function getSourceState(stories) {\n var states = stories.map(function (story) {\n var _story$parameters$doc, _story$parameters$doc2;\n\n return (_story$parameters$doc = story.parameters.docs) === null || _story$parameters$doc === void 0 ? void 0 : (_story$parameters$doc2 = _story$parameters$doc.source) === null || _story$parameters$doc2 === void 0 ? void 0 : _story$parameters$doc2.state;\n }).filter(Boolean);\n if (states.length === 0) return SourceState.CLOSED; // FIXME: handling multiple stories is a pain\n\n return states[0];\n};\n\nvar getStorySource = function getStorySource(storyId, sourceContext) {\n var sources = sourceContext.sources; // source rendering is async so source is unavailable at the start of the render cycle,\n // so we fail gracefully here without warning\n\n return (sources === null || sources === void 0 ? void 0 : sources[storyId]) || \'\';\n};\n\nvar Source_getSnippet = function getSnippet(snippet, story) {\n var _parameters$docs, _parameters$docs$sour, _parameters$docs2, _parameters$docs2$sou, _enhanced$docs, _enhanced$docs$source;\n\n if (!story) {\n return snippet;\n }\n\n var parameters = story.parameters; // eslint-disable-next-line no-underscore-dangle\n\n var isArgsStory = parameters.__isArgsStory;\n var type = ((_parameters$docs = parameters.docs) === null || _parameters$docs === void 0 ? void 0 : (_parameters$docs$sour = _parameters$docs.source) === null || _parameters$docs$sour === void 0 ? void 0 : _parameters$docs$sour.type) || SourceType.AUTO; // if user has hard-coded the snippet, that takes precedence\n\n var userCode = (_parameters$docs2 = parameters.docs) === null || _parameters$docs2 === void 0 ? void 0 : (_parameters$docs2$sou = _parameters$docs2.source) === null || _parameters$docs2$sou === void 0 ? void 0 : _parameters$docs2$sou.code;\n\n if (userCode !== undefined) {\n return userCode;\n } // if user has explicitly set this as dynamic, use snippet\n\n\n if (type === SourceType.DYNAMIC) {\n var _parameters$docs3, _parameters$docs3$tra;\n\n return ((_parameters$docs3 = parameters.docs) === null || _parameters$docs3 === void 0 ? void 0 : (_parameters$docs3$tra = _parameters$docs3.transformSource) === null || _parameters$docs3$tra === void 0 ? void 0 : _parameters$docs3$tra.call(_parameters$docs3, snippet, story)) || snippet;\n } // if this is an args story and there\'s a snippet\n\n\n if (type === SourceType.AUTO && snippet && isArgsStory) {\n var _parameters$docs4, _parameters$docs4$tra;\n\n return ((_parameters$docs4 = parameters.docs) === null || _parameters$docs4 === void 0 ? void 0 : (_parameters$docs4$tra = _parameters$docs4.transformSource) === null || _parameters$docs4$tra === void 0 ? void 0 : _parameters$docs4$tra.call(_parameters$docs4, snippet, story)) || snippet;\n } // otherwise, use the source code logic\n\n\n var enhanced = enhanceSource_enhanceSource(story) || parameters;\n return (enhanced === null || enhanced === void 0 ? void 0 : (_enhanced$docs = enhanced.docs) === null || _enhanced$docs === void 0 ? void 0 : (_enhanced$docs$source = _enhanced$docs.source) === null || _enhanced$docs$source === void 0 ? void 0 : _enhanced$docs$source.code) || \'\';\n};\n\nvar Source_getSourceProps = function getSourceProps(props, docsContext, sourceContext) {\n var currentId = docsContext.id,\n storyById = docsContext.storyById;\n\n var _storyById = storyById(currentId),\n parameters = _storyById.parameters;\n\n var codeProps = props;\n var singleProps = props;\n var multiProps = props;\n var source = codeProps.code; // prefer user-specified code\n\n var targetIds = multiProps.ids || [singleProps.id || currentId];\n var storyIds = targetIds.map(function (targetId) {\n return targetId === CURRENT_SELECTION ? currentId : targetId;\n });\n var stories = useStories(storyIds, docsContext);\n\n if (!stories.every(Boolean)) {\n return {\n error: blocks_Source["b" /* SourceError */].SOURCE_UNAVAILABLE,\n state: SourceState.NONE\n };\n }\n\n if (!source) {\n source = storyIds.map(function (storyId, idx) {\n var storySource = getStorySource(storyId, sourceContext);\n var storyObj = stories[idx];\n return Source_getSnippet(storySource, storyObj);\n }).join(\'\\n\\n\');\n }\n\n var state = getSourceState(stories);\n var _parameters$docs5 = parameters.docs,\n docsParameters = _parameters$docs5 === void 0 ? {} : _parameters$docs5;\n var _docsParameters$sourc = docsParameters.source,\n sourceParameters = _docsParameters$sourc === void 0 ? {} : _docsParameters$sourc;\n var _sourceParameters$lan = sourceParameters.language,\n docsLanguage = _sourceParameters$lan === void 0 ? null : _sourceParameters$lan;\n return source ? {\n code: source,\n state: state,\n language: props.language || docsLanguage || \'jsx\',\n dark: props.dark || false\n } : {\n error: blocks_Source["b" /* SourceError */].SOURCE_UNAVAILABLE,\n state: state\n };\n};\n/**\n * Story source doc block renders source code if provided,\n * or the source for a story if `storyId` is provided, or\n * the source for the current story if nothing is provided.\n */\n\nvar Source_Source = function Source(props) {\n var sourceContext = Object(react["useContext"])(SourceContext);\n var docsContext = Object(react["useContext"])(DocsContext);\n var sourceProps = Source_getSourceProps(props, docsContext, sourceContext);\n return /*#__PURE__*/react_default.a.createElement(blocks_Source["a" /* Source */], sourceProps);\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Canvas.js\n\n\n\n\n\n\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\n\n\nvar Canvas_getPreviewProps = function getPreviewProps(_ref, docsContext, sourceContext) {\n var withSource = _ref.withSource,\n mdxSource = _ref.mdxSource,\n children = _ref.children,\n props = _objectWithoutProperties(_ref, ["withSource", "mdxSource", "children"]);\n\n var mdxComponentAnnotations = docsContext.mdxComponentAnnotations,\n mdxStoryNameToKey = docsContext.mdxStoryNameToKey;\n var sourceState = withSource;\n var isLoading = false;\n\n if (sourceState === SourceState.NONE) {\n return {\n isLoading: isLoading,\n previewProps: props\n };\n }\n\n if (mdxSource) {\n return {\n isLoading: isLoading,\n previewProps: Object.assign({}, props, {\n withSource: Source_getSourceProps({\n code: decodeURI(mdxSource)\n }, docsContext, sourceContext)\n })\n };\n }\n\n var childArray = Array.isArray(children) ? children : [children];\n var storyChildren = childArray.filter(function (c) {\n return c.props && (c.props.id || c.props.name);\n });\n var targetIds = storyChildren.map(function (s) {\n return s.props.id || Object(dist["toId"])(mdxComponentAnnotations.id || mdxComponentAnnotations.title, Object(dist["storyNameFromExport"])(mdxStoryNameToKey[s.props.name]));\n });\n var sourceProps = Source_getSourceProps({\n ids: targetIds\n }, docsContext, sourceContext);\n if (!sourceState) sourceState = sourceProps.state;\n var stories = useStories(targetIds, docsContext);\n isLoading = stories.some(function (s) {\n return !s;\n });\n return {\n isLoading: isLoading,\n previewProps: Object.assign({}, props, {\n // pass through columns etc.\n withSource: sourceProps,\n isExpanded: sourceState === SourceState.OPEN\n })\n };\n};\n\nvar Canvas_Canvas = function Canvas(props) {\n var docsContext = Object(react["useContext"])(DocsContext);\n var sourceContext = Object(react["useContext"])(SourceContext);\n\n var _getPreviewProps = Canvas_getPreviewProps(props, docsContext, sourceContext),\n isLoading = _getPreviewProps.isLoading,\n previewProps = _getPreviewProps.previewProps;\n\n var children = props.children;\n if (isLoading) return /*#__PURE__*/react_default.a.createElement(Preview["b" /* PreviewSkeleton */], null);\n return /*#__PURE__*/react_default.a.createElement(react_dist_esm["a" /* MDXProvider */], {\n components: components_dist_esm["resetComponents"]\n }, /*#__PURE__*/react_default.a.createElement(Preview["a" /* Preview */], previewProps, children));\n};\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.trim.js\nvar es_string_trim = __webpack_require__("../../node_modules/core-js/modules/es.string.trim.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/Description.js\nvar Description = __webpack_require__("./node_modules/@storybook/components/dist/esm/blocks/Description.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/types.js\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\n// export type DocgenType = DocgenPropType | DocgenFlowType | DocgenTypeScriptType;\nvar TypeSystem;\n\n(function (TypeSystem) {\n TypeSystem["JAVASCRIPT"] = "JavaScript";\n TypeSystem["FLOW"] = "Flow";\n TypeSystem["TYPESCRIPT"] = "TypeScript";\n TypeSystem["UNKNOWN"] = "Unknown";\n})(TypeSystem || (TypeSystem = {}));\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/utils/defaultValue.js\nvar BLACKLIST = [\'null\', \'undefined\'];\nfunction isDefaultValueBlacklisted(value) {\n return BLACKLIST.some(function (x) {\n return x === value;\n });\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/utils/string.js\nvar str = function str(obj) {\n if (!obj) {\n return \'\';\n }\n\n if (typeof obj === \'string\') {\n return obj;\n }\n\n throw new Error("Description: expected string, got: ".concat(JSON.stringify(obj)));\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/utils/docgenInfo.js\n\n\n\n\n/* eslint-disable no-underscore-dangle */\n\nfunction hasDocgen(component) {\n return !!component.__docgenInfo;\n}\nfunction isValidDocgenSection(docgenSection) {\n return docgenSection != null && Object.keys(docgenSection).length > 0;\n}\nfunction getDocgenSection(component, section) {\n return hasDocgen(component) ? component.__docgenInfo[section] : null;\n}\nfunction getDocgenDescription(component) {\n return hasDocgen(component) && str(component.__docgenInfo.description);\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/utils/index.js\n\n\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/doctrine/lib/doctrine.js\nvar doctrine = __webpack_require__("../../node_modules/doctrine/lib/doctrine.js");\nvar doctrine_default = /*#__PURE__*/__webpack_require__.n(doctrine);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/jsdocParser.js\n\n\n\n\n\n\n\n\n\n\n\n\nfunction containsJsDoc(value) {\n return value != null && value.includes(\'@\');\n}\n\nfunction parse(content, tags) {\n var ast;\n\n try {\n ast = doctrine_default.a.parse(content, {\n tags: tags,\n sloppy: true\n });\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n throw new Error(\'Cannot parse JSDoc tags.\');\n }\n\n return ast;\n}\n\nvar DEFAULT_OPTIONS = {\n tags: [\'param\', \'arg\', \'argument\', \'returns\', \'ignore\']\n};\nvar parseJsDoc = function parseJsDoc(value) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_OPTIONS;\n\n if (!containsJsDoc(value)) {\n return {\n includesJsDoc: false,\n ignore: false\n };\n }\n\n var jsDocAst = parse(value, options.tags);\n var extractedTags = extractJsDocTags(jsDocAst);\n\n if (extractedTags.ignore) {\n // There is no point in doing other stuff since this prop will not be rendered.\n return {\n includesJsDoc: true,\n ignore: true\n };\n }\n\n return {\n includesJsDoc: true,\n ignore: false,\n // Always use the parsed description to ensure JSDoc is removed from the description.\n description: jsDocAst.description,\n extractedTags: extractedTags\n };\n};\n\nfunction extractJsDocTags(ast) {\n var extractedTags = {\n params: null,\n returns: null,\n ignore: false\n };\n\n for (var i = 0; i < ast.tags.length; i += 1) {\n var tag = ast.tags[i];\n\n if (tag.title === \'ignore\') {\n extractedTags.ignore = true; // Once we reach an @ignore tag, there is no point in parsing the other tags since we will not render the prop.\n\n break;\n } else {\n switch (tag.title) {\n // arg & argument are aliases for param.\n case \'param\':\n case \'arg\':\n case \'argument\':\n {\n var paramTag = extractParam(tag);\n\n if (paramTag != null) {\n if (extractedTags.params == null) {\n extractedTags.params = [];\n }\n\n extractedTags.params.push(paramTag);\n }\n\n break;\n }\n\n case \'returns\':\n {\n var returnsTag = extractReturns(tag);\n\n if (returnsTag != null) {\n extractedTags.returns = returnsTag;\n }\n\n break;\n }\n\n default:\n break;\n }\n }\n }\n\n return extractedTags;\n}\n\nfunction extractParam(tag) {\n var paramName = tag.name; // When the @param doesn\'t have a name but have a type and a description, "null-null" is returned.\n\n if (paramName != null && paramName !== \'null-null\') {\n return {\n name: tag.name,\n type: tag.type,\n description: tag.description,\n getPrettyName: function getPrettyName() {\n if (paramName.includes(\'null\')) {\n // There is a few cases in which the returned param name contains "null".\n // - @param {SyntheticEvent} event- Original SyntheticEvent\n // - @param {SyntheticEvent} event.\\n@returns {string}\n return paramName.replace(\'-null\', \'\').replace(\'.null\', \'\');\n }\n\n return tag.name;\n },\n getTypeName: function getTypeName() {\n return tag.type != null ? extractTypeName(tag.type) : null;\n }\n };\n }\n\n return null;\n}\n\nfunction extractReturns(tag) {\n if (tag.type != null) {\n return {\n type: tag.type,\n description: tag.description,\n getTypeName: function getTypeName() {\n return extractTypeName(tag.type);\n }\n };\n }\n\n return null;\n}\n\nfunction extractTypeName(type) {\n if (type.type === \'NameExpression\') {\n return type.name;\n }\n\n if (type.type === \'RecordType\') {\n var recordFields = type.fields.map(function (field) {\n if (field.value != null) {\n var valueTypeName = extractTypeName(field.value);\n return "".concat(field.key, ": ").concat(valueTypeName);\n }\n\n return field.key;\n });\n return "({".concat(recordFields.join(\', \'), "})");\n }\n\n if (type.type === \'UnionType\') {\n var unionElements = type.elements.map(extractTypeName);\n return "(".concat(unionElements.join(\'|\'), ")");\n } // Only support untyped array: []. Might add more support later if required.\n\n\n if (type.type === \'ArrayType\') {\n return \'[]\';\n }\n\n if (type.type === \'TypeApplication\') {\n if (type.expression != null) {\n if (type.expression.name === \'Array\') {\n var arrayType = extractTypeName(type.applications[0]);\n return "".concat(arrayType, "[]");\n }\n }\n }\n\n if (type.type === \'NullableType\' || type.type === \'NonNullableType\' || type.type === \'OptionalType\') {\n return extractTypeName(type.expression);\n }\n\n if (type.type === \'AllLiteral\') {\n return \'any\';\n }\n\n return null;\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/utils.js\n\n\nvar MAX_TYPE_SUMMARY_LENGTH = 90;\nvar MAX_DEFAULT_VALUE_SUMMARY_LENGTH = 50;\nfunction isTooLongForTypeSummary(value) {\n return value.length > MAX_TYPE_SUMMARY_LENGTH;\n}\nfunction isTooLongForDefaultValueSummary(value) {\n return value.length > MAX_DEFAULT_VALUE_SUMMARY_LENGTH;\n}\nfunction createSummaryValue(summary, detail) {\n if (summary === detail) {\n return {\n summary: summary\n };\n }\n\n return {\n summary: summary,\n detail: detail\n };\n}\nvar normalizeNewlines = function normalizeNewlines(string) {\n return string.replace(/\\\\r\\\\n/g, \'\\\\n\');\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/flow/createType.js\n\n\n\n\n\n\nvar FlowTypesType;\n\n(function (FlowTypesType) {\n FlowTypesType["UNION"] = "union";\n FlowTypesType["SIGNATURE"] = "signature";\n})(FlowTypesType || (FlowTypesType = {}));\n\nfunction generateUnionElement(_ref) {\n var name = _ref.name,\n value = _ref.value,\n elements = _ref.elements,\n raw = _ref.raw;\n\n if (value != null) {\n return value;\n }\n\n if (elements != null) {\n return elements.map(generateUnionElement).join(\' | \');\n }\n\n if (raw != null) {\n return raw;\n }\n\n return name;\n}\n\nfunction generateUnion(_ref2) {\n var name = _ref2.name,\n raw = _ref2.raw,\n elements = _ref2.elements;\n\n if (elements != null) {\n return createSummaryValue(elements.map(generateUnionElement).join(\' | \'));\n }\n\n if (raw != null) {\n // Flow Unions can be defined with or without a leading `|` character, so try to remove it.\n return createSummaryValue(raw.replace(/^\\|\\s*/, \'\'));\n }\n\n return createSummaryValue(name);\n}\n\nfunction generateFuncSignature(_ref3) {\n var type = _ref3.type,\n raw = _ref3.raw;\n\n if (raw != null) {\n return createSummaryValue(raw);\n }\n\n return createSummaryValue(type);\n}\n\nfunction generateObjectSignature(_ref4) {\n var type = _ref4.type,\n raw = _ref4.raw;\n\n if (raw != null) {\n return !isTooLongForTypeSummary(raw) ? createSummaryValue(raw) : createSummaryValue(type, raw);\n }\n\n return createSummaryValue(type);\n}\n\nfunction generateSignature(flowType) {\n var type = flowType.type;\n return type === \'object\' ? generateObjectSignature(flowType) : generateFuncSignature(flowType);\n}\n\nfunction generateDefault(_ref5) {\n var name = _ref5.name,\n raw = _ref5.raw;\n\n if (raw != null) {\n return !isTooLongForTypeSummary(raw) ? createSummaryValue(raw) : createSummaryValue(name, raw);\n }\n\n return createSummaryValue(name);\n}\n\nfunction createType(type) {\n // A type could be null if a defaultProp has been provided without a type definition.\n if (type == null) {\n return null;\n }\n\n switch (type.name) {\n case FlowTypesType.UNION:\n return generateUnion(type);\n\n case FlowTypesType.SIGNATURE:\n return generateSignature(type);\n\n default:\n return generateDefault(type);\n }\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/flow/createDefaultValue.js\n\n\n\nfunction createDefaultValue(defaultValue, type) {\n if (defaultValue != null) {\n var value = defaultValue.value;\n\n if (!isDefaultValueBlacklisted(value)) {\n return !isTooLongForDefaultValueSummary(value) ? createSummaryValue(value) : createSummaryValue(type.name, value);\n }\n }\n\n return null;\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/flow/createPropDef.js\n\n\n\n\nvar createPropDef_createFlowPropDef = function createFlowPropDef(propName, docgenInfo) {\n var flowType = docgenInfo.flowType,\n description = docgenInfo.description,\n required = docgenInfo.required,\n defaultValue = docgenInfo.defaultValue;\n return {\n name: propName,\n type: createType(flowType),\n required: required,\n description: description,\n defaultValue: createDefaultValue(defaultValue, flowType)\n };\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/typeScript/createType.js\n\n\n\n\nfunction createType_createType(_ref) {\n var tsType = _ref.tsType,\n required = _ref.required;\n\n // A type could be null if a defaultProp has been provided without a type definition.\n if (tsType == null) {\n return null;\n }\n\n if (!required) {\n return createSummaryValue(tsType.name.replace(\' | undefined\', \'\'));\n }\n\n return createSummaryValue(tsType.name);\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/typeScript/createDefaultValue.js\n\n\nfunction createDefaultValue_createDefaultValue(_ref) {\n var defaultValue = _ref.defaultValue;\n\n if (defaultValue != null) {\n var value = defaultValue.value;\n\n if (!isDefaultValueBlacklisted(value)) {\n return createSummaryValue(value);\n }\n }\n\n return null;\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/typeScript/createPropDef.js\n\n\n\n\nvar createPropDef_createTsPropDef = function createTsPropDef(propName, docgenInfo) {\n var description = docgenInfo.description,\n required = docgenInfo.required;\n return {\n name: propName,\n type: createType_createType(docgenInfo),\n required: required,\n description: description,\n defaultValue: createDefaultValue_createDefaultValue(docgenInfo)\n };\n};\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/index.js\nvar typescript = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/index.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/index.js\nvar flow = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/index.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/index.js\nvar proptypes = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/index.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/convert/index.js\n\n\n\nvar convert_convert = function convert(docgenInfo) {\n var type = docgenInfo.type,\n tsType = docgenInfo.tsType,\n flowType = docgenInfo.flowType;\n if (type != null) return Object(proptypes["convert"])(type);\n if (tsType != null) return Object(typescript["convert"])(tsType);\n if (flowType != null) return Object(flow["convert"])(flowType);\n return null;\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/createPropDef.js\n\n\n\n\n\n\n\n\n\n\n\nfunction createPropDef_createType(type) {\n // A type could be null if a defaultProp has been provided without a type definition.\n return type != null ? createSummaryValue(type.name) : null;\n} // A heuristic to tell if a defaultValue comes from RDT\n\n\nfunction isReactDocgenTypescript(defaultValue) {\n var computed = defaultValue.computed,\n func = defaultValue.func;\n return typeof computed === \'undefined\' && typeof func === \'undefined\';\n}\n\nfunction isStringValued(type) {\n if (!type) {\n return false;\n }\n\n if (type.name === \'string\') {\n return true;\n }\n\n if (type.name === \'enum\') {\n return Array.isArray(type.value) && type.value.every(function (_ref) {\n var tv = _ref.value;\n return typeof tv === \'string\' && tv[0] === \'"\' && tv[tv.length - 1] === \'"\';\n });\n }\n\n return false;\n}\n\nfunction createPropDef_createDefaultValue(defaultValue, type) {\n if (defaultValue != null) {\n var value = defaultValue.value;\n\n if (!isDefaultValueBlacklisted(value)) {\n // Work around a bug in `react-docgen-typescript-loader`, which returns \'string\' for a string\n // default, instead of "\'string\'" -- which is incorrect\n if (isReactDocgenTypescript(defaultValue) && isStringValued(type)) {\n return createSummaryValue(JSON.stringify(value));\n }\n\n return createSummaryValue(value);\n }\n }\n\n return null;\n}\n\nfunction createBasicPropDef(name, type, docgenInfo) {\n var description = docgenInfo.description,\n required = docgenInfo.required,\n defaultValue = docgenInfo.defaultValue;\n return {\n name: name,\n type: createPropDef_createType(type),\n required: required,\n description: description,\n defaultValue: createPropDef_createDefaultValue(defaultValue, type)\n };\n}\n\nfunction applyJsDocResult(propDef, jsDocParsingResult) {\n if (jsDocParsingResult.includesJsDoc) {\n var description = jsDocParsingResult.description,\n extractedTags = jsDocParsingResult.extractedTags;\n\n if (description != null) {\n // eslint-disable-next-line no-param-reassign\n propDef.description = jsDocParsingResult.description;\n }\n\n var hasParams = extractedTags.params != null;\n var hasReturns = extractedTags.returns != null && extractedTags.returns.type != null;\n\n if (hasParams || hasReturns) {\n // eslint-disable-next-line no-param-reassign\n propDef.jsDocTags = {\n params: hasParams && extractedTags.params.map(function (x) {\n return {\n name: x.getPrettyName(),\n description: x.description\n };\n }),\n returns: hasReturns && {\n description: extractedTags.returns.description\n }\n };\n }\n }\n\n return propDef;\n}\n\nvar createPropDef_javaScriptFactory = function javaScriptFactory(propName, docgenInfo, jsDocParsingResult) {\n var propDef = createBasicPropDef(propName, docgenInfo.type, docgenInfo);\n propDef.sbType = convert_convert(docgenInfo);\n return applyJsDocResult(propDef, jsDocParsingResult);\n};\nvar createPropDef_tsFactory = function tsFactory(propName, docgenInfo, jsDocParsingResult) {\n var propDef = createPropDef_createTsPropDef(propName, docgenInfo);\n propDef.sbType = convert_convert(docgenInfo);\n return applyJsDocResult(propDef, jsDocParsingResult);\n};\nvar createPropDef_flowFactory = function flowFactory(propName, docgenInfo, jsDocParsingResult) {\n var propDef = createPropDef_createFlowPropDef(propName, docgenInfo);\n propDef.sbType = convert_convert(docgenInfo);\n return applyJsDocResult(propDef, jsDocParsingResult);\n};\nvar unknownFactory = function unknownFactory(propName, docgenInfo, jsDocParsingResult) {\n var propDef = createBasicPropDef(propName, {\n name: \'unknown\'\n }, docgenInfo);\n return applyJsDocResult(propDef, jsDocParsingResult);\n};\nvar createPropDef_getPropDefFactory = function getPropDefFactory(typeSystem) {\n switch (typeSystem) {\n case TypeSystem.JAVASCRIPT:\n return createPropDef_javaScriptFactory;\n\n case TypeSystem.TYPESCRIPT:\n return createPropDef_tsFactory;\n\n case TypeSystem.FLOW:\n return createPropDef_flowFactory;\n\n default:\n return unknownFactory;\n }\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/extractDocgenProps.js\n\n\n\n\n\n\n\n\n\n\n\n\nvar extractDocgenProps_getTypeSystem = function getTypeSystem(docgenInfo) {\n if (docgenInfo.type != null) {\n return TypeSystem.JAVASCRIPT;\n }\n\n if (docgenInfo.flowType != null) {\n return TypeSystem.FLOW;\n }\n\n if (docgenInfo.tsType != null) {\n return TypeSystem.TYPESCRIPT;\n }\n\n return TypeSystem.UNKNOWN;\n};\n\nvar extractDocgenProps_extractComponentSectionArray = function extractComponentSectionArray(docgenSection) {\n var typeSystem = extractDocgenProps_getTypeSystem(docgenSection[0]);\n var createPropDef = createPropDef_getPropDefFactory(typeSystem);\n return docgenSection.map(function (item) {\n var _item$type;\n\n var sanitizedItem = item;\n\n if ((_item$type = item.type) !== null && _item$type !== void 0 && _item$type.elements) {\n sanitizedItem = Object.assign({}, item, {\n type: Object.assign({}, item.type, {\n value: item.type.elements\n })\n });\n }\n\n return extractProp(sanitizedItem.name, sanitizedItem, typeSystem, createPropDef);\n });\n};\nvar extractDocgenProps_extractComponentSectionObject = function extractComponentSectionObject(docgenSection) {\n var docgenPropsKeys = Object.keys(docgenSection);\n var typeSystem = extractDocgenProps_getTypeSystem(docgenSection[docgenPropsKeys[0]]);\n var createPropDef = createPropDef_getPropDefFactory(typeSystem);\n return docgenPropsKeys.map(function (propName) {\n var docgenInfo = docgenSection[propName];\n return docgenInfo != null ? extractProp(propName, docgenInfo, typeSystem, createPropDef) : null;\n }).filter(Boolean);\n};\nvar extractDocgenProps_extractComponentProps = function extractComponentProps(component, section) {\n var docgenSection = getDocgenSection(component, section);\n\n if (!isValidDocgenSection(docgenSection)) {\n return [];\n } // vue-docgen-api has diverged from react-docgen and returns an array\n\n\n return Array.isArray(docgenSection) ? extractDocgenProps_extractComponentSectionArray(docgenSection) : extractDocgenProps_extractComponentSectionObject(docgenSection);\n};\n\nfunction extractProp(propName, docgenInfo, typeSystem, createPropDef) {\n var jsDocParsingResult = parseJsDoc(docgenInfo.description);\n var isIgnored = jsDocParsingResult.includesJsDoc && jsDocParsingResult.ignore;\n\n if (!isIgnored) {\n var propDef = createPropDef(propName, docgenInfo, jsDocParsingResult);\n return {\n propDef: propDef,\n jsDocTags: jsDocParsingResult.extractedTags,\n docgenInfo: docgenInfo,\n typeSystem: typeSystem\n };\n }\n\n return null;\n}\n\nfunction extractDocgenProps_extractComponentDescription(component) {\n return component != null && getDocgenDescription(component);\n}\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/index.js\n\n\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Description.js\n\n\n\n\n\n\n\n\n\n\nvar DescriptionType;\n\n(function (DescriptionType) {\n DescriptionType["INFO"] = "info";\n DescriptionType["NOTES"] = "notes";\n DescriptionType["DOCGEN"] = "docgen";\n DescriptionType["LEGACY_5_2"] = "legacy-5.2";\n DescriptionType["AUTO"] = "auto";\n})(DescriptionType || (DescriptionType = {}));\n\nvar Description_getNotes = function getNotes(notes) {\n return notes && (typeof notes === \'string\' ? notes : str(notes.markdown) || str(notes.text));\n};\n\nvar Description_getInfo = function getInfo(info) {\n return info && (typeof info === \'string\' ? info : str(info.text));\n};\n\nvar noDescription = function noDescription(component) {\n return null;\n};\n\nvar Description_getDescriptionProps = function getDescriptionProps(_ref, _ref2) {\n var of = _ref.of,\n type = _ref.type,\n markdown = _ref.markdown,\n children = _ref.children;\n var id = _ref2.id,\n storyById = _ref2.storyById;\n\n var _storyById = storyById(id),\n component = _storyById.component,\n parameters = _storyById.parameters;\n\n if (children || markdown) {\n return {\n markdown: children || markdown\n };\n }\n\n var notes = parameters.notes,\n info = parameters.info,\n docs = parameters.docs;\n\n var _ref3 = docs || {},\n _ref3$extractComponen = _ref3.extractComponentDescription,\n extractComponentDescription = _ref3$extractComponen === void 0 ? noDescription : _ref3$extractComponen,\n description = _ref3.description;\n\n var target = of === CURRENT_SELECTION ? component : of; // override component description\n\n var componentDescriptionParameter = description === null || description === void 0 ? void 0 : description.component;\n\n if (componentDescriptionParameter) {\n return {\n markdown: componentDescriptionParameter\n };\n }\n\n switch (type) {\n case DescriptionType.INFO:\n return {\n markdown: Description_getInfo(info)\n };\n\n case DescriptionType.NOTES:\n return {\n markdown: Description_getNotes(notes)\n };\n // FIXME: remove in 6.0\n\n case DescriptionType.LEGACY_5_2:\n return {\n markdown: "\\n".concat(Description_getNotes(notes) || Description_getInfo(info) || \'\', "\\n\\n").concat(extractComponentDescription(target) || \'\', "\\n").trim()\n };\n\n case DescriptionType.DOCGEN:\n case DescriptionType.AUTO:\n default:\n return {\n markdown: extractComponentDescription(target, Object.assign({\n component: component\n }, parameters))\n };\n }\n};\n\nvar Description_DescriptionContainer = function DescriptionContainer(props) {\n var context = Object(react["useContext"])(DocsContext);\n\n var _getDescriptionProps = Description_getDescriptionProps(props, context),\n markdown = _getDescriptionProps.markdown;\n\n return markdown ? /*#__PURE__*/react_default.a.createElement(Description["a" /* Description */], {\n markdown: markdown\n }) : null;\n}; // since we are in the docs blocks, assume default description if for primary component story\n\n\nDescription_DescriptionContainer.defaultProps = {\n of: \'.\'\n};\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/DocsPage.js\nvar blocks_DocsPage = __webpack_require__("./node_modules/@storybook/components/dist/esm/blocks/DocsPage.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Title.js\n\n\n\n\n\n\nvar STORY_KIND_PATH_SEPARATOR = /\\s*\\/\\s*/;\nvar extractTitle = function extractTitle(_ref) {\n var title = _ref.title;\n var groups = title.trim().split(STORY_KIND_PATH_SEPARATOR);\n return groups && groups[groups.length - 1] || title;\n};\nvar Title_Title = function Title(_ref2) {\n var children = _ref2.children;\n var context = Object(react["useContext"])(DocsContext);\n var text = children;\n\n if (!text) {\n text = extractTitle(context);\n }\n\n return text ? /*#__PURE__*/react_default.a.createElement(blocks_DocsPage["d" /* Title */], {\n className: "sbdocs-title"\n }, text) : null;\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Subtitle.js\n\n\n\nvar Subtitle_Subtitle = function Subtitle(_ref) {\n var children = _ref.children;\n\n var _useContext = Object(react["useContext"])(DocsContext),\n id = _useContext.id,\n storyById = _useContext.storyById;\n\n var _storyById = storyById(id),\n parameters = _storyById.parameters;\n\n var text = children;\n\n if (!text) {\n text = parameters === null || parameters === void 0 ? void 0 : parameters.componentSubtitle;\n }\n\n return text ? /*#__PURE__*/react_default.a.createElement(blocks_DocsPage["c" /* Subtitle */], {\n className: "sbdocs-subtitle"\n }, text) : null;\n};\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.object.freeze.js\nvar es_object_freeze = __webpack_require__("../../node_modules/core-js/modules/es.object.freeze.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/util-deprecate/browser.js\nvar browser = __webpack_require__("../../node_modules/util-deprecate/browser.js");\nvar browser_default = /*#__PURE__*/__webpack_require__.n(browser);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/ts-dedent/esm/index.js\nvar ts_dedent_esm = __webpack_require__("../../node_modules/ts-dedent/esm/index.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/typography/DocumentFormatting.js\nvar DocumentFormatting = __webpack_require__("./node_modules/@storybook/components/dist/esm/typography/DocumentFormatting.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.match.js\nvar es_string_match = __webpack_require__("../../node_modules/core-js/modules/es.string.match.js");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.starts-with.js\nvar es_string_starts_with = __webpack_require__("../../node_modules/core-js/modules/es.string.starts-with.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/theming/dist/esm/index.js\nvar theming_dist_esm = __webpack_require__("./node_modules/@storybook/theming/dist/esm/index.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/mdx.js\nfunction mdx_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction mdx_extends() { mdx_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return mdx_extends.apply(this, arguments); }\n\n\n\n\n\n\n\n\n\nfunction mdx_objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = mdx_objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction mdx_objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\nvar mdx_document = window_default.a.document; // Hacky utility for asserting identifiers in MDX Story elements\n\nvar assertIsFn = function assertIsFn(val) {\n if (typeof val !== \'function\') {\n throw new Error("Expected story function, got: ".concat(val));\n }\n\n return val;\n}; // Hacky utility for adding mdxStoryToId to the default context\n\nvar mdx_AddContext = function AddContext(props) {\n var children = props.children,\n rest = mdx_objectWithoutProperties(props, ["children"]);\n\n var parentContext = react_default.a.useContext(DocsContext);\n return /*#__PURE__*/react_default.a.createElement(DocsContext.Provider, {\n value: Object.assign({}, parentContext, rest)\n }, children);\n};\nvar mdx_CodeOrSourceMdx = function CodeOrSourceMdx(_ref) {\n var className = _ref.className,\n children = _ref.children,\n rest = mdx_objectWithoutProperties(_ref, ["className", "children"]);\n\n // markdown-to-jsx does not add className to inline code\n if (typeof className !== \'string\' && (typeof children !== \'string\' || !children.match(/[\\n\\r]/g))) {\n return /*#__PURE__*/react_default.a.createElement(DocumentFormatting["a" /* Code */], null, children);\n } // className: "lang-jsx"\n\n\n var language = className && className.split(\'-\');\n return /*#__PURE__*/react_default.a.createElement(blocks_Source["a" /* Source */], mdx_extends({\n language: language && language[1] || \'plaintext\',\n format: false,\n code: children\n }, rest));\n};\n\nfunction mdx_navigate(url) {\n esm["a" /* addons */].getChannel().emit(dist_esm["NAVIGATE_URL"], url);\n} // @ts-ignore\n\n\nvar A = DocumentFormatting["e" /* components */].a;\n\nvar mdx_AnchorInPage = function AnchorInPage(_ref2) {\n var hash = _ref2.hash,\n children = _ref2.children;\n return /*#__PURE__*/react_default.a.createElement(A, {\n href: hash,\n target: "_self",\n onClick: function onClick(event) {\n var id = hash.substring(1);\n var element = mdx_document.getElementById(id);\n\n if (element) {\n mdx_navigate(hash);\n }\n }\n }, children);\n};\n\nvar mdx_AnchorMdx = function AnchorMdx(props) {\n var href = props.href,\n target = props.target,\n children = props.children,\n rest = mdx_objectWithoutProperties(props, ["href", "target", "children"]);\n\n if (href) {\n // Enable scrolling for in-page anchors.\n if (href.startsWith(\'#\')) {\n return /*#__PURE__*/react_default.a.createElement(mdx_AnchorInPage, {\n hash: href\n }, children);\n } // Links to other pages of SB should use the base URL of the top level iframe instead of the base URL of the preview iframe.\n\n\n if (target !== \'_blank\') {\n return /*#__PURE__*/react_default.a.createElement(A, mdx_extends({\n href: href,\n onClick: function onClick(event) {\n event.preventDefault(); // use the A element\'s href, which has been modified for\n // local paths without a `?path=` query param prefix\n\n mdx_navigate(event.currentTarget.getAttribute(\'href\'));\n },\n target: target\n }, rest), children);\n }\n } // External URL dont need any modification.\n\n\n return /*#__PURE__*/react_default.a.createElement(A, props);\n};\nvar SUPPORTED_MDX_HEADERS = [\'h1\', \'h2\', \'h3\', \'h4\', \'h5\', \'h6\'];\nvar OcticonHeaders = SUPPORTED_MDX_HEADERS.reduce(function (acc, headerType) {\n return Object.assign({}, acc, mdx_defineProperty({}, headerType, Object(theming_dist_esm["styled"])(DocumentFormatting["e" /* components */][headerType])({\n \'& svg\': {\n visibility: \'hidden\'\n },\n \'&:hover svg\': {\n visibility: \'visible\'\n }\n })));\n}, {});\nvar OcticonAnchor = theming_dist_esm["styled"].a(function () {\n return {\n float: \'left\',\n paddingRight: \'4px\',\n marginLeft: \'-20px\',\n // Allow the theme\'s text color to override the default link color.\n color: \'inherit\'\n };\n});\n\nvar mdx_HeaderWithOcticonAnchor = function HeaderWithOcticonAnchor(_ref3) {\n var as = _ref3.as,\n id = _ref3.id,\n children = _ref3.children,\n rest = mdx_objectWithoutProperties(_ref3, ["as", "id", "children"]);\n\n // @ts-ignore\n var OcticonHeader = OcticonHeaders[as];\n var hash = "#".concat(id);\n return /*#__PURE__*/react_default.a.createElement(OcticonHeader, mdx_extends({\n id: id\n }, rest), /*#__PURE__*/react_default.a.createElement(OcticonAnchor, {\n "aria-hidden": "true",\n href: hash,\n tabIndex: -1,\n target: "_self",\n onClick: function onClick(event) {\n var element = mdx_document.getElementById(id);\n\n if (element) {\n mdx_navigate(hash);\n }\n }\n }, /*#__PURE__*/react_default.a.createElement("svg", {\n viewBox: "0 0 16 16",\n version: "1.1",\n width: "16",\n height: "16",\n "aria-hidden": "true",\n fill: "currentColor"\n }, /*#__PURE__*/react_default.a.createElement("path", {\n fillRule: "evenodd",\n d: "M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"\n }))), children);\n};\n\nvar mdx_HeaderMdx = function HeaderMdx(props) {\n var as = props.as,\n id = props.id,\n children = props.children,\n rest = mdx_objectWithoutProperties(props, ["as", "id", "children"]); // An id should have been added on every header by the "remark-slug" plugin.\n\n\n if (id) {\n return /*#__PURE__*/react_default.a.createElement(mdx_HeaderWithOcticonAnchor, mdx_extends({\n as: as,\n id: id\n }, rest), children);\n } // @ts-ignore\n\n\n var Header = DocumentFormatting["e" /* components */][as]; // Make sure it still work if "remark-slug" plugin is not present.\n\n return /*#__PURE__*/react_default.a.createElement(Header, props);\n};\nvar HeadersMdx = SUPPORTED_MDX_HEADERS.reduce(function (acc, headerType) {\n return Object.assign({}, acc, mdx_defineProperty({}, headerType, function (props) {\n return /*#__PURE__*/react_default.a.createElement(mdx_HeaderMdx, mdx_extends({\n as: headerType\n }, props));\n }));\n}, {});\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Subheading.js\n\n\n\n\n\nvar Subheading_Subheading = function Subheading(_ref) {\n var children = _ref.children,\n disableAnchor = _ref.disableAnchor;\n\n if (disableAnchor || typeof children !== \'string\') {\n return /*#__PURE__*/react_default.a.createElement(DocumentFormatting["c" /* H3 */], null, children);\n }\n\n var tagID = children.toLowerCase().replace(/[^a-z0-9]/gi, \'-\');\n return /*#__PURE__*/react_default.a.createElement(mdx_HeaderMdx, {\n as: "h3",\n id: tagID\n }, children);\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/DocsStory.js\n\n\n\nvar _templateObject;\n\n\n\n\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\n\n\n\n\n\n\n\n\nvar warnStoryDescription = browser_default()(function () {}, Object(ts_dedent_esm["a" /* default */])(_templateObject || (_templateObject = _taggedTemplateLiteral(["\\n Deprecated parameter: docs.storyDescription => docs.description.story\\n \\n https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#docs-description-parameter\\n "]))));\nvar DocsStory_DocsStory = function DocsStory(_ref) {\n var id = _ref.id,\n name = _ref.name,\n _ref$expanded = _ref.expanded,\n expanded = _ref$expanded === void 0 ? true : _ref$expanded,\n _ref$withToolbar = _ref.withToolbar,\n withToolbar = _ref$withToolbar === void 0 ? false : _ref$withToolbar,\n _ref$parameters = _ref.parameters,\n parameters = _ref$parameters === void 0 ? {} : _ref$parameters;\n var description;\n var docs = parameters.docs;\n\n if (expanded && docs) {\n var _docs$description;\n\n description = (_docs$description = docs.description) === null || _docs$description === void 0 ? void 0 : _docs$description.story;\n\n if (!description) {\n description = docs.storyDescription;\n if (description) warnStoryDescription();\n }\n }\n\n var subheading = expanded && name;\n return /*#__PURE__*/react_default.a.createElement(Anchor_Anchor, {\n storyId: id\n }, subheading && /*#__PURE__*/react_default.a.createElement(Subheading_Subheading, null, subheading), description && /*#__PURE__*/react_default.a.createElement(Description_DescriptionContainer, {\n markdown: description\n }), /*#__PURE__*/react_default.a.createElement(Canvas_Canvas, {\n withToolbar: withToolbar\n }, /*#__PURE__*/react_default.a.createElement(Story_Story, {\n id: id,\n parameters: parameters\n })));\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Primary.js\nfunction Primary_extends() { Primary_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return Primary_extends.apply(this, arguments); }\n\n\n\n\n\n\n\nvar Primary_Primary = function Primary(_ref) {\n var name = _ref.name;\n\n var _useContext = Object(react["useContext"])(DocsContext),\n getComponentStories = _useContext.componentStories;\n\n var componentStories = getComponentStories();\n var story;\n\n if (componentStories) {\n story = name ? componentStories.find(function (s) {\n return s.name === name;\n }) : componentStories[0];\n }\n\n return story ? /*#__PURE__*/react_default.a.createElement(DocsStory_DocsStory, Primary_extends({}, story, {\n expanded: false,\n withToolbar: true\n })) : null;\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Heading.js\n\n\n\n\n\nvar Heading_Heading = function Heading(_ref) {\n var children = _ref.children,\n disableAnchor = _ref.disableAnchor;\n\n if (disableAnchor || typeof children !== \'string\') {\n return /*#__PURE__*/react_default.a.createElement(DocumentFormatting["b" /* H2 */], null, children);\n }\n\n var tagID = children.toLowerCase().replace(/[^a-z0-9]/gi, \'-\');\n return /*#__PURE__*/react_default.a.createElement(mdx_HeaderMdx, {\n as: "h2",\n id: tagID\n }, children);\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Stories.js\nfunction Stories_extends() { Stories_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return Stories_extends.apply(this, arguments); }\n\n\n\n\n\n\n\n\n\nvar Stories_Stories = function Stories(_ref) {\n var title = _ref.title,\n _ref$includePrimary = _ref.includePrimary,\n includePrimary = _ref$includePrimary === void 0 ? false : _ref$includePrimary;\n\n var _useContext = Object(react["useContext"])(DocsContext),\n componentStories = _useContext.componentStories;\n\n var stories = componentStories();\n stories = stories.filter(function (story) {\n var _story$parameters, _story$parameters$doc;\n\n return !((_story$parameters = story.parameters) !== null && _story$parameters !== void 0 && (_story$parameters$doc = _story$parameters.docs) !== null && _story$parameters$doc !== void 0 && _story$parameters$doc.disable);\n });\n if (!includePrimary) stories = stories.slice(1);\n\n if (!stories || stories.length === 0) {\n return null;\n }\n\n return /*#__PURE__*/react_default.a.createElement(react_default.a.Fragment, null, /*#__PURE__*/react_default.a.createElement(Heading_Heading, null, title), stories.map(function (story) {\n return story && /*#__PURE__*/react_default.a.createElement(DocsStory_DocsStory, Stories_extends({\n key: story.id\n }, story, {\n expanded: true\n }));\n }));\n};\nStories_Stories.defaultProps = {\n title: \'Stories\'\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/DocsPage.js\n\n\n\n\n\n\n\n\nvar DocsPage_DocsPage = function DocsPage() {\n return /*#__PURE__*/react_default.a.createElement(react_default.a.Fragment, null, /*#__PURE__*/react_default.a.createElement(Title_Title, null), /*#__PURE__*/react_default.a.createElement(Subtitle_Subtitle, null), /*#__PURE__*/react_default.a.createElement(Description_DescriptionContainer, null), /*#__PURE__*/react_default.a.createElement(Primary_Primary, null), /*#__PURE__*/react_default.a.createElement(blocks_ArgsTable_ArgsTable, {\n story: PRIMARY_STORY\n }), /*#__PURE__*/react_default.a.createElement(Stories_Stories, null));\n};\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/web.url.js\nvar web_url = __webpack_require__("../../node_modules/core-js/modules/web.url.js");\n\n// EXTERNAL MODULE: ./node_modules/@storybook/theming/dist/esm/ensure.js\nvar ensure = __webpack_require__("./node_modules/@storybook/theming/dist/esm/ensure.js");\n\n// EXTERNAL MODULE: ./node_modules/emotion-theming/dist/emotion-theming.browser.esm.js\nvar emotion_theming_browser_esm = __webpack_require__("./node_modules/emotion-theming/dist/emotion-theming.browser.esm.js");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/DocsContainer.js\n\n\n\nvar DocsContainer_templateObject;\n\nfunction DocsContainer_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DocsContainer_document = window_default.a.document,\n globalWindow = window_default.a.window;\nvar defaultComponents = Object.assign({}, DocumentFormatting["e" /* components */], {\n code: mdx_CodeOrSourceMdx,\n a: mdx_AnchorMdx\n}, HeadersMdx);\nvar warnOptionsTheme = browser_default()(function () {}, Object(ts_dedent_esm["a" /* default */])(DocsContainer_templateObject || (DocsContainer_templateObject = DocsContainer_taggedTemplateLiteral(["\\n Deprecated parameter: options.theme => docs.theme\\n\\n https://github.com/storybookjs/storybook/blob/next/addons/docs/docs/theming.md#storybook-theming\\n"]))));\nvar DocsContainer_DocsContainer = function DocsContainer(_ref) {\n var context = _ref.context,\n children = _ref.children;\n var storyId = context.id,\n storyById = context.storyById;\n\n var _storyById = storyById(storyId),\n _storyById$parameters = _storyById.parameters,\n _storyById$parameters2 = _storyById$parameters.options,\n options = _storyById$parameters2 === void 0 ? {} : _storyById$parameters2,\n _storyById$parameters3 = _storyById$parameters.docs,\n docs = _storyById$parameters3 === void 0 ? {} : _storyById$parameters3;\n\n var themeVars = docs.theme;\n\n if (!themeVars && options.theme) {\n warnOptionsTheme();\n themeVars = options.theme;\n }\n\n var theme = Object(ensure["a" /* ensure */])(themeVars);\n var allComponents = Object.assign({}, defaultComponents, docs.components);\n Object(react["useEffect"])(function () {\n var url;\n\n try {\n url = new URL(globalWindow.parent.location);\n } catch (err) {\n return;\n }\n\n if (url.hash) {\n var element = DocsContainer_document.getElementById(url.hash.substring(1));\n\n if (element) {\n // Introducing a delay to ensure scrolling works when it\'s a full refresh.\n setTimeout(function () {\n scrollToElement(element);\n }, 200);\n }\n } else {\n var _element = DocsContainer_document.getElementById(anchorBlockIdFromId(storyId)) || DocsContainer_document.getElementById(storyBlockIdFromId(storyId));\n\n if (_element) {\n var allStories = _element.parentElement.querySelectorAll(\'[id|="anchor-"]\');\n\n var scrollTarget = _element;\n\n if (allStories && allStories[0] === _element) {\n // Include content above first story\n scrollTarget = DocsContainer_document.getElementById(\'docs-root\');\n } // Introducing a delay to ensure scrolling works when it\'s a full refresh.\n\n\n setTimeout(function () {\n scrollToElement(scrollTarget, \'start\');\n }, 200);\n }\n }\n }, [storyId]);\n return /*#__PURE__*/react_default.a.createElement(DocsContext.Provider, {\n value: context\n }, /*#__PURE__*/react_default.a.createElement(SourceContainer_SourceContainer, null, /*#__PURE__*/react_default.a.createElement(emotion_theming_browser_esm["a" /* ThemeProvider */], {\n theme: theme\n }, /*#__PURE__*/react_default.a.createElement(react_dist_esm["a" /* MDXProvider */], {\n components: allComponents\n }, /*#__PURE__*/react_default.a.createElement(blocks_DocsPage["b" /* DocsWrapper */], {\n className: "sbdocs sbdocs-wrapper"\n }, /*#__PURE__*/react_default.a.createElement(blocks_DocsPage["a" /* DocsContent */], {\n className: "sbdocs sbdocs-content"\n }, children))))));\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Meta.js\n\n\n\n\n\n\n\n\n\nvar Meta_document = window_default.a.document;\n\nfunction getFirstStoryId(docsContext) {\n var stories = docsContext.componentStories();\n return stories.length > 0 ? stories[0].id : null;\n}\n\nfunction renderAnchor() {\n var context = Object(react["useContext"])(DocsContext);\n var anchorId = getFirstStoryId(context) || context.id;\n return /*#__PURE__*/react_default.a.createElement(Anchor_Anchor, {\n storyId: anchorId\n });\n}\n/**\n * This component is used to declare component metadata in docs\n * and gets transformed into a default export underneath the hood.\n */\n\n\nvar Meta = function Meta() {\n var params = new URL(Meta_document.location).searchParams;\n var isDocs = params.get(\'viewMode\') === \'docs\';\n return isDocs ? renderAnchor() : null;\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Preview.js\n\n\n\nvar Preview_templateObject;\n\nfunction Preview_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\n\n\n\n\nvar Preview_Preview = browser_default()(function (props) {\n return /*#__PURE__*/react_default.a.createElement(Canvas_Canvas, props);\n}, Object(ts_dedent_esm["a" /* default */])(Preview_templateObject || (Preview_templateObject = Preview_taggedTemplateLiteral(["\\n Preview doc block has been renamed to Canvas.\\n\\n https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewprops-renamed\\n "]))));\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Props.js\n\n\n\nvar Props_templateObject;\n\nfunction Props_taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\n\n\n\n\n\nvar Props = browser_default()(function (props) {\n return /*#__PURE__*/react_default.a.createElement(blocks_ArgsTable_ArgsTable, props);\n}, Object(ts_dedent_esm["a" /* default */])(Props_templateObject || (Props_templateObject = Props_taggedTemplateLiteral(["\\n Props doc block has been renamed to ArgsTable.\\n\\n https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewprops-renamed\\n "])))); // @ts-ignore\n\nProps.defaultProps = {\n of: CURRENT_SELECTION\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/Wrapper.js\n\nvar Wrapper_Wrapper = function Wrapper(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/react_default.a.createElement("div", {\n style: {\n fontFamily: \'sans-serif\'\n }\n }, children);\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/blocks/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: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/index.js\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL0FuY2hvci5qcz81NWMxIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvRG9jc0NvbnRleHQuanM/Y2Y1ZSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL3R5cGVzLmpzP2YxZTAiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy91dGlscy5qcz9jNjFmIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvdXNlU3RvcnkuanM/ZTQ5NCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL1N0b3J5LmpzPzFiZTIiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9BcmdzVGFibGUuanM/ZWQxMCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vc2hhcmVkLmpzP2E0ZjMiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9Tb3VyY2VDb250YWluZXIuanM/OTg5NCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL2VuaGFuY2VTb3VyY2UuanM/ZTIxMyIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL1NvdXJjZS5qcz82OTA0Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvQ2FudmFzLmpzPzFkZDEiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vdHlwZXMuanM/NThmZSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi91dGlscy9kZWZhdWx0VmFsdWUuanM/ODgwNiIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi91dGlscy9zdHJpbmcuanM/YjI2NSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi91dGlscy9kb2NnZW5JbmZvLmpzPzkxN2UiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vdXRpbHMvaW5kZXguanM/Zjc2ZCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2pzZG9jUGFyc2VyLmpzPzI3YTgiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi91dGlscy5qcz83NjM0Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvZG9jZ2VuL2Zsb3cvY3JlYXRlVHlwZS5qcz9hYzA0Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvZG9jZ2VuL2Zsb3cvY3JlYXRlRGVmYXVsdFZhbHVlLmpzPzA0MjYiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vZmxvdy9jcmVhdGVQcm9wRGVmLmpzPzI2ZDciLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vdHlwZVNjcmlwdC9jcmVhdGVUeXBlLmpzPzI3MTkiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vdHlwZVNjcmlwdC9jcmVhdGVEZWZhdWx0VmFsdWUuanM/NThkMiIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi90eXBlU2NyaXB0L2NyZWF0ZVByb3BEZWYuanM/M2JkMCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvaW5kZXguanM/NWMyZCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi9jcmVhdGVQcm9wRGVmLmpzP2Q3N2IiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vZXh0cmFjdERvY2dlblByb3BzLmpzPzZhNjMiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vaW5kZXguanM/YWVkMCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL0Rlc2NyaXB0aW9uLmpzPzlkMTMiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9UaXRsZS5qcz9lYTI3Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvU3VidGl0bGUuanM/OGViOCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL21keC5qcz81MWUxIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvU3ViaGVhZGluZy5qcz9jYmRkIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvRG9jc1N0b3J5LmpzPzNlYzkiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9QcmltYXJ5LmpzPzIwMzAiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9IZWFkaW5nLmpzPzI4Y2UiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9TdG9yaWVzLmpzP2FmZWQiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fbWFpbi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9Eb2NzUGFnZS5qcz8yYzU4Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvRG9jc0NvbnRhaW5lci5qcz9jM2EzIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvTWV0YS5qcz9iMTQ2Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvUHJldmlldy5qcz9mYTRhIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX21haW4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvUHJvcHMuanM/MWYyOSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL1dyYXBwZXIuanM/MTQ0ZCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL2luZGV4LmpzP2ZmOWMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7QUFDbkI7QUFDUDtBQUNBO0FBQ08sSUFBSSxhQUFNO0FBQ2pCO0FBQ0E7QUFDQSxzQkFBc0IsZUFBSztBQUMzQjtBQUNBLEdBQUc7QUFDSCxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDVnNDO0FBQ1U7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLHVCQUFZO0FBQ2hCLEVBQUUsdUJBQVksaUNBQWlDLDhCQUFhLEdBQUc7QUFDL0QsRUFBRSx1QkFBWTtBQUNkOztBQUVPLGtCQUFrQix1QkFBWSxrQjs7QUNmOUI7QUFDQSx3Qjs7Ozs7Ozs7Ozs7Ozs7QUNEbUM7QUFDRDtBQUNHO0FBQ0Q7QUFDQTtBQUNHO0FBQ0M7QUFDRjs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ2hELENBQUMsRUFBRSx3Q0FBTSxDQUFDLHNCQUFlLEtBQUssc0JBQWUsR0FBRyw2QkFBc0IsNko7O0FDYjNCO0FBQ0U7O0FBRTdDLElBQUksb0JBQWU7O0FBRW5CLFNBQVMsMkJBQXNCLGdCQUFnQixZQUFZLHdCQUF3QixFQUFFLHdEQUF3RCxPQUFPLDRCQUE0QixFQUFFLEdBQUc7O0FBRTNKO0FBQ2E7QUFDUjtBQUNTO0FBQ0k7QUFDckMsWUFBWSxpQkFBUztBQUM1QixzQkFBc0IsZUFBSyxlQUFlLDBCQUFTO0FBQ25ELENBQUMsRUFBRSx3Q0FBTSxDQUFDLG9CQUFlLEtBQUssb0JBQWUsR0FBRywyQkFBc0IsOEpBQThKOztBQUVwTztBQUNBLE1BQU0saUJBQWlCO0FBQ3ZCLEU7O0FDbEIwQjtBQUNuQixJQUFJLGVBQU87QUFDbEI7QUFDQSxzQkFBc0IsZUFBSztBQUMzQjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRTs7QUNSZ0c7QUFDdkU7QUFDRztBQUNIO0FBQ0s7QUFDQTtBQUNIO0FBQ0s7QUFDSjtBQUNGO0FBQ0g7QUFDRztBQUNBO0FBQ0Y7QUFDQztBQUNTO0FBQ1I7QUFDRjtBQUNLO0FBQ0Y7QUFDSDtBQUNFO0FBQ0YiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgdmFyIGFuY2hvckJsb2NrSWRGcm9tSWQgPSBmdW5jdGlvbiBhbmNob3JCbG9ja0lkRnJvbUlkKHN0b3J5SWQpIHtcbiAgcmV0dXJuIFwiYW5jaG9yLS1cIi5jb25jYXQoc3RvcnlJZCk7XG59O1xuZXhwb3J0IHZhciBBbmNob3IgPSBmdW5jdGlvbiBBbmNob3IoX3JlZikge1xuICB2YXIgc3RvcnlJZCA9IF9yZWYuc3RvcnlJZCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBpZDogYW5jaG9yQmxvY2tJZEZyb21JZChzdG9yeUlkKVxuICB9LCBjaGlsZHJlbik7XG59OyIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB3aW5kb3cgYXMgZ2xvYmFsV2luZG93IH0gZnJvbSAnZ2xvYmFsJztcblxuLy8gV2UgYWRkIERvY3NDb250ZXh0IHRvIHdpbmRvdy4gVGhlIHJlYXNvbiBpcyB0aGF0IGluIGNhc2UgRG9jc0NvbnRleHQudHMgaXNcbi8vIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIChtYXliZSBvbmNlIGRpcmVjdGx5LCBhbmQgYW5vdGhlciB0aW1lIGZyb20gYSBtaW5pZmllZCBidW5kbGUpXG4vLyB3ZSB3aWxsIGhhdmUgbXVsdGlwbGUgRG9jc0NvbnRleHQgZGVmaW5pdGlvbnMgLSBsZWFkaW5nIHRvIGxvc3QgY29udGV4dCBpblxuLy8gdGhlIFJlYWN0IGNvbXBvbmVudCB0cmVlLlxuLy8gVGhpcyB3YXMgc3BlY2lmaWNhbGx5IGEgcHJvYmxlbSB3aXRoIHRoZSBWaXRlIGJ1aWxkZXIuXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5pZiAoZ2xvYmFsV2luZG93Ll9fRE9DU19DT05URVhUX18gPT09IHVuZGVmaW5lZCkge1xuICBnbG9iYWxXaW5kb3cuX19ET0NTX0NPTlRFWFRfXyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHt9KTtcbiAgZ2xvYmFsV2luZG93Ll9fRE9DU19DT05URVhUX18uZGlzcGxheU5hbWUgPSAnRG9jc0NvbnRleHQnO1xufVxuXG5leHBvcnQgdmFyIERvY3NDb250ZXh0ID0gZ2xvYmFsV2luZG93Ll9fRE9DU19DT05URVhUX187IiwiZXhwb3J0IHZhciBDVVJSRU5UX1NFTEVDVElPTiA9ICcuJztcbmV4cG9ydCB2YXIgUFJJTUFSWV9TVE9SWSA9ICdeJzsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbnZhciB0aXRsZUNhc2UgPSBmdW5jdGlvbiB0aXRsZUNhc2Uoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJy0nKS5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcGFydC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHBhcnQuc2xpY2UoMSk7XG4gIH0pLmpvaW4oJycpO1xufTtcblxuZXhwb3J0IHZhciBnZXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnQpIHtcbiAgaWYgKCFjb21wb25lbnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGNvbXBvbmVudC5pbmNsdWRlcygnLScpKSB7XG4gICAgICByZXR1cm4gdGl0bGVDYXNlKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuX19kb2NnZW5JbmZvICYmIGNvbXBvbmVudC5fX2RvY2dlbkluZm8uZGlzcGxheU5hbWUpIHtcbiAgICByZXR1cm4gY29tcG9uZW50Ll9fZG9jZ2VuSW5mby5kaXNwbGF5TmFtZTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnQubmFtZTtcbn07XG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9FbGVtZW50KGVsZW1lbnQpIHtcbiAgdmFyIGJsb2NrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnc3RhcnQnO1xuICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGlubGluZTogJ25lYXJlc3QnXG4gIH0pO1xufSIsImltcG9ydCBcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qc1wiO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qc1wiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3J5KHN0b3J5SWQsIGNvbnRleHQpIHtcbiAgdmFyIHN0b3JpZXMgPSB1c2VTdG9yaWVzKFtzdG9yeUlkXSwgY29udGV4dCk7XG4gIHJldHVybiBzdG9yaWVzICYmIHN0b3JpZXNbMF07XG59XG5leHBvcnQgZnVuY3Rpb24gdXNlU3RvcmllcyhzdG9yeUlkcywgY29udGV4dCkge1xuICB2YXIgaW5pdGlhbFN0b3JpZXNCeUlkID0gY29udGV4dC5jb21wb25lbnRTdG9yaWVzKCkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHN0b3J5KSB7XG4gICAgYWNjW3N0b3J5LmlkXSA9IHN0b3J5O1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoaW5pdGlhbFN0b3JpZXNCeUlkKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc3Rvcmllc0J5SWQgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0U3RvcmllcyA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBQcm9taXNlLmFsbChzdG9yeUlkcy5tYXAoIC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKCAvKiNfX1BVUkVfXyovcmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoZnVuY3Rpb24gX2NhbGxlZShzdG9yeUlkKSB7XG4gICAgICAgIHZhciBzdG9yeTtcbiAgICAgICAgcmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmxvYWRTdG9yeShzdG9yeUlkKTtcblxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgc3RvcnkgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgICAgIHNldFN0b3JpZXMoZnVuY3Rpb24gKGN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50W3N0b3J5SWRdID09PSBzdG9yeSA/IGN1cnJlbnQgOiBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50LCBfZGVmaW5lUHJvcGVydHkoe30sIHN0b3J5SWQsIHN0b3J5KSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sIF9jYWxsZWUpO1xuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKF94KSB7XG4gICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKSkpO1xuICB9KTtcbiAgcmV0dXJuIHN0b3J5SWRzLm1hcChmdW5jdGlvbiAoc3RvcnlJZCkge1xuICAgIHJldHVybiBzdG9yaWVzQnlJZFtzdG9yeUlkXTtcbiAgfSk7XG59IiwiZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNRFhQcm92aWRlciB9IGZyb20gJ0BtZHgtanMvcmVhY3QnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICdnbG9iYWwnO1xuaW1wb3J0IHsgcmVzZXRDb21wb25lbnRzLCBTdG9yeSBhcyBQdXJlU3RvcnksIFN0b3J5U2tlbGV0b24gfSBmcm9tICdAc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgdG9JZCwgc3RvcnlOYW1lRnJvbUV4cG9ydCB9IGZyb20gJ0BzdG9yeWJvb2svY3NmJztcbmltcG9ydCB7IGFkZG9ucyB9IGZyb20gJ0BzdG9yeWJvb2svYWRkb25zJztcbmltcG9ydCBFdmVudHMgZnJvbSAnQHN0b3J5Ym9vay9jb3JlLWV2ZW50cyc7XG5pbXBvcnQgeyBDVVJSRU5UX1NFTEVDVElPTiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbmltcG9ydCB7IHVzZVN0b3J5IH0gZnJvbSAnLi91c2VTdG9yeSc7XG5leHBvcnQgdmFyIHN0b3J5QmxvY2tJZEZyb21JZCA9IGZ1bmN0aW9uIHN0b3J5QmxvY2tJZEZyb21JZChzdG9yeUlkKSB7XG4gIHJldHVybiBcInN0b3J5LS1cIi5jb25jYXQoc3RvcnlJZCk7XG59O1xuZXhwb3J0IHZhciBsb29rdXBTdG9yeUlkID0gZnVuY3Rpb24gbG9va3VwU3RvcnlJZChzdG9yeU5hbWUsIF9yZWYpIHtcbiAgdmFyIG1keFN0b3J5TmFtZVRvS2V5ID0gX3JlZi5tZHhTdG9yeU5hbWVUb0tleSxcbiAgICAgIG1keENvbXBvbmVudEFubm90YXRpb25zID0gX3JlZi5tZHhDb21wb25lbnRBbm5vdGF0aW9ucztcbiAgcmV0dXJuIHRvSWQobWR4Q29tcG9uZW50QW5ub3RhdGlvbnMuaWQgfHwgbWR4Q29tcG9uZW50QW5ub3RhdGlvbnMudGl0bGUsIHN0b3J5TmFtZUZyb21FeHBvcnQobWR4U3RvcnlOYW1lVG9LZXlbc3RvcnlOYW1lXSkpO1xufTtcbmV4cG9ydCB2YXIgZ2V0U3RvcnlJZCA9IGZ1bmN0aW9uIGdldFN0b3J5SWQocHJvcHMsIGNvbnRleHQpIHtcbiAgdmFyIF9yZWYyID0gcHJvcHMsXG4gICAgICBpZCA9IF9yZWYyLmlkO1xuICB2YXIgX3JlZjMgPSBwcm9wcyxcbiAgICAgIG5hbWUgPSBfcmVmMy5uYW1lO1xuICB2YXIgaW5wdXRJZCA9IGlkID09PSBDVVJSRU5UX1NFTEVDVElPTiA/IGNvbnRleHQuaWQgOiBpZDtcbiAgcmV0dXJuIGlucHV0SWQgfHwgbG9va3VwU3RvcnlJZChuYW1lLCBjb250ZXh0KTtcbn07XG5leHBvcnQgdmFyIGdldFN0b3J5UHJvcHMgPSBmdW5jdGlvbiBnZXRTdG9yeVByb3BzKF9yZWY0LCBzdG9yeSwgY29udGV4dCwgb25TdG9yeUZuQ2FsbGVkKSB7XG4gIHZhciBoZWlnaHQgPSBfcmVmNC5oZWlnaHQsXG4gICAgICBpbmxpbmUgPSBfcmVmNC5pbmxpbmU7XG4gIHZhciBzdG9yeU5hbWUgPSBzdG9yeS5uYW1lLFxuICAgICAgcGFyYW1ldGVycyA9IHN0b3J5LnBhcmFtZXRlcnM7XG4gIHZhciBfcGFyYW1ldGVycyRkb2NzID0gcGFyYW1ldGVycy5kb2NzLFxuICAgICAgZG9jcyA9IF9wYXJhbWV0ZXJzJGRvY3MgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtZXRlcnMkZG9jcztcblxuICBpZiAoZG9jcy5kaXNhYmxlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gcHJlZmVyIGJsb2NrIHByb3BzLCB0aGVuIHN0b3J5IHBhcmFtZXRlcnMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLXNwZWNpZmljIHNldHRpbmdzIGFuZCBvcHRpb25hbGx5IG92ZXJyaWRkZW4gYnkgdXNlcnNcblxuXG4gIHZhciBfZG9jcyRpbmxpbmVTdG9yaWVzID0gZG9jcy5pbmxpbmVTdG9yaWVzLFxuICAgICAgaW5saW5lU3RvcmllcyA9IF9kb2NzJGlubGluZVN0b3JpZXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX2RvY3MkaW5saW5lU3RvcmllcyxcbiAgICAgIF9kb2NzJGlmcmFtZUhlaWdodCA9IGRvY3MuaWZyYW1lSGVpZ2h0LFxuICAgICAgaWZyYW1lSGVpZ2h0ID0gX2RvY3MkaWZyYW1lSGVpZ2h0ID09PSB2b2lkIDAgPyAxMDAgOiBfZG9jcyRpZnJhbWVIZWlnaHQsXG4gICAgICBwcmVwYXJlRm9ySW5saW5lID0gZG9jcy5wcmVwYXJlRm9ySW5saW5lO1xuICB2YXIgc3RvcnlJc0lubGluZSA9IHR5cGVvZiBpbmxpbmUgPT09ICdib29sZWFuJyA/IGlubGluZSA6IGlubGluZVN0b3JpZXM7XG5cbiAgaWYgKHN0b3J5SXNJbmxpbmUgJiYgIXByZXBhcmVGb3JJbmxpbmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdG9yeSAnXCIuY29uY2F0KHN0b3J5TmFtZSwgXCInIGlzIHNldCB0byByZW5kZXIgaW5saW5lLCBidXQgbm8gJ3ByZXBhcmVGb3JJbmxpbmUnIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGluIHlvdXIgZG9jcyBjb25maWd1cmF0aW9uIVwiKSk7XG4gIH1cblxuICB2YXIgYm91bmRTdG9yeUZuID0gZnVuY3Rpb24gYm91bmRTdG9yeUZuKCkge1xuICAgIHZhciBzdG9yeVJlc3VsdCA9IHN0b3J5LnVuYm91bmRTdG9yeUZuKE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQuZ2V0U3RvcnlDb250ZXh0KHN0b3J5KSwge1xuICAgICAgbG9hZGVkOiB7fSxcbiAgICAgIGFib3J0U2lnbmFsOiB1bmRlZmluZWQsXG4gICAgICBjYW52YXNFbGVtZW50OiB1bmRlZmluZWRcbiAgICB9KSk7IC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgYm91bmQgc3RvcnkgZnVuY3Rpb24gaGFzIGFjdHVhbGx5IGJlZW4gY2FsbGVkIGJlZm9yZSB3ZVxuICAgIC8vIGNvbnNpZGVyIHRoZSBzdG9yeSByZW5kZXJlZC4gQ2VydGFpbiBmcmFtZXdvcmtzIChpLmUuIGFuZ3VsYXIpIGRvbid0IGFjdHVhbGx5IHJlbmRlclxuICAgIC8vIHRoZSBjb21wb25lbnQgaW4gdGhlIHZlcnkgZmlyc3QgcmVhY3QgcmVuZGVyIGN5Y2xlLCBhbmQgc28gd2UgY2FuJ3QganVzdCB3YWl0IHVudGlsIHRoZVxuICAgIC8vIGBQdXJlU3RvcnlgIGNvbXBvbmVudCBoYXMgYmVlbiByZW5kZXJlZCB0byBjb25zaWRlciB0aGUgdW5kZXJseWluZyBzdG9yeSBcInJlbmRlcmVkXCIuXG5cbiAgICBvblN0b3J5Rm5DYWxsZWQoKTtcbiAgICByZXR1cm4gc3RvcnlSZXN1bHQ7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe1xuICAgIGlubGluZTogc3RvcnlJc0lubGluZSxcbiAgICBpZDogc3RvcnkuaWQsXG4gICAgaGVpZ2h0OiBoZWlnaHQgfHwgKHN0b3J5SXNJbmxpbmUgPyB1bmRlZmluZWQgOiBpZnJhbWVIZWlnaHQpLFxuICAgIHRpdGxlOiBzdG9yeU5hbWVcbiAgfSwgc3RvcnlJc0lubGluZSAmJiB7XG4gICAgcGFyYW1ldGVyczogcGFyYW1ldGVycyxcbiAgICBzdG9yeUZuOiBmdW5jdGlvbiBzdG9yeUZuKCkge1xuICAgICAgcmV0dXJuIHByZXBhcmVGb3JJbmxpbmUoYm91bmRTdG9yeUZuLCBjb250ZXh0LmdldFN0b3J5Q29udGV4dChzdG9yeSkpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBtYWtlR2F0ZSgpIHtcbiAgdmFyIG9wZW47XG4gIHZhciBnYXRlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHIpIHtcbiAgICBvcGVuID0gcjtcbiAgfSk7XG4gIHJldHVybiBbZ2F0ZSwgb3Blbl07XG59XG5cbnZhciBTdG9yeSA9IGZ1bmN0aW9uIFN0b3J5KHByb3BzKSB7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChEb2NzQ29udGV4dCk7XG4gIHZhciBjaGFubmVsID0gYWRkb25zLmdldENoYW5uZWwoKTtcbiAgdmFyIHN0b3J5UmVmID0gdXNlUmVmKCk7XG4gIHZhciBzdG9yeUlkID0gZ2V0U3RvcnlJZChwcm9wcywgY29udGV4dCk7XG4gIHZhciBzdG9yeSA9IHVzZVN0b3J5KHN0b3J5SWQsIGNvbnRleHQpO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh0cnVlKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgc2hvd0xvYWRlciA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRTaG93TG9hZGVyID0gX3VzZVN0YXRlMlsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjbGVhbnVwO1xuXG4gICAgaWYgKHN0b3J5ICYmIHN0b3J5UmVmLmN1cnJlbnQpIHtcbiAgICAgIHZhciBjb21wb25lbnRJZCA9IHN0b3J5LmNvbXBvbmVudElkLFxuICAgICAgICAgIGlkID0gc3RvcnkuaWQsXG4gICAgICAgICAgdGl0bGUgPSBzdG9yeS50aXRsZSxcbiAgICAgICAgICBuYW1lID0gc3RvcnkubmFtZTtcbiAgICAgIHZhciByZW5kZXJDb250ZXh0ID0ge1xuICAgICAgICBjb21wb25lbnRJZDogY29tcG9uZW50SWQsXG4gICAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgICAga2luZDogdGl0bGUsXG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgc3Rvcnk6IG5hbWUsXG4gICAgICAgIC8vIFRPRE8gd2hhdCB0byBkbyB3aGVuIHRoZXNlIGZhaWw/XG4gICAgICAgIHNob3dNYWluOiBmdW5jdGlvbiBzaG93TWFpbigpIHt9LFxuICAgICAgICBzaG93RXJyb3I6IGZ1bmN0aW9uIHNob3dFcnJvcigpIHt9LFxuICAgICAgICBzaG93RXhjZXB0aW9uOiBmdW5jdGlvbiBzaG93RXhjZXB0aW9uKCkge31cbiAgICAgIH07XG4gICAgICBjbGVhbnVwID0gY29udGV4dC5yZW5kZXJTdG9yeVRvRWxlbWVudCh7XG4gICAgICAgIHN0b3J5OiBzdG9yeSxcbiAgICAgICAgcmVuZGVyQ29udGV4dDogcmVuZGVyQ29udGV4dCxcbiAgICAgICAgZWxlbWVudDogc3RvcnlSZWYuY3VycmVudCxcbiAgICAgICAgdmlld01vZGU6ICdkb2NzJ1xuICAgICAgfSk7XG4gICAgICBzZXRTaG93TG9hZGVyKGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGNsZWFudXAgJiYgY2xlYW51cCgpO1xuICAgIH07XG4gIH0sIFtzdG9yeV0pO1xuXG4gIHZhciBfbWFrZUdhdGUgPSBtYWtlR2F0ZSgpLFxuICAgICAgX21ha2VHYXRlMiA9IF9zbGljZWRUb0FycmF5KF9tYWtlR2F0ZSwgMiksXG4gICAgICBzdG9yeUZuUmFuID0gX21ha2VHYXRlMlswXSxcbiAgICAgIG9uU3RvcnlGblJhbiA9IF9tYWtlR2F0ZTJbMV07XG5cbiAgdmFyIF9tYWtlR2F0ZTMgPSBtYWtlR2F0ZSgpLFxuICAgICAgX21ha2VHYXRlNCA9IF9zbGljZWRUb0FycmF5KF9tYWtlR2F0ZTMsIDIpLFxuICAgICAgcmVuZGVyZWQgPSBfbWFrZUdhdGU0WzBdLFxuICAgICAgb25SZW5kZXJlZCA9IF9tYWtlR2F0ZTRbMV07XG5cbiAgdXNlRWZmZWN0KG9uUmVuZGVyZWQpO1xuXG4gIGlmICghc3RvcnkpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3RvcnlTa2VsZXRvbiwgbnVsbCk7XG4gIH1cblxuICB2YXIgc3RvcnlQcm9wcyA9IGdldFN0b3J5UHJvcHMocHJvcHMsIHN0b3J5LCBjb250ZXh0LCBvblN0b3J5Rm5SYW4pO1xuXG4gIGlmICghc3RvcnlQcm9wcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHN0b3J5UHJvcHMuaW5saW5lKSB7XG4gICAgdmFyIF9nbG9iYWwkRkVBVFVSRVM7XG5cbiAgICAvLyBJZiB3ZSBhcmUgcmVuZGVyaW5nIGEgb2xkLXN0eWxlIGlubGluZSBTdG9yeSB2aWEgYFB1cmVTdG9yeWAgYmVsb3csIHdlIHdhbnQgdG8gZW1pdFxuICAgIC8vIHRoZSBgU1RPUllfUkVOREVSRURgIGV2ZW50IHdoZW4gaXQgcmVuZGVycy4gVGhlIG1vZGVybiBtb2RlIGJlbG93IGNhbGxzIG91dCB0b1xuICAgIC8vIGBQcmV2aWV3LnJlbmRlclN0b3J5VG9Eb20oKWAgd2hpY2ggaXRzZWxmIGVtaXRzIHRoZSBldmVudC5cbiAgICBpZiAoIShnbG9iYWwgIT09IG51bGwgJiYgZ2xvYmFsICE9PSB2b2lkIDAgJiYgKF9nbG9iYWwkRkVBVFVSRVMgPSBnbG9iYWwuRkVBVFVSRVMpICE9PSBudWxsICYmIF9nbG9iYWwkRkVBVFVSRVMgIT09IHZvaWQgMCAmJiBfZ2xvYmFsJEZFQVRVUkVTLm1vZGVybklubGluZVJlbmRlcikpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgdHdvIHRoaW5ncyBiZWZvcmUgd2UgY2FuIGNvbnNpZGVyIHRoZSBzdG9yeSByZW5kZXJlZDpcbiAgICAgIC8vICAoYSkgUmVhY3QncyBgdXNlRWZmZWN0YCBob29rIG5lZWRzIHRvIGZpcmUuIFRoaXMgaXMgbmVlZGVkIGZvciBSZWFjdCBzdG9yaWVzLCBhc1xuICAgICAgLy8gICAgICBkZWNvcmF0b3JzIG9mIHRoZSBmb3JtIGA8QT48Qi8+PC9BPmAgd2lsbCBub3QgYWN0dWFsbHkgZXhlY3V0ZSBgQmAgaW4gdGhlIGZpcnN0XG4gICAgICAvLyAgICAgIGNhbGwgdG8gdGhlIHN0b3J5IGZ1bmN0aW9uLlxuICAgICAgLy8gIChiKSBUaGUgc3RvcnkgZnVuY3Rpb24gbmVlZHMgdG8gYWN0dWFsbHkgaGF2ZSBiZWVuIGNhbGxlZC5cbiAgICAgIC8vICAgICAgQ2VydGFpbiBmcmFtZXdvcmtzIChpLmUuYW5ndWxhcikgZG9uJ3QgYWN0dWFsbHkgcmVuZGVyIHRoZSBjb21wb25lbnQgaW4gdGhlIHZlcnkgZmlyc3RcbiAgICAgIC8vICAgICAgUmVhY3QgcmVuZGVyIGN5Y2xlLCBzbyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBmcmFtZXdvcmsgdG8gYWN0dWFsbHkgZG8gdGhhdFxuICAgICAgUHJvbWlzZS5hbGwoW3N0b3J5Rm5SYW4sIHJlbmRlcmVkXSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNoYW5uZWwuZW1pdChFdmVudHMuU1RPUllfUkVOREVSRUQsIHN0b3J5SWQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGRvIHRoaXMgc28gUmVhY3QgZG9lc24ndCBjb21wbGFpbiB3aGVuIHdlIHJlcGxhY2UgdGhlIHNwYW4gaW4gYSBzZWNvbmRhcnkgcmVuZGVyXG4gICAgICB2YXIgaHRtbENvbnRlbnRzID0gXCI8c3Bhbj48L3NwYW4+XCI7IC8vIEZJWE1FOiBoZWlnaHQvc3R5bGUvZXRjLiBsaWZ0ZWQgZnJvbSBQdXJlU3RvcnlcblxuICAgICAgdmFyIGhlaWdodCA9IHN0b3J5UHJvcHMuaGVpZ2h0O1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgaWQ6IHN0b3J5QmxvY2tJZEZyb21JZChzdG9yeS5pZClcbiAgICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1EWFByb3ZpZGVyLCB7XG4gICAgICAgIGNvbXBvbmVudHM6IHJlc2V0Q29tcG9uZW50c1xuICAgICAgfSwgaGVpZ2h0ID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBudWxsLCBcIiNzdG9yeS0tXCIuY29uY2F0KHN0b3J5LmlkLCBcIiB7IG1pbi1oZWlnaHQ6IFwiKS5jb25jYXQoaGVpZ2h0LCBcIjsgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOyBvdmVyZmxvdzogYXV0byB9XCIpKSA6IG51bGwsIHNob3dMb2FkZXIgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3RvcnlTa2VsZXRvbiwgbnVsbCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgcmVmOiBzdG9yeVJlZixcbiAgICAgICAgXCJkYXRhLW5hbWVcIjogc3RvcnkubmFtZSxcbiAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcbiAgICAgICAgICBfX2h0bWw6IGh0bWxDb250ZW50c1xuICAgICAgICB9XG4gICAgICB9KSkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgaWQ6IHN0b3J5QmxvY2tJZEZyb21JZChzdG9yeS5pZClcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTURYUHJvdmlkZXIsIHtcbiAgICBjb21wb25lbnRzOiByZXNldENvbXBvbmVudHNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHVyZVN0b3J5LCBzdG9yeVByb3BzKSkpO1xufTtcblxuU3RvcnkuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogbnVsbCxcbiAgbmFtZTogbnVsbFxufTtcbmV4cG9ydCB7IFN0b3J5IH07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudmFsdWVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanNcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IG1hcFZhbHVlcyBmcm9tICdsb2Rhc2gvbWFwVmFsdWVzJztcbmltcG9ydCB7IEFyZ3NUYWJsZSBhcyBQdXJlQXJnc1RhYmxlLCBBcmdzVGFibGVFcnJvciwgVGFiYmVkQXJnc1RhYmxlIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCB7IGFkZG9ucyB9IGZyb20gJ0BzdG9yeWJvb2svYWRkb25zJztcbmltcG9ydCB7IGZpbHRlckFyZ1R5cGVzIH0gZnJvbSAnQHN0b3J5Ym9vay9zdG9yZSc7XG5pbXBvcnQgRXZlbnRzIGZyb20gJ0BzdG9yeWJvb2svY29yZS1ldmVudHMnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbmltcG9ydCB7IENVUlJFTlRfU0VMRUNUSU9OLCBQUklNQVJZX1NUT1JZIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRDb21wb25lbnROYW1lIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBsb29rdXBTdG9yeUlkIH0gZnJvbSAnLi9TdG9yeSc7XG5pbXBvcnQgeyB1c2VTdG9yeSB9IGZyb20gJy4vdXNlU3RvcnknO1xuXG52YXIgdXNlQXJncyA9IGZ1bmN0aW9uIHVzZUFyZ3Moc3RvcnlJZCwgY29udGV4dCkge1xuICB2YXIgY2hhbm5lbCA9IGFkZG9ucy5nZXRDaGFubmVsKCk7XG4gIHZhciBzdG9yeSA9IGNvbnRleHQuc3RvcnlCeUlkKHN0b3J5SWQpO1xuXG4gIGlmICghc3RvcnkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHN0b3J5OiBcIi5jb25jYXQoc3RvcnlJZCkpO1xuICB9XG5cbiAgdmFyIHN0b3J5Q29udGV4dCA9IGNvbnRleHQuZ2V0U3RvcnlDb250ZXh0KHN0b3J5KTtcblxuICB2YXIgX3VzZVN0YXRlID0gdXNlU3RhdGUoc3RvcnlDb250ZXh0LmFyZ3MpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICBhcmdzID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldEFyZ3MgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNiID0gZnVuY3Rpb24gY2IoY2hhbmdlZCkge1xuICAgICAgaWYgKGNoYW5nZWQuc3RvcnlJZCA9PT0gc3RvcnlJZCkge1xuICAgICAgICBzZXRBcmdzKGNoYW5nZWQuYXJncyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNoYW5uZWwub24oRXZlbnRzLlNUT1JZX0FSR1NfVVBEQVRFRCwgY2IpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY2hhbm5lbC5vZmYoRXZlbnRzLlNUT1JZX0FSR1NfVVBEQVRFRCwgY2IpO1xuICAgIH07XG4gIH0sIFtzdG9yeUlkXSk7XG4gIHZhciB1cGRhdGVBcmdzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHVwZGF0ZWRBcmdzKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwuZW1pdChFdmVudHMuVVBEQVRFX1NUT1JZX0FSR1MsIHtcbiAgICAgIHN0b3J5SWQ6IHN0b3J5SWQsXG4gICAgICB1cGRhdGVkQXJnczogdXBkYXRlZEFyZ3NcbiAgICB9KTtcbiAgfSwgW3N0b3J5SWRdKTtcbiAgdmFyIHJlc2V0QXJncyA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChhcmdOYW1lcykge1xuICAgIHJldHVybiBjaGFubmVsLmVtaXQoRXZlbnRzLlJFU0VUX1NUT1JZX0FSR1MsIHtcbiAgICAgIHN0b3J5SWQ6IHN0b3J5SWQsXG4gICAgICBhcmdOYW1lczogYXJnTmFtZXNcbiAgICB9KTtcbiAgfSwgW3N0b3J5SWRdKTtcbiAgcmV0dXJuIFthcmdzLCB1cGRhdGVBcmdzLCByZXNldEFyZ3NdO1xufTtcblxuZXhwb3J0IHZhciBleHRyYWN0Q29tcG9uZW50QXJnVHlwZXMgPSBmdW5jdGlvbiBleHRyYWN0Q29tcG9uZW50QXJnVHlwZXMoY29tcG9uZW50LCBfcmVmLCBpbmNsdWRlLCBleGNsdWRlKSB7XG4gIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICBzdG9yeUJ5SWQgPSBfcmVmLnN0b3J5QnlJZDtcblxuICB2YXIgX3N0b3J5QnlJZCA9IHN0b3J5QnlJZChpZCksXG4gICAgICBwYXJhbWV0ZXJzID0gX3N0b3J5QnlJZC5wYXJhbWV0ZXJzO1xuXG4gIHZhciBfcmVmMiA9IHBhcmFtZXRlcnMuZG9jcyB8fCB7fSxcbiAgICAgIGV4dHJhY3RBcmdUeXBlcyA9IF9yZWYyLmV4dHJhY3RBcmdUeXBlcztcblxuICBpZiAoIWV4dHJhY3RBcmdUeXBlcykge1xuICAgIHRocm93IG5ldyBFcnJvcihBcmdzVGFibGVFcnJvci5BUkdTX1VOU1VQUE9SVEVEKTtcbiAgfVxuXG4gIHZhciBhcmdUeXBlcyA9IGV4dHJhY3RBcmdUeXBlcyhjb21wb25lbnQpO1xuICBhcmdUeXBlcyA9IGZpbHRlckFyZ1R5cGVzKGFyZ1R5cGVzLCBpbmNsdWRlLCBleGNsdWRlKTtcbiAgcmV0dXJuIGFyZ1R5cGVzO1xufTtcblxudmFyIGlzU2hvcnRjdXQgPSBmdW5jdGlvbiBpc1Nob3J0Y3V0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiBbQ1VSUkVOVF9TRUxFQ1RJT04sIFBSSU1BUllfU1RPUlldLmluY2x1ZGVzKHZhbHVlKTtcbn07XG5cbmV4cG9ydCB2YXIgZ2V0Q29tcG9uZW50ID0gZnVuY3Rpb24gZ2V0Q29tcG9uZW50KCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gIHZhciBfcmVmMyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLFxuICAgICAgaWQgPSBfcmVmMy5pZCxcbiAgICAgIHN0b3J5QnlJZCA9IF9yZWYzLnN0b3J5QnlJZDtcblxuICB2YXIgX3JlZjQgPSBwcm9wcyxcbiAgICAgIG9mID0gX3JlZjQub2Y7XG4gIHZhciBfcmVmNSA9IHByb3BzLFxuICAgICAgc3RvcnkgPSBfcmVmNS5zdG9yeTtcblxuICB2YXIgX3N0b3J5QnlJZDIgPSBzdG9yeUJ5SWQoaWQpLFxuICAgICAgY29tcG9uZW50ID0gX3N0b3J5QnlJZDIuY29tcG9uZW50O1xuXG4gIGlmIChpc1Nob3J0Y3V0KG9mKSB8fCBpc1Nob3J0Y3V0KHN0b3J5KSkge1xuICAgIHJldHVybiBjb21wb25lbnQgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICghb2YpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoQXJnc1RhYmxlRXJyb3IuTk9fQ09NUE9ORU5UKTtcbiAgfVxuXG4gIHJldHVybiBvZjtcbn07XG5cbnZhciBhZGRDb21wb25lbnRUYWJzID0gZnVuY3Rpb24gYWRkQ29tcG9uZW50VGFicyh0YWJzLCBjb21wb25lbnRzLCBjb250ZXh0LCBpbmNsdWRlLCBleGNsdWRlLCBzb3J0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0YWJzLCBtYXBWYWx1ZXMoY29tcG9uZW50cywgZnVuY3Rpb24gKGNvbXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm93czogZXh0cmFjdENvbXBvbmVudEFyZ1R5cGVzKGNvbXAsIGNvbnRleHQsIGluY2x1ZGUsIGV4Y2x1ZGUpLFxuICAgICAgc29ydDogc29ydFxuICAgIH07XG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgU3RvcnlUYWJsZSA9IGZ1bmN0aW9uIFN0b3J5VGFibGUocHJvcHMpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KTtcbiAgdmFyIGN1cnJlbnRJZCA9IGNvbnRleHQuaWQsXG4gICAgICBjb21wb25lbnRTdG9yaWVzID0gY29udGV4dC5jb21wb25lbnRTdG9yaWVzO1xuICB2YXIgc3RvcnlOYW1lID0gcHJvcHMuc3RvcnksXG4gICAgICBjb21wb25lbnQgPSBwcm9wcy5jb21wb25lbnQsXG4gICAgICBzdWJjb21wb25lbnRzID0gcHJvcHMuc3ViY29tcG9uZW50cyxcbiAgICAgIHNob3dDb21wb25lbnQgPSBwcm9wcy5zaG93Q29tcG9uZW50LFxuICAgICAgaW5jbHVkZSA9IHByb3BzLmluY2x1ZGUsXG4gICAgICBleGNsdWRlID0gcHJvcHMuZXhjbHVkZSxcbiAgICAgIHNvcnQgPSBwcm9wcy5zb3J0O1xuXG4gIHRyeSB7XG4gICAgdmFyIHN0b3J5SWQ7XG5cbiAgICBzd2l0Y2ggKHN0b3J5TmFtZSkge1xuICAgICAgY2FzZSBDVVJSRU5UX1NFTEVDVElPTjpcbiAgICAgICAge1xuICAgICAgICAgIHN0b3J5SWQgPSBjdXJyZW50SWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBQUklNQVJZX1NUT1JZOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHByaW1hcnlTdG9yeSA9IGNvbXBvbmVudFN0b3JpZXMoKVswXTtcbiAgICAgICAgICBzdG9yeUlkID0gcHJpbWFyeVN0b3J5LmlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBzdG9yeUlkID0gbG9va3VwU3RvcnlJZChzdG9yeU5hbWUsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0b3J5ID0gdXNlU3Rvcnkoc3RvcnlJZCwgY29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcblxuICAgIHZhciBfdXNlQXJncyA9IHVzZUFyZ3Moc3RvcnlJZCwgY29udGV4dCksXG4gICAgICAgIF91c2VBcmdzMiA9IF9zbGljZWRUb0FycmF5KF91c2VBcmdzLCAzKSxcbiAgICAgICAgYXJncyA9IF91c2VBcmdzMlswXSxcbiAgICAgICAgdXBkYXRlQXJncyA9IF91c2VBcmdzMlsxXSxcbiAgICAgICAgcmVzZXRBcmdzID0gX3VzZUFyZ3MyWzJdO1xuXG4gICAgaWYgKCFzdG9yeSkgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFB1cmVBcmdzVGFibGUsIHtcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIHVwZGF0ZUFyZ3M6IHVwZGF0ZUFyZ3MsXG4gICAgICByZXNldEFyZ3M6IHJlc2V0QXJnc1xuICAgIH0pO1xuICAgIHZhciBhcmdUeXBlcyA9IGZpbHRlckFyZ1R5cGVzKHN0b3J5LmFyZ1R5cGVzLCBpbmNsdWRlLCBleGNsdWRlKTtcbiAgICB2YXIgbWFpbkxhYmVsID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnQpIHx8ICdTdG9yeSc7XG5cbiAgICB2YXIgdGFicyA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgbWFpbkxhYmVsLCB7XG4gICAgICByb3dzOiBhcmdUeXBlcyxcbiAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICB1cGRhdGVBcmdzOiB1cGRhdGVBcmdzLFxuICAgICAgcmVzZXRBcmdzOiByZXNldEFyZ3NcbiAgICB9KTsgLy8gVXNlIHRoZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgY29tcG9uZW50IHRhYnMgaWYgdGhlcmUgYXJlIG5vIGNvbnRyb2xzXG5cblxuICAgIHZhciBzdG9yeUhhc0FyZ3NXaXRoQ29udHJvbHMgPSBhcmdUeXBlcyAmJiBPYmplY3QudmFsdWVzKGFyZ1R5cGVzKS5maW5kKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gISEodiAhPT0gbnVsbCAmJiB2ICE9PSB2b2lkIDAgJiYgdi5jb250cm9sKTtcbiAgICB9KTtcblxuICAgIGlmICghc3RvcnlIYXNBcmdzV2l0aENvbnRyb2xzKSB7XG4gICAgICB1cGRhdGVBcmdzID0gbnVsbDtcbiAgICAgIHJlc2V0QXJncyA9IG51bGw7XG4gICAgICB0YWJzID0ge307XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudCAmJiAoIXN0b3J5SGFzQXJnc1dpdGhDb250cm9scyB8fCBzaG93Q29tcG9uZW50KSkge1xuICAgICAgdGFicyA9IGFkZENvbXBvbmVudFRhYnModGFicywgX2RlZmluZVByb3BlcnR5KHt9LCBtYWluTGFiZWwsIGNvbXBvbmVudCksIGNvbnRleHQsIGluY2x1ZGUsIGV4Y2x1ZGUpO1xuICAgIH1cblxuICAgIGlmIChzdWJjb21wb25lbnRzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdWJjb21wb25lbnRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHN1YmNvbXBvbmVudHMgYXJyYXkuIEV4cGVjdGVkIGFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0YWIgbGFiZWxzIGFuZCB3aG9zZSB2YWx1ZXMgYXJlIGNvbXBvbmVudHMuXCIpO1xuICAgICAgfVxuXG4gICAgICB0YWJzID0gYWRkQ29tcG9uZW50VGFicyh0YWJzLCBzdWJjb21wb25lbnRzLCBjb250ZXh0LCBpbmNsdWRlLCBleGNsdWRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFiYmVkQXJnc1RhYmxlLCB7XG4gICAgICB0YWJzOiB0YWJzLFxuICAgICAgc29ydDogc29ydFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHVyZUFyZ3NUYWJsZSwge1xuICAgICAgZXJyb3I6IGVyci5tZXNzYWdlXG4gICAgfSk7XG4gIH1cbn07XG5leHBvcnQgdmFyIENvbXBvbmVudHNUYWJsZSA9IGZ1bmN0aW9uIENvbXBvbmVudHNUYWJsZShwcm9wcykge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgY29tcG9uZW50cyA9IHByb3BzLmNvbXBvbmVudHMsXG4gICAgICBpbmNsdWRlID0gcHJvcHMuaW5jbHVkZSxcbiAgICAgIGV4Y2x1ZGUgPSBwcm9wcy5leGNsdWRlLFxuICAgICAgc29ydCA9IHByb3BzLnNvcnQ7XG4gIHZhciB0YWJzID0gYWRkQ29tcG9uZW50VGFicyh7fSwgY29tcG9uZW50cywgY29udGV4dCwgaW5jbHVkZSwgZXhjbHVkZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWJiZWRBcmdzVGFibGUsIHtcbiAgICB0YWJzOiB0YWJzLFxuICAgIHNvcnQ6IHNvcnRcbiAgfSk7XG59O1xuZXhwb3J0IHZhciBBcmdzVGFibGUgPSBmdW5jdGlvbiBBcmdzVGFibGUocHJvcHMpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KTtcbiAgdmFyIGlkID0gY29udGV4dC5pZCxcbiAgICAgIHN0b3J5QnlJZCA9IGNvbnRleHQuc3RvcnlCeUlkO1xuXG4gIHZhciBfc3RvcnlCeUlkMyA9IHN0b3J5QnlJZChpZCksXG4gICAgICBjb250cm9scyA9IF9zdG9yeUJ5SWQzLnBhcmFtZXRlcnMuY29udHJvbHMsXG4gICAgICBzdWJjb21wb25lbnRzID0gX3N0b3J5QnlJZDMuc3ViY29tcG9uZW50cztcblxuICB2YXIgX3JlZjYgPSBwcm9wcyxcbiAgICAgIGluY2x1ZGUgPSBfcmVmNi5pbmNsdWRlLFxuICAgICAgZXhjbHVkZSA9IF9yZWY2LmV4Y2x1ZGUsXG4gICAgICBjb21wb25lbnRzID0gX3JlZjYuY29tcG9uZW50cyxcbiAgICAgIHNvcnRQcm9wID0gX3JlZjYuc29ydDtcbiAgdmFyIF9yZWY3ID0gcHJvcHMsXG4gICAgICBzdG9yeU5hbWUgPSBfcmVmNy5zdG9yeTtcbiAgdmFyIHNvcnQgPSBzb3J0UHJvcCB8fCAoY29udHJvbHMgPT09IG51bGwgfHwgY29udHJvbHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnRyb2xzLnNvcnQpO1xuICB2YXIgbWFpbiA9IGdldENvbXBvbmVudChwcm9wcywgY29udGV4dCk7XG5cbiAgaWYgKHN0b3J5TmFtZSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdG9yeVRhYmxlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudDogbWFpbixcbiAgICAgIHN1YmNvbXBvbmVudHM6IHN1YmNvbXBvbmVudHMsXG4gICAgICBzb3J0OiBzb3J0XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKCFjb21wb25lbnRzICYmICFzdWJjb21wb25lbnRzKSB7XG4gICAgdmFyIG1haW5Qcm9wcztcblxuICAgIHRyeSB7XG4gICAgICBtYWluUHJvcHMgPSB7XG4gICAgICAgIHJvd3M6IGV4dHJhY3RDb21wb25lbnRBcmdUeXBlcyhtYWluLCBjb250ZXh0LCBpbmNsdWRlLCBleGNsdWRlKVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIG1haW5Qcm9wcyA9IHtcbiAgICAgICAgZXJyb3I6IGVyci5tZXNzYWdlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlQXJnc1RhYmxlLCBfZXh0ZW5kcyh7fSwgbWFpblByb3BzLCB7XG4gICAgICBzb3J0OiBzb3J0XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50c1RhYmxlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICBzb3J0OiBzb3J0XG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIG1haW5MYWJlbCA9IGdldENvbXBvbmVudE5hbWUobWFpbik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnRzVGFibGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudHM6IE9iamVjdC5hc3NpZ24oX2RlZmluZVByb3BlcnR5KHt9LCBtYWluTGFiZWwsIG1haW4pLCBzdWJjb21wb25lbnRzKSxcbiAgICBzb3J0OiBzb3J0XG4gIH0pKTtcbn07XG5BcmdzVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICBvZjogQ1VSUkVOVF9TRUxFQ1RJT05cbn07IiwiZXhwb3J0IHZhciBBRERPTl9JRCA9ICdzdG9yeWJvb2svZG9jcyc7XG5leHBvcnQgdmFyIFBBTkVMX0lEID0gXCJcIi5jb25jYXQoQURET05fSUQsIFwiL3BhbmVsXCIpO1xuZXhwb3J0IHZhciBQQVJBTV9LRVkgPSBcImRvY3NcIjtcbmV4cG9ydCB2YXIgU05JUFBFVF9SRU5ERVJFRCA9IFwiXCIuY29uY2F0KEFERE9OX0lELCBcIi9zbmlwcGV0LXJlbmRlcmVkXCIpO1xuZXhwb3J0IHZhciBTb3VyY2VUeXBlO1xuXG4oZnVuY3Rpb24gKFNvdXJjZVR5cGUpIHtcbiAgU291cmNlVHlwZVtcIkFVVE9cIl0gPSBcImF1dG9cIjtcbiAgU291cmNlVHlwZVtcIkNPREVcIl0gPSBcImNvZGVcIjtcbiAgU291cmNlVHlwZVtcIkRZTkFNSUNcIl0gPSBcImR5bmFtaWNcIjtcbn0pKFNvdXJjZVR5cGUgfHwgKFNvdXJjZVR5cGUgPSB7fSkpOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanNcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBhZGRvbnMgfSBmcm9tICdAc3Rvcnlib29rL2FkZG9ucyc7XG5pbXBvcnQgeyBTTklQUEVUX1JFTkRFUkVEIH0gZnJvbSAnLi4vc2hhcmVkJztcbmV4cG9ydCB2YXIgU291cmNlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHtcbiAgc291cmNlczoge31cbn0pO1xuZXhwb3J0IHZhciBTb3VyY2VDb250YWluZXIgPSBmdW5jdGlvbiBTb3VyY2VDb250YWluZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh7fSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNvdXJjZXMgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0U291cmNlcyA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGNoYW5uZWwgPSBhZGRvbnMuZ2V0Q2hhbm5lbCgpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVTbmlwcGV0UmVuZGVyZWQgPSBmdW5jdGlvbiBoYW5kbGVTbmlwcGV0UmVuZGVyZWQoaWQsIG5ld0l0ZW0pIHtcbiAgICAgIGlmIChuZXdJdGVtICE9PSBzb3VyY2VzW2lkXSkge1xuICAgICAgICBzZXRTb3VyY2VzKGZ1bmN0aW9uIChjdXJyZW50KSB7XG4gICAgICAgICAgdmFyIG5ld1NvdXJjZXMgPSBPYmplY3QuYXNzaWduKHt9LCBjdXJyZW50LCBfZGVmaW5lUHJvcGVydHkoe30sIGlkLCBuZXdJdGVtKSk7XG5cbiAgICAgICAgICBpZiAoIWRlZXBFcXVhbChjdXJyZW50LCBuZXdTb3VyY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ld1NvdXJjZXM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjaGFubmVsLm9uKFNOSVBQRVRfUkVOREVSRUQsIGhhbmRsZVNuaXBwZXRSZW5kZXJlZCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjaGFubmVsLm9mZihTTklQUEVUX1JFTkRFUkVELCBoYW5kbGVTbmlwcGV0UmVuZGVyZWQpO1xuICAgIH07XG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU291cmNlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiB7XG4gICAgICBzb3VyY2VzOiBzb3VyY2VzXG4gICAgfVxuICB9LCBjaGlsZHJlbik7XG59OyIsImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3BsaXQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCB7IGNvbWJpbmVQYXJhbWV0ZXJzIH0gZnJvbSAnQHN0b3J5Ym9vay9zdG9yZSc7IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU1RBUlQgQHN0b3J5Ym9vay9zb3VyY2UtbG9hZGVyL2V4dHJhY3Qtc291cmNlXG4vL1xuLy8gVGhpcyBjb2RlIGR1cGxpY2F0ZWQgYmVjYXVzZSB0cmVlLXNoYWtpbmcgaXNuJ3Qgd29ya2luZy5cbi8vIEl0J3Mgbm90IERSWSwgYnV0IHNvdXJjZS1sb2FkZXIgaXMgb24gdGhlIGNob3BwaW5nIGJsb2NrIGZvclxuLy8gdGhlIG5leHQgdmVyc2lvbiBvZiBhZGRvbi1kb2NzLCBzbyBpdCdzIG5vdCB0aGUgd29yc3Qgc2luLlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogZ2l2ZW4gYSBsb2NhdGlvbiwgZXh0cmFjdCB0aGUgdGV4dCBmcm9tIHRoZSBmdWxsIHNvdXJjZVxuICovXG5mdW5jdGlvbiBleHRyYWN0U291cmNlKGxvY2F0aW9uLCBsaW5lcykge1xuICB2YXIgc3RhcnQgPSBsb2NhdGlvbi5zdGFydEJvZHksXG4gICAgICBlbmQgPSBsb2NhdGlvbi5lbmRCb2R5O1xuXG4gIGlmIChzdGFydC5saW5lID09PSBlbmQubGluZSAmJiBsaW5lc1tzdGFydC5saW5lIC0gMV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBsaW5lc1tzdGFydC5saW5lIC0gMV0uc3Vic3RyaW5nKHN0YXJ0LmNvbCwgZW5kLmNvbCk7XG4gIH0gLy8gTk9URTogc3Rvcnlzb3VyY2UgbG9jYXRpb25zIGFyZSAxLWJhc2VkIG5vdCAwLWJhc2VkIVxuXG5cbiAgdmFyIHN0YXJ0TGluZSA9IGxpbmVzW3N0YXJ0LmxpbmUgLSAxXTtcbiAgdmFyIGVuZExpbmUgPSBsaW5lc1tlbmQubGluZSAtIDFdO1xuXG4gIGlmIChzdGFydExpbmUgPT09IHVuZGVmaW5lZCB8fCBlbmRMaW5lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBbc3RhcnRMaW5lLnN1YnN0cmluZyhzdGFydC5jb2wpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGxpbmVzLnNsaWNlKHN0YXJ0LmxpbmUsIGVuZC5saW5lIC0gMSkpLCBbZW5kTGluZS5zdWJzdHJpbmcoMCwgZW5kLmNvbCldKS5qb2luKCdcXG4nKTtcbn0gLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFTkQgQHN0b3J5Ym9vay9zb3VyY2UtbG9hZGVyL2V4dHJhY3Qtc291cmNlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuXG4vKipcbiAqIFJlcGxhY2VzIGZ1bGwgc3RvcnkgaWQgbmFtZSBsaWtlOiBzdG9yeS1raW5kLS1zdG9yeS1uYW1lIC0+IHN0b3J5LW5hbWVcbiAqIEBwYXJhbSBpZFxuICovXG52YXIgc3RvcnlJZFRvU2FuaXRpemVkU3RvcnlOYW1lID0gZnVuY3Rpb24gc3RvcnlJZFRvU2FuaXRpemVkU3RvcnlOYW1lKGlkKSB7XG4gIHJldHVybiBpZC5yZXBsYWNlKC9eLio/LS0vLCAnJyk7XG59O1xuXG52YXIgZXh0cmFjdCA9IGZ1bmN0aW9uIGV4dHJhY3QodGFyZ2V0SWQsIF9yZWYpIHtcbiAgdmFyIHNvdXJjZSA9IF9yZWYuc291cmNlLFxuICAgICAgbG9jYXRpb25zTWFwID0gX3JlZi5sb2NhdGlvbnNNYXA7XG5cbiAgaWYgKCFsb2NhdGlvbnNNYXApIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgdmFyIHNhbml0aXplZFN0b3J5TmFtZSA9IHN0b3J5SWRUb1Nhbml0aXplZFN0b3J5TmFtZSh0YXJnZXRJZCk7XG4gIHZhciBsb2NhdGlvbiA9IGxvY2F0aW9uc01hcFtzYW5pdGl6ZWRTdG9yeU5hbWVdO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgdmFyIGxpbmVzID0gc291cmNlLnNwbGl0KCdcXG4nKTtcbiAgcmV0dXJuIGV4dHJhY3RTb3VyY2UobG9jYXRpb24sIGxpbmVzKTtcbn07XG5cbmV4cG9ydCB2YXIgZW5oYW5jZVNvdXJjZSA9IGZ1bmN0aW9uIGVuaGFuY2VTb3VyY2Uoc3RvcnkpIHtcbiAgdmFyIF9kb2NzJHNvdXJjZTtcblxuICB2YXIgaWQgPSBzdG9yeS5pZCxcbiAgICAgIHBhcmFtZXRlcnMgPSBzdG9yeS5wYXJhbWV0ZXJzO1xuICB2YXIgc3RvcnlTb3VyY2UgPSBwYXJhbWV0ZXJzLnN0b3J5U291cmNlLFxuICAgICAgX3BhcmFtZXRlcnMkZG9jcyA9IHBhcmFtZXRlcnMuZG9jcyxcbiAgICAgIGRvY3MgPSBfcGFyYW1ldGVycyRkb2NzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbWV0ZXJzJGRvY3M7XG4gIHZhciB0cmFuc2Zvcm1Tb3VyY2UgPSBkb2NzLnRyYW5zZm9ybVNvdXJjZTsgLy8gbm8gaW5wdXQgb3IgdXNlciBoYXMgbWFudWFsbHkgb3ZlcnJpZGRlbiB0aGUgb3V0cHV0XG5cbiAgaWYgKCEoc3RvcnlTb3VyY2UgIT09IG51bGwgJiYgc3RvcnlTb3VyY2UgIT09IHZvaWQgMCAmJiBzdG9yeVNvdXJjZS5zb3VyY2UpIHx8IChfZG9jcyRzb3VyY2UgPSBkb2NzLnNvdXJjZSkgIT09IG51bGwgJiYgX2RvY3Mkc291cmNlICE9PSB2b2lkIDAgJiYgX2RvY3Mkc291cmNlLmNvZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBpbnB1dCA9IGV4dHJhY3QoaWQsIHN0b3J5U291cmNlKTtcbiAgdmFyIGNvZGUgPSB0cmFuc2Zvcm1Tb3VyY2UgPyB0cmFuc2Zvcm1Tb3VyY2UoaW5wdXQsIHN0b3J5KSA6IGlucHV0O1xuICByZXR1cm4ge1xuICAgIGRvY3M6IGNvbWJpbmVQYXJhbWV0ZXJzKGRvY3MsIHtcbiAgICAgIHNvdXJjZToge1xuICAgICAgICBjb2RlOiBjb2RlXG4gICAgICB9XG4gICAgfSlcbiAgfTtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU291cmNlIGFzIFB1cmVTb3VyY2UsIFNvdXJjZUVycm9yIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5pbXBvcnQgeyBTb3VyY2VDb250ZXh0IH0gZnJvbSAnLi9Tb3VyY2VDb250YWluZXInO1xuaW1wb3J0IHsgQ1VSUkVOVF9TRUxFQ1RJT04gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNvdXJjZVR5cGUgfSBmcm9tICcuLi9zaGFyZWQnO1xuaW1wb3J0IHsgZW5oYW5jZVNvdXJjZSB9IGZyb20gJy4vZW5oYW5jZVNvdXJjZSc7XG5pbXBvcnQgeyB1c2VTdG9yaWVzIH0gZnJvbSAnLi91c2VTdG9yeSc7XG5leHBvcnQgdmFyIFNvdXJjZVN0YXRlO1xuXG4oZnVuY3Rpb24gKFNvdXJjZVN0YXRlKSB7XG4gIFNvdXJjZVN0YXRlW1wiT1BFTlwiXSA9IFwib3BlblwiO1xuICBTb3VyY2VTdGF0ZVtcIkNMT1NFRFwiXSA9IFwiY2xvc2VkXCI7XG4gIFNvdXJjZVN0YXRlW1wiTk9ORVwiXSA9IFwibm9uZVwiO1xufSkoU291cmNlU3RhdGUgfHwgKFNvdXJjZVN0YXRlID0ge30pKTtcblxudmFyIGdldFNvdXJjZVN0YXRlID0gZnVuY3Rpb24gZ2V0U291cmNlU3RhdGUoc3Rvcmllcykge1xuICB2YXIgc3RhdGVzID0gc3Rvcmllcy5tYXAoZnVuY3Rpb24gKHN0b3J5KSB7XG4gICAgdmFyIF9zdG9yeSRwYXJhbWV0ZXJzJGRvYywgX3N0b3J5JHBhcmFtZXRlcnMkZG9jMjtcblxuICAgIHJldHVybiAoX3N0b3J5JHBhcmFtZXRlcnMkZG9jID0gc3RvcnkucGFyYW1ldGVycy5kb2NzKSA9PT0gbnVsbCB8fCBfc3RvcnkkcGFyYW1ldGVycyRkb2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfc3RvcnkkcGFyYW1ldGVycyRkb2MyID0gX3N0b3J5JHBhcmFtZXRlcnMkZG9jLnNvdXJjZSkgPT09IG51bGwgfHwgX3N0b3J5JHBhcmFtZXRlcnMkZG9jMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0b3J5JHBhcmFtZXRlcnMkZG9jMi5zdGF0ZTtcbiAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoc3RhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFNvdXJjZVN0YXRlLkNMT1NFRDsgLy8gRklYTUU6IGhhbmRsaW5nIG11bHRpcGxlIHN0b3JpZXMgaXMgYSBwYWluXG5cbiAgcmV0dXJuIHN0YXRlc1swXTtcbn07XG5cbnZhciBnZXRTdG9yeVNvdXJjZSA9IGZ1bmN0aW9uIGdldFN0b3J5U291cmNlKHN0b3J5SWQsIHNvdXJjZUNvbnRleHQpIHtcbiAgdmFyIHNvdXJjZXMgPSBzb3VyY2VDb250ZXh0LnNvdXJjZXM7IC8vIHNvdXJjZSByZW5kZXJpbmcgaXMgYXN5bmMgc28gc291cmNlIGlzIHVuYXZhaWxhYmxlIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVuZGVyIGN5Y2xlLFxuICAvLyBzbyB3ZSBmYWlsIGdyYWNlZnVsbHkgaGVyZSB3aXRob3V0IHdhcm5pbmdcblxuICByZXR1cm4gKHNvdXJjZXMgPT09IG51bGwgfHwgc291cmNlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlc1tzdG9yeUlkXSkgfHwgJyc7XG59O1xuXG52YXIgZ2V0U25pcHBldCA9IGZ1bmN0aW9uIGdldFNuaXBwZXQoc25pcHBldCwgc3RvcnkpIHtcbiAgdmFyIF9wYXJhbWV0ZXJzJGRvY3MsIF9wYXJhbWV0ZXJzJGRvY3Mkc291ciwgX3BhcmFtZXRlcnMkZG9jczIsIF9wYXJhbWV0ZXJzJGRvY3MyJHNvdSwgX2VuaGFuY2VkJGRvY3MsIF9lbmhhbmNlZCRkb2NzJHNvdXJjZTtcblxuICBpZiAoIXN0b3J5KSB7XG4gICAgcmV0dXJuIHNuaXBwZXQ7XG4gIH1cblxuICB2YXIgcGFyYW1ldGVycyA9IHN0b3J5LnBhcmFtZXRlcnM7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuXG4gIHZhciBpc0FyZ3NTdG9yeSA9IHBhcmFtZXRlcnMuX19pc0FyZ3NTdG9yeTtcbiAgdmFyIHR5cGUgPSAoKF9wYXJhbWV0ZXJzJGRvY3MgPSBwYXJhbWV0ZXJzLmRvY3MpID09PSBudWxsIHx8IF9wYXJhbWV0ZXJzJGRvY3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfcGFyYW1ldGVycyRkb2NzJHNvdXIgPSBfcGFyYW1ldGVycyRkb2NzLnNvdXJjZSkgPT09IG51bGwgfHwgX3BhcmFtZXRlcnMkZG9jcyRzb3VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGFyYW1ldGVycyRkb2NzJHNvdXIudHlwZSkgfHwgU291cmNlVHlwZS5BVVRPOyAvLyBpZiB1c2VyIGhhcyBoYXJkLWNvZGVkIHRoZSBzbmlwcGV0LCB0aGF0IHRha2VzIHByZWNlZGVuY2VcblxuICB2YXIgdXNlckNvZGUgPSAoX3BhcmFtZXRlcnMkZG9jczIgPSBwYXJhbWV0ZXJzLmRvY3MpID09PSBudWxsIHx8IF9wYXJhbWV0ZXJzJGRvY3MyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BhcmFtZXRlcnMkZG9jczIkc291ID0gX3BhcmFtZXRlcnMkZG9jczIuc291cmNlKSA9PT0gbnVsbCB8fCBfcGFyYW1ldGVycyRkb2NzMiRzb3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wYXJhbWV0ZXJzJGRvY3MyJHNvdS5jb2RlO1xuXG4gIGlmICh1c2VyQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVzZXJDb2RlO1xuICB9IC8vIGlmIHVzZXIgaGFzIGV4cGxpY2l0bHkgc2V0IHRoaXMgYXMgZHluYW1pYywgdXNlIHNuaXBwZXRcblxuXG4gIGlmICh0eXBlID09PSBTb3VyY2VUeXBlLkRZTkFNSUMpIHtcbiAgICB2YXIgX3BhcmFtZXRlcnMkZG9jczMsIF9wYXJhbWV0ZXJzJGRvY3MzJHRyYTtcblxuICAgIHJldHVybiAoKF9wYXJhbWV0ZXJzJGRvY3MzID0gcGFyYW1ldGVycy5kb2NzKSA9PT0gbnVsbCB8fCBfcGFyYW1ldGVycyRkb2NzMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9wYXJhbWV0ZXJzJGRvY3MzJHRyYSA9IF9wYXJhbWV0ZXJzJGRvY3MzLnRyYW5zZm9ybVNvdXJjZSkgPT09IG51bGwgfHwgX3BhcmFtZXRlcnMkZG9jczMkdHJhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGFyYW1ldGVycyRkb2NzMyR0cmEuY2FsbChfcGFyYW1ldGVycyRkb2NzMywgc25pcHBldCwgc3RvcnkpKSB8fCBzbmlwcGV0O1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gYXJncyBzdG9yeSBhbmQgdGhlcmUncyBhIHNuaXBwZXRcblxuXG4gIGlmICh0eXBlID09PSBTb3VyY2VUeXBlLkFVVE8gJiYgc25pcHBldCAmJiBpc0FyZ3NTdG9yeSkge1xuICAgIHZhciBfcGFyYW1ldGVycyRkb2NzNCwgX3BhcmFtZXRlcnMkZG9jczQkdHJhO1xuXG4gICAgcmV0dXJuICgoX3BhcmFtZXRlcnMkZG9jczQgPSBwYXJhbWV0ZXJzLmRvY3MpID09PSBudWxsIHx8IF9wYXJhbWV0ZXJzJGRvY3M0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BhcmFtZXRlcnMkZG9jczQkdHJhID0gX3BhcmFtZXRlcnMkZG9jczQudHJhbnNmb3JtU291cmNlKSA9PT0gbnVsbCB8fCBfcGFyYW1ldGVycyRkb2NzNCR0cmEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wYXJhbWV0ZXJzJGRvY3M0JHRyYS5jYWxsKF9wYXJhbWV0ZXJzJGRvY3M0LCBzbmlwcGV0LCBzdG9yeSkpIHx8IHNuaXBwZXQ7XG4gIH0gLy8gb3RoZXJ3aXNlLCB1c2UgdGhlIHNvdXJjZSBjb2RlIGxvZ2ljXG5cblxuICB2YXIgZW5oYW5jZWQgPSBlbmhhbmNlU291cmNlKHN0b3J5KSB8fCBwYXJhbWV0ZXJzO1xuICByZXR1cm4gKGVuaGFuY2VkID09PSBudWxsIHx8IGVuaGFuY2VkID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2VuaGFuY2VkJGRvY3MgPSBlbmhhbmNlZC5kb2NzKSA9PT0gbnVsbCB8fCBfZW5oYW5jZWQkZG9jcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9lbmhhbmNlZCRkb2NzJHNvdXJjZSA9IF9lbmhhbmNlZCRkb2NzLnNvdXJjZSkgPT09IG51bGwgfHwgX2VuaGFuY2VkJGRvY3Mkc291cmNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZW5oYW5jZWQkZG9jcyRzb3VyY2UuY29kZSkgfHwgJyc7XG59O1xuXG5leHBvcnQgdmFyIGdldFNvdXJjZVByb3BzID0gZnVuY3Rpb24gZ2V0U291cmNlUHJvcHMocHJvcHMsIGRvY3NDb250ZXh0LCBzb3VyY2VDb250ZXh0KSB7XG4gIHZhciBjdXJyZW50SWQgPSBkb2NzQ29udGV4dC5pZCxcbiAgICAgIHN0b3J5QnlJZCA9IGRvY3NDb250ZXh0LnN0b3J5QnlJZDtcblxuICB2YXIgX3N0b3J5QnlJZCA9IHN0b3J5QnlJZChjdXJyZW50SWQpLFxuICAgICAgcGFyYW1ldGVycyA9IF9zdG9yeUJ5SWQucGFyYW1ldGVycztcblxuICB2YXIgY29kZVByb3BzID0gcHJvcHM7XG4gIHZhciBzaW5nbGVQcm9wcyA9IHByb3BzO1xuICB2YXIgbXVsdGlQcm9wcyA9IHByb3BzO1xuICB2YXIgc291cmNlID0gY29kZVByb3BzLmNvZGU7IC8vIHByZWZlciB1c2VyLXNwZWNpZmllZCBjb2RlXG5cbiAgdmFyIHRhcmdldElkcyA9IG11bHRpUHJvcHMuaWRzIHx8IFtzaW5nbGVQcm9wcy5pZCB8fCBjdXJyZW50SWRdO1xuICB2YXIgc3RvcnlJZHMgPSB0YXJnZXRJZHMubWFwKGZ1bmN0aW9uICh0YXJnZXRJZCkge1xuICAgIHJldHVybiB0YXJnZXRJZCA9PT0gQ1VSUkVOVF9TRUxFQ1RJT04gPyBjdXJyZW50SWQgOiB0YXJnZXRJZDtcbiAgfSk7XG4gIHZhciBzdG9yaWVzID0gdXNlU3RvcmllcyhzdG9yeUlkcywgZG9jc0NvbnRleHQpO1xuXG4gIGlmICghc3Rvcmllcy5ldmVyeShCb29sZWFuKSkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogU291cmNlRXJyb3IuU09VUkNFX1VOQVZBSUxBQkxFLFxuICAgICAgc3RhdGU6IFNvdXJjZVN0YXRlLk5PTkVcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzb3VyY2UpIHtcbiAgICBzb3VyY2UgPSBzdG9yeUlkcy5tYXAoZnVuY3Rpb24gKHN0b3J5SWQsIGlkeCkge1xuICAgICAgdmFyIHN0b3J5U291cmNlID0gZ2V0U3RvcnlTb3VyY2Uoc3RvcnlJZCwgc291cmNlQ29udGV4dCk7XG4gICAgICB2YXIgc3RvcnlPYmogPSBzdG9yaWVzW2lkeF07XG4gICAgICByZXR1cm4gZ2V0U25pcHBldChzdG9yeVNvdXJjZSwgc3RvcnlPYmopO1xuICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuICB9XG5cbiAgdmFyIHN0YXRlID0gZ2V0U291cmNlU3RhdGUoc3Rvcmllcyk7XG4gIHZhciBfcGFyYW1ldGVycyRkb2NzNSA9IHBhcmFtZXRlcnMuZG9jcyxcbiAgICAgIGRvY3NQYXJhbWV0ZXJzID0gX3BhcmFtZXRlcnMkZG9jczUgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtZXRlcnMkZG9jczU7XG4gIHZhciBfZG9jc1BhcmFtZXRlcnMkc291cmMgPSBkb2NzUGFyYW1ldGVycy5zb3VyY2UsXG4gICAgICBzb3VyY2VQYXJhbWV0ZXJzID0gX2RvY3NQYXJhbWV0ZXJzJHNvdXJjID09PSB2b2lkIDAgPyB7fSA6IF9kb2NzUGFyYW1ldGVycyRzb3VyYztcbiAgdmFyIF9zb3VyY2VQYXJhbWV0ZXJzJGxhbiA9IHNvdXJjZVBhcmFtZXRlcnMubGFuZ3VhZ2UsXG4gICAgICBkb2NzTGFuZ3VhZ2UgPSBfc291cmNlUGFyYW1ldGVycyRsYW4gPT09IHZvaWQgMCA/IG51bGwgOiBfc291cmNlUGFyYW1ldGVycyRsYW47XG4gIHJldHVybiBzb3VyY2UgPyB7XG4gICAgY29kZTogc291cmNlLFxuICAgIHN0YXRlOiBzdGF0ZSxcbiAgICBsYW5ndWFnZTogcHJvcHMubGFuZ3VhZ2UgfHwgZG9jc0xhbmd1YWdlIHx8ICdqc3gnLFxuICAgIGRhcms6IHByb3BzLmRhcmsgfHwgZmFsc2VcbiAgfSA6IHtcbiAgICBlcnJvcjogU291cmNlRXJyb3IuU09VUkNFX1VOQVZBSUxBQkxFLFxuICAgIHN0YXRlOiBzdGF0ZVxuICB9O1xufTtcbi8qKlxuICogU3Rvcnkgc291cmNlIGRvYyBibG9jayByZW5kZXJzIHNvdXJjZSBjb2RlIGlmIHByb3ZpZGVkLFxuICogb3IgdGhlIHNvdXJjZSBmb3IgYSBzdG9yeSBpZiBgc3RvcnlJZGAgaXMgcHJvdmlkZWQsIG9yXG4gKiB0aGUgc291cmNlIGZvciB0aGUgY3VycmVudCBzdG9yeSBpZiBub3RoaW5nIGlzIHByb3ZpZGVkLlxuICovXG5cbmV4cG9ydCB2YXIgU291cmNlID0gZnVuY3Rpb24gU291cmNlKHByb3BzKSB7XG4gIHZhciBzb3VyY2VDb250ZXh0ID0gdXNlQ29udGV4dChTb3VyY2VDb250ZXh0KTtcbiAgdmFyIGRvY3NDb250ZXh0ID0gdXNlQ29udGV4dChEb2NzQ29udGV4dCk7XG4gIHZhciBzb3VyY2VQcm9wcyA9IGdldFNvdXJjZVByb3BzKHByb3BzLCBkb2NzQ29udGV4dCwgc291cmNlQ29udGV4dCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlU291cmNlLCBzb3VyY2VQcm9wcyk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTURYUHJvdmlkZXIgfSBmcm9tICdAbWR4LWpzL3JlYWN0JztcbmltcG9ydCB7IHRvSWQsIHN0b3J5TmFtZUZyb21FeHBvcnQgfSBmcm9tICdAc3Rvcnlib29rL2NzZic7XG5pbXBvcnQgeyByZXNldENvbXBvbmVudHMsIFByZXZpZXcgYXMgUHVyZVByZXZpZXcsIFByZXZpZXdTa2VsZXRvbiB9IGZyb20gJ0BzdG9yeWJvb2svY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xuaW1wb3J0IHsgU291cmNlQ29udGV4dCB9IGZyb20gJy4vU291cmNlQ29udGFpbmVyJztcbmltcG9ydCB7IGdldFNvdXJjZVByb3BzLCBTb3VyY2VTdGF0ZSB9IGZyb20gJy4vU291cmNlJztcbmltcG9ydCB7IHVzZVN0b3JpZXMgfSBmcm9tICcuL3VzZVN0b3J5JztcbmV4cG9ydCB7IFNvdXJjZVN0YXRlIH07XG5cbnZhciBnZXRQcmV2aWV3UHJvcHMgPSBmdW5jdGlvbiBnZXRQcmV2aWV3UHJvcHMoX3JlZiwgZG9jc0NvbnRleHQsIHNvdXJjZUNvbnRleHQpIHtcbiAgdmFyIHdpdGhTb3VyY2UgPSBfcmVmLndpdGhTb3VyY2UsXG4gICAgICBtZHhTb3VyY2UgPSBfcmVmLm1keFNvdXJjZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcIndpdGhTb3VyY2VcIiwgXCJtZHhTb3VyY2VcIiwgXCJjaGlsZHJlblwiXSk7XG5cbiAgdmFyIG1keENvbXBvbmVudEFubm90YXRpb25zID0gZG9jc0NvbnRleHQubWR4Q29tcG9uZW50QW5ub3RhdGlvbnMsXG4gICAgICBtZHhTdG9yeU5hbWVUb0tleSA9IGRvY3NDb250ZXh0Lm1keFN0b3J5TmFtZVRvS2V5O1xuICB2YXIgc291cmNlU3RhdGUgPSB3aXRoU291cmNlO1xuICB2YXIgaXNMb2FkaW5nID0gZmFsc2U7XG5cbiAgaWYgKHNvdXJjZVN0YXRlID09PSBTb3VyY2VTdGF0ZS5OT05FKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgcHJldmlld1Byb3BzOiBwcm9wc1xuICAgIH07XG4gIH1cblxuICBpZiAobWR4U291cmNlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgICAgcHJldmlld1Byb3BzOiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICB3aXRoU291cmNlOiBnZXRTb3VyY2VQcm9wcyh7XG4gICAgICAgICAgY29kZTogZGVjb2RlVVJJKG1keFNvdXJjZSlcbiAgICAgICAgfSwgZG9jc0NvbnRleHQsIHNvdXJjZUNvbnRleHQpXG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICB2YXIgY2hpbGRBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dO1xuICB2YXIgc3RvcnlDaGlsZHJlbiA9IGNoaWxkQXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMucHJvcHMgJiYgKGMucHJvcHMuaWQgfHwgYy5wcm9wcy5uYW1lKTtcbiAgfSk7XG4gIHZhciB0YXJnZXRJZHMgPSBzdG9yeUNoaWxkcmVuLm1hcChmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnByb3BzLmlkIHx8IHRvSWQobWR4Q29tcG9uZW50QW5ub3RhdGlvbnMuaWQgfHwgbWR4Q29tcG9uZW50QW5ub3RhdGlvbnMudGl0bGUsIHN0b3J5TmFtZUZyb21FeHBvcnQobWR4U3RvcnlOYW1lVG9LZXlbcy5wcm9wcy5uYW1lXSkpO1xuICB9KTtcbiAgdmFyIHNvdXJjZVByb3BzID0gZ2V0U291cmNlUHJvcHMoe1xuICAgIGlkczogdGFyZ2V0SWRzXG4gIH0sIGRvY3NDb250ZXh0LCBzb3VyY2VDb250ZXh0KTtcbiAgaWYgKCFzb3VyY2VTdGF0ZSkgc291cmNlU3RhdGUgPSBzb3VyY2VQcm9wcy5zdGF0ZTtcbiAgdmFyIHN0b3JpZXMgPSB1c2VTdG9yaWVzKHRhcmdldElkcywgZG9jc0NvbnRleHQpO1xuICBpc0xvYWRpbmcgPSBzdG9yaWVzLnNvbWUoZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gIXM7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGlzTG9hZGluZzogaXNMb2FkaW5nLFxuICAgIHByZXZpZXdQcm9wczogT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgIC8vIHBhc3MgdGhyb3VnaCBjb2x1bW5zIGV0Yy5cbiAgICAgIHdpdGhTb3VyY2U6IHNvdXJjZVByb3BzLFxuICAgICAgaXNFeHBhbmRlZDogc291cmNlU3RhdGUgPT09IFNvdXJjZVN0YXRlLk9QRU5cbiAgICB9KVxuICB9O1xufTtcblxuZXhwb3J0IHZhciBDYW52YXMgPSBmdW5jdGlvbiBDYW52YXMocHJvcHMpIHtcbiAgdmFyIGRvY3NDb250ZXh0ID0gdXNlQ29udGV4dChEb2NzQ29udGV4dCk7XG4gIHZhciBzb3VyY2VDb250ZXh0ID0gdXNlQ29udGV4dChTb3VyY2VDb250ZXh0KTtcblxuICB2YXIgX2dldFByZXZpZXdQcm9wcyA9IGdldFByZXZpZXdQcm9wcyhwcm9wcywgZG9jc0NvbnRleHQsIHNvdXJjZUNvbnRleHQpLFxuICAgICAgaXNMb2FkaW5nID0gX2dldFByZXZpZXdQcm9wcy5pc0xvYWRpbmcsXG4gICAgICBwcmV2aWV3UHJvcHMgPSBfZ2V0UHJldmlld1Byb3BzLnByZXZpZXdQcm9wcztcblxuICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcbiAgaWYgKGlzTG9hZGluZykgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByZXZpZXdTa2VsZXRvbiwgbnVsbCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNRFhQcm92aWRlciwge1xuICAgIGNvbXBvbmVudHM6IHJlc2V0Q29tcG9uZW50c1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlUHJldmlldywgcHJldmlld1Byb3BzLCBjaGlsZHJlbikpO1xufTsiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuLy8gZXhwb3J0IHR5cGUgRG9jZ2VuVHlwZSA9IERvY2dlblByb3BUeXBlIHwgRG9jZ2VuRmxvd1R5cGUgfCBEb2NnZW5UeXBlU2NyaXB0VHlwZTtcbmV4cG9ydCB2YXIgVHlwZVN5c3RlbTtcblxuKGZ1bmN0aW9uIChUeXBlU3lzdGVtKSB7XG4gIFR5cGVTeXN0ZW1bXCJKQVZBU0NSSVBUXCJdID0gXCJKYXZhU2NyaXB0XCI7XG4gIFR5cGVTeXN0ZW1bXCJGTE9XXCJdID0gXCJGbG93XCI7XG4gIFR5cGVTeXN0ZW1bXCJUWVBFU0NSSVBUXCJdID0gXCJUeXBlU2NyaXB0XCI7XG4gIFR5cGVTeXN0ZW1bXCJVTktOT1dOXCJdID0gXCJVbmtub3duXCI7XG59KShUeXBlU3lzdGVtIHx8IChUeXBlU3lzdGVtID0ge30pKTsiLCJ2YXIgQkxBQ0tMSVNUID0gWydudWxsJywgJ3VuZGVmaW5lZCddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdFZhbHVlQmxhY2tsaXN0ZWQodmFsdWUpIHtcbiAgcmV0dXJuIEJMQUNLTElTVC5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggPT09IHZhbHVlO1xuICB9KTtcbn0iLCJleHBvcnQgdmFyIHN0ciA9IGZ1bmN0aW9uIHN0cihvYmopIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRGVzY3JpcHRpb246IGV4cGVjdGVkIHN0cmluZywgZ290OiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkob2JqKSkpO1xufTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCB7IHN0ciB9IGZyb20gJy4vc3RyaW5nJztcbmV4cG9ydCBmdW5jdGlvbiBoYXNEb2NnZW4oY29tcG9uZW50KSB7XG4gIHJldHVybiAhIWNvbXBvbmVudC5fX2RvY2dlbkluZm87XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZERvY2dlblNlY3Rpb24oZG9jZ2VuU2VjdGlvbikge1xuICByZXR1cm4gZG9jZ2VuU2VjdGlvbiAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRvY2dlblNlY3Rpb24pLmxlbmd0aCA+IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jZ2VuU2VjdGlvbihjb21wb25lbnQsIHNlY3Rpb24pIHtcbiAgcmV0dXJuIGhhc0RvY2dlbihjb21wb25lbnQpID8gY29tcG9uZW50Ll9fZG9jZ2VuSW5mb1tzZWN0aW9uXSA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jZ2VuRGVzY3JpcHRpb24oY29tcG9uZW50KSB7XG4gIHJldHVybiBoYXNEb2NnZW4oY29tcG9uZW50KSAmJiBzdHIoY29tcG9uZW50Ll9fZG9jZ2VuSW5mby5kZXNjcmlwdGlvbik7XG59IiwiZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0VmFsdWUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2NnZW5JbmZvJzsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanNcIjtcbmltcG9ydCBkb2N0cmluZSBmcm9tICdkb2N0cmluZSc7XG5cbmZ1bmN0aW9uIGNvbnRhaW5zSnNEb2ModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaW5jbHVkZXMoJ0AnKTtcbn1cblxuZnVuY3Rpb24gcGFyc2UoY29udGVudCwgdGFncykge1xuICB2YXIgYXN0O1xuXG4gIHRyeSB7XG4gICAgYXN0ID0gZG9jdHJpbmUucGFyc2UoY29udGVudCwge1xuICAgICAgdGFnczogdGFncyxcbiAgICAgIHNsb3BweTogdHJ1ZVxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIEpTRG9jIHRhZ3MuJyk7XG4gIH1cblxuICByZXR1cm4gYXN0O1xufVxuXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICB0YWdzOiBbJ3BhcmFtJywgJ2FyZycsICdhcmd1bWVudCcsICdyZXR1cm5zJywgJ2lnbm9yZSddXG59O1xuZXhwb3J0IHZhciBwYXJzZUpzRG9jID0gZnVuY3Rpb24gcGFyc2VKc0RvYyh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9PUFRJT05TO1xuXG4gIGlmICghY29udGFpbnNKc0RvYyh2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5jbHVkZXNKc0RvYzogZmFsc2UsXG4gICAgICBpZ25vcmU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBqc0RvY0FzdCA9IHBhcnNlKHZhbHVlLCBvcHRpb25zLnRhZ3MpO1xuICB2YXIgZXh0cmFjdGVkVGFncyA9IGV4dHJhY3RKc0RvY1RhZ3MoanNEb2NBc3QpO1xuXG4gIGlmIChleHRyYWN0ZWRUYWdzLmlnbm9yZSkge1xuICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IGluIGRvaW5nIG90aGVyIHN0dWZmIHNpbmNlIHRoaXMgcHJvcCB3aWxsIG5vdCBiZSByZW5kZXJlZC5cbiAgICByZXR1cm4ge1xuICAgICAgaW5jbHVkZXNKc0RvYzogdHJ1ZSxcbiAgICAgIGlnbm9yZTogdHJ1ZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluY2x1ZGVzSnNEb2M6IHRydWUsXG4gICAgaWdub3JlOiBmYWxzZSxcbiAgICAvLyBBbHdheXMgdXNlIHRoZSBwYXJzZWQgZGVzY3JpcHRpb24gdG8gZW5zdXJlIEpTRG9jIGlzIHJlbW92ZWQgZnJvbSB0aGUgZGVzY3JpcHRpb24uXG4gICAgZGVzY3JpcHRpb246IGpzRG9jQXN0LmRlc2NyaXB0aW9uLFxuICAgIGV4dHJhY3RlZFRhZ3M6IGV4dHJhY3RlZFRhZ3NcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGV4dHJhY3RKc0RvY1RhZ3MoYXN0KSB7XG4gIHZhciBleHRyYWN0ZWRUYWdzID0ge1xuICAgIHBhcmFtczogbnVsbCxcbiAgICByZXR1cm5zOiBudWxsLFxuICAgIGlnbm9yZTogZmFsc2VcbiAgfTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdC50YWdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIHRhZyA9IGFzdC50YWdzW2ldO1xuXG4gICAgaWYgKHRhZy50aXRsZSA9PT0gJ2lnbm9yZScpIHtcbiAgICAgIGV4dHJhY3RlZFRhZ3MuaWdub3JlID0gdHJ1ZTsgLy8gT25jZSB3ZSByZWFjaCBhbiBAaWdub3JlIHRhZywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcGFyc2luZyB0aGUgb3RoZXIgdGFncyBzaW5jZSB3ZSB3aWxsIG5vdCByZW5kZXIgdGhlIHByb3AuXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRhZy50aXRsZSkge1xuICAgICAgICAvLyBhcmcgJiBhcmd1bWVudCBhcmUgYWxpYXNlcyBmb3IgcGFyYW0uXG4gICAgICAgIGNhc2UgJ3BhcmFtJzpcbiAgICAgICAgY2FzZSAnYXJnJzpcbiAgICAgICAgY2FzZSAnYXJndW1lbnQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBwYXJhbVRhZyA9IGV4dHJhY3RQYXJhbSh0YWcpO1xuXG4gICAgICAgICAgICBpZiAocGFyYW1UYWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAoZXh0cmFjdGVkVGFncy5wYXJhbXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RlZFRhZ3MucGFyYW1zID0gW107XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBleHRyYWN0ZWRUYWdzLnBhcmFtcy5wdXNoKHBhcmFtVGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3JldHVybnMnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXR1cm5zVGFnID0gZXh0cmFjdFJldHVybnModGFnKTtcblxuICAgICAgICAgICAgaWYgKHJldHVybnNUYWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBleHRyYWN0ZWRUYWdzLnJldHVybnMgPSByZXR1cm5zVGFnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXh0cmFjdGVkVGFncztcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBhcmFtKHRhZykge1xuICB2YXIgcGFyYW1OYW1lID0gdGFnLm5hbWU7IC8vIFdoZW4gdGhlIEBwYXJhbSBkb2Vzbid0IGhhdmUgYSBuYW1lIGJ1dCBoYXZlIGEgdHlwZSBhbmQgYSBkZXNjcmlwdGlvbiwgXCJudWxsLW51bGxcIiBpcyByZXR1cm5lZC5cblxuICBpZiAocGFyYW1OYW1lICE9IG51bGwgJiYgcGFyYW1OYW1lICE9PSAnbnVsbC1udWxsJykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0YWcubmFtZSxcbiAgICAgIHR5cGU6IHRhZy50eXBlLFxuICAgICAgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbixcbiAgICAgIGdldFByZXR0eU5hbWU6IGZ1bmN0aW9uIGdldFByZXR0eU5hbWUoKSB7XG4gICAgICAgIGlmIChwYXJhbU5hbWUuaW5jbHVkZXMoJ251bGwnKSkge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZmV3IGNhc2VzIGluIHdoaWNoIHRoZSByZXR1cm5lZCBwYXJhbSBuYW1lIGNvbnRhaW5zIFwibnVsbFwiLlxuICAgICAgICAgIC8vIC0gQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQtIE9yaWdpbmFsIFN5bnRoZXRpY0V2ZW50XG4gICAgICAgICAgLy8gLSBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBldmVudC5cXG5AcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICAgIHJldHVybiBwYXJhbU5hbWUucmVwbGFjZSgnLW51bGwnLCAnJykucmVwbGFjZSgnLm51bGwnLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFnLm5hbWU7XG4gICAgICB9LFxuICAgICAgZ2V0VHlwZU5hbWU6IGZ1bmN0aW9uIGdldFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnLnR5cGUgIT0gbnVsbCA/IGV4dHJhY3RUeXBlTmFtZSh0YWcudHlwZSkgOiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFJldHVybnModGFnKSB7XG4gIGlmICh0YWcudHlwZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRhZy50eXBlLFxuICAgICAgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbixcbiAgICAgIGdldFR5cGVOYW1lOiBmdW5jdGlvbiBnZXRUeXBlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RUeXBlTmFtZSh0YWcudHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VHlwZU5hbWUodHlwZSkge1xuICBpZiAodHlwZS50eXBlID09PSAnTmFtZUV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIHR5cGUubmFtZTtcbiAgfVxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdSZWNvcmRUeXBlJykge1xuICAgIHZhciByZWNvcmRGaWVsZHMgPSB0eXBlLmZpZWxkcy5tYXAoZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICBpZiAoZmllbGQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgdmFsdWVUeXBlTmFtZSA9IGV4dHJhY3RUeXBlTmFtZShmaWVsZC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChmaWVsZC5rZXksIFwiOiBcIikuY29uY2F0KHZhbHVlVHlwZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGQua2V5O1xuICAgIH0pO1xuICAgIHJldHVybiBcIih7XCIuY29uY2F0KHJlY29yZEZpZWxkcy5qb2luKCcsICcpLCBcIn0pXCIpO1xuICB9XG5cbiAgaWYgKHR5cGUudHlwZSA9PT0gJ1VuaW9uVHlwZScpIHtcbiAgICB2YXIgdW5pb25FbGVtZW50cyA9IHR5cGUuZWxlbWVudHMubWFwKGV4dHJhY3RUeXBlTmFtZSk7XG4gICAgcmV0dXJuIFwiKFwiLmNvbmNhdCh1bmlvbkVsZW1lbnRzLmpvaW4oJ3wnKSwgXCIpXCIpO1xuICB9IC8vIE9ubHkgc3VwcG9ydCB1bnR5cGVkIGFycmF5OiBbXS4gTWlnaHQgYWRkIG1vcmUgc3VwcG9ydCBsYXRlciBpZiByZXF1aXJlZC5cblxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdBcnJheVR5cGUnKSB7XG4gICAgcmV0dXJuICdbXSc7XG4gIH1cblxuICBpZiAodHlwZS50eXBlID09PSAnVHlwZUFwcGxpY2F0aW9uJykge1xuICAgIGlmICh0eXBlLmV4cHJlc3Npb24gIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGUuZXhwcmVzc2lvbi5uYW1lID09PSAnQXJyYXknKSB7XG4gICAgICAgIHZhciBhcnJheVR5cGUgPSBleHRyYWN0VHlwZU5hbWUodHlwZS5hcHBsaWNhdGlvbnNbMF0pO1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoYXJyYXlUeXBlLCBcIltdXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdOdWxsYWJsZVR5cGUnIHx8IHR5cGUudHlwZSA9PT0gJ05vbk51bGxhYmxlVHlwZScgfHwgdHlwZS50eXBlID09PSAnT3B0aW9uYWxUeXBlJykge1xuICAgIHJldHVybiBleHRyYWN0VHlwZU5hbWUodHlwZS5leHByZXNzaW9uKTtcbiAgfVxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdBbGxMaXRlcmFsJykge1xuICAgIHJldHVybiAnYW55JztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5leHBvcnQgdmFyIE1BWF9UWVBFX1NVTU1BUllfTEVOR1RIID0gOTA7XG5leHBvcnQgdmFyIE1BWF9ERUZBVUxUX1ZBTFVFX1NVTU1BUllfTEVOR1RIID0gNTA7XG5leHBvcnQgZnVuY3Rpb24gaXNUb29Mb25nRm9yVHlwZVN1bW1hcnkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IE1BWF9UWVBFX1NVTU1BUllfTEVOR1RIO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9vTG9uZ0ZvckRlZmF1bHRWYWx1ZVN1bW1hcnkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IE1BWF9ERUZBVUxUX1ZBTFVFX1NVTU1BUllfTEVOR1RIO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1bW1hcnlWYWx1ZShzdW1tYXJ5LCBkZXRhaWwpIHtcbiAgaWYgKHN1bW1hcnkgPT09IGRldGFpbCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdW1tYXJ5OiBzdW1tYXJ5XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeTogc3VtbWFyeSxcbiAgICBkZXRhaWw6IGRldGFpbFxuICB9O1xufVxuZXhwb3J0IHZhciBub3JtYWxpemVOZXdsaW5lcyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZU5ld2xpbmVzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcXFxyXFxcXG4vZywgJ1xcXFxuJyk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVN1bW1hcnlWYWx1ZSwgaXNUb29Mb25nRm9yVHlwZVN1bW1hcnkgfSBmcm9tICcuLi8uLi91dGlscyc7XG52YXIgRmxvd1R5cGVzVHlwZTtcblxuKGZ1bmN0aW9uIChGbG93VHlwZXNUeXBlKSB7XG4gIEZsb3dUeXBlc1R5cGVbXCJVTklPTlwiXSA9IFwidW5pb25cIjtcbiAgRmxvd1R5cGVzVHlwZVtcIlNJR05BVFVSRVwiXSA9IFwic2lnbmF0dXJlXCI7XG59KShGbG93VHlwZXNUeXBlIHx8IChGbG93VHlwZXNUeXBlID0ge30pKTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVVbmlvbkVsZW1lbnQoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICAgIGVsZW1lbnRzID0gX3JlZi5lbGVtZW50cyxcbiAgICAgIHJhdyA9IF9yZWYucmF3O1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRzICE9IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudHMubWFwKGdlbmVyYXRlVW5pb25FbGVtZW50KS5qb2luKCcgfCAnKTtcbiAgfVxuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIHJldHVybiByYXc7XG4gIH1cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVVbmlvbihfcmVmMikge1xuICB2YXIgbmFtZSA9IF9yZWYyLm5hbWUsXG4gICAgICByYXcgPSBfcmVmMi5yYXcsXG4gICAgICBlbGVtZW50cyA9IF9yZWYyLmVsZW1lbnRzO1xuXG4gIGlmIChlbGVtZW50cyAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVN1bW1hcnlWYWx1ZShlbGVtZW50cy5tYXAoZ2VuZXJhdGVVbmlvbkVsZW1lbnQpLmpvaW4oJyB8ICcpKTtcbiAgfVxuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIC8vIEZsb3cgVW5pb25zIGNhbiBiZSBkZWZpbmVkIHdpdGggb3Igd2l0aG91dCBhIGxlYWRpbmcgYHxgIGNoYXJhY3Rlciwgc28gdHJ5IHRvIHJlbW92ZSBpdC5cbiAgICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKHJhdy5yZXBsYWNlKC9eXFx8XFxzKi8sICcnKSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKG5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUZ1bmNTaWduYXR1cmUoX3JlZjMpIHtcbiAgdmFyIHR5cGUgPSBfcmVmMy50eXBlLFxuICAgICAgcmF3ID0gX3JlZjMucmF3O1xuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIHJldHVybiBjcmVhdGVTdW1tYXJ5VmFsdWUocmF3KTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVTdW1tYXJ5VmFsdWUodHlwZSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlT2JqZWN0U2lnbmF0dXJlKF9yZWY0KSB7XG4gIHZhciB0eXBlID0gX3JlZjQudHlwZSxcbiAgICAgIHJhdyA9IF9yZWY0LnJhdztcblxuICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICByZXR1cm4gIWlzVG9vTG9uZ0ZvclR5cGVTdW1tYXJ5KHJhdykgPyBjcmVhdGVTdW1tYXJ5VmFsdWUocmF3KSA6IGNyZWF0ZVN1bW1hcnlWYWx1ZSh0eXBlLCByYXcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVN1bW1hcnlWYWx1ZSh0eXBlKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTaWduYXR1cmUoZmxvd1R5cGUpIHtcbiAgdmFyIHR5cGUgPSBmbG93VHlwZS50eXBlO1xuICByZXR1cm4gdHlwZSA9PT0gJ29iamVjdCcgPyBnZW5lcmF0ZU9iamVjdFNpZ25hdHVyZShmbG93VHlwZSkgOiBnZW5lcmF0ZUZ1bmNTaWduYXR1cmUoZmxvd1R5cGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZURlZmF1bHQoX3JlZjUpIHtcbiAgdmFyIG5hbWUgPSBfcmVmNS5uYW1lLFxuICAgICAgcmF3ID0gX3JlZjUucmF3O1xuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIHJldHVybiAhaXNUb29Mb25nRm9yVHlwZVN1bW1hcnkocmF3KSA/IGNyZWF0ZVN1bW1hcnlWYWx1ZShyYXcpIDogY3JlYXRlU3VtbWFyeVZhbHVlKG5hbWUsIHJhdyk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZSh0eXBlKSB7XG4gIC8vIEEgdHlwZSBjb3VsZCBiZSBudWxsIGlmIGEgZGVmYXVsdFByb3AgaGFzIGJlZW4gcHJvdmlkZWQgd2l0aG91dCBhIHR5cGUgZGVmaW5pdGlvbi5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICBjYXNlIEZsb3dUeXBlc1R5cGUuVU5JT046XG4gICAgICByZXR1cm4gZ2VuZXJhdGVVbmlvbih0eXBlKTtcblxuICAgIGNhc2UgRmxvd1R5cGVzVHlwZS5TSUdOQVRVUkU6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVTaWduYXR1cmUodHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGdlbmVyYXRlRGVmYXVsdCh0eXBlKTtcbiAgfVxufSIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdW1tYXJ5VmFsdWUsIGlzVG9vTG9uZ0ZvckRlZmF1bHRWYWx1ZVN1bW1hcnkgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBpc0RlZmF1bHRWYWx1ZUJsYWNrbGlzdGVkIH0gZnJvbSAnLi4vdXRpbHMvZGVmYXVsdFZhbHVlJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlLCB0eXBlKSB7XG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZS52YWx1ZTtcblxuICAgIGlmICghaXNEZWZhdWx0VmFsdWVCbGFja2xpc3RlZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAhaXNUb29Mb25nRm9yRGVmYXVsdFZhbHVlU3VtbWFyeSh2YWx1ZSkgPyBjcmVhdGVTdW1tYXJ5VmFsdWUodmFsdWUpIDogY3JlYXRlU3VtbWFyeVZhbHVlKHR5cGUubmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCB7IGNyZWF0ZVR5cGUgfSBmcm9tICcuL2NyZWF0ZVR5cGUnO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdFZhbHVlIH0gZnJvbSAnLi9jcmVhdGVEZWZhdWx0VmFsdWUnO1xuZXhwb3J0IHZhciBjcmVhdGVGbG93UHJvcERlZiA9IGZ1bmN0aW9uIGNyZWF0ZUZsb3dQcm9wRGVmKHByb3BOYW1lLCBkb2NnZW5JbmZvKSB7XG4gIHZhciBmbG93VHlwZSA9IGRvY2dlbkluZm8uZmxvd1R5cGUsXG4gICAgICBkZXNjcmlwdGlvbiA9IGRvY2dlbkluZm8uZGVzY3JpcHRpb24sXG4gICAgICByZXF1aXJlZCA9IGRvY2dlbkluZm8ucmVxdWlyZWQsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBkb2NnZW5JbmZvLmRlZmF1bHRWYWx1ZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwcm9wTmFtZSxcbiAgICB0eXBlOiBjcmVhdGVUeXBlKGZsb3dUeXBlKSxcbiAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgIGRlZmF1bHRWYWx1ZTogY3JlYXRlRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSwgZmxvd1R5cGUpXG4gIH07XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlU3VtbWFyeVZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGUoX3JlZikge1xuICB2YXIgdHNUeXBlID0gX3JlZi50c1R5cGUsXG4gICAgICByZXF1aXJlZCA9IF9yZWYucmVxdWlyZWQ7XG5cbiAgLy8gQSB0eXBlIGNvdWxkIGJlIG51bGwgaWYgYSBkZWZhdWx0UHJvcCBoYXMgYmVlbiBwcm92aWRlZCB3aXRob3V0IGEgdHlwZSBkZWZpbml0aW9uLlxuICBpZiAodHNUeXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghcmVxdWlyZWQpIHtcbiAgICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKHRzVHlwZS5uYW1lLnJlcGxhY2UoJyB8IHVuZGVmaW5lZCcsICcnKSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKHRzVHlwZS5uYW1lKTtcbn0iLCJpbXBvcnQgeyBjcmVhdGVTdW1tYXJ5VmFsdWUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBpc0RlZmF1bHRWYWx1ZUJsYWNrbGlzdGVkIH0gZnJvbSAnLi4vdXRpbHMvZGVmYXVsdFZhbHVlJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VmFsdWUoX3JlZikge1xuICB2YXIgZGVmYXVsdFZhbHVlID0gX3JlZi5kZWZhdWx0VmFsdWU7XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdmFyIHZhbHVlID0gZGVmYXVsdFZhbHVlLnZhbHVlO1xuXG4gICAgaWYgKCFpc0RlZmF1bHRWYWx1ZUJsYWNrbGlzdGVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN1bW1hcnlWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlVHlwZSB9IGZyb20gJy4vY3JlYXRlVHlwZSc7XG5pbXBvcnQgeyBjcmVhdGVEZWZhdWx0VmFsdWUgfSBmcm9tICcuL2NyZWF0ZURlZmF1bHRWYWx1ZSc7XG5leHBvcnQgdmFyIGNyZWF0ZVRzUHJvcERlZiA9IGZ1bmN0aW9uIGNyZWF0ZVRzUHJvcERlZihwcm9wTmFtZSwgZG9jZ2VuSW5mbykge1xuICB2YXIgZGVzY3JpcHRpb24gPSBkb2NnZW5JbmZvLmRlc2NyaXB0aW9uLFxuICAgICAgcmVxdWlyZWQgPSBkb2NnZW5JbmZvLnJlcXVpcmVkO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IHByb3BOYW1lLFxuICAgIHR5cGU6IGNyZWF0ZVR5cGUoZG9jZ2VuSW5mbyksXG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICBkZWZhdWx0VmFsdWU6IGNyZWF0ZURlZmF1bHRWYWx1ZShkb2NnZW5JbmZvKVxuICB9O1xufTsiLCJpbXBvcnQgeyBjb252ZXJ0IGFzIHRzQ29udmVydCB9IGZyb20gJy4vdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBjb252ZXJ0IGFzIGZsb3dDb252ZXJ0IH0gZnJvbSAnLi9mbG93JztcbmltcG9ydCB7IGNvbnZlcnQgYXMgcHJvcFR5cGVzQ29udmVydCB9IGZyb20gJy4vcHJvcHR5cGVzJztcbmV4cG9ydCB2YXIgY29udmVydCA9IGZ1bmN0aW9uIGNvbnZlcnQoZG9jZ2VuSW5mbykge1xuICB2YXIgdHlwZSA9IGRvY2dlbkluZm8udHlwZSxcbiAgICAgIHRzVHlwZSA9IGRvY2dlbkluZm8udHNUeXBlLFxuICAgICAgZmxvd1R5cGUgPSBkb2NnZW5JbmZvLmZsb3dUeXBlO1xuICBpZiAodHlwZSAhPSBudWxsKSByZXR1cm4gcHJvcFR5cGVzQ29udmVydCh0eXBlKTtcbiAgaWYgKHRzVHlwZSAhPSBudWxsKSByZXR1cm4gdHNDb252ZXJ0KHRzVHlwZSk7XG4gIGlmIChmbG93VHlwZSAhPSBudWxsKSByZXR1cm4gZmxvd0NvbnZlcnQoZmxvd1R5cGUpO1xuICByZXR1cm4gbnVsbDtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanNcIjtcbmltcG9ydCB7IFR5cGVTeXN0ZW0gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVN1bW1hcnlWYWx1ZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUZsb3dQcm9wRGVmIH0gZnJvbSAnLi9mbG93L2NyZWF0ZVByb3BEZWYnO1xuaW1wb3J0IHsgaXNEZWZhdWx0VmFsdWVCbGFja2xpc3RlZCB9IGZyb20gJy4vdXRpbHMvZGVmYXVsdFZhbHVlJztcbmltcG9ydCB7IGNyZWF0ZVRzUHJvcERlZiB9IGZyb20gJy4vdHlwZVNjcmlwdC9jcmVhdGVQcm9wRGVmJztcbmltcG9ydCB7IGNvbnZlcnQgfSBmcm9tICcuLi9jb252ZXJ0JztcblxuZnVuY3Rpb24gY3JlYXRlVHlwZSh0eXBlKSB7XG4gIC8vIEEgdHlwZSBjb3VsZCBiZSBudWxsIGlmIGEgZGVmYXVsdFByb3AgaGFzIGJlZW4gcHJvdmlkZWQgd2l0aG91dCBhIHR5cGUgZGVmaW5pdGlvbi5cbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCA/IGNyZWF0ZVN1bW1hcnlWYWx1ZSh0eXBlLm5hbWUpIDogbnVsbDtcbn0gLy8gQSBoZXVyaXN0aWMgdG8gdGVsbCBpZiBhIGRlZmF1bHRWYWx1ZSBjb21lcyBmcm9tIFJEVFxuXG5cbmZ1bmN0aW9uIGlzUmVhY3REb2NnZW5UeXBlc2NyaXB0KGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgY29tcHV0ZWQgPSBkZWZhdWx0VmFsdWUuY29tcHV0ZWQsXG4gICAgICBmdW5jID0gZGVmYXVsdFZhbHVlLmZ1bmM7XG4gIHJldHVybiB0eXBlb2YgY29tcHV0ZWQgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBmdW5jID09PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmdWYWx1ZWQodHlwZSkge1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZS5uYW1lID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGUubmFtZSA9PT0gJ2VudW0nKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodHlwZS52YWx1ZSkgJiYgdHlwZS52YWx1ZS5ldmVyeShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHR2ID0gX3JlZi52YWx1ZTtcbiAgICAgIHJldHVybiB0eXBlb2YgdHYgPT09ICdzdHJpbmcnICYmIHR2WzBdID09PSAnXCInICYmIHR2W3R2Lmxlbmd0aCAtIDFdID09PSAnXCInO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlLCB0eXBlKSB7XG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZS52YWx1ZTtcblxuICAgIGlmICghaXNEZWZhdWx0VmFsdWVCbGFja2xpc3RlZCh2YWx1ZSkpIHtcbiAgICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIGluIGByZWFjdC1kb2NnZW4tdHlwZXNjcmlwdC1sb2FkZXJgLCB3aGljaCByZXR1cm5zICdzdHJpbmcnIGZvciBhIHN0cmluZ1xuICAgICAgLy8gZGVmYXVsdCwgaW5zdGVhZCBvZiBcIidzdHJpbmcnXCIgLS0gd2hpY2ggaXMgaW5jb3JyZWN0XG4gICAgICBpZiAoaXNSZWFjdERvY2dlblR5cGVzY3JpcHQoZGVmYXVsdFZhbHVlKSAmJiBpc1N0cmluZ1ZhbHVlZCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjcmVhdGVTdW1tYXJ5VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNpY1Byb3BEZWYobmFtZSwgdHlwZSwgZG9jZ2VuSW5mbykge1xuICB2YXIgZGVzY3JpcHRpb24gPSBkb2NnZW5JbmZvLmRlc2NyaXB0aW9uLFxuICAgICAgcmVxdWlyZWQgPSBkb2NnZW5JbmZvLnJlcXVpcmVkLFxuICAgICAgZGVmYXVsdFZhbHVlID0gZG9jZ2VuSW5mby5kZWZhdWx0VmFsdWU7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICB0eXBlOiBjcmVhdGVUeXBlKHR5cGUpLFxuICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgZGVmYXVsdFZhbHVlOiBjcmVhdGVEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlLCB0eXBlKVxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseUpzRG9jUmVzdWx0KHByb3BEZWYsIGpzRG9jUGFyc2luZ1Jlc3VsdCkge1xuICBpZiAoanNEb2NQYXJzaW5nUmVzdWx0LmluY2x1ZGVzSnNEb2MpIHtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBqc0RvY1BhcnNpbmdSZXN1bHQuZGVzY3JpcHRpb24sXG4gICAgICAgIGV4dHJhY3RlZFRhZ3MgPSBqc0RvY1BhcnNpbmdSZXN1bHQuZXh0cmFjdGVkVGFncztcblxuICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHByb3BEZWYuZGVzY3JpcHRpb24gPSBqc0RvY1BhcnNpbmdSZXN1bHQuZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgdmFyIGhhc1BhcmFtcyA9IGV4dHJhY3RlZFRhZ3MucGFyYW1zICE9IG51bGw7XG4gICAgdmFyIGhhc1JldHVybnMgPSBleHRyYWN0ZWRUYWdzLnJldHVybnMgIT0gbnVsbCAmJiBleHRyYWN0ZWRUYWdzLnJldHVybnMudHlwZSAhPSBudWxsO1xuXG4gICAgaWYgKGhhc1BhcmFtcyB8fCBoYXNSZXR1cm5zKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHByb3BEZWYuanNEb2NUYWdzID0ge1xuICAgICAgICBwYXJhbXM6IGhhc1BhcmFtcyAmJiBleHRyYWN0ZWRUYWdzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogeC5nZXRQcmV0dHlOYW1lKCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC5kZXNjcmlwdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICByZXR1cm5zOiBoYXNSZXR1cm5zICYmIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZXh0cmFjdGVkVGFncy5yZXR1cm5zLmRlc2NyaXB0aW9uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb3BEZWY7XG59XG5cbmV4cG9ydCB2YXIgamF2YVNjcmlwdEZhY3RvcnkgPSBmdW5jdGlvbiBqYXZhU2NyaXB0RmFjdG9yeShwcm9wTmFtZSwgZG9jZ2VuSW5mbywganNEb2NQYXJzaW5nUmVzdWx0KSB7XG4gIHZhciBwcm9wRGVmID0gY3JlYXRlQmFzaWNQcm9wRGVmKHByb3BOYW1lLCBkb2NnZW5JbmZvLnR5cGUsIGRvY2dlbkluZm8pO1xuICBwcm9wRGVmLnNiVHlwZSA9IGNvbnZlcnQoZG9jZ2VuSW5mbyk7XG4gIHJldHVybiBhcHBseUpzRG9jUmVzdWx0KHByb3BEZWYsIGpzRG9jUGFyc2luZ1Jlc3VsdCk7XG59O1xuZXhwb3J0IHZhciB0c0ZhY3RvcnkgPSBmdW5jdGlvbiB0c0ZhY3RvcnkocHJvcE5hbWUsIGRvY2dlbkluZm8sIGpzRG9jUGFyc2luZ1Jlc3VsdCkge1xuICB2YXIgcHJvcERlZiA9IGNyZWF0ZVRzUHJvcERlZihwcm9wTmFtZSwgZG9jZ2VuSW5mbyk7XG4gIHByb3BEZWYuc2JUeXBlID0gY29udmVydChkb2NnZW5JbmZvKTtcbiAgcmV0dXJuIGFwcGx5SnNEb2NSZXN1bHQocHJvcERlZiwganNEb2NQYXJzaW5nUmVzdWx0KTtcbn07XG5leHBvcnQgdmFyIGZsb3dGYWN0b3J5ID0gZnVuY3Rpb24gZmxvd0ZhY3RvcnkocHJvcE5hbWUsIGRvY2dlbkluZm8sIGpzRG9jUGFyc2luZ1Jlc3VsdCkge1xuICB2YXIgcHJvcERlZiA9IGNyZWF0ZUZsb3dQcm9wRGVmKHByb3BOYW1lLCBkb2NnZW5JbmZvKTtcbiAgcHJvcERlZi5zYlR5cGUgPSBjb252ZXJ0KGRvY2dlbkluZm8pO1xuICByZXR1cm4gYXBwbHlKc0RvY1Jlc3VsdChwcm9wRGVmLCBqc0RvY1BhcnNpbmdSZXN1bHQpO1xufTtcbmV4cG9ydCB2YXIgdW5rbm93bkZhY3RvcnkgPSBmdW5jdGlvbiB1bmtub3duRmFjdG9yeShwcm9wTmFtZSwgZG9jZ2VuSW5mbywganNEb2NQYXJzaW5nUmVzdWx0KSB7XG4gIHZhciBwcm9wRGVmID0gY3JlYXRlQmFzaWNQcm9wRGVmKHByb3BOYW1lLCB7XG4gICAgbmFtZTogJ3Vua25vd24nXG4gIH0sIGRvY2dlbkluZm8pO1xuICByZXR1cm4gYXBwbHlKc0RvY1Jlc3VsdChwcm9wRGVmLCBqc0RvY1BhcnNpbmdSZXN1bHQpO1xufTtcbmV4cG9ydCB2YXIgZ2V0UHJvcERlZkZhY3RvcnkgPSBmdW5jdGlvbiBnZXRQcm9wRGVmRmFjdG9yeSh0eXBlU3lzdGVtKSB7XG4gIHN3aXRjaCAodHlwZVN5c3RlbSkge1xuICAgIGNhc2UgVHlwZVN5c3RlbS5KQVZBU0NSSVBUOlxuICAgICAgcmV0dXJuIGphdmFTY3JpcHRGYWN0b3J5O1xuXG4gICAgY2FzZSBUeXBlU3lzdGVtLlRZUEVTQ1JJUFQ6XG4gICAgICByZXR1cm4gdHNGYWN0b3J5O1xuXG4gICAgY2FzZSBUeXBlU3lzdGVtLkZMT1c6XG4gICAgICByZXR1cm4gZmxvd0ZhY3Rvcnk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVua25vd25GYWN0b3J5O1xuICB9XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUpzRG9jIH0gZnJvbSAnLi4vanNkb2NQYXJzZXInO1xuaW1wb3J0IHsgVHlwZVN5c3RlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RG9jZ2VuU2VjdGlvbiwgaXNWYWxpZERvY2dlblNlY3Rpb24sIGdldERvY2dlbkRlc2NyaXB0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBnZXRQcm9wRGVmRmFjdG9yeSB9IGZyb20gJy4vY3JlYXRlUHJvcERlZic7XG5cbnZhciBnZXRUeXBlU3lzdGVtID0gZnVuY3Rpb24gZ2V0VHlwZVN5c3RlbShkb2NnZW5JbmZvKSB7XG4gIGlmIChkb2NnZW5JbmZvLnR5cGUgIT0gbnVsbCkge1xuICAgIHJldHVybiBUeXBlU3lzdGVtLkpBVkFTQ1JJUFQ7XG4gIH1cblxuICBpZiAoZG9jZ2VuSW5mby5mbG93VHlwZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFR5cGVTeXN0ZW0uRkxPVztcbiAgfVxuXG4gIGlmIChkb2NnZW5JbmZvLnRzVHlwZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFR5cGVTeXN0ZW0uVFlQRVNDUklQVDtcbiAgfVxuXG4gIHJldHVybiBUeXBlU3lzdGVtLlVOS05PV047XG59O1xuXG5leHBvcnQgdmFyIGV4dHJhY3RDb21wb25lbnRTZWN0aW9uQXJyYXkgPSBmdW5jdGlvbiBleHRyYWN0Q29tcG9uZW50U2VjdGlvbkFycmF5KGRvY2dlblNlY3Rpb24pIHtcbiAgdmFyIHR5cGVTeXN0ZW0gPSBnZXRUeXBlU3lzdGVtKGRvY2dlblNlY3Rpb25bMF0pO1xuICB2YXIgY3JlYXRlUHJvcERlZiA9IGdldFByb3BEZWZGYWN0b3J5KHR5cGVTeXN0ZW0pO1xuICByZXR1cm4gZG9jZ2VuU2VjdGlvbi5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgX2l0ZW0kdHlwZTtcblxuICAgIHZhciBzYW5pdGl6ZWRJdGVtID0gaXRlbTtcblxuICAgIGlmICgoX2l0ZW0kdHlwZSA9IGl0ZW0udHlwZSkgIT09IG51bGwgJiYgX2l0ZW0kdHlwZSAhPT0gdm9pZCAwICYmIF9pdGVtJHR5cGUuZWxlbWVudHMpIHtcbiAgICAgIHNhbml0aXplZEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0udHlwZSwge1xuICAgICAgICAgIHZhbHVlOiBpdGVtLnR5cGUuZWxlbWVudHNcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBleHRyYWN0UHJvcChzYW5pdGl6ZWRJdGVtLm5hbWUsIHNhbml0aXplZEl0ZW0sIHR5cGVTeXN0ZW0sIGNyZWF0ZVByb3BEZWYpO1xuICB9KTtcbn07XG5leHBvcnQgdmFyIGV4dHJhY3RDb21wb25lbnRTZWN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gZXh0cmFjdENvbXBvbmVudFNlY3Rpb25PYmplY3QoZG9jZ2VuU2VjdGlvbikge1xuICB2YXIgZG9jZ2VuUHJvcHNLZXlzID0gT2JqZWN0LmtleXMoZG9jZ2VuU2VjdGlvbik7XG4gIHZhciB0eXBlU3lzdGVtID0gZ2V0VHlwZVN5c3RlbShkb2NnZW5TZWN0aW9uW2RvY2dlblByb3BzS2V5c1swXV0pO1xuICB2YXIgY3JlYXRlUHJvcERlZiA9IGdldFByb3BEZWZGYWN0b3J5KHR5cGVTeXN0ZW0pO1xuICByZXR1cm4gZG9jZ2VuUHJvcHNLZXlzLm1hcChmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICB2YXIgZG9jZ2VuSW5mbyA9IGRvY2dlblNlY3Rpb25bcHJvcE5hbWVdO1xuICAgIHJldHVybiBkb2NnZW5JbmZvICE9IG51bGwgPyBleHRyYWN0UHJvcChwcm9wTmFtZSwgZG9jZ2VuSW5mbywgdHlwZVN5c3RlbSwgY3JlYXRlUHJvcERlZikgOiBudWxsO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG59O1xuZXhwb3J0IHZhciBleHRyYWN0Q29tcG9uZW50UHJvcHMgPSBmdW5jdGlvbiBleHRyYWN0Q29tcG9uZW50UHJvcHMoY29tcG9uZW50LCBzZWN0aW9uKSB7XG4gIHZhciBkb2NnZW5TZWN0aW9uID0gZ2V0RG9jZ2VuU2VjdGlvbihjb21wb25lbnQsIHNlY3Rpb24pO1xuXG4gIGlmICghaXNWYWxpZERvY2dlblNlY3Rpb24oZG9jZ2VuU2VjdGlvbikpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gdnVlLWRvY2dlbi1hcGkgaGFzIGRpdmVyZ2VkIGZyb20gcmVhY3QtZG9jZ2VuIGFuZCByZXR1cm5zIGFuIGFycmF5XG5cblxuICByZXR1cm4gQXJyYXkuaXNBcnJheShkb2NnZW5TZWN0aW9uKSA/IGV4dHJhY3RDb21wb25lbnRTZWN0aW9uQXJyYXkoZG9jZ2VuU2VjdGlvbikgOiBleHRyYWN0Q29tcG9uZW50U2VjdGlvbk9iamVjdChkb2NnZW5TZWN0aW9uKTtcbn07XG5cbmZ1bmN0aW9uIGV4dHJhY3RQcm9wKHByb3BOYW1lLCBkb2NnZW5JbmZvLCB0eXBlU3lzdGVtLCBjcmVhdGVQcm9wRGVmKSB7XG4gIHZhciBqc0RvY1BhcnNpbmdSZXN1bHQgPSBwYXJzZUpzRG9jKGRvY2dlbkluZm8uZGVzY3JpcHRpb24pO1xuICB2YXIgaXNJZ25vcmVkID0ganNEb2NQYXJzaW5nUmVzdWx0LmluY2x1ZGVzSnNEb2MgJiYganNEb2NQYXJzaW5nUmVzdWx0Lmlnbm9yZTtcblxuICBpZiAoIWlzSWdub3JlZCkge1xuICAgIHZhciBwcm9wRGVmID0gY3JlYXRlUHJvcERlZihwcm9wTmFtZSwgZG9jZ2VuSW5mbywganNEb2NQYXJzaW5nUmVzdWx0KTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcERlZjogcHJvcERlZixcbiAgICAgIGpzRG9jVGFnczoganNEb2NQYXJzaW5nUmVzdWx0LmV4dHJhY3RlZFRhZ3MsXG4gICAgICBkb2NnZW5JbmZvOiBkb2NnZW5JbmZvLFxuICAgICAgdHlwZVN5c3RlbTogdHlwZVN5c3RlbVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDb21wb25lbnREZXNjcmlwdGlvbihjb21wb25lbnQpIHtcbiAgcmV0dXJuIGNvbXBvbmVudCAhPSBudWxsICYmIGdldERvY2dlbkRlc2NyaXB0aW9uKGNvbXBvbmVudCk7XG59IiwiZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZXh0cmFjdERvY2dlblByb3BzJzsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IERlc2NyaXB0aW9uIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5pbXBvcnQgeyBDVVJSRU5UX1NFTEVDVElPTiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc3RyIH0gZnJvbSAnLi4vbGliL2RvY2dlbic7XG5leHBvcnQgdmFyIERlc2NyaXB0aW9uVHlwZTtcblxuKGZ1bmN0aW9uIChEZXNjcmlwdGlvblR5cGUpIHtcbiAgRGVzY3JpcHRpb25UeXBlW1wiSU5GT1wiXSA9IFwiaW5mb1wiO1xuICBEZXNjcmlwdGlvblR5cGVbXCJOT1RFU1wiXSA9IFwibm90ZXNcIjtcbiAgRGVzY3JpcHRpb25UeXBlW1wiRE9DR0VOXCJdID0gXCJkb2NnZW5cIjtcbiAgRGVzY3JpcHRpb25UeXBlW1wiTEVHQUNZXzVfMlwiXSA9IFwibGVnYWN5LTUuMlwiO1xuICBEZXNjcmlwdGlvblR5cGVbXCJBVVRPXCJdID0gXCJhdXRvXCI7XG59KShEZXNjcmlwdGlvblR5cGUgfHwgKERlc2NyaXB0aW9uVHlwZSA9IHt9KSk7XG5cbnZhciBnZXROb3RlcyA9IGZ1bmN0aW9uIGdldE5vdGVzKG5vdGVzKSB7XG4gIHJldHVybiBub3RlcyAmJiAodHlwZW9mIG5vdGVzID09PSAnc3RyaW5nJyA/IG5vdGVzIDogc3RyKG5vdGVzLm1hcmtkb3duKSB8fCBzdHIobm90ZXMudGV4dCkpO1xufTtcblxudmFyIGdldEluZm8gPSBmdW5jdGlvbiBnZXRJbmZvKGluZm8pIHtcbiAgcmV0dXJuIGluZm8gJiYgKHR5cGVvZiBpbmZvID09PSAnc3RyaW5nJyA/IGluZm8gOiBzdHIoaW5mby50ZXh0KSk7XG59O1xuXG52YXIgbm9EZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIG5vRGVzY3JpcHRpb24oY29tcG9uZW50KSB7XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IHZhciBnZXREZXNjcmlwdGlvblByb3BzID0gZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb25Qcm9wcyhfcmVmLCBfcmVmMikge1xuICB2YXIgb2YgPSBfcmVmLm9mLFxuICAgICAgdHlwZSA9IF9yZWYudHlwZSxcbiAgICAgIG1hcmtkb3duID0gX3JlZi5tYXJrZG93bixcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIGlkID0gX3JlZjIuaWQsXG4gICAgICBzdG9yeUJ5SWQgPSBfcmVmMi5zdG9yeUJ5SWQ7XG5cbiAgdmFyIF9zdG9yeUJ5SWQgPSBzdG9yeUJ5SWQoaWQpLFxuICAgICAgY29tcG9uZW50ID0gX3N0b3J5QnlJZC5jb21wb25lbnQsXG4gICAgICBwYXJhbWV0ZXJzID0gX3N0b3J5QnlJZC5wYXJhbWV0ZXJzO1xuXG4gIGlmIChjaGlsZHJlbiB8fCBtYXJrZG93bikge1xuICAgIHJldHVybiB7XG4gICAgICBtYXJrZG93bjogY2hpbGRyZW4gfHwgbWFya2Rvd25cbiAgICB9O1xuICB9XG5cbiAgdmFyIG5vdGVzID0gcGFyYW1ldGVycy5ub3RlcyxcbiAgICAgIGluZm8gPSBwYXJhbWV0ZXJzLmluZm8sXG4gICAgICBkb2NzID0gcGFyYW1ldGVycy5kb2NzO1xuXG4gIHZhciBfcmVmMyA9IGRvY3MgfHwge30sXG4gICAgICBfcmVmMyRleHRyYWN0Q29tcG9uZW4gPSBfcmVmMy5leHRyYWN0Q29tcG9uZW50RGVzY3JpcHRpb24sXG4gICAgICBleHRyYWN0Q29tcG9uZW50RGVzY3JpcHRpb24gPSBfcmVmMyRleHRyYWN0Q29tcG9uZW4gPT09IHZvaWQgMCA/IG5vRGVzY3JpcHRpb24gOiBfcmVmMyRleHRyYWN0Q29tcG9uZW4sXG4gICAgICBkZXNjcmlwdGlvbiA9IF9yZWYzLmRlc2NyaXB0aW9uO1xuXG4gIHZhciB0YXJnZXQgPSBvZiA9PT0gQ1VSUkVOVF9TRUxFQ1RJT04gPyBjb21wb25lbnQgOiBvZjsgLy8gb3ZlcnJpZGUgY29tcG9uZW50IGRlc2NyaXB0aW9uXG5cbiAgdmFyIGNvbXBvbmVudERlc2NyaXB0aW9uUGFyYW1ldGVyID0gZGVzY3JpcHRpb24gPT09IG51bGwgfHwgZGVzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlc2NyaXB0aW9uLmNvbXBvbmVudDtcblxuICBpZiAoY29tcG9uZW50RGVzY3JpcHRpb25QYXJhbWV0ZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFya2Rvd246IGNvbXBvbmVudERlc2NyaXB0aW9uUGFyYW1ldGVyXG4gICAgfTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgRGVzY3JpcHRpb25UeXBlLklORk86XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXJrZG93bjogZ2V0SW5mbyhpbmZvKVxuICAgICAgfTtcblxuICAgIGNhc2UgRGVzY3JpcHRpb25UeXBlLk5PVEVTOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFya2Rvd246IGdldE5vdGVzKG5vdGVzKVxuICAgICAgfTtcbiAgICAvLyBGSVhNRTogcmVtb3ZlIGluIDYuMFxuXG4gICAgY2FzZSBEZXNjcmlwdGlvblR5cGUuTEVHQUNZXzVfMjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcmtkb3duOiBcIlxcblwiLmNvbmNhdChnZXROb3Rlcyhub3RlcykgfHwgZ2V0SW5mbyhpbmZvKSB8fCAnJywgXCJcXG5cXG5cIikuY29uY2F0KGV4dHJhY3RDb21wb25lbnREZXNjcmlwdGlvbih0YXJnZXQpIHx8ICcnLCBcIlxcblwiKS50cmltKClcbiAgICAgIH07XG5cbiAgICBjYXNlIERlc2NyaXB0aW9uVHlwZS5ET0NHRU46XG4gICAgY2FzZSBEZXNjcmlwdGlvblR5cGUuQVVUTzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFya2Rvd246IGV4dHJhY3RDb21wb25lbnREZXNjcmlwdGlvbih0YXJnZXQsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50XG4gICAgICAgIH0sIHBhcmFtZXRlcnMpKVxuICAgICAgfTtcbiAgfVxufTtcblxudmFyIERlc2NyaXB0aW9uQ29udGFpbmVyID0gZnVuY3Rpb24gRGVzY3JpcHRpb25Db250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KTtcblxuICB2YXIgX2dldERlc2NyaXB0aW9uUHJvcHMgPSBnZXREZXNjcmlwdGlvblByb3BzKHByb3BzLCBjb250ZXh0KSxcbiAgICAgIG1hcmtkb3duID0gX2dldERlc2NyaXB0aW9uUHJvcHMubWFya2Rvd247XG5cbiAgcmV0dXJuIG1hcmtkb3duID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGVzY3JpcHRpb24sIHtcbiAgICBtYXJrZG93bjogbWFya2Rvd25cbiAgfSkgOiBudWxsO1xufTsgLy8gc2luY2Ugd2UgYXJlIGluIHRoZSBkb2NzIGJsb2NrcywgYXNzdW1lIGRlZmF1bHQgZGVzY3JpcHRpb24gaWYgZm9yIHByaW1hcnkgY29tcG9uZW50IHN0b3J5XG5cblxuRGVzY3JpcHRpb25Db250YWluZXIuZGVmYXVsdFByb3BzID0ge1xuICBvZjogJy4nXG59O1xuZXhwb3J0IHsgRGVzY3JpcHRpb25Db250YWluZXIgYXMgRGVzY3JpcHRpb24gfTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaXRsZSBhcyBQdXJlVGl0bGUgfSBmcm9tICdAc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbnZhciBTVE9SWV9LSU5EX1BBVEhfU0VQQVJBVE9SID0gL1xccypcXC9cXHMqLztcbmV4cG9ydCB2YXIgZXh0cmFjdFRpdGxlID0gZnVuY3Rpb24gZXh0cmFjdFRpdGxlKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZTtcbiAgdmFyIGdyb3VwcyA9IHRpdGxlLnRyaW0oKS5zcGxpdChTVE9SWV9LSU5EX1BBVEhfU0VQQVJBVE9SKTtcbiAgcmV0dXJuIGdyb3VwcyAmJiBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdIHx8IHRpdGxlO1xufTtcbmV4cG9ydCB2YXIgVGl0bGUgPSBmdW5jdGlvbiBUaXRsZShfcmVmMikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KTtcbiAgdmFyIHRleHQgPSBjaGlsZHJlbjtcblxuICBpZiAoIXRleHQpIHtcbiAgICB0ZXh0ID0gZXh0cmFjdFRpdGxlKGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHRleHQgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlVGl0bGUsIHtcbiAgICBjbGFzc05hbWU6IFwic2Jkb2NzLXRpdGxlXCJcbiAgfSwgdGV4dCkgOiBudWxsO1xufTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN1YnRpdGxlIGFzIFB1cmVTdWJ0aXRsZSB9IGZyb20gJ0BzdG9yeWJvb2svY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xuZXhwb3J0IHZhciBTdWJ0aXRsZSA9IGZ1bmN0aW9uIFN1YnRpdGxlKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICB2YXIgX3VzZUNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KSxcbiAgICAgIGlkID0gX3VzZUNvbnRleHQuaWQsXG4gICAgICBzdG9yeUJ5SWQgPSBfdXNlQ29udGV4dC5zdG9yeUJ5SWQ7XG5cbiAgdmFyIF9zdG9yeUJ5SWQgPSBzdG9yeUJ5SWQoaWQpLFxuICAgICAgcGFyYW1ldGVycyA9IF9zdG9yeUJ5SWQucGFyYW1ldGVycztcblxuICB2YXIgdGV4dCA9IGNoaWxkcmVuO1xuXG4gIGlmICghdGV4dCkge1xuICAgIHRleHQgPSBwYXJhbWV0ZXJzID09PSBudWxsIHx8IHBhcmFtZXRlcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtZXRlcnMuY29tcG9uZW50U3VidGl0bGU7XG4gIH1cblxuICByZXR1cm4gdGV4dCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFB1cmVTdWJ0aXRsZSwge1xuICAgIGNsYXNzTmFtZTogXCJzYmRvY3Mtc3VidGl0bGVcIlxuICB9LCB0ZXh0KSA6IG51bGw7XG59OyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3BsaXQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3RhcnRzLXdpdGguanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qc1wiO1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgYWRkb25zIH0gZnJvbSAnQHN0b3J5Ym9vay9hZGRvbnMnO1xuaW1wb3J0IHsgTkFWSUdBVEVfVVJMIH0gZnJvbSAnQHN0b3J5Ym9vay9jb3JlLWV2ZW50cyc7XG5pbXBvcnQgeyBTb3VyY2UsIENvZGUsIGNvbXBvbmVudHMgfSBmcm9tICdAc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICdnbG9iYWwnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQHN0b3J5Ym9vay90aGVtaW5nJztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7IC8vIEhhY2t5IHV0aWxpdHkgZm9yIGFzc2VydGluZyBpZGVudGlmaWVycyBpbiBNRFggU3RvcnkgZWxlbWVudHNcblxuZXhwb3J0IHZhciBhc3NlcnRJc0ZuID0gZnVuY3Rpb24gYXNzZXJ0SXNGbih2YWwpIHtcbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBzdG9yeSBmdW5jdGlvbiwgZ290OiBcIi5jb25jYXQodmFsKSk7XG4gIH1cblxuICByZXR1cm4gdmFsO1xufTsgLy8gSGFja3kgdXRpbGl0eSBmb3IgYWRkaW5nIG1keFN0b3J5VG9JZCB0byB0aGUgZGVmYXVsdCBjb250ZXh0XG5cbmV4cG9ydCB2YXIgQWRkQ29udGV4dCA9IGZ1bmN0aW9uIEFkZENvbnRleHQocHJvcHMpIHtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJjaGlsZHJlblwiXSk7XG5cbiAgdmFyIHBhcmVudENvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KERvY3NDb250ZXh0KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERvY3NDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudENvbnRleHQsIHJlc3QpXG4gIH0sIGNoaWxkcmVuKTtcbn07XG5leHBvcnQgdmFyIENvZGVPclNvdXJjZU1keCA9IGZ1bmN0aW9uIENvZGVPclNvdXJjZU1keChfcmVmKSB7XG4gIHZhciBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY2xhc3NOYW1lXCIsIFwiY2hpbGRyZW5cIl0pO1xuXG4gIC8vIG1hcmtkb3duLXRvLWpzeCBkb2VzIG5vdCBhZGQgY2xhc3NOYW1lIHRvIGlubGluZSBjb2RlXG4gIGlmICh0eXBlb2YgY2xhc3NOYW1lICE9PSAnc3RyaW5nJyAmJiAodHlwZW9mIGNoaWxkcmVuICE9PSAnc3RyaW5nJyB8fCAhY2hpbGRyZW4ubWF0Y2goL1tcXG5cXHJdL2cpKSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb2RlLCBudWxsLCBjaGlsZHJlbik7XG4gIH0gLy8gY2xhc3NOYW1lOiBcImxhbmctanN4XCJcblxuXG4gIHZhciBsYW5ndWFnZSA9IGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuc3BsaXQoJy0nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNvdXJjZSwgX2V4dGVuZHMoe1xuICAgIGxhbmd1YWdlOiBsYW5ndWFnZSAmJiBsYW5ndWFnZVsxXSB8fCAncGxhaW50ZXh0JyxcbiAgICBmb3JtYXQ6IGZhbHNlLFxuICAgIGNvZGU6IGNoaWxkcmVuXG4gIH0sIHJlc3QpKTtcbn07XG5cbmZ1bmN0aW9uIG5hdmlnYXRlKHVybCkge1xuICBhZGRvbnMuZ2V0Q2hhbm5lbCgpLmVtaXQoTkFWSUdBVEVfVVJMLCB1cmwpO1xufSAvLyBAdHMtaWdub3JlXG5cblxudmFyIEEgPSBjb21wb25lbnRzLmE7XG5cbnZhciBBbmNob3JJblBhZ2UgPSBmdW5jdGlvbiBBbmNob3JJblBhZ2UoX3JlZjIpIHtcbiAgdmFyIGhhc2ggPSBfcmVmMi5oYXNoLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbjtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEEsIHtcbiAgICBocmVmOiBoYXNoLFxuICAgIHRhcmdldDogXCJfc2VsZlwiLFxuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciBpZCA9IGhhc2guc3Vic3RyaW5nKDEpO1xuICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIG5hdmlnYXRlKGhhc2gpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgY2hpbGRyZW4pO1xufTtcblxuZXhwb3J0IHZhciBBbmNob3JNZHggPSBmdW5jdGlvbiBBbmNob3JNZHgocHJvcHMpIHtcbiAgdmFyIGhyZWYgPSBwcm9wcy5ocmVmLFxuICAgICAgdGFyZ2V0ID0gcHJvcHMudGFyZ2V0LFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImhyZWZcIiwgXCJ0YXJnZXRcIiwgXCJjaGlsZHJlblwiXSk7XG5cbiAgaWYgKGhyZWYpIHtcbiAgICAvLyBFbmFibGUgc2Nyb2xsaW5nIGZvciBpbi1wYWdlIGFuY2hvcnMuXG4gICAgaWYgKGhyZWYuc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9ySW5QYWdlLCB7XG4gICAgICAgIGhhc2g6IGhyZWZcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9IC8vIExpbmtzIHRvIG90aGVyIHBhZ2VzIG9mIFNCIHNob3VsZCB1c2UgdGhlIGJhc2UgVVJMIG9mIHRoZSB0b3AgbGV2ZWwgaWZyYW1lIGluc3RlYWQgb2YgdGhlIGJhc2UgVVJMIG9mIHRoZSBwcmV2aWV3IGlmcmFtZS5cblxuXG4gICAgaWYgKHRhcmdldCAhPT0gJ19ibGFuaycpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBLCBfZXh0ZW5kcyh7XG4gICAgICAgIGhyZWY6IGhyZWYsXG4gICAgICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyB1c2UgdGhlIEEgZWxlbWVudCdzIGhyZWYsIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkIGZvclxuICAgICAgICAgIC8vIGxvY2FsIHBhdGhzIHdpdGhvdXQgYSBgP3BhdGg9YCBxdWVyeSBwYXJhbSBwcmVmaXhcblxuICAgICAgICAgIG5hdmlnYXRlKGV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0QXR0cmlidXRlKCdocmVmJykpO1xuICAgICAgICB9LFxuICAgICAgICB0YXJnZXQ6IHRhcmdldFxuICAgICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgICB9XG4gIH0gLy8gRXh0ZXJuYWwgVVJMIGRvbnQgbmVlZCBhbnkgbW9kaWZpY2F0aW9uLlxuXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEEsIHByb3BzKTtcbn07XG52YXIgU1VQUE9SVEVEX01EWF9IRUFERVJTID0gWydoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNiddO1xudmFyIE9jdGljb25IZWFkZXJzID0gU1VQUE9SVEVEX01EWF9IRUFERVJTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBoZWFkZXJUeXBlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhY2MsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgaGVhZGVyVHlwZSwgc3R5bGVkKGNvbXBvbmVudHNbaGVhZGVyVHlwZV0pKHtcbiAgICAnJiBzdmcnOiB7XG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJ1xuICAgIH0sXG4gICAgJyY6aG92ZXIgc3ZnJzoge1xuICAgICAgdmlzaWJpbGl0eTogJ3Zpc2libGUnXG4gICAgfVxuICB9KSkpO1xufSwge30pO1xudmFyIE9jdGljb25BbmNob3IgPSBzdHlsZWQuYShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB7XG4gICAgZmxvYXQ6ICdsZWZ0JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICc0cHgnLFxuICAgIG1hcmdpbkxlZnQ6ICctMjBweCcsXG4gICAgLy8gQWxsb3cgdGhlIHRoZW1lJ3MgdGV4dCBjb2xvciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsaW5rIGNvbG9yLlxuICAgIGNvbG9yOiAnaW5oZXJpdCdcbiAgfTtcbn0pO1xuXG52YXIgSGVhZGVyV2l0aE9jdGljb25BbmNob3IgPSBmdW5jdGlvbiBIZWFkZXJXaXRoT2N0aWNvbkFuY2hvcihfcmVmMykge1xuICB2YXIgYXMgPSBfcmVmMy5hcyxcbiAgICAgIGlkID0gX3JlZjMuaWQsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgW1wiYXNcIiwgXCJpZFwiLCBcImNoaWxkcmVuXCJdKTtcblxuICAvLyBAdHMtaWdub3JlXG4gIHZhciBPY3RpY29uSGVhZGVyID0gT2N0aWNvbkhlYWRlcnNbYXNdO1xuICB2YXIgaGFzaCA9IFwiI1wiLmNvbmNhdChpZCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPY3RpY29uSGVhZGVyLCBfZXh0ZW5kcyh7XG4gICAgaWQ6IGlkXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChPY3RpY29uQW5jaG9yLCB7XG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBocmVmOiBoYXNoLFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICB0YXJnZXQ6IFwiX3NlbGZcIixcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgbmF2aWdhdGUoaGFzaCk7XG4gICAgICB9XG4gICAgfVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgdmlld0JveDogXCIwIDAgMTYgMTZcIixcbiAgICB2ZXJzaW9uOiBcIjEuMVwiLFxuICAgIHdpZHRoOiBcIjE2XCIsXG4gICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIixcbiAgICBmaWxsOiBcImN1cnJlbnRDb2xvclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTQgOWgxdjFINGMtMS41IDAtMy0xLjY5LTMtMy41UzIuNTUgMyA0IDNoNGMxLjQ1IDAgMyAxLjY5IDMgMy41IDAgMS40MS0uOTEgMi43Mi0yIDMuMjVWOC41OWMuNTgtLjQ1IDEtMS4yNyAxLTIuMDlDMTAgNS4yMiA4Ljk4IDQgOCA0SDRjLS45OCAwLTIgMS4yMi0yIDIuNVMzIDkgNCA5em05LTNoLTF2MWgxYzEgMCAyIDEuMjIgMiAyLjVTMTMuOTggMTIgMTMgMTJIOWMtLjk4IDAtMi0xLjIyLTItMi41IDAtLjgzLjQyLTEuNjQgMS0yLjA5VjYuMjVjLTEuMDkuNTMtMiAxLjg0LTIgMy4yNUM2IDExLjMxIDcuNTUgMTMgOSAxM2g0YzEuNDUgMCAzLTEuNjkgMy0zLjVTMTQuNSA2IDEzIDZ6XCJcbiAgfSkpKSwgY2hpbGRyZW4pO1xufTtcblxuZXhwb3J0IHZhciBIZWFkZXJNZHggPSBmdW5jdGlvbiBIZWFkZXJNZHgocHJvcHMpIHtcbiAgdmFyIGFzID0gcHJvcHMuYXMsXG4gICAgICBpZCA9IHByb3BzLmlkLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImFzXCIsIFwiaWRcIiwgXCJjaGlsZHJlblwiXSk7IC8vIEFuIGlkIHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgb24gZXZlcnkgaGVhZGVyIGJ5IHRoZSBcInJlbWFyay1zbHVnXCIgcGx1Z2luLlxuXG5cbiAgaWYgKGlkKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRlcldpdGhPY3RpY29uQW5jaG9yLCBfZXh0ZW5kcyh7XG4gICAgICBhczogYXMsXG4gICAgICBpZDogaWRcbiAgICB9LCByZXN0KSwgY2hpbGRyZW4pO1xuICB9IC8vIEB0cy1pZ25vcmVcblxuXG4gIHZhciBIZWFkZXIgPSBjb21wb25lbnRzW2FzXTsgLy8gTWFrZSBzdXJlIGl0IHN0aWxsIHdvcmsgaWYgXCJyZW1hcmstc2x1Z1wiIHBsdWdpbiBpcyBub3QgcHJlc2VudC5cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSGVhZGVyLCBwcm9wcyk7XG59O1xuZXhwb3J0IHZhciBIZWFkZXJzTWR4ID0gU1VQUE9SVEVEX01EWF9IRUFERVJTLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBoZWFkZXJUeXBlKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBhY2MsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgaGVhZGVyVHlwZSwgZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRlck1keCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGhlYWRlclR5cGVcbiAgICB9LCBwcm9wcykpO1xuICB9KSk7XG59LCB7fSk7IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBIMyB9IGZyb20gJ0BzdG9yeWJvb2svY29tcG9uZW50cyc7XG5pbXBvcnQgeyBIZWFkZXJNZHggfSBmcm9tICcuL21keCc7XG5leHBvcnQgdmFyIFN1YmhlYWRpbmcgPSBmdW5jdGlvbiBTdWJoZWFkaW5nKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGRpc2FibGVBbmNob3IgPSBfcmVmLmRpc2FibGVBbmNob3I7XG5cbiAgaWYgKGRpc2FibGVBbmNob3IgfHwgdHlwZW9mIGNoaWxkcmVuICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIMywgbnVsbCwgY2hpbGRyZW4pO1xuICB9XG5cbiAgdmFyIHRhZ0lEID0gY2hpbGRyZW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksICctJyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIZWFkZXJNZHgsIHtcbiAgICBhczogXCJoM1wiLFxuICAgIGlkOiB0YWdJRFxuICB9LCBjaGlsZHJlbik7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5mcmVlemUuanNcIjtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVwcmVjYXRlIGZyb20gJ3V0aWwtZGVwcmVjYXRlJztcbmltcG9ydCBkZWRlbnQgZnJvbSAndHMtZGVkZW50JztcbmltcG9ydCB7IFN1YmhlYWRpbmcgfSBmcm9tICcuL1N1YmhlYWRpbmcnO1xuaW1wb3J0IHsgQW5jaG9yIH0gZnJvbSAnLi9BbmNob3InO1xuaW1wb3J0IHsgRGVzY3JpcHRpb24gfSBmcm9tICcuL0Rlc2NyaXB0aW9uJztcbmltcG9ydCB7IFN0b3J5IH0gZnJvbSAnLi9TdG9yeSc7XG5pbXBvcnQgeyBDYW52YXMgfSBmcm9tICcuL0NhbnZhcyc7XG52YXIgd2FyblN0b3J5RGVzY3JpcHRpb24gPSBkZXByZWNhdGUoZnVuY3Rpb24gKCkge30sIGRlZGVudChfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIERlcHJlY2F0ZWQgcGFyYW1ldGVyOiBkb2NzLnN0b3J5RGVzY3JpcHRpb24gPT4gZG9jcy5kZXNjcmlwdGlvbi5zdG9yeVxcbiAgICAgIFxcbiAgICBodHRwczovL2dpdGh1Yi5jb20vc3Rvcnlib29ranMvc3Rvcnlib29rL2Jsb2IvbmV4dC9NSUdSQVRJT04ubWQjZG9jcy1kZXNjcmlwdGlvbi1wYXJhbWV0ZXJcXG4gIFwiXSkpKSk7XG5leHBvcnQgdmFyIERvY3NTdG9yeSA9IGZ1bmN0aW9uIERvY3NTdG9yeShfcmVmKSB7XG4gIHZhciBpZCA9IF9yZWYuaWQsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgX3JlZiRleHBhbmRlZCA9IF9yZWYuZXhwYW5kZWQsXG4gICAgICBleHBhbmRlZCA9IF9yZWYkZXhwYW5kZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJGV4cGFuZGVkLFxuICAgICAgX3JlZiR3aXRoVG9vbGJhciA9IF9yZWYud2l0aFRvb2xiYXIsXG4gICAgICB3aXRoVG9vbGJhciA9IF9yZWYkd2l0aFRvb2xiYXIgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiR3aXRoVG9vbGJhcixcbiAgICAgIF9yZWYkcGFyYW1ldGVycyA9IF9yZWYucGFyYW1ldGVycyxcbiAgICAgIHBhcmFtZXRlcnMgPSBfcmVmJHBhcmFtZXRlcnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZiRwYXJhbWV0ZXJzO1xuICB2YXIgZGVzY3JpcHRpb247XG4gIHZhciBkb2NzID0gcGFyYW1ldGVycy5kb2NzO1xuXG4gIGlmIChleHBhbmRlZCAmJiBkb2NzKSB7XG4gICAgdmFyIF9kb2NzJGRlc2NyaXB0aW9uO1xuXG4gICAgZGVzY3JpcHRpb24gPSAoX2RvY3MkZGVzY3JpcHRpb24gPSBkb2NzLmRlc2NyaXB0aW9uKSA9PT0gbnVsbCB8fCBfZG9jcyRkZXNjcmlwdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2RvY3MkZGVzY3JpcHRpb24uc3Rvcnk7XG5cbiAgICBpZiAoIWRlc2NyaXB0aW9uKSB7XG4gICAgICBkZXNjcmlwdGlvbiA9IGRvY3Muc3RvcnlEZXNjcmlwdGlvbjtcbiAgICAgIGlmIChkZXNjcmlwdGlvbikgd2FyblN0b3J5RGVzY3JpcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3ViaGVhZGluZyA9IGV4cGFuZGVkICYmIG5hbWU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBbmNob3IsIHtcbiAgICBzdG9yeUlkOiBpZFxuICB9LCBzdWJoZWFkaW5nICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN1YmhlYWRpbmcsIG51bGwsIHN1YmhlYWRpbmcpLCBkZXNjcmlwdGlvbiAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZXNjcmlwdGlvbiwge1xuICAgIG1hcmtkb3duOiBkZXNjcmlwdGlvblxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FudmFzLCB7XG4gICAgd2l0aFRvb2xiYXI6IHdpdGhUb29sYmFyXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0b3J5LCB7XG4gICAgaWQ6IGlkLFxuICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnNcbiAgfSkpKTtcbn07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xuaW1wb3J0IHsgRG9jc1N0b3J5IH0gZnJvbSAnLi9Eb2NzU3RvcnknO1xuZXhwb3J0IHZhciBQcmltYXJ5ID0gZnVuY3Rpb24gUHJpbWFyeShfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIHZhciBfdXNlQ29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpLFxuICAgICAgZ2V0Q29tcG9uZW50U3RvcmllcyA9IF91c2VDb250ZXh0LmNvbXBvbmVudFN0b3JpZXM7XG5cbiAgdmFyIGNvbXBvbmVudFN0b3JpZXMgPSBnZXRDb21wb25lbnRTdG9yaWVzKCk7XG4gIHZhciBzdG9yeTtcblxuICBpZiAoY29tcG9uZW50U3Rvcmllcykge1xuICAgIHN0b3J5ID0gbmFtZSA/IGNvbXBvbmVudFN0b3JpZXMuZmluZChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMubmFtZSA9PT0gbmFtZTtcbiAgICB9KSA6IGNvbXBvbmVudFN0b3JpZXNbMF07XG4gIH1cblxuICByZXR1cm4gc3RvcnkgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEb2NzU3RvcnksIF9leHRlbmRzKHt9LCBzdG9yeSwge1xuICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICB3aXRoVG9vbGJhcjogdHJ1ZVxuICB9KSkgOiBudWxsO1xufTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEgyIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCB7IEhlYWRlck1keCB9IGZyb20gJy4vbWR4JztcbmV4cG9ydCB2YXIgSGVhZGluZyA9IGZ1bmN0aW9uIEhlYWRpbmcoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgZGlzYWJsZUFuY2hvciA9IF9yZWYuZGlzYWJsZUFuY2hvcjtcblxuICBpZiAoZGlzYWJsZUFuY2hvciB8fCB0eXBlb2YgY2hpbGRyZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEgyLCBudWxsLCBjaGlsZHJlbik7XG4gIH1cblxuICB2YXIgdGFnSUQgPSBjaGlsZHJlbi50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9naSwgJy0nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRlck1keCwge1xuICAgIGFzOiBcImgyXCIsXG4gICAgaWQ6IHRhZ0lEXG4gIH0sIGNoaWxkcmVuKTtcbn07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xuaW1wb3J0IHsgRG9jc1N0b3J5IH0gZnJvbSAnLi9Eb2NzU3RvcnknO1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJy4vSGVhZGluZyc7XG5leHBvcnQgdmFyIFN0b3JpZXMgPSBmdW5jdGlvbiBTdG9yaWVzKF9yZWYpIHtcbiAgdmFyIHRpdGxlID0gX3JlZi50aXRsZSxcbiAgICAgIF9yZWYkaW5jbHVkZVByaW1hcnkgPSBfcmVmLmluY2x1ZGVQcmltYXJ5LFxuICAgICAgaW5jbHVkZVByaW1hcnkgPSBfcmVmJGluY2x1ZGVQcmltYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaW5jbHVkZVByaW1hcnk7XG5cbiAgdmFyIF91c2VDb250ZXh0ID0gdXNlQ29udGV4dChEb2NzQ29udGV4dCksXG4gICAgICBjb21wb25lbnRTdG9yaWVzID0gX3VzZUNvbnRleHQuY29tcG9uZW50U3RvcmllcztcblxuICB2YXIgc3RvcmllcyA9IGNvbXBvbmVudFN0b3JpZXMoKTtcbiAgc3RvcmllcyA9IHN0b3JpZXMuZmlsdGVyKGZ1bmN0aW9uIChzdG9yeSkge1xuICAgIHZhciBfc3RvcnkkcGFyYW1ldGVycywgX3N0b3J5JHBhcmFtZXRlcnMkZG9jO1xuXG4gICAgcmV0dXJuICEoKF9zdG9yeSRwYXJhbWV0ZXJzID0gc3RvcnkucGFyYW1ldGVycykgIT09IG51bGwgJiYgX3N0b3J5JHBhcmFtZXRlcnMgIT09IHZvaWQgMCAmJiAoX3N0b3J5JHBhcmFtZXRlcnMkZG9jID0gX3N0b3J5JHBhcmFtZXRlcnMuZG9jcykgIT09IG51bGwgJiYgX3N0b3J5JHBhcmFtZXRlcnMkZG9jICE9PSB2b2lkIDAgJiYgX3N0b3J5JHBhcmFtZXRlcnMkZG9jLmRpc2FibGUpO1xuICB9KTtcbiAgaWYgKCFpbmNsdWRlUHJpbWFyeSkgc3RvcmllcyA9IHN0b3JpZXMuc2xpY2UoMSk7XG5cbiAgaWYgKCFzdG9yaWVzIHx8IHN0b3JpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRpbmcsIG51bGwsIHRpdGxlKSwgc3Rvcmllcy5tYXAoZnVuY3Rpb24gKHN0b3J5KSB7XG4gICAgcmV0dXJuIHN0b3J5ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERvY3NTdG9yeSwgX2V4dGVuZHMoe1xuICAgICAga2V5OiBzdG9yeS5pZFxuICAgIH0sIHN0b3J5LCB7XG4gICAgICBleHBhbmRlZDogdHJ1ZVxuICAgIH0pKTtcbiAgfSkpO1xufTtcblN0b3JpZXMuZGVmYXVsdFByb3BzID0ge1xuICB0aXRsZTogJ1N0b3JpZXMnXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4vVGl0bGUnO1xuaW1wb3J0IHsgU3VidGl0bGUgfSBmcm9tICcuL1N1YnRpdGxlJztcbmltcG9ydCB7IERlc2NyaXB0aW9uIH0gZnJvbSAnLi9EZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBQcmltYXJ5IH0gZnJvbSAnLi9QcmltYXJ5JztcbmltcG9ydCB7IFBSSU1BUllfU1RPUlkgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IEFyZ3NUYWJsZSB9IGZyb20gJy4vQXJnc1RhYmxlJztcbmltcG9ydCB7IFN0b3JpZXMgfSBmcm9tICcuL1N0b3JpZXMnO1xuZXhwb3J0IHZhciBEb2NzUGFnZSA9IGZ1bmN0aW9uIERvY3NQYWdlKCkge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRpdGxlLCBudWxsKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3VidGl0bGUsIG51bGwpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZXNjcmlwdGlvbiwgbnVsbCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByaW1hcnksIG51bGwpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBcmdzVGFibGUsIHtcbiAgICBzdG9yeTogUFJJTUFSWV9TVE9SWVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3RvcmllcywgbnVsbCkpO1xufTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJlZXplLmpzXCI7XG5cbnZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGdsb2JhbCBmcm9tICdnbG9iYWwnO1xuaW1wb3J0IGRlcHJlY2F0ZSBmcm9tICd1dGlsLWRlcHJlY2F0ZSc7XG5pbXBvcnQgZGVkZW50IGZyb20gJ3RzLWRlZGVudCc7XG5pbXBvcnQgeyBNRFhQcm92aWRlciB9IGZyb20gJ0BtZHgtanMvcmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVQcm92aWRlciwgZW5zdXJlIGFzIGVuc3VyZVRoZW1lIH0gZnJvbSAnQHN0b3J5Ym9vay90aGVtaW5nJztcbmltcG9ydCB7IERvY3NXcmFwcGVyLCBEb2NzQ29udGVudCwgY29tcG9uZW50cyBhcyBodG1sQ29tcG9uZW50cyB9IGZyb20gJ0BzdG9yeWJvb2svY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xuaW1wb3J0IHsgYW5jaG9yQmxvY2tJZEZyb21JZCB9IGZyb20gJy4vQW5jaG9yJztcbmltcG9ydCB7IHN0b3J5QmxvY2tJZEZyb21JZCB9IGZyb20gJy4vU3RvcnknO1xuaW1wb3J0IHsgU291cmNlQ29udGFpbmVyIH0gZnJvbSAnLi9Tb3VyY2VDb250YWluZXInO1xuaW1wb3J0IHsgQ29kZU9yU291cmNlTWR4LCBBbmNob3JNZHgsIEhlYWRlcnNNZHggfSBmcm9tICcuL21keCc7XG5pbXBvcnQgeyBzY3JvbGxUb0VsZW1lbnQgfSBmcm9tICcuL3V0aWxzJztcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudCxcbiAgICBnbG9iYWxXaW5kb3cgPSBnbG9iYWwud2luZG93O1xudmFyIGRlZmF1bHRDb21wb25lbnRzID0gT2JqZWN0LmFzc2lnbih7fSwgaHRtbENvbXBvbmVudHMsIHtcbiAgY29kZTogQ29kZU9yU291cmNlTWR4LFxuICBhOiBBbmNob3JNZHhcbn0sIEhlYWRlcnNNZHgpO1xudmFyIHdhcm5PcHRpb25zVGhlbWUgPSBkZXByZWNhdGUoZnVuY3Rpb24gKCkge30sIGRlZGVudChfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgIERlcHJlY2F0ZWQgcGFyYW1ldGVyOiBvcHRpb25zLnRoZW1lID0+IGRvY3MudGhlbWVcXG5cXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL3N0b3J5Ym9va2pzL3N0b3J5Ym9vay9ibG9iL25leHQvYWRkb25zL2RvY3MvZG9jcy90aGVtaW5nLm1kI3N0b3J5Ym9vay10aGVtaW5nXFxuXCJdKSkpKTtcbmV4cG9ydCB2YXIgRG9jc0NvbnRhaW5lciA9IGZ1bmN0aW9uIERvY3NDb250YWluZXIoX3JlZikge1xuICB2YXIgY29udGV4dCA9IF9yZWYuY29udGV4dCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHN0b3J5SWQgPSBjb250ZXh0LmlkLFxuICAgICAgc3RvcnlCeUlkID0gY29udGV4dC5zdG9yeUJ5SWQ7XG5cbiAgdmFyIF9zdG9yeUJ5SWQgPSBzdG9yeUJ5SWQoc3RvcnlJZCksXG4gICAgICBfc3RvcnlCeUlkJHBhcmFtZXRlcnMgPSBfc3RvcnlCeUlkLnBhcmFtZXRlcnMsXG4gICAgICBfc3RvcnlCeUlkJHBhcmFtZXRlcnMyID0gX3N0b3J5QnlJZCRwYXJhbWV0ZXJzLm9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX3N0b3J5QnlJZCRwYXJhbWV0ZXJzMiA9PT0gdm9pZCAwID8ge30gOiBfc3RvcnlCeUlkJHBhcmFtZXRlcnMyLFxuICAgICAgX3N0b3J5QnlJZCRwYXJhbWV0ZXJzMyA9IF9zdG9yeUJ5SWQkcGFyYW1ldGVycy5kb2NzLFxuICAgICAgZG9jcyA9IF9zdG9yeUJ5SWQkcGFyYW1ldGVyczMgPT09IHZvaWQgMCA/IHt9IDogX3N0b3J5QnlJZCRwYXJhbWV0ZXJzMztcblxuICB2YXIgdGhlbWVWYXJzID0gZG9jcy50aGVtZTtcblxuICBpZiAoIXRoZW1lVmFycyAmJiBvcHRpb25zLnRoZW1lKSB7XG4gICAgd2Fybk9wdGlvbnNUaGVtZSgpO1xuICAgIHRoZW1lVmFycyA9IG9wdGlvbnMudGhlbWU7XG4gIH1cblxuICB2YXIgdGhlbWUgPSBlbnN1cmVUaGVtZSh0aGVtZVZhcnMpO1xuICB2YXIgYWxsQ29tcG9uZW50cyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb21wb25lbnRzLCBkb2NzLmNvbXBvbmVudHMpO1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciB1cmw7XG5cbiAgICB0cnkge1xuICAgICAgdXJsID0gbmV3IFVSTChnbG9iYWxXaW5kb3cucGFyZW50LmxvY2F0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodXJsLmhhc2gpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodXJsLmhhc2guc3Vic3RyaW5nKDEpKTtcblxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgLy8gSW50cm9kdWNpbmcgYSBkZWxheSB0byBlbnN1cmUgc2Nyb2xsaW5nIHdvcmtzIHdoZW4gaXQncyBhIGZ1bGwgcmVmcmVzaC5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2Nyb2xsVG9FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhbmNob3JCbG9ja0lkRnJvbUlkKHN0b3J5SWQpKSB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzdG9yeUJsb2NrSWRGcm9tSWQoc3RvcnlJZCkpO1xuXG4gICAgICBpZiAoX2VsZW1lbnQpIHtcbiAgICAgICAgdmFyIGFsbFN0b3JpZXMgPSBfZWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZHw9XCJhbmNob3ItXCJdJyk7XG5cbiAgICAgICAgdmFyIHNjcm9sbFRhcmdldCA9IF9lbGVtZW50O1xuXG4gICAgICAgIGlmIChhbGxTdG9yaWVzICYmIGFsbFN0b3JpZXNbMF0gPT09IF9lbGVtZW50KSB7XG4gICAgICAgICAgLy8gSW5jbHVkZSBjb250ZW50IGFib3ZlIGZpcnN0IHN0b3J5XG4gICAgICAgICAgc2Nyb2xsVGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RvY3Mtcm9vdCcpO1xuICAgICAgICB9IC8vIEludHJvZHVjaW5nIGEgZGVsYXkgdG8gZW5zdXJlIHNjcm9sbGluZyB3b3JrcyB3aGVuIGl0J3MgYSBmdWxsIHJlZnJlc2guXG5cblxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzY3JvbGxUb0VsZW1lbnQoc2Nyb2xsVGFyZ2V0LCAnc3RhcnQnKTtcbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzdG9yeUlkXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEb2NzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0XG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNvdXJjZUNvbnRhaW5lciwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVQcm92aWRlciwge1xuICAgIHRoZW1lOiB0aGVtZVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNRFhQcm92aWRlciwge1xuICAgIGNvbXBvbmVudHM6IGFsbENvbXBvbmVudHNcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG9jc1dyYXBwZXIsIHtcbiAgICBjbGFzc05hbWU6IFwic2Jkb2NzIHNiZG9jcy13cmFwcGVyXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG9jc0NvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6IFwic2Jkb2NzIHNiZG9jcy1jb250ZW50XCJcbiAgfSwgY2hpbGRyZW4pKSkpKSk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJ2dsb2JhbCc7XG5pbXBvcnQgeyBBbmNob3IgfSBmcm9tICcuL0FuY2hvcic7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuXG5mdW5jdGlvbiBnZXRGaXJzdFN0b3J5SWQoZG9jc0NvbnRleHQpIHtcbiAgdmFyIHN0b3JpZXMgPSBkb2NzQ29udGV4dC5jb21wb25lbnRTdG9yaWVzKCk7XG4gIHJldHVybiBzdG9yaWVzLmxlbmd0aCA+IDAgPyBzdG9yaWVzWzBdLmlkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQW5jaG9yKCkge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgYW5jaG9ySWQgPSBnZXRGaXJzdFN0b3J5SWQoY29udGV4dCkgfHwgY29udGV4dC5pZDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgIHN0b3J5SWQ6IGFuY2hvcklkXG4gIH0pO1xufVxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGRlY2xhcmUgY29tcG9uZW50IG1ldGFkYXRhIGluIGRvY3NcbiAqIGFuZCBnZXRzIHRyYW5zZm9ybWVkIGludG8gYSBkZWZhdWx0IGV4cG9ydCB1bmRlcm5lYXRoIHRoZSBob29kLlxuICovXG5cblxuZXhwb3J0IHZhciBNZXRhID0gZnVuY3Rpb24gTWV0YSgpIHtcbiAgdmFyIHBhcmFtcyA9IG5ldyBVUkwoZG9jdW1lbnQubG9jYXRpb24pLnNlYXJjaFBhcmFtcztcbiAgdmFyIGlzRG9jcyA9IHBhcmFtcy5nZXQoJ3ZpZXdNb2RlJykgPT09ICdkb2NzJztcbiAgcmV0dXJuIGlzRG9jcyA/IHJlbmRlckFuY2hvcigpIDogbnVsbDtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmZyZWV6ZS5qc1wiO1xuXG52YXIgX3RlbXBsYXRlT2JqZWN0O1xuXG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKHN0cmluZ3MsIHJhdykgeyBpZiAoIXJhdykgeyByYXcgPSBzdHJpbmdzLnNsaWNlKDApOyB9IHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdykgfSB9KSk7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZXByZWNhdGUgZnJvbSAndXRpbC1kZXByZWNhdGUnO1xuaW1wb3J0IGRlZGVudCBmcm9tICd0cy1kZWRlbnQnO1xuaW1wb3J0IHsgQ2FudmFzIH0gZnJvbSAnLi9DYW52YXMnO1xuZXhwb3J0IHZhciBQcmV2aWV3ID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FudmFzLCBwcm9wcyk7XG59LCBkZWRlbnQoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICBQcmV2aWV3IGRvYyBibG9jayBoYXMgYmVlbiByZW5hbWVkIHRvIENhbnZhcy5cXG5cXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL3N0b3J5Ym9va2pzL3N0b3J5Ym9vay9ibG9iL25leHQvTUlHUkFUSU9OLm1kI3ByZXZpZXdwcm9wcy1yZW5hbWVkXFxuICBcIl0pKSkpOyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5mcmVlemUuanNcIjtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVwcmVjYXRlIGZyb20gJ3V0aWwtZGVwcmVjYXRlJztcbmltcG9ydCBkZWRlbnQgZnJvbSAndHMtZGVkZW50JztcbmltcG9ydCB7IEFyZ3NUYWJsZSB9IGZyb20gJy4vQXJnc1RhYmxlJztcbmltcG9ydCB7IENVUlJFTlRfU0VMRUNUSU9OIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgdmFyIFByb3BzID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQXJnc1RhYmxlLCBwcm9wcyk7XG59LCBkZWRlbnQoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICBQcm9wcyBkb2MgYmxvY2sgaGFzIGJlZW4gcmVuYW1lZCB0byBBcmdzVGFibGUuXFxuXFxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zdG9yeWJvb2tqcy9zdG9yeWJvb2svYmxvYi9uZXh0L01JR1JBVElPTi5tZCNwcmV2aWV3cHJvcHMtcmVuYW1lZFxcbiAgXCJdKSkpKTsgLy8gQHRzLWlnbm9yZVxuXG5Qcm9wcy5kZWZhdWx0UHJvcHMgPSB7XG4gIG9mOiBDVVJSRU5UX1NFTEVDVElPTlxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBXcmFwcGVyID0gZnVuY3Rpb24gV3JhcHBlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJ1xuICAgIH1cbiAgfSwgY2hpbGRyZW4pO1xufTsiLCJleHBvcnQgeyBDb2xvclBhbGV0dGUsIENvbG9ySXRlbSwgSWNvbkdhbGxlcnksIEljb25JdGVtLCBUeXBlc2V0IH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQW5jaG9yJztcbmV4cG9ydCAqIGZyb20gJy4vQXJnc1RhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vQ2FudmFzJztcbmV4cG9ydCAqIGZyb20gJy4vRGVzY3JpcHRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL0RvY3NQYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vRG9jc0NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL0RvY3NTdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0hlYWRpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9NZXRhJztcbmV4cG9ydCAqIGZyb20gJy4vUHJldmlldyc7XG5leHBvcnQgKiBmcm9tICcuL1ByaW1hcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Qcm9wcyc7XG5leHBvcnQgKiBmcm9tICcuL1NvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1NvdXJjZUNvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL1N0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1N1YmhlYWRpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9TdWJ0aXRsZSc7XG5leHBvcnQgKiBmcm9tICcuL1RpdGxlJztcbmV4cG9ydCAqIGZyb20gJy4vV3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbWR4JzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/index.js\n')},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/convert.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return convert; });\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/core-js/modules/es.function.name.js\");\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/core-js/modules/es.string.replace.js\");\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/core-js/modules/es.regexp.exec.js\");\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\"../../node_modules/core-js/modules/es.object.assign.js\");\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\"../../node_modules/core-js/modules/es.array.map.js\");\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\n/* eslint-disable no-case-declarations */\nvar isLiteral = function isLiteral(type) {\n return type.name === 'literal';\n};\n\nvar toEnumOption = function toEnumOption(element) {\n return element.value.replace(/['|\"]/g, '');\n};\n\nvar convertSig = function convertSig(type) {\n switch (type.type) {\n case 'function':\n return {\n name: 'function'\n };\n\n case 'object':\n var values = {};\n type.signature.properties.forEach(function (prop) {\n values[prop.key] = convert(prop.value);\n });\n return {\n name: 'object',\n value: values\n };\n\n default:\n throw new Error(\"Unknown: \".concat(type));\n }\n};\n\nvar convert = function convert(type) {\n var name = type.name,\n raw = type.raw;\n var base = {};\n if (typeof raw !== 'undefined') base.raw = raw;\n\n switch (type.name) {\n case 'literal':\n return Object.assign({}, base, {\n name: 'other',\n value: type.value\n });\n\n case 'string':\n case 'number':\n case 'symbol':\n case 'boolean':\n {\n return Object.assign({}, base, {\n name: name\n });\n }\n\n case 'Array':\n {\n return Object.assign({}, base, {\n name: 'array',\n value: type.elements.map(convert)\n });\n }\n\n case 'signature':\n return Object.assign({}, base, convertSig(type));\n\n case 'union':\n if (type.elements.every(isLiteral)) {\n return Object.assign({}, base, {\n name: 'enum',\n value: type.elements.map(toEnumOption)\n });\n }\n\n return Object.assign({}, base, {\n name: name,\n value: type.elements.map(convert)\n });\n\n case 'intersection':\n return Object.assign({}, base, {\n name: name,\n value: type.elements.map(convert)\n });\n\n default:\n return Object.assign({}, base, {\n name: 'other',\n value: name\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvZmxvdy9jb252ZXJ0LmpzP2NjN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkM7QUFDQztBQUNIO0FBQ2M7QUFDWjtBQUNKOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvY29udmVydC9mbG93L2NvbnZlcnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xudmFyIGlzTGl0ZXJhbCA9IGZ1bmN0aW9uIGlzTGl0ZXJhbCh0eXBlKSB7XG4gIHJldHVybiB0eXBlLm5hbWUgPT09ICdsaXRlcmFsJztcbn07XG5cbnZhciB0b0VudW1PcHRpb24gPSBmdW5jdGlvbiB0b0VudW1PcHRpb24oZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC52YWx1ZS5yZXBsYWNlKC9bJ3xcIl0vZywgJycpO1xufTtcblxudmFyIGNvbnZlcnRTaWcgPSBmdW5jdGlvbiBjb252ZXJ0U2lnKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlLnR5cGUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnZnVuY3Rpb24nXG4gICAgICB9O1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICAgIHR5cGUuc2lnbmF0dXJlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICB2YWx1ZXNbcHJvcC5rZXldID0gY29udmVydChwcm9wLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ29iamVjdCcsXG4gICAgICAgIHZhbHVlOiB2YWx1ZXNcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93bjogXCIuY29uY2F0KHR5cGUpKTtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBjb252ZXJ0ID0gZnVuY3Rpb24gY29udmVydCh0eXBlKSB7XG4gIHZhciBuYW1lID0gdHlwZS5uYW1lLFxuICAgICAgcmF3ID0gdHlwZS5yYXc7XG4gIHZhciBiYXNlID0ge307XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAndW5kZWZpbmVkJykgYmFzZS5yYXcgPSByYXc7XG5cbiAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICBjYXNlICdsaXRlcmFsJzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6ICdvdGhlcicsXG4gICAgICAgIHZhbHVlOiB0eXBlLnZhbHVlXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzeW1ib2wnOlxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdBcnJheSc6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgICAgbmFtZTogJ2FycmF5JyxcbiAgICAgICAgICB2YWx1ZTogdHlwZS5lbGVtZW50cy5tYXAoY29udmVydClcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdzaWduYXR1cmUnOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIGNvbnZlcnRTaWcodHlwZSkpO1xuXG4gICAgY2FzZSAndW5pb24nOlxuICAgICAgaWYgKHR5cGUuZWxlbWVudHMuZXZlcnkoaXNMaXRlcmFsKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICAgIG5hbWU6ICdlbnVtJyxcbiAgICAgICAgICB2YWx1ZTogdHlwZS5lbGVtZW50cy5tYXAodG9FbnVtT3B0aW9uKVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHR5cGUuZWxlbWVudHMubWFwKGNvbnZlcnQpXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2ludGVyc2VjdGlvbic6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdHlwZS5lbGVtZW50cy5tYXAoY29udmVydClcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6ICdvdGhlcicsXG4gICAgICAgIHZhbHVlOiBuYW1lXG4gICAgICB9KTtcbiAgfVxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/convert.js\n")},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/convert.js");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convert", function() { return _convert__WEBPACK_IMPORTED_MODULE_0__["a"]; });\n\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/types.js");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_1__);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvZmxvdy9pbmRleC5qcz84MTA1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMEIiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvY29udmVydC9mbG93L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb252ZXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/index.js\n')},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/types.js":function(module,exports){eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L2Zsb3cvdHlwZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/types.js\n")},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/convert.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, \"a\", function() { return /* binding */ convert_convert; });\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__(\"../../node_modules/core-js/modules/es.function.name.js\");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__(\"../../node_modules/core-js/modules/es.array.map.js\");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.object.assign.js\nvar es_object_assign = __webpack_require__(\"../../node_modules/core-js/modules/es.object.assign.js\");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.split.js\nvar es_string_split = __webpack_require__(\"../../node_modules/core-js/modules/es.string.split.js\");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__(\"../../node_modules/core-js/modules/es.regexp.exec.js\");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__(\"../../node_modules/core-js/modules/es.array.concat.js\");\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/lodash/mapValues.js\nvar mapValues = __webpack_require__(\"../../node_modules/lodash/mapValues.js\");\nvar mapValues_default = /*#__PURE__*/__webpack_require__.n(mapValues);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_main/node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__(\"../../node_modules/core-js/modules/es.string.replace.js\");\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/convert/utils.js\n\n\nvar QUOTE_REGEX = /^['\"]|['\"]$/g;\nvar trimQuotes = function trimQuotes(str) {\n return str.replace(QUOTE_REGEX, '');\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_main/node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/convert.js\n\n\n\n\n\n\n\n/* eslint-disable no-case-declarations */\n\n\nvar SIGNATURE_REGEXP = /^\\(.*\\) => /;\nvar convert_convert = function convert(type) {\n var name = type.name,\n raw = type.raw,\n computed = type.computed,\n value = type.value;\n var base = {};\n if (typeof raw !== 'undefined') base.raw = raw;\n\n switch (name) {\n case 'enum':\n {\n var _values = computed ? value : value.map(function (v) {\n return trimQuotes(v.value);\n });\n\n return Object.assign({}, base, {\n name: name,\n value: _values\n });\n }\n\n case 'string':\n case 'number':\n case 'symbol':\n return Object.assign({}, base, {\n name: name\n });\n\n case 'func':\n return Object.assign({}, base, {\n name: 'function'\n });\n\n case 'bool':\n case 'boolean':\n return Object.assign({}, base, {\n name: 'boolean'\n });\n\n case 'arrayOf':\n case 'array':\n return Object.assign({}, base, {\n name: 'array',\n value: value && convert(value)\n });\n\n case 'object':\n return Object.assign({}, base, {\n name: name\n });\n\n case 'objectOf':\n return Object.assign({}, base, {\n name: name,\n value: convert(value)\n });\n\n case 'shape':\n case 'exact':\n var values = mapValues_default()(value, function (field) {\n return convert(field);\n });\n return Object.assign({}, base, {\n name: 'object',\n value: values\n });\n\n case 'union':\n return Object.assign({}, base, {\n name: 'union',\n value: value.map(function (v) {\n return convert(v);\n })\n });\n\n case 'instanceOf':\n case 'element':\n case 'elementType':\n default:\n {\n if ((name === null || name === void 0 ? void 0 : name.indexOf('|')) > 0) {\n // react-docgen-typescript-plugin doesn't always produce enum-like unions\n // (like if a user has turned off shouldExtractValuesFromUnion) so here we\n // try to recover and construct one.\n try {\n var literalValues = name.split('|').map(function (v) {\n return JSON.parse(v);\n });\n return Object.assign({}, base, {\n name: 'enum',\n value: literalValues\n });\n } catch (err) {// fall through\n }\n }\n\n var otherVal = value ? \"\".concat(name, \"(\").concat(value, \")\") : name;\n var otherName = SIGNATURE_REGEXP.test(name) ? 'function' : 'other';\n return Object.assign({}, base, {\n name: otherName,\n value: otherVal\n });\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvdXRpbHMuanM/OTcwMCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvcHJvcHR5cGVzL2NvbnZlcnQuanM/MDMyOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOEM7QUFDSDtBQUMzQztBQUNPO0FBQ1A7QUFDQSxFOztBQ0w2QztBQUNKO0FBQ0k7QUFDRDtBQUNEO0FBQ0M7O0FBRTVDO0FBQ3lDO0FBQ0g7QUFDdEM7QUFDTyxJQUFJLGVBQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFVBQVU7QUFDM0IsU0FBUzs7QUFFVCwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSxPQUFPOztBQUVQO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFTO0FBQzVCO0FBQ0EsT0FBTztBQUNQLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3Byb3B0eXBlcy9jb252ZXJ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbnZhciBRVU9URV9SRUdFWCA9IC9eWydcIl18WydcIl0kL2c7XG5leHBvcnQgdmFyIHRyaW1RdW90ZXMgPSBmdW5jdGlvbiB0cmltUXVvdGVzKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoUVVPVEVfUkVHRVgsICcnKTtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanNcIjtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbmltcG9ydCBtYXBWYWx1ZXMgZnJvbSAnbG9kYXNoL21hcFZhbHVlcyc7XG5pbXBvcnQgeyB0cmltUXVvdGVzIH0gZnJvbSAnLi4vdXRpbHMnO1xudmFyIFNJR05BVFVSRV9SRUdFWFAgPSAvXlxcKC4qXFwpID0+IC87XG5leHBvcnQgdmFyIGNvbnZlcnQgPSBmdW5jdGlvbiBjb252ZXJ0KHR5cGUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlLm5hbWUsXG4gICAgICByYXcgPSB0eXBlLnJhdyxcbiAgICAgIGNvbXB1dGVkID0gdHlwZS5jb21wdXRlZCxcbiAgICAgIHZhbHVlID0gdHlwZS52YWx1ZTtcbiAgdmFyIGJhc2UgPSB7fTtcbiAgaWYgKHR5cGVvZiByYXcgIT09ICd1bmRlZmluZWQnKSBiYXNlLnJhdyA9IHJhdztcblxuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlICdlbnVtJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF92YWx1ZXMgPSBjb21wdXRlZCA/IHZhbHVlIDogdmFsdWUubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIHRyaW1RdW90ZXModi52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICB2YWx1ZTogX3ZhbHVlc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdmdW5jJzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6ICdmdW5jdGlvbidcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnYm9vbCc6XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiAnYm9vbGVhbidcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnYXJyYXlPZic6XG4gICAgY2FzZSAnYXJyYXknOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogJ2FycmF5JyxcbiAgICAgICAgdmFsdWU6IHZhbHVlICYmIGNvbnZlcnQodmFsdWUpXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiBuYW1lXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ29iamVjdE9mJzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdzaGFwZSc6XG4gICAgY2FzZSAnZXhhY3QnOlxuICAgICAgdmFyIHZhbHVlcyA9IG1hcFZhbHVlcyh2YWx1ZSwgZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0KGZpZWxkKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogJ29iamVjdCcsXG4gICAgICAgIHZhbHVlOiB2YWx1ZXNcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAndW5pb24nOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogJ3VuaW9uJyxcbiAgICAgICAgdmFsdWU6IHZhbHVlLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiBjb252ZXJ0KHYpO1xuICAgICAgICB9KVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdpbnN0YW5jZU9mJzpcbiAgICBjYXNlICdlbGVtZW50JzpcbiAgICBjYXNlICdlbGVtZW50VHlwZSc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAgaWYgKChuYW1lID09PSBudWxsIHx8IG5hbWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hbWUuaW5kZXhPZignfCcpKSA+IDApIHtcbiAgICAgICAgICAvLyByZWFjdC1kb2NnZW4tdHlwZXNjcmlwdC1wbHVnaW4gZG9lc24ndCBhbHdheXMgcHJvZHVjZSBlbnVtLWxpa2UgdW5pb25zXG4gICAgICAgICAgLy8gKGxpa2UgaWYgYSB1c2VyIGhhcyB0dXJuZWQgb2ZmIHNob3VsZEV4dHJhY3RWYWx1ZXNGcm9tVW5pb24pIHNvIGhlcmUgd2VcbiAgICAgICAgICAvLyB0cnkgdG8gcmVjb3ZlciBhbmQgY29uc3RydWN0IG9uZS5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGxpdGVyYWxWYWx1ZXMgPSBuYW1lLnNwbGl0KCd8JykubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICAgICAgICBuYW1lOiAnZW51bScsXG4gICAgICAgICAgICAgIHZhbHVlOiBsaXRlcmFsVmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsvLyBmYWxsIHRocm91Z2hcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3RoZXJWYWwgPSB2YWx1ZSA/IFwiXCIuY29uY2F0KG5hbWUsIFwiKFwiKS5jb25jYXQodmFsdWUsIFwiKVwiKSA6IG5hbWU7XG4gICAgICAgIHZhciBvdGhlck5hbWUgPSBTSUdOQVRVUkVfUkVHRVhQLnRlc3QobmFtZSkgPyAnZnVuY3Rpb24nIDogJ290aGVyJztcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgICBuYW1lOiBvdGhlck5hbWUsXG4gICAgICAgICAgdmFsdWU6IG90aGVyVmFsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICB9XG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/convert.js\n")},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/convert.js");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convert", function() { return _convert__WEBPACK_IMPORTED_MODULE_0__["a"]; });\n\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/types.js");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_1__);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvcHJvcHR5cGVzL2luZGV4LmpzP2E0MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUEwQiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3Byb3B0eXBlcy9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udmVydCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/index.js\n')},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/types.js":function(module,exports){eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3Byb3B0eXBlcy90eXBlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/types.js\n")},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/convert.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return convert; });\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/core-js/modules/es.function.name.js\");\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/core-js/modules/es.object.assign.js\");\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/core-js/modules/es.array.map.js\");\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_3__);\n\n\n\n\n\n/* eslint-disable no-case-declarations */\nvar convertSig = function convertSig(type) {\n switch (type.type) {\n case 'function':\n return {\n name: 'function'\n };\n\n case 'object':\n var values = {};\n type.signature.properties.forEach(function (prop) {\n values[prop.key] = convert(prop.value);\n });\n return {\n name: 'object',\n value: values\n };\n\n default:\n throw new Error(\"Unknown: \".concat(type));\n }\n};\n\nvar convert = function convert(type) {\n var name = type.name,\n raw = type.raw;\n var base = {};\n if (typeof raw !== 'undefined') base.raw = raw;\n\n switch (type.name) {\n case 'string':\n case 'number':\n case 'symbol':\n case 'boolean':\n {\n return Object.assign({}, base, {\n name: name\n });\n }\n\n case 'Array':\n {\n return Object.assign({}, base, {\n name: 'array',\n value: type.elements.map(convert)\n });\n }\n\n case 'signature':\n return Object.assign({}, base, convertSig(type));\n\n case 'union':\n case 'intersection':\n return Object.assign({}, base, {\n name: name,\n value: type.elements.map(convert)\n });\n\n default:\n return Object.assign({}, base, {\n name: 'other',\n value: name\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvdHlwZXNjcmlwdC9jb252ZXJ0LmpzPzA1NGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXlEO0FBQ1o7QUFDQTtBQUNKOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvdHlwZXNjcmlwdC9jb252ZXJ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xudmFyIGNvbnZlcnRTaWcgPSBmdW5jdGlvbiBjb252ZXJ0U2lnKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlLnR5cGUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnZnVuY3Rpb24nXG4gICAgICB9O1xuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICAgIHR5cGUuc2lnbmF0dXJlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICB2YWx1ZXNbcHJvcC5rZXldID0gY29udmVydChwcm9wLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ29iamVjdCcsXG4gICAgICAgIHZhbHVlOiB2YWx1ZXNcbiAgICAgIH07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93bjogXCIuY29uY2F0KHR5cGUpKTtcbiAgfVxufTtcblxuZXhwb3J0IHZhciBjb252ZXJ0ID0gZnVuY3Rpb24gY29udmVydCh0eXBlKSB7XG4gIHZhciBuYW1lID0gdHlwZS5uYW1lLFxuICAgICAgcmF3ID0gdHlwZS5yYXc7XG4gIHZhciBiYXNlID0ge307XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAndW5kZWZpbmVkJykgYmFzZS5yYXcgPSByYXc7XG5cbiAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnQXJyYXknOlxuICAgICAge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICAgIG5hbWU6ICdhcnJheScsXG4gICAgICAgICAgdmFsdWU6IHR5cGUuZWxlbWVudHMubWFwKGNvbnZlcnQpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgY2FzZSAnc2lnbmF0dXJlJzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCBjb252ZXJ0U2lnKHR5cGUpKTtcblxuICAgIGNhc2UgJ3VuaW9uJzpcbiAgICBjYXNlICdpbnRlcnNlY3Rpb24nOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IHR5cGUuZWxlbWVudHMubWFwKGNvbnZlcnQpXG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiAnb3RoZXInLFxuICAgICAgICB2YWx1ZTogbmFtZVxuICAgICAgfSk7XG4gIH1cbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/convert.js\n")},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/convert.js");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "convert", function() { return _convert__WEBPACK_IMPORTED_MODULE_0__["a"]; });\n\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/types.js");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_1__);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvdHlwZXNjcmlwdC9pbmRleC5qcz9lYWM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMEIiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvY29udmVydC90eXBlc2NyaXB0L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb252ZXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/index.js\n')},"../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/types.js":function(module,exports){eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3R5cGVzY3JpcHQvdHlwZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/types.js\n")},"../../node_modules/@storybook/channel-postmessage/dist/esm/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* unused harmony export KEY */\n/* unused harmony export PostmsgTransport */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return createChannel; });\n/* harmony import */ var core_js_modules_es_object_from_entries_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/core-js/modules/es.object.from-entries.js");\n/* harmony import */ var core_js_modules_es_object_from_entries_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_from_entries_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../../node_modules/core-js/modules/es.array.iterator.js");\n/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../../node_modules/core-js/modules/es.array.filter.js");\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../../node_modules/core-js/modules/es.object.entries.js");\n/* harmony import */ var core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_entries_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../../node_modules/core-js/modules/es.object.assign.js");\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../../node_modules/core-js/modules/es.number.is-integer.js");\n/* harmony import */ var core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../../node_modules/core-js/modules/es.number.constructor.js");\n/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../../node_modules/core-js/modules/es.string.search.js");\n/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("../../node_modules/core-js/modules/es.regexp.exec.js");\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("../../node_modules/core-js/modules/es.promise.js");\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__("../../node_modules/core-js/modules/es.object.to-string.js");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__("../../node_modules/core-js/modules/web.dom-collections.for-each.js");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__("../../node_modules/core-js/modules/es.array.map.js");\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__("../../node_modules/core-js/modules/es.array.includes.js");\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__("../../node_modules/core-js/modules/es.string.includes.js");\n/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__("../../node_modules/core-js/modules/es.object.values.js");\n/* harmony import */ var core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__("../../node_modules/core-js/modules/es.array.concat.js");\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__("../../node_modules/core-js/modules/web.url.js");\n/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_17__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__("../../node_modules/core-js/modules/es.string.iterator.js");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__("../../node_modules/core-js/modules/web.dom-collections.iterator.js");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__("../../node_modules/core-js/modules/es.array.slice.js");\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_20__);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__("../../node_modules/core-js/modules/es.symbol.js");\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_21__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__("../../node_modules/core-js/modules/es.symbol.description.js");\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_22__);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__("../../node_modules/core-js/modules/es.symbol.iterator.js");\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_23__);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__("../../node_modules/core-js/modules/es.function.name.js");\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_24__);\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__("../../node_modules/core-js/modules/es.array.from.js");\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_25__);\n/* harmony import */ var global__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__("../../node_modules/global/window.js");\n/* harmony import */ var global__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(global__WEBPACK_IMPORTED_MODULE_26__);\n/* harmony import */ var _storybook_core_events__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__("../../node_modules/@storybook/core-events/dist/esm/index.js");\n/* harmony import */ var _storybook_channels__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__("../../node_modules/@storybook/channels/dist/esm/index.js");\n/* harmony import */ var _storybook_client_logger__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__("../../node_modules/@storybook/client-logger/dist/esm/index.js");\n/* harmony import */ var telejson__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__("../../node_modules/telejson/dist/esm/index.js");\n/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__("../../node_modules/qs/lib/index.js");\n/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(qs__WEBPACK_IMPORTED_MODULE_31__);\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { 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\nfunction _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { 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\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\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\nvar globalWindow = global__WEBPACK_IMPORTED_MODULE_26___default.a.window,\n document = global__WEBPACK_IMPORTED_MODULE_26___default.a.document,\n location = global__WEBPACK_IMPORTED_MODULE_26___default.a.location;\nvar KEY = \'storybook-channel\';\nvar defaultEventOptions = {\n allowFunction: true,\n maxDepth: 25\n}; // TODO: we should export a method for opening child windows here and keep track of em.\n// that way we can send postMessage to child windows as well, not just iframe\n// https://stackoverflow.com/questions/6340160/how-to-get-the-references-of-all-already-opened-child-windows\n\nvar PostmsgTransport = /*#__PURE__*/function () {\n function PostmsgTransport(config) {\n _classCallCheck(this, PostmsgTransport);\n\n this.config = config;\n this.buffer = void 0;\n this.handler = void 0;\n this.connected = void 0;\n this.buffer = [];\n this.handler = null;\n globalWindow.addEventListener(\'message\', this.handleEvent.bind(this), false); // Check whether the config.page parameter has a valid value\n\n if (config.page !== \'manager\' && config.page !== \'preview\') {\n throw new Error("postmsg-channel: \\"config.page\\" cannot be \\"".concat(config.page, "\\""));\n }\n }\n\n _createClass(PostmsgTransport, [{\n key: "setHandler",\n value: function setHandler(handler) {\n var _this = this;\n\n this.handler = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(_this, args);\n\n if (!_this.connected && _this.getLocalFrame().length) {\n _this.flush();\n\n _this.connected = true;\n }\n };\n }\n /**\n * Sends `event` to the associated window. If the window does not yet exist\n * the event will be stored in a buffer and sent when the window exists.\n * @param event\n */\n\n }, {\n key: "send",\n value: function send(event, options) {\n var _this2 = this;\n\n var _ref = options || {},\n target = _ref.target,\n allowRegExp = _ref.allowRegExp,\n allowFunction = _ref.allowFunction,\n allowSymbol = _ref.allowSymbol,\n allowDate = _ref.allowDate,\n allowUndefined = _ref.allowUndefined,\n allowClass = _ref.allowClass,\n maxDepth = _ref.maxDepth,\n space = _ref.space,\n lazyEval = _ref.lazyEval;\n\n var eventOptions = Object.fromEntries(Object.entries({\n allowRegExp: allowRegExp,\n allowFunction: allowFunction,\n allowSymbol: allowSymbol,\n allowDate: allowDate,\n allowUndefined: allowUndefined,\n allowClass: allowClass,\n maxDepth: maxDepth,\n space: space,\n lazyEval: lazyEval\n }).filter(function (_ref2) {\n var _ref3 = _slicedToArray(_ref2, 2),\n k = _ref3[0],\n v = _ref3[1];\n\n return typeof v !== \'undefined\';\n }));\n var stringifyOptions = Object.assign({}, defaultEventOptions, global__WEBPACK_IMPORTED_MODULE_26___default.a.CHANNEL_OPTIONS || {}, eventOptions); // backwards compat: convert depth to maxDepth\n\n if (options && Number.isInteger(options.depth)) {\n stringifyOptions.maxDepth = options.depth;\n }\n\n var frames = this.getFrames(target);\n var query = qs__WEBPACK_IMPORTED_MODULE_31___default.a.parse(location.search, {\n ignoreQueryPrefix: true\n });\n var data = Object(telejson__WEBPACK_IMPORTED_MODULE_30__[/* stringify */ "c"])({\n key: KEY,\n event: event,\n refId: query.refId\n }, stringifyOptions);\n\n if (!frames.length) {\n return new Promise(function (resolve, reject) {\n _this2.buffer.push({\n event: event,\n resolve: resolve,\n reject: reject\n });\n });\n }\n\n if (this.buffer.length) {\n this.flush();\n }\n\n frames.forEach(function (f) {\n try {\n f.postMessage(data, \'*\');\n } catch (e) {\n console.error(\'sending over postmessage fail\');\n }\n });\n return Promise.resolve(null);\n }\n }, {\n key: "flush",\n value: function flush() {\n var _this3 = this;\n\n var buffer = this.buffer;\n this.buffer = [];\n buffer.forEach(function (item) {\n _this3.send(item.event).then(item.resolve).catch(item.reject);\n });\n }\n }, {\n key: "getFrames",\n value: function getFrames(target) {\n if (this.config.page === \'manager\') {\n var nodes = _toConsumableArray(document.querySelectorAll(\'iframe[data-is-storybook][data-is-loaded]\'));\n\n var list = nodes.filter(function (e) {\n try {\n return !!e.contentWindow && e.dataset.isStorybook !== undefined && e.id === target;\n } catch (er) {\n return false;\n }\n }).map(function (e) {\n return e.contentWindow;\n });\n return list.length ? list : this.getCurrentFrames();\n }\n\n if (globalWindow && globalWindow.parent && globalWindow.parent !== globalWindow) {\n return [globalWindow.parent];\n }\n\n return [];\n }\n }, {\n key: "getCurrentFrames",\n value: function getCurrentFrames() {\n if (this.config.page === \'manager\') {\n var list = _toConsumableArray(document.querySelectorAll(\'[data-is-storybook="true"]\'));\n\n return list.map(function (e) {\n return e.contentWindow;\n });\n }\n\n if (globalWindow && globalWindow.parent) {\n return [globalWindow.parent];\n }\n\n return [];\n }\n }, {\n key: "getLocalFrame",\n value: function getLocalFrame() {\n if (this.config.page === \'manager\') {\n var list = _toConsumableArray(document.querySelectorAll(\'#storybook-preview-iframe\'));\n\n return list.map(function (e) {\n return e.contentWindow;\n });\n }\n\n if (globalWindow && globalWindow.parent) {\n return [globalWindow.parent];\n }\n\n return [];\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(rawEvent) {\n try {\n var data = rawEvent.data;\n\n var _ref4 = typeof data === \'string\' && Object(telejson__WEBPACK_IMPORTED_MODULE_30__[/* isJSON */ "a"])(data) ? Object(telejson__WEBPACK_IMPORTED_MODULE_30__[/* parse */ "b"])(data) : data,\n key = _ref4.key,\n event = _ref4.event,\n refId = _ref4.refId;\n\n if (key === KEY) {\n var pageString = this.config.page === \'manager\' ? "<span style=\\"color: #37D5D3; background: black\\"> manager </span>" : "<span style=\\"color: #1EA7FD; background: black\\"> preview </span>";\n var eventString = Object.values(_storybook_core_events__WEBPACK_IMPORTED_MODULE_27__).includes(event.type) ? "<span style=\\"color: #FF4785\\">".concat(event.type, "</span>") : "<span style=\\"color: #FFAE00\\">".concat(event.type, "</span>");\n\n if (refId) {\n event.refId = refId;\n }\n\n event.source = this.config.page === \'preview\' ? rawEvent.origin : getEventSourceUrl(rawEvent);\n\n if (!event.source) {\n _storybook_client_logger__WEBPACK_IMPORTED_MODULE_29__[/* pretty */ "c"].error("".concat(pageString, " received ").concat(eventString, " but was unable to determine the source of the event"));\n return;\n }\n\n var message = "".concat(pageString, " received ").concat(eventString, " (").concat(data.length, ")");\n _storybook_client_logger__WEBPACK_IMPORTED_MODULE_29__[/* pretty */ "c"].debug.apply(_storybook_client_logger__WEBPACK_IMPORTED_MODULE_29__[/* pretty */ "c"], [location.origin !== event.source ? message : "".concat(message, " <span style=\\"color: gray\\">(on ").concat(location.origin, " from ").concat(event.source, ")</span>")].concat(_toConsumableArray(event.args)));\n this.handler(event);\n }\n } catch (error) {\n _storybook_client_logger__WEBPACK_IMPORTED_MODULE_29__[/* logger */ "a"].error(error);\n }\n }\n }]);\n\n return PostmsgTransport;\n}();\n\nvar getEventSourceUrl = function getEventSourceUrl(event) {\n var frames = _toConsumableArray(document.querySelectorAll(\'iframe[data-is-storybook]\')); // try to find the originating iframe by matching it\'s contentWindow\n // This might not be cross-origin safe\n\n\n var _frames$filter = frames.filter(function (element) {\n try {\n return element.contentWindow === event.source;\n } catch (err) {// continue\n }\n\n var src = element.getAttribute(\'src\');\n var origin;\n\n try {\n var _URL = new URL(src, document.location);\n\n origin = _URL.origin;\n } catch (err) {\n return false;\n }\n\n return origin === event.origin;\n }),\n _frames$filter2 = _toArray(_frames$filter),\n frame = _frames$filter2[0],\n remainder = _frames$filter2.slice(1);\n\n if (frame && remainder.length === 0) {\n var src = frame.getAttribute(\'src\');\n\n var _URL2 = new URL(src, document.location),\n protocol = _URL2.protocol,\n host = _URL2.host,\n pathname = _URL2.pathname;\n\n return "".concat(protocol, "//").concat(host).concat(pathname);\n }\n\n if (remainder.length > 0) {\n // If we found multiple matches, there\'s going to be trouble\n _storybook_client_logger__WEBPACK_IMPORTED_MODULE_29__[/* logger */ "a"].error(\'found multiple candidates for event source\');\n } // If we found no frames of matches\n\n\n return null;\n};\n/**\n * Creates a channel which communicates with an iframe or child window.\n */\n\n\nfunction createChannel(_ref5) {\n var page = _ref5.page;\n var transport = new PostmsgTransport({\n page: page\n });\n return new _storybook_channels__WEBPACK_IMPORTED_MODULE_28__[/* default */ "a"]({\n transport: transport\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2NoYW5uZWwtcG9zdG1lc3NhZ2UvZGlzdC9lc20vaW5kZXguanM/ZWYyYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx3QkFBd0IsZ0hBQWdIOztBQUV4SSxrQ0FBa0MscUhBQXFIOztBQUV2SiwrQkFBK0IsNkpBQTZKOztBQUU1TCxpQ0FBaUMsK0ZBQStGOztBQUVoSSxrQ0FBa0MsdURBQXVEOztBQUV6RixpQ0FBaUMsMkhBQTJIOztBQUU1Siw2QkFBNkIsa0tBQWtLOztBQUUvTCxpREFBaUQsZ0JBQWdCLGdFQUFnRSx3REFBd0QsNkRBQTZELHNEQUFzRCxrSEFBa0g7O0FBRTlaLHNDQUFzQyx1REFBdUQsdUNBQXVDLFNBQVMsT0FBTyxrQkFBa0IsRUFBRSxhQUFhOztBQUVyTCx3Q0FBd0MsZ0ZBQWdGLGVBQWUsZUFBZSxnQkFBZ0Isb0JBQW9CLE1BQU0sMENBQTBDLCtCQUErQixhQUFhLHFCQUFxQixtQ0FBbUMsRUFBRSxFQUFFLGNBQWMsV0FBVyxVQUFVLEVBQUUsVUFBVSxNQUFNLGlEQUFpRCxFQUFFLFVBQVUsa0JBQWtCLEVBQUUsRUFBRSxh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RUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHdFQUFNO0FBQ1YsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR2U7QUFDZjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsYUFBYSxvRUFBTztBQUNwQjtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jaGFubmVsLXBvc3RtZXNzYWdlL2Rpc3QvZXNtL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3RvQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcInVuZGVmaW5lZFwiIHx8ICEoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChhcnIpKSkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJvbS1lbnRyaWVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZW50cmllcy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtaW50ZWdlci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnZhbHVlcy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qc1wiO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmltcG9ydCBnbG9iYWwgZnJvbSAnZ2xvYmFsJztcbmltcG9ydCAqIGFzIEVWRU5UUyBmcm9tICdAc3Rvcnlib29rL2NvcmUtZXZlbnRzJztcbmltcG9ydCBDaGFubmVsIGZyb20gJ0BzdG9yeWJvb2svY2hhbm5lbHMnO1xuaW1wb3J0IHsgbG9nZ2VyLCBwcmV0dHkgfSBmcm9tICdAc3Rvcnlib29rL2NsaWVudC1sb2dnZXInO1xuaW1wb3J0IHsgaXNKU09OLCBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAndGVsZWpzb24nO1xuaW1wb3J0IHFzIGZyb20gJ3FzJztcbnZhciBnbG9iYWxXaW5kb3cgPSBnbG9iYWwud2luZG93LFxuICAgIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50LFxuICAgIGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xuZXhwb3J0IHZhciBLRVkgPSAnc3Rvcnlib29rLWNoYW5uZWwnO1xudmFyIGRlZmF1bHRFdmVudE9wdGlvbnMgPSB7XG4gIGFsbG93RnVuY3Rpb246IHRydWUsXG4gIG1heERlcHRoOiAyNVxufTsgLy8gVE9ETzogd2Ugc2hvdWxkIGV4cG9ydCBhIG1ldGhvZCBmb3Igb3BlbmluZyBjaGlsZCB3aW5kb3dzIGhlcmUgYW5kIGtlZXAgdHJhY2sgb2YgZW0uXG4vLyB0aGF0IHdheSB3ZSBjYW4gc2VuZCBwb3N0TWVzc2FnZSB0byBjaGlsZCB3aW5kb3dzIGFzIHdlbGwsIG5vdCBqdXN0IGlmcmFtZVxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjM0MDE2MC9ob3ctdG8tZ2V0LXRoZS1yZWZlcmVuY2VzLW9mLWFsbC1hbHJlYWR5LW9wZW5lZC1jaGlsZC13aW5kb3dzXG5cbmV4cG9ydCB2YXIgUG9zdG1zZ1RyYW5zcG9ydCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBvc3Rtc2dUcmFuc3BvcnQoY29uZmlnKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvc3Rtc2dUcmFuc3BvcnQpO1xuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5idWZmZXIgPSB2b2lkIDA7XG4gICAgdGhpcy5oYW5kbGVyID0gdm9pZCAwO1xuICAgIHRoaXMuY29ubmVjdGVkID0gdm9pZCAwO1xuICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbDtcbiAgICBnbG9iYWxXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuaGFuZGxlRXZlbnQuYmluZCh0aGlzKSwgZmFsc2UpOyAvLyBDaGVjayB3aGV0aGVyIHRoZSBjb25maWcucGFnZSBwYXJhbWV0ZXIgaGFzIGEgdmFsaWQgdmFsdWVcblxuICAgIGlmIChjb25maWcucGFnZSAhPT0gJ21hbmFnZXInICYmIGNvbmZpZy5wYWdlICE9PSAncHJldmlldycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBvc3Rtc2ctY2hhbm5lbDogXFxcImNvbmZpZy5wYWdlXFxcIiBjYW5ub3QgYmUgXFxcIlwiLmNvbmNhdChjb25maWcucGFnZSwgXCJcXFwiXCIpKTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUG9zdG1zZ1RyYW5zcG9ydCwgW3tcbiAgICBrZXk6IFwic2V0SGFuZGxlclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRIYW5kbGVyKGhhbmRsZXIpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuaGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZXIuYXBwbHkoX3RoaXMsIGFyZ3MpO1xuXG4gICAgICAgIGlmICghX3RoaXMuY29ubmVjdGVkICYmIF90aGlzLmdldExvY2FsRnJhbWUoKS5sZW5ndGgpIHtcbiAgICAgICAgICBfdGhpcy5mbHVzaCgpO1xuXG4gICAgICAgICAgX3RoaXMuY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgYGV2ZW50YCB0byB0aGUgYXNzb2NpYXRlZCB3aW5kb3cuIElmIHRoZSB3aW5kb3cgZG9lcyBub3QgeWV0IGV4aXN0XG4gICAgICogdGhlIGV2ZW50IHdpbGwgYmUgc3RvcmVkIGluIGEgYnVmZmVyIGFuZCBzZW50IHdoZW4gdGhlIHdpbmRvdyBleGlzdHMuXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJzZW5kXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNlbmQoZXZlbnQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgX3JlZiA9IG9wdGlvbnMgfHwge30sXG4gICAgICAgICAgdGFyZ2V0ID0gX3JlZi50YXJnZXQsXG4gICAgICAgICAgYWxsb3dSZWdFeHAgPSBfcmVmLmFsbG93UmVnRXhwLFxuICAgICAgICAgIGFsbG93RnVuY3Rpb24gPSBfcmVmLmFsbG93RnVuY3Rpb24sXG4gICAgICAgICAgYWxsb3dTeW1ib2wgPSBfcmVmLmFsbG93U3ltYm9sLFxuICAgICAgICAgIGFsbG93RGF0ZSA9IF9yZWYuYWxsb3dEYXRlLFxuICAgICAgICAgIGFsbG93VW5kZWZpbmVkID0gX3JlZi5hbGxvd1VuZGVmaW5lZCxcbiAgICAgICAgICBhbGxvd0NsYXNzID0gX3JlZi5hbGxvd0NsYXNzLFxuICAgICAgICAgIG1heERlcHRoID0gX3JlZi5tYXhEZXB0aCxcbiAgICAgICAgICBzcGFjZSA9IF9yZWYuc3BhY2UsXG4gICAgICAgICAgbGF6eUV2YWwgPSBfcmVmLmxhenlFdmFsO1xuXG4gICAgICB2YXIgZXZlbnRPcHRpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHtcbiAgICAgICAgYWxsb3dSZWdFeHA6IGFsbG93UmVnRXhwLFxuICAgICAgICBhbGxvd0Z1bmN0aW9uOiBhbGxvd0Z1bmN0aW9uLFxuICAgICAgICBhbGxvd1N5bWJvbDogYWxsb3dTeW1ib2wsXG4gICAgICAgIGFsbG93RGF0ZTogYWxsb3dEYXRlLFxuICAgICAgICBhbGxvd1VuZGVmaW5lZDogYWxsb3dVbmRlZmluZWQsXG4gICAgICAgIGFsbG93Q2xhc3M6IGFsbG93Q2xhc3MsXG4gICAgICAgIG1heERlcHRoOiBtYXhEZXB0aCxcbiAgICAgICAgc3BhY2U6IHNwYWNlLFxuICAgICAgICBsYXp5RXZhbDogbGF6eUV2YWxcbiAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIF9yZWYzID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLFxuICAgICAgICAgICAgayA9IF9yZWYzWzBdLFxuICAgICAgICAgICAgdiA9IF9yZWYzWzFdO1xuXG4gICAgICAgIHJldHVybiB0eXBlb2YgdiAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgICB9KSk7XG4gICAgICB2YXIgc3RyaW5naWZ5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRFdmVudE9wdGlvbnMsIGdsb2JhbC5DSEFOTkVMX09QVElPTlMgfHwge30sIGV2ZW50T3B0aW9ucyk7IC8vIGJhY2t3YXJkcyBjb21wYXQ6IGNvbnZlcnQgZGVwdGggdG8gbWF4RGVwdGhcblxuICAgICAgaWYgKG9wdGlvbnMgJiYgTnVtYmVyLmlzSW50ZWdlcihvcHRpb25zLmRlcHRoKSkge1xuICAgICAgICBzdHJpbmdpZnlPcHRpb25zLm1heERlcHRoID0gb3B0aW9ucy5kZXB0aDtcbiAgICAgIH1cblxuICAgICAgdmFyIGZyYW1lcyA9IHRoaXMuZ2V0RnJhbWVzKHRhcmdldCk7XG4gICAgICB2YXIgcXVlcnkgPSBxcy5wYXJzZShsb2NhdGlvbi5zZWFyY2gsIHtcbiAgICAgICAgaWdub3JlUXVlcnlQcmVmaXg6IHRydWVcbiAgICAgIH0pO1xuICAgICAgdmFyIGRhdGEgPSBzdHJpbmdpZnkoe1xuICAgICAgICBrZXk6IEtFWSxcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICByZWZJZDogcXVlcnkucmVmSWRcbiAgICAgIH0sIHN0cmluZ2lmeU9wdGlvbnMpO1xuXG4gICAgICBpZiAoIWZyYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBfdGhpczIuYnVmZmVyLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdDogcmVqZWN0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH1cblxuICAgICAgZnJhbWVzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmLnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdzZW5kaW5nIG92ZXIgcG9zdG1lc3NhZ2UgZmFpbCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZsdXNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgICBidWZmZXIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBfdGhpczMuc2VuZChpdGVtLmV2ZW50KS50aGVuKGl0ZW0ucmVzb2x2ZSkuY2F0Y2goaXRlbS5yZWplY3QpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZyYW1lc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGcmFtZXModGFyZ2V0KSB7XG4gICAgICBpZiAodGhpcy5jb25maWcucGFnZSA9PT0gJ21hbmFnZXInKSB7XG4gICAgICAgIHZhciBub2RlcyA9IF90b0NvbnN1bWFibGVBcnJheShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbZGF0YS1pcy1zdG9yeWJvb2tdW2RhdGEtaXMtbG9hZGVkXScpKTtcblxuICAgICAgICB2YXIgbGlzdCA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gISFlLmNvbnRlbnRXaW5kb3cgJiYgZS5kYXRhc2V0LmlzU3Rvcnlib29rICE9PSB1bmRlZmluZWQgJiYgZS5pZCA9PT0gdGFyZ2V0O1xuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5jb250ZW50V2luZG93O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpc3QubGVuZ3RoID8gbGlzdCA6IHRoaXMuZ2V0Q3VycmVudEZyYW1lcygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsV2luZG93ICYmIGdsb2JhbFdpbmRvdy5wYXJlbnQgJiYgZ2xvYmFsV2luZG93LnBhcmVudCAhPT0gZ2xvYmFsV2luZG93KSB7XG4gICAgICAgIHJldHVybiBbZ2xvYmFsV2luZG93LnBhcmVudF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q3VycmVudEZyYW1lc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDdXJyZW50RnJhbWVzKCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLnBhZ2UgPT09ICdtYW5hZ2VyJykge1xuICAgICAgICB2YXIgbGlzdCA9IF90b0NvbnN1bWFibGVBcnJheShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1pcy1zdG9yeWJvb2s9XCJ0cnVlXCJdJykpO1xuXG4gICAgICAgIHJldHVybiBsaXN0Lm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJldHVybiBlLmNvbnRlbnRXaW5kb3c7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsV2luZG93ICYmIGdsb2JhbFdpbmRvdy5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIFtnbG9iYWxXaW5kb3cucGFyZW50XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRMb2NhbEZyYW1lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldExvY2FsRnJhbWUoKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcucGFnZSA9PT0gJ21hbmFnZXInKSB7XG4gICAgICAgIHZhciBsaXN0ID0gX3RvQ29uc3VtYWJsZUFycmF5KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNzdG9yeWJvb2stcHJldmlldy1pZnJhbWUnKSk7XG5cbiAgICAgICAgcmV0dXJuIGxpc3QubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuY29udGVudFdpbmRvdztcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWxXaW5kb3cgJiYgZ2xvYmFsV2luZG93LnBhcmVudCkge1xuICAgICAgICByZXR1cm4gW2dsb2JhbFdpbmRvdy5wYXJlbnRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KHJhd0V2ZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZGF0YSA9IHJhd0V2ZW50LmRhdGE7XG5cbiAgICAgICAgdmFyIF9yZWY0ID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnICYmIGlzSlNPTihkYXRhKSA/IHBhcnNlKGRhdGEpIDogZGF0YSxcbiAgICAgICAgICAgIGtleSA9IF9yZWY0LmtleSxcbiAgICAgICAgICAgIGV2ZW50ID0gX3JlZjQuZXZlbnQsXG4gICAgICAgICAgICByZWZJZCA9IF9yZWY0LnJlZklkO1xuXG4gICAgICAgIGlmIChrZXkgPT09IEtFWSkge1xuICAgICAgICAgIHZhciBwYWdlU3RyaW5nID0gdGhpcy5jb25maWcucGFnZSA9PT0gJ21hbmFnZXInID8gXCI8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMzN0Q1RDM7IGJhY2tncm91bmQ6IGJsYWNrXFxcIj4gbWFuYWdlciA8L3NwYW4+XCIgOiBcIjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzFFQTdGRDsgYmFja2dyb3VuZDogYmxhY2tcXFwiPiBwcmV2aWV3IDwvc3Bhbj5cIjtcbiAgICAgICAgICB2YXIgZXZlbnRTdHJpbmcgPSBPYmplY3QudmFsdWVzKEVWRU5UUykuaW5jbHVkZXMoZXZlbnQudHlwZSkgPyBcIjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogI0ZGNDc4NVxcXCI+XCIuY29uY2F0KGV2ZW50LnR5cGUsIFwiPC9zcGFuPlwiKSA6IFwiPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkZBRTAwXFxcIj5cIi5jb25jYXQoZXZlbnQudHlwZSwgXCI8L3NwYW4+XCIpO1xuXG4gICAgICAgICAgaWYgKHJlZklkKSB7XG4gICAgICAgICAgICBldmVudC5yZWZJZCA9IHJlZklkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXMuY29uZmlnLnBhZ2UgPT09ICdwcmV2aWV3JyA/IHJhd0V2ZW50Lm9yaWdpbiA6IGdldEV2ZW50U291cmNlVXJsKHJhd0V2ZW50KTtcblxuICAgICAgICAgIGlmICghZXZlbnQuc291cmNlKSB7XG4gICAgICAgICAgICBwcmV0dHkuZXJyb3IoXCJcIi5jb25jYXQocGFnZVN0cmluZywgXCIgcmVjZWl2ZWQgXCIpLmNvbmNhdChldmVudFN0cmluZywgXCIgYnV0IHdhcyB1bmFibGUgdG8gZGV0ZXJtaW5lIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50XCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbWVzc2FnZSA9IFwiXCIuY29uY2F0KHBhZ2VTdHJpbmcsIFwiIHJlY2VpdmVkIFwiKS5jb25jYXQoZXZlbnRTdHJpbmcsIFwiIChcIikuY29uY2F0KGRhdGEubGVuZ3RoLCBcIilcIik7XG4gICAgICAgICAgcHJldHR5LmRlYnVnLmFwcGx5KHByZXR0eSwgW2xvY2F0aW9uLm9yaWdpbiAhPT0gZXZlbnQuc291cmNlID8gbWVzc2FnZSA6IFwiXCIuY29uY2F0KG1lc3NhZ2UsIFwiIDxzcGFuIHN0eWxlPVxcXCJjb2xvcjogZ3JheVxcXCI+KG9uIFwiKS5jb25jYXQobG9jYXRpb24ub3JpZ2luLCBcIiBmcm9tIFwiKS5jb25jYXQoZXZlbnQuc291cmNlLCBcIik8L3NwYW4+XCIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGV2ZW50LmFyZ3MpKSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUG9zdG1zZ1RyYW5zcG9ydDtcbn0oKTtcblxudmFyIGdldEV2ZW50U291cmNlVXJsID0gZnVuY3Rpb24gZ2V0RXZlbnRTb3VyY2VVcmwoZXZlbnQpIHtcbiAgdmFyIGZyYW1lcyA9IF90b0NvbnN1bWFibGVBcnJheShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbZGF0YS1pcy1zdG9yeWJvb2tdJykpOyAvLyB0cnkgdG8gZmluZCB0aGUgb3JpZ2luYXRpbmcgaWZyYW1lIGJ5IG1hdGNoaW5nIGl0J3MgY29udGVudFdpbmRvd1xuICAvLyBUaGlzIG1pZ2h0IG5vdCBiZSBjcm9zcy1vcmlnaW4gc2FmZVxuXG5cbiAgdmFyIF9mcmFtZXMkZmlsdGVyID0gZnJhbWVzLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZWxlbWVudC5jb250ZW50V2luZG93ID09PSBldmVudC5zb3VyY2U7XG4gICAgfSBjYXRjaCAoZXJyKSB7Ly8gY29udGludWVcbiAgICB9XG5cbiAgICB2YXIgc3JjID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICAgIHZhciBvcmlnaW47XG5cbiAgICB0cnkge1xuICAgICAgdmFyIF9VUkwgPSBuZXcgVVJMKHNyYywgZG9jdW1lbnQubG9jYXRpb24pO1xuXG4gICAgICBvcmlnaW4gPSBfVVJMLm9yaWdpbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luID09PSBldmVudC5vcmlnaW47XG4gIH0pLFxuICAgICAgX2ZyYW1lcyRmaWx0ZXIyID0gX3RvQXJyYXkoX2ZyYW1lcyRmaWx0ZXIpLFxuICAgICAgZnJhbWUgPSBfZnJhbWVzJGZpbHRlcjJbMF0sXG4gICAgICByZW1haW5kZXIgPSBfZnJhbWVzJGZpbHRlcjIuc2xpY2UoMSk7XG5cbiAgaWYgKGZyYW1lICYmIHJlbWFpbmRlci5sZW5ndGggPT09IDApIHtcbiAgICB2YXIgc3JjID0gZnJhbWUuZ2V0QXR0cmlidXRlKCdzcmMnKTtcblxuICAgIHZhciBfVVJMMiA9IG5ldyBVUkwoc3JjLCBkb2N1bWVudC5sb2NhdGlvbiksXG4gICAgICAgIHByb3RvY29sID0gX1VSTDIucHJvdG9jb2wsXG4gICAgICAgIGhvc3QgPSBfVVJMMi5ob3N0LFxuICAgICAgICBwYXRobmFtZSA9IF9VUkwyLnBhdGhuYW1lO1xuXG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KHByb3RvY29sLCBcIi8vXCIpLmNvbmNhdChob3N0KS5jb25jYXQocGF0aG5hbWUpO1xuICB9XG5cbiAgaWYgKHJlbWFpbmRlci5sZW5ndGggPiAwKSB7XG4gICAgLy8gSWYgd2UgZm91bmQgbXVsdGlwbGUgbWF0Y2hlcywgdGhlcmUncyBnb2luZyB0byBiZSB0cm91YmxlXG4gICAgbG9nZ2VyLmVycm9yKCdmb3VuZCBtdWx0aXBsZSBjYW5kaWRhdGVzIGZvciBldmVudCBzb3VyY2UnKTtcbiAgfSAvLyBJZiB3ZSBmb3VuZCBubyBmcmFtZXMgb2YgbWF0Y2hlc1xuXG5cbiAgcmV0dXJuIG51bGw7XG59O1xuLyoqXG4gKiBDcmVhdGVzIGEgY2hhbm5lbCB3aGljaCBjb21tdW5pY2F0ZXMgd2l0aCBhbiBpZnJhbWUgb3IgY2hpbGQgd2luZG93LlxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2hhbm5lbChfcmVmNSkge1xuICB2YXIgcGFnZSA9IF9yZWY1LnBhZ2U7XG4gIHZhciB0cmFuc3BvcnQgPSBuZXcgUG9zdG1zZ1RyYW5zcG9ydCh7XG4gICAgcGFnZTogcGFnZVxuICB9KTtcbiAgcmV0dXJuIG5ldyBDaGFubmVsKHtcbiAgICB0cmFuc3BvcnQ6IHRyYW5zcG9ydFxuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/channel-postmessage/dist/esm/index.js\n')},"../../node_modules/@storybook/channels/dist/esm/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* WEBPACK VAR INJECTION */(function(setImmediate) {/* unused harmony export Channel */\n/* harmony import */ var core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("../../node_modules/core-js/modules/es.object.freeze.js");\n/* harmony import */ var core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_freeze_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__("../../node_modules/core-js/modules/es.array.slice.js");\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__("../../node_modules/core-js/modules/es.object.to-string.js");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__("../../node_modules/core-js/modules/es.regexp.to-string.js");\n/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__("../../node_modules/core-js/modules/web.immediate.js");\n/* harmony import */ var core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_immediate_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__("../../node_modules/core-js/modules/es.object.keys.js");\n/* harmony import */ var core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_keys_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__("../../node_modules/core-js/modules/es.array.filter.js");\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__("../../node_modules/core-js/modules/web.dom-collections.for-each.js");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var util_deprecate__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__("../../node_modules/util-deprecate/browser.js");\n/* harmony import */ var util_deprecate__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(util_deprecate__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var ts_dedent__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__("../../node_modules/ts-dedent/esm/index.js");\n\n\nvar _templateObject;\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n\n\n\n\n\n\n\n\n\n\nvar generateRandomId = function generateRandomId() {\n // generates a random 13 character string\n return Math.random().toString(16).slice(2);\n};\n\nvar Channel = /*#__PURE__*/function () {\n function Channel() {\n var _this = this;\n\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n transport = _ref.transport,\n _ref$async = _ref.async,\n async = _ref$async === void 0 ? false : _ref$async;\n\n _classCallCheck(this, Channel);\n\n this.isAsync = void 0;\n this.sender = generateRandomId();\n this.events = {};\n this.data = {};\n this.transport = void 0;\n this.addPeerListener = util_deprecate__WEBPACK_IMPORTED_MODULE_8___default()(function (eventName, listener) {\n _this.addListener(eventName, listener);\n }, Object(ts_dedent__WEBPACK_IMPORTED_MODULE_9__[/* default */ "a"])(_templateObject || (_templateObject = _taggedTemplateLiteral(["\\n channel.addPeerListener is deprecated\\n "]))));\n this.isAsync = async;\n\n if (transport) {\n this.transport = transport;\n this.transport.setHandler(function (event) {\n return _this.handleEvent(event);\n });\n }\n }\n\n _createClass(Channel, [{\n key: "hasTransport",\n get: function get() {\n return !!this.transport;\n }\n }, {\n key: "addListener",\n value: function addListener(eventName, listener) {\n this.events[eventName] = this.events[eventName] || [];\n this.events[eventName].push(listener);\n }\n }, {\n key: "emit",\n value: function emit(eventName) {\n var _this2 = this;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var event = {\n type: eventName,\n args: args,\n from: this.sender\n };\n var options = {};\n\n if (args.length >= 1 && args[0] && args[0].options) {\n options = args[0].options;\n }\n\n var handler = function handler() {\n if (_this2.transport) {\n _this2.transport.send(event, options);\n }\n\n _this2.handleEvent(event);\n };\n\n if (this.isAsync) {\n // todo I\'m not sure how to test this\n setImmediate(handler);\n } else {\n handler();\n }\n }\n }, {\n key: "last",\n value: function last(eventName) {\n return this.data[eventName];\n }\n }, {\n key: "eventNames",\n value: function eventNames() {\n return Object.keys(this.events);\n }\n }, {\n key: "listenerCount",\n value: function listenerCount(eventName) {\n var listeners = this.listeners(eventName);\n return listeners ? listeners.length : 0;\n }\n }, {\n key: "listeners",\n value: function listeners(eventName) {\n var listeners = this.events[eventName];\n return listeners || undefined;\n }\n }, {\n key: "once",\n value: function once(eventName, listener) {\n var onceListener = this.onceListener(eventName, listener);\n this.addListener(eventName, onceListener);\n }\n }, {\n key: "removeAllListeners",\n value: function removeAllListeners(eventName) {\n if (!eventName) {\n this.events = {};\n } else if (this.events[eventName]) {\n delete this.events[eventName];\n }\n }\n }, {\n key: "removeListener",\n value: function removeListener(eventName, listener) {\n var listeners = this.listeners(eventName);\n\n if (listeners) {\n this.events[eventName] = listeners.filter(function (l) {\n return l !== listener;\n });\n }\n }\n }, {\n key: "on",\n value: function on(eventName, listener) {\n this.addListener(eventName, listener);\n }\n }, {\n key: "off",\n value: function off(eventName, listener) {\n this.removeListener(eventName, listener);\n }\n }, {\n key: "handleEvent",\n value: function handleEvent(event) {\n var listeners = this.listeners(event.type);\n\n if (listeners && listeners.length) {\n listeners.forEach(function (fn) {\n fn.apply(event, event.args);\n });\n }\n\n this.data[event.type] = event.args;\n }\n }, {\n key: "onceListener",\n value: function onceListener(eventName, listener) {\n var _this3 = this;\n\n var onceListener = function onceListener() {\n _this3.removeListener(eventName, onceListener);\n\n return listener.apply(void 0, arguments);\n };\n\n return onceListener;\n }\n }]);\n\n return Channel;\n}();\n/* harmony default export */ __webpack_exports__["a"] = (Channel);\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__("../../node_modules/timers-browserify/main.js").setImmediate))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2NoYW5uZWxzL2Rpc3QvZXNtL2luZGV4LmpzPzRmOGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUE2Qzs7QUFFN0M7O0FBRUEsK0NBQStDLFlBQVksd0JBQXdCLEVBQUUsd0RBQXdELE9BQU8sNEJBQTRCLEVBQUUsR0FBRzs7QUFFckwsaURBQWlELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFdkosMkNBQTJDLGdCQUFnQixrQkFBa0IsT0FBTywyQkFBMkIsd0RBQXdELGdDQUFnQyx1REFBdUQsMkRBQTJELEVBQUU7O0FBRTNULDZEQUE2RCxzRUFBc0UsOERBQThELG9CQUFvQjs7QUFFMUs7QUFDSztBQUNBO0FBQ047QUFDQztBQUNDO0FBQ2E7QUFDbEI7QUFDUjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBLHFGQUFxRjtBQUNyRjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixxREFBUztBQUNwQztBQUNBLEtBQUssRUFBRSxpRUFBTTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSw0RkFBNEYsYUFBYTtBQUN6RztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxDQUFDO0FBQ2MsZ0VBQU8sRSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jaGFubmVscy9kaXN0L2VzbS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJlZXplLmpzXCI7XG5cbnZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qc1wiO1xuaW1wb3J0IGRlcHJlY2F0ZSBmcm9tICd1dGlsLWRlcHJlY2F0ZSc7XG5pbXBvcnQgZGVkZW50IGZyb20gJ3RzLWRlZGVudCc7XG5cbnZhciBnZW5lcmF0ZVJhbmRvbUlkID0gZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21JZCgpIHtcbiAgLy8gZ2VuZXJhdGVzIGEgcmFuZG9tIDEzIGNoYXJhY3RlciBzdHJpbmdcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMTYpLnNsaWNlKDIpO1xufTtcblxuZXhwb3J0IHZhciBDaGFubmVsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQ2hhbm5lbCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgICB0cmFuc3BvcnQgPSBfcmVmLnRyYW5zcG9ydCxcbiAgICAgICAgX3JlZiRhc3luYyA9IF9yZWYuYXN5bmMsXG4gICAgICAgIGFzeW5jID0gX3JlZiRhc3luYyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGFzeW5jO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENoYW5uZWwpO1xuXG4gICAgdGhpcy5pc0FzeW5jID0gdm9pZCAwO1xuICAgIHRoaXMuc2VuZGVyID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIHRoaXMuZXZlbnRzID0ge307XG4gICAgdGhpcy5kYXRhID0ge307XG4gICAgdGhpcy50cmFuc3BvcnQgPSB2b2lkIDA7XG4gICAgdGhpcy5hZGRQZWVyTGlzdGVuZXIgPSBkZXByZWNhdGUoZnVuY3Rpb24gKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgIF90aGlzLmFkZExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH0sIGRlZGVudChfdGVtcGxhdGVPYmplY3QgfHwgKF90ZW1wbGF0ZU9iamVjdCA9IF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoW1wiXFxuICAgICAgY2hhbm5lbC5hZGRQZWVyTGlzdGVuZXIgaXMgZGVwcmVjYXRlZFxcbiAgICBcIl0pKSkpO1xuICAgIHRoaXMuaXNBc3luYyA9IGFzeW5jO1xuXG4gICAgaWYgKHRyYW5zcG9ydCkge1xuICAgICAgdGhpcy50cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICB0aGlzLnRyYW5zcG9ydC5zZXRIYW5kbGVyKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKENoYW5uZWwsIFt7XG4gICAga2V5OiBcImhhc1RyYW5zcG9ydFwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy50cmFuc3BvcnQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZExpc3RlbmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZExpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0gPSB0aGlzLmV2ZW50c1tldmVudE5hbWVdIHx8IFtdO1xuICAgICAgdGhpcy5ldmVudHNbZXZlbnROYW1lXS5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW1pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHZhciBldmVudCA9IHtcbiAgICAgICAgdHlwZTogZXZlbnROYW1lLFxuICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICBmcm9tOiB0aGlzLnNlbmRlclxuICAgICAgfTtcbiAgICAgIHZhciBvcHRpb25zID0ge307XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+PSAxICYmIGFyZ3NbMF0gJiYgYXJnc1swXS5vcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhcmdzWzBdLm9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgaWYgKF90aGlzMi50cmFuc3BvcnQpIHtcbiAgICAgICAgICBfdGhpczIudHJhbnNwb3J0LnNlbmQoZXZlbnQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMyLmhhbmRsZUV2ZW50KGV2ZW50KTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmlzQXN5bmMpIHtcbiAgICAgICAgLy8gdG9kbyBJJ20gbm90IHN1cmUgaG93IHRvIHRlc3QgdGhpc1xuICAgICAgICBzZXRJbW1lZGlhdGUoaGFuZGxlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxhc3RcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGFzdChldmVudE5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFbZXZlbnROYW1lXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXZlbnROYW1lc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZXZlbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibGlzdGVuZXJDb3VudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsaXN0ZW5lckNvdW50KGV2ZW50TmFtZSkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzKGV2ZW50TmFtZSk7XG4gICAgICByZXR1cm4gbGlzdGVuZXJzID8gbGlzdGVuZXJzLmxlbmd0aCA6IDA7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxpc3RlbmVyc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnROYW1lKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5ldmVudHNbZXZlbnROYW1lXTtcbiAgICAgIHJldHVybiBsaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJvbmNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uY2UoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIG9uY2VMaXN0ZW5lciA9IHRoaXMub25jZUxpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgICAgdGhpcy5hZGRMaXN0ZW5lcihldmVudE5hbWUsIG9uY2VMaXN0ZW5lcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZUFsbExpc3RlbmVyc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnMoZXZlbnROYW1lKSB7XG4gICAgICBpZiAoIWV2ZW50TmFtZSkge1xuICAgICAgICB0aGlzLmV2ZW50cyA9IHt9O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50c1tldmVudE5hbWVdKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tldmVudE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW1vdmVMaXN0ZW5lclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnMoZXZlbnROYW1lKTtcblxuICAgICAgaWYgKGxpc3RlbmVycykge1xuICAgICAgICB0aGlzLmV2ZW50c1tldmVudE5hbWVdID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAobCkge1xuICAgICAgICAgIHJldHVybiBsICE9PSBsaXN0ZW5lcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuYWRkTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9mZlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFuZGxlRXZlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyhldmVudC50eXBlKTtcblxuICAgICAgaWYgKGxpc3RlbmVycyAmJiBsaXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgIGZuLmFwcGx5KGV2ZW50LCBldmVudC5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YVtldmVudC50eXBlXSA9IGV2ZW50LmFyZ3M7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uY2VMaXN0ZW5lclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbmNlTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBvbmNlTGlzdGVuZXIgPSBmdW5jdGlvbiBvbmNlTGlzdGVuZXIoKSB7XG4gICAgICAgIF90aGlzMy5yZW1vdmVMaXN0ZW5lcihldmVudE5hbWUsIG9uY2VMaXN0ZW5lcik7XG5cbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBvbmNlTGlzdGVuZXI7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENoYW5uZWw7XG59KCk7XG5leHBvcnQgZGVmYXVsdCBDaGFubmVsOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/channels/dist/esm/index.js\n')},"../../node_modules/@storybook/client-logger/dist/esm/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return logger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return once; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return pretty; });\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(\"../../node_modules/core-js/modules/es.array.concat.js\");\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_set_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(\"../../node_modules/core-js/modules/es.set.js\");\n/* harmony import */ var core_js_modules_es_set_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_set_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(\"../../node_modules/core-js/modules/es.object.to-string.js\");\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(\"../../node_modules/core-js/modules/es.string.iterator.js\");\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(\"../../node_modules/core-js/modules/es.array.iterator.js\");\n/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(\"../../node_modules/core-js/modules/web.dom-collections.iterator.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(\"../../node_modules/core-js/modules/es.string.replace.js\");\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(\"../../node_modules/core-js/modules/es.regexp.exec.js\");\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var global__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(\"../../node_modules/global/window.js\");\n/* harmony import */ var global__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(global__WEBPACK_IMPORTED_MODULE_8__);\n\n\n\n\n\n\n\n\n\nvar LOGLEVEL = global__WEBPACK_IMPORTED_MODULE_8___default.a.LOGLEVEL,\n console = global__WEBPACK_IMPORTED_MODULE_8___default.a.console;\nvar levels = {\n trace: 1,\n debug: 2,\n info: 3,\n warn: 4,\n error: 5,\n silent: 10\n};\nvar currentLogLevelString = LOGLEVEL;\nvar currentLogLevelNumber = levels[currentLogLevelString] || levels.info;\nvar logger = {\n trace: function trace(message) {\n for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n return currentLogLevelNumber <= levels.trace && console.trace.apply(console, [message].concat(rest));\n },\n debug: function debug(message) {\n for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n rest[_key2 - 1] = arguments[_key2];\n }\n\n return currentLogLevelNumber <= levels.debug && console.debug.apply(console, [message].concat(rest));\n },\n info: function info(message) {\n for (var _len3 = arguments.length, rest = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n rest[_key3 - 1] = arguments[_key3];\n }\n\n return currentLogLevelNumber <= levels.info && console.info.apply(console, [message].concat(rest));\n },\n warn: function warn(message) {\n for (var _len4 = arguments.length, rest = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n rest[_key4 - 1] = arguments[_key4];\n }\n\n return currentLogLevelNumber <= levels.warn && console.warn.apply(console, [message].concat(rest));\n },\n error: function error(message) {\n for (var _len5 = arguments.length, rest = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n rest[_key5 - 1] = arguments[_key5];\n }\n\n return currentLogLevelNumber <= levels.error && console.error.apply(console, [message].concat(rest));\n },\n log: function log(message) {\n for (var _len6 = arguments.length, rest = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n rest[_key6 - 1] = arguments[_key6];\n }\n\n return currentLogLevelNumber < levels.silent && console.log.apply(console, [message].concat(rest));\n }\n};\nvar logged = new Set();\nvar once = function once(type) {\n return function (message) {\n if (logged.has(message)) return undefined;\n logged.add(message);\n\n for (var _len7 = arguments.length, rest = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n rest[_key7 - 1] = arguments[_key7];\n }\n\n return logger[type].apply(logger, [message].concat(rest));\n };\n};\n\nonce.clear = function () {\n return logged.clear();\n};\n\nonce.trace = once('trace');\nonce.debug = once('debug');\nonce.info = once('info');\nonce.warn = once('warn');\nonce.error = once('error');\nonce.log = once('log');\nvar pretty = function pretty(type) {\n return function () {\n var argArray = [];\n\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n if (args.length) {\n var startTagRe = /<span\\s+style=(['\"])([^'\"]*)\\1\\s*>/gi;\n var endTagRe = /<\\/span>/gi;\n var reResultArray;\n argArray.push(args[0].replace(startTagRe, '%c').replace(endTagRe, '%c')); // eslint-disable-next-line no-cond-assign\n\n while (reResultArray = startTagRe.exec(args[0])) {\n argArray.push(reResultArray[2]);\n argArray.push('');\n } // pass through subsequent args since chrome dev tools does not (yet) support console.log styling of the following form: console.log('%cBlue!', 'color: blue;', '%cRed!', 'color: red;');\n // eslint-disable-next-line no-plusplus\n\n\n for (var j = 1; j < args.length; j++) {\n argArray.push(args[j]);\n }\n } // eslint-disable-next-line prefer-spread\n\n\n logger[type].apply(logger, argArray);\n };\n};\npretty.trace = pretty('trace');\npretty.debug = pretty('debug');\npretty.info = pretty('info');\npretty.warn = pretty('warn');\npretty.error = pretty('error');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2NsaWVudC1sb2dnZXIvZGlzdC9lc20vaW5kZXguanM/YTQ5NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNEM7QUFDVDtBQUNhO0FBQ0Q7QUFDRDtBQUNXO0FBQ1g7QUFDSDtBQUNmO0FBQzVCLGVBQWUsNkNBQU07QUFDckIsY0FBYyw2Q0FBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSwwRkFBMEYsYUFBYTtBQUN2RztBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTs7QUFFQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBOztBQUVBLDBFQUEwRSxlQUFlO0FBQ3pGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0U7O0FBRS9FO0FBQ0E7QUFDQTtBQUNBLE9BQU8sOEpBQThKLHlCQUF5QjtBQUM5TDs7O0FBR0EscUJBQXFCLGlCQUFpQjtBQUN0QztBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jbGllbnQtbG9nZ2VyL2Rpc3QvZXNtL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnNldC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJ2dsb2JhbCc7XG52YXIgTE9HTEVWRUwgPSBnbG9iYWwuTE9HTEVWRUwsXG4gICAgY29uc29sZSA9IGdsb2JhbC5jb25zb2xlO1xudmFyIGxldmVscyA9IHtcbiAgdHJhY2U6IDEsXG4gIGRlYnVnOiAyLFxuICBpbmZvOiAzLFxuICB3YXJuOiA0LFxuICBlcnJvcjogNSxcbiAgc2lsZW50OiAxMFxufTtcbnZhciBjdXJyZW50TG9nTGV2ZWxTdHJpbmcgPSBMT0dMRVZFTDtcbnZhciBjdXJyZW50TG9nTGV2ZWxOdW1iZXIgPSBsZXZlbHNbY3VycmVudExvZ0xldmVsU3RyaW5nXSB8fCBsZXZlbHMuaW5mbztcbmV4cG9ydCB2YXIgbG9nZ2VyID0ge1xuICB0cmFjZTogZnVuY3Rpb24gdHJhY2UobWVzc2FnZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50TG9nTGV2ZWxOdW1iZXIgPD0gbGV2ZWxzLnRyYWNlICYmIGNvbnNvbGUudHJhY2UuYXBwbHkoY29uc29sZSwgW21lc3NhZ2VdLmNvbmNhdChyZXN0KSk7XG4gIH0sXG4gIGRlYnVnOiBmdW5jdGlvbiBkZWJ1ZyhtZXNzYWdlKSB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRMb2dMZXZlbE51bWJlciA8PSBsZXZlbHMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zy5hcHBseShjb25zb2xlLCBbbWVzc2FnZV0uY29uY2F0KHJlc3QpKTtcbiAgfSxcbiAgaW5mbzogZnVuY3Rpb24gaW5mbyhtZXNzYWdlKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMSA/IF9sZW4zIC0gMSA6IDApLCBfa2V5MyA9IDE7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAxXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRMb2dMZXZlbE51bWJlciA8PSBsZXZlbHMuaW5mbyAmJiBjb25zb2xlLmluZm8uYXBwbHkoY29uc29sZSwgW21lc3NhZ2VdLmNvbmNhdChyZXN0KSk7XG4gIH0sXG4gIHdhcm46IGZ1bmN0aW9uIHdhcm4obWVzc2FnZSkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuNCA+IDEgPyBfbGVuNCAtIDEgOiAwKSwgX2tleTQgPSAxOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICByZXN0W19rZXk0IC0gMV0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50TG9nTGV2ZWxOdW1iZXIgPD0gbGV2ZWxzLndhcm4gJiYgY29uc29sZS53YXJuLmFwcGx5KGNvbnNvbGUsIFttZXNzYWdlXS5jb25jYXQocmVzdCkpO1xuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IobWVzc2FnZSkge1xuICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuNSA+IDEgPyBfbGVuNSAtIDEgOiAwKSwgX2tleTUgPSAxOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICByZXN0W19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50TG9nTGV2ZWxOdW1iZXIgPD0gbGV2ZWxzLmVycm9yICYmIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSwgW21lc3NhZ2VdLmNvbmNhdChyZXN0KSk7XG4gIH0sXG4gIGxvZzogZnVuY3Rpb24gbG9nKG1lc3NhZ2UpIHtcbiAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjYgPiAxID8gX2xlbjYgLSAxIDogMCksIF9rZXk2ID0gMTsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgcmVzdFtfa2V5NiAtIDFdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudExvZ0xldmVsTnVtYmVyIDwgbGV2ZWxzLnNpbGVudCAmJiBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBbbWVzc2FnZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxufTtcbnZhciBsb2dnZWQgPSBuZXcgU2V0KCk7XG5leHBvcnQgdmFyIG9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gICAgaWYgKGxvZ2dlZC5oYXMobWVzc2FnZSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbG9nZ2VkLmFkZChtZXNzYWdlKTtcblxuICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuNyA+IDEgPyBfbGVuNyAtIDEgOiAwKSwgX2tleTcgPSAxOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICByZXN0W19rZXk3IC0gMV0gPSBhcmd1bWVudHNbX2tleTddO1xuICAgIH1cblxuICAgIHJldHVybiBsb2dnZXJbdHlwZV0uYXBwbHkobG9nZ2VyLCBbbWVzc2FnZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcbn07XG5cbm9uY2UuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBsb2dnZWQuY2xlYXIoKTtcbn07XG5cbm9uY2UudHJhY2UgPSBvbmNlKCd0cmFjZScpO1xub25jZS5kZWJ1ZyA9IG9uY2UoJ2RlYnVnJyk7XG5vbmNlLmluZm8gPSBvbmNlKCdpbmZvJyk7XG5vbmNlLndhcm4gPSBvbmNlKCd3YXJuJyk7XG5vbmNlLmVycm9yID0gb25jZSgnZXJyb3InKTtcbm9uY2UubG9nID0gb25jZSgnbG9nJyk7XG5leHBvcnQgdmFyIHByZXR0eSA9IGZ1bmN0aW9uIHByZXR0eSh0eXBlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ0FycmF5ID0gW107XG5cbiAgICBmb3IgKHZhciBfbGVuOCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHtcbiAgICAgIGFyZ3NbX2tleThdID0gYXJndW1lbnRzW19rZXk4XTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICAgIHZhciBzdGFydFRhZ1JlID0gLzxzcGFuXFxzK3N0eWxlPShbJ1wiXSkoW14nXCJdKilcXDFcXHMqPi9naTtcbiAgICAgIHZhciBlbmRUYWdSZSA9IC88XFwvc3Bhbj4vZ2k7XG4gICAgICB2YXIgcmVSZXN1bHRBcnJheTtcbiAgICAgIGFyZ0FycmF5LnB1c2goYXJnc1swXS5yZXBsYWNlKHN0YXJ0VGFnUmUsICclYycpLnJlcGxhY2UoZW5kVGFnUmUsICclYycpKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG5cbiAgICAgIHdoaWxlIChyZVJlc3VsdEFycmF5ID0gc3RhcnRUYWdSZS5leGVjKGFyZ3NbMF0pKSB7XG4gICAgICAgIGFyZ0FycmF5LnB1c2gocmVSZXN1bHRBcnJheVsyXSk7XG4gICAgICAgIGFyZ0FycmF5LnB1c2goJycpO1xuICAgICAgfSAvLyBwYXNzIHRocm91Z2ggc3Vic2VxdWVudCBhcmdzIHNpbmNlIGNocm9tZSBkZXYgdG9vbHMgZG9lcyBub3QgKHlldCkgc3VwcG9ydCBjb25zb2xlLmxvZyBzdHlsaW5nIG9mIHRoZSBmb2xsb3dpbmcgZm9ybTogY29uc29sZS5sb2coJyVjQmx1ZSEnLCAnY29sb3I6IGJsdWU7JywgJyVjUmVkIScsICdjb2xvcjogcmVkOycpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzXG5cblxuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBhcmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGFyZ0FycmF5LnB1c2goYXJnc1tqXSk7XG4gICAgICB9XG4gICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXNwcmVhZFxuXG5cbiAgICBsb2dnZXJbdHlwZV0uYXBwbHkobG9nZ2VyLCBhcmdBcnJheSk7XG4gIH07XG59O1xucHJldHR5LnRyYWNlID0gcHJldHR5KCd0cmFjZScpO1xucHJldHR5LmRlYnVnID0gcHJldHR5KCdkZWJ1ZycpO1xucHJldHR5LmluZm8gPSBwcmV0dHkoJ2luZm8nKTtcbnByZXR0eS53YXJuID0gcHJldHR5KCd3YXJuJyk7XG5wcmV0dHkuZXJyb3IgPSBwcmV0dHkoJ2Vycm9yJyk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/client-logger/dist/esm/index.js\n")},"../../node_modules/@storybook/core-events/dist/esm/index.js":function(module,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CHANNEL_CREATED", function() { return CHANNEL_CREATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CONFIG_ERROR", function() { return CONFIG_ERROR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_INDEX_INVALIDATED", function() { return STORY_INDEX_INVALIDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_SPECIFIED", function() { return STORY_SPECIFIED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SET_STORIES", function() { return SET_STORIES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SET_CURRENT_STORY", function() { return SET_CURRENT_STORY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CURRENT_STORY_WAS_SET", function() { return CURRENT_STORY_WAS_SET; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FORCE_RE_RENDER", function() { return FORCE_RE_RENDER; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FORCE_REMOUNT", function() { return FORCE_REMOUNT; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_PREPARED", function() { return STORY_PREPARED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_CHANGED", function() { return STORY_CHANGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_UNCHANGED", function() { return STORY_UNCHANGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_RENDERED", function() { return STORY_RENDERED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_MISSING", function() { return STORY_MISSING; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_ERRORED", function() { return STORY_ERRORED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_THREW_EXCEPTION", function() { return STORY_THREW_EXCEPTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_RENDER_PHASE_CHANGED", function() { return STORY_RENDER_PHASE_CHANGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UPDATE_STORY_ARGS", function() { return UPDATE_STORY_ARGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORY_ARGS_UPDATED", function() { return STORY_ARGS_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RESET_STORY_ARGS", function() { return RESET_STORY_ARGS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SET_GLOBALS", function() { return SET_GLOBALS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UPDATE_GLOBALS", function() { return UPDATE_GLOBALS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GLOBALS_UPDATED", function() { return GLOBALS_UPDATED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "REGISTER_SUBSCRIPTION", function() { return REGISTER_SUBSCRIPTION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PREVIEW_KEYDOWN", function() { return PREVIEW_KEYDOWN; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SELECT_STORY", function() { return SELECT_STORY; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORIES_COLLAPSE_ALL", function() { return STORIES_COLLAPSE_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "STORIES_EXPAND_ALL", function() { return STORIES_EXPAND_ALL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DOCS_RENDERED", function() { return DOCS_RENDERED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SHARED_STATE_CHANGED", function() { return SHARED_STATE_CHANGED; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SHARED_STATE_SET", function() { return SHARED_STATE_SET; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NAVIGATE_URL", function() { return NAVIGATE_URL; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UPDATE_QUERY_PARAMS", function() { return UPDATE_QUERY_PARAMS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IGNORED_EXCEPTION", function() { return IGNORED_EXCEPTION; });\nvar events; // Enables: `import Events from ...`\n\n(function (events) {\n events["CHANNEL_CREATED"] = "channelCreated";\n events["CONFIG_ERROR"] = "configError";\n events["STORY_INDEX_INVALIDATED"] = "storyIndexInvalidated";\n events["STORY_SPECIFIED"] = "storySpecified";\n events["SET_STORIES"] = "setStories";\n events["SET_CURRENT_STORY"] = "setCurrentStory";\n events["CURRENT_STORY_WAS_SET"] = "currentStoryWasSet";\n events["FORCE_RE_RENDER"] = "forceReRender";\n events["FORCE_REMOUNT"] = "forceRemount";\n events["STORY_PREPARED"] = "storyPrepared";\n events["STORY_CHANGED"] = "storyChanged";\n events["STORY_UNCHANGED"] = "storyUnchanged";\n events["STORY_RENDERED"] = "storyRendered";\n events["STORY_MISSING"] = "storyMissing";\n events["STORY_ERRORED"] = "storyErrored";\n events["STORY_THREW_EXCEPTION"] = "storyThrewException";\n events["STORY_RENDER_PHASE_CHANGED"] = "storyRenderPhaseChanged";\n events["UPDATE_STORY_ARGS"] = "updateStoryArgs";\n events["STORY_ARGS_UPDATED"] = "storyArgsUpdated";\n events["RESET_STORY_ARGS"] = "resetStoryArgs";\n events["SET_GLOBALS"] = "setGlobals";\n events["UPDATE_GLOBALS"] = "updateGlobals";\n events["GLOBALS_UPDATED"] = "globalsUpdated";\n events["REGISTER_SUBSCRIPTION"] = "registerSubscription";\n events["PREVIEW_KEYDOWN"] = "previewKeydown";\n events["SELECT_STORY"] = "selectStory";\n events["STORIES_COLLAPSE_ALL"] = "storiesCollapseAll";\n events["STORIES_EXPAND_ALL"] = "storiesExpandAll";\n events["DOCS_RENDERED"] = "docsRendered";\n events["SHARED_STATE_CHANGED"] = "sharedStateChanged";\n events["SHARED_STATE_SET"] = "sharedStateSet";\n events["NAVIGATE_URL"] = "navigateUrl";\n events["UPDATE_QUERY_PARAMS"] = "updateQueryParams";\n})(events || (events = {}));\n\n/* harmony default export */ __webpack_exports__["default"] = (events); // Enables: `import * as Events from ...` or `import { CHANNEL_CREATED } as Events from ...`\n// This is the preferred method\n\nvar CHANNEL_CREATED = events.CHANNEL_CREATED,\n CONFIG_ERROR = events.CONFIG_ERROR,\n STORY_INDEX_INVALIDATED = events.STORY_INDEX_INVALIDATED,\n STORY_SPECIFIED = events.STORY_SPECIFIED,\n SET_STORIES = events.SET_STORIES,\n SET_CURRENT_STORY = events.SET_CURRENT_STORY,\n CURRENT_STORY_WAS_SET = events.CURRENT_STORY_WAS_SET,\n FORCE_RE_RENDER = events.FORCE_RE_RENDER,\n FORCE_REMOUNT = events.FORCE_REMOUNT,\n STORY_PREPARED = events.STORY_PREPARED,\n STORY_CHANGED = events.STORY_CHANGED,\n STORY_UNCHANGED = events.STORY_UNCHANGED,\n STORY_RENDERED = events.STORY_RENDERED,\n STORY_MISSING = events.STORY_MISSING,\n STORY_ERRORED = events.STORY_ERRORED,\n STORY_THREW_EXCEPTION = events.STORY_THREW_EXCEPTION,\n STORY_RENDER_PHASE_CHANGED = events.STORY_RENDER_PHASE_CHANGED,\n UPDATE_STORY_ARGS = events.UPDATE_STORY_ARGS,\n STORY_ARGS_UPDATED = events.STORY_ARGS_UPDATED,\n RESET_STORY_ARGS = events.RESET_STORY_ARGS,\n SET_GLOBALS = events.SET_GLOBALS,\n UPDATE_GLOBALS = events.UPDATE_GLOBALS,\n GLOBALS_UPDATED = events.GLOBALS_UPDATED,\n REGISTER_SUBSCRIPTION = events.REGISTER_SUBSCRIPTION,\n PREVIEW_KEYDOWN = events.PREVIEW_KEYDOWN,\n SELECT_STORY = events.SELECT_STORY,\n STORIES_COLLAPSE_ALL = events.STORIES_COLLAPSE_ALL,\n STORIES_EXPAND_ALL = events.STORIES_EXPAND_ALL,\n DOCS_RENDERED = events.DOCS_RENDERED,\n SHARED_STATE_CHANGED = events.SHARED_STATE_CHANGED,\n SHARED_STATE_SET = events.SHARED_STATE_SET,\n NAVIGATE_URL = events.NAVIGATE_URL,\n UPDATE_QUERY_PARAMS = events.UPDATE_QUERY_PARAMS; // Used to break out of the current render without showing a redbox\n\n\nvar IGNORED_EXCEPTION = new Error(\'ignoredException\');//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2NvcmUtZXZlbnRzL2Rpc3QvZXNtL2luZGV4LmpzP2JhZDMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdCQUF3Qjs7QUFFVixxRUFBTSxFQUFDLHVEQUF1RCxrQkFBa0I7QUFDL0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFdWlCO0FBQ3JsQiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jb3JlLWV2ZW50cy9kaXN0L2VzbS9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBldmVudHM7IC8vIEVuYWJsZXM6IGBpbXBvcnQgRXZlbnRzIGZyb20gLi4uYFxuXG4oZnVuY3Rpb24gKGV2ZW50cykge1xuICBldmVudHNbXCJDSEFOTkVMX0NSRUFURURcIl0gPSBcImNoYW5uZWxDcmVhdGVkXCI7XG4gIGV2ZW50c1tcIkNPTkZJR19FUlJPUlwiXSA9IFwiY29uZmlnRXJyb3JcIjtcbiAgZXZlbnRzW1wiU1RPUllfSU5ERVhfSU5WQUxJREFURURcIl0gPSBcInN0b3J5SW5kZXhJbnZhbGlkYXRlZFwiO1xuICBldmVudHNbXCJTVE9SWV9TUEVDSUZJRURcIl0gPSBcInN0b3J5U3BlY2lmaWVkXCI7XG4gIGV2ZW50c1tcIlNFVF9TVE9SSUVTXCJdID0gXCJzZXRTdG9yaWVzXCI7XG4gIGV2ZW50c1tcIlNFVF9DVVJSRU5UX1NUT1JZXCJdID0gXCJzZXRDdXJyZW50U3RvcnlcIjtcbiAgZXZlbnRzW1wiQ1VSUkVOVF9TVE9SWV9XQVNfU0VUXCJdID0gXCJjdXJyZW50U3RvcnlXYXNTZXRcIjtcbiAgZXZlbnRzW1wiRk9SQ0VfUkVfUkVOREVSXCJdID0gXCJmb3JjZVJlUmVuZGVyXCI7XG4gIGV2ZW50c1tcIkZPUkNFX1JFTU9VTlRcIl0gPSBcImZvcmNlUmVtb3VudFwiO1xuICBldmVudHNbXCJTVE9SWV9QUkVQQVJFRFwiXSA9IFwic3RvcnlQcmVwYXJlZFwiO1xuICBldmVudHNbXCJTVE9SWV9DSEFOR0VEXCJdID0gXCJzdG9yeUNoYW5nZWRcIjtcbiAgZXZlbnRzW1wiU1RPUllfVU5DSEFOR0VEXCJdID0gXCJzdG9yeVVuY2hhbmdlZFwiO1xuICBldmVudHNbXCJTVE9SWV9SRU5ERVJFRFwiXSA9IFwic3RvcnlSZW5kZXJlZFwiO1xuICBldmVudHNbXCJTVE9SWV9NSVNTSU5HXCJdID0gXCJzdG9yeU1pc3NpbmdcIjtcbiAgZXZlbnRzW1wiU1RPUllfRVJST1JFRFwiXSA9IFwic3RvcnlFcnJvcmVkXCI7XG4gIGV2ZW50c1tcIlNUT1JZX1RIUkVXX0VYQ0VQVElPTlwiXSA9IFwic3RvcnlUaHJld0V4Y2VwdGlvblwiO1xuICBldmVudHNbXCJTVE9SWV9SRU5ERVJfUEhBU0VfQ0hBTkdFRFwiXSA9IFwic3RvcnlSZW5kZXJQaGFzZUNoYW5nZWRcIjtcbiAgZXZlbnRzW1wiVVBEQVRFX1NUT1JZX0FSR1NcIl0gPSBcInVwZGF0ZVN0b3J5QXJnc1wiO1xuICBldmVudHNbXCJTVE9SWV9BUkdTX1VQREFURURcIl0gPSBcInN0b3J5QXJnc1VwZGF0ZWRcIjtcbiAgZXZlbnRzW1wiUkVTRVRfU1RPUllfQVJHU1wiXSA9IFwicmVzZXRTdG9yeUFyZ3NcIjtcbiAgZXZlbnRzW1wiU0VUX0dMT0JBTFNcIl0gPSBcInNldEdsb2JhbHNcIjtcbiAgZXZlbnRzW1wiVVBEQVRFX0dMT0JBTFNcIl0gPSBcInVwZGF0ZUdsb2JhbHNcIjtcbiAgZXZlbnRzW1wiR0xPQkFMU19VUERBVEVEXCJdID0gXCJnbG9iYWxzVXBkYXRlZFwiO1xuICBldmVudHNbXCJSRUdJU1RFUl9TVUJTQ1JJUFRJT05cIl0gPSBcInJlZ2lzdGVyU3Vic2NyaXB0aW9uXCI7XG4gIGV2ZW50c1tcIlBSRVZJRVdfS0VZRE9XTlwiXSA9IFwicHJldmlld0tleWRvd25cIjtcbiAgZXZlbnRzW1wiU0VMRUNUX1NUT1JZXCJdID0gXCJzZWxlY3RTdG9yeVwiO1xuICBldmVudHNbXCJTVE9SSUVTX0NPTExBUFNFX0FMTFwiXSA9IFwic3Rvcmllc0NvbGxhcHNlQWxsXCI7XG4gIGV2ZW50c1tcIlNUT1JJRVNfRVhQQU5EX0FMTFwiXSA9IFwic3Rvcmllc0V4cGFuZEFsbFwiO1xuICBldmVudHNbXCJET0NTX1JFTkRFUkVEXCJdID0gXCJkb2NzUmVuZGVyZWRcIjtcbiAgZXZlbnRzW1wiU0hBUkVEX1NUQVRFX0NIQU5HRURcIl0gPSBcInNoYXJlZFN0YXRlQ2hhbmdlZFwiO1xuICBldmVudHNbXCJTSEFSRURfU1RBVEVfU0VUXCJdID0gXCJzaGFyZWRTdGF0ZVNldFwiO1xuICBldmVudHNbXCJOQVZJR0FURV9VUkxcIl0gPSBcIm5hdmlnYXRlVXJsXCI7XG4gIGV2ZW50c1tcIlVQREFURV9RVUVSWV9QQVJBTVNcIl0gPSBcInVwZGF0ZVF1ZXJ5UGFyYW1zXCI7XG59KShldmVudHMgfHwgKGV2ZW50cyA9IHt9KSk7XG5cbmV4cG9ydCBkZWZhdWx0IGV2ZW50czsgLy8gRW5hYmxlczogYGltcG9ydCAqIGFzIEV2ZW50cyBmcm9tIC4uLmAgb3IgYGltcG9ydCB7IENIQU5ORUxfQ1JFQVRFRCB9IGFzIEV2ZW50cyBmcm9tIC4uLmBcbi8vIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2RcblxudmFyIENIQU5ORUxfQ1JFQVRFRCA9IGV2ZW50cy5DSEFOTkVMX0NSRUFURUQsXG4gICAgQ09ORklHX0VSUk9SID0gZXZlbnRzLkNPTkZJR19FUlJPUixcbiAgICBTVE9SWV9JTkRFWF9JTlZBTElEQVRFRCA9IGV2ZW50cy5TVE9SWV9JTkRFWF9JTlZBTElEQVRFRCxcbiAgICBTVE9SWV9TUEVDSUZJRUQgPSBldmVudHMuU1RPUllfU1BFQ0lGSUVELFxuICAgIFNFVF9TVE9SSUVTID0gZXZlbnRzLlNFVF9TVE9SSUVTLFxuICAgIFNFVF9DVVJSRU5UX1NUT1JZID0gZXZlbnRzLlNFVF9DVVJSRU5UX1NUT1JZLFxuICAgIENVUlJFTlRfU1RPUllfV0FTX1NFVCA9IGV2ZW50cy5DVVJSRU5UX1NUT1JZX1dBU19TRVQsXG4gICAgRk9SQ0VfUkVfUkVOREVSID0gZXZlbnRzLkZPUkNFX1JFX1JFTkRFUixcbiAgICBGT1JDRV9SRU1PVU5UID0gZXZlbnRzLkZPUkNFX1JFTU9VTlQsXG4gICAgU1RPUllfUFJFUEFSRUQgPSBldmVudHMuU1RPUllfUFJFUEFSRUQsXG4gICAgU1RPUllfQ0hBTkdFRCA9IGV2ZW50cy5TVE9SWV9DSEFOR0VELFxuICAgIFNUT1JZX1VOQ0hBTkdFRCA9IGV2ZW50cy5TVE9SWV9VTkNIQU5HRUQsXG4gICAgU1RPUllfUkVOREVSRUQgPSBldmVudHMuU1RPUllfUkVOREVSRUQsXG4gICAgU1RPUllfTUlTU0lORyA9IGV2ZW50cy5TVE9SWV9NSVNTSU5HLFxuICAgIFNUT1JZX0VSUk9SRUQgPSBldmVudHMuU1RPUllfRVJST1JFRCxcbiAgICBTVE9SWV9USFJFV19FWENFUFRJT04gPSBldmVudHMuU1RPUllfVEhSRVdfRVhDRVBUSU9OLFxuICAgIFNUT1JZX1JFTkRFUl9QSEFTRV9DSEFOR0VEID0gZXZlbnRzLlNUT1JZX1JFTkRFUl9QSEFTRV9DSEFOR0VELFxuICAgIFVQREFURV9TVE9SWV9BUkdTID0gZXZlbnRzLlVQREFURV9TVE9SWV9BUkdTLFxuICAgIFNUT1JZX0FSR1NfVVBEQVRFRCA9IGV2ZW50cy5TVE9SWV9BUkdTX1VQREFURUQsXG4gICAgUkVTRVRfU1RPUllfQVJHUyA9IGV2ZW50cy5SRVNFVF9TVE9SWV9BUkdTLFxuICAgIFNFVF9HTE9CQUxTID0gZXZlbnRzLlNFVF9HTE9CQUxTLFxuICAgIFVQREFURV9HTE9CQUxTID0gZXZlbnRzLlVQREFURV9HTE9CQUxTLFxuICAgIEdMT0JBTFNfVVBEQVRFRCA9IGV2ZW50cy5HTE9CQUxTX1VQREFURUQsXG4gICAgUkVHSVNURVJfU1VCU0NSSVBUSU9OID0gZXZlbnRzLlJFR0lTVEVSX1NVQlNDUklQVElPTixcbiAgICBQUkVWSUVXX0tFWURPV04gPSBldmVudHMuUFJFVklFV19LRVlET1dOLFxuICAgIFNFTEVDVF9TVE9SWSA9IGV2ZW50cy5TRUxFQ1RfU1RPUlksXG4gICAgU1RPUklFU19DT0xMQVBTRV9BTEwgPSBldmVudHMuU1RPUklFU19DT0xMQVBTRV9BTEwsXG4gICAgU1RPUklFU19FWFBBTkRfQUxMID0gZXZlbnRzLlNUT1JJRVNfRVhQQU5EX0FMTCxcbiAgICBET0NTX1JFTkRFUkVEID0gZXZlbnRzLkRPQ1NfUkVOREVSRUQsXG4gICAgU0hBUkVEX1NUQVRFX0NIQU5HRUQgPSBldmVudHMuU0hBUkVEX1NUQVRFX0NIQU5HRUQsXG4gICAgU0hBUkVEX1NUQVRFX1NFVCA9IGV2ZW50cy5TSEFSRURfU1RBVEVfU0VULFxuICAgIE5BVklHQVRFX1VSTCA9IGV2ZW50cy5OQVZJR0FURV9VUkwsXG4gICAgVVBEQVRFX1FVRVJZX1BBUkFNUyA9IGV2ZW50cy5VUERBVEVfUVVFUllfUEFSQU1TOyAvLyBVc2VkIHRvIGJyZWFrIG91dCBvZiB0aGUgY3VycmVudCByZW5kZXIgd2l0aG91dCBzaG93aW5nIGEgcmVkYm94XG5cbmV4cG9ydCB7IENIQU5ORUxfQ1JFQVRFRCwgQ09ORklHX0VSUk9SLCBTVE9SWV9JTkRFWF9JTlZBTElEQVRFRCwgU1RPUllfU1BFQ0lGSUVELCBTRVRfU1RPUklFUywgU0VUX0NVUlJFTlRfU1RPUlksIENVUlJFTlRfU1RPUllfV0FTX1NFVCwgRk9SQ0VfUkVfUkVOREVSLCBGT1JDRV9SRU1PVU5ULCBTVE9SWV9QUkVQQVJFRCwgU1RPUllfQ0hBTkdFRCwgU1RPUllfVU5DSEFOR0VELCBTVE9SWV9SRU5ERVJFRCwgU1RPUllfTUlTU0lORywgU1RPUllfRVJST1JFRCwgU1RPUllfVEhSRVdfRVhDRVBUSU9OLCBTVE9SWV9SRU5ERVJfUEhBU0VfQ0hBTkdFRCwgVVBEQVRFX1NUT1JZX0FSR1MsIFNUT1JZX0FSR1NfVVBEQVRFRCwgUkVTRVRfU1RPUllfQVJHUywgU0VUX0dMT0JBTFMsIFVQREFURV9HTE9CQUxTLCBHTE9CQUxTX1VQREFURUQsIFJFR0lTVEVSX1NVQlNDUklQVElPTiwgUFJFVklFV19LRVlET1dOLCBTRUxFQ1RfU1RPUlksIFNUT1JJRVNfQ09MTEFQU0VfQUxMLCBTVE9SSUVTX0VYUEFORF9BTEwsIERPQ1NfUkVOREVSRUQsIFNIQVJFRF9TVEFURV9DSEFOR0VELCBTSEFSRURfU1RBVEVfU0VULCBOQVZJR0FURV9VUkwsIFVQREFURV9RVUVSWV9QQVJBTVMgfTtcbmV4cG9ydCB2YXIgSUdOT1JFRF9FWENFUFRJT04gPSBuZXcgRXJyb3IoJ2lnbm9yZWRFeGNlcHRpb24nKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/core-events/dist/esm/index.js\n')},"../../node_modules/@storybook/csf/dist/SBType.js":function(module,exports,__webpack_require__){"use strict";eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jc2YvZGlzdC9TQlR5cGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/csf/dist/SBType.js\n")},"../../node_modules/@storybook/csf/dist/index.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nvar _exportNames = {\n sanitize: true,\n toId: true,\n storyNameFromExport: true,\n isExportStory: true,\n parseKind: true\n};\nexports.isExportStory = isExportStory;\nexports.parseKind = exports.storyNameFromExport = exports.toId = exports.sanitize = void 0;\n\nvar _startCase = _interopRequireDefault(__webpack_require__("../../node_modules/lodash/startCase.js"));\n\nvar _story = __webpack_require__("../../node_modules/@storybook/csf/dist/story.js");\n\nObject.keys(_story).forEach(function (key) {\n if (key === "default" || key === "__esModule") return;\n if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _story[key];\n }\n });\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { 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\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(n); 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\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n/**\n * Remove punctuation and illegal characters from a story ID.\n *\n * See https://gist.github.com/davidjrice/9d2af51100e41c6c4b4a\n */\nvar sanitize = function sanitize(string) {\n return string.toLowerCase() // eslint-disable-next-line no-useless-escape\n .replace(/[ ’–—―′¿\'`~!@#$%^&*()_|+\\-=?;:\'",.<>\\{\\}\\[\\]\\\\\\/]/gi, \'-\').replace(/-+/g, \'-\').replace(/^-+/, \'\').replace(/-+$/, \'\');\n};\n\nexports.sanitize = sanitize;\n\nvar sanitizeSafe = function sanitizeSafe(string, part) {\n var sanitized = sanitize(string);\n\n if (sanitized === \'\') {\n throw new Error("Invalid ".concat(part, " \'").concat(string, "\', must include alphanumeric characters"));\n }\n\n return sanitized;\n};\n/**\n * Generate a storybook ID from a component/kind and story name.\n */\n\n\nvar toId = function toId(kind, name) {\n return "".concat(sanitizeSafe(kind, \'kind\')).concat(name ? "--".concat(sanitizeSafe(name, \'name\')) : \'\');\n};\n/**\n * Transform a CSF named export into a readable story name\n */\n\n\nexports.toId = toId;\n\nvar storyNameFromExport = function storyNameFromExport(key) {\n return (0, _startCase["default"])(key);\n};\n\nexports.storyNameFromExport = storyNameFromExport;\n\nfunction matches(storyKey, arrayOrRegex) {\n if (Array.isArray(arrayOrRegex)) {\n return arrayOrRegex.includes(storyKey);\n }\n\n return storyKey.match(arrayOrRegex);\n}\n/**\n * Does a named export match CSF inclusion/exclusion options?\n */\n\n\nfunction isExportStory(key, _ref) {\n var includeStories = _ref.includeStories,\n excludeStories = _ref.excludeStories;\n return (// https://babeljs.io/docs/en/babel-plugin-transform-modules-commonjs\n key !== \'__esModule\' && (!includeStories || matches(key, includeStories)) && (!excludeStories || !matches(key, excludeStories))\n );\n}\n\n/**\n * Parse out the component/kind name from a path, using the given separator config.\n */\nvar parseKind = function parseKind(kind, _ref2) {\n var rootSeparator = _ref2.rootSeparator,\n groupSeparator = _ref2.groupSeparator;\n\n var _kind$split = kind.split(rootSeparator, 2),\n _kind$split2 = _slicedToArray(_kind$split, 2),\n root = _kind$split2[0],\n remainder = _kind$split2[1];\n\n var groups = (remainder || kind).split(groupSeparator).filter(function (i) {\n return !!i;\n }); // when there\'s no remainder, it means the root wasn\'t found/split\n\n return {\n root: remainder ? root : null,\n groups: groups\n };\n};\n\nexports.parseKind = parseKind;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2NzZi9kaXN0L2luZGV4LmpzPzI2ZGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDLG1CQUFPLENBQUMsd0NBQWtCOztBQUVsRSxhQUFhLG1CQUFPLENBQUMsaURBQVM7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7QUFFRCxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsaUNBQWlDLDJIQUEySDs7QUFFNUosNkJBQTZCLGtLQUFrSzs7QUFFL0wsaURBQWlELGdCQUFnQixnRUFBZ0Usd0RBQXdELDZEQUE2RCxzREFBc0Qsa0hBQWtIOztBQUU5WixzQ0FBc0MsdURBQXVELHVDQUF1QyxTQUFTLE9BQU8sa0JBQWtCLEVBQUUsYUFBYTs7QUFFckwsd0NBQXdDLGdGQUFnRixlQUFlLGVBQWUsZ0JBQWdCLG9CQUFvQixNQUFNLDBDQUEwQywrQkFBK0IsYUFBYSxxQkFBcUIsbUNBQW1DLEVBQUUsRUFBRSxjQUFjLFdBQVcsVUFBVSxFQUFFLFVBQVUsTUFBTSxpREFBaUQsRUFBRSxVQUFVLGtCQUFrQixFQUFFLEVBQUUsYUFBYTs7QUFFdmUsK0JBQStCLG9DQUFvQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsU0FBUyxFQUFFO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRyxFQUFFOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svY3NmL2Rpc3QvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBfZXhwb3J0TmFtZXMgPSB7XG4gIHNhbml0aXplOiB0cnVlLFxuICB0b0lkOiB0cnVlLFxuICBzdG9yeU5hbWVGcm9tRXhwb3J0OiB0cnVlLFxuICBpc0V4cG9ydFN0b3J5OiB0cnVlLFxuICBwYXJzZUtpbmQ6IHRydWVcbn07XG5leHBvcnRzLmlzRXhwb3J0U3RvcnkgPSBpc0V4cG9ydFN0b3J5O1xuZXhwb3J0cy5wYXJzZUtpbmQgPSBleHBvcnRzLnN0b3J5TmFtZUZyb21FeHBvcnQgPSBleHBvcnRzLnRvSWQgPSBleHBvcnRzLnNhbml0aXplID0gdm9pZCAwO1xuXG52YXIgX3N0YXJ0Q2FzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImxvZGFzaC9zdGFydENhc2VcIikpO1xuXG52YXIgX3N0b3J5ID0gcmVxdWlyZShcIi4vc3RvcnlcIik7XG5cbk9iamVjdC5rZXlzKF9zdG9yeSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3N0b3J5W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG4pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLyoqXG4gKiBSZW1vdmUgcHVuY3R1YXRpb24gYW5kIGlsbGVnYWwgY2hhcmFjdGVycyBmcm9tIGEgc3RvcnkgSUQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RhdmlkanJpY2UvOWQyYWY1MTEwMGU0MWM2YzRiNGFcbiAqL1xudmFyIHNhbml0aXplID0gZnVuY3Rpb24gc2FuaXRpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgLnJlcGxhY2UoL1sg4oCZ4oCT4oCU4oCV4oCywr8nYH4hQCMkJV4mKigpX3wrXFwtPT87OidcIiwuPD5cXHtcXH1cXFtcXF1cXFxcXFwvXS9naSwgJy0nKS5yZXBsYWNlKC8tKy9nLCAnLScpLnJlcGxhY2UoL14tKy8sICcnKS5yZXBsYWNlKC8tKyQvLCAnJyk7XG59O1xuXG5leHBvcnRzLnNhbml0aXplID0gc2FuaXRpemU7XG5cbnZhciBzYW5pdGl6ZVNhZmUgPSBmdW5jdGlvbiBzYW5pdGl6ZVNhZmUoc3RyaW5nLCBwYXJ0KSB7XG4gIHZhciBzYW5pdGl6ZWQgPSBzYW5pdGl6ZShzdHJpbmcpO1xuXG4gIGlmIChzYW5pdGl6ZWQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBcIi5jb25jYXQocGFydCwgXCIgJ1wiKS5jb25jYXQoc3RyaW5nLCBcIicsIG11c3QgaW5jbHVkZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1wiKSk7XG4gIH1cblxuICByZXR1cm4gc2FuaXRpemVkO1xufTtcbi8qKlxuICogR2VuZXJhdGUgYSBzdG9yeWJvb2sgSUQgZnJvbSBhIGNvbXBvbmVudC9raW5kIGFuZCBzdG9yeSBuYW1lLlxuICovXG5cblxudmFyIHRvSWQgPSBmdW5jdGlvbiB0b0lkKGtpbmQsIG5hbWUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KHNhbml0aXplU2FmZShraW5kLCAna2luZCcpKS5jb25jYXQobmFtZSA/IFwiLS1cIi5jb25jYXQoc2FuaXRpemVTYWZlKG5hbWUsICduYW1lJykpIDogJycpO1xufTtcbi8qKlxuICogVHJhbnNmb3JtIGEgQ1NGIG5hbWVkIGV4cG9ydCBpbnRvIGEgcmVhZGFibGUgc3RvcnkgbmFtZVxuICovXG5cblxuZXhwb3J0cy50b0lkID0gdG9JZDtcblxudmFyIHN0b3J5TmFtZUZyb21FeHBvcnQgPSBmdW5jdGlvbiBzdG9yeU5hbWVGcm9tRXhwb3J0KGtleSkge1xuICByZXR1cm4gKDAsIF9zdGFydENhc2VbXCJkZWZhdWx0XCJdKShrZXkpO1xufTtcblxuZXhwb3J0cy5zdG9yeU5hbWVGcm9tRXhwb3J0ID0gc3RvcnlOYW1lRnJvbUV4cG9ydDtcblxuZnVuY3Rpb24gbWF0Y2hlcyhzdG9yeUtleSwgYXJyYXlPclJlZ2V4KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycmF5T3JSZWdleCkpIHtcbiAgICByZXR1cm4gYXJyYXlPclJlZ2V4LmluY2x1ZGVzKHN0b3J5S2V5KTtcbiAgfVxuXG4gIHJldHVybiBzdG9yeUtleS5tYXRjaChhcnJheU9yUmVnZXgpO1xufVxuLyoqXG4gKiBEb2VzIGEgbmFtZWQgZXhwb3J0IG1hdGNoIENTRiBpbmNsdXNpb24vZXhjbHVzaW9uIG9wdGlvbnM/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0V4cG9ydFN0b3J5KGtleSwgX3JlZikge1xuICB2YXIgaW5jbHVkZVN0b3JpZXMgPSBfcmVmLmluY2x1ZGVTdG9yaWVzLFxuICAgICAgZXhjbHVkZVN0b3JpZXMgPSBfcmVmLmV4Y2x1ZGVTdG9yaWVzO1xuICByZXR1cm4gKC8vIGh0dHBzOi8vYmFiZWxqcy5pby9kb2NzL2VuL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy1jb21tb25qc1xuICAgIGtleSAhPT0gJ19fZXNNb2R1bGUnICYmICghaW5jbHVkZVN0b3JpZXMgfHwgbWF0Y2hlcyhrZXksIGluY2x1ZGVTdG9yaWVzKSkgJiYgKCFleGNsdWRlU3RvcmllcyB8fCAhbWF0Y2hlcyhrZXksIGV4Y2x1ZGVTdG9yaWVzKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBvdXQgdGhlIGNvbXBvbmVudC9raW5kIG5hbWUgZnJvbSBhIHBhdGgsIHVzaW5nIHRoZSBnaXZlbiBzZXBhcmF0b3IgY29uZmlnLlxuICovXG52YXIgcGFyc2VLaW5kID0gZnVuY3Rpb24gcGFyc2VLaW5kKGtpbmQsIF9yZWYyKSB7XG4gIHZhciByb290U2VwYXJhdG9yID0gX3JlZjIucm9vdFNlcGFyYXRvcixcbiAgICAgIGdyb3VwU2VwYXJhdG9yID0gX3JlZjIuZ3JvdXBTZXBhcmF0b3I7XG5cbiAgdmFyIF9raW5kJHNwbGl0ID0ga2luZC5zcGxpdChyb290U2VwYXJhdG9yLCAyKSxcbiAgICAgIF9raW5kJHNwbGl0MiA9IF9zbGljZWRUb0FycmF5KF9raW5kJHNwbGl0LCAyKSxcbiAgICAgIHJvb3QgPSBfa2luZCRzcGxpdDJbMF0sXG4gICAgICByZW1haW5kZXIgPSBfa2luZCRzcGxpdDJbMV07XG5cbiAgdmFyIGdyb3VwcyA9IChyZW1haW5kZXIgfHwga2luZCkuc3BsaXQoZ3JvdXBTZXBhcmF0b3IpLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgIHJldHVybiAhIWk7XG4gIH0pOyAvLyB3aGVuIHRoZXJlJ3Mgbm8gcmVtYWluZGVyLCBpdCBtZWFucyB0aGUgcm9vdCB3YXNuJ3QgZm91bmQvc3BsaXRcblxuICByZXR1cm4ge1xuICAgIHJvb3Q6IHJlbWFpbmRlciA/IHJvb3QgOiBudWxsLFxuICAgIGdyb3VwczogZ3JvdXBzXG4gIH07XG59O1xuXG5leHBvcnRzLnBhcnNlS2luZCA9IHBhcnNlS2luZDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/csf/dist/index.js\n')},"../../node_modules/@storybook/csf/dist/story.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _SBType = __webpack_require__("../../node_modules/@storybook/csf/dist/SBType.js");\n\nObject.keys(_SBType).forEach(function (key) {\n if (key === "default" || key === "__esModule") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _SBType[key];\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2NzZi9kaXN0L3N0b3J5LmpzPzZlYWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWI7QUFDQTtBQUNBLENBQUM7O0FBRUQsY0FBYyxtQkFBTyxDQUFDLGtEQUFVOztBQUVoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2NzZi9kaXN0L3N0b3J5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfU0JUeXBlID0gcmVxdWlyZShcIi4vU0JUeXBlXCIpO1xuXG5PYmplY3Qua2V5cyhfU0JUeXBlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfU0JUeXBlW2tleV07XG4gICAgfVxuICB9KTtcbn0pOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/@storybook/csf/dist/story.js\n')},"../../node_modules/acorn-jsx/index.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/core-js/modules/es.symbol.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.symbol.description.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.object.to-string.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.symbol.iterator.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.string.iterator.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.array.iterator.js");\n\n__webpack_require__("../../node_modules/core-js/modules/web.dom-collections.iterator.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.object.define-property.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.reflect.get.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.object.get-own-property-descriptor.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.object.create.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.object.set-prototype-of.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.reflect.construct.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.object.get-prototype-of.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.weak-map.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.function.name.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.array.slice.js");\n\n__webpack_require__("../../node_modules/core-js/modules/es.parse-int.js");\n\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\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 _get() {\n if (typeof Reflect !== "undefined" && Reflect.get) {\n _get = Reflect.get;\n } else {\n _get = function _get(target, property, receiver) {\n var base = _superPropBase(target, property);\n\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(arguments.length < 3 ? target : receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get.apply(this, arguments);\n}\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = _getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\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 _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 _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 _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === "object" || typeof call === "function")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError("Derived constructors may only return object or undefined");\n }\n\n return _assertThisInitialized(self);\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 _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 Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\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\nvar XHTMLEntities = __webpack_require__("../../node_modules/acorn-jsx/xhtml.js");\n\nvar hexNumber = /^[\\da-fA-F]+$/;\nvar decimalNumber = /^\\d+$/; // The map to `acorn-jsx` tokens from `acorn` namespace objects.\n\nvar acornJsxMap = new WeakMap(); // Get the original tokens for the given `acorn` namespace object.\n\nfunction getJsxTokens(acorn) {\n acorn = acorn.Parser.acorn || acorn;\n var acornJsx = acornJsxMap.get(acorn);\n\n if (!acornJsx) {\n var tt = acorn.tokTypes;\n var TokContext = acorn.TokContext;\n var TokenType = acorn.TokenType;\n var tc_oTag = new TokContext(\'<tag\', false);\n var tc_cTag = new TokContext(\'</tag\', false);\n var tc_expr = new TokContext(\'<tag>...</tag>\', true, true);\n var tokContexts = {\n tc_oTag: tc_oTag,\n tc_cTag: tc_cTag,\n tc_expr: tc_expr\n };\n var tokTypes = {\n jsxName: new TokenType(\'jsxName\'),\n jsxText: new TokenType(\'jsxText\', {\n beforeExpr: true\n }),\n jsxTagStart: new TokenType(\'jsxTagStart\', {\n startsExpr: true\n }),\n jsxTagEnd: new TokenType(\'jsxTagEnd\')\n };\n\n tokTypes.jsxTagStart.updateContext = function () {\n this.context.push(tc_expr); // treat as beginning of JSX expression\n\n this.context.push(tc_oTag); // start opening tag context\n\n this.exprAllowed = false;\n };\n\n tokTypes.jsxTagEnd.updateContext = function (prevType) {\n var out = this.context.pop();\n\n if (out === tc_oTag && prevType === tt.slash || out === tc_cTag) {\n this.context.pop();\n this.exprAllowed = this.curContext() === tc_expr;\n } else {\n this.exprAllowed = true;\n }\n };\n\n acornJsx = {\n tokContexts: tokContexts,\n tokTypes: tokTypes\n };\n acornJsxMap.set(acorn, acornJsx);\n }\n\n return acornJsx;\n} // Transforms JSX element name to string.\n\n\nfunction getQualifiedJSXName(object) {\n if (!object) return object;\n if (object.type === \'JSXIdentifier\') return object.name;\n if (object.type === \'JSXNamespacedName\') return object.namespace.name + \':\' + object.name.name;\n if (object.type === \'JSXMemberExpression\') return getQualifiedJSXName(object.object) + \'.\' + getQualifiedJSXName(object.property);\n}\n\nmodule.exports = function (options) {\n options = options || {};\n return function (Parser) {\n return plugin({\n allowNamespaces: options.allowNamespaces !== false,\n allowNamespacedObjects: !!options.allowNamespacedObjects\n }, Parser);\n };\n}; // This is `tokTypes` of the peer dep.\n// This can be different instances from the actual `tokTypes` this plugin uses.\n\n\nObject.defineProperty(module.exports, "tokTypes", {\n get: function get_tokTypes() {\n return getJsxTokens(__webpack_require__("../../node_modules/acorn/dist/acorn.mjs")).tokTypes;\n },\n configurable: true,\n enumerable: true\n});\n\nfunction plugin(options, Parser) {\n var acorn = Parser.acorn || __webpack_require__("../../node_modules/acorn/dist/acorn.mjs");\n\n var acornJsx = getJsxTokens(acorn);\n var tt = acorn.tokTypes;\n var tok = acornJsx.tokTypes;\n var tokContexts = acorn.tokContexts;\n var tc_oTag = acornJsx.tokContexts.tc_oTag;\n var tc_cTag = acornJsx.tokContexts.tc_cTag;\n var tc_expr = acornJsx.tokContexts.tc_expr;\n var isNewLine = acorn.isNewLine;\n var isIdentifierStart = acorn.isIdentifierStart;\n var isIdentifierChar = acorn.isIdentifierChar;\n return /*#__PURE__*/function (_Parser) {\n _inherits(_class, _Parser);\n\n var _super = _createSuper(_class);\n\n function _class() {\n _classCallCheck(this, _class);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(_class, [{\n key: "jsx_readToken",\n value: // Reads inline JSX contents token.\n function jsx_readToken() {\n var out = \'\',\n chunkStart = this.pos;\n\n for (;;) {\n if (this.pos >= this.input.length) this.raise(this.start, \'Unterminated JSX contents\');\n var ch = this.input.charCodeAt(this.pos);\n\n switch (ch) {\n case 60: // \'<\'\n\n case 123:\n // \'{\'\n if (this.pos === this.start) {\n if (ch === 60 && this.exprAllowed) {\n ++this.pos;\n return this.finishToken(tok.jsxTagStart);\n }\n\n return this.getTokenFromCode(ch);\n }\n\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(tok.jsxText, out);\n\n case 38:\n // \'&\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readEntity();\n chunkStart = this.pos;\n break;\n\n case 62: // \'>\'\n\n case 125:\n // \'}\'\n this.raise(this.pos, "Unexpected token `" + this.input[this.pos] + "`. Did you mean `" + (ch === 62 ? ">" : "}") + "` or " + "`{\\"" + this.input[this.pos] + "\\"}" + "`?");\n\n default:\n if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readNewLine(true);\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n\n }\n }\n }\n }, {\n key: "jsx_readNewLine",\n value: function jsx_readNewLine(normalizeCRLF) {\n var ch = this.input.charCodeAt(this.pos);\n var out;\n ++this.pos;\n\n if (ch === 13 && this.input.charCodeAt(this.pos) === 10) {\n ++this.pos;\n out = normalizeCRLF ? \'\\n\' : \'\\r\\n\';\n } else {\n out = String.fromCharCode(ch);\n }\n\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n\n return out;\n }\n }, {\n key: "jsx_readString",\n value: function jsx_readString(quote) {\n var out = \'\',\n chunkStart = ++this.pos;\n\n for (;;) {\n if (this.pos >= this.input.length) this.raise(this.start, \'Unterminated string constant\');\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) break;\n\n if (ch === 38) {\n // \'&\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readEntity();\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readNewLine(false);\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(tt.string, out);\n }\n }, {\n key: "jsx_readEntity",\n value: function jsx_readEntity() {\n var str = \'\',\n count = 0,\n entity;\n var ch = this.input[this.pos];\n if (ch !== \'&\') this.raise(this.pos, \'Entity must start with an ampersand\');\n var startPos = ++this.pos;\n\n while (this.pos < this.input.length && count++ < 10) {\n ch = this.input[this.pos++];\n\n if (ch === \';\') {\n if (str[0] === \'#\') {\n if (str[1] === \'x\') {\n str = str.substr(2);\n if (hexNumber.test(str)) entity = String.fromCharCode(parseInt(str, 16));\n } else {\n str = str.substr(1);\n if (decimalNumber.test(str)) entity = String.fromCharCode(parseInt(str, 10));\n }\n } else {\n entity = XHTMLEntities[str];\n }\n\n break;\n }\n\n str += ch;\n }\n\n if (!entity) {\n this.pos = startPos;\n return \'&\';\n }\n\n return entity;\n } // Read a JSX identifier (valid tag or attribute name).\n //\n // Optimized version since JSX identifiers can\'t contain\n // escape characters and so can be read as single slice.\n // Also assumes that first character was already checked\n // by isIdentifierStart in readToken.\n\n }, {\n key: "jsx_readWord",\n value: function jsx_readWord() {\n var ch,\n start = this.pos;\n\n do {\n ch = this.input.charCodeAt(++this.pos);\n } while (isIdentifierChar(ch) || ch === 45); // \'-\'\n\n\n return this.finishToken(tok.jsxName, this.input.slice(start, this.pos));\n } // Parse next token as JSX identifier\n\n }, {\n key: "jsx_parseIdentifier",\n value: function jsx_parseIdentifier() {\n var node = this.startNode();\n if (this.type === tok.jsxName) node.name = this.value;else if (this.type.keyword) node.name = this.type.keyword;else this.unexpected();\n this.next();\n return this.finishNode(node, \'JSXIdentifier\');\n } // Parse namespaced identifier.\n\n }, {\n key: "jsx_parseNamespacedName",\n value: function jsx_parseNamespacedName() {\n var startPos = this.start,\n startLoc = this.startLoc;\n var name = this.jsx_parseIdentifier();\n if (!options.allowNamespaces || !this.eat(tt.colon)) return name;\n var node = this.startNodeAt(startPos, startLoc);\n node.namespace = name;\n node.name = this.jsx_parseIdentifier();\n return this.finishNode(node, \'JSXNamespacedName\');\n } // Parses element name in any form - namespaced, member\n // or single identifier.\n\n }, {\n key: "jsx_parseElementName",\n value: function jsx_parseElementName() {\n if (this.type === tok.jsxTagEnd) return \'\';\n var startPos = this.start,\n startLoc = this.startLoc;\n var node = this.jsx_parseNamespacedName();\n\n if (this.type === tt.dot && node.type === \'JSXNamespacedName\' && !options.allowNamespacedObjects) {\n this.unexpected();\n }\n\n while (this.eat(tt.dot)) {\n var newNode = this.startNodeAt(startPos, startLoc);\n newNode.object = node;\n newNode.property = this.jsx_parseIdentifier();\n node = this.finishNode(newNode, \'JSXMemberExpression\');\n }\n\n return node;\n } // Parses any type of JSX attribute value.\n\n }, {\n key: "jsx_parseAttributeValue",\n value: function jsx_parseAttributeValue() {\n switch (this.type) {\n case tt.braceL:\n var node = this.jsx_parseExpressionContainer();\n if (node.expression.type === \'JSXEmptyExpression\') this.raise(node.start, \'JSX attributes must only be assigned a non-empty expression\');\n return node;\n\n case tok.jsxTagStart:\n case tt.string:\n return this.parseExprAtom();\n\n default:\n this.raise(this.start, \'JSX value should be either an expression or a quoted JSX text\');\n }\n } // JSXEmptyExpression is unique type since it doesn\'t actually parse anything,\n // and so it should start at the end of last read token (left brace) and finish\n // at the beginning of the next one (right brace).\n\n }, {\n key: "jsx_parseEmptyExpression",\n value: function jsx_parseEmptyExpression() {\n var node = this.startNodeAt(this.lastTokEnd, this.lastTokEndLoc);\n return this.finishNodeAt(node, \'JSXEmptyExpression\', this.start, this.startLoc);\n } // Parses JSX expression enclosed into curly brackets.\n\n }, {\n key: "jsx_parseExpressionContainer",\n value: function jsx_parseExpressionContainer() {\n var node = this.startNode();\n this.next();\n node.expression = this.type === tt.braceR ? this.jsx_parseEmptyExpression() : this.parseExpression();\n this.expect(tt.braceR);\n return this.finishNode(node, \'JSXExpressionContainer\');\n } // Parses following JSX attribute name-value pair.\n\n }, {\n key: "jsx_parseAttribute",\n value: function jsx_parseAttribute() {\n var node = this.startNode();\n\n if (this.eat(tt.braceL)) {\n this.expect(tt.ellipsis);\n node.argument = this.parseMaybeAssign();\n this.expect(tt.braceR);\n return this.finishNode(node, \'JSXSpreadAttribute\');\n }\n\n node.name = this.jsx_parseNamespacedName();\n node.value = this.eat(tt.eq) ? this.jsx_parseAttributeValue() : null;\n return this.finishNode(node, \'JSXAttribute\');\n } // Parses JSX opening tag starting after \'<\'.\n\n }, {\n key: "jsx_parseOpeningElementAt",\n value: function jsx_parseOpeningElementAt(startPos, startLoc) {\n var node = this.startNodeAt(startPos, startLoc);\n node.attributes = [];\n var nodeName = this.jsx_parseElementName();\n if (nodeName) node.name = nodeName;\n\n while (this.type !== tt.slash && this.type !== tok.jsxTagEnd) {\n node.attributes.push(this.jsx_parseAttribute());\n }\n\n node.selfClosing = this.eat(tt.slash);\n this.expect(tok.jsxTagEnd);\n return this.finishNode(node, nodeName ? \'JSXOpeningElement\' : \'JSXOpeningFragment\');\n } // Parses JSX closing tag starting after \'</\'.\n\n }, {\n key: "jsx_parseClosingElementAt",\n value: function jsx_parseClosingElementAt(startPos, startLoc) {\n var node = this.startNodeAt(startPos, startLoc);\n var nodeName = this.jsx_parseElementName();\n if (nodeName) node.name = nodeName;\n this.expect(tok.jsxTagEnd);\n return this.finishNode(node, nodeName ? \'JSXClosingElement\' : \'JSXClosingFragment\');\n } // Parses entire JSX element, including it\'s opening tag\n // (starting after \'<\'), attributes, contents and closing tag.\n\n }, {\n key: "jsx_parseElementAt",\n value: function jsx_parseElementAt(startPos, startLoc) {\n var node = this.startNodeAt(startPos, startLoc);\n var children = [];\n var openingElement = this.jsx_parseOpeningElementAt(startPos, startLoc);\n var closingElement = null;\n\n if (!openingElement.selfClosing) {\n contents: for (;;) {\n switch (this.type) {\n case tok.jsxTagStart:\n startPos = this.start;\n startLoc = this.startLoc;\n this.next();\n\n if (this.eat(tt.slash)) {\n closingElement = this.jsx_parseClosingElementAt(startPos, startLoc);\n break contents;\n }\n\n children.push(this.jsx_parseElementAt(startPos, startLoc));\n break;\n\n case tok.jsxText:\n children.push(this.parseExprAtom());\n break;\n\n case tt.braceL:\n children.push(this.jsx_parseExpressionContainer());\n break;\n\n default:\n this.unexpected();\n }\n }\n\n if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n this.raise(closingElement.start, \'Expected corresponding JSX closing tag for <\' + getQualifiedJSXName(openingElement.name) + \'>\');\n }\n }\n\n var fragmentOrElement = openingElement.name ? \'Element\' : \'Fragment\';\n node[\'opening\' + fragmentOrElement] = openingElement;\n node[\'closing\' + fragmentOrElement] = closingElement;\n node.children = children;\n\n if (this.type === tt.relational && this.value === "<") {\n this.raise(this.start, "Adjacent JSX elements must be wrapped in an enclosing tag");\n }\n\n return this.finishNode(node, \'JSX\' + fragmentOrElement);\n } // Parse JSX text\n\n }, {\n key: "jsx_parseText",\n value: function jsx_parseText() {\n var node = this.parseLiteral(this.value);\n node.type = "JSXText";\n return node;\n } // Parses entire JSX element from current position.\n\n }, {\n key: "jsx_parseElement",\n value: function jsx_parseElement() {\n var startPos = this.start,\n startLoc = this.startLoc;\n this.next();\n return this.jsx_parseElementAt(startPos, startLoc);\n }\n }, {\n key: "parseExprAtom",\n value: function parseExprAtom(refShortHandDefaultPos) {\n if (this.type === tok.jsxText) return this.jsx_parseText();else if (this.type === tok.jsxTagStart) return this.jsx_parseElement();else return _get(_getPrototypeOf(_class.prototype), "parseExprAtom", this).call(this, refShortHandDefaultPos);\n }\n }, {\n key: "readToken",\n value: function readToken(code) {\n var context = this.curContext();\n if (context === tc_expr) return this.jsx_readToken();\n\n if (context === tc_oTag || context === tc_cTag) {\n if (isIdentifierStart(code)) return this.jsx_readWord();\n\n if (code == 62) {\n ++this.pos;\n return this.finishToken(tok.jsxTagEnd);\n }\n\n if ((code === 34 || code === 39) && context == tc_oTag) return this.jsx_readString(code);\n }\n\n if (code === 60 && this.exprAllowed && this.input.charCodeAt(this.pos + 1) !== 33) {\n ++this.pos;\n return this.finishToken(tok.jsxTagStart);\n }\n\n return _get(_getPrototypeOf(_class.prototype), "readToken", this).call(this, code);\n }\n }, {\n key: "updateContext",\n value: function updateContext(prevType) {\n if (this.type == tt.braceL) {\n var curContext = this.curContext();\n if (curContext == tc_oTag) this.context.push(tokContexts.b_expr);else if (curContext == tc_expr) this.context.push(tokContexts.b_tmpl);else _get(_getPrototypeOf(_class.prototype), "updateContext", this).call(this, prevType);\n this.exprAllowed = true;\n } else if (this.type === tt.slash && prevType === tok.jsxTagStart) {\n this.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore\n\n this.context.push(tc_cTag); // reconsider as closing tag context\n\n this.exprAllowed = false;\n } else {\n return _get(_getPrototypeOf(_class.prototype), "updateContext", this).call(this, prevType);\n }\n }\n }], [{\n key: "acornJsx",\n get: // Expose actual `tokTypes` and `tokContexts` to other plugins.\n function get() {\n return acornJsx;\n }\n }]);\n\n return _class;\n }(Parser);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hY29ybi1qc3gvaW5kZXguanM/Zjk0NiJdLCJuYW1lcyI6WyJYSFRNTEVudGl0aWVzIiwicmVxdWlyZSIsImhleE51bWJlciIsImRlY2ltYWxOdW1iZXIiLCJhY29ybkpzeE1hcCIsImFjb3JuIiwiYWNvcm5Kc3giLCJ0dCIsIlRva0NvbnRleHQiLCJUb2tlblR5cGUiLCJ0Y19vVGFnIiwidGNfY1RhZyIsInRjX2V4cHIiLCJ0b2tDb250ZXh0cyIsInRva1R5cGVzIiwianN4TmFtZSIsImpzeFRleHQiLCJiZWZvcmVFeHByIiwianN4VGFnU3RhcnQiLCJzdGFydHNFeHByIiwianN4VGFnRW5kIiwib3V0IiwicHJldlR5cGUiLCJvYmplY3QiLCJnZXRRdWFsaWZpZWRKU1hOYW1lIiwibW9kdWxlIiwib3B0aW9ucyIsInBsdWdpbiIsImFsbG93TmFtZXNwYWNlcyIsImFsbG93TmFtZXNwYWNlZE9iamVjdHMiLCJPYmplY3QiLCJnZXQiLCJnZXRKc3hUb2tlbnMiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwiUGFyc2VyIiwidG9rIiwiaXNOZXdMaW5lIiwiaXNJZGVudGlmaWVyU3RhcnQiLCJpc0lkZW50aWZpZXJDaGFyIiwiY2h1bmtTdGFydCIsImNoIiwibm9ybWFsaXplQ1JMRiIsIlN0cmluZyIsInN0ciIsImNvdW50Iiwic3RhcnRQb3MiLCJlbnRpdHkiLCJwYXJzZUludCIsInN0YXJ0Iiwibm9kZSIsInN0YXJ0TG9jIiwibmFtZSIsIm5ld05vZGUiLCJub2RlTmFtZSIsImNoaWxkcmVuIiwib3BlbmluZ0VsZW1lbnQiLCJjbG9zaW5nRWxlbWVudCIsImNvbnRlbnRzIiwiZnJhZ21lbnRPckVsZW1lbnQiLCJjb250ZXh0IiwiY29kZSIsImN1ckNvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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LGNBQUUsS0FBRjtBQUNBLG1CQUFPLGlCQUFpQnpCLEdBQUcsQ0FBM0IsU0FBTyxDQUFQO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDeUIsSUFBSSxLQUFKQSxNQUFlQSxJQUFJLEtBQXBCLE9BQWdDRCxPQUFPLElBQTNDLFNBQ0UsT0FBTyxvQkFBUCxJQUFPLENBQVA7QUFDSDs7QUFFRCxZQUFJQyxJQUFJLEtBQUpBLE1BQWUsS0FBZkEsZUFBbUMsc0JBQXNCLFdBQXRCLE9BQXZDLElBQW1GO0FBQ2pGLFlBQUUsS0FBRjtBQUNBLGlCQUFPLGlCQUFpQnpCLEdBQUcsQ0FBM0IsV0FBTyxDQUFQO0FBQ0Q7O0FBQ0Q7QUFDRDtBQTVXSDtBQUFBO0FBQUEsYUE4V0UsaUNBQXdCO0FBQ3RCLFlBQUksYUFBYTdCLEVBQUUsQ0FBbkIsUUFBNEI7QUFDMUIsY0FBSXVELFVBQVUsR0FBRyxLQUFqQixVQUFpQixFQUFqQjtBQUNBLGNBQUlBLFVBQVUsSUFBZCxTQUEyQixrQkFBa0JqRCxXQUFXLENBQXhELE1BQTJCLEVBQTNCLEtBQ0ssSUFBSWlELFVBQVUsSUFBZCxTQUEyQixrQkFBa0JqRCxXQUFXLENBQXhELE1BQTJCLEVBQTNCLEtBQ0E7QUFDTDtBQUxGLGVBTU8sSUFBSSxjQUFjTixFQUFFLENBQWhCLFNBQTBCZSxRQUFRLEtBQUtjLEdBQUcsQ0FBOUMsYUFBNEQ7QUFDakUsaUNBRGlFLENBQ2pFLENBRGlFLENBQ3ZDOztBQUMxQiw0QkFGaUUsT0FFakUsRUFGaUUsQ0FFckM7O0FBQzVCO0FBSEssZUFJQTtBQUNMO0FBQ0Q7QUFDRjtBQTVYSDtBQUFBO0FBQUEsV0FDRTtBQUNBLHFCQUFzQjtBQUNwQjtBQUNEO0FBSkg7O0FBQUE7QUFBQTtBQThYRCIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvYWNvcm4tanN4L2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBYSFRNTEVudGl0aWVzID0gcmVxdWlyZSgnLi94aHRtbCcpO1xuXG5jb25zdCBoZXhOdW1iZXIgPSAvXltcXGRhLWZBLUZdKyQvO1xuY29uc3QgZGVjaW1hbE51bWJlciA9IC9eXFxkKyQvO1xuXG4vLyBUaGUgbWFwIHRvIGBhY29ybi1qc3hgIHRva2VucyBmcm9tIGBhY29ybmAgbmFtZXNwYWNlIG9iamVjdHMuXG5jb25zdCBhY29ybkpzeE1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbi8vIEdldCB0aGUgb3JpZ2luYWwgdG9rZW5zIGZvciB0aGUgZ2l2ZW4gYGFjb3JuYCBuYW1lc3BhY2Ugb2JqZWN0LlxuZnVuY3Rpb24gZ2V0SnN4VG9rZW5zKGFjb3JuKSB7XG4gIGFjb3JuID0gYWNvcm4uUGFyc2VyLmFjb3JuIHx8IGFjb3JuO1xuICBsZXQgYWNvcm5Kc3ggPSBhY29ybkpzeE1hcC5nZXQoYWNvcm4pO1xuICBpZiAoIWFjb3JuSnN4KSB7XG4gICAgY29uc3QgdHQgPSBhY29ybi50b2tUeXBlcztcbiAgICBjb25zdCBUb2tDb250ZXh0ID0gYWNvcm4uVG9rQ29udGV4dDtcbiAgICBjb25zdCBUb2tlblR5cGUgPSBhY29ybi5Ub2tlblR5cGU7XG4gICAgY29uc3QgdGNfb1RhZyA9IG5ldyBUb2tDb250ZXh0KCc8dGFnJywgZmFsc2UpO1xuICAgIGNvbnN0IHRjX2NUYWcgPSBuZXcgVG9rQ29udGV4dCgnPC90YWcnLCBmYWxzZSk7XG4gICAgY29uc3QgdGNfZXhwciA9IG5ldyBUb2tDb250ZXh0KCc8dGFnPi4uLjwvdGFnPicsIHRydWUsIHRydWUpO1xuICAgIGNvbnN0IHRva0NvbnRleHRzID0ge1xuICAgICAgdGNfb1RhZzogdGNfb1RhZyxcbiAgICAgIHRjX2NUYWc6IHRjX2NUYWcsXG4gICAgICB0Y19leHByOiB0Y19leHByXG4gICAgfTtcbiAgICBjb25zdCB0b2tUeXBlcyA9IHtcbiAgICAgIGpzeE5hbWU6IG5ldyBUb2tlblR5cGUoJ2pzeE5hbWUnKSxcbiAgICAgIGpzeFRleHQ6IG5ldyBUb2tlblR5cGUoJ2pzeFRleHQnLCB7YmVmb3JlRXhwcjogdHJ1ZX0pLFxuICAgICAganN4VGFnU3RhcnQ6IG5ldyBUb2tlblR5cGUoJ2pzeFRhZ1N0YXJ0Jywge3N0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICAgIGpzeFRhZ0VuZDogbmV3IFRva2VuVHlwZSgnanN4VGFnRW5kJylcbiAgICB9O1xuXG4gICAgdG9rVHlwZXMuanN4VGFnU3RhcnQudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jb250ZXh0LnB1c2godGNfZXhwcik7IC8vIHRyZWF0IGFzIGJlZ2lubmluZyBvZiBKU1ggZXhwcmVzc2lvblxuICAgICAgdGhpcy5jb250ZXh0LnB1c2godGNfb1RhZyk7IC8vIHN0YXJ0IG9wZW5pbmcgdGFnIGNvbnRleHRcbiAgICAgIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRva1R5cGVzLmpzeFRhZ0VuZC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgICAgIGxldCBvdXQgPSB0aGlzLmNvbnRleHQucG9wKCk7XG4gICAgICBpZiAob3V0ID09PSB0Y19vVGFnICYmIHByZXZUeXBlID09PSB0dC5zbGFzaCB8fCBvdXQgPT09IHRjX2NUYWcpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBvcCgpO1xuICAgICAgICB0aGlzLmV4cHJBbGxvd2VkID0gdGhpcy5jdXJDb250ZXh0KCkgPT09IHRjX2V4cHI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWNvcm5Kc3ggPSB7IHRva0NvbnRleHRzOiB0b2tDb250ZXh0cywgdG9rVHlwZXM6IHRva1R5cGVzIH07XG4gICAgYWNvcm5Kc3hNYXAuc2V0KGFjb3JuLCBhY29ybkpzeCk7XG4gIH1cblxuICByZXR1cm4gYWNvcm5Kc3g7XG59XG5cbi8vIFRyYW5zZm9ybXMgSlNYIGVsZW1lbnQgbmFtZSB0byBzdHJpbmcuXG5cbmZ1bmN0aW9uIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KVxuICAgIHJldHVybiBvYmplY3Q7XG5cbiAgaWYgKG9iamVjdC50eXBlID09PSAnSlNYSWRlbnRpZmllcicpXG4gICAgcmV0dXJuIG9iamVjdC5uYW1lO1xuXG4gIGlmIChvYmplY3QudHlwZSA9PT0gJ0pTWE5hbWVzcGFjZWROYW1lJylcbiAgICByZXR1cm4gb2JqZWN0Lm5hbWVzcGFjZS5uYW1lICsgJzonICsgb2JqZWN0Lm5hbWUubmFtZTtcblxuICBpZiAob2JqZWN0LnR5cGUgPT09ICdKU1hNZW1iZXJFeHByZXNzaW9uJylcbiAgICByZXR1cm4gZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3Qub2JqZWN0KSArICcuJyArXG4gICAgZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3QucHJvcGVydHkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHJldHVybiBmdW5jdGlvbihQYXJzZXIpIHtcbiAgICByZXR1cm4gcGx1Z2luKHtcbiAgICAgIGFsbG93TmFtZXNwYWNlczogb3B0aW9ucy5hbGxvd05hbWVzcGFjZXMgIT09IGZhbHNlLFxuICAgICAgYWxsb3dOYW1lc3BhY2VkT2JqZWN0czogISFvcHRpb25zLmFsbG93TmFtZXNwYWNlZE9iamVjdHNcbiAgICB9LCBQYXJzZXIpO1xuICB9O1xufTtcblxuLy8gVGhpcyBpcyBgdG9rVHlwZXNgIG9mIHRoZSBwZWVyIGRlcC5cbi8vIFRoaXMgY2FuIGJlIGRpZmZlcmVudCBpbnN0YW5jZXMgZnJvbSB0aGUgYWN0dWFsIGB0b2tUeXBlc2AgdGhpcyBwbHVnaW4gdXNlcy5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgXCJ0b2tUeXBlc1wiLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0X3Rva1R5cGVzKCkge1xuICAgIHJldHVybiBnZXRKc3hUb2tlbnMocmVxdWlyZShcImFjb3JuXCIpKS50b2tUeXBlcztcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuZnVuY3Rpb24gcGx1Z2luKG9wdGlvbnMsIFBhcnNlcikge1xuICBjb25zdCBhY29ybiA9IFBhcnNlci5hY29ybiB8fCByZXF1aXJlKFwiYWNvcm5cIik7XG4gIGNvbnN0IGFjb3JuSnN4ID0gZ2V0SnN4VG9rZW5zKGFjb3JuKTtcbiAgY29uc3QgdHQgPSBhY29ybi50b2tUeXBlcztcbiAgY29uc3QgdG9rID0gYWNvcm5Kc3gudG9rVHlwZXM7XG4gIGNvbnN0IHRva0NvbnRleHRzID0gYWNvcm4udG9rQ29udGV4dHM7XG4gIGNvbnN0IHRjX29UYWcgPSBhY29ybkpzeC50b2tDb250ZXh0cy50Y19vVGFnO1xuICBjb25zdCB0Y19jVGFnID0gYWNvcm5Kc3gudG9rQ29udGV4dHMudGNfY1RhZztcbiAgY29uc3QgdGNfZXhwciA9IGFjb3JuSnN4LnRva0NvbnRleHRzLnRjX2V4cHI7XG4gIGNvbnN0IGlzTmV3TGluZSA9IGFjb3JuLmlzTmV3TGluZTtcbiAgY29uc3QgaXNJZGVudGlmaWVyU3RhcnQgPSBhY29ybi5pc0lkZW50aWZpZXJTdGFydDtcbiAgY29uc3QgaXNJZGVudGlmaWVyQ2hhciA9IGFjb3JuLmlzSWRlbnRpZmllckNoYXI7XG5cbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgUGFyc2VyIHtcbiAgICAvLyBFeHBvc2UgYWN0dWFsIGB0b2tUeXBlc2AgYW5kIGB0b2tDb250ZXh0c2AgdG8gb3RoZXIgcGx1Z2lucy5cbiAgICBzdGF0aWMgZ2V0IGFjb3JuSnN4KCkge1xuICAgICAgcmV0dXJuIGFjb3JuSnN4O1xuICAgIH1cblxuICAgIC8vIFJlYWRzIGlubGluZSBKU1ggY29udGVudHMgdG9rZW4uXG4gICAganN4X3JlYWRUb2tlbigpIHtcbiAgICAgIGxldCBvdXQgPSAnJywgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpXG4gICAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCAnVW50ZXJtaW5hdGVkIEpTWCBjb250ZW50cycpO1xuICAgICAgICBsZXQgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSA2MDogLy8gJzwnXG4gICAgICAgIGNhc2UgMTIzOiAvLyAneydcbiAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IHRoaXMuc3RhcnQpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gNjAgJiYgdGhpcy5leHByQWxsb3dlZCkge1xuICAgICAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0b2suanN4VGFnU3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5Gcm9tQ29kZShjaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0b2suanN4VGV4dCwgb3V0KTtcblxuICAgICAgICBjYXNlIDM4OiAvLyAnJidcbiAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgICAgb3V0ICs9IHRoaXMuanN4X3JlYWRFbnRpdHkoKTtcbiAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA2MjogLy8gJz4nXG4gICAgICAgIGNhc2UgMTI1OiAvLyAnfSdcbiAgICAgICAgICB0aGlzLnJhaXNlKFxuICAgICAgICAgICAgdGhpcy5wb3MsXG4gICAgICAgICAgICBcIlVuZXhwZWN0ZWQgdG9rZW4gYFwiICsgdGhpcy5pbnB1dFt0aGlzLnBvc10gKyBcImAuIERpZCB5b3UgbWVhbiBgXCIgK1xuICAgICAgICAgICAgICAoY2ggPT09IDYyID8gXCImZ3Q7XCIgOiBcIiZyYnJhY2U7XCIpICsgXCJgIG9yIFwiICsgXCJge1xcXCJcIiArIHRoaXMuaW5wdXRbdGhpcy5wb3NdICsgXCJcXFwifVwiICsgXCJgP1wiXG4gICAgICAgICAgKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpc05ld0xpbmUoY2gpKSB7XG4gICAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgICAgICBvdXQgKz0gdGhpcy5qc3hfcmVhZE5ld0xpbmUodHJ1ZSk7XG4gICAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAganN4X3JlYWROZXdMaW5lKG5vcm1hbGl6ZUNSTEYpIHtcbiAgICAgIGxldCBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgICBsZXQgb3V0O1xuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIGlmIChjaCA9PT0gMTMgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gMTApIHtcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgb3V0ID0gbm9ybWFsaXplQ1JMRiA/ICdcXG4nIDogJ1xcclxcbic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgICAgICsrdGhpcy5jdXJMaW5lO1xuICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGpzeF9yZWFkU3RyaW5nKHF1b3RlKSB7XG4gICAgICBsZXQgb3V0ID0gJycsIGNodW5rU3RhcnQgPSArK3RoaXMucG9zO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpXG4gICAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCAnVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudCcpO1xuICAgICAgICBsZXQgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSBicmVhaztcbiAgICAgICAgaWYgKGNoID09PSAzOCkgeyAvLyAnJidcbiAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgICAgb3V0ICs9IHRoaXMuanN4X3JlYWRFbnRpdHkoKTtcbiAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOZXdMaW5lKGNoKSkge1xuICAgICAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5qc3hfcmVhZE5ld0xpbmUoZmFsc2UpO1xuICAgICAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcysrKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnN0cmluZywgb3V0KTtcbiAgICB9XG5cbiAgICBqc3hfcmVhZEVudGl0eSgpIHtcbiAgICAgIGxldCBzdHIgPSAnJywgY291bnQgPSAwLCBlbnRpdHk7XG4gICAgICBsZXQgY2ggPSB0aGlzLmlucHV0W3RoaXMucG9zXTtcbiAgICAgIGlmIChjaCAhPT0gJyYnKVxuICAgICAgICB0aGlzLnJhaXNlKHRoaXMucG9zLCAnRW50aXR5IG11c3Qgc3RhcnQgd2l0aCBhbiBhbXBlcnNhbmQnKTtcbiAgICAgIGxldCBzdGFydFBvcyA9ICsrdGhpcy5wb3M7XG4gICAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHtcbiAgICAgICAgY2ggPSB0aGlzLmlucHV0W3RoaXMucG9zKytdO1xuICAgICAgICBpZiAoY2ggPT09ICc7Jykge1xuICAgICAgICAgIGlmIChzdHJbMF0gPT09ICcjJykge1xuICAgICAgICAgICAgaWYgKHN0clsxXSA9PT0gJ3gnKSB7XG4gICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMik7XG4gICAgICAgICAgICAgIGlmIChoZXhOdW1iZXIudGVzdChzdHIpKVxuICAgICAgICAgICAgICAgIGVudGl0eSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc3RyLCAxNikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgaWYgKGRlY2ltYWxOdW1iZXIudGVzdChzdHIpKVxuICAgICAgICAgICAgICAgIGVudGl0eSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc3RyLCAxMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnRpdHkgPSBYSFRNTEVudGl0aWVzW3N0cl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBjaDtcbiAgICAgIH1cbiAgICAgIGlmICghZW50aXR5KSB7XG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3M7XG4gICAgICAgIHJldHVybiAnJic7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50aXR5O1xuICAgIH1cblxuICAgIC8vIFJlYWQgYSBKU1ggaWRlbnRpZmllciAodmFsaWQgdGFnIG9yIGF0dHJpYnV0ZSBuYW1lKS5cbiAgICAvL1xuICAgIC8vIE9wdGltaXplZCB2ZXJzaW9uIHNpbmNlIEpTWCBpZGVudGlmaWVycyBjYW4ndCBjb250YWluXG4gICAgLy8gZXNjYXBlIGNoYXJhY3RlcnMgYW5kIHNvIGNhbiBiZSByZWFkIGFzIHNpbmdsZSBzbGljZS5cbiAgICAvLyBBbHNvIGFzc3VtZXMgdGhhdCBmaXJzdCBjaGFyYWN0ZXIgd2FzIGFscmVhZHkgY2hlY2tlZFxuICAgIC8vIGJ5IGlzSWRlbnRpZmllclN0YXJ0IGluIHJlYWRUb2tlbi5cblxuICAgIGpzeF9yZWFkV29yZCgpIHtcbiAgICAgIGxldCBjaCwgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIGRvIHtcbiAgICAgICAgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcyk7XG4gICAgICB9IHdoaWxlIChpc0lkZW50aWZpZXJDaGFyKGNoKSB8fCBjaCA9PT0gNDUpOyAvLyAnLSdcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHRvay5qc3hOYW1lLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0aGlzLnBvcykpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIG5leHQgdG9rZW4gYXMgSlNYIGlkZW50aWZpZXJcblxuICAgIGpzeF9wYXJzZUlkZW50aWZpZXIoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0b2suanN4TmFtZSlcbiAgICAgICAgbm9kZS5uYW1lID0gdGhpcy52YWx1ZTtcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZS5rZXl3b3JkKVxuICAgICAgICBub2RlLm5hbWUgPSB0aGlzLnR5cGUua2V5d29yZDtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy51bmV4cGVjdGVkKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWElkZW50aWZpZXInKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBuYW1lc3BhY2VkIGlkZW50aWZpZXIuXG5cbiAgICBqc3hfcGFyc2VOYW1lc3BhY2VkTmFtZSgpIHtcbiAgICAgIGxldCBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICAgIGxldCBuYW1lID0gdGhpcy5qc3hfcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgICBpZiAoIW9wdGlvbnMuYWxsb3dOYW1lc3BhY2VzIHx8ICF0aGlzLmVhdCh0dC5jb2xvbikpIHJldHVybiBuYW1lO1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBub2RlLm5hbWVzcGFjZSA9IG5hbWU7XG4gICAgICBub2RlLm5hbWUgPSB0aGlzLmpzeF9wYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWE5hbWVzcGFjZWROYW1lJyk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2VzIGVsZW1lbnQgbmFtZSBpbiBhbnkgZm9ybSAtIG5hbWVzcGFjZWQsIG1lbWJlclxuICAgIC8vIG9yIHNpbmdsZSBpZGVudGlmaWVyLlxuXG4gICAganN4X3BhcnNlRWxlbWVudE5hbWUoKSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0b2suanN4VGFnRW5kKSByZXR1cm4gJyc7XG4gICAgICBsZXQgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuanN4X3BhcnNlTmFtZXNwYWNlZE5hbWUoKTtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR0LmRvdCAmJiBub2RlLnR5cGUgPT09ICdKU1hOYW1lc3BhY2VkTmFtZScgJiYgIW9wdGlvbnMuYWxsb3dOYW1lc3BhY2VkT2JqZWN0cykge1xuICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0aGlzLmVhdCh0dC5kb3QpKSB7XG4gICAgICAgIGxldCBuZXdOb2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgICBuZXdOb2RlLm9iamVjdCA9IG5vZGU7XG4gICAgICAgIG5ld05vZGUucHJvcGVydHkgPSB0aGlzLmpzeF9wYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuZmluaXNoTm9kZShuZXdOb2RlLCAnSlNYTWVtYmVyRXhwcmVzc2lvbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgLy8gUGFyc2VzIGFueSB0eXBlIG9mIEpTWCBhdHRyaWJ1dGUgdmFsdWUuXG5cbiAgICBqc3hfcGFyc2VBdHRyaWJ1dGVWYWx1ZSgpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmpzeF9wYXJzZUV4cHJlc3Npb25Db250YWluZXIoKTtcbiAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbi50eXBlID09PSAnSlNYRW1wdHlFeHByZXNzaW9uJylcbiAgICAgICAgICB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsICdKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVzc2lvbicpO1xuICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgY2FzZSB0b2suanN4VGFnU3RhcnQ6XG4gICAgICBjYXNlIHR0LnN0cmluZzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFeHByQXRvbSgpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsICdKU1ggdmFsdWUgc2hvdWxkIGJlIGVpdGhlciBhbiBleHByZXNzaW9uIG9yIGEgcXVvdGVkIEpTWCB0ZXh0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSlNYRW1wdHlFeHByZXNzaW9uIGlzIHVuaXF1ZSB0eXBlIHNpbmNlIGl0IGRvZXNuJ3QgYWN0dWFsbHkgcGFyc2UgYW55dGhpbmcsXG4gICAgLy8gYW5kIHNvIGl0IHNob3VsZCBzdGFydCBhdCB0aGUgZW5kIG9mIGxhc3QgcmVhZCB0b2tlbiAobGVmdCBicmFjZSkgYW5kIGZpbmlzaFxuICAgIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgb25lIChyaWdodCBicmFjZSkuXG5cbiAgICBqc3hfcGFyc2VFbXB0eUV4cHJlc3Npb24oKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQodGhpcy5sYXN0VG9rRW5kLCB0aGlzLmxhc3RUb2tFbmRMb2MpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZUF0KG5vZGUsICdKU1hFbXB0eUV4cHJlc3Npb24nLCB0aGlzLnN0YXJ0LCB0aGlzLnN0YXJ0TG9jKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZXMgSlNYIGV4cHJlc3Npb24gZW5jbG9zZWQgaW50byBjdXJseSBicmFja2V0cy5cblxuICAgIGpzeF9wYXJzZUV4cHJlc3Npb25Db250YWluZXIoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIG5vZGUuZXhwcmVzc2lvbiA9IHRoaXMudHlwZSA9PT0gdHQuYnJhY2VSXG4gICAgICAgID8gdGhpcy5qc3hfcGFyc2VFbXB0eUV4cHJlc3Npb24oKVxuICAgICAgICA6IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICB0aGlzLmV4cGVjdCh0dC5icmFjZVIpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAnSlNYRXhwcmVzc2lvbkNvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBmb2xsb3dpbmcgSlNYIGF0dHJpYnV0ZSBuYW1lLXZhbHVlIHBhaXIuXG5cbiAgICBqc3hfcGFyc2VBdHRyaWJ1dGUoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICBpZiAodGhpcy5lYXQodHQuYnJhY2VMKSkge1xuICAgICAgICB0aGlzLmV4cGVjdCh0dC5lbGxpcHNpcyk7XG4gICAgICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgICAgdGhpcy5leHBlY3QodHQuYnJhY2VSKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAnSlNYU3ByZWFkQXR0cmlidXRlJyk7XG4gICAgICB9XG4gICAgICBub2RlLm5hbWUgPSB0aGlzLmpzeF9wYXJzZU5hbWVzcGFjZWROYW1lKCk7XG4gICAgICBub2RlLnZhbHVlID0gdGhpcy5lYXQodHQuZXEpID8gdGhpcy5qc3hfcGFyc2VBdHRyaWJ1dGVWYWx1ZSgpIDogbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWEF0dHJpYnV0ZScpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBKU1ggb3BlbmluZyB0YWcgc3RhcnRpbmcgYWZ0ZXIgJzwnLlxuXG4gICAganN4X3BhcnNlT3BlbmluZ0VsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpIHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICBsZXQgbm9kZU5hbWUgPSB0aGlzLmpzeF9wYXJzZUVsZW1lbnROYW1lKCk7XG4gICAgICBpZiAobm9kZU5hbWUpIG5vZGUubmFtZSA9IG5vZGVOYW1lO1xuICAgICAgd2hpbGUgKHRoaXMudHlwZSAhPT0gdHQuc2xhc2ggJiYgdGhpcy50eXBlICE9PSB0b2suanN4VGFnRW5kKVxuICAgICAgICBub2RlLmF0dHJpYnV0ZXMucHVzaCh0aGlzLmpzeF9wYXJzZUF0dHJpYnV0ZSgpKTtcbiAgICAgIG5vZGUuc2VsZkNsb3NpbmcgPSB0aGlzLmVhdCh0dC5zbGFzaCk7XG4gICAgICB0aGlzLmV4cGVjdCh0b2suanN4VGFnRW5kKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgbm9kZU5hbWUgPyAnSlNYT3BlbmluZ0VsZW1lbnQnIDogJ0pTWE9wZW5pbmdGcmFnbWVudCcpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBKU1ggY2xvc2luZyB0YWcgc3RhcnRpbmcgYWZ0ZXIgJzwvJy5cblxuICAgIGpzeF9wYXJzZUNsb3NpbmdFbGVtZW50QXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgIGxldCBub2RlTmFtZSA9IHRoaXMuanN4X3BhcnNlRWxlbWVudE5hbWUoKTtcbiAgICAgIGlmIChub2RlTmFtZSkgbm9kZS5uYW1lID0gbm9kZU5hbWU7XG4gICAgICB0aGlzLmV4cGVjdCh0b2suanN4VGFnRW5kKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgbm9kZU5hbWUgPyAnSlNYQ2xvc2luZ0VsZW1lbnQnIDogJ0pTWENsb3NpbmdGcmFnbWVudCcpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBlbnRpcmUgSlNYIGVsZW1lbnQsIGluY2x1ZGluZyBpdCdzIG9wZW5pbmcgdGFnXG4gICAgLy8gKHN0YXJ0aW5nIGFmdGVyICc8JyksIGF0dHJpYnV0ZXMsIGNvbnRlbnRzIGFuZCBjbG9zaW5nIHRhZy5cblxuICAgIGpzeF9wYXJzZUVsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpIHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICBsZXQgb3BlbmluZ0VsZW1lbnQgPSB0aGlzLmpzeF9wYXJzZU9wZW5pbmdFbGVtZW50QXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgIGxldCBjbG9zaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIGlmICghb3BlbmluZ0VsZW1lbnQuc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgY29udGVudHM6IGZvciAoOzspIHtcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgIGNhc2UgdG9rLmpzeFRhZ1N0YXJ0OlxuICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0OyBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVhdCh0dC5zbGFzaCkpIHtcbiAgICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQgPSB0aGlzLmpzeF9wYXJzZUNsb3NpbmdFbGVtZW50QXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgICAgICAgICAgYnJlYWsgY29udGVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHRoaXMuanN4X3BhcnNlRWxlbWVudEF0KHN0YXJ0UG9zLCBzdGFydExvYykpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIHRvay5qc3hUZXh0OlxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh0aGlzLnBhcnNlRXhwckF0b20oKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgdHQuYnJhY2VMOlxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh0aGlzLmpzeF9wYXJzZUV4cHJlc3Npb25Db250YWluZXIoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldFF1YWxpZmllZEpTWE5hbWUoY2xvc2luZ0VsZW1lbnQubmFtZSkgIT09IGdldFF1YWxpZmllZEpTWE5hbWUob3BlbmluZ0VsZW1lbnQubmFtZSkpIHtcbiAgICAgICAgICB0aGlzLnJhaXNlKFxuICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQuc3RhcnQsXG4gICAgICAgICAgICAnRXhwZWN0ZWQgY29ycmVzcG9uZGluZyBKU1ggY2xvc2luZyB0YWcgZm9yIDwnICsgZ2V0UXVhbGlmaWVkSlNYTmFtZShvcGVuaW5nRWxlbWVudC5uYW1lKSArICc+Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBmcmFnbWVudE9yRWxlbWVudCA9IG9wZW5pbmdFbGVtZW50Lm5hbWUgPyAnRWxlbWVudCcgOiAnRnJhZ21lbnQnO1xuXG4gICAgICBub2RlWydvcGVuaW5nJyArIGZyYWdtZW50T3JFbGVtZW50XSA9IG9wZW5pbmdFbGVtZW50O1xuICAgICAgbm9kZVsnY2xvc2luZycgKyBmcmFnbWVudE9yRWxlbWVudF0gPSBjbG9zaW5nRWxlbWVudDtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR0LnJlbGF0aW9uYWwgJiYgdGhpcy52YWx1ZSA9PT0gXCI8XCIpIHtcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIkFkamFjZW50IEpTWCBlbGVtZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZ1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWCcgKyBmcmFnbWVudE9yRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgSlNYIHRleHRcblxuICAgIGpzeF9wYXJzZVRleHQoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMucGFyc2VMaXRlcmFsKHRoaXMudmFsdWUpO1xuICAgICAgbm9kZS50eXBlID0gXCJKU1hUZXh0XCI7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZXMgZW50aXJlIEpTWCBlbGVtZW50IGZyb20gY3VycmVudCBwb3NpdGlvbi5cblxuICAgIGpzeF9wYXJzZUVsZW1lbnQoKSB7XG4gICAgICBsZXQgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLmpzeF9wYXJzZUVsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIH1cblxuICAgIHBhcnNlRXhwckF0b20ocmVmU2hvcnRIYW5kRGVmYXVsdFBvcykge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdG9rLmpzeFRleHQpXG4gICAgICAgIHJldHVybiB0aGlzLmpzeF9wYXJzZVRleHQoKTtcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdG9rLmpzeFRhZ1N0YXJ0KVxuICAgICAgICByZXR1cm4gdGhpcy5qc3hfcGFyc2VFbGVtZW50KCk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBzdXBlci5wYXJzZUV4cHJBdG9tKHJlZlNob3J0SGFuZERlZmF1bHRQb3MpO1xuICAgIH1cblxuICAgIHJlYWRUb2tlbihjb2RlKSB7XG4gICAgICBsZXQgY29udGV4dCA9IHRoaXMuY3VyQ29udGV4dCgpO1xuXG4gICAgICBpZiAoY29udGV4dCA9PT0gdGNfZXhwcikgcmV0dXJuIHRoaXMuanN4X3JlYWRUb2tlbigpO1xuXG4gICAgICBpZiAoY29udGV4dCA9PT0gdGNfb1RhZyB8fCBjb250ZXh0ID09PSB0Y19jVGFnKSB7XG4gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjb2RlKSkgcmV0dXJuIHRoaXMuanN4X3JlYWRXb3JkKCk7XG5cbiAgICAgICAgaWYgKGNvZGUgPT0gNjIpIHtcbiAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHRvay5qc3hUYWdFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChjb2RlID09PSAzNCB8fCBjb2RlID09PSAzOSkgJiYgY29udGV4dCA9PSB0Y19vVGFnKVxuICAgICAgICAgIHJldHVybiB0aGlzLmpzeF9yZWFkU3RyaW5nKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29kZSA9PT0gNjAgJiYgdGhpcy5leHByQWxsb3dlZCAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKSAhPT0gMzMpIHtcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odG9rLmpzeFRhZ1N0YXJ0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdXBlci5yZWFkVG9rZW4oY29kZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlQ29udGV4dChwcmV2VHlwZSkge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PSB0dC5icmFjZUwpIHtcbiAgICAgICAgdmFyIGN1ckNvbnRleHQgPSB0aGlzLmN1ckNvbnRleHQoKTtcbiAgICAgICAgaWYgKGN1ckNvbnRleHQgPT0gdGNfb1RhZykgdGhpcy5jb250ZXh0LnB1c2godG9rQ29udGV4dHMuYl9leHByKTtcbiAgICAgICAgZWxzZSBpZiAoY3VyQ29udGV4dCA9PSB0Y19leHByKSB0aGlzLmNvbnRleHQucHVzaCh0b2tDb250ZXh0cy5iX3RtcGwpO1xuICAgICAgICBlbHNlIHN1cGVyLnVwZGF0ZUNvbnRleHQocHJldlR5cGUpO1xuICAgICAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0dC5zbGFzaCAmJiBwcmV2VHlwZSA9PT0gdG9rLmpzeFRhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5sZW5ndGggLT0gMjsgLy8gZG8gbm90IGNvbnNpZGVyIEpTWCBleHByIC0+IEpTWCBvcGVuIHRhZyAtPiAuLi4gYW55bW9yZVxuICAgICAgICB0aGlzLmNvbnRleHQucHVzaCh0Y19jVGFnKTsgLy8gcmVjb25zaWRlciBhcyBjbG9zaW5nIHRhZyBjb250ZXh0XG4gICAgICAgIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdXBlci51cGRhdGVDb250ZXh0KHByZXZUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/acorn-jsx/index.js\n')},"../../node_modules/acorn-jsx/xhtml.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nmodule.exports = {\n quot: "\\"",\n amp: \'&\',\n apos: "\'",\n lt: \'<\',\n gt: \'>\',\n nbsp: "\\xA0",\n iexcl: "\\xA1",\n cent: "\\xA2",\n pound: "\\xA3",\n curren: "\\xA4",\n yen: "\\xA5",\n brvbar: "\\xA6",\n sect: "\\xA7",\n uml: "\\xA8",\n copy: "\\xA9",\n ordf: "\\xAA",\n laquo: "\\xAB",\n not: "\\xAC",\n shy: "\\xAD",\n reg: "\\xAE",\n macr: "\\xAF",\n deg: "\\xB0",\n plusmn: "\\xB1",\n sup2: "\\xB2",\n sup3: "\\xB3",\n acute: "\\xB4",\n micro: "\\xB5",\n para: "\\xB6",\n middot: "\\xB7",\n cedil: "\\xB8",\n sup1: "\\xB9",\n ordm: "\\xBA",\n raquo: "\\xBB",\n frac14: "\\xBC",\n frac12: "\\xBD",\n frac34: "\\xBE",\n iquest: "\\xBF",\n Agrave: "\\xC0",\n Aacute: "\\xC1",\n Acirc: "\\xC2",\n Atilde: "\\xC3",\n Auml: "\\xC4",\n Aring: "\\xC5",\n AElig: "\\xC6",\n Ccedil: "\\xC7",\n Egrave: "\\xC8",\n Eacute: "\\xC9",\n Ecirc: "\\xCA",\n Euml: "\\xCB",\n Igrave: "\\xCC",\n Iacute: "\\xCD",\n Icirc: "\\xCE",\n Iuml: "\\xCF",\n ETH: "\\xD0",\n Ntilde: "\\xD1",\n Ograve: "\\xD2",\n Oacute: "\\xD3",\n Ocirc: "\\xD4",\n Otilde: "\\xD5",\n Ouml: "\\xD6",\n times: "\\xD7",\n Oslash: "\\xD8",\n Ugrave: "\\xD9",\n Uacute: "\\xDA",\n Ucirc: "\\xDB",\n Uuml: "\\xDC",\n Yacute: "\\xDD",\n THORN: "\\xDE",\n szlig: "\\xDF",\n agrave: "\\xE0",\n aacute: "\\xE1",\n acirc: "\\xE2",\n atilde: "\\xE3",\n auml: "\\xE4",\n aring: "\\xE5",\n aelig: "\\xE6",\n ccedil: "\\xE7",\n egrave: "\\xE8",\n eacute: "\\xE9",\n ecirc: "\\xEA",\n euml: "\\xEB",\n igrave: "\\xEC",\n iacute: "\\xED",\n icirc: "\\xEE",\n iuml: "\\xEF",\n eth: "\\xF0",\n ntilde: "\\xF1",\n ograve: "\\xF2",\n oacute: "\\xF3",\n ocirc: "\\xF4",\n otilde: "\\xF5",\n ouml: "\\xF6",\n divide: "\\xF7",\n oslash: "\\xF8",\n ugrave: "\\xF9",\n uacute: "\\xFA",\n ucirc: "\\xFB",\n uuml: "\\xFC",\n yacute: "\\xFD",\n thorn: "\\xFE",\n yuml: "\\xFF",\n OElig: "\\u0152",\n oelig: "\\u0153",\n Scaron: "\\u0160",\n scaron: "\\u0161",\n Yuml: "\\u0178",\n fnof: "\\u0192",\n circ: "\\u02C6",\n tilde: "\\u02DC",\n Alpha: "\\u0391",\n Beta: "\\u0392",\n Gamma: "\\u0393",\n Delta: "\\u0394",\n Epsilon: "\\u0395",\n Zeta: "\\u0396",\n Eta: "\\u0397",\n Theta: "\\u0398",\n Iota: "\\u0399",\n Kappa: "\\u039A",\n Lambda: "\\u039B",\n Mu: "\\u039C",\n Nu: "\\u039D",\n Xi: "\\u039E",\n Omicron: "\\u039F",\n Pi: "\\u03A0",\n Rho: "\\u03A1",\n Sigma: "\\u03A3",\n Tau: "\\u03A4",\n Upsilon: "\\u03A5",\n Phi: "\\u03A6",\n Chi: "\\u03A7",\n Psi: "\\u03A8",\n Omega: "\\u03A9",\n alpha: "\\u03B1",\n beta: "\\u03B2",\n gamma: "\\u03B3",\n delta: "\\u03B4",\n epsilon: "\\u03B5",\n zeta: "\\u03B6",\n eta: "\\u03B7",\n theta: "\\u03B8",\n iota: "\\u03B9",\n kappa: "\\u03BA",\n lambda: "\\u03BB",\n mu: "\\u03BC",\n nu: "\\u03BD",\n xi: "\\u03BE",\n omicron: "\\u03BF",\n pi: "\\u03C0",\n rho: "\\u03C1",\n sigmaf: "\\u03C2",\n sigma: "\\u03C3",\n tau: "\\u03C4",\n upsilon: "\\u03C5",\n phi: "\\u03C6",\n chi: "\\u03C7",\n psi: "\\u03C8",\n omega: "\\u03C9",\n thetasym: "\\u03D1",\n upsih: "\\u03D2",\n piv: "\\u03D6",\n ensp: "\\u2002",\n emsp: "\\u2003",\n thinsp: "\\u2009",\n zwnj: "\\u200C",\n zwj: "\\u200D",\n lrm: "\\u200E",\n rlm: "\\u200F",\n ndash: "\\u2013",\n mdash: "\\u2014",\n lsquo: "\\u2018",\n rsquo: "\\u2019",\n sbquo: "\\u201A",\n ldquo: "\\u201C",\n rdquo: "\\u201D",\n bdquo: "\\u201E",\n dagger: "\\u2020",\n Dagger: "\\u2021",\n bull: "\\u2022",\n hellip: "\\u2026",\n permil: "\\u2030",\n prime: "\\u2032",\n Prime: "\\u2033",\n lsaquo: "\\u2039",\n rsaquo: "\\u203A",\n oline: "\\u203E",\n frasl: "\\u2044",\n euro: "\\u20AC",\n image: "\\u2111",\n weierp: "\\u2118",\n real: "\\u211C",\n trade: "\\u2122",\n alefsym: "\\u2135",\n larr: "\\u2190",\n uarr: "\\u2191",\n rarr: "\\u2192",\n darr: "\\u2193",\n harr: "\\u2194",\n crarr: "\\u21B5",\n lArr: "\\u21D0",\n uArr: "\\u21D1",\n rArr: "\\u21D2",\n dArr: "\\u21D3",\n hArr: "\\u21D4",\n forall: "\\u2200",\n part: "\\u2202",\n exist: "\\u2203",\n empty: "\\u2205",\n nabla: "\\u2207",\n isin: "\\u2208",\n notin: "\\u2209",\n ni: "\\u220B",\n prod: "\\u220F",\n sum: "\\u2211",\n minus: "\\u2212",\n lowast: "\\u2217",\n radic: "\\u221A",\n prop: "\\u221D",\n infin: "\\u221E",\n ang: "\\u2220",\n and: "\\u2227",\n or: "\\u2228",\n cap: "\\u2229",\n cup: "\\u222A",\n \'int\': "\\u222B",\n there4: "\\u2234",\n sim: "\\u223C",\n cong: "\\u2245",\n asymp: "\\u2248",\n ne: "\\u2260",\n equiv: "\\u2261",\n le: "\\u2264",\n ge: "\\u2265",\n sub: "\\u2282",\n sup: "\\u2283",\n nsub: "\\u2284",\n sube: "\\u2286",\n supe: "\\u2287",\n oplus: "\\u2295",\n otimes: "\\u2297",\n perp: "\\u22A5",\n sdot: "\\u22C5",\n lceil: "\\u2308",\n rceil: "\\u2309",\n lfloor: "\\u230A",\n rfloor: "\\u230B",\n lang: "\\u2329",\n rang: "\\u232A",\n loz: "\\u25CA",\n spades: "\\u2660",\n clubs: "\\u2663",\n hearts: "\\u2665",\n diams: "\\u2666"\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hY29ybi1qc3gveGh0bWwuanM/ZjE2ZSJdLCJuYW1lcyI6WyJtb2R1bGUiLCJxdW90IiwiYW1wIiwiYXBvcyIsImx0IiwiZ3QiLCJuYnNwIiwiaWV4Y2wiLCJjZW50IiwicG91bmQiLCJjdXJyZW4iLCJ5ZW4iLCJicnZiYXIiLCJzZWN0IiwidW1sIiwiY29weSIsIm9yZGYiLCJsYXF1byIsIm5vdCIsInNoeSIsInJlZyIsIm1hY3IiLCJkZWciLCJwbHVzbW4iLCJzdXAyIiwic3VwMyIsImFjdXRlIiwibWljcm8iLCJwYXJhIiwibWlkZG90IiwiY2VkaWwiLCJzdXAxIiwib3JkbSIsInJhcXVvIiwiZnJhYzE0IiwiZnJhYzEyIiwiZnJhYzM0IiwiaXF1ZXN0IiwiQWdyYXZlIiwiQWFjdXRlIiwiQWNpcmMiLCJBdGlsZGUiLCJBdW1sIiwiQXJpbmciLCJBRWxpZyIsIkNjZWRpbCIsIkVncmF2ZSIsIkVhY3V0ZSIsIkVjaXJjIiwiRXVtbCIsIklncmF2ZSIsIklhY3V0ZSIsIkljaXJjIiwiSXVtbCIsIkVUSCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjIiwiT3RpbGRlIiwiT3VtbCIsInRpbWVzIiwiT3NsYXNoIiwiVWdyYXZlIiwiVWFjdXRlIiwiVWNpcmMiLCJVdW1sIiwiWWFjdXRlIiwiVEhPUk4iLCJzemxpZyIsImFncmF2ZSIsImFhY3V0ZSIsImFjaXJjIiwiYXRpbGRlIiwiYXVtbCIsImFyaW5nIiwiYWVsaWciLCJjY2VkaWwiLCJlZ3JhdmUiLCJlYWN1dGUiLCJlY2lyYyIsImV1bWwiLCJpZ3JhdmUiLCJpYWN1dGUiLCJpY2lyYyIsIml1bWwiLCJldGgiLCJudGlsZGUiLCJvZ3JhdmUiLCJvYWN1dGUiLCJvY2lyYyIsIm90aWxkZSIsIm91bWwiLCJkaXZpZGUiLCJvc2xhc2giLCJ1Z3JhdmUiLCJ1YWN1dGUiLCJ1Y2lyYyIsInV1bWwiLCJ5YWN1dGUiLCJ0aG9ybiIsInl1bWwiLCJPRWxpZyIsIm9lbGlnIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWXVtbCIsImZub2YiLCJjaXJjIiwidGlsZGUiLCJBbHBoYSIsIkJldGEiLCJHYW1tYSIsIkRlbHRhIiwiRXBzaWxvbiIsIlpldGEiLCJFdGEiLCJUaGV0YSIsIklvdGEiLCJLYXBwYSIsIkxhbWJkYSIsIk11IiwiTnUiLCJYaSIsIk9taWNyb24iLCJQaSIsIlJobyIsIlNpZ21hIiwiVGF1IiwiVXBzaWxvbiIsIlBoaSIsIkNoaSIsIlBzaSIsIk9tZWdhIiwiYWxwaGEiLCJiZXRhIiwiZ2FtbWEiLCJkZWx0YSIsImVwc2lsb24iLCJ6ZXRhIiwiZXRhIiwidGhldGEiLCJpb3RhIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51IiwieGkiLCJvbWljcm9uIiwicGkiLCJyaG8iLCJzaWdtYWYiLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJwaGkiLCJjaGkiLCJwc2kiLCJvbWVnYSIsInRoZXRhc3ltIiwidXBzaWgiLCJwaXYiLCJlbnNwIiwiZW1zcCIsInRoaW5zcCIsInp3bmoiLCJ6d2oiLCJscm0iLCJybG0iLCJuZGFzaCIsIm1kYXNoIiwibHNxdW8iLCJyc3F1byIsInNicXVvIiwibGRxdW8iLCJyZHF1byIsImJkcXVvIiwiZGFnZ2VyIiwiRGFnZ2VyIiwiYnVsbCIsImhlbGxpcCIsInBlcm1pbCIsInByaW1lIiwiUHJpbWUiLCJsc2FxdW8iLCJyc2FxdW8iLCJvbGluZSIsImZyYXNsIiwiZXVybyIsImltYWdlIiwid2VpZXJwIiwicmVhbCIsInRyYWRlIiwiYWxlZnN5bSIsImxhcnIiLCJ1YXJyIiwicmFyciIsImRhcnIiLCJoYXJyIiwiY3JhcnIiLCJsQXJyIiwidUFyciIsInJBcnIiLCJkQXJyIiwiaEFyciIsImZvcmFsbCIsInBhcnQiLCJleGlzdCIsImVtcHR5IiwibmFibGEiLCJpc2luIiwibm90aW4iLCJuaSIsInByb2QiLCJzdW0iLCJtaW51cyIsImxvd2FzdCIsInJhZGljIiwicHJvcCIsImluZmluIiwiYW5nIiwiYW5kIiwib3IiLCJjYXAiLCJjdXAiLCJ0aGVyZTQiLCJzaW0iLCJjb25nIiwiYXN5bXAiLCJuZSIsImVxdWl2IiwibGUiLCJnZSIsInN1YiIsInN1cCIsIm5zdWIiLCJzdWJlIiwic3VwZSIsIm9wbHVzIiwib3RpbWVzIiwicGVycCIsInNkb3QiLCJsY2VpbCIsInJjZWlsIiwibGZsb29yIiwicmZsb29yIiwibGFuZyIsInJhbmciLCJsb3oiLCJzcGFkZXMiLCJjbHVicyIsImhlYXJ0cyIsImRpYW1zIl0sIm1hcHBpbmdzIjoiOztBQUFBQSxNQUFNLENBQU5BLFVBQWlCO0FBQ2ZDLE1BQUksRUFEVztBQUVmQyxLQUFHLEVBRlk7QUFHZkMsTUFBSSxFQUhXO0FBSWZDLElBQUUsRUFKYTtBQUtmQyxJQUFFLEVBTGE7QUFNZkMsTUFBSSxFQU5XO0FBT2ZDLE9BQUssRUFQVTtBQVFmQyxNQUFJLEVBUlc7QUFTZkMsT0FBSyxFQVRVO0FBVWZDLFFBQU0sRUFWUztBQVdmQyxLQUFHLEVBWFk7QUFZZkMsUUFBTSxFQVpTO0FBYWZDLE1BQUksRUFiVztBQWNmQyxLQUFHLEVBZFk7QUFlZkMsTUFBSSxFQWZXO0FBZ0JmQyxNQUFJLEVBaEJXO0FBaUJmQyxPQUFLLEVBakJVO0FBa0JmQyxLQUFHLEVBbEJZO0FBbUJmQyxLQUFHLEVBbkJZO0FBb0JmQyxLQUFHLEVBcEJZO0FBcUJmQyxNQUFJLEVBckJXO0FBc0JmQyxLQUFHLEVBdEJZO0FBdUJmQyxRQUFNLEVBdkJTO0FBd0JmQyxNQUFJLEVBeEJXO0FBeUJmQyxNQUFJLEVBekJXO0FBMEJmQyxPQUFLLEVBMUJVO0FBMkJmQyxPQUFLLEVBM0JVO0FBNEJmQyxNQUFJLEVBNUJXO0FBNkJmQyxRQUFNLEVBN0JTO0FBOEJmQyxPQUFLLEVBOUJVO0FBK0JmQyxNQUFJLEVBL0JXO0FBZ0NmQyxNQUFJLEVBaENXO0FBaUNmQyxPQUFLLEVBakNVO0FBa0NmQyxRQUFNLEVBbENTO0FBbUNmQyxRQUFNLEVBbkNTO0FBb0NmQyxRQUFNLEVBcENTO0FBcUNmQyxRQUFNLEVBckNTO0FBc0NmQyxRQUFNLEVBdENTO0FBdUNmQyxRQUFNLEVBdkNTO0FBd0NmQyxPQUFLLEVBeENVO0FBeUNmQyxRQUFNLEVBekNTO0FBMENmQyxNQUFJLEVBMUNXO0FBMkNmQyxPQUFLLEVBM0NVO0FBNENmQyxPQUFLLEVBNUNVO0FBNkNmQyxRQUFNLEVBN0NTO0FBOENmQyxRQUFNLEVBOUNTO0FBK0NmQyxRQUFNLEVBL0NTO0FBZ0RmQyxPQUFLLEVBaERVO0FBaURmQyxNQUFJLEVBakRXO0FBa0RmQyxRQUFNLEVBbERTO0FBbURmQyxRQUFNLEVBbkRTO0FBb0RmQyxPQUFLLEVBcERVO0FBcURmQyxNQUFJLEVBckRXO0FBc0RmQyxLQUFHLEVBdERZO0FBdURmQyxRQUFNLEVBdkRTO0FBd0RmQyxRQUFNLEVBeERTO0FBeURmQyxRQUFNLEVBekRTO0FBMERmQyxPQUFLLEVBMURVO0FBMkRmQyxRQUFNLEVBM0RTO0FBNERmQyxNQUFJLEVBNURXO0FBNkRmQyxPQUFLLEVBN0RVO0FBOERmQyxRQUFNLEVBOURTO0FBK0RmQyxRQUFNLEVBL0RTO0FBZ0VmQyxRQUFNLEVBaEVTO0FBaUVmQyxPQUFLLEVBakVVO0FBa0VmQyxNQUFJLEVBbEVXO0FBbUVmQyxRQUFNLEVBbkVTO0FBb0VmQyxPQUFLLEVBcEVVO0FBcUVmQyxPQUFLLEVBckVVO0FBc0VmQyxRQUFNLEVBdEVTO0FBdUVmQyxRQUFNLEVBdkVTO0FBd0VmQyxPQUFLLEVBeEVVO0FBeUVmQyxRQUFNLEVBekVTO0FBMEVmQyxNQUFJLEVBMUVXO0FBMkVmQyxPQUFLLEVBM0VVO0FBNEVmQyxPQUFLLEVBNUVVO0FBNkVmQyxRQUFNLEVBN0VTO0FBOEVmQyxRQUFNLEVBOUVTO0FBK0VmQyxRQUFNLEVBL0VTO0FBZ0ZmQyxPQUFLLEVBaEZVO0FBaUZmQyxNQUFJLEVBakZXO0FBa0ZmQyxRQUFNLEVBbEZTO0FBbUZmQyxRQUFNLEVBbkZTO0FBb0ZmQyxPQUFLLEVBcEZVO0FBcUZmQyxNQUFJLEVBckZXO0FBc0ZmQyxLQUFHLEVBdEZZO0FBdUZmQyxRQUFNLEVBdkZTO0FBd0ZmQyxRQUFNLEVBeEZTO0FBeUZmQyxRQUFNLEVBekZTO0FBMEZmQyxPQUFLLEVBMUZVO0FBMkZmQyxRQUFNLEVBM0ZTO0FBNEZmQyxNQUFJLEVBNUZXO0FBNkZmQyxRQUFNLEVBN0ZTO0FBOEZmQyxRQUFNLEVBOUZTO0FBK0ZmQyxRQUFNLEVBL0ZTO0FBZ0dmQyxRQUFNLEVBaEdTO0FBaUdmQyxPQUFLLEVBakdVO0FBa0dmQyxNQUFJLEVBbEdXO0FBbUdmQyxRQUFNLEVBbkdTO0FBb0dmQyxPQUFLLEVBcEdVO0FBcUdmQyxNQUFJLEVBckdXO0FBc0dmQyxPQUFLLEVBdEdVO0FBdUdmQyxPQUFLLEVBdkdVO0FBd0dmQyxRQUFNLEVBeEdTO0FBeUdmQyxRQUFNLEVBekdTO0FBMEdmQyxNQUFJLEVBMUdXO0FBMkdmQyxNQUFJLEVBM0dXO0FBNEdmQyxNQUFJLEVBNUdXO0FBNkdmQyxPQUFLLEVBN0dVO0FBOEdmQyxPQUFLLEVBOUdVO0FBK0dmQyxNQUFJLEVBL0dXO0FBZ0hmQyxPQUFLLEVBaEhVO0FBaUhmQyxPQUFLLEVBakhVO0FBa0hmQyxTQUFPLEVBbEhRO0FBbUhmQyxNQUFJLEVBbkhXO0FBb0hmQyxLQUFHLEVBcEhZO0FBcUhmQyxPQUFLLEVBckhVO0FBc0hmQyxNQUFJLEVBdEhXO0FBdUhmQyxPQUFLLEVBdkhVO0FBd0hmQyxRQUFNLEVBeEhTO0FBeUhmQyxJQUFFLEVBekhhO0FBMEhmQyxJQUFFLEVBMUhhO0FBMkhmQyxJQUFFLEVBM0hhO0FBNEhmQyxTQUFPLEVBNUhRO0FBNkhmQyxJQUFFLEVBN0hhO0FBOEhmQyxLQUFHLEVBOUhZO0FBK0hmQyxPQUFLLEVBL0hVO0FBZ0lmQyxLQUFHLEVBaElZO0FBaUlmQyxTQUFPLEVBaklRO0FBa0lmQyxLQUFHLEVBbElZO0FBbUlmQyxLQUFHLEVBbklZO0FBb0lmQyxLQUFHLEVBcElZO0FBcUlmQyxPQUFLLEVBcklVO0FBc0lmQyxPQUFLLEVBdElVO0FBdUlmQyxNQUFJLEVBdklXO0FBd0lmQyxPQUFLLEVBeElVO0FBeUlmQyxPQUFLLEVBeklVO0FBMElmQyxTQUFPLEVBMUlRO0FBMklmQyxNQUFJLEVBM0lXO0FBNElmQyxLQUFHLEVBNUlZO0FBNklmQyxPQUFLLEVBN0lVO0FBOElmQyxNQUFJLEVBOUlXO0FBK0lmQyxPQUFLLEVBL0lVO0FBZ0pmQyxRQUFNLEVBaEpTO0FBaUpmQyxJQUFFLEVBakphO0FBa0pmQyxJQUFFLEVBbEphO0FBbUpmQyxJQUFFLEVBbkphO0FBb0pmQyxTQUFPLEVBcEpRO0FBcUpmQyxJQUFFLEVBckphO0FBc0pmQyxLQUFHLEVBdEpZO0FBdUpmQyxRQUFNLEVBdkpTO0FBd0pmQyxPQUFLLEVBeEpVO0FBeUpmQyxLQUFHLEVBekpZO0FBMEpmQyxTQUFPLEVBMUpRO0FBMkpmQyxLQUFHLEVBM0pZO0FBNEpmQyxLQUFHLEVBNUpZO0FBNkpmQyxLQUFHLEVBN0pZO0FBOEpmQyxPQUFLLEVBOUpVO0FBK0pmQyxVQUFRLEVBL0pPO0FBZ0tmQyxPQUFLLEVBaEtVO0FBaUtmQyxLQUFHLEVBaktZO0FBa0tmQyxNQUFJLEVBbEtXO0FBbUtmQyxNQUFJLEVBbktXO0FBb0tmQyxRQUFNLEVBcEtTO0FBcUtmQyxNQUFJLEVBcktXO0FBc0tmQyxLQUFHLEVBdEtZO0FBdUtmQyxLQUFHLEVBdktZO0FBd0tmQyxLQUFHLEVBeEtZO0FBeUtmQyxPQUFLLEVBektVO0FBMEtmQyxPQUFLLEVBMUtVO0FBMktmQyxPQUFLLEVBM0tVO0FBNEtmQyxPQUFLLEVBNUtVO0FBNktmQyxPQUFLLEVBN0tVO0FBOEtmQyxPQUFLLEVBOUtVO0FBK0tmQyxPQUFLLEVBL0tVO0FBZ0xmQyxPQUFLLEVBaExVO0FBaUxmQyxRQUFNLEVBakxTO0FBa0xmQyxRQUFNLEVBbExTO0FBbUxmQyxNQUFJLEVBbkxXO0FBb0xmQyxRQUFNLEVBcExTO0FBcUxmQyxRQUFNLEVBckxTO0FBc0xmQyxPQUFLLEVBdExVO0FBdUxmQyxPQUFLLEVBdkxVO0FBd0xmQyxRQUFNLEVBeExTO0FBeUxmQyxRQUFNLEVBekxTO0FBMExmQyxPQUFLLEVBMUxVO0FBMkxmQyxPQUFLLEVBM0xVO0FBNExmQyxNQUFJLEVBNUxXO0FBNkxmQyxPQUFLLEVBN0xVO0FBOExmQyxRQUFNLEVBOUxTO0FBK0xmQyxNQUFJLEVBL0xXO0FBZ01mQyxPQUFLLEVBaE1VO0FBaU1mQyxTQUFPLEVBak1RO0FBa01mQyxNQUFJLEVBbE1XO0FBbU1mQyxNQUFJLEVBbk1XO0FBb01mQyxNQUFJLEVBcE1XO0FBcU1mQyxNQUFJLEVBck1XO0FBc01mQyxNQUFJLEVBdE1XO0FBdU1mQyxPQUFLLEVBdk1VO0FBd01mQyxNQUFJLEVBeE1XO0FBeU1mQyxNQUFJLEVBek1XO0FBME1mQyxNQUFJLEVBMU1XO0FBMk1mQyxNQUFJLEVBM01XO0FBNE1mQyxNQUFJLEVBNU1XO0FBNk1mQyxRQUFNLEVBN01TO0FBOE1mQyxNQUFJLEVBOU1XO0FBK01mQyxPQUFLLEVBL01VO0FBZ05mQyxPQUFLLEVBaE5VO0FBaU5mQyxPQUFLLEVBak5VO0FBa05mQyxNQUFJLEVBbE5XO0FBbU5mQyxPQUFLLEVBbk5VO0FBb05mQyxJQUFFLEVBcE5hO0FBcU5mQyxNQUFJLEVBck5XO0FBc05mQyxLQUFHLEVBdE5ZO0FBdU5mQyxPQUFLLEVBdk5VO0FBd05mQyxRQUFNLEVBeE5TO0FBeU5mQyxPQUFLLEVBek5VO0FBME5mQyxNQUFJLEVBMU5XO0FBMk5mQyxPQUFLLEVBM05VO0FBNE5mQyxLQUFHLEVBNU5ZO0FBNk5mQyxLQUFHLEVBN05ZO0FBOE5mQyxJQUFFLEVBOU5hO0FBK05mQyxLQUFHLEVBL05ZO0FBZ09mQyxLQUFHLEVBaE9ZO0FBaU9mLFNBak9lO0FBa09mQyxRQUFNLEVBbE9TO0FBbU9mQyxLQUFHLEVBbk9ZO0FBb09mQyxNQUFJLEVBcE9XO0FBcU9mQyxPQUFLLEVBck9VO0FBc09mQyxJQUFFLEVBdE9hO0FBdU9mQyxPQUFLLEVBdk9VO0FBd09mQyxJQUFFLEVBeE9hO0FBeU9mQyxJQUFFLEVBek9hO0FBME9mQyxLQUFHLEVBMU9ZO0FBMk9mQyxLQUFHLEVBM09ZO0FBNE9mQyxNQUFJLEVBNU9XO0FBNk9mQyxNQUFJLEVBN09XO0FBOE9mQyxNQUFJLEVBOU9XO0FBK09mQyxPQUFLLEVBL09VO0FBZ1BmQyxRQUFNLEVBaFBTO0FBaVBmQyxNQUFJLEVBalBXO0FBa1BmQyxNQUFJLEVBbFBXO0FBbVBmQyxPQUFLLEVBblBVO0FBb1BmQyxPQUFLLEVBcFBVO0FBcVBmQyxRQUFNLEVBclBTO0FBc1BmQyxRQUFNLEVBdFBTO0FBdVBmQyxNQUFJLEVBdlBXO0FBd1BmQyxNQUFJLEVBeFBXO0FBeVBmQyxLQUFHLEVBelBZO0FBMFBmQyxRQUFNLEVBMVBTO0FBMlBmQyxPQUFLLEVBM1BVO0FBNFBmQyxRQUFNLEVBNVBTO0FBNlBmQyxPQUFLLEVBQUU7QUE3UFEsQ0FBakI1UCIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvYWNvcm4tanN4L3hodG1sLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHF1b3Q6ICdcXHUwMDIyJyxcbiAgYW1wOiAnJicsXG4gIGFwb3M6ICdcXHUwMDI3JyxcbiAgbHQ6ICc8JyxcbiAgZ3Q6ICc+JyxcbiAgbmJzcDogJ1xcdTAwQTAnLFxuICBpZXhjbDogJ1xcdTAwQTEnLFxuICBjZW50OiAnXFx1MDBBMicsXG4gIHBvdW5kOiAnXFx1MDBBMycsXG4gIGN1cnJlbjogJ1xcdTAwQTQnLFxuICB5ZW46ICdcXHUwMEE1JyxcbiAgYnJ2YmFyOiAnXFx1MDBBNicsXG4gIHNlY3Q6ICdcXHUwMEE3JyxcbiAgdW1sOiAnXFx1MDBBOCcsXG4gIGNvcHk6ICdcXHUwMEE5JyxcbiAgb3JkZjogJ1xcdTAwQUEnLFxuICBsYXF1bzogJ1xcdTAwQUInLFxuICBub3Q6ICdcXHUwMEFDJyxcbiAgc2h5OiAnXFx1MDBBRCcsXG4gIHJlZzogJ1xcdTAwQUUnLFxuICBtYWNyOiAnXFx1MDBBRicsXG4gIGRlZzogJ1xcdTAwQjAnLFxuICBwbHVzbW46ICdcXHUwMEIxJyxcbiAgc3VwMjogJ1xcdTAwQjInLFxuICBzdXAzOiAnXFx1MDBCMycsXG4gIGFjdXRlOiAnXFx1MDBCNCcsXG4gIG1pY3JvOiAnXFx1MDBCNScsXG4gIHBhcmE6ICdcXHUwMEI2JyxcbiAgbWlkZG90OiAnXFx1MDBCNycsXG4gIGNlZGlsOiAnXFx1MDBCOCcsXG4gIHN1cDE6ICdcXHUwMEI5JyxcbiAgb3JkbTogJ1xcdTAwQkEnLFxuICByYXF1bzogJ1xcdTAwQkInLFxuICBmcmFjMTQ6ICdcXHUwMEJDJyxcbiAgZnJhYzEyOiAnXFx1MDBCRCcsXG4gIGZyYWMzNDogJ1xcdTAwQkUnLFxuICBpcXVlc3Q6ICdcXHUwMEJGJyxcbiAgQWdyYXZlOiAnXFx1MDBDMCcsXG4gIEFhY3V0ZTogJ1xcdTAwQzEnLFxuICBBY2lyYzogJ1xcdTAwQzInLFxuICBBdGlsZGU6ICdcXHUwMEMzJyxcbiAgQXVtbDogJ1xcdTAwQzQnLFxuICBBcmluZzogJ1xcdTAwQzUnLFxuICBBRWxpZzogJ1xcdTAwQzYnLFxuICBDY2VkaWw6ICdcXHUwMEM3JyxcbiAgRWdyYXZlOiAnXFx1MDBDOCcsXG4gIEVhY3V0ZTogJ1xcdTAwQzknLFxuICBFY2lyYzogJ1xcdTAwQ0EnLFxuICBFdW1sOiAnXFx1MDBDQicsXG4gIElncmF2ZTogJ1xcdTAwQ0MnLFxuICBJYWN1dGU6ICdcXHUwMENEJyxcbiAgSWNpcmM6ICdcXHUwMENFJyxcbiAgSXVtbDogJ1xcdTAwQ0YnLFxuICBFVEg6ICdcXHUwMEQwJyxcbiAgTnRpbGRlOiAnXFx1MDBEMScsXG4gIE9ncmF2ZTogJ1xcdTAwRDInLFxuICBPYWN1dGU6ICdcXHUwMEQzJyxcbiAgT2NpcmM6ICdcXHUwMEQ0JyxcbiAgT3RpbGRlOiAnXFx1MDBENScsXG4gIE91bWw6ICdcXHUwMEQ2JyxcbiAgdGltZXM6ICdcXHUwMEQ3JyxcbiAgT3NsYXNoOiAnXFx1MDBEOCcsXG4gIFVncmF2ZTogJ1xcdTAwRDknLFxuICBVYWN1dGU6ICdcXHUwMERBJyxcbiAgVWNpcmM6ICdcXHUwMERCJyxcbiAgVXVtbDogJ1xcdTAwREMnLFxuICBZYWN1dGU6ICdcXHUwMEREJyxcbiAgVEhPUk46ICdcXHUwMERFJyxcbiAgc3psaWc6ICdcXHUwMERGJyxcbiAgYWdyYXZlOiAnXFx1MDBFMCcsXG4gIGFhY3V0ZTogJ1xcdTAwRTEnLFxuICBhY2lyYzogJ1xcdTAwRTInLFxuICBhdGlsZGU6ICdcXHUwMEUzJyxcbiAgYXVtbDogJ1xcdTAwRTQnLFxuICBhcmluZzogJ1xcdTAwRTUnLFxuICBhZWxpZzogJ1xcdTAwRTYnLFxuICBjY2VkaWw6ICdcXHUwMEU3JyxcbiAgZWdyYXZlOiAnXFx1MDBFOCcsXG4gIGVhY3V0ZTogJ1xcdTAwRTknLFxuICBlY2lyYzogJ1xcdTAwRUEnLFxuICBldW1sOiAnXFx1MDBFQicsXG4gIGlncmF2ZTogJ1xcdTAwRUMnLFxuICBpYWN1dGU6ICdcXHUwMEVEJyxcbiAgaWNpcmM6ICdcXHUwMEVFJyxcbiAgaXVtbDogJ1xcdTAwRUYnLFxuICBldGg6ICdcXHUwMEYwJyxcbiAgbnRpbGRlOiAnXFx1MDBGMScsXG4gIG9ncmF2ZTogJ1xcdTAwRjInLFxuICBvYWN1dGU6ICdcXHUwMEYzJyxcbiAgb2NpcmM6ICdcXHUwMEY0JyxcbiAgb3RpbGRlOiAnXFx1MDBGNScsXG4gIG91bWw6ICdcXHUwMEY2JyxcbiAgZGl2aWRlOiAnXFx1MDBGNycsXG4gIG9zbGFzaDogJ1xcdTAwRjgnLFxuICB1Z3JhdmU6ICdcXHUwMEY5JyxcbiAgdWFjdXRlOiAnXFx1MDBGQScsXG4gIHVjaXJjOiAnXFx1MDBGQicsXG4gIHV1bWw6ICdcXHUwMEZDJyxcbiAgeWFjdXRlOiAnXFx1MDBGRCcsXG4gIHRob3JuOiAnXFx1MDBGRScsXG4gIHl1bWw6ICdcXHUwMEZGJyxcbiAgT0VsaWc6ICdcXHUwMTUyJyxcbiAgb2VsaWc6ICdcXHUwMTUzJyxcbiAgU2Nhcm9uOiAnXFx1MDE2MCcsXG4gIHNjYXJvbjogJ1xcdTAxNjEnLFxuICBZdW1sOiAnXFx1MDE3OCcsXG4gIGZub2Y6ICdcXHUwMTkyJyxcbiAgY2lyYzogJ1xcdTAyQzYnLFxuICB0aWxkZTogJ1xcdTAyREMnLFxuICBBbHBoYTogJ1xcdTAzOTEnLFxuICBCZXRhOiAnXFx1MDM5MicsXG4gIEdhbW1hOiAnXFx1MDM5MycsXG4gIERlbHRhOiAnXFx1MDM5NCcsXG4gIEVwc2lsb246ICdcXHUwMzk1JyxcbiAgWmV0YTogJ1xcdTAzOTYnLFxuICBFdGE6ICdcXHUwMzk3JyxcbiAgVGhldGE6ICdcXHUwMzk4JyxcbiAgSW90YTogJ1xcdTAzOTknLFxuICBLYXBwYTogJ1xcdTAzOUEnLFxuICBMYW1iZGE6ICdcXHUwMzlCJyxcbiAgTXU6ICdcXHUwMzlDJyxcbiAgTnU6ICdcXHUwMzlEJyxcbiAgWGk6ICdcXHUwMzlFJyxcbiAgT21pY3JvbjogJ1xcdTAzOUYnLFxuICBQaTogJ1xcdTAzQTAnLFxuICBSaG86ICdcXHUwM0ExJyxcbiAgU2lnbWE6ICdcXHUwM0EzJyxcbiAgVGF1OiAnXFx1MDNBNCcsXG4gIFVwc2lsb246ICdcXHUwM0E1JyxcbiAgUGhpOiAnXFx1MDNBNicsXG4gIENoaTogJ1xcdTAzQTcnLFxuICBQc2k6ICdcXHUwM0E4JyxcbiAgT21lZ2E6ICdcXHUwM0E5JyxcbiAgYWxwaGE6ICdcXHUwM0IxJyxcbiAgYmV0YTogJ1xcdTAzQjInLFxuICBnYW1tYTogJ1xcdTAzQjMnLFxuICBkZWx0YTogJ1xcdTAzQjQnLFxuICBlcHNpbG9uOiAnXFx1MDNCNScsXG4gIHpldGE6ICdcXHUwM0I2JyxcbiAgZXRhOiAnXFx1MDNCNycsXG4gIHRoZXRhOiAnXFx1MDNCOCcsXG4gIGlvdGE6ICdcXHUwM0I5JyxcbiAga2FwcGE6ICdcXHUwM0JBJyxcbiAgbGFtYmRhOiAnXFx1MDNCQicsXG4gIG11OiAnXFx1MDNCQycsXG4gIG51OiAnXFx1MDNCRCcsXG4gIHhpOiAnXFx1MDNCRScsXG4gIG9taWNyb246ICdcXHUwM0JGJyxcbiAgcGk6ICdcXHUwM0MwJyxcbiAgcmhvOiAnXFx1MDNDMScsXG4gIHNpZ21hZjogJ1xcdTAzQzInLFxuICBzaWdtYTogJ1xcdTAzQzMnLFxuICB0YXU6ICdcXHUwM0M0JyxcbiAgdXBzaWxvbjogJ1xcdTAzQzUnLFxuICBwaGk6ICdcXHUwM0M2JyxcbiAgY2hpOiAnXFx1MDNDNycsXG4gIHBzaTogJ1xcdTAzQzgnLFxuICBvbWVnYTogJ1xcdTAzQzknLFxuICB0aGV0YXN5bTogJ1xcdTAzRDEnLFxuICB1cHNpaDogJ1xcdTAzRDInLFxuICBwaXY6ICdcXHUwM0Q2JyxcbiAgZW5zcDogJ1xcdTIwMDInLFxuICBlbXNwOiAnXFx1MjAwMycsXG4gIHRoaW5zcDogJ1xcdTIwMDknLFxuICB6d25qOiAnXFx1MjAwQycsXG4gIHp3ajogJ1xcdTIwMEQnLFxuICBscm06ICdcXHUyMDBFJyxcbiAgcmxtOiAnXFx1MjAwRicsXG4gIG5kYXNoOiAnXFx1MjAxMycsXG4gIG1kYXNoOiAnXFx1MjAxNCcsXG4gIGxzcXVvOiAnXFx1MjAxOCcsXG4gIHJzcXVvOiAnXFx1MjAxOScsXG4gIHNicXVvOiAnXFx1MjAxQScsXG4gIGxkcXVvOiAnXFx1MjAxQycsXG4gIHJkcXVvOiAnXFx1MjAxRCcsXG4gIGJkcXVvOiAnXFx1MjAxRScsXG4gIGRhZ2dlcjogJ1xcdTIwMjAnLFxuICBEYWdnZXI6ICdcXHUyMDIxJyxcbiAgYnVsbDogJ1xcdTIwMjInLFxuICBoZWxsaXA6ICdcXHUyMDI2JyxcbiAgcGVybWlsOiAnXFx1MjAzMCcsXG4gIHByaW1lOiAnXFx1MjAzMicsXG4gIFByaW1lOiAnXFx1MjAzMycsXG4gIGxzYXF1bzogJ1xcdTIwMzknLFxuICByc2FxdW86ICdcXHUyMDNBJyxcbiAgb2xpbmU6ICdcXHUyMDNFJyxcbiAgZnJhc2w6ICdcXHUyMDQ0JyxcbiAgZXVybzogJ1xcdTIwQUMnLFxuICBpbWFnZTogJ1xcdTIxMTEnLFxuICB3ZWllcnA6ICdcXHUyMTE4JyxcbiAgcmVhbDogJ1xcdTIxMUMnLFxuICB0cmFkZTogJ1xcdTIxMjInLFxuICBhbGVmc3ltOiAnXFx1MjEzNScsXG4gIGxhcnI6ICdcXHUyMTkwJyxcbiAgdWFycjogJ1xcdTIxOTEnLFxuICByYXJyOiAnXFx1MjE5MicsXG4gIGRhcnI6ICdcXHUyMTkzJyxcbiAgaGFycjogJ1xcdTIxOTQnLFxuICBjcmFycjogJ1xcdTIxQjUnLFxuICBsQXJyOiAnXFx1MjFEMCcsXG4gIHVBcnI6ICdcXHUyMUQxJyxcbiAgckFycjogJ1xcdTIxRDInLFxuICBkQXJyOiAnXFx1MjFEMycsXG4gIGhBcnI6ICdcXHUyMUQ0JyxcbiAgZm9yYWxsOiAnXFx1MjIwMCcsXG4gIHBhcnQ6ICdcXHUyMjAyJyxcbiAgZXhpc3Q6ICdcXHUyMjAzJyxcbiAgZW1wdHk6ICdcXHUyMjA1JyxcbiAgbmFibGE6ICdcXHUyMjA3JyxcbiAgaXNpbjogJ1xcdTIyMDgnLFxuICBub3RpbjogJ1xcdTIyMDknLFxuICBuaTogJ1xcdTIyMEInLFxuICBwcm9kOiAnXFx1MjIwRicsXG4gIHN1bTogJ1xcdTIyMTEnLFxuICBtaW51czogJ1xcdTIyMTInLFxuICBsb3dhc3Q6ICdcXHUyMjE3JyxcbiAgcmFkaWM6ICdcXHUyMjFBJyxcbiAgcHJvcDogJ1xcdTIyMUQnLFxuICBpbmZpbjogJ1xcdTIyMUUnLFxuICBhbmc6ICdcXHUyMjIwJyxcbiAgYW5kOiAnXFx1MjIyNycsXG4gIG9yOiAnXFx1MjIyOCcsXG4gIGNhcDogJ1xcdTIyMjknLFxuICBjdXA6ICdcXHUyMjJBJyxcbiAgJ2ludCc6ICdcXHUyMjJCJyxcbiAgdGhlcmU0OiAnXFx1MjIzNCcsXG4gIHNpbTogJ1xcdTIyM0MnLFxuICBjb25nOiAnXFx1MjI0NScsXG4gIGFzeW1wOiAnXFx1MjI0OCcsXG4gIG5lOiAnXFx1MjI2MCcsXG4gIGVxdWl2OiAnXFx1MjI2MScsXG4gIGxlOiAnXFx1MjI2NCcsXG4gIGdlOiAnXFx1MjI2NScsXG4gIHN1YjogJ1xcdTIyODInLFxuICBzdXA6ICdcXHUyMjgzJyxcbiAgbnN1YjogJ1xcdTIyODQnLFxuICBzdWJlOiAnXFx1MjI4NicsXG4gIHN1cGU6ICdcXHUyMjg3JyxcbiAgb3BsdXM6ICdcXHUyMjk1JyxcbiAgb3RpbWVzOiAnXFx1MjI5NycsXG4gIHBlcnA6ICdcXHUyMkE1JyxcbiAgc2RvdDogJ1xcdTIyQzUnLFxuICBsY2VpbDogJ1xcdTIzMDgnLFxuICByY2VpbDogJ1xcdTIzMDknLFxuICBsZmxvb3I6ICdcXHUyMzBBJyxcbiAgcmZsb29yOiAnXFx1MjMwQicsXG4gIGxhbmc6ICdcXHUyMzI5JyxcbiAgcmFuZzogJ1xcdTIzMkEnLFxuICBsb3o6ICdcXHUyNUNBJyxcbiAgc3BhZGVzOiAnXFx1MjY2MCcsXG4gIGNsdWJzOiAnXFx1MjY2MycsXG4gIGhlYXJ0czogJ1xcdTI2NjUnLFxuICBkaWFtczogJ1xcdTI2NjYnXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/acorn-jsx/xhtml.js\n')},"../../node_modules/acorn-walk/dist/walk.mjs":function(__webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ancestor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return base; });\n/* unused harmony export findNodeAfter */\n/* unused harmony export findNodeAround */\n/* unused harmony export findNodeAt */\n/* unused harmony export findNodeBefore */\n/* unused harmony export full */\n/* unused harmony export fullAncestor */\n/* unused harmony export make */\n/* unused harmony export recursive */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return simple; });\n// AST walker module for Mozilla Parser API compatible trees\n\n// A simple walk is one where you simply specify callbacks to be\n// called on specific nodes. The last two arguments are optional. A\n// simple use would be\n//\n// walk.simple(myTree, {\n// Expression: function(node) { ... }\n// });\n//\n// to do something with all expressions. All Parser API node types\n// can be used to identify node types, as well as Expression and\n// Statement, which denote categories of nodes.\n//\n// The base argument can be used to pass a custom (recursive)\n// walker, and state can be used to give this walked an initial\n// state.\n\nfunction simple(node, visitors, baseVisitor, state, override) {\n if (!baseVisitor) { baseVisitor = base\n ; }(function c(node, st, override) {\n var type = override || node.type, found = visitors[type];\n baseVisitor[type](node, st, c);\n if (found) { found(node, st); }\n })(node, state, override);\n}\n\n// An ancestor walk keeps an array of ancestor nodes (including the\n// current node) and passes them to the callback as third parameter\n// (and also as state parameter when no other state is present).\nfunction ancestor(node, visitors, baseVisitor, state, override) {\n var ancestors = [];\n if (!baseVisitor) { baseVisitor = base\n ; }(function c(node, st, override) {\n var type = override || node.type, found = visitors[type];\n var isNew = node !== ancestors[ancestors.length - 1];\n if (isNew) { ancestors.push(node); }\n baseVisitor[type](node, st, c);\n if (found) { found(node, st || ancestors, ancestors); }\n if (isNew) { ancestors.pop(); }\n })(node, state, override);\n}\n\n// A recursive walk is one where your functions override the default\n// walkers. They can modify and replace the state parameter that\'s\n// threaded through the walk, and can opt how and whether to walk\n// their child nodes (by calling their third argument on these\n// nodes).\nfunction recursive(node, state, funcs, baseVisitor, override) {\n var visitor = funcs ? make(funcs, baseVisitor || undefined) : baseVisitor\n ;(function c(node, st, override) {\n visitor[override || node.type](node, st, c);\n })(node, state, override);\n}\n\nfunction makeTest(test) {\n if (typeof test === "string")\n { return function (type) { return type === test; } }\n else if (!test)\n { return function () { return true; } }\n else\n { return test }\n}\n\nvar Found = function Found(node, state) { this.node = node; this.state = state; };\n\n// A full walk triggers the callback on each node\nfunction full(node, callback, baseVisitor, state, override) {\n if (!baseVisitor) { baseVisitor = base\n ; }(function c(node, st, override) {\n var type = override || node.type;\n baseVisitor[type](node, st, c);\n if (!override) { callback(node, st, type); }\n })(node, state, override);\n}\n\n// An fullAncestor walk is like an ancestor walk, but triggers\n// the callback on each node\nfunction fullAncestor(node, callback, baseVisitor, state) {\n if (!baseVisitor) { baseVisitor = base; }\n var ancestors = []\n ;(function c(node, st, override) {\n var type = override || node.type;\n var isNew = node !== ancestors[ancestors.length - 1];\n if (isNew) { ancestors.push(node); }\n baseVisitor[type](node, st, c);\n if (!override) { callback(node, st || ancestors, ancestors, type); }\n if (isNew) { ancestors.pop(); }\n })(node, state);\n}\n\n// Find a node with a given start, end, and type (all are optional,\n// null can be used as wildcard). Returns a {node, state} object, or\n// undefined when it doesn\'t find a matching node.\nfunction findNodeAt(node, start, end, test, baseVisitor, state) {\n if (!baseVisitor) { baseVisitor = base; }\n test = makeTest(test);\n try {\n (function c(node, st, override) {\n var type = override || node.type;\n if ((start == null || node.start <= start) &&\n (end == null || node.end >= end))\n { baseVisitor[type](node, st, c); }\n if ((start == null || node.start === start) &&\n (end == null || node.end === end) &&\n test(type, node))\n { throw new Found(node, st) }\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the innermost node of a given type that contains the given\n// position. Interface similar to findNodeAt.\nfunction findNodeAround(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n try {\n (function c(node, st, override) {\n var type = override || node.type;\n if (node.start > pos || node.end < pos) { return }\n baseVisitor[type](node, st, c);\n if (test(type, node)) { throw new Found(node, st) }\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the outermost matching node after a given position.\nfunction findNodeAfter(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n try {\n (function c(node, st, override) {\n if (node.end < pos) { return }\n var type = override || node.type;\n if (node.start >= pos && test(type, node)) { throw new Found(node, st) }\n baseVisitor[type](node, st, c);\n })(node, state);\n } catch (e) {\n if (e instanceof Found) { return e }\n throw e\n }\n}\n\n// Find the outermost matching node before a given position.\nfunction findNodeBefore(node, pos, test, baseVisitor, state) {\n test = makeTest(test);\n if (!baseVisitor) { baseVisitor = base; }\n var max\n ;(function c(node, st, override) {\n if (node.start > pos) { return }\n var type = override || node.type;\n if (node.end <= pos && (!max || max.node.end < node.end) && test(type, node))\n { max = new Found(node, st); }\n baseVisitor[type](node, st, c);\n })(node, state);\n return max\n}\n\n// Fallback to an Object.create polyfill for older environments.\nvar create = Object.create || function(proto) {\n function Ctor() {}\n Ctor.prototype = proto;\n return new Ctor\n};\n\n// Used to create a custom walker. Will fill in all missing node\n// type properties with the defaults.\nfunction make(funcs, baseVisitor) {\n var visitor = create(baseVisitor || base);\n for (var type in funcs) { visitor[type] = funcs[type]; }\n return visitor\n}\n\nfunction skipThrough(node, st, c) { c(node, st); }\nfunction ignore(_node, _st, _c) {}\n\n// Node walkers.\n\nvar base = {};\n\nbase.Program = base.BlockStatement = function (node, st, c) {\n for (var i = 0, list = node.body; i < list.length; i += 1)\n {\n var stmt = list[i];\n\n c(stmt, st, "Statement");\n }\n};\nbase.Statement = skipThrough;\nbase.EmptyStatement = ignore;\nbase.ExpressionStatement = base.ParenthesizedExpression = base.ChainExpression =\n function (node, st, c) { return c(node.expression, st, "Expression"); };\nbase.IfStatement = function (node, st, c) {\n c(node.test, st, "Expression");\n c(node.consequent, st, "Statement");\n if (node.alternate) { c(node.alternate, st, "Statement"); }\n};\nbase.LabeledStatement = function (node, st, c) { return c(node.body, st, "Statement"); };\nbase.BreakStatement = base.ContinueStatement = ignore;\nbase.WithStatement = function (node, st, c) {\n c(node.object, st, "Expression");\n c(node.body, st, "Statement");\n};\nbase.SwitchStatement = function (node, st, c) {\n c(node.discriminant, st, "Expression");\n for (var i$1 = 0, list$1 = node.cases; i$1 < list$1.length; i$1 += 1) {\n var cs = list$1[i$1];\n\n if (cs.test) { c(cs.test, st, "Expression"); }\n for (var i = 0, list = cs.consequent; i < list.length; i += 1)\n {\n var cons = list[i];\n\n c(cons, st, "Statement");\n }\n }\n};\nbase.SwitchCase = function (node, st, c) {\n if (node.test) { c(node.test, st, "Expression"); }\n for (var i = 0, list = node.consequent; i < list.length; i += 1)\n {\n var cons = list[i];\n\n c(cons, st, "Statement");\n }\n};\nbase.ReturnStatement = base.YieldExpression = base.AwaitExpression = function (node, st, c) {\n if (node.argument) { c(node.argument, st, "Expression"); }\n};\nbase.ThrowStatement = base.SpreadElement =\n function (node, st, c) { return c(node.argument, st, "Expression"); };\nbase.TryStatement = function (node, st, c) {\n c(node.block, st, "Statement");\n if (node.handler) { c(node.handler, st); }\n if (node.finalizer) { c(node.finalizer, st, "Statement"); }\n};\nbase.CatchClause = function (node, st, c) {\n if (node.param) { c(node.param, st, "Pattern"); }\n c(node.body, st, "Statement");\n};\nbase.WhileStatement = base.DoWhileStatement = function (node, st, c) {\n c(node.test, st, "Expression");\n c(node.body, st, "Statement");\n};\nbase.ForStatement = function (node, st, c) {\n if (node.init) { c(node.init, st, "ForInit"); }\n if (node.test) { c(node.test, st, "Expression"); }\n if (node.update) { c(node.update, st, "Expression"); }\n c(node.body, st, "Statement");\n};\nbase.ForInStatement = base.ForOfStatement = function (node, st, c) {\n c(node.left, st, "ForInit");\n c(node.right, st, "Expression");\n c(node.body, st, "Statement");\n};\nbase.ForInit = function (node, st, c) {\n if (node.type === "VariableDeclaration") { c(node, st); }\n else { c(node, st, "Expression"); }\n};\nbase.DebuggerStatement = ignore;\n\nbase.FunctionDeclaration = function (node, st, c) { return c(node, st, "Function"); };\nbase.VariableDeclaration = function (node, st, c) {\n for (var i = 0, list = node.declarations; i < list.length; i += 1)\n {\n var decl = list[i];\n\n c(decl, st);\n }\n};\nbase.VariableDeclarator = function (node, st, c) {\n c(node.id, st, "Pattern");\n if (node.init) { c(node.init, st, "Expression"); }\n};\n\nbase.Function = function (node, st, c) {\n if (node.id) { c(node.id, st, "Pattern"); }\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n c(param, st, "Pattern");\n }\n c(node.body, st, node.expression ? "Expression" : "Statement");\n};\n\nbase.Pattern = function (node, st, c) {\n if (node.type === "Identifier")\n { c(node, st, "VariablePattern"); }\n else if (node.type === "MemberExpression")\n { c(node, st, "MemberPattern"); }\n else\n { c(node, st); }\n};\nbase.VariablePattern = ignore;\nbase.MemberPattern = skipThrough;\nbase.RestElement = function (node, st, c) { return c(node.argument, st, "Pattern"); };\nbase.ArrayPattern = function (node, st, c) {\n for (var i = 0, list = node.elements; i < list.length; i += 1) {\n var elt = list[i];\n\n if (elt) { c(elt, st, "Pattern"); }\n }\n};\nbase.ObjectPattern = function (node, st, c) {\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n if (prop.type === "Property") {\n if (prop.computed) { c(prop.key, st, "Expression"); }\n c(prop.value, st, "Pattern");\n } else if (prop.type === "RestElement") {\n c(prop.argument, st, "Pattern");\n }\n }\n};\n\nbase.Expression = skipThrough;\nbase.ThisExpression = base.Super = base.MetaProperty = ignore;\nbase.ArrayExpression = function (node, st, c) {\n for (var i = 0, list = node.elements; i < list.length; i += 1) {\n var elt = list[i];\n\n if (elt) { c(elt, st, "Expression"); }\n }\n};\nbase.ObjectExpression = function (node, st, c) {\n for (var i = 0, list = node.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n c(prop, st);\n }\n};\nbase.FunctionExpression = base.ArrowFunctionExpression = base.FunctionDeclaration;\nbase.SequenceExpression = function (node, st, c) {\n for (var i = 0, list = node.expressions; i < list.length; i += 1)\n {\n var expr = list[i];\n\n c(expr, st, "Expression");\n }\n};\nbase.TemplateLiteral = function (node, st, c) {\n for (var i = 0, list = node.quasis; i < list.length; i += 1)\n {\n var quasi = list[i];\n\n c(quasi, st);\n }\n\n for (var i$1 = 0, list$1 = node.expressions; i$1 < list$1.length; i$1 += 1)\n {\n var expr = list$1[i$1];\n\n c(expr, st, "Expression");\n }\n};\nbase.TemplateElement = ignore;\nbase.UnaryExpression = base.UpdateExpression = function (node, st, c) {\n c(node.argument, st, "Expression");\n};\nbase.BinaryExpression = base.LogicalExpression = function (node, st, c) {\n c(node.left, st, "Expression");\n c(node.right, st, "Expression");\n};\nbase.AssignmentExpression = base.AssignmentPattern = function (node, st, c) {\n c(node.left, st, "Pattern");\n c(node.right, st, "Expression");\n};\nbase.ConditionalExpression = function (node, st, c) {\n c(node.test, st, "Expression");\n c(node.consequent, st, "Expression");\n c(node.alternate, st, "Expression");\n};\nbase.NewExpression = base.CallExpression = function (node, st, c) {\n c(node.callee, st, "Expression");\n if (node.arguments)\n { for (var i = 0, list = node.arguments; i < list.length; i += 1)\n {\n var arg = list[i];\n\n c(arg, st, "Expression");\n } }\n};\nbase.MemberExpression = function (node, st, c) {\n c(node.object, st, "Expression");\n if (node.computed) { c(node.property, st, "Expression"); }\n};\nbase.ExportNamedDeclaration = base.ExportDefaultDeclaration = function (node, st, c) {\n if (node.declaration)\n { c(node.declaration, st, node.type === "ExportNamedDeclaration" || node.declaration.id ? "Statement" : "Expression"); }\n if (node.source) { c(node.source, st, "Expression"); }\n};\nbase.ExportAllDeclaration = function (node, st, c) {\n if (node.exported)\n { c(node.exported, st); }\n c(node.source, st, "Expression");\n};\nbase.ImportDeclaration = function (node, st, c) {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1)\n {\n var spec = list[i];\n\n c(spec, st);\n }\n c(node.source, st, "Expression");\n};\nbase.ImportExpression = function (node, st, c) {\n c(node.source, st, "Expression");\n};\nbase.ImportSpecifier = base.ImportDefaultSpecifier = base.ImportNamespaceSpecifier = base.Identifier = base.Literal = ignore;\n\nbase.TaggedTemplateExpression = function (node, st, c) {\n c(node.tag, st, "Expression");\n c(node.quasi, st, "Expression");\n};\nbase.ClassDeclaration = base.ClassExpression = function (node, st, c) { return c(node, st, "Class"); };\nbase.Class = function (node, st, c) {\n if (node.id) { c(node.id, st, "Pattern"); }\n if (node.superClass) { c(node.superClass, st, "Expression"); }\n c(node.body, st);\n};\nbase.ClassBody = function (node, st, c) {\n for (var i = 0, list = node.body; i < list.length; i += 1)\n {\n var elt = list[i];\n\n c(elt, st);\n }\n};\nbase.MethodDefinition = base.Property = function (node, st, c) {\n if (node.computed) { c(node.key, st, "Expression"); }\n c(node.value, st, "Expression");\n};\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hY29ybi13YWxrL2Rpc3Qvd2Fsay5tanM/ODFlOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QyxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQjtBQUNyQixHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQyxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBLGdCQUFnQix5Q0FBeUM7QUFDekQsZ0JBQWdCLGlCQUFpQjtBQUNqQyxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLEtBQUsseUJBQXlCLHNCQUFzQixFQUFFO0FBQ3REO0FBQ0EsS0FBSyxxQkFBcUIsYUFBYSxFQUFFO0FBQ3pDO0FBQ0EsS0FBSztBQUNMOztBQUVBLHlDQUF5QyxrQkFBa0Isb0JBQW9COztBQUUvRTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxnQkFBZ0Isc0JBQXNCO0FBQ3RDO0FBQ0Esb0JBQW9CLGtEQUFrRDtBQUN0RSxnQkFBZ0IsaUJBQWlCO0FBQ2pDLEdBQUc7QUFDSDs7QUFFQTtBQUNBLDZDQUE2QyxZQUFZO0FBQ3pEO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsZ0NBQWdDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsR0FBRztBQUNILDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQztBQUNBLDZCQUE2QjtBQUM3QixLQUFLO0FBQ0wsR0FBRztBQUNILDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9CQUFvQjtBQUN6QztBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0Esa0RBQWtEO0FBQ2xEO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQkFBb0I7QUFDekM7QUFDQSxHQUFHO0FBQ0gsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQSxPQUFPLDJCQUEyQjtBQUNsQztBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw2QkFBNkI7QUFDeEQ7QUFDQTs7QUFFQSxtQ0FBbUMsYUFBYTtBQUNoRDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLG1DQUFtQyxpQkFBaUI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsNkNBQTZDO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixvQ0FBb0M7QUFDM0Q7QUFDQSxnREFBZ0Qsc0NBQXNDO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDLHFCQUFxQjtBQUM3RDs7QUFFQSxrQkFBa0IsOEJBQThCO0FBQ2hELHlDQUF5QyxpQkFBaUI7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGdDQUFnQztBQUNsRCx5Q0FBeUMsaUJBQWlCO0FBQzFEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isb0NBQW9DO0FBQzFEO0FBQ0E7QUFDQSwwQkFBMEIsMkNBQTJDO0FBQ3JFO0FBQ0E7QUFDQSxxQkFBcUIscUJBQXFCO0FBQzFDLHVCQUF1QixvQ0FBb0M7QUFDM0Q7QUFDQTtBQUNBLG1CQUFtQiw4QkFBOEI7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNkJBQTZCO0FBQy9DLGtCQUFrQixnQ0FBZ0M7QUFDbEQsb0JBQW9CLGtDQUFrQztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGFBQWE7QUFDekQsUUFBUSwyQkFBMkI7QUFDbkM7QUFDQTs7QUFFQSxtREFBbUQsZ0NBQWdDO0FBQ25GO0FBQ0EsMkNBQTJDLGlCQUFpQjtBQUM1RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsZ0NBQWdDO0FBQ2xEOztBQUVBO0FBQ0EsZ0JBQWdCLDJCQUEyQjtBQUMzQyxxQ0FBcUMsaUJBQWlCO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUssZ0NBQWdDO0FBQ3JDO0FBQ0EsS0FBSyw4QkFBOEI7QUFDbkM7QUFDQSxLQUFLLGFBQWE7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHdDQUF3QztBQUNuRjtBQUNBLHVDQUF1QyxpQkFBaUI7QUFDeEQ7O0FBRUEsY0FBYyx1QkFBdUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGlCQUFpQjtBQUMxRDs7QUFFQTtBQUNBLDBCQUEwQiwrQkFBK0I7QUFDekQ7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGlCQUFpQjtBQUN4RDs7QUFFQSxjQUFjLDBCQUEwQjtBQUN4QztBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsaUJBQWlCO0FBQzFEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxpQkFBaUI7QUFDM0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxpQkFBaUI7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDhDQUE4QyxxQkFBcUI7QUFDbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyx1Q0FBdUMsaUJBQWlCO0FBQzdEO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG9DQUFvQztBQUMxRDtBQUNBO0FBQ0E7QUFDQSxLQUFLLHFIQUFxSDtBQUMxSCxvQkFBb0Isa0NBQWtDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLEtBQUssc0JBQXNCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxpQkFBaUI7QUFDMUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLDZCQUE2QjtBQUNwRztBQUNBLGdCQUFnQiwyQkFBMkI7QUFDM0Msd0JBQXdCLHNDQUFzQztBQUM5RDtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsaUJBQWlCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsK0JBQStCO0FBQ3JEO0FBQ0E7O0FBRWtJIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hY29ybi13YWxrL2Rpc3Qvd2Fsay5tanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBU1Qgd2Fsa2VyIG1vZHVsZSBmb3IgTW96aWxsYSBQYXJzZXIgQVBJIGNvbXBhdGlibGUgdHJlZXNcblxuLy8gQSBzaW1wbGUgd2FsayBpcyBvbmUgd2hlcmUgeW91IHNpbXBseSBzcGVjaWZ5IGNhbGxiYWNrcyB0byBiZVxuLy8gY2FsbGVkIG9uIHNwZWNpZmljIG5vZGVzLiBUaGUgbGFzdCB0d28gYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gQVxuLy8gc2ltcGxlIHVzZSB3b3VsZCBiZVxuLy9cbi8vICAgICB3YWxrLnNpbXBsZShteVRyZWUsIHtcbi8vICAgICAgICAgRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkgeyAuLi4gfVxuLy8gICAgIH0pO1xuLy9cbi8vIHRvIGRvIHNvbWV0aGluZyB3aXRoIGFsbCBleHByZXNzaW9ucy4gQWxsIFBhcnNlciBBUEkgbm9kZSB0eXBlc1xuLy8gY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgbm9kZSB0eXBlcywgYXMgd2VsbCBhcyBFeHByZXNzaW9uIGFuZFxuLy8gU3RhdGVtZW50LCB3aGljaCBkZW5vdGUgY2F0ZWdvcmllcyBvZiBub2Rlcy5cbi8vXG4vLyBUaGUgYmFzZSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgY3VzdG9tIChyZWN1cnNpdmUpXG4vLyB3YWxrZXIsIGFuZCBzdGF0ZSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoaXMgd2Fsa2VkIGFuIGluaXRpYWxcbi8vIHN0YXRlLlxuXG5mdW5jdGlvbiBzaW1wbGUobm9kZSwgdmlzaXRvcnMsIGJhc2VWaXNpdG9yLCBzdGF0ZSwgb3ZlcnJpZGUpIHtcbiAgaWYgKCFiYXNlVmlzaXRvcikgeyBiYXNlVmlzaXRvciA9IGJhc2VcbiAgOyB9KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGUsIGZvdW5kID0gdmlzaXRvcnNbdHlwZV07XG4gICAgYmFzZVZpc2l0b3JbdHlwZV0obm9kZSwgc3QsIGMpO1xuICAgIGlmIChmb3VuZCkgeyBmb3VuZChub2RlLCBzdCk7IH1cbiAgfSkobm9kZSwgc3RhdGUsIG92ZXJyaWRlKTtcbn1cblxuLy8gQW4gYW5jZXN0b3Igd2FsayBrZWVwcyBhbiBhcnJheSBvZiBhbmNlc3RvciBub2RlcyAoaW5jbHVkaW5nIHRoZVxuLy8gY3VycmVudCBub2RlKSBhbmQgcGFzc2VzIHRoZW0gdG8gdGhlIGNhbGxiYWNrIGFzIHRoaXJkIHBhcmFtZXRlclxuLy8gKGFuZCBhbHNvIGFzIHN0YXRlIHBhcmFtZXRlciB3aGVuIG5vIG90aGVyIHN0YXRlIGlzIHByZXNlbnQpLlxuZnVuY3Rpb24gYW5jZXN0b3Iobm9kZSwgdmlzaXRvcnMsIGJhc2VWaXNpdG9yLCBzdGF0ZSwgb3ZlcnJpZGUpIHtcbiAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZVxuICA7IH0oZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZSwgZm91bmQgPSB2aXNpdG9yc1t0eXBlXTtcbiAgICB2YXIgaXNOZXcgPSBub2RlICE9PSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChpc05ldykgeyBhbmNlc3RvcnMucHVzaChub2RlKTsgfVxuICAgIGJhc2VWaXNpdG9yW3R5cGVdKG5vZGUsIHN0LCBjKTtcbiAgICBpZiAoZm91bmQpIHsgZm91bmQobm9kZSwgc3QgfHwgYW5jZXN0b3JzLCBhbmNlc3RvcnMpOyB9XG4gICAgaWYgKGlzTmV3KSB7IGFuY2VzdG9ycy5wb3AoKTsgfVxuICB9KShub2RlLCBzdGF0ZSwgb3ZlcnJpZGUpO1xufVxuXG4vLyBBIHJlY3Vyc2l2ZSB3YWxrIGlzIG9uZSB3aGVyZSB5b3VyIGZ1bmN0aW9ucyBvdmVycmlkZSB0aGUgZGVmYXVsdFxuLy8gd2Fsa2Vycy4gVGhleSBjYW4gbW9kaWZ5IGFuZCByZXBsYWNlIHRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCdzXG4vLyB0aHJlYWRlZCB0aHJvdWdoIHRoZSB3YWxrLCBhbmQgY2FuIG9wdCBob3cgYW5kIHdoZXRoZXIgdG8gd2Fsa1xuLy8gdGhlaXIgY2hpbGQgbm9kZXMgKGJ5IGNhbGxpbmcgdGhlaXIgdGhpcmQgYXJndW1lbnQgb24gdGhlc2Vcbi8vIG5vZGVzKS5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZShub2RlLCBzdGF0ZSwgZnVuY3MsIGJhc2VWaXNpdG9yLCBvdmVycmlkZSkge1xuICB2YXIgdmlzaXRvciA9IGZ1bmNzID8gbWFrZShmdW5jcywgYmFzZVZpc2l0b3IgfHwgdW5kZWZpbmVkKSA6IGJhc2VWaXNpdG9yXG4gIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2aXNpdG9yW292ZXJyaWRlIHx8IG5vZGUudHlwZV0obm9kZSwgc3QsIGMpO1xuICB9KShub2RlLCBzdGF0ZSwgb3ZlcnJpZGUpO1xufVxuXG5mdW5jdGlvbiBtYWtlVGVzdCh0ZXN0KSB7XG4gIGlmICh0eXBlb2YgdGVzdCA9PT0gXCJzdHJpbmdcIilcbiAgICB7IHJldHVybiBmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gdHlwZSA9PT0gdGVzdDsgfSB9XG4gIGVsc2UgaWYgKCF0ZXN0KVxuICAgIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0gfVxuICBlbHNlXG4gICAgeyByZXR1cm4gdGVzdCB9XG59XG5cbnZhciBGb3VuZCA9IGZ1bmN0aW9uIEZvdW5kKG5vZGUsIHN0YXRlKSB7IHRoaXMubm9kZSA9IG5vZGU7IHRoaXMuc3RhdGUgPSBzdGF0ZTsgfTtcblxuLy8gQSBmdWxsIHdhbGsgdHJpZ2dlcnMgdGhlIGNhbGxiYWNrIG9uIGVhY2ggbm9kZVxuZnVuY3Rpb24gZnVsbChub2RlLCBjYWxsYmFjaywgYmFzZVZpc2l0b3IsIHN0YXRlLCBvdmVycmlkZSkge1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZVxuICA7IH0oZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICBiYXNlVmlzaXRvclt0eXBlXShub2RlLCBzdCwgYyk7XG4gICAgaWYgKCFvdmVycmlkZSkgeyBjYWxsYmFjayhub2RlLCBzdCwgdHlwZSk7IH1cbiAgfSkobm9kZSwgc3RhdGUsIG92ZXJyaWRlKTtcbn1cblxuLy8gQW4gZnVsbEFuY2VzdG9yIHdhbGsgaXMgbGlrZSBhbiBhbmNlc3RvciB3YWxrLCBidXQgdHJpZ2dlcnNcbi8vIHRoZSBjYWxsYmFjayBvbiBlYWNoIG5vZGVcbmZ1bmN0aW9uIGZ1bGxBbmNlc3Rvcihub2RlLCBjYWxsYmFjaywgYmFzZVZpc2l0b3IsIHN0YXRlKSB7XG4gIGlmICghYmFzZVZpc2l0b3IpIHsgYmFzZVZpc2l0b3IgPSBiYXNlOyB9XG4gIHZhciBhbmNlc3RvcnMgPSBbXVxuICA7KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGU7XG4gICAgdmFyIGlzTmV3ID0gbm9kZSAhPT0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAxXTtcbiAgICBpZiAoaXNOZXcpIHsgYW5jZXN0b3JzLnB1c2gobm9kZSk7IH1cbiAgICBiYXNlVmlzaXRvclt0eXBlXShub2RlLCBzdCwgYyk7XG4gICAgaWYgKCFvdmVycmlkZSkgeyBjYWxsYmFjayhub2RlLCBzdCB8fCBhbmNlc3RvcnMsIGFuY2VzdG9ycywgdHlwZSk7IH1cbiAgICBpZiAoaXNOZXcpIHsgYW5jZXN0b3JzLnBvcCgpOyB9XG4gIH0pKG5vZGUsIHN0YXRlKTtcbn1cblxuLy8gRmluZCBhIG5vZGUgd2l0aCBhIGdpdmVuIHN0YXJ0LCBlbmQsIGFuZCB0eXBlIChhbGwgYXJlIG9wdGlvbmFsLFxuLy8gbnVsbCBjYW4gYmUgdXNlZCBhcyB3aWxkY2FyZCkuIFJldHVybnMgYSB7bm9kZSwgc3RhdGV9IG9iamVjdCwgb3Jcbi8vIHVuZGVmaW5lZCB3aGVuIGl0IGRvZXNuJ3QgZmluZCBhIG1hdGNoaW5nIG5vZGUuXG5mdW5jdGlvbiBmaW5kTm9kZUF0KG5vZGUsIHN0YXJ0LCBlbmQsIHRlc3QsIGJhc2VWaXNpdG9yLCBzdGF0ZSkge1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZTsgfVxuICB0ZXN0ID0gbWFrZVRlc3QodGVzdCk7XG4gIHRyeSB7XG4gICAgKGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICAgIGlmICgoc3RhcnQgPT0gbnVsbCB8fCBub2RlLnN0YXJ0IDw9IHN0YXJ0KSAmJlxuICAgICAgICAgIChlbmQgPT0gbnVsbCB8fCBub2RlLmVuZCA+PSBlbmQpKVxuICAgICAgICB7IGJhc2VWaXNpdG9yW3R5cGVdKG5vZGUsIHN0LCBjKTsgfVxuICAgICAgaWYgKChzdGFydCA9PSBudWxsIHx8IG5vZGUuc3RhcnQgPT09IHN0YXJ0KSAmJlxuICAgICAgICAgIChlbmQgPT0gbnVsbCB8fCBub2RlLmVuZCA9PT0gZW5kKSAmJlxuICAgICAgICAgIHRlc3QodHlwZSwgbm9kZSkpXG4gICAgICAgIHsgdGhyb3cgbmV3IEZvdW5kKG5vZGUsIHN0KSB9XG4gICAgfSkobm9kZSwgc3RhdGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBGb3VuZCkgeyByZXR1cm4gZSB9XG4gICAgdGhyb3cgZVxuICB9XG59XG5cbi8vIEZpbmQgdGhlIGlubmVybW9zdCBub2RlIG9mIGEgZ2l2ZW4gdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlblxuLy8gcG9zaXRpb24uIEludGVyZmFjZSBzaW1pbGFyIHRvIGZpbmROb2RlQXQuXG5mdW5jdGlvbiBmaW5kTm9kZUFyb3VuZChub2RlLCBwb3MsIHRlc3QsIGJhc2VWaXNpdG9yLCBzdGF0ZSkge1xuICB0ZXN0ID0gbWFrZVRlc3QodGVzdCk7XG4gIGlmICghYmFzZVZpc2l0b3IpIHsgYmFzZVZpc2l0b3IgPSBiYXNlOyB9XG4gIHRyeSB7XG4gICAgKGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICAgIGlmIChub2RlLnN0YXJ0ID4gcG9zIHx8IG5vZGUuZW5kIDwgcG9zKSB7IHJldHVybiB9XG4gICAgICBiYXNlVmlzaXRvclt0eXBlXShub2RlLCBzdCwgYyk7XG4gICAgICBpZiAodGVzdCh0eXBlLCBub2RlKSkgeyB0aHJvdyBuZXcgRm91bmQobm9kZSwgc3QpIH1cbiAgICB9KShub2RlLCBzdGF0ZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEZvdW5kKSB7IHJldHVybiBlIH1cbiAgICB0aHJvdyBlXG4gIH1cbn1cblxuLy8gRmluZCB0aGUgb3V0ZXJtb3N0IG1hdGNoaW5nIG5vZGUgYWZ0ZXIgYSBnaXZlbiBwb3NpdGlvbi5cbmZ1bmN0aW9uIGZpbmROb2RlQWZ0ZXIobm9kZSwgcG9zLCB0ZXN0LCBiYXNlVmlzaXRvciwgc3RhdGUpIHtcbiAgdGVzdCA9IG1ha2VUZXN0KHRlc3QpO1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZTsgfVxuICB0cnkge1xuICAgIChmdW5jdGlvbiBjKG5vZGUsIHN0LCBvdmVycmlkZSkge1xuICAgICAgaWYgKG5vZGUuZW5kIDwgcG9zKSB7IHJldHVybiB9XG4gICAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICAgIGlmIChub2RlLnN0YXJ0ID49IHBvcyAmJiB0ZXN0KHR5cGUsIG5vZGUpKSB7IHRocm93IG5ldyBGb3VuZChub2RlLCBzdCkgfVxuICAgICAgYmFzZVZpc2l0b3JbdHlwZV0obm9kZSwgc3QsIGMpO1xuICAgIH0pKG5vZGUsIHN0YXRlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRm91bmQpIHsgcmV0dXJuIGUgfVxuICAgIHRocm93IGVcbiAgfVxufVxuXG4vLyBGaW5kIHRoZSBvdXRlcm1vc3QgbWF0Y2hpbmcgbm9kZSBiZWZvcmUgYSBnaXZlbiBwb3NpdGlvbi5cbmZ1bmN0aW9uIGZpbmROb2RlQmVmb3JlKG5vZGUsIHBvcywgdGVzdCwgYmFzZVZpc2l0b3IsIHN0YXRlKSB7XG4gIHRlc3QgPSBtYWtlVGVzdCh0ZXN0KTtcbiAgaWYgKCFiYXNlVmlzaXRvcikgeyBiYXNlVmlzaXRvciA9IGJhc2U7IH1cbiAgdmFyIG1heFxuICA7KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgaWYgKG5vZGUuc3RhcnQgPiBwb3MpIHsgcmV0dXJuIH1cbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICBpZiAobm9kZS5lbmQgPD0gcG9zICYmICghbWF4IHx8IG1heC5ub2RlLmVuZCA8IG5vZGUuZW5kKSAmJiB0ZXN0KHR5cGUsIG5vZGUpKVxuICAgICAgeyBtYXggPSBuZXcgRm91bmQobm9kZSwgc3QpOyB9XG4gICAgYmFzZVZpc2l0b3JbdHlwZV0obm9kZSwgc3QsIGMpO1xuICB9KShub2RlLCBzdGF0ZSk7XG4gIHJldHVybiBtYXhcbn1cblxuLy8gRmFsbGJhY2sgdG8gYW4gT2JqZWN0LmNyZWF0ZSBwb2x5ZmlsbCBmb3Igb2xkZXIgZW52aXJvbm1lbnRzLlxudmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24ocHJvdG8pIHtcbiAgZnVuY3Rpb24gQ3RvcigpIHt9XG4gIEN0b3IucHJvdG90eXBlID0gcHJvdG87XG4gIHJldHVybiBuZXcgQ3RvclxufTtcblxuLy8gVXNlZCB0byBjcmVhdGUgYSBjdXN0b20gd2Fsa2VyLiBXaWxsIGZpbGwgaW4gYWxsIG1pc3Npbmcgbm9kZVxuLy8gdHlwZSBwcm9wZXJ0aWVzIHdpdGggdGhlIGRlZmF1bHRzLlxuZnVuY3Rpb24gbWFrZShmdW5jcywgYmFzZVZpc2l0b3IpIHtcbiAgdmFyIHZpc2l0b3IgPSBjcmVhdGUoYmFzZVZpc2l0b3IgfHwgYmFzZSk7XG4gIGZvciAodmFyIHR5cGUgaW4gZnVuY3MpIHsgdmlzaXRvclt0eXBlXSA9IGZ1bmNzW3R5cGVdOyB9XG4gIHJldHVybiB2aXNpdG9yXG59XG5cbmZ1bmN0aW9uIHNraXBUaHJvdWdoKG5vZGUsIHN0LCBjKSB7IGMobm9kZSwgc3QpOyB9XG5mdW5jdGlvbiBpZ25vcmUoX25vZGUsIF9zdCwgX2MpIHt9XG5cbi8vIE5vZGUgd2Fsa2Vycy5cblxudmFyIGJhc2UgPSB7fTtcblxuYmFzZS5Qcm9ncmFtID0gYmFzZS5CbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuYm9keTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBzdG10ID0gbGlzdFtpXTtcblxuICAgIGMoc3RtdCwgc3QsIFwiU3RhdGVtZW50XCIpO1xuICB9XG59O1xuYmFzZS5TdGF0ZW1lbnQgPSBza2lwVGhyb3VnaDtcbmJhc2UuRW1wdHlTdGF0ZW1lbnQgPSBpZ25vcmU7XG5iYXNlLkV4cHJlc3Npb25TdGF0ZW1lbnQgPSBiYXNlLlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uID0gYmFzZS5DaGFpbkV4cHJlc3Npb24gPVxuICBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZS5leHByZXNzaW9uLCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9O1xuYmFzZS5JZlN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgYyhub2RlLmNvbnNlcXVlbnQsIHN0LCBcIlN0YXRlbWVudFwiKTtcbiAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB7IGMobm9kZS5hbHRlcm5hdGUsIHN0LCBcIlN0YXRlbWVudFwiKTsgfVxufTtcbmJhc2UuTGFiZWxlZFN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLmJvZHksIHN0LCBcIlN0YXRlbWVudFwiKTsgfTtcbmJhc2UuQnJlYWtTdGF0ZW1lbnQgPSBiYXNlLkNvbnRpbnVlU3RhdGVtZW50ID0gaWdub3JlO1xuYmFzZS5XaXRoU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5vYmplY3QsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIik7XG59O1xuYmFzZS5Td2l0Y2hTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmRpc2NyaW1pbmFudCwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gbm9kZS5jYXNlczsgaSQxIDwgbGlzdCQxLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICB2YXIgY3MgPSBsaXN0JDFbaSQxXTtcblxuICAgIGlmIChjcy50ZXN0KSB7IGMoY3MudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gY3MuY29uc2VxdWVudDsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICB2YXIgY29ucyA9IGxpc3RbaV07XG5cbiAgICAgIGMoY29ucywgc3QsIFwiU3RhdGVtZW50XCIpO1xuICAgIH1cbiAgfVxufTtcbmJhc2UuU3dpdGNoQ2FzZSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS50ZXN0KSB7IGMobm9kZS50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG4gIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5jb25zZXF1ZW50OyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIGNvbnMgPSBsaXN0W2ldO1xuXG4gICAgYyhjb25zLCBzdCwgXCJTdGF0ZW1lbnRcIik7XG4gIH1cbn07XG5iYXNlLlJldHVyblN0YXRlbWVudCA9IGJhc2UuWWllbGRFeHByZXNzaW9uID0gYmFzZS5Bd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuYXJndW1lbnQpIHsgYyhub2RlLmFyZ3VtZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG59O1xuYmFzZS5UaHJvd1N0YXRlbWVudCA9IGJhc2UuU3ByZWFkRWxlbWVudCA9XG4gIGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLmFyZ3VtZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9O1xuYmFzZS5UcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmJsb2NrLCBzdCwgXCJTdGF0ZW1lbnRcIik7XG4gIGlmIChub2RlLmhhbmRsZXIpIHsgYyhub2RlLmhhbmRsZXIsIHN0KTsgfVxuICBpZiAobm9kZS5maW5hbGl6ZXIpIHsgYyhub2RlLmZpbmFsaXplciwgc3QsIFwiU3RhdGVtZW50XCIpOyB9XG59O1xuYmFzZS5DYXRjaENsYXVzZSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS5wYXJhbSkgeyBjKG5vZGUucGFyYW0sIHN0LCBcIlBhdHRlcm5cIik7IH1cbiAgYyhub2RlLmJvZHksIHN0LCBcIlN0YXRlbWVudFwiKTtcbn07XG5iYXNlLldoaWxlU3RhdGVtZW50ID0gYmFzZS5Eb1doaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICBjKG5vZGUuYm9keSwgc3QsIFwiU3RhdGVtZW50XCIpO1xufTtcbmJhc2UuRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmluaXQpIHsgYyhub2RlLmluaXQsIHN0LCBcIkZvckluaXRcIik7IH1cbiAgaWYgKG5vZGUudGVzdCkgeyBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICBpZiAobm9kZS51cGRhdGUpIHsgYyhub2RlLnVwZGF0ZSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICBjKG5vZGUuYm9keSwgc3QsIFwiU3RhdGVtZW50XCIpO1xufTtcbmJhc2UuRm9ySW5TdGF0ZW1lbnQgPSBiYXNlLkZvck9mU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5sZWZ0LCBzdCwgXCJGb3JJbml0XCIpO1xuICBjKG5vZGUucmlnaHQsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIik7XG59O1xuYmFzZS5Gb3JJbml0ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7IGMobm9kZSwgc3QpOyB9XG4gIGVsc2UgeyBjKG5vZGUsIHN0LCBcIkV4cHJlc3Npb25cIik7IH1cbn07XG5iYXNlLkRlYnVnZ2VyU3RhdGVtZW50ID0gaWdub3JlO1xuXG5iYXNlLkZ1bmN0aW9uRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZSwgc3QsIFwiRnVuY3Rpb25cIik7IH07XG5iYXNlLlZhcmlhYmxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLmRlY2xhcmF0aW9uczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBkZWNsID0gbGlzdFtpXTtcblxuICAgIGMoZGVjbCwgc3QpO1xuICB9XG59O1xuYmFzZS5WYXJpYWJsZURlY2xhcmF0b3IgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmlkLCBzdCwgXCJQYXR0ZXJuXCIpO1xuICBpZiAobm9kZS5pbml0KSB7IGMobm9kZS5pbml0LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG59O1xuXG5iYXNlLkZ1bmN0aW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmlkKSB7IGMobm9kZS5pZCwgc3QsIFwiUGF0dGVyblwiKTsgfVxuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUucGFyYW1zOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIHBhcmFtID0gbGlzdFtpXTtcblxuICAgIGMocGFyYW0sIHN0LCBcIlBhdHRlcm5cIik7XG4gIH1cbiAgYyhub2RlLmJvZHksIHN0LCBub2RlLmV4cHJlc3Npb24gPyBcIkV4cHJlc3Npb25cIiA6IFwiU3RhdGVtZW50XCIpO1xufTtcblxuYmFzZS5QYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IFwiSWRlbnRpZmllclwiKVxuICAgIHsgYyhub2RlLCBzdCwgXCJWYXJpYWJsZVBhdHRlcm5cIik7IH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIilcbiAgICB7IGMobm9kZSwgc3QsIFwiTWVtYmVyUGF0dGVyblwiKTsgfVxuICBlbHNlXG4gICAgeyBjKG5vZGUsIHN0KTsgfVxufTtcbmJhc2UuVmFyaWFibGVQYXR0ZXJuID0gaWdub3JlO1xuYmFzZS5NZW1iZXJQYXR0ZXJuID0gc2tpcFRocm91Z2g7XG5iYXNlLlJlc3RFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7IHJldHVybiBjKG5vZGUuYXJndW1lbnQsIHN0LCBcIlBhdHRlcm5cIik7IH07XG5iYXNlLkFycmF5UGF0dGVybiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuZWxlbWVudHM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGVsdCA9IGxpc3RbaV07XG5cbiAgICBpZiAoZWx0KSB7IGMoZWx0LCBzdCwgXCJQYXR0ZXJuXCIpOyB9XG4gIH1cbn07XG5iYXNlLk9iamVjdFBhdHRlcm4gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLnByb3BlcnRpZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIHByb3AgPSBsaXN0W2ldO1xuXG4gICAgaWYgKHByb3AudHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG4gICAgICBpZiAocHJvcC5jb21wdXRlZCkgeyBjKHByb3Aua2V5LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG4gICAgICBjKHByb3AudmFsdWUsIHN0LCBcIlBhdHRlcm5cIik7XG4gICAgfSBlbHNlIGlmIChwcm9wLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIikge1xuICAgICAgYyhwcm9wLmFyZ3VtZW50LCBzdCwgXCJQYXR0ZXJuXCIpO1xuICAgIH1cbiAgfVxufTtcblxuYmFzZS5FeHByZXNzaW9uID0gc2tpcFRocm91Z2g7XG5iYXNlLlRoaXNFeHByZXNzaW9uID0gYmFzZS5TdXBlciA9IGJhc2UuTWV0YVByb3BlcnR5ID0gaWdub3JlO1xuYmFzZS5BcnJheUV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLmVsZW1lbnRzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBlbHQgPSBsaXN0W2ldO1xuXG4gICAgaWYgKGVsdCkgeyBjKGVsdCwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICB9XG59O1xuYmFzZS5PYmplY3RFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5wcm9wZXJ0aWVzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIHByb3AgPSBsaXN0W2ldO1xuXG4gICAgYyhwcm9wLCBzdCk7XG4gIH1cbn07XG5iYXNlLkZ1bmN0aW9uRXhwcmVzc2lvbiA9IGJhc2UuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBiYXNlLkZ1bmN0aW9uRGVjbGFyYXRpb247XG5iYXNlLlNlcXVlbmNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuZXhwcmVzc2lvbnM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgIHtcbiAgICB2YXIgZXhwciA9IGxpc3RbaV07XG5cbiAgICBjKGV4cHIsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIH1cbn07XG5iYXNlLlRlbXBsYXRlTGl0ZXJhbCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUucXVhc2lzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIHF1YXNpID0gbGlzdFtpXTtcblxuICAgIGMocXVhc2ksIHN0KTtcbiAgfVxuXG4gIGZvciAodmFyIGkkMSA9IDAsIGxpc3QkMSA9IG5vZGUuZXhwcmVzc2lvbnM7IGkkMSA8IGxpc3QkMS5sZW5ndGg7IGkkMSArPSAxKVxuICAgIHtcbiAgICB2YXIgZXhwciA9IGxpc3QkMVtpJDFdO1xuXG4gICAgYyhleHByLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICB9XG59O1xuYmFzZS5UZW1wbGF0ZUVsZW1lbnQgPSBpZ25vcmU7XG5iYXNlLlVuYXJ5RXhwcmVzc2lvbiA9IGJhc2UuVXBkYXRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuYXJndW1lbnQsIHN0LCBcIkV4cHJlc3Npb25cIik7XG59O1xuYmFzZS5CaW5hcnlFeHByZXNzaW9uID0gYmFzZS5Mb2dpY2FsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUubGVmdCwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgYyhub2RlLnJpZ2h0LCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuQXNzaWdubWVudEV4cHJlc3Npb24gPSBiYXNlLkFzc2lnbm1lbnRQYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5sZWZ0LCBzdCwgXCJQYXR0ZXJuXCIpO1xuICBjKG5vZGUucmlnaHQsIHN0LCBcIkV4cHJlc3Npb25cIik7XG59O1xuYmFzZS5Db25kaXRpb25hbEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLnRlc3QsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5jb25zZXF1ZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICBjKG5vZGUuYWx0ZXJuYXRlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuTmV3RXhwcmVzc2lvbiA9IGJhc2UuQ2FsbEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmNhbGxlZSwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgaWYgKG5vZGUuYXJndW1lbnRzKVxuICAgIHsgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLmFyZ3VtZW50czsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICAgIHZhciBhcmcgPSBsaXN0W2ldO1xuXG4gICAgICAgIGMoYXJnLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICAgICAgfSB9XG59O1xuYmFzZS5NZW1iZXJFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5vYmplY3QsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGlmIChub2RlLmNvbXB1dGVkKSB7IGMobm9kZS5wcm9wZXJ0eSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxufTtcbmJhc2UuRXhwb3J0TmFtZWREZWNsYXJhdGlvbiA9IGJhc2UuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmRlY2xhcmF0aW9uKVxuICAgIHsgYyhub2RlLmRlY2xhcmF0aW9uLCBzdCwgbm9kZS50eXBlID09PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiB8fCBub2RlLmRlY2xhcmF0aW9uLmlkID8gXCJTdGF0ZW1lbnRcIiA6IFwiRXhwcmVzc2lvblwiKTsgfVxuICBpZiAobm9kZS5zb3VyY2UpIHsgYyhub2RlLnNvdXJjZSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxufTtcbmJhc2UuRXhwb3J0QWxsRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuZXhwb3J0ZWQpXG4gICAgeyBjKG5vZGUuZXhwb3J0ZWQsIHN0KTsgfVxuICBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuSW1wb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLnNwZWNpZmllcnM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgIHtcbiAgICB2YXIgc3BlYyA9IGxpc3RbaV07XG5cbiAgICBjKHNwZWMsIHN0KTtcbiAgfVxuICBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuSW1wb3J0RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuSW1wb3J0U3BlY2lmaWVyID0gYmFzZS5JbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gYmFzZS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBiYXNlLklkZW50aWZpZXIgPSBiYXNlLkxpdGVyYWwgPSBpZ25vcmU7XG5cbmJhc2UuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS50YWcsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5xdWFzaSwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbn07XG5iYXNlLkNsYXNzRGVjbGFyYXRpb24gPSBiYXNlLkNsYXNzRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLCBzdCwgXCJDbGFzc1wiKTsgfTtcbmJhc2UuQ2xhc3MgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuaWQpIHsgYyhub2RlLmlkLCBzdCwgXCJQYXR0ZXJuXCIpOyB9XG4gIGlmIChub2RlLnN1cGVyQ2xhc3MpIHsgYyhub2RlLnN1cGVyQ2xhc3MsIHN0LCBcIkV4cHJlc3Npb25cIik7IH1cbiAgYyhub2RlLmJvZHksIHN0KTtcbn07XG5iYXNlLkNsYXNzQm9keSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuYm9keTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBlbHQgPSBsaXN0W2ldO1xuXG4gICAgYyhlbHQsIHN0KTtcbiAgfVxufTtcbmJhc2UuTWV0aG9kRGVmaW5pdGlvbiA9IGJhc2UuUHJvcGVydHkgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuY29tcHV0ZWQpIHsgYyhub2RlLmtleSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICBjKG5vZGUudmFsdWUsIHN0LCBcIkV4cHJlc3Npb25cIik7XG59O1xuXG5leHBvcnQgeyBhbmNlc3RvciwgYmFzZSwgZmluZE5vZGVBZnRlciwgZmluZE5vZGVBcm91bmQsIGZpbmROb2RlQXQsIGZpbmROb2RlQmVmb3JlLCBmdWxsLCBmdWxsQW5jZXN0b3IsIG1ha2UsIHJlY3Vyc2l2ZSwgc2ltcGxlIH07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/acorn-walk/dist/walk.mjs\n')},"../../node_modules/acorn/dist/acorn.mjs":function(__webpack_module__,__webpack_exports__,__webpack_require__){"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Node", function() { return Node; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Parser", function() { return Parser; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Position", function() { return Position; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SourceLocation", function() { return SourceLocation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TokContext", function() { return TokContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Token", function() { return Token; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TokenType", function() { return TokenType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultOptions", function() { return defaultOptions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLineInfo", function() { return getLineInfo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isIdentifierChar", function() { return isIdentifierChar; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isIdentifierStart", function() { return isIdentifierStart; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNewLine", function() { return isNewLine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keywordTypes", function() { return keywords$1; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lineBreak", function() { return lineBreak; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "lineBreakG", function() { return lineBreakG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nonASCIIwhitespace", function() { return nonASCIIwhitespace; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parseExpressionAt", function() { return parseExpressionAt; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tokContexts", function() { return types$1; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tokTypes", function() { return types; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tokenizer", function() { return tokenizer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "version", function() { return version; });\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",\n 5: "class enum extends super const export import",\n 6: "enum",\n strict: "implements interface let package private protected public static yield",\n strictBind: "eval arguments"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";\n\nvar keywords = {\n 5: ecma5AndLessKeywords,\n "5module": ecma5AndLessKeywords + " export import",\n 6: ecma5AndLessKeywords + " const class extends export import super"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point above 128.\n// Generated by `bin/generate-identifier-regex.js`.\nvar nonASCIIidentifierStartChars = "\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u08a0-\\u08b4\\u08b6-\\u08c7\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\u9ffc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7bf\\ua7c2-\\ua7ca\\ua7f5-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc";\nvar nonASCIIidentifierChars = "\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08d3-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf\\u1ac0\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1df9\\u1dfb-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f";\n\nvar nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");\nvar nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by bin/generate-identifier-regex.js\n\n// eslint-disable-next-line comma-spacing\nvar astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,107,20,28,22,13,52,76,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,190,0,80,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8952,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42717,35,4148,12,221,3,5761,15,7472,3104,541,1507,4938];\n\n// eslint-disable-next-line comma-spacing\nvar astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,154,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords$1 = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords$1[name] = new TokenType(name, options)\n}\n\nvar types = {\n num: new TokenType("num", startsExpr),\n regexp: new TokenType("regexp", startsExpr),\n string: new TokenType("string", startsExpr),\n name: new TokenType("name", startsExpr),\n eof: new TokenType("eof"),\n\n // Punctuation token types.\n bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType("]"),\n braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType("}"),\n parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(")"),\n comma: new TokenType(",", beforeExpr),\n semi: new TokenType(";", beforeExpr),\n colon: new TokenType(":", beforeExpr),\n dot: new TokenType("."),\n question: new TokenType("?", beforeExpr),\n questionDot: new TokenType("?."),\n arrow: new TokenType("=>", beforeExpr),\n template: new TokenType("template"),\n invalidTemplate: new TokenType("invalidTemplate"),\n ellipsis: new TokenType("...", beforeExpr),\n backQuote: new TokenType("`", startsExpr),\n dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType("=", {beforeExpr: true, isAssign: true}),\n assign: new TokenType("_=", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType("!/~", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop("||", 1),\n logicalAND: binop("&&", 2),\n bitwiseOR: binop("|", 3),\n bitwiseXOR: binop("^", 4),\n bitwiseAND: binop("&", 5),\n equality: binop("==/!=/===/!==", 6),\n relational: binop("</>/<=/>=", 7),\n bitShift: binop("<</>>/>>>", 8),\n plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop("%", 10),\n star: binop("*", 10),\n slash: binop("/", 10),\n starstar: new TokenType("**", {beforeExpr: true}),\n coalesce: binop("??", 1),\n\n // Keyword token types.\n _break: kw("break"),\n _case: kw("case", beforeExpr),\n _catch: kw("catch"),\n _continue: kw("continue"),\n _debugger: kw("debugger"),\n _default: kw("default", beforeExpr),\n _do: kw("do", {isLoop: true, beforeExpr: true}),\n _else: kw("else", beforeExpr),\n _finally: kw("finally"),\n _for: kw("for", {isLoop: true}),\n _function: kw("function", startsExpr),\n _if: kw("if"),\n _return: kw("return", beforeExpr),\n _switch: kw("switch"),\n _throw: kw("throw", beforeExpr),\n _try: kw("try"),\n _var: kw("var"),\n _const: kw("const"),\n _while: kw("while", {isLoop: true}),\n _with: kw("with"),\n _new: kw("new", {beforeExpr: true, startsExpr: true}),\n _this: kw("this", startsExpr),\n _super: kw("super", startsExpr),\n _class: kw("class", startsExpr),\n _extends: kw("extends", beforeExpr),\n _export: kw("export"),\n _import: kw("import", startsExpr),\n _null: kw("null", startsExpr),\n _true: kw("true", startsExpr),\n _false: kw("false", startsExpr),\n _in: kw("in", {beforeExpr: true, binop: 7}),\n _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}),\n _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, "g");\n\nfunction isNewLine(code, ecma2019String) {\n return code === 10 || code === 13 || (!ecma2019String && (code === 0x2028 || code === 0x2029))\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\n// Checks if an object has a property.\n\nfunction has(obj, propName) {\n return hasOwnProperty.call(obj, propName)\n}\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === "[object Array]"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$")\n}\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n lineBreakG.lastIndex = cur;\n var match = lineBreakG.exec(input);\n if (match && match.index < offset) {\n ++line;\n cur = match.index + match[0].length;\n } else {\n return new Position(line, offset - cur)\n }\n }\n}\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (2015), 7 (2016), 8 (2017), 9 (2018), or 10\n // (2019). This influences support for strict mode, the set of\n // reserved words, and support for new syntax features. The default\n // is 10.\n ecmaVersion: 10,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `"script"` or `"module"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: "script",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value "never", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program.\n allowImportExportEverywhere: false,\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: false,\n // When enabled, hashbang directive in the beginning of file\n // is allowed and treated as a line comment.\n allowHashBang: false,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node\'s `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && has(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion >= 2015)\n { options.ecmaVersion -= 2009; }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? "Block" : "Line",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]);\n var reserved = "";\n if (options.allowReserved !== true) {\n for (var v = options.ecmaVersion;; v--)\n { if (reserved = reservedWords[v]) { break } }\n if (options.sourceType === "module") { reserved += " await"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf("\\n", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it\'s a module code.\n this.inModule = options.sourceType === "module";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = {};\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 };\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 };\nprototypeAccessors.allowSuper.get = function () { return (this.currentThisScope().flags & SCOPE_SUPER) > 0 };\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\n// Switch to a getter for 7.0.0.\nParser.prototype.inNonArrowFunction = function inNonArrowFunction () { return (this.currentThisScope().flags & SCOPE_FUNCTION) > 0 };\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:\'((?:\\\\.|[^\'\\\\])*?)\'|"((?:\\\\.|[^"\\\\])*?)")/;\npp.strictDirective = function(start) {\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === "use strict") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === ";" || next === "}" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "="))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === ";")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp.isContextual = function(name) {\n return this.type === types.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp.canInsertSemicolon = function() {\n return this.type === types.eof ||\n this.type === types.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp.semicolon = function() {\n if (!this.eat(types.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, "Unexpected token");\n};\n\nfunction DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n}\n\npp.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, "Parenthesized pattern"); }\n};\n\npp.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); }\n};\n\npp.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, "Yield expression cannot be a default value"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, "Await expression cannot be a default value"); }\n};\n\npp.isSimpleAssignTarget = function(expr) {\n if (expr.type === "ParenthesizedExpression")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === "Identifier" || expr.type === "MemberExpression"\n};\n\nvar pp$1 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$1.parseTopLevel = function(node) {\n var exports = {};\n if (!node.body) { node.body = []; }\n while (this.type !== types.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, ("Export \'" + name + "\' is not defined"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, "Program")\n};\n\nvar loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"};\n\npp$1.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual("let")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91) { return true } // \'[\'\n if (context) { return false }\n\n if (nextCh === 123) { return true } // \'{\'\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(this.input.charCodeAt(pos), true)) { ++pos; }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check \'async [no LineTerminator here] function\'\n// - \'async /*foo*/ function\' is OK.\n// - \'async /*\\n*/ function\' is invalid.\npp$1.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual("async"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === "function" &&\n (next + 8 === this.input.length || !isIdentifierChar(this.input.charAt(next + 8)))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$1.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types._var;\n kind = "let";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types._break: case types._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types._debugger: return this.parseDebuggerStatement(node)\n case types._do: return this.parseDoStatement(node)\n case types._for: return this.parseForStatement(node)\n case types._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types._if: return this.parseIfStatement(node)\n case types._return: return this.parseReturnStatement(node)\n case types._switch: return this.parseSwitchStatement(node)\n case types._throw: return this.parseThrowStatement(node)\n case types._try: return this.parseTryStatement(node)\n case types._const: case types._var:\n kind = kind || this.value;\n if (context && kind !== "var") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types._while: return this.parseWhileStatement(node)\n case types._with: return this.parseWithStatement(node)\n case types.braceL: return this.parseBlock(true, node)\n case types.semi: return this.parseEmptyStatement(node)\n case types._export:\n case types._import:\n if (this.options.ecmaVersion > 10 && starttype === types._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // \'(\' or \'.\'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, "\'import\' and \'export\' may only appear at the top level"); }\n if (!this.inModule)\n { this.raise(this.start, "\'import\' and \'export\' may appear only with \'sourceType: module\'"); }\n }\n return starttype === types._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it\'s an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types.name && expr.type === "Identifier" && this.eat(types.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$1.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === "break";\n this.next();\n if (this.eat(types.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === "loop")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, "Unsyntactic " + keyword); }\n return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement")\n};\n\npp$1.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, "DebuggerStatement")\n};\n\npp$1.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement("do");\n this.labels.pop();\n this.expect(types._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, "DoWhileStatement")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$1.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction)) && this.eatContextual("await")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types.parenL);\n if (this.type === types.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types._var || this.type === types._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? "let" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, "VariableDeclaration");\n if ((this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(true, refDestructuringErrors);\n if (this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLVal(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$1.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$1.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement("if");\n node.alternate = this.eat(types._else) ? this.parseStatement("if") : null;\n return this.finishNode(node, "IfStatement")\n};\n\npp$1.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, "\'return\' outside of function"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, "ReturnStatement")\n};\n\npp$1.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types.braceR;) {\n if (this.type === types._case || this.type === types._default) {\n var isCase = this.type === types._case;\n if (cur) { this.finishNode(cur, "SwitchCase"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, "SwitchCase"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, "SwitchStatement")\n};\n\npp$1.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, "Illegal newline after throw"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, "ThrowStatement")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty = [];\n\npp$1.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types.parenL)) {\n clause.param = this.parseBindingAtom();\n var simple = clause.param.type === "Identifier";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLVal(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types.parenR);\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, "CatchClause");\n }\n node.finalizer = this.eat(types._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, "Missing catch or finally clause"); }\n return this.finishNode(node, "TryStatement")\n};\n\npp$1.parseVarStatement = function(node, kind) {\n this.next();\n this.parseVar(node, false, kind);\n this.semicolon();\n return this.finishNode(node, "VariableDeclaration")\n};\n\npp$1.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement("while");\n this.labels.pop();\n return this.finishNode(node, "WhileStatement")\n};\n\npp$1.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, "\'with\' in strict mode"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement("with");\n return this.finishNode(node, "WithStatement")\n};\n\npp$1.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, "EmptyStatement")\n};\n\npp$1.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, "Label \'" + maybeName + "\' is already declared");\n } }\n var kind = this.type.isLoop ? "loop" : this.type === types._switch ? "switch" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, "LabeledStatement")\n};\n\npp$1.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, "ExpressionStatement")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `"use\n// strict"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$1.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, "BlockStatement")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$1.parseFor = function(node, init) {\n node.init = init;\n this.expect(types.semi);\n node.test = this.type === types.semi ? null : this.parseExpression();\n this.expect(types.semi);\n node.update = this.type === types.parenR ? null : this.parseExpression();\n this.expect(types.parenR);\n node.body = this.parseStatement("for");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, "ForStatement")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser\'s perspective.\n\npp$1.parseForIn = function(node, init) {\n var isForIn = this.type === types._in;\n this.next();\n\n if (\n init.type === "VariableDeclaration" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== "var" ||\n init.declarations[0].id.type !== "Identifier"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer")\n );\n } else if (init.type === "AssignmentPattern") {\n this.raise(init.start, "Invalid left-hand side in for-loop");\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types.parenR);\n node.body = this.parseStatement("for");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement")\n};\n\n// Parse a list of variable declarations.\n\npp$1.parseVar = function(node, isFor, kind) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (kind === "const" && !(this.type === types._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) {\n this.unexpected();\n } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === types._in || this.isContextual("of")))) {\n this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, "VariableDeclarator"));\n if (!this.eat(types.comma)) { break }\n }\n return node\n};\n\npp$1.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLVal(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$1.parseFunction = function(node, statement, allowExpressionBody, isAsync) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLVal(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression")\n};\n\npp$1.parseFunctionParams = function(node) {\n this.expect(types.parenL);\n node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$1.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types.braceL);\n while (this.type !== types.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === "MethodDefinition" && element.kind === "constructor") {\n if (hadConstructor) { this.raise(element.start, "Duplicate constructor in the same class"); }\n hadConstructor = true;\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, "ClassBody");\n return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression")\n};\n\npp$1.parseClassElement = function(constructorAllowsSuper) {\n var this$1 = this;\n\n if (this.eat(types.semi)) { return null }\n\n var method = this.startNode();\n var tryContextual = function (k, noLineBreak) {\n if ( noLineBreak === void 0 ) noLineBreak = false;\n\n var start = this$1.start, startLoc = this$1.startLoc;\n if (!this$1.eatContextual(k)) { return false }\n if (this$1.type !== types.parenL && (!noLineBreak || !this$1.canInsertSemicolon())) { return true }\n if (method.key) { this$1.unexpected(); }\n method.computed = false;\n method.key = this$1.startNodeAt(start, startLoc);\n method.key.name = k;\n this$1.finishNode(method.key, "Identifier");\n return false\n };\n\n method.kind = "method";\n method.static = tryContextual("static");\n var isGenerator = this.eat(types.star);\n var isAsync = false;\n if (!isGenerator) {\n if (this.options.ecmaVersion >= 8 && tryContextual("async", true)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);\n } else if (tryContextual("get")) {\n method.kind = "get";\n } else if (tryContextual("set")) {\n method.kind = "set";\n }\n }\n if (!method.key) { this.parsePropertyName(method); }\n var key = method.key;\n var allowsDirectSuper = false;\n if (!method.computed && !method.static && (key.type === "Identifier" && key.name === "constructor" ||\n key.type === "Literal" && key.value === "constructor")) {\n if (method.kind !== "method") { this.raise(key.start, "Constructor can\'t have get/set modifier"); }\n if (isGenerator) { this.raise(key.start, "Constructor can\'t be a generator"); }\n if (isAsync) { this.raise(key.start, "Constructor can\'t be an async method"); }\n method.kind = "constructor";\n allowsDirectSuper = constructorAllowsSuper;\n } else if (method.static && key.type === "Identifier" && key.name === "prototype") {\n this.raise(key.start, "Classes may not have a static property named prototype");\n }\n this.parseClassMethod(method, isGenerator, isAsync, allowsDirectSuper);\n if (method.kind === "get" && method.value.params.length !== 0)\n { this.raiseRecoverable(method.value.start, "getter should have no params"); }\n if (method.kind === "set" && method.value.params.length !== 1)\n { this.raiseRecoverable(method.value.start, "setter should have exactly one param"); }\n if (method.kind === "set" && method.value.params[0].type === "RestElement")\n { this.raiseRecoverable(method.value.params[0].start, "Setter cannot use rest params"); }\n return method\n};\n\npp$1.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n return this.finishNode(method, "MethodDefinition")\n};\n\npp$1.parseClassId = function(node, isStatement) {\n if (this.type === types.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLVal(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$1.parseClassSuper = function(node) {\n node.superClass = this.eat(types._extends) ? this.parseExprSubscripts() : null;\n};\n\n// Parses module export declaration.\n\npp$1.parseExport = function(node, exports) {\n this.next();\n // export * from \'...\'\n if (this.eat(types.star)) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual("as")) {\n node.exported = this.parseIdent(true);\n this.checkExport(exports, node.exported.name, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual("from");\n if (this.type !== types.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, "ExportAllDeclaration")\n }\n if (this.eat(types._default)) { // export default ...\n this.checkExport(exports, "default", this.lastTokStart);\n var isAsync;\n if (this.type === types._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);\n } else if (this.type === types._class) {\n var cNode = this.startNode();\n node.declaration = this.parseClass(cNode, "nullableID");\n } else {\n node.declaration = this.parseMaybeAssign();\n this.semicolon();\n }\n return this.finishNode(node, "ExportDefaultDeclaration")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseStatement(null);\n if (node.declaration.type === "VariableDeclaration")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id.name, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from \'...\']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual("from")) {\n if (this.type !== types.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, "ExportNamedDeclaration")\n};\n\npp$1.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (has(exports, name))\n { this.raiseRecoverable(pos, "Duplicate export \'" + name + "\'"); }\n exports[name] = true;\n};\n\npp$1.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === "Identifier")\n { this.checkExport(exports, pat.name, pat.start); }\n else if (type === "ObjectPattern")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === "ArrayPattern")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === "Property")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === "AssignmentPattern")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === "RestElement")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === "ParenthesizedExpression")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$1.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$1.shouldParseExportStatement = function() {\n return this.type.keyword === "var" ||\n this.type.keyword === "const" ||\n this.type.keyword === "class" ||\n this.type.keyword === "function" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$1.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from \'...\']\n this.expect(types.braceL);\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var node = this.startNode();\n node.local = this.parseIdent(true);\n node.exported = this.eatContextual("as") ? this.parseIdent(true) : node.local;\n this.checkExport(exports, node.exported.name, node.exported.start);\n nodes.push(this.finishNode(node, "ExportSpecifier"));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$1.parseImport = function(node) {\n this.next();\n // import \'...\'\n if (this.type === types.string) {\n node.specifiers = empty;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual("from");\n node.source = this.type === types.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, "ImportDeclaration")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$1.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types.name) {\n // import defaultObj, { x, y as z } from \'...\'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLVal(node.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node, "ImportDefaultSpecifier"));\n if (!this.eat(types.comma)) { return nodes }\n }\n if (this.type === types.star) {\n var node$1 = this.startNode();\n this.next();\n this.expectContextual("as");\n node$1.local = this.parseIdent();\n this.checkLVal(node$1.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier"));\n return nodes\n }\n this.expect(types.braceL);\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var node$2 = this.startNode();\n node$2.imported = this.parseIdent(true);\n if (this.eatContextual("as")) {\n node$2.local = this.parseIdent();\n } else {\n this.checkUnreserved(node$2.imported);\n node$2.local = node$2.imported;\n }\n this.checkLVal(node$2.local, BIND_LEXICAL);\n nodes.push(this.finishNode(node$2, "ImportSpecifier"));\n }\n return nodes\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$1.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$1.isDirectiveCandidate = function(statement) {\n return (\n statement.type === "ExpressionStatement" &&\n statement.expression.type === "Literal" &&\n typeof statement.expression.value === "string" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === "\\"" || this.input[statement.start] === "\'")\n )\n};\n\nvar pp$2 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$2.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case "Identifier":\n if (this.inAsync && node.name === "await")\n { this.raise(node.start, "Cannot use \'await\' as identifier inside an async function"); }\n break\n\n case "ObjectPattern":\n case "ArrayPattern":\n case "RestElement":\n break\n\n case "ObjectExpression":\n node.type = "ObjectPattern";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === "RestElement" &&\n (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")\n ) {\n this.raise(prop.argument.start, "Unexpected token");\n }\n }\n break\n\n case "Property":\n // AssignmentProperty has type === "Property"\n if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can\'t contain getter or setter"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case "ArrayExpression":\n node.type = "ArrayPattern";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case "SpreadElement":\n node.type = "RestElement";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === "AssignmentPattern")\n { this.raise(node.argument.start, "Rest elements cannot have a default value"); }\n break\n\n case "AssignmentExpression":\n if (node.operator !== "=") { this.raise(node.left.end, "Only \'=\' operator can be used for specifying default value."); }\n node.type = "AssignmentPattern";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n // falls through to AssignmentPattern\n\n case "AssignmentPattern":\n break\n\n case "ParenthesizedExpression":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case "ChainExpression":\n this.raiseRecoverable(node.start, "Optional chaining cannot appear in left-hand side");\n break\n\n case "MemberExpression":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, "Assigning to rvalue");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$2.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$2.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, "SpreadElement")\n};\n\npp$2.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, "RestElement")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$2.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types.bracketR, true, true);\n return this.finishNode(node, "ArrayPattern")\n\n case types.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$2.parseBindingList = function(close, allowEmpty, allowTrailingComma) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types.comma); }\n if (allowEmpty && this.type === types.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }\n this.expect(close);\n break\n } else {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n elts.push(elem);\n }\n }\n return elts\n};\n\npp$2.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$2.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, "AssignmentPattern")\n};\n\n// Verify that a node is an lval — something that can be assigned\n// to.\n// bindingType can be either:\n// \'var\' indicating that the lval creates a \'var\' binding\n// \'let\' indicating that the lval creates a lexical (\'let\' or \'const\') binding\n// \'none\' indicating that the binding should be checked for illegal identifiers, but not for duplicate references\n\npp$2.checkLVal = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case "Identifier":\n if (bindingType === BIND_LEXICAL && expr.name === "let")\n { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); }\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (bindingType ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); }\n if (checkClashes) {\n if (has(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, "Argument name clash"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_NONE && bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n break\n\n case "ChainExpression":\n this.raiseRecoverable(expr.start, "Optional chaining cannot appear in left-hand side");\n break\n\n case "MemberExpression":\n if (bindingType) { this.raiseRecoverable(expr.start, "Binding member expression"); }\n break\n\n case "ObjectPattern":\n for (var i = 0, list = expr.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkLVal(prop, bindingType, checkClashes);\n }\n break\n\n case "Property":\n // AssignmentProperty has type === "Property"\n this.checkLVal(expr.value, bindingType, checkClashes);\n break\n\n case "ArrayPattern":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLVal(elem, bindingType, checkClashes); }\n }\n break\n\n case "AssignmentPattern":\n this.checkLVal(expr.left, bindingType, checkClashes);\n break\n\n case "RestElement":\n this.checkLVal(expr.argument, bindingType, checkClashes);\n break\n\n case "ParenthesizedExpression":\n this.checkLVal(expr.expression, bindingType, checkClashes);\n break\n\n default:\n this.raise(expr.start, (bindingType ? "Binding" : "Assigning to") + " rvalue");\n }\n};\n\n// A recursive descent parser operates by defining functions for all\n\nvar pp$3 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$3.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case "Identifier": name = key.name; break\n case "Literal": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === "__proto__" && kind === "init") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0)\n { refDestructuringErrors.doubleProto = key.start; }\n // Backwards-compat kludge. Can be removed in version 6.0\n } else { this.raiseRecoverable(key.start, "Redefinition of __proto__ property"); }\n }\n propHash.proto = true;\n }\n return\n }\n name = "$" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === "init") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, "Redefinition of property"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// \'atomic\', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing \'=\' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it\'s possible to raise\n// delayed syntax error at correct position).\n\npp$3.parseExpression = function(noIn, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(noIn, refDestructuringErrors);\n if (this.type === types.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types.comma)) { node.expressions.push(this.parseMaybeAssign(noIn, refDestructuringErrors)); }\n return this.finishNode(node, "SequenceExpression")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$3.parseMaybeAssign = function(noIn, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual("yield")) {\n if (this.inGenerator) { return this.parseYield(noIn) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn\'t that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types.parenL || this.type === types.name)\n { this.potentialArrowAt = this.start; }\n var left = this.parseMaybeConditional(noIn, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n node.left = this.type === types.eq ? this.toAssignable(left, false, refDestructuringErrors) : left;\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= node.left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n this.checkLVal(left);\n this.next();\n node.right = this.parseMaybeAssign(noIn);\n return this.finishNode(node, "AssignmentExpression")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$3.parseMaybeConditional = function(noIn, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(noIn, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types.colon);\n node.alternate = this.parseMaybeAssign(noIn);\n return this.finishNode(node, "ConditionalExpression")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$3.parseExprOps = function(noIn, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, noIn)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$3.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, noIn) {\n var prec = this.type.binop;\n if (prec != null && (!noIn || this.type !== types._in)) {\n if (prec > minPrec) {\n var logical = this.type === types.logicalOR || this.type === types.logicalAND;\n var coalesce = this.type === types.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn\'t contain logical expressions in order to check the mixed error.\n prec = types.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false), startPos, startLoc, prec, noIn);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types.coalesce) || (coalesce && (this.type === types.logicalOR || this.type === types.logicalAND))) {\n this.raiseRecoverable(this.start, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, noIn)\n }\n }\n return left\n};\n\npp$3.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$3.parseMaybeUnary = function(refDestructuringErrors, sawUnary) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual("await") && (this.inAsync || (!this.inFunction && this.options.allowAwaitOutsideFunction))) {\n expr = this.parseAwait();\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLVal(node.argument); }\n else if (this.strict && node.operator === "delete" &&\n node.argument.type === "Identifier")\n { this.raiseRecoverable(node.start, "Deleting local variable in strict mode"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLVal(expr);\n this.next();\n expr = this.finishNode(node$1, "UpdateExpression");\n }\n }\n\n if (!sawUnary && this.eat(types.starstar))\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false), "**", false) }\n else\n { return expr }\n};\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$3.parseExprSubscripts = function(refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors);\n if (expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc);\n if (refDestructuringErrors && result.type === "MemberExpression") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n }\n return result\n};\n\npp$3.parseSubscripts = function(base, startPos, startLoc, noCalls) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === "ArrowFunctionExpression") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, "ChainExpression");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$3.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, "Optional chaining cannot appear in the callee of new expressions"); }\n\n var computed = this.eat(types.bracketL);\n if (computed || (optional && this.type !== types.parenL && this.type !== types.backQuote) || this.eat(types.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n node.property = computed ? this.parseExpression() : this.parseIdent(this.options.allowReserved !== "never");\n node.computed = !!computed;\n if (computed) { this.expect(types.bracketR); }\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, "MemberExpression");\n } else if (!noCalls && this.eat(types.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, "Cannot use \'await\' as identifier inside an async function"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, "CallExpression");\n } else if (this.type === types.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, "Optional chaining cannot appear in the tag of tagged template expressions");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, "TaggedTemplateExpression");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$3.parseExprAtom = function(refDestructuringErrors) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types._super:\n if (!this.allowSuper)\n { this.raise(this.start, "\'super\' keyword outside a method"); }\n node = this.startNode();\n this.next();\n if (this.type === types.parenL && !this.allowDirectSuper)\n { this.raise(node.start, "super() call outside constructor of a subclass"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types.dot && this.type !== types.bracketL && this.type !== types.parenL)\n { this.unexpected(); }\n return this.finishNode(node, "Super")\n\n case types._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, "ThisExpression")\n\n case types.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types._function))\n { return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true) }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false) }\n if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types.name && !containsEsc) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true)\n }\n }\n return id\n\n case types.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types.num: case types.string:\n return this.parseLiteral(this.value)\n\n case types._null: case types._true: case types._false:\n node = this.startNode();\n node.value = this.type === types._null ? null : this.type === types._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, "Literal")\n\n case types.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, "ArrayExpression")\n\n case types.braceL:\n return this.parseObj(false, refDestructuringErrors)\n\n case types._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types._class:\n return this.parseClass(this.startNode(), false)\n\n case types._new:\n return this.parseNew()\n\n case types.backQuote:\n return this.parseTemplate()\n\n case types._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport()\n } else {\n return this.unexpected()\n }\n\n default:\n this.unexpected();\n }\n};\n\npp$3.parseExprImport = function() {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn\'t check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword import"); }\n var meta = this.parseIdent(true);\n\n switch (this.type) {\n case types.parenL:\n return this.parseDynamicImport(node)\n case types.dot:\n node.meta = meta;\n return this.parseImportMeta(node)\n default:\n this.unexpected();\n }\n};\n\npp$3.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types.parenR)) {\n var errorPos = this.start;\n if (this.eat(types.comma) && this.eat(types.parenR)) {\n this.raiseRecoverable(errorPos, "Trailing comma is not allowed in import()");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, "ImportExpression")\n};\n\npp$3.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== "meta")\n { this.raiseRecoverable(node.property.start, "The only valid meta property for import is \'import.meta\'"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, "\'import.meta\' must not contain escaped characters"); }\n if (this.options.sourceType !== "module")\n { this.raiseRecoverable(node.start, "Cannot use \'import.meta\' outside a module"); }\n\n return this.finishNode(node, "MetaProperty")\n};\n\npp$3.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, ""); }\n this.next();\n return this.finishNode(node, "Literal")\n};\n\npp$3.parseParenExpression = function() {\n this.expect(types.parenL);\n var val = this.parseExpression();\n this.expect(types.parenR);\n return val\n};\n\npp$3.parseParenAndDistinguishExpression = function(canBeArrow) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types.parenR) {\n first ? first = false : this.expect(types.comma);\n if (allowTrailingComma && this.afterTrailingComma(types.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.start, innerEndLoc = this.startLoc;\n this.expect(types.parenR);\n\n if (canBeArrow && !this.canInsertSemicolon() && this.eat(types.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, "ParenthesizedExpression")\n } else {\n return val\n }\n};\n\npp$3.parseParenItem = function(item) {\n return item\n};\n\npp$3.parseParenArrowList = function(startPos, startLoc, exprList) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList)\n};\n\n// New\'s precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty$1 = [];\n\npp$3.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword new"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== "target")\n { this.raiseRecoverable(node.property.start, "The only valid meta property for new is \'new.target\'"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, "\'new.target\' must not contain escaped characters"); }\n if (!this.inNonArrowFunction())\n { this.raiseRecoverable(node.start, "\'new.target\' can only be used in functions"); }\n return this.finishNode(node, "MetaProperty")\n }\n var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types._import;\n node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true);\n if (isImport && node.callee.type === "ImportExpression") {\n this.raise(startPos, "Cannot use new with import()");\n }\n if (this.eat(types.parenL)) { node.arguments = this.parseExprList(types.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty$1; }\n return this.finishNode(node, "NewExpression")\n};\n\n// Parse template expression.\n\npp$3.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, "\\n"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types.backQuote;\n return this.finishNode(elem, "TemplateElement")\n};\n\npp$3.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types.eof) { this.raise(this.pos, "Unterminated template literal"); }\n this.expect(types.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, "TemplateLiteral")\n};\n\npp$3.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" &&\n (this.type === types.name || this.type === types.num || this.type === types.string || this.type === types.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$3.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types.braceR)) {\n if (!first) {\n this.expect(types.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression")\n};\n\npp$3.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types.comma) {\n this.raise(this.start, "Comma is not permitted after the rest element");\n }\n return this.finishNode(prop, "RestElement")\n }\n // To disallow parenthesized identifier via `this.toAssignable()`.\n if (this.type === types.parenL && refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0) {\n refDestructuringErrors.parenthesizedAssign = this.start;\n }\n if (refDestructuringErrors.parenthesizedBind < 0) {\n refDestructuringErrors.parenthesizedBind = this.start;\n }\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, "SpreadElement")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types.star);\n this.parsePropertyName(prop, refDestructuringErrors);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, "Property")\n};\n\npp$3.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types.colon)\n { this.unexpected(); }\n\n if (this.eat(types.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = "init";\n } else if (this.options.ecmaVersion >= 6 && this.type === types.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = "init";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" &&\n (prop.key.name === "get" || prop.key.name === "set") &&\n (this.type !== types.comma && this.type !== types.braceR && this.type !== types.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === "get" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === "get")\n { this.raiseRecoverable(start, "getter should have no params"); }\n else\n { this.raiseRecoverable(start, "setter should have exactly one param"); }\n } else {\n if (prop.kind === "set" && prop.value.params[0].type === "RestElement")\n { this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params"); }\n }\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === "await" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = "init";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);\n } else if (this.type === types.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, prop.key);\n } else {\n prop.value = prop.key;\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$3.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types.num || this.type === types.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never")\n};\n\n// Initialize empty function node.\n\npp$3.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$3.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types.parenL);\n node.params = this.parseBindingList(types.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, "FunctionExpression")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$3.parseArrowExpression = function(node, params, isAsync) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, "ArrowFunctionExpression")\n};\n\n// Parse function body and check parameters.\n\npp$3.parseFunctionBody = function(node, isArrowFunction, isMethod) {\n var isExpression = isArrowFunction && this.type !== types.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign();\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, "Illegal \'use strict\' directive in function with non-simple parameter list"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn\'t a forbidden identifier in strict mode, e.g. \'eval\'\n if (this.strict && node.id) { this.checkLVal(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$3.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== "Identifier") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using "eval"\n// or "arguments" and duplicate parameters.\n\npp$3.checkParams = function(node, allowDuplicates) {\n var nameHash = {};\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLVal(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$3.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types.comma)\n { elt = null; }\n else if (this.type === types.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$3.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === "yield")\n { this.raiseRecoverable(start, "Cannot use \'yield\' as identifier inside a generator"); }\n if (this.inAsync && name === "await")\n { this.raiseRecoverable(start, "Cannot use \'await\' as identifier inside an async function"); }\n if (this.keywords.test(name))\n { this.raise(start, ("Unexpected keyword \'" + name + "\'")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf("\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === "await")\n { this.raiseRecoverable(start, "Cannot use keyword \'await\' outside an async function"); }\n this.raiseRecoverable(start, ("The keyword \'" + name + "\' is reserved"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$3.parseIdent = function(liberal, isBinding) {\n var node = this.startNode();\n if (this.type === types.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === "class" || node.name === "function") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n this.next(!!liberal);\n this.finishNode(node, "Identifier");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === "await" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$3.parseYield = function(noIn) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types.semi || this.canInsertSemicolon() || (this.type !== types.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types.star);\n node.argument = this.parseMaybeAssign(noIn);\n }\n return this.finishNode(node, "YieldExpression")\n};\n\npp$3.parseAwait = function() {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, false);\n return this.finishNode(node, "AwaitExpression")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += " (" + loc.line + ":" + loc.column + ")";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$5 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$5.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$5.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$5.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$5.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, ("Identifier \'" + name + "\' has already been declared")); }\n};\n\npp$5.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$5.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$5.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$5.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = "";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$6 = Parser.prototype;\n\npp$6.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$6.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$6.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$6.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types$1 = {\n b_stat: new TokContext("{", false),\n b_expr: new TokContext("{", true),\n b_tmpl: new TokContext("${", false),\n p_stat: new TokContext("(", false),\n p_expr: new TokContext("(", true),\n q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext("function", false),\n f_expr: new TokContext("function", true),\n f_expr_gen: new TokContext("function", true, false, null, true),\n f_gen: new TokContext("function", false, false, null, true)\n};\n\nvar pp$7 = Parser.prototype;\n\npp$7.initialContext = function() {\n return [types$1.b_stat]\n};\n\npp$7.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types$1.f_expr || parent === types$1.f_stat)\n { return true }\n if (prevType === types.colon && (parent === types$1.b_stat || parent === types$1.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types._return || prevType === types.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types._else || prevType === types.semi || prevType === types.eof || prevType === types.parenR || prevType === types.arrow)\n { return true }\n if (prevType === types.braceL)\n { return parent === types$1.b_stat }\n if (prevType === types._var || prevType === types._const || prevType === types.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$7.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === "function")\n { return context.generator }\n }\n return false\n};\n\npp$7.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Token-specific context update code\n\ntypes.parenR.updateContext = types.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types$1.b_stat && this.curContext().token === "function") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types$1.b_stat : types$1.b_expr);\n this.exprAllowed = true;\n};\n\ntypes.dollarBraceL.updateContext = function() {\n this.context.push(types$1.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while;\n this.context.push(statementParens ? types$1.p_stat : types$1.p_expr);\n this.exprAllowed = true;\n};\n\ntypes.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes._function.updateContext = types._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types.semi && prevType !== types._else &&\n !(prevType === types._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types.colon || prevType === types.braceL) && this.curContext() === types$1.b_stat))\n { this.context.push(types$1.f_expr); }\n else\n { this.context.push(types$1.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes.backQuote.updateContext = function() {\n if (this.curContext() === types$1.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types$1.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes.star.updateContext = function(prevType) {\n if (prevType === types._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types$1.f_expr)\n { this.context[index] = types$1.f_expr_gen; }\n else\n { this.context[index] = types$1.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types.dot) {\n if (this.value === "of" && !this.exprAllowed ||\n this.value === "yield" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// This file contains Unicode properties extracted from the ECMAScript\n// specification. The lists are extracted like so:\n// $$(\'#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code\').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";\nvar ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = "Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";\nvar ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";\nvar ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\nbuildUnicodeData(9);\nbuildUnicodeData(10);\nbuildUnicodeData(11);\n\nvar pp$8 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 11 ? 11 : parser.options.ecmaVersion];\n this.source = "";\n this.flags = "";\n this.start = 0;\n this.switchU = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = "";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicode = flags.indexOf("u") !== -1;\n this.start = start | 0;\n this.source = pattern + "";\n this.flags = flags;\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nfunction codePointToString(ch) {\n if (ch <= 0xFFFF) { return String.fromCharCode(ch) }\n ch -= 0x10000;\n return String.fromCharCode((ch >> 10) + 0xD800, (ch & 0x03FF) + 0xDC00)\n}\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$8.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, "Invalid regular expression flag");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, "Duplicate regular expression flag");\n }\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$8.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$8.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = "";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise("Unmatched \')\'");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise("Lone quantifier brackets");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise("Invalid escape");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise("Invalid named capture referenced");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$8.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise("Nothing to repeat");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise("Lone quantifier brackets");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$8.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$8.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise("Invalid quantifier");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$8.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise("Unterminated group");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$8.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$8.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$8.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise("numbers out of order in {} quantifier");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise("Incomplete quantifier");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$8.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$8.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise("Unterminated group");\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise("Invalid group");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise("Unterminated group");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$8.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$8.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise("Nothing to repeat");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$8.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$8.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$8.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$8.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise("Duplicate capture group name");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise("Invalid group");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$8.regexp_eatGroupName = function(state) {\n state.lastStringValue = "";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise("Invalid capture group name");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$8.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = "";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$8.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// <ZWNJ>\n// <ZWJ>\npp$8.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$8.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise("Invalid unicode escape");\n }\n state.raise("Invalid escape");\n }\n return false\n};\npp$8.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise("Invalid named reference");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$8.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$8.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$8.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$8.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$8.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$8.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise("Invalid unicode escape");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$8.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$8.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$8.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return true\n }\n\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n (ch === 0x50 /* P */ || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n if (\n state.eat(0x7B /* { */) &&\n this.regexp_eatUnicodePropertyValueExpression(state) &&\n state.eat(0x7D /* } */)\n ) {\n return true\n }\n state.raise("Invalid property name");\n }\n\n return false\n};\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$8.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return true\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n return true\n }\n return false\n};\npp$8.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!has(state.unicodeProperties.nonBinary, name))\n { state.raise("Invalid property name"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise("Invalid property value"); }\n};\npp$8.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (!state.unicodeProperties.binary.test(nameOrValue))\n { state.raise("Invalid property name"); }\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$8.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = "";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== ""\n};\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$8.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = "";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== ""\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$8.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$8.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n state.eat(0x5E /* ^ */);\n this.regexp_classRanges(state);\n if (state.eat(0x5D /* ] */)) {\n return true\n }\n // Unreachable since it threw "unterminated regular expression" error before.\n state.raise("Unterminated character class");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$8.regexp_classRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise("Invalid character class");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise("Range out of order in character class");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$8.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise("Invalid class escape");\n }\n state.raise("Invalid escape");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$8.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$8.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$8.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise("Invalid escape");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$8.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$8.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$8.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$8.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$8.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp$9 = Parser.prototype;\n\n// Move to the next token\n\npp$9.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, "Escape sequence in keyword " + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp$9.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we\'re in an ES6 environment, make parsers iterable\nif (typeof Symbol !== "undefined")\n { pp$9[Symbol.iterator] = function() {\n var this$1 = this;\n\n return {\n next: function () {\n var token = this$1.getToken();\n return {\n done: token.type === types.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`"use strict"; 010;` should fail).\n\npp$9.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\n// Read a single token, updating the parser object\'s token-related\n// properties.\n\npp$9.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp$9.readToken = function(code) {\n // Identifier or keyword. \'\\uXXXX\' sequences are allowed in\n // identifiers, so \'\\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* \'\\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp$9.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xe000) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return (code << 10) + next - 0x35fdc00\n};\n\npp$9.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf("*/", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); }\n this.pos = end + 2;\n if (this.options.locations) {\n lineBreakG.lastIndex = start;\n var match;\n while ((match = lineBreakG.exec(this.input)) && match.index < this.pos) {\n ++this.curLine;\n this.lineStart = match.index + match[0].length;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp$9.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp$9.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // \' \'\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // \'/\'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // \'*\'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one\'s `start` will point at the\n// right position.\n\npp$9.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp$9.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot \'.\'\n this.pos += 3;\n return this.finishToken(types.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types.dot)\n }\n};\n\npp$9.readToken_slash = function() { // \'/\'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.slash, 1)\n};\n\npp$9.readToken_mult_modulo_exp = function(code) { // \'%*\'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types.star : types.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp$9.readToken_pipe_amp = function(code) { // \'|&\'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types.assign, 3) }\n }\n return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1)\n};\n\npp$9.readToken_caret = function() { // \'^\'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.bitwiseXOR, 1)\n};\n\npp$9.readToken_plus_min = function(code) { // \'+-\'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `--\x3e` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types.assign, 2) }\n return this.finishOp(types.plusMin, 1)\n};\n\npp$9.readToken_lt_gt = function(code) { // \'<>\'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types.assign, size + 1) }\n return this.finishOp(types.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `\x3c!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types.relational, size)\n};\n\npp$9.readToken_eq_excl = function(code) { // \'=!\'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // \'=>\'\n this.pos += 2;\n return this.finishToken(types.arrow)\n }\n return this.finishOp(code === 61 ? types.eq : types.prefix, 1)\n};\n\npp$9.readToken_question = function() { // \'?\'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types.assign, 3) }\n }\n return this.finishOp(types.coalesce, 2)\n }\n }\n return this.finishOp(types.question, 1)\n};\n\npp$9.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // \'.\'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types.parenL)\n case 41: ++this.pos; return this.finishToken(types.parenR)\n case 59: ++this.pos; return this.finishToken(types.semi)\n case 44: ++this.pos; return this.finishToken(types.comma)\n case 91: ++this.pos; return this.finishToken(types.bracketL)\n case 93: ++this.pos; return this.finishToken(types.bracketR)\n case 123: ++this.pos; return this.finishToken(types.braceL)\n case 125: ++this.pos; return this.finishToken(types.braceR)\n case 58: ++this.pos; return this.finishToken(types.colon)\n\n case 96: // \'`\'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types.backQuote)\n\n case 48: // \'0\'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // \'0x\', \'0X\' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // \'0o\', \'0O\' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // \'0b\', \'0B\' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // \'"\', "\'"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. \'=\' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n\n case 47: // \'/\'\n return this.readToken_slash()\n\n case 37: case 42: // \'%*\'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // \'|&\'\n return this.readToken_pipe_amp(code)\n\n case 94: // \'^\'\n return this.readToken_caret()\n\n case 43: case 45: // \'+-\'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // \'<>\'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // \'=!\'\n return this.readToken_eq_excl(code)\n\n case 63: // \'?\'\n return this.readToken_question()\n\n case 126: // \'~\'\n return this.finishOp(types.prefix, 1)\n }\n\n this.raise(this.pos, "Unexpected character \'" + codePointToString$1(code) + "\'");\n};\n\npp$9.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n};\n\npp$9.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, "Unterminated regular expression"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, "Unterminated regular expression"); }\n if (!escaped) {\n if (ch === "[") { inClass = true; }\n else if (ch === "]" && inClass) { inClass = false; }\n else if (ch === "/" && !inClass) { break }\n escaped = ch === "\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types.regexp, {pattern: pattern, flags: flags, value: value})\n};\n\n// Read an integer in the given radix. Return null if zero digits\n// were read, the integer value otherwise. When `len` is given, this\n// will return `null` unless the integer has exactly `len` digits.\n\npp$9.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn\'t have prefix (0x,0o,0b)\n // and isn\'t fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed in legacy octal numeric literals"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, "Numeric separator must be exactly one underscore"); }\n if (i === 0) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed at the first of digits"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, "Numeric separator is not allowed at the last of digits"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n};\n\nfunction stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, ""))\n}\n\nfunction stringToBigInt(str) {\n if (typeof BigInt !== "function") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, ""))\n}\n\npp$9.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, "Expected number in radix " + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }\n return this.finishToken(types.num, val)\n};\n\n// Read an integer, octal integer, or floating-point number.\n\npp$9.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, "Invalid number"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, "Invalid number"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }\n return this.finishToken(types.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // \'.\'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // \'eE\'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // \'+-\'\n if (this.readInt(10) === null) { this.raise(start, "Invalid number"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types.num, val)\n};\n\n// Read a string value, interpreting backslash-escapes.\n\npp$9.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // \'{\'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, "Code point out of bounds"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n};\n\nfunction codePointToString$1(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\npp$9.readString = function(quote) {\n var out = "", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated string constant"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // \'\\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else {\n if (isNewLine(ch, this.options.ecmaVersion >= 10)) { this.raise(this.start, "Unterminated string constant"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types.string, out)\n};\n\n// Reads template string tokens.\n\nvar INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\npp$9.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n};\n\npp$9.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n};\n\npp$9.readTmplToken = function() {\n var out = "", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated template"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // \'`\', \'${\'\n if (this.pos === this.start && (this.type === types.template || this.type === types.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types.template, out)\n }\n if (ch === 92) { // \'\\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += "\\n";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n};\n\n// Reads a template token to search for the end, without validating any escape sequences\npp$9.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case "\\\\":\n ++this.pos;\n break\n\n case "$":\n if (this.input[this.pos + 1] !== "{") {\n break\n }\n // falls through\n\n case "`":\n return this.finishToken(types.invalidTemplate, this.input.slice(this.start, this.pos))\n\n // no default\n }\n }\n this.raise(this.start, "Unterminated template");\n};\n\n// Used to read escaped characters\n\npp$9.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return "\\n" // \'n\' -> \'\\n\'\n case 114: return "\\r" // \'r\' -> \'\\r\'\n case 120: return String.fromCharCode(this.readHexChar(2)) // \'x\'\n case 117: return codePointToString$1(this.readCodePoint()) // \'u\'\n case 116: return "\\t" // \'t\' -> \'\\t\'\n case 98: return "\\b" // \'b\' -> \'\\b\'\n case 118: return "\\u000b" // \'v\' -> \'\\u000b\'\n case 102: return "\\f" // \'f\' -> \'\\f\'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // \'\\r\\n\'\n case 10: // \' \\n\'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return ""\n case 56:\n case 57:\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n "Invalid escape sequence in template string"\n );\n\n return null\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? "Octal literal in template string"\n : "Octal literal in strict mode"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n return ""\n }\n return String.fromCharCode(ch)\n }\n};\n\n// Used to read character escape sequences (\'\\x\', \'\\u\', \'\\U\').\n\npp$9.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, "Bad character escape sequence"); }\n return n\n};\n\n// Read an identifier, and return it as a string. Sets `this.containsEsc`\n// to whether the word contained a \'\\u\' escape.\n//\n// Incrementally adds only escaped chars, adding other chunks as-is\n// as a micro-optimization.\n\npp$9.readWord1 = function() {\n this.containsEsc = false;\n var word = "", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // "\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // "u"\n { this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\\\uXXXX"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, "Invalid Unicode escape"); }\n word += codePointToString$1(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n};\n\n// Read an identifier or keyword token. Will check for reserved\n// words when necessary.\n\npp$9.readWord = function() {\n var word = this.readWord1();\n var type = types.name;\n if (this.keywords.test(word)) {\n type = keywords$1[word];\n }\n return this.finishToken(type, word)\n};\n\n// Acorn is a tiny, fast JavaScript parser written in JavaScript.\n\nvar version = "7.4.1";\n\nParser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types,\n keywordTypes: keywords$1,\n TokContext: TokContext,\n tokContexts: types$1,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n};\n\n// The main exported interface (under `self.acorn` when in the\n// browser) is a `parse` function that takes a code string and\n// returns an abstract syntax tree as specified by [Mozilla parser\n// API][api].\n//\n// [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API\n\nfunction parse(input, options) {\n return Parser.parse(input, options)\n}\n\n// This function tries to parse a single expression at a given\n// offset in a string. Useful for parsing mixed-language formats\n// that embed JavaScript expressions.\n\nfunction parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n}\n\n// Acorn is organized as a tokenizer and a recursive-descent parser.\n// The `tokenizer` export provides an interface to the tokenizer.\n\nfunction tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hY29ybi9kaXN0L2Fjb3JuLm1qcz8xNGUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLG1CQUFtQjtBQUNuQix1QkFBdUI7QUFDdkIseUJBQXlCO0FBQ3pCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLG1CQUFtQjtBQUNuQix1QkFBdUI7QUFDdkIseUJBQXlCO0FBQ3pCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLHNDQUFzQztBQUMzQztBQUNBLEtBQUssdUNBQXVDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLEtBQUssc0NBQXNDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyx3REFBd0Q7QUFDN0Q7QUFDQSxLQUFLLCtCQUErQjtBQUNwQzs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSyxzRkFBc0Y7QUFDM0Y7QUFDQSxLQUFLLHVDQUF1Qzs7QUFFNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLGlDQUFpQyxLQUFLOztBQUV0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlELGtCQUFrQjs7QUFFbkU7QUFDQSwrQkFBK0Isb0NBQW9DO0FBQ25FLHNDQUFzQzs7QUFFdEMsNEJBQTRCO0FBQzVCLFFBQVEsMENBQTBDO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixrREFBa0Q7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtCQUErQixrQ0FBa0M7QUFDakU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0EseUJBQXlCLFlBQVk7QUFDckMsb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUEsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBLG9CQUFvQjtBQUNwQjtBQUNBOztBQUVBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixVQUFVO0FBQzlCO0FBQ0E7O0FBRUEseUNBQXlDO0FBQ3pDO0FBQ0Esb0JBQW9CO0FBQ3BCLG9FQUFvRTtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQkFBc0I7QUFDdEIsc0JBQXNCO0FBQ3RCLHNCQUFzQjtBQUN0QixzQkFBc0I7QUFDdEIsc0JBQXNCO0FBQ3RCLHNCQUFzQjtBQUN0Qix1QkFBdUI7QUFDdkIsdUJBQXVCO0FBQ3ZCLHNCQUFzQjs7QUFFdEI7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0NBQXNDLGtDQUFrQztBQUN4RTtBQUNBLHdDQUF3QyxpQ0FBaUM7QUFDekUsdUNBQXVDLGlDQUFpQztBQUN4RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVCx3Q0FBd0Msc0RBQXNEO0FBQzlGO0FBQ0EsNkJBQTZCLHNEQUFzRDtBQUNuRjtBQUNBLHVCQUF1QixnQkFBZ0I7QUFDdkMsdUNBQXVDLGlCQUFpQjtBQUN4RCx3Q0FBd0M7QUFDeEM7QUFDQSxLQUFLLE9BQU8saUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qiw2QkFBNkI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBLHlDQUF5Qyw2Q0FBNkM7QUFDdEY7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRCxPQUFPO0FBQzFEOztBQUVBO0FBQ0Esd0NBQXdDLHNHQUFzRztBQUM5SSw0QkFBNEIscUZBQXFGO0FBQ2pILG9CQUFvQiw0RkFBNEY7QUFDaEg7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixzQkFBc0IsRUFBRTtBQUM3QywwQkFBMEIsc0JBQXNCLEVBQUU7QUFDbEQsd0NBQXdDLGlCQUFpQixFQUFFO0FBQzNELFVBQVUsZ0JBQWdCO0FBQzFCLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDLCtGQUErRjtBQUMxSSxzRUFBc0U7O0FBRXRFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0Esb0JBQW9CLGlFQUFpRTtBQUNyRjtBQUNBO0FBQ0E7QUFDQSxHQUFHLHdEQUF3RCwwREFBMEQ7QUFDckg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EscUVBQXFFLHFDQUFxQztBQUMxRztBQUNBLDZCQUE2QixxQ0FBcUM7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsMERBQTBEO0FBQ2hIO0FBQ0E7QUFDQSxnRUFBZ0UsZUFBZTtBQUMvRSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQSxxQ0FBcUMsWUFBWSxFQUFFO0FBQ25ELG9DQUFvQyxxQ0FBcUM7QUFDekU7QUFDQSxvREFBb0QsMERBQTBEOztBQUU5RztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxtQkFBbUIsTUFBTTtBQUN6Qix1Q0FBdUMsbUJBQW1CO0FBQzFEO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0EsMEJBQTBCLDhEQUE4RDtBQUN4RixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVCx3Q0FBd0Msd0RBQXdEO0FBQ2hHO0FBQ0EsdUJBQXVCO0FBQ3ZCLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsMERBQTBELHdEQUF3RDtBQUNsSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsd0NBQXdDLGlEQUFpRDtBQUN6RjtBQUNBLGdGQUFnRixZQUFZO0FBQzVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxZQUFZO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSw4QkFBOEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0QsWUFBWSxFQUFFO0FBQ3RFO0FBQ0EsaUNBQWlDLDJCQUEyQixnQkFBZ0I7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLG1FQUFtRTtBQUN0RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssc0JBQXNCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnRkFBZ0Y7QUFDekY7QUFDQTtBQUNBO0FBQ0EsU0FBUyw2REFBNkQ7QUFDdEU7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRTZUIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hY29ybi9kaXN0L2Fjb3JuLm1qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFJlc2VydmVkIHdvcmQgbGlzdHMgZm9yIHZhcmlvdXMgZGlhbGVjdHMgb2YgdGhlIGxhbmd1YWdlXG5cbnZhciByZXNlcnZlZFdvcmRzID0ge1xuICAzOiBcImFic3RyYWN0IGJvb2xlYW4gYnl0ZSBjaGFyIGNsYXNzIGRvdWJsZSBlbnVtIGV4cG9ydCBleHRlbmRzIGZpbmFsIGZsb2F0IGdvdG8gaW1wbGVtZW50cyBpbXBvcnQgaW50IGludGVyZmFjZSBsb25nIG5hdGl2ZSBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzaG9ydCBzdGF0aWMgc3VwZXIgc3luY2hyb25pemVkIHRocm93cyB0cmFuc2llbnQgdm9sYXRpbGVcIixcbiAgNTogXCJjbGFzcyBlbnVtIGV4dGVuZHMgc3VwZXIgY29uc3QgZXhwb3J0IGltcG9ydFwiLFxuICA2OiBcImVudW1cIixcbiAgc3RyaWN0OiBcImltcGxlbWVudHMgaW50ZXJmYWNlIGxldCBwYWNrYWdlIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzdGF0aWMgeWllbGRcIixcbiAgc3RyaWN0QmluZDogXCJldmFsIGFyZ3VtZW50c1wiXG59O1xuXG4vLyBBbmQgdGhlIGtleXdvcmRzXG5cbnZhciBlY21hNUFuZExlc3NLZXl3b3JkcyA9IFwiYnJlYWsgY2FzZSBjYXRjaCBjb250aW51ZSBkZWJ1Z2dlciBkZWZhdWx0IGRvIGVsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gaWYgcmV0dXJuIHN3aXRjaCB0aHJvdyB0cnkgdmFyIHdoaWxlIHdpdGggbnVsbCB0cnVlIGZhbHNlIGluc3RhbmNlb2YgdHlwZW9mIHZvaWQgZGVsZXRlIG5ldyBpbiB0aGlzXCI7XG5cbnZhciBrZXl3b3JkcyA9IHtcbiAgNTogZWNtYTVBbmRMZXNzS2V5d29yZHMsXG4gIFwiNW1vZHVsZVwiOiBlY21hNUFuZExlc3NLZXl3b3JkcyArIFwiIGV4cG9ydCBpbXBvcnRcIixcbiAgNjogZWNtYTVBbmRMZXNzS2V5d29yZHMgKyBcIiBjb25zdCBjbGFzcyBleHRlbmRzIGV4cG9ydCBpbXBvcnQgc3VwZXJcIlxufTtcblxudmFyIGtleXdvcmRSZWxhdGlvbmFsT3BlcmF0b3IgPSAvXmluKHN0YW5jZW9mKT8kLztcblxuLy8gIyMgQ2hhcmFjdGVyIGNhdGVnb3JpZXNcblxuLy8gQmlnIHVnbHkgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IG1hdGNoIGNoYXJhY3RlcnMgaW4gdGhlXG4vLyB3aGl0ZXNwYWNlLCBpZGVudGlmaWVyLCBhbmQgaWRlbnRpZmllci1zdGFydCBjYXRlZ29yaWVzLiBUaGVzZVxuLy8gYXJlIG9ubHkgYXBwbGllZCB3aGVuIGEgY2hhcmFjdGVyIGlzIGZvdW5kIHRvIGFjdHVhbGx5IGhhdmUgYVxuLy8gY29kZSBwb2ludCBhYm92ZSAxMjguXG4vLyBHZW5lcmF0ZWQgYnkgYGJpbi9nZW5lcmF0ZS1pZGVudGlmaWVyLXJlZ2V4LmpzYC5cbnZhciBub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzID0gXCJcXHhhYVxceGI1XFx4YmFcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx1MDJjMVxcdTAyYzYtXFx1MDJkMVxcdTAyZTAtXFx1MDJlNFxcdTAyZWNcXHUwMmVlXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdhLVxcdTAzN2RcXHUwMzdmXFx1MDM4NlxcdTAzODgtXFx1MDM4YVxcdTAzOGNcXHUwMzhlLVxcdTAzYTFcXHUwM2EzLVxcdTAzZjVcXHUwM2Y3LVxcdTA0ODFcXHUwNDhhLVxcdTA1MmZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MC1cXHUwNTg4XFx1MDVkMC1cXHUwNWVhXFx1MDVlZi1cXHUwNWYyXFx1MDYyMC1cXHUwNjRhXFx1MDY2ZVxcdTA2NmZcXHUwNjcxLVxcdTA2ZDNcXHUwNmQ1XFx1MDZlNVxcdTA2ZTZcXHUwNmVlXFx1MDZlZlxcdTA2ZmEtXFx1MDZmY1xcdTA2ZmZcXHUwNzEwXFx1MDcxMi1cXHUwNzJmXFx1MDc0ZC1cXHUwN2E1XFx1MDdiMVxcdTA3Y2EtXFx1MDdlYVxcdTA3ZjRcXHUwN2Y1XFx1MDdmYVxcdTA4MDAtXFx1MDgxNVxcdTA4MWFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2YVxcdTA4YTAtXFx1MDhiNFxcdTA4YjYtXFx1MDhjN1xcdTA5MDQtXFx1MDkzOVxcdTA5M2RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThjXFx1MDk4ZlxcdTA5OTBcXHUwOTkzLVxcdTA5YThcXHUwOWFhLVxcdTA5YjBcXHUwOWIyXFx1MDliNi1cXHUwOWI5XFx1MDliZFxcdTA5Y2VcXHUwOWRjXFx1MDlkZFxcdTA5ZGYtXFx1MDllMVxcdTA5ZjBcXHUwOWYxXFx1MDlmY1xcdTBhMDUtXFx1MGEwYVxcdTBhMGZcXHUwYTEwXFx1MGExMy1cXHUwYTI4XFx1MGEyYS1cXHUwYTMwXFx1MGEzMlxcdTBhMzNcXHUwYTM1XFx1MGEzNlxcdTBhMzhcXHUwYTM5XFx1MGE1OS1cXHUwYTVjXFx1MGE1ZVxcdTBhNzItXFx1MGE3NFxcdTBhODUtXFx1MGE4ZFxcdTBhOGYtXFx1MGE5MVxcdTBhOTMtXFx1MGFhOFxcdTBhYWEtXFx1MGFiMFxcdTBhYjJcXHUwYWIzXFx1MGFiNS1cXHUwYWI5XFx1MGFiZFxcdTBhZDBcXHUwYWUwXFx1MGFlMVxcdTBhZjlcXHUwYjA1LVxcdTBiMGNcXHUwYjBmXFx1MGIxMFxcdTBiMTMtXFx1MGIyOFxcdTBiMmEtXFx1MGIzMFxcdTBiMzJcXHUwYjMzXFx1MGIzNS1cXHUwYjM5XFx1MGIzZFxcdTBiNWNcXHUwYjVkXFx1MGI1Zi1cXHUwYjYxXFx1MGI3MVxcdTBiODNcXHUwYjg1LVxcdTBiOGFcXHUwYjhlLVxcdTBiOTBcXHUwYjkyLVxcdTBiOTVcXHUwYjk5XFx1MGI5YVxcdTBiOWNcXHUwYjllXFx1MGI5ZlxcdTBiYTNcXHUwYmE0XFx1MGJhOC1cXHUwYmFhXFx1MGJhZS1cXHUwYmI5XFx1MGJkMFxcdTBjMDUtXFx1MGMwY1xcdTBjMGUtXFx1MGMxMFxcdTBjMTItXFx1MGMyOFxcdTBjMmEtXFx1MGMzOVxcdTBjM2RcXHUwYzU4LVxcdTBjNWFcXHUwYzYwXFx1MGM2MVxcdTBjODBcXHUwYzg1LVxcdTBjOGNcXHUwYzhlLVxcdTBjOTBcXHUwYzkyLVxcdTBjYThcXHUwY2FhLVxcdTBjYjNcXHUwY2I1LVxcdTBjYjlcXHUwY2JkXFx1MGNkZVxcdTBjZTBcXHUwY2UxXFx1MGNmMVxcdTBjZjJcXHUwZDA0LVxcdTBkMGNcXHUwZDBlLVxcdTBkMTBcXHUwZDEyLVxcdTBkM2FcXHUwZDNkXFx1MGQ0ZVxcdTBkNTQtXFx1MGQ1NlxcdTBkNWYtXFx1MGQ2MVxcdTBkN2EtXFx1MGQ3ZlxcdTBkODUtXFx1MGQ5NlxcdTBkOWEtXFx1MGRiMVxcdTBkYjMtXFx1MGRiYlxcdTBkYmRcXHUwZGMwLVxcdTBkYzZcXHUwZTAxLVxcdTBlMzBcXHUwZTMyXFx1MGUzM1xcdTBlNDAtXFx1MGU0NlxcdTBlODFcXHUwZTgyXFx1MGU4NFxcdTBlODYtXFx1MGU4YVxcdTBlOGMtXFx1MGVhM1xcdTBlYTVcXHUwZWE3LVxcdTBlYjBcXHUwZWIyXFx1MGViM1xcdTBlYmRcXHUwZWMwLVxcdTBlYzRcXHUwZWM2XFx1MGVkYy1cXHUwZWRmXFx1MGYwMFxcdTBmNDAtXFx1MGY0N1xcdTBmNDktXFx1MGY2Y1xcdTBmODgtXFx1MGY4Y1xcdTEwMDAtXFx1MTAyYVxcdTEwM2ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVhLVxcdTEwNWRcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZlLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhlXFx1MTBhMC1cXHUxMGM1XFx1MTBjN1xcdTEwY2RcXHUxMGQwLVxcdTEwZmFcXHUxMGZjLVxcdTEyNDhcXHUxMjRhLVxcdTEyNGRcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1YS1cXHUxMjVkXFx1MTI2MC1cXHUxMjg4XFx1MTI4YS1cXHUxMjhkXFx1MTI5MC1cXHUxMmIwXFx1MTJiMi1cXHUxMmI1XFx1MTJiOC1cXHUxMmJlXFx1MTJjMFxcdTEyYzItXFx1MTJjNVxcdTEyYzgtXFx1MTJkNlxcdTEyZDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1YVxcdTEzODAtXFx1MTM4ZlxcdTEzYTAtXFx1MTNmNVxcdTEzZjgtXFx1MTNmZFxcdTE0MDEtXFx1MTY2Y1xcdTE2NmYtXFx1MTY3ZlxcdTE2ODEtXFx1MTY5YVxcdTE2YTAtXFx1MTZlYVxcdTE2ZWUtXFx1MTZmOFxcdTE3MDAtXFx1MTcwY1xcdTE3MGUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Y1xcdTE3NmUtXFx1MTc3MFxcdTE3ODAtXFx1MTdiM1xcdTE3ZDdcXHUxN2RjXFx1MTgyMC1cXHUxODc4XFx1MTg4MC1cXHUxOGE4XFx1MThhYVxcdTE4YjAtXFx1MThmNVxcdTE5MDAtXFx1MTkxZVxcdTE5NTAtXFx1MTk2ZFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlhYlxcdTE5YjAtXFx1MTljOVxcdTFhMDAtXFx1MWExNlxcdTFhMjAtXFx1MWE1NFxcdTFhYTdcXHUxYjA1LVxcdTFiMzNcXHUxYjQ1LVxcdTFiNGJcXHUxYjgzLVxcdTFiYTBcXHUxYmFlXFx1MWJhZlxcdTFiYmEtXFx1MWJlNVxcdTFjMDAtXFx1MWMyM1xcdTFjNGQtXFx1MWM0ZlxcdTFjNWEtXFx1MWM3ZFxcdTFjODAtXFx1MWM4OFxcdTFjOTAtXFx1MWNiYVxcdTFjYmQtXFx1MWNiZlxcdTFjZTktXFx1MWNlY1xcdTFjZWUtXFx1MWNmM1xcdTFjZjVcXHUxY2Y2XFx1MWNmYVxcdTFkMDAtXFx1MWRiZlxcdTFlMDAtXFx1MWYxNVxcdTFmMTgtXFx1MWYxZFxcdTFmMjAtXFx1MWY0NVxcdTFmNDgtXFx1MWY0ZFxcdTFmNTAtXFx1MWY1N1xcdTFmNTlcXHUxZjViXFx1MWY1ZFxcdTFmNWYtXFx1MWY3ZFxcdTFmODAtXFx1MWZiNFxcdTFmYjYtXFx1MWZiY1xcdTFmYmVcXHUxZmMyLVxcdTFmYzRcXHUxZmM2LVxcdTFmY2NcXHUxZmQwLVxcdTFmZDNcXHUxZmQ2LVxcdTFmZGJcXHUxZmUwLVxcdTFmZWNcXHUxZmYyLVxcdTFmZjRcXHUxZmY2LVxcdTFmZmNcXHUyMDcxXFx1MjA3ZlxcdTIwOTAtXFx1MjA5Y1xcdTIxMDJcXHUyMTA3XFx1MjEwYS1cXHUyMTEzXFx1MjExNVxcdTIxMTgtXFx1MjExZFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMmEtXFx1MjEzOVxcdTIxM2MtXFx1MjEzZlxcdTIxNDUtXFx1MjE0OVxcdTIxNGVcXHUyMTYwLVxcdTIxODhcXHUyYzAwLVxcdTJjMmVcXHUyYzMwLVxcdTJjNWVcXHUyYzYwLVxcdTJjZTRcXHUyY2ViLVxcdTJjZWVcXHUyY2YyXFx1MmNmM1xcdTJkMDAtXFx1MmQyNVxcdTJkMjdcXHUyZDJkXFx1MmQzMC1cXHUyZDY3XFx1MmQ2ZlxcdTJkODAtXFx1MmQ5NlxcdTJkYTAtXFx1MmRhNlxcdTJkYTgtXFx1MmRhZVxcdTJkYjAtXFx1MmRiNlxcdTJkYjgtXFx1MmRiZVxcdTJkYzAtXFx1MmRjNlxcdTJkYzgtXFx1MmRjZVxcdTJkZDAtXFx1MmRkNlxcdTJkZDgtXFx1MmRkZVxcdTMwMDUtXFx1MzAwN1xcdTMwMjEtXFx1MzAyOVxcdTMwMzEtXFx1MzAzNVxcdTMwMzgtXFx1MzAzY1xcdTMwNDEtXFx1MzA5NlxcdTMwOWItXFx1MzA5ZlxcdTMwYTEtXFx1MzBmYVxcdTMwZmMtXFx1MzBmZlxcdTMxMDUtXFx1MzEyZlxcdTMxMzEtXFx1MzE4ZVxcdTMxYTAtXFx1MzFiZlxcdTMxZjAtXFx1MzFmZlxcdTM0MDAtXFx1NGRiZlxcdTRlMDAtXFx1OWZmY1xcdWEwMDAtXFx1YTQ4Y1xcdWE0ZDAtXFx1YTRmZFxcdWE1MDAtXFx1YTYwY1xcdWE2MTAtXFx1YTYxZlxcdWE2MmFcXHVhNjJiXFx1YTY0MC1cXHVhNjZlXFx1YTY3Zi1cXHVhNjlkXFx1YTZhMC1cXHVhNmVmXFx1YTcxNy1cXHVhNzFmXFx1YTcyMi1cXHVhNzg4XFx1YTc4Yi1cXHVhN2JmXFx1YTdjMi1cXHVhN2NhXFx1YTdmNS1cXHVhODAxXFx1YTgwMy1cXHVhODA1XFx1YTgwNy1cXHVhODBhXFx1YTgwYy1cXHVhODIyXFx1YTg0MC1cXHVhODczXFx1YTg4Mi1cXHVhOGIzXFx1YThmMi1cXHVhOGY3XFx1YThmYlxcdWE4ZmRcXHVhOGZlXFx1YTkwYS1cXHVhOTI1XFx1YTkzMC1cXHVhOTQ2XFx1YTk2MC1cXHVhOTdjXFx1YTk4NC1cXHVhOWIyXFx1YTljZlxcdWE5ZTAtXFx1YTllNFxcdWE5ZTYtXFx1YTllZlxcdWE5ZmEtXFx1YTlmZVxcdWFhMDAtXFx1YWEyOFxcdWFhNDAtXFx1YWE0MlxcdWFhNDQtXFx1YWE0YlxcdWFhNjAtXFx1YWE3NlxcdWFhN2FcXHVhYTdlLVxcdWFhYWZcXHVhYWIxXFx1YWFiNVxcdWFhYjZcXHVhYWI5LVxcdWFhYmRcXHVhYWMwXFx1YWFjMlxcdWFhZGItXFx1YWFkZFxcdWFhZTAtXFx1YWFlYVxcdWFhZjItXFx1YWFmNFxcdWFiMDEtXFx1YWIwNlxcdWFiMDktXFx1YWIwZVxcdWFiMTEtXFx1YWIxNlxcdWFiMjAtXFx1YWIyNlxcdWFiMjgtXFx1YWIyZVxcdWFiMzAtXFx1YWI1YVxcdWFiNWMtXFx1YWI2OVxcdWFiNzAtXFx1YWJlMlxcdWFjMDAtXFx1ZDdhM1xcdWQ3YjAtXFx1ZDdjNlxcdWQ3Y2ItXFx1ZDdmYlxcdWY5MDAtXFx1ZmE2ZFxcdWZhNzAtXFx1ZmFkOVxcdWZiMDAtXFx1ZmIwNlxcdWZiMTMtXFx1ZmIxN1xcdWZiMWRcXHVmYjFmLVxcdWZiMjhcXHVmYjJhLVxcdWZiMzZcXHVmYjM4LVxcdWZiM2NcXHVmYjNlXFx1ZmI0MFxcdWZiNDFcXHVmYjQzXFx1ZmI0NFxcdWZiNDYtXFx1ZmJiMVxcdWZiZDMtXFx1ZmQzZFxcdWZkNTAtXFx1ZmQ4ZlxcdWZkOTItXFx1ZmRjN1xcdWZkZjAtXFx1ZmRmYlxcdWZlNzAtXFx1ZmU3NFxcdWZlNzYtXFx1ZmVmY1xcdWZmMjEtXFx1ZmYzYVxcdWZmNDEtXFx1ZmY1YVxcdWZmNjYtXFx1ZmZiZVxcdWZmYzItXFx1ZmZjN1xcdWZmY2EtXFx1ZmZjZlxcdWZmZDItXFx1ZmZkN1xcdWZmZGEtXFx1ZmZkY1wiO1xudmFyIG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzID0gXCJcXHUyMDBjXFx1MjAwZFxceGI3XFx1MDMwMC1cXHUwMzZmXFx1MDM4N1xcdTA0ODMtXFx1MDQ4N1xcdTA1OTEtXFx1MDViZFxcdTA1YmZcXHUwNWMxXFx1MDVjMlxcdTA1YzRcXHUwNWM1XFx1MDVjN1xcdTA2MTAtXFx1MDYxYVxcdTA2NGItXFx1MDY2OVxcdTA2NzBcXHUwNmQ2LVxcdTA2ZGNcXHUwNmRmLVxcdTA2ZTRcXHUwNmU3XFx1MDZlOFxcdTA2ZWEtXFx1MDZlZFxcdTA2ZjAtXFx1MDZmOVxcdTA3MTFcXHUwNzMwLVxcdTA3NGFcXHUwN2E2LVxcdTA3YjBcXHUwN2MwLVxcdTA3YzlcXHUwN2ViLVxcdTA3ZjNcXHUwN2ZkXFx1MDgxNi1cXHUwODE5XFx1MDgxYi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJkXFx1MDg1OS1cXHUwODViXFx1MDhkMy1cXHUwOGUxXFx1MDhlMy1cXHUwOTAzXFx1MDkzYS1cXHUwOTNjXFx1MDkzZS1cXHUwOTRmXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTY2LVxcdTA5NmZcXHUwOTgxLVxcdTA5ODNcXHUwOWJjXFx1MDliZS1cXHUwOWM0XFx1MDljN1xcdTA5YzhcXHUwOWNiLVxcdTA5Y2RcXHUwOWQ3XFx1MDllMlxcdTA5ZTNcXHUwOWU2LVxcdTA5ZWZcXHUwOWZlXFx1MGEwMS1cXHUwYTAzXFx1MGEzY1xcdTBhM2UtXFx1MGE0MlxcdTBhNDdcXHUwYTQ4XFx1MGE0Yi1cXHUwYTRkXFx1MGE1MVxcdTBhNjYtXFx1MGE3MVxcdTBhNzVcXHUwYTgxLVxcdTBhODNcXHUwYWJjXFx1MGFiZS1cXHUwYWM1XFx1MGFjNy1cXHUwYWM5XFx1MGFjYi1cXHUwYWNkXFx1MGFlMlxcdTBhZTNcXHUwYWU2LVxcdTBhZWZcXHUwYWZhLVxcdTBhZmZcXHUwYjAxLVxcdTBiMDNcXHUwYjNjXFx1MGIzZS1cXHUwYjQ0XFx1MGI0N1xcdTBiNDhcXHUwYjRiLVxcdTBiNGRcXHUwYjU1LVxcdTBiNTdcXHUwYjYyXFx1MGI2M1xcdTBiNjYtXFx1MGI2ZlxcdTBiODJcXHUwYmJlLVxcdTBiYzJcXHUwYmM2LVxcdTBiYzhcXHUwYmNhLVxcdTBiY2RcXHUwYmQ3XFx1MGJlNi1cXHUwYmVmXFx1MGMwMC1cXHUwYzA0XFx1MGMzZS1cXHUwYzQ0XFx1MGM0Ni1cXHUwYzQ4XFx1MGM0YS1cXHUwYzRkXFx1MGM1NVxcdTBjNTZcXHUwYzYyXFx1MGM2M1xcdTBjNjYtXFx1MGM2ZlxcdTBjODEtXFx1MGM4M1xcdTBjYmNcXHUwY2JlLVxcdTBjYzRcXHUwY2M2LVxcdTBjYzhcXHUwY2NhLVxcdTBjY2RcXHUwY2Q1XFx1MGNkNlxcdTBjZTJcXHUwY2UzXFx1MGNlNi1cXHUwY2VmXFx1MGQwMC1cXHUwZDAzXFx1MGQzYlxcdTBkM2NcXHUwZDNlLVxcdTBkNDRcXHUwZDQ2LVxcdTBkNDhcXHUwZDRhLVxcdTBkNGRcXHUwZDU3XFx1MGQ2MlxcdTBkNjNcXHUwZDY2LVxcdTBkNmZcXHUwZDgxLVxcdTBkODNcXHUwZGNhXFx1MGRjZi1cXHUwZGQ0XFx1MGRkNlxcdTBkZDgtXFx1MGRkZlxcdTBkZTYtXFx1MGRlZlxcdTBkZjJcXHUwZGYzXFx1MGUzMVxcdTBlMzQtXFx1MGUzYVxcdTBlNDctXFx1MGU0ZVxcdTBlNTAtXFx1MGU1OVxcdTBlYjFcXHUwZWI0LVxcdTBlYmNcXHUwZWM4LVxcdTBlY2RcXHUwZWQwLVxcdTBlZDlcXHUwZjE4XFx1MGYxOVxcdTBmMjAtXFx1MGYyOVxcdTBmMzVcXHUwZjM3XFx1MGYzOVxcdTBmM2VcXHUwZjNmXFx1MGY3MS1cXHUwZjg0XFx1MGY4NlxcdTBmODdcXHUwZjhkLVxcdTBmOTdcXHUwZjk5LVxcdTBmYmNcXHUwZmM2XFx1MTAyYi1cXHUxMDNlXFx1MTA0MC1cXHUxMDQ5XFx1MTA1Ni1cXHUxMDU5XFx1MTA1ZS1cXHUxMDYwXFx1MTA2Mi1cXHUxMDY0XFx1MTA2Ny1cXHUxMDZkXFx1MTA3MS1cXHUxMDc0XFx1MTA4Mi1cXHUxMDhkXFx1MTA4Zi1cXHUxMDlkXFx1MTM1ZC1cXHUxMzVmXFx1MTM2OS1cXHUxMzcxXFx1MTcxMi1cXHUxNzE0XFx1MTczMi1cXHUxNzM0XFx1MTc1MlxcdTE3NTNcXHUxNzcyXFx1MTc3M1xcdTE3YjQtXFx1MTdkM1xcdTE3ZGRcXHUxN2UwLVxcdTE3ZTlcXHUxODBiLVxcdTE4MGRcXHUxODEwLVxcdTE4MTlcXHUxOGE5XFx1MTkyMC1cXHUxOTJiXFx1MTkzMC1cXHUxOTNiXFx1MTk0Ni1cXHUxOTRmXFx1MTlkMC1cXHUxOWRhXFx1MWExNy1cXHUxYTFiXFx1MWE1NS1cXHUxYTVlXFx1MWE2MC1cXHUxYTdjXFx1MWE3Zi1cXHUxYTg5XFx1MWE5MC1cXHUxYTk5XFx1MWFiMC1cXHUxYWJkXFx1MWFiZlxcdTFhYzBcXHUxYjAwLVxcdTFiMDRcXHUxYjM0LVxcdTFiNDRcXHUxYjUwLVxcdTFiNTlcXHUxYjZiLVxcdTFiNzNcXHUxYjgwLVxcdTFiODJcXHUxYmExLVxcdTFiYWRcXHUxYmIwLVxcdTFiYjlcXHUxYmU2LVxcdTFiZjNcXHUxYzI0LVxcdTFjMzdcXHUxYzQwLVxcdTFjNDlcXHUxYzUwLVxcdTFjNTlcXHUxY2QwLVxcdTFjZDJcXHUxY2Q0LVxcdTFjZThcXHUxY2VkXFx1MWNmNFxcdTFjZjctXFx1MWNmOVxcdTFkYzAtXFx1MWRmOVxcdTFkZmItXFx1MWRmZlxcdTIwM2ZcXHUyMDQwXFx1MjA1NFxcdTIwZDAtXFx1MjBkY1xcdTIwZTFcXHUyMGU1LVxcdTIwZjBcXHUyY2VmLVxcdTJjZjFcXHUyZDdmXFx1MmRlMC1cXHUyZGZmXFx1MzAyYS1cXHUzMDJmXFx1MzA5OVxcdTMwOWFcXHVhNjIwLVxcdWE2MjlcXHVhNjZmXFx1YTY3NC1cXHVhNjdkXFx1YTY5ZVxcdWE2OWZcXHVhNmYwXFx1YTZmMVxcdWE4MDJcXHVhODA2XFx1YTgwYlxcdWE4MjMtXFx1YTgyN1xcdWE4MmNcXHVhODgwXFx1YTg4MVxcdWE4YjQtXFx1YThjNVxcdWE4ZDAtXFx1YThkOVxcdWE4ZTAtXFx1YThmMVxcdWE4ZmYtXFx1YTkwOVxcdWE5MjYtXFx1YTkyZFxcdWE5NDctXFx1YTk1M1xcdWE5ODAtXFx1YTk4M1xcdWE5YjMtXFx1YTljMFxcdWE5ZDAtXFx1YTlkOVxcdWE5ZTVcXHVhOWYwLVxcdWE5ZjlcXHVhYTI5LVxcdWFhMzZcXHVhYTQzXFx1YWE0Y1xcdWFhNGRcXHVhYTUwLVxcdWFhNTlcXHVhYTdiLVxcdWFhN2RcXHVhYWIwXFx1YWFiMi1cXHVhYWI0XFx1YWFiN1xcdWFhYjhcXHVhYWJlXFx1YWFiZlxcdWFhYzFcXHVhYWViLVxcdWFhZWZcXHVhYWY1XFx1YWFmNlxcdWFiZTMtXFx1YWJlYVxcdWFiZWNcXHVhYmVkXFx1YWJmMC1cXHVhYmY5XFx1ZmIxZVxcdWZlMDAtXFx1ZmUwZlxcdWZlMjAtXFx1ZmUyZlxcdWZlMzNcXHVmZTM0XFx1ZmU0ZC1cXHVmZTRmXFx1ZmYxMC1cXHVmZjE5XFx1ZmYzZlwiO1xuXG52YXIgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQgPSBuZXcgUmVnRXhwKFwiW1wiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIFwiXVwiKTtcbnZhciBub25BU0NJSWlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKFwiW1wiICsgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyArIG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzICsgXCJdXCIpO1xuXG5ub25BU0NJSWlkZW50aWZpZXJTdGFydENoYXJzID0gbm9uQVNDSUlpZGVudGlmaWVyQ2hhcnMgPSBudWxsO1xuXG4vLyBUaGVzZSBhcmUgYSBydW4tbGVuZ3RoIGFuZCBvZmZzZXQgZW5jb2RlZCByZXByZXNlbnRhdGlvbiBvZiB0aGVcbi8vID4weGZmZmYgY29kZSBwb2ludHMgdGhhdCBhcmUgYSB2YWxpZCBwYXJ0IG9mIGlkZW50aWZpZXJzLiBUaGVcbi8vIG9mZnNldCBzdGFydHMgYXQgMHgxMDAwMCwgYW5kIGVhY2ggcGFpciBvZiBudW1iZXJzIHJlcHJlc2VudHMgYW5cbi8vIG9mZnNldCB0byB0aGUgbmV4dCByYW5nZSwgYW5kIHRoZW4gYSBzaXplIG9mIHRoZSByYW5nZS4gVGhleSB3ZXJlXG4vLyBnZW5lcmF0ZWQgYnkgYmluL2dlbmVyYXRlLWlkZW50aWZpZXItcmVnZXguanNcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbW1hLXNwYWNpbmdcbnZhciBhc3RyYWxJZGVudGlmaWVyU3RhcnRDb2RlcyA9IFswLDExLDIsMjUsMiwxOCwyLDEsMiwxNCwzLDEzLDM1LDEyMiw3MCw1MiwyNjgsMjgsNCw0OCw0OCwzMSwxNCwyOSw2LDM3LDExLDI5LDMsMzUsNSw3LDIsNCw0MywxNTcsMTksMzUsNSwzNSw1LDM5LDksNTEsMTU3LDMxMCwxMCwyMSwxMSw3LDE1Myw1LDMsMCwyLDQzLDIsMSw0LDAsMywyMiwxMSwyMiwxMCwzMCw2NiwxOCwyLDEsMTEsMjEsMTEsMjUsNzEsNTUsNywxLDY1LDAsMTYsMywyLDIsMiwyOCw0MywyOCw0LDI4LDM2LDcsMiwyNywyOCw1MywxMSwyMSwxMSwxOCwxNCwxNywxMTEsNzIsNTYsNTAsMTQsNTAsMTQsMzUsMzQ5LDQxLDcsMSw3OSwyOCwxMSwwLDksMjEsMTA3LDIwLDI4LDIyLDEzLDUyLDc2LDQ0LDMzLDI0LDI3LDM1LDMwLDAsMywwLDksMzQsNCwwLDEzLDQ3LDE1LDMsMjIsMCwyLDAsMzYsMTcsMiwyNCw4NSw2LDIsMCwyLDMsMiwxNCwyLDksOCw0NiwzOSw3LDMsMSwzLDIxLDIsNiwyLDEsMiw0LDQsMCwxOSwwLDEzLDQsMTU5LDUyLDE5LDMsMjEsMiwzMSw0NywyMSwxLDIsMCwxODUsNDYsNDIsMywzNyw0NywyMSwwLDYwLDQyLDE0LDAsNzIsMjYsMjMwLDQzLDExNyw2MywzMiw3LDMsMCwzLDcsMiwxLDIsMjMsMTYsMCwyLDAsOTUsNywzLDM4LDE3LDAsMiwwLDI5LDAsMTEsMzksOCwwLDIyLDAsMTIsNDUsMjAsMCwzNSw1NiwyNjQsOCwyLDM2LDE4LDAsNTAsMjksMTEzLDYsMiwxLDIsMzcsMjIsMCwyNiw1LDIsMSwyLDMxLDE1LDAsMzI4LDE4LDE5MCwwLDgwLDkyMSwxMDMsMTEwLDE4LDE5NSwyNzQ5LDEwNzAsNDA1MCw1ODIsODYzNCw1NjgsOCwzMCwxMTQsMjksMTksNDcsMTcsMywzMiwyMCw2LDE4LDY4OSw2MywxMjksNzQsNiwwLDY3LDEyLDY1LDEsMiwwLDI5LDYxMzUsOSwxMjM3LDQzLDgsODk1MiwyODYsNTAsMiwxOCwzLDksMzk1LDIzMDksMTA2LDYsMTIsNCw4LDgsOSw1OTkxLDg0LDIsNzAsMiwxLDMsMCwzLDEsMywzLDIsMTEsMiwwLDIsNiwyLDY0LDIsMywzLDcsMiw2LDIsMjcsMiwzLDIsNCwyLDAsNCw2LDIsMzM5LDMsMjQsMiwyNCwyLDMwLDIsMjQsMiwzMCwyLDI0LDIsMzAsMiwyNCwyLDMwLDIsMjQsMiw3LDIzNTcsNDQsMTEsNiwxNywwLDM3MCw0MywxMzAxLDE5Niw2MCw2Nyw4LDAsMTIwNSwzLDIsMjYsMiwxLDIsMCwzLDAsMiw5LDIsMywyLDAsMiwwLDcsMCw1LDAsMiwwLDIsMCwyLDIsMiwxLDIsMCwzLDAsMiwwLDIsMCwyLDAsMiwwLDIsMSwyLDAsMywzLDIsNiwyLDMsMiwzLDIsMCwyLDksMiwxNiw2LDIsMiw0LDIsMTYsNDQyMSw0MjcxNywzNSw0MTQ4LDEyLDIyMSwzLDU3NjEsMTUsNzQ3MiwzMTA0LDU0MSwxNTA3LDQ5MzhdO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tbWEtc3BhY2luZ1xudmFyIGFzdHJhbElkZW50aWZpZXJDb2RlcyA9IFs1MDksMCwyMjcsMCwxNTAsNCwyOTQsOSwxMzY4LDIsMiwxLDYsMyw0MSwyLDUsMCwxNjYsMSw1NzQsMyw5LDksMzcwLDEsMTU0LDEwLDE3NiwyLDU0LDE0LDMyLDksMTYsMyw0NiwxMCw1NCw5LDcsMiwzNywxMywyLDksNiwxLDQ1LDAsMTMsMiw0OSwxMyw5LDMsMiwxMSw4MywxMSw3LDAsMTYxLDExLDYsOSw3LDMsNTYsMSwyLDYsMywxLDMsMiwxMCwwLDExLDEsMyw2LDQsNCwxOTMsMTcsMTAsOSw1LDAsODIsMTksMTMsOSwyMTQsNiwzLDgsMjgsMSw4MywxNiwxNiw5LDgyLDEyLDksOSw4NCwxNCw1LDksMjQzLDE0LDE2Niw5LDcxLDUsMiwxLDMsMywyLDAsMiwxLDEzLDksMTIwLDYsMyw2LDQsMCwyOSw5LDQxLDYsMiwzLDksMCwxMCwxMCw0NywxNSw0MDYsNywyLDcsMTcsOSw1NywyMSwyLDEzLDEyMyw1LDQsMCwyLDEsMiw2LDIsMCw5LDksNDksNCwyLDEsMiw0LDksOSwzMzAsMywxOTMwNiw5LDEzNSw0LDYwLDYsMjYsOSwxMDE0LDAsMiw1NCw4LDMsODIsMCwxMiwxLDE5NjI4LDEsNTMxOSw0LDQsNSw5LDcsMyw2LDMxLDMsMTQ5LDIsMTQxOCw0OSw1MTMsNTQsNSw0OSw5LDAsMTUsMCwyMyw0LDIsMTQsMTM2MSw2LDIsMTYsMyw2LDIsMSwyLDQsMjYyLDYsMTAsOSw0MTksMTMsMTQ5NSw2LDExMCw2LDYsOSw0NzU5LDksNzg3NzE5LDIzOV07XG5cbi8vIFRoaXMgaGFzIGEgY29tcGxleGl0eSBsaW5lYXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBjb2RlLiBUaGVcbi8vIGFzc3VtcHRpb24gaXMgdGhhdCBsb29raW5nIHVwIGFzdHJhbCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgaXNcbi8vIHJhcmUuXG5mdW5jdGlvbiBpc0luQXN0cmFsU2V0KGNvZGUsIHNldCkge1xuICB2YXIgcG9zID0gMHgxMDAwMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBwb3MgKz0gc2V0W2ldO1xuICAgIGlmIChwb3MgPiBjb2RlKSB7IHJldHVybiBmYWxzZSB9XG4gICAgcG9zICs9IHNldFtpICsgMV07XG4gICAgaWYgKHBvcyA+PSBjb2RlKSB7IHJldHVybiB0cnVlIH1cbiAgfVxufVxuXG4vLyBUZXN0IHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgY29kZSBzdGFydHMgYW4gaWRlbnRpZmllci5cblxuZnVuY3Rpb24gaXNJZGVudGlmaWVyU3RhcnQoY29kZSwgYXN0cmFsKSB7XG4gIGlmIChjb2RlIDwgNjUpIHsgcmV0dXJuIGNvZGUgPT09IDM2IH1cbiAgaWYgKGNvZGUgPCA5MSkgeyByZXR1cm4gdHJ1ZSB9XG4gIGlmIChjb2RlIDwgOTcpIHsgcmV0dXJuIGNvZGUgPT09IDk1IH1cbiAgaWYgKGNvZGUgPCAxMjMpIHsgcmV0dXJuIHRydWUgfVxuICBpZiAoY29kZSA8PSAweGZmZmYpIHsgcmV0dXJuIGNvZGUgPj0gMHhhYSAmJiBub25BU0NJSWlkZW50aWZpZXJTdGFydC50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpIH1cbiAgaWYgKGFzdHJhbCA9PT0gZmFsc2UpIHsgcmV0dXJuIGZhbHNlIH1cbiAgcmV0dXJuIGlzSW5Bc3RyYWxTZXQoY29kZSwgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMpXG59XG5cbi8vIFRlc3Qgd2hldGhlciBhIGdpdmVuIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGFuIGlkZW50aWZpZXIuXG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllckNoYXIoY29kZSwgYXN0cmFsKSB7XG4gIGlmIChjb2RlIDwgNDgpIHsgcmV0dXJuIGNvZGUgPT09IDM2IH1cbiAgaWYgKGNvZGUgPCA1OCkgeyByZXR1cm4gdHJ1ZSB9XG4gIGlmIChjb2RlIDwgNjUpIHsgcmV0dXJuIGZhbHNlIH1cbiAgaWYgKGNvZGUgPCA5MSkgeyByZXR1cm4gdHJ1ZSB9XG4gIGlmIChjb2RlIDwgOTcpIHsgcmV0dXJuIGNvZGUgPT09IDk1IH1cbiAgaWYgKGNvZGUgPCAxMjMpIHsgcmV0dXJuIHRydWUgfVxuICBpZiAoY29kZSA8PSAweGZmZmYpIHsgcmV0dXJuIGNvZGUgPj0gMHhhYSAmJiBub25BU0NJSWlkZW50aWZpZXIudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKSB9XG4gIGlmIChhc3RyYWwgPT09IGZhbHNlKSB7IHJldHVybiBmYWxzZSB9XG4gIHJldHVybiBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzKSB8fCBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJDb2Rlcylcbn1cblxuLy8gIyMgVG9rZW4gdHlwZXNcblxuLy8gVGhlIGFzc2lnbm1lbnQgb2YgZmluZS1ncmFpbmVkLCBpbmZvcm1hdGlvbi1jYXJyeWluZyB0eXBlIG9iamVjdHNcbi8vIGFsbG93cyB0aGUgdG9rZW5pemVyIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBpdCBoYXMgYWJvdXQgYVxuLy8gdG9rZW4gaW4gYSB3YXkgdGhhdCBpcyB2ZXJ5IGNoZWFwIGZvciB0aGUgcGFyc2VyIHRvIGxvb2sgdXAuXG5cbi8vIEFsbCB0b2tlbiB0eXBlIHZhcmlhYmxlcyBzdGFydCB3aXRoIGFuIHVuZGVyc2NvcmUsIHRvIG1ha2UgdGhlbVxuLy8gZWFzeSB0byByZWNvZ25pemUuXG5cbi8vIFRoZSBgYmVmb3JlRXhwcmAgcHJvcGVydHkgaXMgdXNlZCB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiByZWd1bGFyXG4vLyBleHByZXNzaW9ucyBhbmQgZGl2aXNpb25zLiBJdCBpcyBzZXQgb24gYWxsIHRva2VuIHR5cGVzIHRoYXQgY2FuXG4vLyBiZSBmb2xsb3dlZCBieSBhbiBleHByZXNzaW9uICh0aHVzLCBhIHNsYXNoIGFmdGVyIHRoZW0gd291bGQgYmUgYVxuLy8gcmVndWxhciBleHByZXNzaW9uKS5cbi8vXG4vLyBUaGUgYHN0YXJ0c0V4cHJgIHByb3BlcnR5IGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIHRva2VuIGVuZHMgYVxuLy8gYHlpZWxkYCBleHByZXNzaW9uLiBJdCBpcyBzZXQgb24gYWxsIHRva2VuIHR5cGVzIHRoYXQgZWl0aGVyIGNhblxuLy8gZGlyZWN0bHkgc3RhcnQgYW4gZXhwcmVzc2lvbiAobGlrZSBhIHF1b3RhdGlvbiBtYXJrKSBvciBjYW5cbi8vIGNvbnRpbnVlIGFuIGV4cHJlc3Npb24gKGxpa2UgdGhlIGJvZHkgb2YgYSBzdHJpbmcpLlxuLy9cbi8vIGBpc0xvb3BgIG1hcmtzIGEga2V5d29yZCBhcyBzdGFydGluZyBhIGxvb3AsIHdoaWNoIGlzIGltcG9ydGFudFxuLy8gdG8ga25vdyB3aGVuIHBhcnNpbmcgYSBsYWJlbCwgaW4gb3JkZXIgdG8gYWxsb3cgb3IgZGlzYWxsb3dcbi8vIGNvbnRpbnVlIGp1bXBzIHRvIHRoYXQgbGFiZWwuXG5cbnZhciBUb2tlblR5cGUgPSBmdW5jdGlvbiBUb2tlblR5cGUobGFiZWwsIGNvbmYpIHtcbiAgaWYgKCBjb25mID09PSB2b2lkIDAgKSBjb25mID0ge307XG5cbiAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICB0aGlzLmtleXdvcmQgPSBjb25mLmtleXdvcmQ7XG4gIHRoaXMuYmVmb3JlRXhwciA9ICEhY29uZi5iZWZvcmVFeHByO1xuICB0aGlzLnN0YXJ0c0V4cHIgPSAhIWNvbmYuc3RhcnRzRXhwcjtcbiAgdGhpcy5pc0xvb3AgPSAhIWNvbmYuaXNMb29wO1xuICB0aGlzLmlzQXNzaWduID0gISFjb25mLmlzQXNzaWduO1xuICB0aGlzLnByZWZpeCA9ICEhY29uZi5wcmVmaXg7XG4gIHRoaXMucG9zdGZpeCA9ICEhY29uZi5wb3N0Zml4O1xuICB0aGlzLmJpbm9wID0gY29uZi5iaW5vcCB8fCBudWxsO1xuICB0aGlzLnVwZGF0ZUNvbnRleHQgPSBudWxsO1xufTtcblxuZnVuY3Rpb24gYmlub3AobmFtZSwgcHJlYykge1xuICByZXR1cm4gbmV3IFRva2VuVHlwZShuYW1lLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IHByZWN9KVxufVxudmFyIGJlZm9yZUV4cHIgPSB7YmVmb3JlRXhwcjogdHJ1ZX0sIHN0YXJ0c0V4cHIgPSB7c3RhcnRzRXhwcjogdHJ1ZX07XG5cbi8vIE1hcCBrZXl3b3JkIG5hbWVzIHRvIHRva2VuIHR5cGVzLlxuXG52YXIga2V5d29yZHMkMSA9IHt9O1xuXG4vLyBTdWNjaW5jdCBkZWZpbml0aW9ucyBvZiBrZXl3b3JkIHRva2VuIHR5cGVzXG5mdW5jdGlvbiBrdyhuYW1lLCBvcHRpb25zKSB7XG4gIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIG9wdGlvbnMua2V5d29yZCA9IG5hbWU7XG4gIHJldHVybiBrZXl3b3JkcyQxW25hbWVdID0gbmV3IFRva2VuVHlwZShuYW1lLCBvcHRpb25zKVxufVxuXG52YXIgdHlwZXMgPSB7XG4gIG51bTogbmV3IFRva2VuVHlwZShcIm51bVwiLCBzdGFydHNFeHByKSxcbiAgcmVnZXhwOiBuZXcgVG9rZW5UeXBlKFwicmVnZXhwXCIsIHN0YXJ0c0V4cHIpLFxuICBzdHJpbmc6IG5ldyBUb2tlblR5cGUoXCJzdHJpbmdcIiwgc3RhcnRzRXhwciksXG4gIG5hbWU6IG5ldyBUb2tlblR5cGUoXCJuYW1lXCIsIHN0YXJ0c0V4cHIpLFxuICBlb2Y6IG5ldyBUb2tlblR5cGUoXCJlb2ZcIiksXG5cbiAgLy8gUHVuY3R1YXRpb24gdG9rZW4gdHlwZXMuXG4gIGJyYWNrZXRMOiBuZXcgVG9rZW5UeXBlKFwiW1wiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBicmFja2V0UjogbmV3IFRva2VuVHlwZShcIl1cIiksXG4gIGJyYWNlTDogbmV3IFRva2VuVHlwZShcIntcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgYnJhY2VSOiBuZXcgVG9rZW5UeXBlKFwifVwiKSxcbiAgcGFyZW5MOiBuZXcgVG9rZW5UeXBlKFwiKFwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBwYXJlblI6IG5ldyBUb2tlblR5cGUoXCIpXCIpLFxuICBjb21tYTogbmV3IFRva2VuVHlwZShcIixcIiwgYmVmb3JlRXhwciksXG4gIHNlbWk6IG5ldyBUb2tlblR5cGUoXCI7XCIsIGJlZm9yZUV4cHIpLFxuICBjb2xvbjogbmV3IFRva2VuVHlwZShcIjpcIiwgYmVmb3JlRXhwciksXG4gIGRvdDogbmV3IFRva2VuVHlwZShcIi5cIiksXG4gIHF1ZXN0aW9uOiBuZXcgVG9rZW5UeXBlKFwiP1wiLCBiZWZvcmVFeHByKSxcbiAgcXVlc3Rpb25Eb3Q6IG5ldyBUb2tlblR5cGUoXCI/LlwiKSxcbiAgYXJyb3c6IG5ldyBUb2tlblR5cGUoXCI9PlwiLCBiZWZvcmVFeHByKSxcbiAgdGVtcGxhdGU6IG5ldyBUb2tlblR5cGUoXCJ0ZW1wbGF0ZVwiKSxcbiAgaW52YWxpZFRlbXBsYXRlOiBuZXcgVG9rZW5UeXBlKFwiaW52YWxpZFRlbXBsYXRlXCIpLFxuICBlbGxpcHNpczogbmV3IFRva2VuVHlwZShcIi4uLlwiLCBiZWZvcmVFeHByKSxcbiAgYmFja1F1b3RlOiBuZXcgVG9rZW5UeXBlKFwiYFwiLCBzdGFydHNFeHByKSxcbiAgZG9sbGFyQnJhY2VMOiBuZXcgVG9rZW5UeXBlKFwiJHtcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcblxuICAvLyBPcGVyYXRvcnMuIFRoZXNlIGNhcnJ5IHNldmVyYWwga2luZHMgb2YgcHJvcGVydGllcyB0byBoZWxwIHRoZVxuICAvLyBwYXJzZXIgdXNlIHRoZW0gcHJvcGVybHkgKHRoZSBwcmVzZW5jZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIGlzXG4gIC8vIHdoYXQgY2F0ZWdvcml6ZXMgdGhlbSBhcyBvcGVyYXRvcnMpLlxuICAvL1xuICAvLyBgYmlub3BgLCB3aGVuIHByZXNlbnQsIHNwZWNpZmllcyB0aGF0IHRoaXMgb3BlcmF0b3IgaXMgYSBiaW5hcnlcbiAgLy8gb3BlcmF0b3IsIGFuZCB3aWxsIHJlZmVyIHRvIGl0cyBwcmVjZWRlbmNlLlxuICAvL1xuICAvLyBgcHJlZml4YCBhbmQgYHBvc3RmaXhgIG1hcmsgdGhlIG9wZXJhdG9yIGFzIGEgcHJlZml4IG9yIHBvc3RmaXhcbiAgLy8gdW5hcnkgb3BlcmF0b3IuXG4gIC8vXG4gIC8vIGBpc0Fzc2lnbmAgbWFya3MgYWxsIG9mIGA9YCwgYCs9YCwgYC09YCBldGNldGVyYSwgd2hpY2ggYWN0IGFzXG4gIC8vIGJpbmFyeSBvcGVyYXRvcnMgd2l0aCBhIHZlcnkgbG93IHByZWNlZGVuY2UsIHRoYXQgc2hvdWxkIHJlc3VsdFxuICAvLyBpbiBBc3NpZ25tZW50RXhwcmVzc2lvbiBub2Rlcy5cblxuICBlcTogbmV3IFRva2VuVHlwZShcIj1cIiwge2JlZm9yZUV4cHI6IHRydWUsIGlzQXNzaWduOiB0cnVlfSksXG4gIGFzc2lnbjogbmV3IFRva2VuVHlwZShcIl89XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBpc0Fzc2lnbjogdHJ1ZX0pLFxuICBpbmNEZWM6IG5ldyBUb2tlblR5cGUoXCIrKy8tLVwiLCB7cHJlZml4OiB0cnVlLCBwb3N0Zml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIHByZWZpeDogbmV3IFRva2VuVHlwZShcIiEvflwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgcHJlZml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIGxvZ2ljYWxPUjogYmlub3AoXCJ8fFwiLCAxKSxcbiAgbG9naWNhbEFORDogYmlub3AoXCImJlwiLCAyKSxcbiAgYml0d2lzZU9SOiBiaW5vcChcInxcIiwgMyksXG4gIGJpdHdpc2VYT1I6IGJpbm9wKFwiXlwiLCA0KSxcbiAgYml0d2lzZUFORDogYmlub3AoXCImXCIsIDUpLFxuICBlcXVhbGl0eTogYmlub3AoXCI9PS8hPS89PT0vIT09XCIsIDYpLFxuICByZWxhdGlvbmFsOiBiaW5vcChcIjwvPi88PS8+PVwiLCA3KSxcbiAgYml0U2hpZnQ6IGJpbm9wKFwiPDwvPj4vPj4+XCIsIDgpLFxuICBwbHVzTWluOiBuZXcgVG9rZW5UeXBlKFwiKy8tXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogOSwgcHJlZml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIG1vZHVsbzogYmlub3AoXCIlXCIsIDEwKSxcbiAgc3RhcjogYmlub3AoXCIqXCIsIDEwKSxcbiAgc2xhc2g6IGJpbm9wKFwiL1wiLCAxMCksXG4gIHN0YXJzdGFyOiBuZXcgVG9rZW5UeXBlKFwiKipcIiwge2JlZm9yZUV4cHI6IHRydWV9KSxcbiAgY29hbGVzY2U6IGJpbm9wKFwiPz9cIiwgMSksXG5cbiAgLy8gS2V5d29yZCB0b2tlbiB0eXBlcy5cbiAgX2JyZWFrOiBrdyhcImJyZWFrXCIpLFxuICBfY2FzZToga3coXCJjYXNlXCIsIGJlZm9yZUV4cHIpLFxuICBfY2F0Y2g6IGt3KFwiY2F0Y2hcIiksXG4gIF9jb250aW51ZToga3coXCJjb250aW51ZVwiKSxcbiAgX2RlYnVnZ2VyOiBrdyhcImRlYnVnZ2VyXCIpLFxuICBfZGVmYXVsdDoga3coXCJkZWZhdWx0XCIsIGJlZm9yZUV4cHIpLFxuICBfZG86IGt3KFwiZG9cIiwge2lzTG9vcDogdHJ1ZSwgYmVmb3JlRXhwcjogdHJ1ZX0pLFxuICBfZWxzZToga3coXCJlbHNlXCIsIGJlZm9yZUV4cHIpLFxuICBfZmluYWxseToga3coXCJmaW5hbGx5XCIpLFxuICBfZm9yOiBrdyhcImZvclwiLCB7aXNMb29wOiB0cnVlfSksXG4gIF9mdW5jdGlvbjoga3coXCJmdW5jdGlvblwiLCBzdGFydHNFeHByKSxcbiAgX2lmOiBrdyhcImlmXCIpLFxuICBfcmV0dXJuOiBrdyhcInJldHVyblwiLCBiZWZvcmVFeHByKSxcbiAgX3N3aXRjaDoga3coXCJzd2l0Y2hcIiksXG4gIF90aHJvdzoga3coXCJ0aHJvd1wiLCBiZWZvcmVFeHByKSxcbiAgX3RyeToga3coXCJ0cnlcIiksXG4gIF92YXI6IGt3KFwidmFyXCIpLFxuICBfY29uc3Q6IGt3KFwiY29uc3RcIiksXG4gIF93aGlsZToga3coXCJ3aGlsZVwiLCB7aXNMb29wOiB0cnVlfSksXG4gIF93aXRoOiBrdyhcIndpdGhcIiksXG4gIF9uZXc6IGt3KFwibmV3XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIF90aGlzOiBrdyhcInRoaXNcIiwgc3RhcnRzRXhwciksXG4gIF9zdXBlcjoga3coXCJzdXBlclwiLCBzdGFydHNFeHByKSxcbiAgX2NsYXNzOiBrdyhcImNsYXNzXCIsIHN0YXJ0c0V4cHIpLFxuICBfZXh0ZW5kczoga3coXCJleHRlbmRzXCIsIGJlZm9yZUV4cHIpLFxuICBfZXhwb3J0OiBrdyhcImV4cG9ydFwiKSxcbiAgX2ltcG9ydDoga3coXCJpbXBvcnRcIiwgc3RhcnRzRXhwciksXG4gIF9udWxsOiBrdyhcIm51bGxcIiwgc3RhcnRzRXhwciksXG4gIF90cnVlOiBrdyhcInRydWVcIiwgc3RhcnRzRXhwciksXG4gIF9mYWxzZToga3coXCJmYWxzZVwiLCBzdGFydHNFeHByKSxcbiAgX2luOiBrdyhcImluXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogN30pLFxuICBfaW5zdGFuY2VvZjoga3coXCJpbnN0YW5jZW9mXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBiaW5vcDogN30pLFxuICBfdHlwZW9mOiBrdyhcInR5cGVvZlwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgcHJlZml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIF92b2lkOiBrdyhcInZvaWRcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBfZGVsZXRlOiBrdyhcImRlbGV0ZVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgcHJlZml4OiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSlcbn07XG5cbi8vIE1hdGNoZXMgYSB3aG9sZSBsaW5lIGJyZWFrICh3aGVyZSBDUkxGIGlzIGNvbnNpZGVyZWQgYSBzaW5nbGVcbi8vIGxpbmUgYnJlYWspLiBVc2VkIHRvIGNvdW50IGxpbmVzLlxuXG52YXIgbGluZUJyZWFrID0gL1xcclxcbj98XFxufFxcdTIwMjh8XFx1MjAyOS87XG52YXIgbGluZUJyZWFrRyA9IG5ldyBSZWdFeHAobGluZUJyZWFrLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiBpc05ld0xpbmUoY29kZSwgZWNtYTIwMTlTdHJpbmcpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDEwIHx8IGNvZGUgPT09IDEzIHx8ICghZWNtYTIwMTlTdHJpbmcgJiYgKGNvZGUgPT09IDB4MjAyOCB8fCBjb2RlID09PSAweDIwMjkpKVxufVxuXG52YXIgbm9uQVNDSUl3aGl0ZXNwYWNlID0gL1tcXHUxNjgwXFx1MjAwMC1cXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1ZmVmZl0vO1xuXG52YXIgc2tpcFdoaXRlU3BhY2UgPSAvKD86XFxzfFxcL1xcLy4qfFxcL1xcKlteXSo/XFwqXFwvKSovZztcblxudmFyIHJlZiA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgaGFzT3duUHJvcGVydHkgPSByZWYuaGFzT3duUHJvcGVydHk7XG52YXIgdG9TdHJpbmcgPSByZWYudG9TdHJpbmc7XG5cbi8vIENoZWNrcyBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkuXG5cbmZ1bmN0aW9uIGhhcyhvYmosIHByb3BOYW1lKSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcE5hbWUpXG59XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCAoZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gKFxuICB0b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBBcnJheV1cIlxuKTsgfSk7XG5cbmZ1bmN0aW9uIHdvcmRzUmVnZXhwKHdvcmRzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgd29yZHMucmVwbGFjZSgvIC9nLCBcInxcIikgKyBcIikkXCIpXG59XG5cbi8vIFRoZXNlIGFyZSB1c2VkIHdoZW4gYG9wdGlvbnMubG9jYXRpb25zYCBpcyBvbiwgZm9yIHRoZVxuLy8gYHN0YXJ0TG9jYCBhbmQgYGVuZExvY2AgcHJvcGVydGllcy5cblxudmFyIFBvc2l0aW9uID0gZnVuY3Rpb24gUG9zaXRpb24obGluZSwgY29sKSB7XG4gIHRoaXMubGluZSA9IGxpbmU7XG4gIHRoaXMuY29sdW1uID0gY29sO1xufTtcblxuUG9zaXRpb24ucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIG9mZnNldCAobikge1xuICByZXR1cm4gbmV3IFBvc2l0aW9uKHRoaXMubGluZSwgdGhpcy5jb2x1bW4gKyBuKVxufTtcblxudmFyIFNvdXJjZUxvY2F0aW9uID0gZnVuY3Rpb24gU291cmNlTG9jYXRpb24ocCwgc3RhcnQsIGVuZCkge1xuICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gIHRoaXMuZW5kID0gZW5kO1xuICBpZiAocC5zb3VyY2VGaWxlICE9PSBudWxsKSB7IHRoaXMuc291cmNlID0gcC5zb3VyY2VGaWxlOyB9XG59O1xuXG4vLyBUaGUgYGdldExpbmVJbmZvYCBmdW5jdGlvbiBpcyBtb3N0bHkgdXNlZnVsIHdoZW4gdGhlXG4vLyBgbG9jYXRpb25zYCBvcHRpb24gaXMgb2ZmIChmb3IgcGVyZm9ybWFuY2UgcmVhc29ucykgYW5kIHlvdVxuLy8gd2FudCB0byBmaW5kIHRoZSBsaW5lL2NvbHVtbiBwb3NpdGlvbiBmb3IgYSBnaXZlbiBjaGFyYWN0ZXJcbi8vIG9mZnNldC4gYGlucHV0YCBzaG91bGQgYmUgdGhlIGNvZGUgc3RyaW5nIHRoYXQgdGhlIG9mZnNldCByZWZlcnNcbi8vIGludG8uXG5cbmZ1bmN0aW9uIGdldExpbmVJbmZvKGlucHV0LCBvZmZzZXQpIHtcbiAgZm9yICh2YXIgbGluZSA9IDEsIGN1ciA9IDA7Oykge1xuICAgIGxpbmVCcmVha0cubGFzdEluZGV4ID0gY3VyO1xuICAgIHZhciBtYXRjaCA9IGxpbmVCcmVha0cuZXhlYyhpbnB1dCk7XG4gICAgaWYgKG1hdGNoICYmIG1hdGNoLmluZGV4IDwgb2Zmc2V0KSB7XG4gICAgICArK2xpbmU7XG4gICAgICBjdXIgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbihsaW5lLCBvZmZzZXQgLSBjdXIpXG4gICAgfVxuICB9XG59XG5cbi8vIEEgc2Vjb25kIG9wdGlvbmFsIGFyZ3VtZW50IGNhbiBiZSBnaXZlbiB0byBmdXJ0aGVyIGNvbmZpZ3VyZVxuLy8gdGhlIHBhcnNlciBwcm9jZXNzLiBUaGVzZSBvcHRpb25zIGFyZSByZWNvZ25pemVkOlxuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIC8vIGBlY21hVmVyc2lvbmAgaW5kaWNhdGVzIHRoZSBFQ01BU2NyaXB0IHZlcnNpb24gdG8gcGFyc2UuIE11c3QgYmVcbiAgLy8gZWl0aGVyIDMsIDUsIDYgKDIwMTUpLCA3ICgyMDE2KSwgOCAoMjAxNyksIDkgKDIwMTgpLCBvciAxMFxuICAvLyAoMjAxOSkuIFRoaXMgaW5mbHVlbmNlcyBzdXBwb3J0IGZvciBzdHJpY3QgbW9kZSwgdGhlIHNldCBvZlxuICAvLyByZXNlcnZlZCB3b3JkcywgYW5kIHN1cHBvcnQgZm9yIG5ldyBzeW50YXggZmVhdHVyZXMuIFRoZSBkZWZhdWx0XG4gIC8vIGlzIDEwLlxuICBlY21hVmVyc2lvbjogMTAsXG4gIC8vIGBzb3VyY2VUeXBlYCBpbmRpY2F0ZXMgdGhlIG1vZGUgdGhlIGNvZGUgc2hvdWxkIGJlIHBhcnNlZCBpbi5cbiAgLy8gQ2FuIGJlIGVpdGhlciBgXCJzY3JpcHRcImAgb3IgYFwibW9kdWxlXCJgLiBUaGlzIGluZmx1ZW5jZXMgZ2xvYmFsXG4gIC8vIHN0cmljdCBtb2RlIGFuZCBwYXJzaW5nIG9mIGBpbXBvcnRgIGFuZCBgZXhwb3J0YCBkZWNsYXJhdGlvbnMuXG4gIHNvdXJjZVR5cGU6IFwic2NyaXB0XCIsXG4gIC8vIGBvbkluc2VydGVkU2VtaWNvbG9uYCBjYW4gYmUgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkXG4gIC8vIHdoZW4gYSBzZW1pY29sb24gaXMgYXV0b21hdGljYWxseSBpbnNlcnRlZC4gSXQgd2lsbCBiZSBwYXNzZWRcbiAgLy8gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb21tYSBhcyBhbiBvZmZzZXQsIGFuZCBpZiBgbG9jYXRpb25zYCBpc1xuICAvLyBlbmFibGVkLCBpdCBpcyBnaXZlbiB0aGUgbG9jYXRpb24gYXMgYSBge2xpbmUsIGNvbHVtbn1gIG9iamVjdFxuICAvLyBhcyBzZWNvbmQgYXJndW1lbnQuXG4gIG9uSW5zZXJ0ZWRTZW1pY29sb246IG51bGwsXG4gIC8vIGBvblRyYWlsaW5nQ29tbWFgIGlzIHNpbWlsYXIgdG8gYG9uSW5zZXJ0ZWRTZW1pY29sb25gLCBidXQgZm9yXG4gIC8vIHRyYWlsaW5nIGNvbW1hcy5cbiAgb25UcmFpbGluZ0NvbW1hOiBudWxsLFxuICAvLyBCeSBkZWZhdWx0LCByZXNlcnZlZCB3b3JkcyBhcmUgb25seSBlbmZvcmNlZCBpZiBlY21hVmVyc2lvbiA+PSA1LlxuICAvLyBTZXQgYGFsbG93UmVzZXJ2ZWRgIHRvIGEgYm9vbGVhbiB2YWx1ZSB0byBleHBsaWNpdGx5IHR1cm4gdGhpcyBvblxuICAvLyBhbiBvZmYuIFdoZW4gdGhpcyBvcHRpb24gaGFzIHRoZSB2YWx1ZSBcIm5ldmVyXCIsIHJlc2VydmVkIHdvcmRzXG4gIC8vIGFuZCBrZXl3b3JkcyBjYW4gYWxzbyBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eSBuYW1lcy5cbiAgYWxsb3dSZXNlcnZlZDogbnVsbCxcbiAgLy8gV2hlbiBlbmFibGVkLCBhIHJldHVybiBhdCB0aGUgdG9wIGxldmVsIGlzIG5vdCBjb25zaWRlcmVkIGFuXG4gIC8vIGVycm9yLlxuICBhbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbjogZmFsc2UsXG4gIC8vIFdoZW4gZW5hYmxlZCwgaW1wb3J0L2V4cG9ydCBzdGF0ZW1lbnRzIGFyZSBub3QgY29uc3RyYWluZWQgdG9cbiAgLy8gYXBwZWFyaW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0uXG4gIGFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZTogZmFsc2UsXG4gIC8vIFdoZW4gZW5hYmxlZCwgYXdhaXQgaWRlbnRpZmllcnMgYXJlIGFsbG93ZWQgdG8gYXBwZWFyIGF0IHRoZSB0b3AtbGV2ZWwgc2NvcGUsXG4gIC8vIGJ1dCB0aGV5IGFyZSBzdGlsbCBub3QgYWxsb3dlZCBpbiBub24tYXN5bmMgZnVuY3Rpb25zLlxuICBhbGxvd0F3YWl0T3V0c2lkZUZ1bmN0aW9uOiBmYWxzZSxcbiAgLy8gV2hlbiBlbmFibGVkLCBoYXNoYmFuZyBkaXJlY3RpdmUgaW4gdGhlIGJlZ2lubmluZyBvZiBmaWxlXG4gIC8vIGlzIGFsbG93ZWQgYW5kIHRyZWF0ZWQgYXMgYSBsaW5lIGNvbW1lbnQuXG4gIGFsbG93SGFzaEJhbmc6IGZhbHNlLFxuICAvLyBXaGVuIGBsb2NhdGlvbnNgIGlzIG9uLCBgbG9jYCBwcm9wZXJ0aWVzIGhvbGRpbmcgb2JqZWN0cyB3aXRoXG4gIC8vIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMgaW4gYHtsaW5lLCBjb2x1bW59YCBmb3JtICh3aXRoXG4gIC8vIGxpbmUgYmVpbmcgMS1iYXNlZCBhbmQgY29sdW1uIDAtYmFzZWQpIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlXG4gIC8vIG5vZGVzLlxuICBsb2NhdGlvbnM6IGZhbHNlLFxuICAvLyBBIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYG9uVG9rZW5gIG9wdGlvbiwgd2hpY2ggd2lsbFxuICAvLyBjYXVzZSBBY29ybiB0byBjYWxsIHRoYXQgZnVuY3Rpb24gd2l0aCBvYmplY3QgaW4gdGhlIHNhbWVcbiAgLy8gZm9ybWF0IGFzIHRva2VucyByZXR1cm5lZCBmcm9tIGB0b2tlbml6ZXIoKS5nZXRUb2tlbigpYC4gTm90ZVxuICAvLyB0aGF0IHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2FsbCB0aGUgcGFyc2VyIGZyb20gdGhlXG4gIC8vIGNhbGxiYWNr4oCUdGhhdCB3aWxsIGNvcnJ1cHQgaXRzIGludGVybmFsIHN0YXRlLlxuICBvblRva2VuOiBudWxsLFxuICAvLyBBIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgYXMgYG9uQ29tbWVudGAgb3B0aW9uLCB3aGljaCB3aWxsXG4gIC8vIGNhdXNlIEFjb3JuIHRvIGNhbGwgdGhhdCBmdW5jdGlvbiB3aXRoIGAoYmxvY2ssIHRleHQsIHN0YXJ0LFxuICAvLyBlbmQpYCBwYXJhbWV0ZXJzIHdoZW5ldmVyIGEgY29tbWVudCBpcyBza2lwcGVkLiBgYmxvY2tgIGlzIGFcbiAgLy8gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBpcyBhIGJsb2NrIChgLyogKi9gKSBjb21tZW50LFxuICAvLyBgdGV4dGAgaXMgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbW1lbnQsIGFuZCBgc3RhcnRgIGFuZCBgZW5kYCBhcmVcbiAgLy8gY2hhcmFjdGVyIG9mZnNldHMgdGhhdCBkZW5vdGUgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIGNvbW1lbnQuXG4gIC8vIFdoZW4gdGhlIGBsb2NhdGlvbnNgIG9wdGlvbiBpcyBvbiwgdHdvIG1vcmUgcGFyYW1ldGVycyBhcmVcbiAgLy8gcGFzc2VkLCB0aGUgZnVsbCBge2xpbmUsIGNvbHVtbn1gIGxvY2F0aW9ucyBvZiB0aGUgc3RhcnQgYW5kXG4gIC8vIGVuZCBvZiB0aGUgY29tbWVudHMuIE5vdGUgdGhhdCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNhbGwgdGhlXG4gIC8vIHBhcnNlciBmcm9tIHRoZSBjYWxsYmFja+KAlHRoYXQgd2lsbCBjb3JydXB0IGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgb25Db21tZW50OiBudWxsLFxuICAvLyBOb2RlcyBoYXZlIHRoZWlyIHN0YXJ0IGFuZCBlbmQgY2hhcmFjdGVycyBvZmZzZXRzIHJlY29yZGVkIGluXG4gIC8vIGBzdGFydGAgYW5kIGBlbmRgIHByb3BlcnRpZXMgKGRpcmVjdGx5IG9uIHRoZSBub2RlLCByYXRoZXIgdGhhblxuICAvLyB0aGUgYGxvY2Agb2JqZWN0LCB3aGljaCBob2xkcyBsaW5lL2NvbHVtbiBkYXRhLiBUbyBhbHNvIGFkZCBhXG4gIC8vIFtzZW1pLXN0YW5kYXJkaXplZF1bcmFuZ2VdIGByYW5nZWAgcHJvcGVydHkgaG9sZGluZyBhIGBbc3RhcnQsXG4gIC8vIGVuZF1gIGFycmF5IHdpdGggdGhlIHNhbWUgbnVtYmVycywgc2V0IHRoZSBgcmFuZ2VzYCBvcHRpb24gdG9cbiAgLy8gYHRydWVgLlxuICAvL1xuICAvLyBbcmFuZ2VdOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NDU2NzhcbiAgcmFuZ2VzOiBmYWxzZSxcbiAgLy8gSXQgaXMgcG9zc2libGUgdG8gcGFyc2UgbXVsdGlwbGUgZmlsZXMgaW50byBhIHNpbmdsZSBBU1QgYnlcbiAgLy8gcGFzc2luZyB0aGUgdHJlZSBwcm9kdWNlZCBieSBwYXJzaW5nIHRoZSBmaXJzdCBmaWxlIGFzXG4gIC8vIGBwcm9ncmFtYCBvcHRpb24gaW4gc3Vic2VxdWVudCBwYXJzZXMuIFRoaXMgd2lsbCBhZGQgdGhlXG4gIC8vIHRvcGxldmVsIGZvcm1zIG9mIHRoZSBwYXJzZWQgZmlsZSB0byB0aGUgYFByb2dyYW1gICh0b3ApIG5vZGVcbiAgLy8gb2YgYW4gZXhpc3RpbmcgcGFyc2UgdHJlZS5cbiAgcHJvZ3JhbTogbnVsbCxcbiAgLy8gV2hlbiBgbG9jYXRpb25zYCBpcyBvbiwgeW91IGNhbiBwYXNzIHRoaXMgdG8gcmVjb3JkIHRoZSBzb3VyY2VcbiAgLy8gZmlsZSBpbiBldmVyeSBub2RlJ3MgYGxvY2Agb2JqZWN0LlxuICBzb3VyY2VGaWxlOiBudWxsLFxuICAvLyBUaGlzIHZhbHVlLCBpZiBnaXZlbiwgaXMgc3RvcmVkIGluIGV2ZXJ5IG5vZGUsIHdoZXRoZXJcbiAgLy8gYGxvY2F0aW9uc2AgaXMgb24gb3Igb2ZmLlxuICBkaXJlY3RTb3VyY2VGaWxlOiBudWxsLFxuICAvLyBXaGVuIGVuYWJsZWQsIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbnMgYXJlIHJlcHJlc2VudGVkIGJ5XG4gIC8vIChub24tc3RhbmRhcmQpIFBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIG5vZGVzXG4gIHByZXNlcnZlUGFyZW5zOiBmYWxzZVxufTtcblxuLy8gSW50ZXJwcmV0IGFuZCBkZWZhdWx0IGFuIG9wdGlvbnMgb2JqZWN0XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMob3B0cykge1xuICB2YXIgb3B0aW9ucyA9IHt9O1xuXG4gIGZvciAodmFyIG9wdCBpbiBkZWZhdWx0T3B0aW9ucylcbiAgICB7IG9wdGlvbnNbb3B0XSA9IG9wdHMgJiYgaGFzKG9wdHMsIG9wdCkgPyBvcHRzW29wdF0gOiBkZWZhdWx0T3B0aW9uc1tvcHRdOyB9XG5cbiAgaWYgKG9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMjAxNSlcbiAgICB7IG9wdGlvbnMuZWNtYVZlcnNpb24gLT0gMjAwOTsgfVxuXG4gIGlmIChvcHRpb25zLmFsbG93UmVzZXJ2ZWQgPT0gbnVsbClcbiAgICB7IG9wdGlvbnMuYWxsb3dSZXNlcnZlZCA9IG9wdGlvbnMuZWNtYVZlcnNpb24gPCA1OyB9XG5cbiAgaWYgKGlzQXJyYXkob3B0aW9ucy5vblRva2VuKSkge1xuICAgIHZhciB0b2tlbnMgPSBvcHRpb25zLm9uVG9rZW47XG4gICAgb3B0aW9ucy5vblRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7IHJldHVybiB0b2tlbnMucHVzaCh0b2tlbik7IH07XG4gIH1cbiAgaWYgKGlzQXJyYXkob3B0aW9ucy5vbkNvbW1lbnQpKVxuICAgIHsgb3B0aW9ucy5vbkNvbW1lbnQgPSBwdXNoQ29tbWVudChvcHRpb25zLCBvcHRpb25zLm9uQ29tbWVudCk7IH1cblxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiBwdXNoQ29tbWVudChvcHRpb25zLCBhcnJheSkge1xuICByZXR1cm4gZnVuY3Rpb24oYmxvY2ssIHRleHQsIHN0YXJ0LCBlbmQsIHN0YXJ0TG9jLCBlbmRMb2MpIHtcbiAgICB2YXIgY29tbWVudCA9IHtcbiAgICAgIHR5cGU6IGJsb2NrID8gXCJCbG9ja1wiIDogXCJMaW5lXCIsXG4gICAgICB2YWx1ZTogdGV4dCxcbiAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgIGVuZDogZW5kXG4gICAgfTtcbiAgICBpZiAob3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgICB7IGNvbW1lbnQubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKHRoaXMsIHN0YXJ0TG9jLCBlbmRMb2MpOyB9XG4gICAgaWYgKG9wdGlvbnMucmFuZ2VzKVxuICAgICAgeyBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdOyB9XG4gICAgYXJyYXkucHVzaChjb21tZW50KTtcbiAgfVxufVxuXG4vLyBFYWNoIHNjb3BlIGdldHMgYSBiaXRzZXQgdGhhdCBtYXkgY29udGFpbiB0aGVzZSBmbGFnc1xudmFyXG4gICAgU0NPUEVfVE9QID0gMSxcbiAgICBTQ09QRV9GVU5DVElPTiA9IDIsXG4gICAgU0NPUEVfVkFSID0gU0NPUEVfVE9QIHwgU0NPUEVfRlVOQ1RJT04sXG4gICAgU0NPUEVfQVNZTkMgPSA0LFxuICAgIFNDT1BFX0dFTkVSQVRPUiA9IDgsXG4gICAgU0NPUEVfQVJST1cgPSAxNixcbiAgICBTQ09QRV9TSU1QTEVfQ0FUQ0ggPSAzMixcbiAgICBTQ09QRV9TVVBFUiA9IDY0LFxuICAgIFNDT1BFX0RJUkVDVF9TVVBFUiA9IDEyODtcblxuZnVuY3Rpb24gZnVuY3Rpb25GbGFncyhhc3luYywgZ2VuZXJhdG9yKSB7XG4gIHJldHVybiBTQ09QRV9GVU5DVElPTiB8IChhc3luYyA/IFNDT1BFX0FTWU5DIDogMCkgfCAoZ2VuZXJhdG9yID8gU0NPUEVfR0VORVJBVE9SIDogMClcbn1cblxuLy8gVXNlZCBpbiBjaGVja0xWYWwgYW5kIGRlY2xhcmVOYW1lIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBhIGJpbmRpbmdcbnZhclxuICAgIEJJTkRfTk9ORSA9IDAsIC8vIE5vdCBhIGJpbmRpbmdcbiAgICBCSU5EX1ZBUiA9IDEsIC8vIFZhci1zdHlsZSBiaW5kaW5nXG4gICAgQklORF9MRVhJQ0FMID0gMiwgLy8gTGV0LSBvciBjb25zdC1zdHlsZSBiaW5kaW5nXG4gICAgQklORF9GVU5DVElPTiA9IDMsIC8vIEZ1bmN0aW9uIGRlY2xhcmF0aW9uXG4gICAgQklORF9TSU1QTEVfQ0FUQ0ggPSA0LCAvLyBTaW1wbGUgKGlkZW50aWZpZXIgcGF0dGVybikgY2F0Y2ggYmluZGluZ1xuICAgIEJJTkRfT1VUU0lERSA9IDU7IC8vIFNwZWNpYWwgY2FzZSBmb3IgZnVuY3Rpb24gbmFtZXMgYXMgYm91bmQgaW5zaWRlIHRoZSBmdW5jdGlvblxuXG52YXIgUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyKG9wdGlvbnMsIGlucHV0LCBzdGFydFBvcykge1xuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID0gZ2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgdGhpcy5zb3VyY2VGaWxlID0gb3B0aW9ucy5zb3VyY2VGaWxlO1xuICB0aGlzLmtleXdvcmRzID0gd29yZHNSZWdleHAoa2V5d29yZHNbb3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ID8gNiA6IG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIiA/IFwiNW1vZHVsZVwiIDogNV0pO1xuICB2YXIgcmVzZXJ2ZWQgPSBcIlwiO1xuICBpZiAob3B0aW9ucy5hbGxvd1Jlc2VydmVkICE9PSB0cnVlKSB7XG4gICAgZm9yICh2YXIgdiA9IG9wdGlvbnMuZWNtYVZlcnNpb247OyB2LS0pXG4gICAgICB7IGlmIChyZXNlcnZlZCA9IHJlc2VydmVkV29yZHNbdl0pIHsgYnJlYWsgfSB9XG4gICAgaWYgKG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIikgeyByZXNlcnZlZCArPSBcIiBhd2FpdFwiOyB9XG4gIH1cbiAgdGhpcy5yZXNlcnZlZFdvcmRzID0gd29yZHNSZWdleHAocmVzZXJ2ZWQpO1xuICB2YXIgcmVzZXJ2ZWRTdHJpY3QgPSAocmVzZXJ2ZWQgPyByZXNlcnZlZCArIFwiIFwiIDogXCJcIikgKyByZXNlcnZlZFdvcmRzLnN0cmljdDtcbiAgdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0ID0gd29yZHNSZWdleHAocmVzZXJ2ZWRTdHJpY3QpO1xuICB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3RCaW5kID0gd29yZHNSZWdleHAocmVzZXJ2ZWRTdHJpY3QgKyBcIiBcIiArIHJlc2VydmVkV29yZHMuc3RyaWN0QmluZCk7XG4gIHRoaXMuaW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuXG4gIC8vIFVzZWQgdG8gc2lnbmFsIHRvIGNhbGxlcnMgb2YgYHJlYWRXb3JkMWAgd2hldGhlciB0aGUgd29yZFxuICAvLyBjb250YWluZWQgYW55IGVzY2FwZSBzZXF1ZW5jZXMuIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugd29yZHMgd2l0aFxuICAvLyBlc2NhcGUgc2VxdWVuY2VzIG11c3Qgbm90IGJlIGludGVycHJldGVkIGFzIGtleXdvcmRzLlxuICB0aGlzLmNvbnRhaW5zRXNjID0gZmFsc2U7XG5cbiAgLy8gU2V0IHVwIHRva2VuIHN0YXRlXG5cbiAgLy8gVGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIHRva2VuaXplciBpbiB0aGUgaW5wdXQuXG4gIGlmIChzdGFydFBvcykge1xuICAgIHRoaXMucG9zID0gc3RhcnRQb3M7XG4gICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLmlucHV0Lmxhc3RJbmRleE9mKFwiXFxuXCIsIHN0YXJ0UG9zIC0gMSkgKyAxO1xuICAgIHRoaXMuY3VyTGluZSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5saW5lU3RhcnQpLnNwbGl0KGxpbmVCcmVhaykubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIHRoaXMucG9zID0gdGhpcy5saW5lU3RhcnQgPSAwO1xuICAgIHRoaXMuY3VyTGluZSA9IDE7XG4gIH1cblxuICAvLyBQcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IHRva2VuOlxuICAvLyBJdHMgdHlwZVxuICB0aGlzLnR5cGUgPSB0eXBlcy5lb2Y7XG4gIC8vIEZvciB0b2tlbnMgdGhhdCBpbmNsdWRlIG1vcmUgaW5mb3JtYXRpb24gdGhhbiB0aGVpciB0eXBlLCB0aGUgdmFsdWVcbiAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIC8vIEl0cyBzdGFydCBhbmQgZW5kIG9mZnNldFxuICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQgPSB0aGlzLnBvcztcbiAgLy8gQW5kLCBpZiBsb2NhdGlvbnMgYXJlIHVzZWQsIHRoZSB7bGluZSwgY29sdW1ufSBvYmplY3RcbiAgLy8gY29ycmVzcG9uZGluZyB0byB0aG9zZSBvZmZzZXRzXG4gIHRoaXMuc3RhcnRMb2MgPSB0aGlzLmVuZExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKTtcblxuICAvLyBQb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHByZXZpb3VzIHRva2VuXG4gIHRoaXMubGFzdFRva0VuZExvYyA9IHRoaXMubGFzdFRva1N0YXJ0TG9jID0gbnVsbDtcbiAgdGhpcy5sYXN0VG9rU3RhcnQgPSB0aGlzLmxhc3RUb2tFbmQgPSB0aGlzLnBvcztcblxuICAvLyBUaGUgY29udGV4dCBzdGFjayBpcyB1c2VkIHRvIHN1cGVyZmljaWFsbHkgdHJhY2sgc3ludGFjdGljXG4gIC8vIGNvbnRleHQgdG8gcHJlZGljdCB3aGV0aGVyIGEgcmVndWxhciBleHByZXNzaW9uIGlzIGFsbG93ZWQgaW4gYVxuICAvLyBnaXZlbiBwb3NpdGlvbi5cbiAgdGhpcy5jb250ZXh0ID0gdGhpcy5pbml0aWFsQ29udGV4dCgpO1xuICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcblxuICAvLyBGaWd1cmUgb3V0IGlmIGl0J3MgYSBtb2R1bGUgY29kZS5cbiAgdGhpcy5pbk1vZHVsZSA9IG9wdGlvbnMuc291cmNlVHlwZSA9PT0gXCJtb2R1bGVcIjtcbiAgdGhpcy5zdHJpY3QgPSB0aGlzLmluTW9kdWxlIHx8IHRoaXMuc3RyaWN0RGlyZWN0aXZlKHRoaXMucG9zKTtcblxuICAvLyBVc2VkIHRvIHNpZ25pZnkgdGhlIHN0YXJ0IG9mIGEgcG90ZW50aWFsIGFycm93IGZ1bmN0aW9uXG4gIHRoaXMucG90ZW50aWFsQXJyb3dBdCA9IC0xO1xuXG4gIC8vIFBvc2l0aW9ucyB0byBkZWxheWVkLWNoZWNrIHRoYXQgeWllbGQvYXdhaXQgZG9lcyBub3QgZXhpc3QgaW4gZGVmYXVsdCBwYXJhbWV0ZXJzLlxuICB0aGlzLnlpZWxkUG9zID0gdGhpcy5hd2FpdFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcyA9IDA7XG4gIC8vIExhYmVscyBpbiBzY29wZS5cbiAgdGhpcy5sYWJlbHMgPSBbXTtcbiAgLy8gVGh1cy1mYXIgdW5kZWZpbmVkIGV4cG9ydHMuXG4gIHRoaXMudW5kZWZpbmVkRXhwb3J0cyA9IHt9O1xuXG4gIC8vIElmIGVuYWJsZWQsIHNraXAgbGVhZGluZyBoYXNoYmFuZyBsaW5lLlxuICBpZiAodGhpcy5wb3MgPT09IDAgJiYgb3B0aW9ucy5hbGxvd0hhc2hCYW5nICYmIHRoaXMuaW5wdXQuc2xpY2UoMCwgMikgPT09IFwiIyFcIilcbiAgICB7IHRoaXMuc2tpcExpbmVDb21tZW50KDIpOyB9XG5cbiAgLy8gU2NvcGUgdHJhY2tpbmcgZm9yIGR1cGxpY2F0ZSB2YXJpYWJsZSBuYW1lcyAoc2VlIHNjb3BlLmpzKVxuICB0aGlzLnNjb3BlU3RhY2sgPSBbXTtcbiAgdGhpcy5lbnRlclNjb3BlKFNDT1BFX1RPUCk7XG5cbiAgLy8gRm9yIFJlZ0V4cCB2YWxpZGF0aW9uXG4gIHRoaXMucmVnZXhwU3RhdGUgPSBudWxsO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgaW5GdW5jdGlvbjogeyBjb25maWd1cmFibGU6IHRydWUgfSxpbkdlbmVyYXRvcjogeyBjb25maWd1cmFibGU6IHRydWUgfSxpbkFzeW5jOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGFsbG93U3VwZXI6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sYWxsb3dEaXJlY3RTdXBlcjogeyBjb25maWd1cmFibGU6IHRydWUgfSx0cmVhdEZ1bmN0aW9uc0FzVmFyOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cblBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiBwYXJzZSAoKSB7XG4gIHZhciBub2RlID0gdGhpcy5vcHRpb25zLnByb2dyYW0gfHwgdGhpcy5zdGFydE5vZGUoKTtcbiAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgcmV0dXJuIHRoaXMucGFyc2VUb3BMZXZlbChub2RlKVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzLmluRnVuY3Rpb24uZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFZhclNjb3BlKCkuZmxhZ3MgJiBTQ09QRV9GVU5DVElPTikgPiAwIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuaW5HZW5lcmF0b3IuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFZhclNjb3BlKCkuZmxhZ3MgJiBTQ09QRV9HRU5FUkFUT1IpID4gMCB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmluQXN5bmMuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFZhclNjb3BlKCkuZmxhZ3MgJiBTQ09QRV9BU1lOQykgPiAwIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuYWxsb3dTdXBlci5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5jdXJyZW50VGhpc1Njb3BlKCkuZmxhZ3MgJiBTQ09QRV9TVVBFUikgPiAwIH07XG5wcm90b3R5cGVBY2Nlc3NvcnMuYWxsb3dEaXJlY3RTdXBlci5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAodGhpcy5jdXJyZW50VGhpc1Njb3BlKCkuZmxhZ3MgJiBTQ09QRV9ESVJFQ1RfU1VQRVIpID4gMCB9O1xucHJvdG90eXBlQWNjZXNzb3JzLnRyZWF0RnVuY3Rpb25zQXNWYXIuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZSh0aGlzLmN1cnJlbnRTY29wZSgpKSB9O1xuXG4vLyBTd2l0Y2ggdG8gYSBnZXR0ZXIgZm9yIDcuMC4wLlxuUGFyc2VyLnByb3RvdHlwZS5pbk5vbkFycm93RnVuY3Rpb24gPSBmdW5jdGlvbiBpbk5vbkFycm93RnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFRoaXNTY29wZSgpLmZsYWdzICYgU0NPUEVfRlVOQ1RJT04pID4gMCB9O1xuXG5QYXJzZXIuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kICgpIHtcbiAgICB2YXIgcGx1Z2lucyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBwbHVnaW5zWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgdmFyIGNscyA9IHRoaXM7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGx1Z2lucy5sZW5ndGg7IGkrKykgeyBjbHMgPSBwbHVnaW5zW2ldKGNscyk7IH1cbiAgcmV0dXJuIGNsc1xufTtcblxuUGFyc2VyLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgdGhpcyhvcHRpb25zLCBpbnB1dCkucGFyc2UoKVxufTtcblxuUGFyc2VyLnBhcnNlRXhwcmVzc2lvbkF0ID0gZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uQXQgKGlucHV0LCBwb3MsIG9wdGlvbnMpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyB0aGlzKG9wdGlvbnMsIGlucHV0LCBwb3MpO1xuICBwYXJzZXIubmV4dFRva2VuKCk7XG4gIHJldHVybiBwYXJzZXIucGFyc2VFeHByZXNzaW9uKClcbn07XG5cblBhcnNlci50b2tlbml6ZXIgPSBmdW5jdGlvbiB0b2tlbml6ZXIgKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgdGhpcyhvcHRpb25zLCBpbnB1dClcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBQYXJzZXIucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIHBwID0gUGFyc2VyLnByb3RvdHlwZTtcblxuLy8gIyMgUGFyc2VyIHV0aWxpdGllc1xuXG52YXIgbGl0ZXJhbCA9IC9eKD86JygoPzpcXFxcLnxbXidcXFxcXSkqPyknfFwiKCg/OlxcXFwufFteXCJcXFxcXSkqPylcIikvO1xucHAuc3RyaWN0RGlyZWN0aXZlID0gZnVuY3Rpb24oc3RhcnQpIHtcbiAgZm9yICg7Oykge1xuICAgIC8vIFRyeSB0byBmaW5kIHN0cmluZyBsaXRlcmFsLlxuICAgIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHN0YXJ0O1xuICAgIHN0YXJ0ICs9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dClbMF0ubGVuZ3RoO1xuICAgIHZhciBtYXRjaCA9IGxpdGVyYWwuZXhlYyh0aGlzLmlucHV0LnNsaWNlKHN0YXJ0KSk7XG4gICAgaWYgKCFtYXRjaCkgeyByZXR1cm4gZmFsc2UgfVxuICAgIGlmICgobWF0Y2hbMV0gfHwgbWF0Y2hbMl0pID09PSBcInVzZSBzdHJpY3RcIikge1xuICAgICAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gc3RhcnQgKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB2YXIgc3BhY2VBZnRlciA9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dCksIGVuZCA9IHNwYWNlQWZ0ZXIuaW5kZXggKyBzcGFjZUFmdGVyWzBdLmxlbmd0aDtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQXQoZW5kKTtcbiAgICAgIHJldHVybiBuZXh0ID09PSBcIjtcIiB8fCBuZXh0ID09PSBcIn1cIiB8fFxuICAgICAgICAobGluZUJyZWFrLnRlc3Qoc3BhY2VBZnRlclswXSkgJiZcbiAgICAgICAgICEoL1soYC5bK1xcLS8qJTw+PSw/XiZdLy50ZXN0KG5leHQpIHx8IG5leHQgPT09IFwiIVwiICYmIHRoaXMuaW5wdXQuY2hhckF0KGVuZCArIDEpID09PSBcIj1cIikpXG4gICAgfVxuICAgIHN0YXJ0ICs9IG1hdGNoWzBdLmxlbmd0aDtcblxuICAgIC8vIFNraXAgc2VtaWNvbG9uLCBpZiBhbnkuXG4gICAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzLmlucHV0KVswXS5sZW5ndGg7XG4gICAgaWYgKHRoaXMuaW5wdXRbc3RhcnRdID09PSBcIjtcIilcbiAgICAgIHsgc3RhcnQrKzsgfVxuICB9XG59O1xuXG4vLyBQcmVkaWNhdGUgdGhhdCB0ZXN0cyB3aGV0aGVyIHRoZSBuZXh0IHRva2VuIGlzIG9mIHRoZSBnaXZlblxuLy8gdHlwZSwgYW5kIGlmIHllcywgY29uc3VtZXMgaXQgYXMgYSBzaWRlIGVmZmVjdC5cblxucHAuZWF0ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlKSB7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufTtcblxuLy8gVGVzdHMgd2hldGhlciBwYXJzZWQgdG9rZW4gaXMgYSBjb250ZXh0dWFsIGtleXdvcmQuXG5cbnBwLmlzQ29udGV4dHVhbCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHlwZXMubmFtZSAmJiB0aGlzLnZhbHVlID09PSBuYW1lICYmICF0aGlzLmNvbnRhaW5zRXNjXG59O1xuXG4vLyBDb25zdW1lcyBjb250ZXh0dWFsIGtleXdvcmQgaWYgcG9zc2libGUuXG5cbnBwLmVhdENvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghdGhpcy5pc0NvbnRleHR1YWwobmFtZSkpIHsgcmV0dXJuIGZhbHNlIH1cbiAgdGhpcy5uZXh0KCk7XG4gIHJldHVybiB0cnVlXG59O1xuXG4vLyBBc3NlcnRzIHRoYXQgZm9sbG93aW5nIHRva2VuIGlzIGdpdmVuIGNvbnRleHR1YWwga2V5d29yZC5cblxucHAuZXhwZWN0Q29udGV4dHVhbCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYgKCF0aGlzLmVhdENvbnRleHR1YWwobmFtZSkpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbn07XG5cbi8vIFRlc3Qgd2hldGhlciBhIHNlbWljb2xvbiBjYW4gYmUgaW5zZXJ0ZWQgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uXG5cbnBwLmNhbkluc2VydFNlbWljb2xvbiA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlID09PSB0eXBlcy5lb2YgfHxcbiAgICB0aGlzLnR5cGUgPT09IHR5cGVzLmJyYWNlUiB8fFxuICAgIGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSlcbn07XG5cbnBwLmluc2VydFNlbWljb2xvbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMub25JbnNlcnRlZFNlbWljb2xvbilcbiAgICAgIHsgdGhpcy5vcHRpb25zLm9uSW5zZXJ0ZWRTZW1pY29sb24odGhpcy5sYXN0VG9rRW5kLCB0aGlzLmxhc3RUb2tFbmRMb2MpOyB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufTtcblxuLy8gQ29uc3VtZSBhIHNlbWljb2xvbiwgb3IsIGZhaWxpbmcgdGhhdCwgc2VlIGlmIHdlIGFyZSBhbGxvd2VkIHRvXG4vLyBwcmV0ZW5kIHRoYXQgdGhlcmUgaXMgYSBzZW1pY29sb24gYXQgdGhpcyBwb3NpdGlvbi5cblxucHAuc2VtaWNvbG9uID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5lYXQodHlwZXMuc2VtaSkgJiYgIXRoaXMuaW5zZXJ0U2VtaWNvbG9uKCkpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbn07XG5cbnBwLmFmdGVyVHJhaWxpbmdDb21tYSA9IGZ1bmN0aW9uKHRva1R5cGUsIG5vdE5leHQpIHtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdG9rVHlwZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMub25UcmFpbGluZ0NvbW1hKVxuICAgICAgeyB0aGlzLm9wdGlvbnMub25UcmFpbGluZ0NvbW1hKHRoaXMubGFzdFRva1N0YXJ0LCB0aGlzLmxhc3RUb2tTdGFydExvYyk7IH1cbiAgICBpZiAoIW5vdE5leHQpXG4gICAgICB7IHRoaXMubmV4dCgpOyB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufTtcblxuLy8gRXhwZWN0IGEgdG9rZW4gb2YgYSBnaXZlbiB0eXBlLiBJZiBmb3VuZCwgY29uc3VtZSBpdCwgb3RoZXJ3aXNlLFxuLy8gcmFpc2UgYW4gdW5leHBlY3RlZCB0b2tlbiBlcnJvci5cblxucHAuZXhwZWN0ID0gZnVuY3Rpb24odHlwZSkge1xuICB0aGlzLmVhdCh0eXBlKSB8fCB0aGlzLnVuZXhwZWN0ZWQoKTtcbn07XG5cbi8vIFJhaXNlIGFuIHVuZXhwZWN0ZWQgdG9rZW4gZXJyb3IuXG5cbnBwLnVuZXhwZWN0ZWQgPSBmdW5jdGlvbihwb3MpIHtcbiAgdGhpcy5yYWlzZShwb3MgIT0gbnVsbCA/IHBvcyA6IHRoaXMuc3RhcnQsIFwiVW5leHBlY3RlZCB0b2tlblwiKTtcbn07XG5cbmZ1bmN0aW9uIERlc3RydWN0dXJpbmdFcnJvcnMoKSB7XG4gIHRoaXMuc2hvcnRoYW5kQXNzaWduID1cbiAgdGhpcy50cmFpbGluZ0NvbW1hID1cbiAgdGhpcy5wYXJlbnRoZXNpemVkQXNzaWduID1cbiAgdGhpcy5wYXJlbnRoZXNpemVkQmluZCA9XG4gIHRoaXMuZG91YmxlUHJvdG8gPVxuICAgIC0xO1xufVxuXG5wcC5jaGVja1BhdHRlcm5FcnJvcnMgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBpc0Fzc2lnbikge1xuICBpZiAoIXJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgcmV0dXJuIH1cbiAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA+IC0xKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSwgXCJDb21tYSBpcyBub3QgcGVybWl0dGVkIGFmdGVyIHRoZSByZXN0IGVsZW1lbnRcIik7IH1cbiAgdmFyIHBhcmVucyA9IGlzQXNzaWduID8gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduIDogcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZDtcbiAgaWYgKHBhcmVucyA+IC0xKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShwYXJlbnMsIFwiUGFyZW50aGVzaXplZCBwYXR0ZXJuXCIpOyB9XG59O1xuXG5wcC5jaGVja0V4cHJlc3Npb25FcnJvcnMgPSBmdW5jdGlvbihyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBhbmRUaHJvdykge1xuICBpZiAoIXJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgcmV0dXJuIGZhbHNlIH1cbiAgdmFyIHNob3J0aGFuZEFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduO1xuICB2YXIgZG91YmxlUHJvdG8gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvO1xuICBpZiAoIWFuZFRocm93KSB7IHJldHVybiBzaG9ydGhhbmRBc3NpZ24gPj0gMCB8fCBkb3VibGVQcm90byA+PSAwIH1cbiAgaWYgKHNob3J0aGFuZEFzc2lnbiA+PSAwKVxuICAgIHsgdGhpcy5yYWlzZShzaG9ydGhhbmRBc3NpZ24sIFwiU2hvcnRoYW5kIHByb3BlcnR5IGFzc2lnbm1lbnRzIGFyZSB2YWxpZCBvbmx5IGluIGRlc3RydWN0dXJpbmcgcGF0dGVybnNcIik7IH1cbiAgaWYgKGRvdWJsZVByb3RvID49IDApXG4gICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZG91YmxlUHJvdG8sIFwiUmVkZWZpbml0aW9uIG9mIF9fcHJvdG9fXyBwcm9wZXJ0eVwiKTsgfVxufTtcblxucHAuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnlpZWxkUG9zICYmICghdGhpcy5hd2FpdFBvcyB8fCB0aGlzLnlpZWxkUG9zIDwgdGhpcy5hd2FpdFBvcykpXG4gICAgeyB0aGlzLnJhaXNlKHRoaXMueWllbGRQb3MsIFwiWWllbGQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgYSBkZWZhdWx0IHZhbHVlXCIpOyB9XG4gIGlmICh0aGlzLmF3YWl0UG9zKVxuICAgIHsgdGhpcy5yYWlzZSh0aGlzLmF3YWl0UG9zLCBcIkF3YWl0IGV4cHJlc3Npb24gY2Fubm90IGJlIGEgZGVmYXVsdCB2YWx1ZVwiKTsgfVxufTtcblxucHAuaXNTaW1wbGVBc3NpZ25UYXJnZXQgPSBmdW5jdGlvbihleHByKSB7XG4gIGlmIChleHByLnR5cGUgPT09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgICB7IHJldHVybiB0aGlzLmlzU2ltcGxlQXNzaWduVGFyZ2V0KGV4cHIuZXhwcmVzc2lvbikgfVxuICByZXR1cm4gZXhwci50eXBlID09PSBcIklkZW50aWZpZXJcIiB8fCBleHByLnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiXG59O1xuXG52YXIgcHAkMSA9IFBhcnNlci5wcm90b3R5cGU7XG5cbi8vICMjIyBTdGF0ZW1lbnQgcGFyc2luZ1xuXG4vLyBQYXJzZSBhIHByb2dyYW0uIEluaXRpYWxpemVzIHRoZSBwYXJzZXIsIHJlYWRzIGFueSBudW1iZXIgb2Zcbi8vIHN0YXRlbWVudHMsIGFuZCB3cmFwcyB0aGVtIGluIGEgUHJvZ3JhbSBub2RlLiAgT3B0aW9uYWxseSB0YWtlcyBhXG4vLyBgcHJvZ3JhbWAgYXJndW1lbnQuICBJZiBwcmVzZW50LCB0aGUgc3RhdGVtZW50cyB3aWxsIGJlIGFwcGVuZGVkXG4vLyB0byBpdHMgYm9keSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG5vZGUuXG5cbnBwJDEucGFyc2VUb3BMZXZlbCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIGV4cG9ydHMgPSB7fTtcbiAgaWYgKCFub2RlLmJvZHkpIHsgbm9kZS5ib2R5ID0gW107IH1cbiAgd2hpbGUgKHRoaXMudHlwZSAhPT0gdHlwZXMuZW9mKSB7XG4gICAgdmFyIHN0bXQgPSB0aGlzLnBhcnNlU3RhdGVtZW50KG51bGwsIHRydWUsIGV4cG9ydHMpO1xuICAgIG5vZGUuYm9keS5wdXNoKHN0bXQpO1xuICB9XG4gIGlmICh0aGlzLmluTW9kdWxlKVxuICAgIHsgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyh0aGlzLnVuZGVmaW5lZEV4cG9ydHMpOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICAgIHtcbiAgICAgICAgdmFyIG5hbWUgPSBsaXN0W2ldO1xuXG4gICAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnVuZGVmaW5lZEV4cG9ydHNbbmFtZV0uc3RhcnQsIChcIkV4cG9ydCAnXCIgKyBuYW1lICsgXCInIGlzIG5vdCBkZWZpbmVkXCIpKTtcbiAgICAgIH0gfVxuICB0aGlzLmFkYXB0RGlyZWN0aXZlUHJvbG9ndWUobm9kZS5ib2R5KTtcbiAgdGhpcy5uZXh0KCk7XG4gIG5vZGUuc291cmNlVHlwZSA9IHRoaXMub3B0aW9ucy5zb3VyY2VUeXBlO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUHJvZ3JhbVwiKVxufTtcblxudmFyIGxvb3BMYWJlbCA9IHtraW5kOiBcImxvb3BcIn0sIHN3aXRjaExhYmVsID0ge2tpbmQ6IFwic3dpdGNoXCJ9O1xuXG5wcCQxLmlzTGV0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNiB8fCAhdGhpcy5pc0NvbnRleHR1YWwoXCJsZXRcIikpIHsgcmV0dXJuIGZhbHNlIH1cbiAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gdGhpcy5wb3M7XG4gIHZhciBza2lwID0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzLmlucHV0KTtcbiAgdmFyIG5leHQgPSB0aGlzLnBvcyArIHNraXBbMF0ubGVuZ3RoLCBuZXh0Q2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQobmV4dCk7XG4gIC8vIEZvciBhbWJpZ3VvdXMgY2FzZXMsIGRldGVybWluZSBpZiBhIExleGljYWxEZWNsYXJhdGlvbiAob3Igb25seSBhXG4gIC8vIFN0YXRlbWVudCkgaXMgYWxsb3dlZCBoZXJlLiBJZiBjb250ZXh0IGlzIG5vdCBlbXB0eSB0aGVuIG9ubHkgYSBTdGF0ZW1lbnRcbiAgLy8gaXMgYWxsb3dlZC4gSG93ZXZlciwgYGxldCBbYCBpcyBhbiBleHBsaWNpdCBuZWdhdGl2ZSBsb29rYWhlYWQgZm9yXG4gIC8vIEV4cHJlc3Npb25TdGF0ZW1lbnQsIHNvIHNwZWNpYWwtY2FzZSBpdCBmaXJzdC5cbiAgaWYgKG5leHRDaCA9PT0gOTEpIHsgcmV0dXJuIHRydWUgfSAvLyAnWydcbiAgaWYgKGNvbnRleHQpIHsgcmV0dXJuIGZhbHNlIH1cblxuICBpZiAobmV4dENoID09PSAxMjMpIHsgcmV0dXJuIHRydWUgfSAvLyAneydcbiAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KG5leHRDaCwgdHJ1ZSkpIHtcbiAgICB2YXIgcG9zID0gbmV4dCArIDE7XG4gICAgd2hpbGUgKGlzSWRlbnRpZmllckNoYXIodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHBvcyksIHRydWUpKSB7ICsrcG9zOyB9XG4gICAgdmFyIGlkZW50ID0gdGhpcy5pbnB1dC5zbGljZShuZXh0LCBwb3MpO1xuICAgIGlmICgha2V5d29yZFJlbGF0aW9uYWxPcGVyYXRvci50ZXN0KGlkZW50KSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBjaGVjayAnYXN5bmMgW25vIExpbmVUZXJtaW5hdG9yIGhlcmVdIGZ1bmN0aW9uJ1xuLy8gLSAnYXN5bmMgLypmb28qLyBmdW5jdGlvbicgaXMgT0suXG4vLyAtICdhc3luYyAvKlxcbiovIGZ1bmN0aW9uJyBpcyBpbnZhbGlkLlxucHAkMS5pc0FzeW5jRnVuY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDggfHwgIXRoaXMuaXNDb250ZXh0dWFsKFwiYXN5bmNcIikpXG4gICAgeyByZXR1cm4gZmFsc2UgfVxuXG4gIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHRoaXMucG9zO1xuICB2YXIgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dCk7XG4gIHZhciBuZXh0ID0gdGhpcy5wb3MgKyBza2lwWzBdLmxlbmd0aDtcbiAgcmV0dXJuICFsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMucG9zLCBuZXh0KSkgJiZcbiAgICB0aGlzLmlucHV0LnNsaWNlKG5leHQsIG5leHQgKyA4KSA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgKG5leHQgKyA4ID09PSB0aGlzLmlucHV0Lmxlbmd0aCB8fCAhaXNJZGVudGlmaWVyQ2hhcih0aGlzLmlucHV0LmNoYXJBdChuZXh0ICsgOCkpKVxufTtcblxuLy8gUGFyc2UgYSBzaW5nbGUgc3RhdGVtZW50LlxuLy9cbi8vIElmIGV4cGVjdGluZyBhIHN0YXRlbWVudCBhbmQgZmluZGluZyBhIHNsYXNoIG9wZXJhdG9yLCBwYXJzZSBhXG4vLyByZWd1bGFyIGV4cHJlc3Npb24gbGl0ZXJhbC4gVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgbGlrZVxuLy8gYGlmIChmb28pIC9ibGFoLy5leGVjKGZvbylgLCB3aGVyZSBsb29raW5nIGF0IHRoZSBwcmV2aW91cyB0b2tlblxuLy8gZG9lcyBub3QgaGVscC5cblxucHAkMS5wYXJzZVN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbnRleHQsIHRvcExldmVsLCBleHBvcnRzKSB7XG4gIHZhciBzdGFydHR5cGUgPSB0aGlzLnR5cGUsIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBraW5kO1xuXG4gIGlmICh0aGlzLmlzTGV0KGNvbnRleHQpKSB7XG4gICAgc3RhcnR0eXBlID0gdHlwZXMuX3ZhcjtcbiAgICBraW5kID0gXCJsZXRcIjtcbiAgfVxuXG4gIC8vIE1vc3QgdHlwZXMgb2Ygc3RhdGVtZW50cyBhcmUgcmVjb2duaXplZCBieSB0aGUga2V5d29yZCB0aGV5XG4gIC8vIHN0YXJ0IHdpdGguIE1hbnkgYXJlIHRyaXZpYWwgdG8gcGFyc2UsIHNvbWUgcmVxdWlyZSBhIGJpdCBvZlxuICAvLyBjb21wbGV4aXR5LlxuXG4gIHN3aXRjaCAoc3RhcnR0eXBlKSB7XG4gIGNhc2UgdHlwZXMuX2JyZWFrOiBjYXNlIHR5cGVzLl9jb250aW51ZTogcmV0dXJuIHRoaXMucGFyc2VCcmVha0NvbnRpbnVlU3RhdGVtZW50KG5vZGUsIHN0YXJ0dHlwZS5rZXl3b3JkKVxuICBjYXNlIHR5cGVzLl9kZWJ1Z2dlcjogcmV0dXJuIHRoaXMucGFyc2VEZWJ1Z2dlclN0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl9kbzogcmV0dXJuIHRoaXMucGFyc2VEb1N0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl9mb3I6IHJldHVybiB0aGlzLnBhcnNlRm9yU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHlwZXMuX2Z1bmN0aW9uOlxuICAgIC8vIEZ1bmN0aW9uIGFzIHNvbGUgYm9keSBvZiBlaXRoZXIgYW4gaWYgc3RhdGVtZW50IG9yIGEgbGFiZWxlZCBzdGF0ZW1lbnRcbiAgICAvLyB3b3JrcywgYnV0IG5vdCB3aGVuIGl0IGlzIHBhcnQgb2YgYSBsYWJlbGVkIHN0YXRlbWVudCB0aGF0IGlzIHRoZSBzb2xlXG4gICAgLy8gYm9keSBvZiBhbiBpZiBzdGF0ZW1lbnQuXG4gICAgaWYgKChjb250ZXh0ICYmICh0aGlzLnN0cmljdCB8fCBjb250ZXh0ICE9PSBcImlmXCIgJiYgY29udGV4dCAhPT0gXCJsYWJlbFwiKSkgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uU3RhdGVtZW50KG5vZGUsIGZhbHNlLCAhY29udGV4dClcbiAgY2FzZSB0eXBlcy5fY2xhc3M6XG4gICAgaWYgKGNvbnRleHQpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZUNsYXNzKG5vZGUsIHRydWUpXG4gIGNhc2UgdHlwZXMuX2lmOiByZXR1cm4gdGhpcy5wYXJzZUlmU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHlwZXMuX3JldHVybjogcmV0dXJuIHRoaXMucGFyc2VSZXR1cm5TdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0eXBlcy5fc3dpdGNoOiByZXR1cm4gdGhpcy5wYXJzZVN3aXRjaFN0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl90aHJvdzogcmV0dXJuIHRoaXMucGFyc2VUaHJvd1N0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl90cnk6IHJldHVybiB0aGlzLnBhcnNlVHJ5U3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHlwZXMuX2NvbnN0OiBjYXNlIHR5cGVzLl92YXI6XG4gICAga2luZCA9IGtpbmQgfHwgdGhpcy52YWx1ZTtcbiAgICBpZiAoY29udGV4dCAmJiBraW5kICE9PSBcInZhclwiKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VWYXJTdGF0ZW1lbnQobm9kZSwga2luZClcbiAgY2FzZSB0eXBlcy5fd2hpbGU6IHJldHVybiB0aGlzLnBhcnNlV2hpbGVTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0eXBlcy5fd2l0aDogcmV0dXJuIHRoaXMucGFyc2VXaXRoU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHlwZXMuYnJhY2VMOiByZXR1cm4gdGhpcy5wYXJzZUJsb2NrKHRydWUsIG5vZGUpXG4gIGNhc2UgdHlwZXMuc2VtaTogcmV0dXJuIHRoaXMucGFyc2VFbXB0eVN0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl9leHBvcnQ6XG4gIGNhc2UgdHlwZXMuX2ltcG9ydDpcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID4gMTAgJiYgc3RhcnR0eXBlID09PSB0eXBlcy5faW1wb3J0KSB7XG4gICAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSB0aGlzLnBvcztcbiAgICAgIHZhciBza2lwID0gc2tpcFdoaXRlU3BhY2UuZXhlYyh0aGlzLmlucHV0KTtcbiAgICAgIHZhciBuZXh0ID0gdGhpcy5wb3MgKyBza2lwWzBdLmxlbmd0aCwgbmV4dENoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KG5leHQpO1xuICAgICAgaWYgKG5leHRDaCA9PT0gNDAgfHwgbmV4dENoID09PSA0NikgLy8gJygnIG9yICcuJ1xuICAgICAgICB7IHJldHVybiB0aGlzLnBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChub2RlLCB0aGlzLnBhcnNlRXhwcmVzc2lvbigpKSB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlKSB7XG4gICAgICBpZiAoIXRvcExldmVsKVxuICAgICAgICB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCInaW1wb3J0JyBhbmQgJ2V4cG9ydCcgbWF5IG9ubHkgYXBwZWFyIGF0IHRoZSB0b3AgbGV2ZWxcIik7IH1cbiAgICAgIGlmICghdGhpcy5pbk1vZHVsZSlcbiAgICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ2ltcG9ydCcgYW5kICdleHBvcnQnIG1heSBhcHBlYXIgb25seSB3aXRoICdzb3VyY2VUeXBlOiBtb2R1bGUnXCIpOyB9XG4gICAgfVxuICAgIHJldHVybiBzdGFydHR5cGUgPT09IHR5cGVzLl9pbXBvcnQgPyB0aGlzLnBhcnNlSW1wb3J0KG5vZGUpIDogdGhpcy5wYXJzZUV4cG9ydChub2RlLCBleHBvcnRzKVxuXG4gICAgLy8gSWYgdGhlIHN0YXRlbWVudCBkb2VzIG5vdCBzdGFydCB3aXRoIGEgc3RhdGVtZW50IGtleXdvcmQgb3IgYVxuICAgIC8vIGJyYWNlLCBpdCdzIGFuIEV4cHJlc3Npb25TdGF0ZW1lbnQgb3IgTGFiZWxlZFN0YXRlbWVudC4gV2VcbiAgICAvLyBzaW1wbHkgc3RhcnQgcGFyc2luZyBhbiBleHByZXNzaW9uLCBhbmQgYWZ0ZXJ3YXJkcywgaWYgdGhlXG4gICAgLy8gbmV4dCB0b2tlbiBpcyBhIGNvbG9uIGFuZCB0aGUgZXhwcmVzc2lvbiB3YXMgYSBzaW1wbGVcbiAgICAvLyBJZGVudGlmaWVyIG5vZGUsIHdlIHN3aXRjaCB0byBpbnRlcnByZXRpbmcgaXQgYXMgYSBsYWJlbC5cbiAgZGVmYXVsdDpcbiAgICBpZiAodGhpcy5pc0FzeW5jRnVuY3Rpb24oKSkge1xuICAgICAgaWYgKGNvbnRleHQpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvblN0YXRlbWVudChub2RlLCB0cnVlLCAhY29udGV4dClcbiAgICB9XG5cbiAgICB2YXIgbWF5YmVOYW1lID0gdGhpcy52YWx1ZSwgZXhwciA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgaWYgKHN0YXJ0dHlwZSA9PT0gdHlwZXMubmFtZSAmJiBleHByLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIHRoaXMuZWF0KHR5cGVzLmNvbG9uKSlcbiAgICAgIHsgcmV0dXJuIHRoaXMucGFyc2VMYWJlbGVkU3RhdGVtZW50KG5vZGUsIG1heWJlTmFtZSwgZXhwciwgY29udGV4dCkgfVxuICAgIGVsc2UgeyByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSwgZXhwcikgfVxuICB9XG59O1xuXG5wcCQxLnBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGtleXdvcmQpIHtcbiAgdmFyIGlzQnJlYWsgPSBrZXl3b3JkID09PSBcImJyZWFrXCI7XG4gIHRoaXMubmV4dCgpO1xuICBpZiAodGhpcy5lYXQodHlwZXMuc2VtaSkgfHwgdGhpcy5pbnNlcnRTZW1pY29sb24oKSkgeyBub2RlLmxhYmVsID0gbnVsbDsgfVxuICBlbHNlIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzLm5hbWUpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgZWxzZSB7XG4gICAgbm9kZS5sYWJlbCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gIH1cblxuICAvLyBWZXJpZnkgdGhhdCB0aGVyZSBpcyBhbiBhY3R1YWwgZGVzdGluYXRpb24gdG8gYnJlYWsgb3JcbiAgLy8gY29udGludWUgdG8uXG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCB0aGlzLmxhYmVscy5sZW5ndGg7ICsraSkge1xuICAgIHZhciBsYWIgPSB0aGlzLmxhYmVsc1tpXTtcbiAgICBpZiAobm9kZS5sYWJlbCA9PSBudWxsIHx8IGxhYi5uYW1lID09PSBub2RlLmxhYmVsLm5hbWUpIHtcbiAgICAgIGlmIChsYWIua2luZCAhPSBudWxsICYmIChpc0JyZWFrIHx8IGxhYi5raW5kID09PSBcImxvb3BcIikpIHsgYnJlYWsgfVxuICAgICAgaWYgKG5vZGUubGFiZWwgJiYgaXNCcmVhaykgeyBicmVhayB9XG4gICAgfVxuICB9XG4gIGlmIChpID09PSB0aGlzLmxhYmVscy5sZW5ndGgpIHsgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIlVuc3ludGFjdGljIFwiICsga2V5d29yZCk7IH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBpc0JyZWFrID8gXCJCcmVha1N0YXRlbWVudFwiIDogXCJDb250aW51ZVN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZURlYnVnZ2VyU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgdGhpcy5zZW1pY29sb24oKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkRlYnVnZ2VyU3RhdGVtZW50XCIpXG59O1xuXG5wcCQxLnBhcnNlRG9TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpO1xuICB0aGlzLmxhYmVscy5wdXNoKGxvb3BMYWJlbCk7XG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJkb1wiKTtcbiAgdGhpcy5sYWJlbHMucG9wKCk7XG4gIHRoaXMuZXhwZWN0KHR5cGVzLl93aGlsZSk7XG4gIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KVxuICAgIHsgdGhpcy5lYXQodHlwZXMuc2VtaSk7IH1cbiAgZWxzZVxuICAgIHsgdGhpcy5zZW1pY29sb24oKTsgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRG9XaGlsZVN0YXRlbWVudFwiKVxufTtcblxuLy8gRGlzYW1iaWd1YXRpbmcgYmV0d2VlbiBhIGBmb3JgIGFuZCBhIGBmb3JgL2BpbmAgb3IgYGZvcmAvYG9mYFxuLy8gbG9vcCBpcyBub24tdHJpdmlhbC4gQmFzaWNhbGx5LCB3ZSBoYXZlIHRvIHBhcnNlIHRoZSBpbml0IGB2YXJgXG4vLyBzdGF0ZW1lbnQgb3IgZXhwcmVzc2lvbiwgZGlzYWxsb3dpbmcgdGhlIGBpbmAgb3BlcmF0b3IgKHNlZVxuLy8gdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gYHBhcnNlRXhwcmVzc2lvbmApLCBhbmQgdGhlbiBjaGVja1xuLy8gd2hldGhlciB0aGUgbmV4dCB0b2tlbiBpcyBgaW5gIG9yIGBvZmAuIFdoZW4gdGhlcmUgaXMgbm8gaW5pdFxuLy8gcGFydCAoc2VtaWNvbG9uIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzKSwgaXRcbi8vIGlzIGEgcmVndWxhciBgZm9yYCBsb29wLlxuXG5wcCQxLnBhcnNlRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgdmFyIGF3YWl0QXQgPSAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgKHRoaXMuaW5Bc3luYyB8fCAoIXRoaXMuaW5GdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuYWxsb3dBd2FpdE91dHNpZGVGdW5jdGlvbikpICYmIHRoaXMuZWF0Q29udGV4dHVhbChcImF3YWl0XCIpKSA/IHRoaXMubGFzdFRva1N0YXJ0IDogLTE7XG4gIHRoaXMubGFiZWxzLnB1c2gobG9vcExhYmVsKTtcbiAgdGhpcy5lbnRlclNjb3BlKDApO1xuICB0aGlzLmV4cGVjdCh0eXBlcy5wYXJlbkwpO1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5zZW1pKSB7XG4gICAgaWYgKGF3YWl0QXQgPiAtMSkgeyB0aGlzLnVuZXhwZWN0ZWQoYXdhaXRBdCk7IH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBudWxsKVxuICB9XG4gIHZhciBpc0xldCA9IHRoaXMuaXNMZXQoKTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuX3ZhciB8fCB0aGlzLnR5cGUgPT09IHR5cGVzLl9jb25zdCB8fCBpc0xldCkge1xuICAgIHZhciBpbml0JDEgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBraW5kID0gaXNMZXQgPyBcImxldFwiIDogdGhpcy52YWx1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICB0aGlzLnBhcnNlVmFyKGluaXQkMSwgdHJ1ZSwga2luZCk7XG4gICAgdGhpcy5maW5pc2hOb2RlKGluaXQkMSwgXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIpO1xuICAgIGlmICgodGhpcy50eXBlID09PSB0eXBlcy5faW4gfHwgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSAmJiBpbml0JDEuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5KSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLl9pbikge1xuICAgICAgICAgIGlmIChhd2FpdEF0ID4gLTEpIHsgdGhpcy51bmV4cGVjdGVkKGF3YWl0QXQpOyB9XG4gICAgICAgIH0gZWxzZSB7IG5vZGUuYXdhaXQgPSBhd2FpdEF0ID4gLTE7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRm9ySW4obm9kZSwgaW5pdCQxKVxuICAgIH1cbiAgICBpZiAoYXdhaXRBdCA+IC0xKSB7IHRoaXMudW5leHBlY3RlZChhd2FpdEF0KTsgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlRm9yKG5vZGUsIGluaXQkMSlcbiAgfVxuICB2YXIgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IG5ldyBEZXN0cnVjdHVyaW5nRXJyb3JzO1xuICB2YXIgaW5pdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKHRydWUsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5faW4gfHwgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5KSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5faW4pIHtcbiAgICAgICAgaWYgKGF3YWl0QXQgPiAtMSkgeyB0aGlzLnVuZXhwZWN0ZWQoYXdhaXRBdCk7IH1cbiAgICAgIH0gZWxzZSB7IG5vZGUuYXdhaXQgPSBhd2FpdEF0ID4gLTE7IH1cbiAgICB9XG4gICAgdGhpcy50b0Fzc2lnbmFibGUoaW5pdCwgZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIHRoaXMuY2hlY2tMVmFsKGluaXQpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlRm9ySW4obm9kZSwgaW5pdClcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTtcbiAgfVxuICBpZiAoYXdhaXRBdCA+IC0xKSB7IHRoaXMudW5leHBlY3RlZChhd2FpdEF0KTsgfVxuICByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBpbml0KVxufTtcblxucHAkMS5wYXJzZUZ1bmN0aW9uU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgaXNBc3luYywgZGVjbGFyYXRpb25Qb3NpdGlvbikge1xuICB0aGlzLm5leHQoKTtcbiAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbihub2RlLCBGVU5DX1NUQVRFTUVOVCB8IChkZWNsYXJhdGlvblBvc2l0aW9uID8gMCA6IEZVTkNfSEFOR0lOR19TVEFURU1FTlQpLCBmYWxzZSwgaXNBc3luYylcbn07XG5cbnBwJDEucGFyc2VJZlN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgLy8gYWxsb3cgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIGJyYW5jaGVzLCBidXQgb25seSBpbiBub24tc3RyaWN0IG1vZGVcbiAgbm9kZS5jb25zZXF1ZW50ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcImlmXCIpO1xuICBub2RlLmFsdGVybmF0ZSA9IHRoaXMuZWF0KHR5cGVzLl9lbHNlKSA/IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJpZlwiKSA6IG51bGw7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJZlN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZVJldHVyblN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgaWYgKCF0aGlzLmluRnVuY3Rpb24gJiYgIXRoaXMub3B0aW9ucy5hbGxvd1JldHVybk91dHNpZGVGdW5jdGlvbilcbiAgICB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCIncmV0dXJuJyBvdXRzaWRlIG9mIGZ1bmN0aW9uXCIpOyB9XG4gIHRoaXMubmV4dCgpO1xuXG4gIC8vIEluIGByZXR1cm5gIChhbmQgYGJyZWFrYC9gY29udGludWVgKSwgdGhlIGtleXdvcmRzIHdpdGhcbiAgLy8gb3B0aW9uYWwgYXJndW1lbnRzLCB3ZSBlYWdlcmx5IGxvb2sgZm9yIGEgc2VtaWNvbG9uIG9yIHRoZVxuICAvLyBwb3NzaWJpbGl0eSB0byBpbnNlcnQgb25lLlxuXG4gIGlmICh0aGlzLmVhdCh0eXBlcy5zZW1pKSB8fCB0aGlzLmluc2VydFNlbWljb2xvbigpKSB7IG5vZGUuYXJndW1lbnQgPSBudWxsOyB9XG4gIGVsc2UgeyBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTsgdGhpcy5zZW1pY29sb24oKTsgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUmV0dXJuU3RhdGVtZW50XCIpXG59O1xuXG5wcCQxLnBhcnNlU3dpdGNoU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgbm9kZS5kaXNjcmltaW5hbnQgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIG5vZGUuY2FzZXMgPSBbXTtcbiAgdGhpcy5leHBlY3QodHlwZXMuYnJhY2VMKTtcbiAgdGhpcy5sYWJlbHMucHVzaChzd2l0Y2hMYWJlbCk7XG4gIHRoaXMuZW50ZXJTY29wZSgwKTtcblxuICAvLyBTdGF0ZW1lbnRzIHVuZGVyIG11c3QgYmUgZ3JvdXBlZCAoYnkgbGFiZWwpIGluIFN3aXRjaENhc2VcbiAgLy8gbm9kZXMuIGBjdXJgIGlzIHVzZWQgdG8ga2VlcCB0aGUgbm9kZSB0aGF0IHdlIGFyZSBjdXJyZW50bHlcbiAgLy8gYWRkaW5nIHN0YXRlbWVudHMgdG8uXG5cbiAgdmFyIGN1cjtcbiAgZm9yICh2YXIgc2F3RGVmYXVsdCA9IGZhbHNlOyB0aGlzLnR5cGUgIT09IHR5cGVzLmJyYWNlUjspIHtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5fY2FzZSB8fCB0aGlzLnR5cGUgPT09IHR5cGVzLl9kZWZhdWx0KSB7XG4gICAgICB2YXIgaXNDYXNlID0gdGhpcy50eXBlID09PSB0eXBlcy5fY2FzZTtcbiAgICAgIGlmIChjdXIpIHsgdGhpcy5maW5pc2hOb2RlKGN1ciwgXCJTd2l0Y2hDYXNlXCIpOyB9XG4gICAgICBub2RlLmNhc2VzLnB1c2goY3VyID0gdGhpcy5zdGFydE5vZGUoKSk7XG4gICAgICBjdXIuY29uc2VxdWVudCA9IFtdO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBpZiAoaXNDYXNlKSB7XG4gICAgICAgIGN1ci50ZXN0ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzYXdEZWZhdWx0KSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLmxhc3RUb2tTdGFydCwgXCJNdWx0aXBsZSBkZWZhdWx0IGNsYXVzZXNcIik7IH1cbiAgICAgICAgc2F3RGVmYXVsdCA9IHRydWU7XG4gICAgICAgIGN1ci50ZXN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzLmNvbG9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFjdXIpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIGN1ci5jb25zZXF1ZW50LnB1c2godGhpcy5wYXJzZVN0YXRlbWVudChudWxsKSk7XG4gICAgfVxuICB9XG4gIHRoaXMuZXhpdFNjb3BlKCk7XG4gIGlmIChjdXIpIHsgdGhpcy5maW5pc2hOb2RlKGN1ciwgXCJTd2l0Y2hDYXNlXCIpOyB9XG4gIHRoaXMubmV4dCgpOyAvLyBDbG9zaW5nIGJyYWNlXG4gIHRoaXMubGFiZWxzLnBvcCgpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU3dpdGNoU3RhdGVtZW50XCIpXG59O1xuXG5wcCQxLnBhcnNlVGhyb3dTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpO1xuICBpZiAobGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKSlcbiAgICB7IHRoaXMucmFpc2UodGhpcy5sYXN0VG9rRW5kLCBcIklsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvd1wiKTsgfVxuICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgdGhpcy5zZW1pY29sb24oKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRocm93U3RhdGVtZW50XCIpXG59O1xuXG4vLyBSZXVzZWQgZW1wdHkgYXJyYXkgYWRkZWQgZm9yIG5vZGUgZmllbGRzIHRoYXQgYXJlIGFsd2F5cyBlbXB0eS5cblxudmFyIGVtcHR5ID0gW107XG5cbnBwJDEucGFyc2VUcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpO1xuICBub2RlLmJsb2NrID0gdGhpcy5wYXJzZUJsb2NrKCk7XG4gIG5vZGUuaGFuZGxlciA9IG51bGw7XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLl9jYXRjaCkge1xuICAgIHZhciBjbGF1c2UgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIGlmICh0aGlzLmVhdCh0eXBlcy5wYXJlbkwpKSB7XG4gICAgICBjbGF1c2UucGFyYW0gPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcbiAgICAgIHZhciBzaW1wbGUgPSBjbGF1c2UucGFyYW0udHlwZSA9PT0gXCJJZGVudGlmaWVyXCI7XG4gICAgICB0aGlzLmVudGVyU2NvcGUoc2ltcGxlID8gU0NPUEVfU0lNUExFX0NBVENIIDogMCk7XG4gICAgICB0aGlzLmNoZWNrTFZhbChjbGF1c2UucGFyYW0sIHNpbXBsZSA/IEJJTkRfU0lNUExFX0NBVENIIDogQklORF9MRVhJQ0FMKTtcbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzLnBhcmVuUik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCAxMCkgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgY2xhdXNlLnBhcmFtID0gbnVsbDtcbiAgICAgIHRoaXMuZW50ZXJTY29wZSgwKTtcbiAgICB9XG4gICAgY2xhdXNlLmJvZHkgPSB0aGlzLnBhcnNlQmxvY2soZmFsc2UpO1xuICAgIHRoaXMuZXhpdFNjb3BlKCk7XG4gICAgbm9kZS5oYW5kbGVyID0gdGhpcy5maW5pc2hOb2RlKGNsYXVzZSwgXCJDYXRjaENsYXVzZVwiKTtcbiAgfVxuICBub2RlLmZpbmFsaXplciA9IHRoaXMuZWF0KHR5cGVzLl9maW5hbGx5KSA/IHRoaXMucGFyc2VCbG9jaygpIDogbnVsbDtcbiAgaWYgKCFub2RlLmhhbmRsZXIgJiYgIW5vZGUuZmluYWxpemVyKVxuICAgIHsgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIk1pc3NpbmcgY2F0Y2ggb3IgZmluYWxseSBjbGF1c2VcIik7IH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRyeVN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZVZhclN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGtpbmQpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIHRoaXMucGFyc2VWYXIobm9kZSwgZmFsc2UsIGtpbmQpO1xuICB0aGlzLnNlbWljb2xvbigpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKVxufTtcblxucHAkMS5wYXJzZVdoaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgbm9kZS50ZXN0ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpO1xuICB0aGlzLmxhYmVscy5wdXNoKGxvb3BMYWJlbCk7XG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJ3aGlsZVwiKTtcbiAgdGhpcy5sYWJlbHMucG9wKCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJXaGlsZVN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZVdpdGhTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIGlmICh0aGlzLnN0cmljdCkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3dpdGgnIGluIHN0cmljdCBtb2RlXCIpOyB9XG4gIHRoaXMubmV4dCgpO1xuICBub2RlLm9iamVjdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcIndpdGhcIik7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJXaXRoU3RhdGVtZW50XCIpXG59O1xuXG5wcCQxLnBhcnNlRW1wdHlTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRW1wdHlTdGF0ZW1lbnRcIilcbn07XG5cbnBwJDEucGFyc2VMYWJlbGVkU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgbWF5YmVOYW1lLCBleHByLCBjb250ZXh0KSB7XG4gIGZvciAodmFyIGkkMSA9IDAsIGxpc3QgPSB0aGlzLmxhYmVsczsgaSQxIDwgbGlzdC5sZW5ndGg7IGkkMSArPSAxKVxuICAgIHtcbiAgICB2YXIgbGFiZWwgPSBsaXN0W2kkMV07XG5cbiAgICBpZiAobGFiZWwubmFtZSA9PT0gbWF5YmVOYW1lKVxuICAgICAgeyB0aGlzLnJhaXNlKGV4cHIuc3RhcnQsIFwiTGFiZWwgJ1wiICsgbWF5YmVOYW1lICsgXCInIGlzIGFscmVhZHkgZGVjbGFyZWRcIik7XG4gIH0gfVxuICB2YXIga2luZCA9IHRoaXMudHlwZS5pc0xvb3AgPyBcImxvb3BcIiA6IHRoaXMudHlwZSA9PT0gdHlwZXMuX3N3aXRjaCA/IFwic3dpdGNoXCIgOiBudWxsO1xuICBmb3IgKHZhciBpID0gdGhpcy5sYWJlbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgbGFiZWwkMSA9IHRoaXMubGFiZWxzW2ldO1xuICAgIGlmIChsYWJlbCQxLnN0YXRlbWVudFN0YXJ0ID09PSBub2RlLnN0YXJ0KSB7XG4gICAgICAvLyBVcGRhdGUgaW5mb3JtYXRpb24gYWJvdXQgcHJldmlvdXMgbGFiZWxzIG9uIHRoaXMgbm9kZVxuICAgICAgbGFiZWwkMS5zdGF0ZW1lbnRTdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgICBsYWJlbCQxLmtpbmQgPSBraW5kO1xuICAgIH0gZWxzZSB7IGJyZWFrIH1cbiAgfVxuICB0aGlzLmxhYmVscy5wdXNoKHtuYW1lOiBtYXliZU5hbWUsIGtpbmQ6IGtpbmQsIHN0YXRlbWVudFN0YXJ0OiB0aGlzLnN0YXJ0fSk7XG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoY29udGV4dCA/IGNvbnRleHQuaW5kZXhPZihcImxhYmVsXCIpID09PSAtMSA/IGNvbnRleHQgKyBcImxhYmVsXCIgOiBjb250ZXh0IDogXCJsYWJlbFwiKTtcbiAgdGhpcy5sYWJlbHMucG9wKCk7XG4gIG5vZGUubGFiZWwgPSBleHByO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTGFiZWxlZFN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBleHByKSB7XG4gIG5vZGUuZXhwcmVzc2lvbiA9IGV4cHI7XG4gIHRoaXMuc2VtaWNvbG9uKCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHByZXNzaW9uU3RhdGVtZW50XCIpXG59O1xuXG4vLyBQYXJzZSBhIHNlbWljb2xvbi1lbmNsb3NlZCBibG9jayBvZiBzdGF0ZW1lbnRzLCBoYW5kbGluZyBgXCJ1c2Vcbi8vIHN0cmljdFwiYCBkZWNsYXJhdGlvbnMgd2hlbiBgYWxsb3dTdHJpY3RgIGlzIHRydWUgKHVzZWQgZm9yXG4vLyBmdW5jdGlvbiBib2RpZXMpLlxuXG5wcCQxLnBhcnNlQmxvY2sgPSBmdW5jdGlvbihjcmVhdGVOZXdMZXhpY2FsU2NvcGUsIG5vZGUsIGV4aXRTdHJpY3QpIHtcbiAgaWYgKCBjcmVhdGVOZXdMZXhpY2FsU2NvcGUgPT09IHZvaWQgMCApIGNyZWF0ZU5ld0xleGljYWxTY29wZSA9IHRydWU7XG4gIGlmICggbm9kZSA9PT0gdm9pZCAwICkgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG5cbiAgbm9kZS5ib2R5ID0gW107XG4gIHRoaXMuZXhwZWN0KHR5cGVzLmJyYWNlTCk7XG4gIGlmIChjcmVhdGVOZXdMZXhpY2FsU2NvcGUpIHsgdGhpcy5lbnRlclNjb3BlKDApOyB9XG4gIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzLmJyYWNlUikge1xuICAgIHZhciBzdG10ID0gdGhpcy5wYXJzZVN0YXRlbWVudChudWxsKTtcbiAgICBub2RlLmJvZHkucHVzaChzdG10KTtcbiAgfVxuICBpZiAoZXhpdFN0cmljdCkgeyB0aGlzLnN0cmljdCA9IGZhbHNlOyB9XG4gIHRoaXMubmV4dCgpO1xuICBpZiAoY3JlYXRlTmV3TGV4aWNhbFNjb3BlKSB7IHRoaXMuZXhpdFNjb3BlKCk7IH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkJsb2NrU3RhdGVtZW50XCIpXG59O1xuXG4vLyBQYXJzZSBhIHJlZ3VsYXIgYGZvcmAgbG9vcC4gVGhlIGRpc2FtYmlndWF0aW9uIGNvZGUgaW5cbi8vIGBwYXJzZVN0YXRlbWVudGAgd2lsbCBhbHJlYWR5IGhhdmUgcGFyc2VkIHRoZSBpbml0IHN0YXRlbWVudCBvclxuLy8gZXhwcmVzc2lvbi5cblxucHAkMS5wYXJzZUZvciA9IGZ1bmN0aW9uKG5vZGUsIGluaXQpIHtcbiAgbm9kZS5pbml0ID0gaW5pdDtcbiAgdGhpcy5leHBlY3QodHlwZXMuc2VtaSk7XG4gIG5vZGUudGVzdCA9IHRoaXMudHlwZSA9PT0gdHlwZXMuc2VtaSA/IG51bGwgOiB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICB0aGlzLmV4cGVjdCh0eXBlcy5zZW1pKTtcbiAgbm9kZS51cGRhdGUgPSB0aGlzLnR5cGUgPT09IHR5cGVzLnBhcmVuUiA/IG51bGwgOiB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICB0aGlzLmV4cGVjdCh0eXBlcy5wYXJlblIpO1xuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KFwiZm9yXCIpO1xuICB0aGlzLmV4aXRTY29wZSgpO1xuICB0aGlzLmxhYmVscy5wb3AoKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkZvclN0YXRlbWVudFwiKVxufTtcblxuLy8gUGFyc2UgYSBgZm9yYC9gaW5gIGFuZCBgZm9yYC9gb2ZgIGxvb3AsIHdoaWNoIGFyZSBhbG1vc3Rcbi8vIHNhbWUgZnJvbSBwYXJzZXIncyBwZXJzcGVjdGl2ZS5cblxucHAkMS5wYXJzZUZvckluID0gZnVuY3Rpb24obm9kZSwgaW5pdCkge1xuICB2YXIgaXNGb3JJbiA9IHRoaXMudHlwZSA9PT0gdHlwZXMuX2luO1xuICB0aGlzLm5leHQoKTtcblxuICBpZiAoXG4gICAgaW5pdC50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiAmJlxuICAgIGluaXQuZGVjbGFyYXRpb25zWzBdLmluaXQgIT0gbnVsbCAmJlxuICAgIChcbiAgICAgICFpc0ZvckluIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA4IHx8XG4gICAgICB0aGlzLnN0cmljdCB8fFxuICAgICAgaW5pdC5raW5kICE9PSBcInZhclwiIHx8XG4gICAgICBpbml0LmRlY2xhcmF0aW9uc1swXS5pZC50eXBlICE9PSBcIklkZW50aWZpZXJcIlxuICAgIClcbiAgKSB7XG4gICAgdGhpcy5yYWlzZShcbiAgICAgIGluaXQuc3RhcnQsXG4gICAgICAoKGlzRm9ySW4gPyBcImZvci1pblwiIDogXCJmb3Itb2ZcIikgKyBcIiBsb29wIHZhcmlhYmxlIGRlY2xhcmF0aW9uIG1heSBub3QgaGF2ZSBhbiBpbml0aWFsaXplclwiKVxuICAgICk7XG4gIH0gZWxzZSBpZiAoaW5pdC50eXBlID09PSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIpIHtcbiAgICB0aGlzLnJhaXNlKGluaXQuc3RhcnQsIFwiSW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBpbiBmb3ItbG9vcFwiKTtcbiAgfVxuICBub2RlLmxlZnQgPSBpbml0O1xuICBub2RlLnJpZ2h0ID0gaXNGb3JJbiA/IHRoaXMucGFyc2VFeHByZXNzaW9uKCkgOiB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgdGhpcy5leHBlY3QodHlwZXMucGFyZW5SKTtcbiAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcImZvclwiKTtcbiAgdGhpcy5leGl0U2NvcGUoKTtcbiAgdGhpcy5sYWJlbHMucG9wKCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNGb3JJbiA/IFwiRm9ySW5TdGF0ZW1lbnRcIiA6IFwiRm9yT2ZTdGF0ZW1lbnRcIilcbn07XG5cbi8vIFBhcnNlIGEgbGlzdCBvZiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG5cbnBwJDEucGFyc2VWYXIgPSBmdW5jdGlvbihub2RlLCBpc0Zvciwga2luZCkge1xuICBub2RlLmRlY2xhcmF0aW9ucyA9IFtdO1xuICBub2RlLmtpbmQgPSBraW5kO1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRlY2wgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMucGFyc2VWYXJJZChkZWNsLCBraW5kKTtcbiAgICBpZiAodGhpcy5lYXQodHlwZXMuZXEpKSB7XG4gICAgICBkZWNsLmluaXQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oaXNGb3IpO1xuICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gXCJjb25zdFwiICYmICEodGhpcy50eXBlID09PSB0eXBlcy5faW4gfHwgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSkge1xuICAgICAgdGhpcy51bmV4cGVjdGVkKCk7XG4gICAgfSBlbHNlIGlmIChkZWNsLmlkLnR5cGUgIT09IFwiSWRlbnRpZmllclwiICYmICEoaXNGb3IgJiYgKHRoaXMudHlwZSA9PT0gdHlwZXMuX2luIHx8IHRoaXMuaXNDb250ZXh0dWFsKFwib2ZcIikpKSkge1xuICAgICAgdGhpcy5yYWlzZSh0aGlzLmxhc3RUb2tFbmQsIFwiQ29tcGxleCBiaW5kaW5nIHBhdHRlcm5zIHJlcXVpcmUgYW4gaW5pdGlhbGl6YXRpb24gdmFsdWVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlY2wuaW5pdCA9IG51bGw7XG4gICAgfVxuICAgIG5vZGUuZGVjbGFyYXRpb25zLnB1c2godGhpcy5maW5pc2hOb2RlKGRlY2wsIFwiVmFyaWFibGVEZWNsYXJhdG9yXCIpKTtcbiAgICBpZiAoIXRoaXMuZWF0KHR5cGVzLmNvbW1hKSkgeyBicmVhayB9XG4gIH1cbiAgcmV0dXJuIG5vZGVcbn07XG5cbnBwJDEucGFyc2VWYXJJZCA9IGZ1bmN0aW9uKGRlY2wsIGtpbmQpIHtcbiAgZGVjbC5pZCA9IHRoaXMucGFyc2VCaW5kaW5nQXRvbSgpO1xuICB0aGlzLmNoZWNrTFZhbChkZWNsLmlkLCBraW5kID09PSBcInZhclwiID8gQklORF9WQVIgOiBCSU5EX0xFWElDQUwsIGZhbHNlKTtcbn07XG5cbnZhciBGVU5DX1NUQVRFTUVOVCA9IDEsIEZVTkNfSEFOR0lOR19TVEFURU1FTlQgPSAyLCBGVU5DX05VTExBQkxFX0lEID0gNDtcblxuLy8gUGFyc2UgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBvciBsaXRlcmFsIChkZXBlbmRpbmcgb24gdGhlXG4vLyBgc3RhdGVtZW50ICYgRlVOQ19TVEFURU1FTlRgKS5cblxuLy8gUmVtb3ZlIGBhbGxvd0V4cHJlc3Npb25Cb2R5YCBmb3IgNy4wLjAsIGFzIGl0IGlzIG9ubHkgY2FsbGVkIHdpdGggZmFsc2VcbnBwJDEucGFyc2VGdW5jdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIHN0YXRlbWVudCwgYWxsb3dFeHByZXNzaW9uQm9keSwgaXNBc3luYykge1xuICB0aGlzLmluaXRGdW5jdGlvbihub2RlKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5IHx8IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmICFpc0FzeW5jKSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuc3RhciAmJiAoc3RhdGVtZW50ICYgRlVOQ19IQU5HSU5HX1NUQVRFTUVOVCkpXG4gICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgbm9kZS5nZW5lcmF0b3IgPSB0aGlzLmVhdCh0eXBlcy5zdGFyKTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpXG4gICAgeyBub2RlLmFzeW5jID0gISFpc0FzeW5jOyB9XG5cbiAgaWYgKHN0YXRlbWVudCAmIEZVTkNfU1RBVEVNRU5UKSB7XG4gICAgbm9kZS5pZCA9IChzdGF0ZW1lbnQgJiBGVU5DX05VTExBQkxFX0lEKSAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLm5hbWUgPyBudWxsIDogdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgaWYgKG5vZGUuaWQgJiYgIShzdGF0ZW1lbnQgJiBGVU5DX0hBTkdJTkdfU1RBVEVNRU5UKSlcbiAgICAgIC8vIElmIGl0IGlzIGEgcmVndWxhciBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbiBzbG9wcHkgbW9kZSwgdGhlbiBpdCBpc1xuICAgICAgLy8gc3ViamVjdCB0byBBbm5leCBCIHNlbWFudGljcyAoQklORF9GVU5DVElPTikuIE90aGVyd2lzZSwgdGhlIGJpbmRpbmdcbiAgICAgIC8vIG1vZGUgZGVwZW5kcyBvbiBwcm9wZXJ0aWVzIG9mIHRoZSBjdXJyZW50IHNjb3BlIChzZWVcbiAgICAgIC8vIHRyZWF0RnVuY3Rpb25zQXNWYXIpLlxuICAgICAgeyB0aGlzLmNoZWNrTFZhbChub2RlLmlkLCAodGhpcy5zdHJpY3QgfHwgbm9kZS5nZW5lcmF0b3IgfHwgbm9kZS5hc3luYykgPyB0aGlzLnRyZWF0RnVuY3Rpb25zQXNWYXIgPyBCSU5EX1ZBUiA6IEJJTkRfTEVYSUNBTCA6IEJJTkRfRlVOQ1RJT04pOyB9XG4gIH1cblxuICB2YXIgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIG9sZEF3YWl0SWRlbnRQb3MgPSB0aGlzLmF3YWl0SWRlbnRQb3M7XG4gIHRoaXMueWllbGRQb3MgPSAwO1xuICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgdGhpcy5hd2FpdElkZW50UG9zID0gMDtcbiAgdGhpcy5lbnRlclNjb3BlKGZ1bmN0aW9uRmxhZ3Mobm9kZS5hc3luYywgbm9kZS5nZW5lcmF0b3IpKTtcblxuICBpZiAoIShzdGF0ZW1lbnQgJiBGVU5DX1NUQVRFTUVOVCkpXG4gICAgeyBub2RlLmlkID0gdGhpcy50eXBlID09PSB0eXBlcy5uYW1lID8gdGhpcy5wYXJzZUlkZW50KCkgOiBudWxsOyB9XG5cbiAgdGhpcy5wYXJzZUZ1bmN0aW9uUGFyYW1zKG5vZGUpO1xuICB0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5KG5vZGUsIGFsbG93RXhwcmVzc2lvbkJvZHksIGZhbHNlKTtcblxuICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3M7XG4gIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcztcbiAgdGhpcy5hd2FpdElkZW50UG9zID0gb2xkQXdhaXRJZGVudFBvcztcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAoc3RhdGVtZW50ICYgRlVOQ19TVEFURU1FTlQpID8gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgOiBcIkZ1bmN0aW9uRXhwcmVzc2lvblwiKVxufTtcblxucHAkMS5wYXJzZUZ1bmN0aW9uUGFyYW1zID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLmV4cGVjdCh0eXBlcy5wYXJlbkwpO1xuICBub2RlLnBhcmFtcyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdCh0eXBlcy5wYXJlblIsIGZhbHNlLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCk7XG4gIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG59O1xuXG4vLyBQYXJzZSBhIGNsYXNzIGRlY2xhcmF0aW9uIG9yIGxpdGVyYWwgKGRlcGVuZGluZyBvbiB0aGVcbi8vIGBpc1N0YXRlbWVudGAgcGFyYW1ldGVyKS5cblxucHAkMS5wYXJzZUNsYXNzID0gZnVuY3Rpb24obm9kZSwgaXNTdGF0ZW1lbnQpIHtcbiAgdGhpcy5uZXh0KCk7XG5cbiAgLy8gZWNtYS0yNjIgMTQuNiBDbGFzcyBEZWZpbml0aW9uc1xuICAvLyBBIGNsYXNzIGRlZmluaXRpb24gaXMgYWx3YXlzIHN0cmljdCBtb2RlIGNvZGUuXG4gIHZhciBvbGRTdHJpY3QgPSB0aGlzLnN0cmljdDtcbiAgdGhpcy5zdHJpY3QgPSB0cnVlO1xuXG4gIHRoaXMucGFyc2VDbGFzc0lkKG5vZGUsIGlzU3RhdGVtZW50KTtcbiAgdGhpcy5wYXJzZUNsYXNzU3VwZXIobm9kZSk7XG4gIHZhciBjbGFzc0JvZHkgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB2YXIgaGFkQ29uc3RydWN0b3IgPSBmYWxzZTtcbiAgY2xhc3NCb2R5LmJvZHkgPSBbXTtcbiAgdGhpcy5leHBlY3QodHlwZXMuYnJhY2VMKTtcbiAgd2hpbGUgKHRoaXMudHlwZSAhPT0gdHlwZXMuYnJhY2VSKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlQ2xhc3NFbGVtZW50KG5vZGUuc3VwZXJDbGFzcyAhPT0gbnVsbCk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNsYXNzQm9keS5ib2R5LnB1c2goZWxlbWVudCk7XG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcIk1ldGhvZERlZmluaXRpb25cIiAmJiBlbGVtZW50LmtpbmQgPT09IFwiY29uc3RydWN0b3JcIikge1xuICAgICAgICBpZiAoaGFkQ29uc3RydWN0b3IpIHsgdGhpcy5yYWlzZShlbGVtZW50LnN0YXJ0LCBcIkR1cGxpY2F0ZSBjb25zdHJ1Y3RvciBpbiB0aGUgc2FtZSBjbGFzc1wiKTsgfVxuICAgICAgICBoYWRDb25zdHJ1Y3RvciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHRoaXMuc3RyaWN0ID0gb2xkU3RyaWN0O1xuICB0aGlzLm5leHQoKTtcbiAgbm9kZS5ib2R5ID0gdGhpcy5maW5pc2hOb2RlKGNsYXNzQm9keSwgXCJDbGFzc0JvZHlcIik7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNTdGF0ZW1lbnQgPyBcIkNsYXNzRGVjbGFyYXRpb25cIiA6IFwiQ2xhc3NFeHByZXNzaW9uXCIpXG59O1xuXG5wcCQxLnBhcnNlQ2xhc3NFbGVtZW50ID0gZnVuY3Rpb24oY29uc3RydWN0b3JBbGxvd3NTdXBlcikge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAodGhpcy5lYXQodHlwZXMuc2VtaSkpIHsgcmV0dXJuIG51bGwgfVxuXG4gIHZhciBtZXRob2QgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB2YXIgdHJ5Q29udGV4dHVhbCA9IGZ1bmN0aW9uIChrLCBub0xpbmVCcmVhaykge1xuICAgIGlmICggbm9MaW5lQnJlYWsgPT09IHZvaWQgMCApIG5vTGluZUJyZWFrID0gZmFsc2U7XG5cbiAgICB2YXIgc3RhcnQgPSB0aGlzJDEuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcyQxLnN0YXJ0TG9jO1xuICAgIGlmICghdGhpcyQxLmVhdENvbnRleHR1YWwoaykpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBpZiAodGhpcyQxLnR5cGUgIT09IHR5cGVzLnBhcmVuTCAmJiAoIW5vTGluZUJyZWFrIHx8ICF0aGlzJDEuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpKSB7IHJldHVybiB0cnVlIH1cbiAgICBpZiAobWV0aG9kLmtleSkgeyB0aGlzJDEudW5leHBlY3RlZCgpOyB9XG4gICAgbWV0aG9kLmNvbXB1dGVkID0gZmFsc2U7XG4gICAgbWV0aG9kLmtleSA9IHRoaXMkMS5zdGFydE5vZGVBdChzdGFydCwgc3RhcnRMb2MpO1xuICAgIG1ldGhvZC5rZXkubmFtZSA9IGs7XG4gICAgdGhpcyQxLmZpbmlzaE5vZGUobWV0aG9kLmtleSwgXCJJZGVudGlmaWVyXCIpO1xuICAgIHJldHVybiBmYWxzZVxuICB9O1xuXG4gIG1ldGhvZC5raW5kID0gXCJtZXRob2RcIjtcbiAgbWV0aG9kLnN0YXRpYyA9IHRyeUNvbnRleHR1YWwoXCJzdGF0aWNcIik7XG4gIHZhciBpc0dlbmVyYXRvciA9IHRoaXMuZWF0KHR5cGVzLnN0YXIpO1xuICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuICBpZiAoIWlzR2VuZXJhdG9yKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmIHRyeUNvbnRleHR1YWwoXCJhc3luY1wiLCB0cnVlKSkge1xuICAgICAgaXNBc3luYyA9IHRydWU7XG4gICAgICBpc0dlbmVyYXRvciA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHRoaXMuZWF0KHR5cGVzLnN0YXIpO1xuICAgIH0gZWxzZSBpZiAodHJ5Q29udGV4dHVhbChcImdldFwiKSkge1xuICAgICAgbWV0aG9kLmtpbmQgPSBcImdldFwiO1xuICAgIH0gZWxzZSBpZiAodHJ5Q29udGV4dHVhbChcInNldFwiKSkge1xuICAgICAgbWV0aG9kLmtpbmQgPSBcInNldFwiO1xuICAgIH1cbiAgfVxuICBpZiAoIW1ldGhvZC5rZXkpIHsgdGhpcy5wYXJzZVByb3BlcnR5TmFtZShtZXRob2QpOyB9XG4gIHZhciBrZXkgPSBtZXRob2Qua2V5O1xuICB2YXIgYWxsb3dzRGlyZWN0U3VwZXIgPSBmYWxzZTtcbiAgaWYgKCFtZXRob2QuY29tcHV0ZWQgJiYgIW1ldGhvZC5zdGF0aWMgJiYgKGtleS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBrZXkubmFtZSA9PT0gXCJjb25zdHJ1Y3RvclwiIHx8XG4gICAgICBrZXkudHlwZSA9PT0gXCJMaXRlcmFsXCIgJiYga2V5LnZhbHVlID09PSBcImNvbnN0cnVjdG9yXCIpKSB7XG4gICAgaWYgKG1ldGhvZC5raW5kICE9PSBcIm1ldGhvZFwiKSB7IHRoaXMucmFpc2Uoa2V5LnN0YXJ0LCBcIkNvbnN0cnVjdG9yIGNhbid0IGhhdmUgZ2V0L3NldCBtb2RpZmllclwiKTsgfVxuICAgIGlmIChpc0dlbmVyYXRvcikgeyB0aGlzLnJhaXNlKGtleS5zdGFydCwgXCJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhIGdlbmVyYXRvclwiKTsgfVxuICAgIGlmIChpc0FzeW5jKSB7IHRoaXMucmFpc2Uoa2V5LnN0YXJ0LCBcIkNvbnN0cnVjdG9yIGNhbid0IGJlIGFuIGFzeW5jIG1ldGhvZFwiKTsgfVxuICAgIG1ldGhvZC5raW5kID0gXCJjb25zdHJ1Y3RvclwiO1xuICAgIGFsbG93c0RpcmVjdFN1cGVyID0gY29uc3RydWN0b3JBbGxvd3NTdXBlcjtcbiAgfSBlbHNlIGlmIChtZXRob2Quc3RhdGljICYmIGtleS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBrZXkubmFtZSA9PT0gXCJwcm90b3R5cGVcIikge1xuICAgIHRoaXMucmFpc2Uoa2V5LnN0YXJ0LCBcIkNsYXNzZXMgbWF5IG5vdCBoYXZlIGEgc3RhdGljIHByb3BlcnR5IG5hbWVkIHByb3RvdHlwZVwiKTtcbiAgfVxuICB0aGlzLnBhcnNlQ2xhc3NNZXRob2QobWV0aG9kLCBpc0dlbmVyYXRvciwgaXNBc3luYywgYWxsb3dzRGlyZWN0U3VwZXIpO1xuICBpZiAobWV0aG9kLmtpbmQgPT09IFwiZ2V0XCIgJiYgbWV0aG9kLnZhbHVlLnBhcmFtcy5sZW5ndGggIT09IDApXG4gICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobWV0aG9kLnZhbHVlLnN0YXJ0LCBcImdldHRlciBzaG91bGQgaGF2ZSBubyBwYXJhbXNcIik7IH1cbiAgaWYgKG1ldGhvZC5raW5kID09PSBcInNldFwiICYmIG1ldGhvZC52YWx1ZS5wYXJhbXMubGVuZ3RoICE9PSAxKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG1ldGhvZC52YWx1ZS5zdGFydCwgXCJzZXR0ZXIgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1cIik7IH1cbiAgaWYgKG1ldGhvZC5raW5kID09PSBcInNldFwiICYmIG1ldGhvZC52YWx1ZS5wYXJhbXNbMF0udHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG1ldGhvZC52YWx1ZS5wYXJhbXNbMF0uc3RhcnQsIFwiU2V0dGVyIGNhbm5vdCB1c2UgcmVzdCBwYXJhbXNcIik7IH1cbiAgcmV0dXJuIG1ldGhvZFxufTtcblxucHAkMS5wYXJzZUNsYXNzTWV0aG9kID0gZnVuY3Rpb24obWV0aG9kLCBpc0dlbmVyYXRvciwgaXNBc3luYywgYWxsb3dzRGlyZWN0U3VwZXIpIHtcbiAgbWV0aG9kLnZhbHVlID0gdGhpcy5wYXJzZU1ldGhvZChpc0dlbmVyYXRvciwgaXNBc3luYywgYWxsb3dzRGlyZWN0U3VwZXIpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG1ldGhvZCwgXCJNZXRob2REZWZpbml0aW9uXCIpXG59O1xuXG5wcCQxLnBhcnNlQ2xhc3NJZCA9IGZ1bmN0aW9uKG5vZGUsIGlzU3RhdGVtZW50KSB7XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLm5hbWUpIHtcbiAgICBub2RlLmlkID0gdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgaWYgKGlzU3RhdGVtZW50KVxuICAgICAgeyB0aGlzLmNoZWNrTFZhbChub2RlLmlkLCBCSU5EX0xFWElDQUwsIGZhbHNlKTsgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc1N0YXRlbWVudCA9PT0gdHJ1ZSlcbiAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICBub2RlLmlkID0gbnVsbDtcbiAgfVxufTtcblxucHAkMS5wYXJzZUNsYXNzU3VwZXIgPSBmdW5jdGlvbihub2RlKSB7XG4gIG5vZGUuc3VwZXJDbGFzcyA9IHRoaXMuZWF0KHR5cGVzLl9leHRlbmRzKSA/IHRoaXMucGFyc2VFeHByU3Vic2NyaXB0cygpIDogbnVsbDtcbn07XG5cbi8vIFBhcnNlcyBtb2R1bGUgZXhwb3J0IGRlY2xhcmF0aW9uLlxuXG5wcCQxLnBhcnNlRXhwb3J0ID0gZnVuY3Rpb24obm9kZSwgZXhwb3J0cykge1xuICB0aGlzLm5leHQoKTtcbiAgLy8gZXhwb3J0ICogZnJvbSAnLi4uJ1xuICBpZiAodGhpcy5lYXQodHlwZXMuc3RhcikpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExKSB7XG4gICAgICBpZiAodGhpcy5lYXRDb250ZXh0dWFsKFwiYXNcIikpIHtcbiAgICAgICAgbm9kZS5leHBvcnRlZCA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcbiAgICAgICAgdGhpcy5jaGVja0V4cG9ydChleHBvcnRzLCBub2RlLmV4cG9ydGVkLm5hbWUsIHRoaXMubGFzdFRva1N0YXJ0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuZXhwb3J0ZWQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoXCJmcm9tXCIpO1xuICAgIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzLnN0cmluZykgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIG5vZGUuc291cmNlID0gdGhpcy5wYXJzZUV4cHJBdG9tKCk7XG4gICAgdGhpcy5zZW1pY29sb24oKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0QWxsRGVjbGFyYXRpb25cIilcbiAgfVxuICBpZiAodGhpcy5lYXQodHlwZXMuX2RlZmF1bHQpKSB7IC8vIGV4cG9ydCBkZWZhdWx0IC4uLlxuICAgIHRoaXMuY2hlY2tFeHBvcnQoZXhwb3J0cywgXCJkZWZhdWx0XCIsIHRoaXMubGFzdFRva1N0YXJ0KTtcbiAgICB2YXIgaXNBc3luYztcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5fZnVuY3Rpb24gfHwgKGlzQXN5bmMgPSB0aGlzLmlzQXN5bmNGdW5jdGlvbigpKSkge1xuICAgICAgdmFyIGZOb2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgaWYgKGlzQXN5bmMpIHsgdGhpcy5uZXh0KCk7IH1cbiAgICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlRnVuY3Rpb24oZk5vZGUsIEZVTkNfU1RBVEVNRU5UIHwgRlVOQ19OVUxMQUJMRV9JRCwgZmFsc2UsIGlzQXN5bmMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcy5fY2xhc3MpIHtcbiAgICAgIHZhciBjTm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUNsYXNzKGNOb2RlLCBcIm51bGxhYmxlSURcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHBvcnREZWZhdWx0RGVjbGFyYXRpb25cIilcbiAgfVxuICAvLyBleHBvcnQgdmFyfGNvbnN0fGxldHxmdW5jdGlvbnxjbGFzcyAuLi5cbiAgaWYgKHRoaXMuc2hvdWxkUGFyc2VFeHBvcnRTdGF0ZW1lbnQoKSkge1xuICAgIG5vZGUuZGVjbGFyYXRpb24gPSB0aGlzLnBhcnNlU3RhdGVtZW50KG51bGwpO1xuICAgIGlmIChub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKVxuICAgICAgeyB0aGlzLmNoZWNrVmFyaWFibGVFeHBvcnQoZXhwb3J0cywgbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpOyB9XG4gICAgZWxzZVxuICAgICAgeyB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZSwgbm9kZS5kZWNsYXJhdGlvbi5pZC5zdGFydCk7IH1cbiAgICBub2RlLnNwZWNpZmllcnMgPSBbXTtcbiAgICBub2RlLnNvdXJjZSA9IG51bGw7XG4gIH0gZWxzZSB7IC8vIGV4cG9ydCB7IHgsIHkgYXMgeiB9IFtmcm9tICcuLi4nXVxuICAgIG5vZGUuZGVjbGFyYXRpb24gPSBudWxsO1xuICAgIG5vZGUuc3BlY2lmaWVycyA9IHRoaXMucGFyc2VFeHBvcnRTcGVjaWZpZXJzKGV4cG9ydHMpO1xuICAgIGlmICh0aGlzLmVhdENvbnRleHR1YWwoXCJmcm9tXCIpKSB7XG4gICAgICBpZiAodGhpcy50eXBlICE9PSB0eXBlcy5zdHJpbmcpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIG5vZGUuc291cmNlID0gdGhpcy5wYXJzZUV4cHJBdG9tKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5zcGVjaWZpZXJzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAvLyBjaGVjayBmb3Iga2V5d29yZHMgdXNlZCBhcyBsb2NhbCBuYW1lc1xuICAgICAgICB2YXIgc3BlYyA9IGxpc3RbaV07XG5cbiAgICAgICAgdGhpcy5jaGVja1VucmVzZXJ2ZWQoc3BlYy5sb2NhbCk7XG4gICAgICAgIC8vIGNoZWNrIGlmIGV4cG9ydCBpcyBkZWZpbmVkXG4gICAgICAgIHRoaXMuY2hlY2tMb2NhbEV4cG9ydChzcGVjLmxvY2FsKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zb3VyY2UgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnNlbWljb2xvbigpO1xuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHBvcnROYW1lZERlY2xhcmF0aW9uXCIpXG59O1xuXG5wcCQxLmNoZWNrRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgcG9zKSB7XG4gIGlmICghZXhwb3J0cykgeyByZXR1cm4gfVxuICBpZiAoaGFzKGV4cG9ydHMsIG5hbWUpKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHBvcywgXCJEdXBsaWNhdGUgZXhwb3J0ICdcIiArIG5hbWUgKyBcIidcIik7IH1cbiAgZXhwb3J0c1tuYW1lXSA9IHRydWU7XG59O1xuXG5wcCQxLmNoZWNrUGF0dGVybkV4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIHBhdCkge1xuICB2YXIgdHlwZSA9IHBhdC50eXBlO1xuICBpZiAodHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpXG4gICAgeyB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIHBhdC5uYW1lLCBwYXQuc3RhcnQpOyB9XG4gIGVsc2UgaWYgKHR5cGUgPT09IFwiT2JqZWN0UGF0dGVyblwiKVxuICAgIHsgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBwYXQucHJvcGVydGllczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICAgIHZhciBwcm9wID0gbGlzdFtpXTtcblxuICAgICAgICB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwcm9wKTtcbiAgICAgIH0gfVxuICBlbHNlIGlmICh0eXBlID09PSBcIkFycmF5UGF0dGVyblwiKVxuICAgIHsgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gcGF0LmVsZW1lbnRzOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgdmFyIGVsdCA9IGxpc3QkMVtpJDFdO1xuXG4gICAgICAgIGlmIChlbHQpIHsgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgZWx0KTsgfVxuICAgIH0gfVxuICBlbHNlIGlmICh0eXBlID09PSBcIlByb3BlcnR5XCIpXG4gICAgeyB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQudmFsdWUpOyB9XG4gIGVsc2UgaWYgKHR5cGUgPT09IFwiQXNzaWdubWVudFBhdHRlcm5cIilcbiAgICB7IHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC5sZWZ0KTsgfVxuICBlbHNlIGlmICh0eXBlID09PSBcIlJlc3RFbGVtZW50XCIpXG4gICAgeyB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQuYXJndW1lbnQpOyB9XG4gIGVsc2UgaWYgKHR5cGUgPT09IFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgICB7IHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIHBhdC5leHByZXNzaW9uKTsgfVxufTtcblxucHAkMS5jaGVja1ZhcmlhYmxlRXhwb3J0ID0gZnVuY3Rpb24oZXhwb3J0cywgZGVjbHMpIHtcbiAgaWYgKCFleHBvcnRzKSB7IHJldHVybiB9XG4gIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gZGVjbHM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgIHtcbiAgICB2YXIgZGVjbCA9IGxpc3RbaV07XG5cbiAgICB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBkZWNsLmlkKTtcbiAgfVxufTtcblxucHAkMS5zaG91bGRQYXJzZUV4cG9ydFN0YXRlbWVudCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy50eXBlLmtleXdvcmQgPT09IFwidmFyXCIgfHxcbiAgICB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJjb25zdFwiIHx8XG4gICAgdGhpcy50eXBlLmtleXdvcmQgPT09IFwiY2xhc3NcIiB8fFxuICAgIHRoaXMudHlwZS5rZXl3b3JkID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICB0aGlzLmlzTGV0KCkgfHxcbiAgICB0aGlzLmlzQXN5bmNGdW5jdGlvbigpXG59O1xuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgZXhwb3J0cy5cblxucHAkMS5wYXJzZUV4cG9ydFNwZWNpZmllcnMgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gIHZhciBub2RlcyA9IFtdLCBmaXJzdCA9IHRydWU7XG4gIC8vIGV4cG9ydCB7IHgsIHkgYXMgeiB9IFtmcm9tICcuLi4nXVxuICB0aGlzLmV4cGVjdCh0eXBlcy5icmFjZUwpO1xuICB3aGlsZSAoIXRoaXMuZWF0KHR5cGVzLmJyYWNlUikpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcy5jb21tYSk7XG4gICAgICBpZiAodGhpcy5hZnRlclRyYWlsaW5nQ29tbWEodHlwZXMuYnJhY2VSKSkgeyBicmVhayB9XG4gICAgfSBlbHNlIHsgZmlyc3QgPSBmYWxzZTsgfVxuXG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIG5vZGUubG9jYWwgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSk7XG4gICAgbm9kZS5leHBvcnRlZCA9IHRoaXMuZWF0Q29udGV4dHVhbChcImFzXCIpID8gdGhpcy5wYXJzZUlkZW50KHRydWUpIDogbm9kZS5sb2NhbDtcbiAgICB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIG5vZGUuZXhwb3J0ZWQubmFtZSwgbm9kZS5leHBvcnRlZC5zdGFydCk7XG4gICAgbm9kZXMucHVzaCh0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJFeHBvcnRTcGVjaWZpZXJcIikpO1xuICB9XG4gIHJldHVybiBub2Rlc1xufTtcblxuLy8gUGFyc2VzIGltcG9ydCBkZWNsYXJhdGlvbi5cblxucHAkMS5wYXJzZUltcG9ydCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIC8vIGltcG9ydCAnLi4uJ1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5zdHJpbmcpIHtcbiAgICBub2RlLnNwZWNpZmllcnMgPSBlbXB0eTtcbiAgICBub2RlLnNvdXJjZSA9IHRoaXMucGFyc2VFeHByQXRvbSgpO1xuICB9IGVsc2Uge1xuICAgIG5vZGUuc3BlY2lmaWVycyA9IHRoaXMucGFyc2VJbXBvcnRTcGVjaWZpZXJzKCk7XG4gICAgdGhpcy5leHBlY3RDb250ZXh0dWFsKFwiZnJvbVwiKTtcbiAgICBub2RlLnNvdXJjZSA9IHRoaXMudHlwZSA9PT0gdHlwZXMuc3RyaW5nID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkgOiB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgfVxuICB0aGlzLnNlbWljb2xvbigpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSW1wb3J0RGVjbGFyYXRpb25cIilcbn07XG5cbi8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZSBpbXBvcnRzLlxuXG5wcCQxLnBhcnNlSW1wb3J0U3BlY2lmaWVycyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBbXSwgZmlyc3QgPSB0cnVlO1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5uYW1lKSB7XG4gICAgLy8gaW1wb3J0IGRlZmF1bHRPYmosIHsgeCwgeSBhcyB6IH0gZnJvbSAnLi4uJ1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBub2RlLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgdGhpcy5jaGVja0xWYWwobm9kZS5sb2NhbCwgQklORF9MRVhJQ0FMKTtcbiAgICBub2Rlcy5wdXNoKHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydERlZmF1bHRTcGVjaWZpZXJcIikpO1xuICAgIGlmICghdGhpcy5lYXQodHlwZXMuY29tbWEpKSB7IHJldHVybiBub2RlcyB9XG4gIH1cbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuc3Rhcikge1xuICAgIHZhciBub2RlJDEgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHRoaXMuZXhwZWN0Q29udGV4dHVhbChcImFzXCIpO1xuICAgIG5vZGUkMS5sb2NhbCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIHRoaXMuY2hlY2tMVmFsKG5vZGUkMS5sb2NhbCwgQklORF9MRVhJQ0FMKTtcbiAgICBub2Rlcy5wdXNoKHRoaXMuZmluaXNoTm9kZShub2RlJDEsIFwiSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyXCIpKTtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxuICB0aGlzLmV4cGVjdCh0eXBlcy5icmFjZUwpO1xuICB3aGlsZSAoIXRoaXMuZWF0KHR5cGVzLmJyYWNlUikpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcy5jb21tYSk7XG4gICAgICBpZiAodGhpcy5hZnRlclRyYWlsaW5nQ29tbWEodHlwZXMuYnJhY2VSKSkgeyBicmVhayB9XG4gICAgfSBlbHNlIHsgZmlyc3QgPSBmYWxzZTsgfVxuXG4gICAgdmFyIG5vZGUkMiA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgbm9kZSQyLmltcG9ydGVkID0gdGhpcy5wYXJzZUlkZW50KHRydWUpO1xuICAgIGlmICh0aGlzLmVhdENvbnRleHR1YWwoXCJhc1wiKSkge1xuICAgICAgbm9kZSQyLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKG5vZGUkMi5pbXBvcnRlZCk7XG4gICAgICBub2RlJDIubG9jYWwgPSBub2RlJDIuaW1wb3J0ZWQ7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tMVmFsKG5vZGUkMi5sb2NhbCwgQklORF9MRVhJQ0FMKTtcbiAgICBub2Rlcy5wdXNoKHRoaXMuZmluaXNoTm9kZShub2RlJDIsIFwiSW1wb3J0U3BlY2lmaWVyXCIpKTtcbiAgfVxuICByZXR1cm4gbm9kZXNcbn07XG5cbi8vIFNldCBgRXhwcmVzc2lvblN0YXRlbWVudCNkaXJlY3RpdmVgIHByb3BlcnR5IGZvciBkaXJlY3RpdmUgcHJvbG9ndWVzLlxucHAkMS5hZGFwdERpcmVjdGl2ZVByb2xvZ3VlID0gZnVuY3Rpb24oc3RhdGVtZW50cykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlbWVudHMubGVuZ3RoICYmIHRoaXMuaXNEaXJlY3RpdmVDYW5kaWRhdGUoc3RhdGVtZW50c1tpXSk7ICsraSkge1xuICAgIHN0YXRlbWVudHNbaV0uZGlyZWN0aXZlID0gc3RhdGVtZW50c1tpXS5leHByZXNzaW9uLnJhdy5zbGljZSgxLCAtMSk7XG4gIH1cbn07XG5wcCQxLmlzRGlyZWN0aXZlQ2FuZGlkYXRlID0gZnVuY3Rpb24oc3RhdGVtZW50KSB7XG4gIHJldHVybiAoXG4gICAgc3RhdGVtZW50LnR5cGUgPT09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiICYmXG4gICAgc3RhdGVtZW50LmV4cHJlc3Npb24udHlwZSA9PT0gXCJMaXRlcmFsXCIgJiZcbiAgICB0eXBlb2Ygc3RhdGVtZW50LmV4cHJlc3Npb24udmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAvLyBSZWplY3QgcGFyZW50aGVzaXplZCBzdHJpbmdzLlxuICAgICh0aGlzLmlucHV0W3N0YXRlbWVudC5zdGFydF0gPT09IFwiXFxcIlwiIHx8IHRoaXMuaW5wdXRbc3RhdGVtZW50LnN0YXJ0XSA9PT0gXCInXCIpXG4gIClcbn07XG5cbnZhciBwcCQyID0gUGFyc2VyLnByb3RvdHlwZTtcblxuLy8gQ29udmVydCBleGlzdGluZyBleHByZXNzaW9uIGF0b20gdG8gYXNzaWduYWJsZSBwYXR0ZXJuXG4vLyBpZiBwb3NzaWJsZS5cblxucHAkMi50b0Fzc2lnbmFibGUgPSBmdW5jdGlvbihub2RlLCBpc0JpbmRpbmcsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIG5vZGUpIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgIGNhc2UgXCJJZGVudGlmaWVyXCI6XG4gICAgICBpZiAodGhpcy5pbkFzeW5jICYmIG5vZGUubmFtZSA9PT0gXCJhd2FpdFwiKVxuICAgICAgICB7IHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJDYW5ub3QgdXNlICdhd2FpdCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIik7IH1cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiT2JqZWN0UGF0dGVyblwiOlxuICAgIGNhc2UgXCJBcnJheVBhdHRlcm5cIjpcbiAgICBjYXNlIFwiUmVzdEVsZW1lbnRcIjpcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiT2JqZWN0RXhwcmVzc2lvblwiOlxuICAgICAgbm9kZS50eXBlID0gXCJPYmplY3RQYXR0ZXJuXCI7XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTsgfVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLnByb3BlcnRpZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBwcm9wID0gbGlzdFtpXTtcblxuICAgICAgdGhpcy50b0Fzc2lnbmFibGUocHJvcCwgaXNCaW5kaW5nKTtcbiAgICAgICAgLy8gRWFybHkgZXJyb3I6XG4gICAgICAgIC8vICAgQXNzaWdubWVudFJlc3RQcm9wZXJ0eVtZaWVsZCwgQXdhaXRdIDpcbiAgICAgICAgLy8gICAgIGAuLi5gIERlc3RydWN0dXJpbmdBc3NpZ25tZW50VGFyZ2V0W1lpZWxkLCBBd2FpdF1cbiAgICAgICAgLy9cbiAgICAgICAgLy8gICBJdCBpcyBhIFN5bnRheCBFcnJvciBpZiB8RGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnRUYXJnZXR8IGlzIGFuIHxBcnJheUxpdGVyYWx8IG9yIGFuIHxPYmplY3RMaXRlcmFsfC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByb3AudHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiICYmXG4gICAgICAgICAgKHByb3AuYXJndW1lbnQudHlwZSA9PT0gXCJBcnJheVBhdHRlcm5cIiB8fCBwcm9wLmFyZ3VtZW50LnR5cGUgPT09IFwiT2JqZWN0UGF0dGVyblwiKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJhaXNlKHByb3AuYXJndW1lbnQuc3RhcnQsIFwiVW5leHBlY3RlZCB0b2tlblwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJQcm9wZXJ0eVwiOlxuICAgICAgLy8gQXNzaWdubWVudFByb3BlcnR5IGhhcyB0eXBlID09PSBcIlByb3BlcnR5XCJcbiAgICAgIGlmIChub2RlLmtpbmQgIT09IFwiaW5pdFwiKSB7IHRoaXMucmFpc2Uobm9kZS5rZXkuc3RhcnQsIFwiT2JqZWN0IHBhdHRlcm4gY2FuJ3QgY29udGFpbiBnZXR0ZXIgb3Igc2V0dGVyXCIpOyB9XG4gICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLnZhbHVlLCBpc0JpbmRpbmcpO1xuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJBcnJheUV4cHJlc3Npb25cIjpcbiAgICAgIG5vZGUudHlwZSA9IFwiQXJyYXlQYXR0ZXJuXCI7XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTsgfVxuICAgICAgdGhpcy50b0Fzc2lnbmFibGVMaXN0KG5vZGUuZWxlbWVudHMsIGlzQmluZGluZyk7XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIlNwcmVhZEVsZW1lbnRcIjpcbiAgICAgIG5vZGUudHlwZSA9IFwiUmVzdEVsZW1lbnRcIjtcbiAgICAgIHRoaXMudG9Bc3NpZ25hYmxlKG5vZGUuYXJndW1lbnQsIGlzQmluZGluZyk7XG4gICAgICBpZiAobm9kZS5hcmd1bWVudC50eXBlID09PSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIpXG4gICAgICAgIHsgdGhpcy5yYWlzZShub2RlLmFyZ3VtZW50LnN0YXJ0LCBcIlJlc3QgZWxlbWVudHMgY2Fubm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlXCIpOyB9XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCI6XG4gICAgICBpZiAobm9kZS5vcGVyYXRvciAhPT0gXCI9XCIpIHsgdGhpcy5yYWlzZShub2RlLmxlZnQuZW5kLCBcIk9ubHkgJz0nIG9wZXJhdG9yIGNhbiBiZSB1c2VkIGZvciBzcGVjaWZ5aW5nIGRlZmF1bHQgdmFsdWUuXCIpOyB9XG4gICAgICBub2RlLnR5cGUgPSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCI7XG4gICAgICBkZWxldGUgbm9kZS5vcGVyYXRvcjtcbiAgICAgIHRoaXMudG9Bc3NpZ25hYmxlKG5vZGUubGVmdCwgaXNCaW5kaW5nKTtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2ggdG8gQXNzaWdubWVudFBhdHRlcm5cblxuICAgIGNhc2UgXCJBc3NpZ25tZW50UGF0dGVyblwiOlxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiOlxuICAgICAgdGhpcy50b0Fzc2lnbmFibGUobm9kZS5leHByZXNzaW9uLCBpc0JpbmRpbmcsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJDaGFpbkV4cHJlc3Npb25cIjpcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIk9wdGlvbmFsIGNoYWluaW5nIGNhbm5vdCBhcHBlYXIgaW4gbGVmdC1oYW5kIHNpZGVcIik7XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjpcbiAgICAgIGlmICghaXNCaW5kaW5nKSB7IGJyZWFrIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsIFwiQXNzaWduaW5nIHRvIHJ2YWx1ZVwiKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTsgfVxuICByZXR1cm4gbm9kZVxufTtcblxuLy8gQ29udmVydCBsaXN0IG9mIGV4cHJlc3Npb24gYXRvbXMgdG8gYmluZGluZyBsaXN0LlxuXG5wcCQyLnRvQXNzaWduYWJsZUxpc3QgPSBmdW5jdGlvbihleHByTGlzdCwgaXNCaW5kaW5nKSB7XG4gIHZhciBlbmQgPSBleHByTGlzdC5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kOyBpKyspIHtcbiAgICB2YXIgZWx0ID0gZXhwckxpc3RbaV07XG4gICAgaWYgKGVsdCkgeyB0aGlzLnRvQXNzaWduYWJsZShlbHQsIGlzQmluZGluZyk7IH1cbiAgfVxuICBpZiAoZW5kKSB7XG4gICAgdmFyIGxhc3QgPSBleHByTGlzdFtlbmQgLSAxXTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID09PSA2ICYmIGlzQmluZGluZyAmJiBsYXN0ICYmIGxhc3QudHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiICYmIGxhc3QuYXJndW1lbnQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCIpXG4gICAgICB7IHRoaXMudW5leHBlY3RlZChsYXN0LmFyZ3VtZW50LnN0YXJ0KTsgfVxuICB9XG4gIHJldHVybiBleHByTGlzdFxufTtcblxuLy8gUGFyc2VzIHNwcmVhZCBlbGVtZW50LlxuXG5wcCQyLnBhcnNlU3ByZWFkID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gIHRoaXMubmV4dCgpO1xuICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlNwcmVhZEVsZW1lbnRcIilcbn07XG5cbnBwJDIucGFyc2VSZXN0QmluZGluZyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gIHRoaXMubmV4dCgpO1xuXG4gIC8vIFJlc3RFbGVtZW50IGluc2lkZSBvZiBhIGZ1bmN0aW9uIHBhcmFtZXRlciBtdXN0IGJlIGFuIGlkZW50aWZpZXJcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA9PT0gNiAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLm5hbWUpXG4gICAgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuXG4gIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcblxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiUmVzdEVsZW1lbnRcIilcbn07XG5cbi8vIFBhcnNlcyBsdmFsdWUgKGFzc2lnbmFibGUpIGF0b20uXG5cbnBwJDIucGFyc2VCaW5kaW5nQXRvbSA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgIGNhc2UgdHlwZXMuYnJhY2tldEw6XG4gICAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIG5vZGUuZWxlbWVudHMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3QodHlwZXMuYnJhY2tldFIsIHRydWUsIHRydWUpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFycmF5UGF0dGVyblwiKVxuXG4gICAgY2FzZSB0eXBlcy5icmFjZUw6XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZU9iaih0cnVlKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcy5wYXJzZUlkZW50KClcbn07XG5cbnBwJDIucGFyc2VCaW5kaW5nTGlzdCA9IGZ1bmN0aW9uKGNsb3NlLCBhbGxvd0VtcHR5LCBhbGxvd1RyYWlsaW5nQ29tbWEpIHtcbiAgdmFyIGVsdHMgPSBbXSwgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIXRoaXMuZWF0KGNsb3NlKSkge1xuICAgIGlmIChmaXJzdCkgeyBmaXJzdCA9IGZhbHNlOyB9XG4gICAgZWxzZSB7IHRoaXMuZXhwZWN0KHR5cGVzLmNvbW1hKTsgfVxuICAgIGlmIChhbGxvd0VtcHR5ICYmIHRoaXMudHlwZSA9PT0gdHlwZXMuY29tbWEpIHtcbiAgICAgIGVsdHMucHVzaChudWxsKTtcbiAgICB9IGVsc2UgaWYgKGFsbG93VHJhaWxpbmdDb21tYSAmJiB0aGlzLmFmdGVyVHJhaWxpbmdDb21tYShjbG9zZSkpIHtcbiAgICAgIGJyZWFrXG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmVsbGlwc2lzKSB7XG4gICAgICB2YXIgcmVzdCA9IHRoaXMucGFyc2VSZXN0QmluZGluZygpO1xuICAgICAgdGhpcy5wYXJzZUJpbmRpbmdMaXN0SXRlbShyZXN0KTtcbiAgICAgIGVsdHMucHVzaChyZXN0KTtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmNvbW1hKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJDb21tYSBpcyBub3QgcGVybWl0dGVkIGFmdGVyIHRoZSByZXN0IGVsZW1lbnRcIik7IH1cbiAgICAgIHRoaXMuZXhwZWN0KGNsb3NlKTtcbiAgICAgIGJyZWFrXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbGVtID0gdGhpcy5wYXJzZU1heWJlRGVmYXVsdCh0aGlzLnN0YXJ0LCB0aGlzLnN0YXJ0TG9jKTtcbiAgICAgIHRoaXMucGFyc2VCaW5kaW5nTGlzdEl0ZW0oZWxlbSk7XG4gICAgICBlbHRzLnB1c2goZWxlbSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBlbHRzXG59O1xuXG5wcCQyLnBhcnNlQmluZGluZ0xpc3RJdGVtID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgcmV0dXJuIHBhcmFtXG59O1xuXG4vLyBQYXJzZXMgYXNzaWdubWVudCBwYXR0ZXJuIGFyb3VuZCBnaXZlbiBhdG9tIGlmIHBvc3NpYmxlLlxuXG5wcCQyLnBhcnNlTWF5YmVEZWZhdWx0ID0gZnVuY3Rpb24oc3RhcnRQb3MsIHN0YXJ0TG9jLCBsZWZ0KSB7XG4gIGxlZnQgPSBsZWZ0IHx8IHRoaXMucGFyc2VCaW5kaW5nQXRvbSgpO1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNiB8fCAhdGhpcy5lYXQodHlwZXMuZXEpKSB7IHJldHVybiBsZWZ0IH1cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gIG5vZGUubGVmdCA9IGxlZnQ7XG4gIG5vZGUucmlnaHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIpXG59O1xuXG4vLyBWZXJpZnkgdGhhdCBhIG5vZGUgaXMgYW4gbHZhbCDigJQgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGFzc2lnbmVkXG4vLyB0by5cbi8vIGJpbmRpbmdUeXBlIGNhbiBiZSBlaXRoZXI6XG4vLyAndmFyJyBpbmRpY2F0aW5nIHRoYXQgdGhlIGx2YWwgY3JlYXRlcyBhICd2YXInIGJpbmRpbmdcbi8vICdsZXQnIGluZGljYXRpbmcgdGhhdCB0aGUgbHZhbCBjcmVhdGVzIGEgbGV4aWNhbCAoJ2xldCcgb3IgJ2NvbnN0JykgYmluZGluZ1xuLy8gJ25vbmUnIGluZGljYXRpbmcgdGhhdCB0aGUgYmluZGluZyBzaG91bGQgYmUgY2hlY2tlZCBmb3IgaWxsZWdhbCBpZGVudGlmaWVycywgYnV0IG5vdCBmb3IgZHVwbGljYXRlIHJlZmVyZW5jZXNcblxucHAkMi5jaGVja0xWYWwgPSBmdW5jdGlvbihleHByLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKSB7XG4gIGlmICggYmluZGluZ1R5cGUgPT09IHZvaWQgMCApIGJpbmRpbmdUeXBlID0gQklORF9OT05FO1xuXG4gIHN3aXRjaCAoZXhwci50eXBlKSB7XG4gIGNhc2UgXCJJZGVudGlmaWVyXCI6XG4gICAgaWYgKGJpbmRpbmdUeXBlID09PSBCSU5EX0xFWElDQUwgJiYgZXhwci5uYW1lID09PSBcImxldFwiKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJsZXQgaXMgZGlzYWxsb3dlZCBhcyBhIGxleGljYWxseSBib3VuZCBuYW1lXCIpOyB9XG4gICAgaWYgKHRoaXMuc3RyaWN0ICYmIHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdEJpbmQudGVzdChleHByLm5hbWUpKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgKGJpbmRpbmdUeXBlID8gXCJCaW5kaW5nIFwiIDogXCJBc3NpZ25pbmcgdG8gXCIpICsgZXhwci5uYW1lICsgXCIgaW4gc3RyaWN0IG1vZGVcIik7IH1cbiAgICBpZiAoY2hlY2tDbGFzaGVzKSB7XG4gICAgICBpZiAoaGFzKGNoZWNrQ2xhc2hlcywgZXhwci5uYW1lKSlcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJBcmd1bWVudCBuYW1lIGNsYXNoXCIpOyB9XG4gICAgICBjaGVja0NsYXNoZXNbZXhwci5uYW1lXSA9IHRydWU7XG4gICAgfVxuICAgIGlmIChiaW5kaW5nVHlwZSAhPT0gQklORF9OT05FICYmIGJpbmRpbmdUeXBlICE9PSBCSU5EX09VVFNJREUpIHsgdGhpcy5kZWNsYXJlTmFtZShleHByLm5hbWUsIGJpbmRpbmdUeXBlLCBleHByLnN0YXJ0KTsgfVxuICAgIGJyZWFrXG5cbiAgY2FzZSBcIkNoYWluRXhwcmVzc2lvblwiOlxuICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShleHByLnN0YXJ0LCBcIk9wdGlvbmFsIGNoYWluaW5nIGNhbm5vdCBhcHBlYXIgaW4gbGVmdC1oYW5kIHNpZGVcIik7XG4gICAgYnJlYWtcblxuICBjYXNlIFwiTWVtYmVyRXhwcmVzc2lvblwiOlxuICAgIGlmIChiaW5kaW5nVHlwZSkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJCaW5kaW5nIG1lbWJlciBleHByZXNzaW9uXCIpOyB9XG4gICAgYnJlYWtcblxuICBjYXNlIFwiT2JqZWN0UGF0dGVyblwiOlxuICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gZXhwci5wcm9wZXJ0aWVzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICAgIHtcbiAgICB2YXIgcHJvcCA9IGxpc3RbaV07XG5cbiAgICB0aGlzLmNoZWNrTFZhbChwcm9wLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgfVxuICAgIGJyZWFrXG5cbiAgY2FzZSBcIlByb3BlcnR5XCI6XG4gICAgLy8gQXNzaWdubWVudFByb3BlcnR5IGhhcyB0eXBlID09PSBcIlByb3BlcnR5XCJcbiAgICB0aGlzLmNoZWNrTFZhbChleHByLnZhbHVlLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICBicmVha1xuXG4gIGNhc2UgXCJBcnJheVBhdHRlcm5cIjpcbiAgICBmb3IgKHZhciBpJDEgPSAwLCBsaXN0JDEgPSBleHByLmVsZW1lbnRzOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgdmFyIGVsZW0gPSBsaXN0JDFbaSQxXTtcblxuICAgIGlmIChlbGVtKSB7IHRoaXMuY2hlY2tMVmFsKGVsZW0sIGJpbmRpbmdUeXBlLCBjaGVja0NsYXNoZXMpOyB9XG4gICAgfVxuICAgIGJyZWFrXG5cbiAgY2FzZSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCI6XG4gICAgdGhpcy5jaGVja0xWYWwoZXhwci5sZWZ0LCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICBicmVha1xuXG4gIGNhc2UgXCJSZXN0RWxlbWVudFwiOlxuICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIuYXJndW1lbnQsIGJpbmRpbmdUeXBlLCBjaGVja0NsYXNoZXMpO1xuICAgIGJyZWFrXG5cbiAgY2FzZSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCI6XG4gICAgdGhpcy5jaGVja0xWYWwoZXhwci5leHByZXNzaW9uLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICBicmVha1xuXG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5yYWlzZShleHByLnN0YXJ0LCAoYmluZGluZ1R5cGUgPyBcIkJpbmRpbmdcIiA6IFwiQXNzaWduaW5nIHRvXCIpICsgXCIgcnZhbHVlXCIpO1xuICB9XG59O1xuXG4vLyBBIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlciBvcGVyYXRlcyBieSBkZWZpbmluZyBmdW5jdGlvbnMgZm9yIGFsbFxuXG52YXIgcHAkMyA9IFBhcnNlci5wcm90b3R5cGU7XG5cbi8vIENoZWNrIGlmIHByb3BlcnR5IG5hbWUgY2xhc2hlcyB3aXRoIGFscmVhZHkgYWRkZWQuXG4vLyBPYmplY3QvY2xhc3MgZ2V0dGVycyBhbmQgc2V0dGVycyBhcmUgbm90IGFsbG93ZWQgdG8gY2xhc2gg4oCUXG4vLyBlaXRoZXIgd2l0aCBlYWNoIG90aGVyIG9yIHdpdGggYW4gaW5pdCBwcm9wZXJ0eSDigJQgYW5kIGluXG4vLyBzdHJpY3QgbW9kZSwgaW5pdCBwcm9wZXJ0aWVzIGFyZSBhbHNvIG5vdCBhbGxvd2VkIHRvIGJlIHJlcGVhdGVkLlxuXG5wcCQzLmNoZWNrUHJvcENsYXNoID0gZnVuY3Rpb24ocHJvcCwgcHJvcEhhc2gsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHByb3AudHlwZSA9PT0gXCJTcHJlYWRFbGVtZW50XCIpXG4gICAgeyByZXR1cm4gfVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgKHByb3AuY29tcHV0ZWQgfHwgcHJvcC5tZXRob2QgfHwgcHJvcC5zaG9ydGhhbmQpKVxuICAgIHsgcmV0dXJuIH1cbiAgdmFyIGtleSA9IHByb3Aua2V5O1xuICB2YXIgbmFtZTtcbiAgc3dpdGNoIChrZXkudHlwZSkge1xuICBjYXNlIFwiSWRlbnRpZmllclwiOiBuYW1lID0ga2V5Lm5hbWU7IGJyZWFrXG4gIGNhc2UgXCJMaXRlcmFsXCI6IG5hbWUgPSBTdHJpbmcoa2V5LnZhbHVlKTsgYnJlYWtcbiAgZGVmYXVsdDogcmV0dXJuXG4gIH1cbiAgdmFyIGtpbmQgPSBwcm9wLmtpbmQ7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgIGlmIChuYW1lID09PSBcIl9fcHJvdG9fX1wiICYmIGtpbmQgPT09IFwiaW5pdFwiKSB7XG4gICAgICBpZiAocHJvcEhhc2gucHJvdG8pIHtcbiAgICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5kb3VibGVQcm90byA8IDApXG4gICAgICAgICAgICB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuZG91YmxlUHJvdG8gPSBrZXkuc3RhcnQ7IH1cbiAgICAgICAgICAvLyBCYWNrd2FyZHMtY29tcGF0IGtsdWRnZS4gQ2FuIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiA2LjBcbiAgICAgICAgfSBlbHNlIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGtleS5zdGFydCwgXCJSZWRlZmluaXRpb24gb2YgX19wcm90b19fIHByb3BlcnR5XCIpOyB9XG4gICAgICB9XG4gICAgICBwcm9wSGFzaC5wcm90byA9IHRydWU7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIG5hbWUgPSBcIiRcIiArIG5hbWU7XG4gIHZhciBvdGhlciA9IHByb3BIYXNoW25hbWVdO1xuICBpZiAob3RoZXIpIHtcbiAgICB2YXIgcmVkZWZpbml0aW9uO1xuICAgIGlmIChraW5kID09PSBcImluaXRcIikge1xuICAgICAgcmVkZWZpbml0aW9uID0gdGhpcy5zdHJpY3QgJiYgb3RoZXIuaW5pdCB8fCBvdGhlci5nZXQgfHwgb3RoZXIuc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWRlZmluaXRpb24gPSBvdGhlci5pbml0IHx8IG90aGVyW2tpbmRdO1xuICAgIH1cbiAgICBpZiAocmVkZWZpbml0aW9uKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoa2V5LnN0YXJ0LCBcIlJlZGVmaW5pdGlvbiBvZiBwcm9wZXJ0eVwiKTsgfVxuICB9IGVsc2Uge1xuICAgIG90aGVyID0gcHJvcEhhc2hbbmFtZV0gPSB7XG4gICAgICBpbml0OiBmYWxzZSxcbiAgICAgIGdldDogZmFsc2UsXG4gICAgICBzZXQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuICBvdGhlcltraW5kXSA9IHRydWU7XG59O1xuXG4vLyAjIyMgRXhwcmVzc2lvbiBwYXJzaW5nXG5cbi8vIFRoZXNlIG5lc3QsIGZyb20gdGhlIG1vc3QgZ2VuZXJhbCBleHByZXNzaW9uIHR5cGUgYXQgdGhlIHRvcCB0b1xuLy8gJ2F0b21pYycsIG5vbmRpdmlzaWJsZSBleHByZXNzaW9uIHR5cGVzIGF0IHRoZSBib3R0b20uIE1vc3Qgb2Zcbi8vIHRoZSBmdW5jdGlvbnMgd2lsbCBzaW1wbHkgbGV0IHRoZSBmdW5jdGlvbihzKSBiZWxvdyB0aGVtIHBhcnNlLFxuLy8gYW5kLCAqaWYqIHRoZSBzeW50YWN0aWMgY29uc3RydWN0IHRoZXkgaGFuZGxlIGlzIHByZXNlbnQsIHdyYXBcbi8vIHRoZSBBU1Qgbm9kZSB0aGF0IHRoZSBpbm5lciBwYXJzZXIgZ2F2ZSB0aGVtIGluIGFub3RoZXIgbm9kZS5cblxuLy8gUGFyc2UgYSBmdWxsIGV4cHJlc3Npb24uIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgYXJlIHVzZWQgdG9cbi8vIGZvcmJpZCB0aGUgYGluYCBvcGVyYXRvciAoaW4gZm9yIGxvb3BzIGluaXRhbGl6YXRpb24gZXhwcmVzc2lvbnMpXG4vLyBhbmQgcHJvdmlkZSByZWZlcmVuY2UgZm9yIHN0b3JpbmcgJz0nIG9wZXJhdG9yIGluc2lkZSBzaG9ydGhhbmRcbi8vIHByb3BlcnR5IGFzc2lnbm1lbnQgaW4gY29udGV4dHMgd2hlcmUgYm90aCBvYmplY3QgZXhwcmVzc2lvblxuLy8gYW5kIG9iamVjdCBwYXR0ZXJuIG1pZ2h0IGFwcGVhciAoc28gaXQncyBwb3NzaWJsZSB0byByYWlzZVxuLy8gZGVsYXllZCBzeW50YXggZXJyb3IgYXQgY29ycmVjdCBwb3NpdGlvbikuXG5cbnBwJDMucGFyc2VFeHByZXNzaW9uID0gZnVuY3Rpb24obm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gIHZhciBleHByID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5jb21tYSkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIG5vZGUuZXhwcmVzc2lvbnMgPSBbZXhwcl07XG4gICAgd2hpbGUgKHRoaXMuZWF0KHR5cGVzLmNvbW1hKSkgeyBub2RlLmV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJzZU1heWJlQXNzaWduKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTZXF1ZW5jZUV4cHJlc3Npb25cIilcbiAgfVxuICByZXR1cm4gZXhwclxufTtcblxuLy8gUGFyc2UgYW4gYXNzaWdubWVudCBleHByZXNzaW9uLiBUaGlzIGluY2x1ZGVzIGFwcGxpY2F0aW9ucyBvZlxuLy8gb3BlcmF0b3JzIGxpa2UgYCs9YC5cblxucHAkMy5wYXJzZU1heWJlQXNzaWduID0gZnVuY3Rpb24obm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgYWZ0ZXJMZWZ0UGFyc2UpIHtcbiAgaWYgKHRoaXMuaXNDb250ZXh0dWFsKFwieWllbGRcIikpIHtcbiAgICBpZiAodGhpcy5pbkdlbmVyYXRvcikgeyByZXR1cm4gdGhpcy5wYXJzZVlpZWxkKG5vSW4pIH1cbiAgICAvLyBUaGUgdG9rZW5pemVyIHdpbGwgYXNzdW1lIGFuIGV4cHJlc3Npb24gaXMgYWxsb3dlZCBhZnRlclxuICAgIC8vIGB5aWVsZGAsIGJ1dCB0aGlzIGlzbid0IHRoYXQga2luZCBvZiB5aWVsZFxuICAgIGVsc2UgeyB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2U7IH1cbiAgfVxuXG4gIHZhciBvd25EZXN0cnVjdHVyaW5nRXJyb3JzID0gZmFsc2UsIG9sZFBhcmVuQXNzaWduID0gLTEsIG9sZFRyYWlsaW5nQ29tbWEgPSAtMTtcbiAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICBvbGRQYXJlbkFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbjtcbiAgICBvbGRUcmFpbGluZ0NvbW1hID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hO1xuICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9ycztcbiAgICBvd25EZXN0cnVjdHVyaW5nRXJyb3JzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMucGFyZW5MIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMubmFtZSlcbiAgICB7IHRoaXMucG90ZW50aWFsQXJyb3dBdCA9IHRoaXMuc3RhcnQ7IH1cbiAgdmFyIGxlZnQgPSB0aGlzLnBhcnNlTWF5YmVDb25kaXRpb25hbChub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgaWYgKGFmdGVyTGVmdFBhcnNlKSB7IGxlZnQgPSBhZnRlckxlZnRQYXJzZS5jYWxsKHRoaXMsIGxlZnQsIHN0YXJ0UG9zLCBzdGFydExvYyk7IH1cbiAgaWYgKHRoaXMudHlwZS5pc0Fzc2lnbikge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIG5vZGUub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICAgIG5vZGUubGVmdCA9IHRoaXMudHlwZSA9PT0gdHlwZXMuZXEgPyB0aGlzLnRvQXNzaWduYWJsZShsZWZ0LCBmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykgOiBsZWZ0O1xuICAgIGlmICghb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5kb3VibGVQcm90byA9IC0xO1xuICAgIH1cbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPj0gbm9kZS5sZWZ0LnN0YXJ0KVxuICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA9IC0xOyB9IC8vIHJlc2V0IGJlY2F1c2Ugc2hvcnRoYW5kIGRlZmF1bHQgd2FzIHVzZWQgY29ycmVjdGx5XG4gICAgdGhpcy5jaGVja0xWYWwobGVmdCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5yaWdodCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihub0luKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQXNzaWdubWVudEV4cHJlc3Npb25cIilcbiAgfSBlbHNlIHtcbiAgICBpZiAob3duRGVzdHJ1Y3R1cmluZ0Vycm9ycykgeyB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTsgfVxuICB9XG4gIGlmIChvbGRQYXJlbkFzc2lnbiA+IC0xKSB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IG9sZFBhcmVuQXNzaWduOyB9XG4gIGlmIChvbGRUcmFpbGluZ0NvbW1hID4gLTEpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gb2xkVHJhaWxpbmdDb21tYTsgfVxuICByZXR1cm4gbGVmdFxufTtcblxuLy8gUGFyc2UgYSB0ZXJuYXJ5IGNvbmRpdGlvbmFsIChgPzpgKSBvcGVyYXRvci5cblxucHAkMy5wYXJzZU1heWJlQ29uZGl0aW9uYWwgPSBmdW5jdGlvbihub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlRXhwck9wcyhub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgaWYgKHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKSB7IHJldHVybiBleHByIH1cbiAgaWYgKHRoaXMuZWF0KHR5cGVzLnF1ZXN0aW9uKSkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIG5vZGUudGVzdCA9IGV4cHI7XG4gICAgbm9kZS5jb25zZXF1ZW50ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG4gICAgdGhpcy5leHBlY3QodHlwZXMuY29sb24pO1xuICAgIG5vZGUuYWx0ZXJuYXRlID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKG5vSW4pO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIilcbiAgfVxuICByZXR1cm4gZXhwclxufTtcblxuLy8gU3RhcnQgdGhlIHByZWNlZGVuY2UgcGFyc2VyLlxuXG5wcCQzLnBhcnNlRXhwck9wcyA9IGZ1bmN0aW9uKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICB2YXIgZXhwciA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZhbHNlKTtcbiAgaWYgKHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKSB7IHJldHVybiBleHByIH1cbiAgcmV0dXJuIGV4cHIuc3RhcnQgPT09IHN0YXJ0UG9zICYmIGV4cHIudHlwZSA9PT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiID8gZXhwciA6IHRoaXMucGFyc2VFeHByT3AoZXhwciwgc3RhcnRQb3MsIHN0YXJ0TG9jLCAtMSwgbm9Jbilcbn07XG5cbi8vIFBhcnNlIGJpbmFyeSBvcGVyYXRvcnMgd2l0aCB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBwYXJzaW5nXG4vLyBhbGdvcml0aG0uIGBsZWZ0YCBpcyB0aGUgbGVmdC1oYW5kIHNpZGUgb2YgdGhlIG9wZXJhdG9yLlxuLy8gYG1pblByZWNgIHByb3ZpZGVzIGNvbnRleHQgdGhhdCBhbGxvd3MgdGhlIGZ1bmN0aW9uIHRvIHN0b3AgYW5kXG4vLyBkZWZlciBmdXJ0aGVyIHBhcnNlciB0byBvbmUgb2YgaXRzIGNhbGxlcnMgd2hlbiBpdCBlbmNvdW50ZXJzIGFuXG4vLyBvcGVyYXRvciB0aGF0IGhhcyBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiB0aGUgc2V0IGl0IGlzIHBhcnNpbmcuXG5cbnBwJDMucGFyc2VFeHByT3AgPSBmdW5jdGlvbihsZWZ0LCBsZWZ0U3RhcnRQb3MsIGxlZnRTdGFydExvYywgbWluUHJlYywgbm9Jbikge1xuICB2YXIgcHJlYyA9IHRoaXMudHlwZS5iaW5vcDtcbiAgaWYgKHByZWMgIT0gbnVsbCAmJiAoIW5vSW4gfHwgdGhpcy50eXBlICE9PSB0eXBlcy5faW4pKSB7XG4gICAgaWYgKHByZWMgPiBtaW5QcmVjKSB7XG4gICAgICB2YXIgbG9naWNhbCA9IHRoaXMudHlwZSA9PT0gdHlwZXMubG9naWNhbE9SIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMubG9naWNhbEFORDtcbiAgICAgIHZhciBjb2FsZXNjZSA9IHRoaXMudHlwZSA9PT0gdHlwZXMuY29hbGVzY2U7XG4gICAgICBpZiAoY29hbGVzY2UpIHtcbiAgICAgICAgLy8gSGFuZGxlIHRoZSBwcmVjZWRlbmNlIG9mIGB0dC5jb2FsZXNjZWAgYXMgZXF1YWwgdG8gdGhlIHJhbmdlIG9mIGxvZ2ljYWwgZXhwcmVzc2lvbnMuXG4gICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBgbm9kZS5yaWdodGAgc2hvdWxkbid0IGNvbnRhaW4gbG9naWNhbCBleHByZXNzaW9ucyBpbiBvcmRlciB0byBjaGVjayB0aGUgbWl4ZWQgZXJyb3IuXG4gICAgICAgIHByZWMgPSB0eXBlcy5sb2dpY2FsQU5ELmJpbm9wO1xuICAgICAgfVxuICAgICAgdmFyIG9wID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5wYXJzZUV4cHJPcCh0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCBmYWxzZSksIHN0YXJ0UG9zLCBzdGFydExvYywgcHJlYywgbm9Jbik7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMuYnVpbGRCaW5hcnkobGVmdFN0YXJ0UG9zLCBsZWZ0U3RhcnRMb2MsIGxlZnQsIHJpZ2h0LCBvcCwgbG9naWNhbCB8fCBjb2FsZXNjZSk7XG4gICAgICBpZiAoKGxvZ2ljYWwgJiYgdGhpcy50eXBlID09PSB0eXBlcy5jb2FsZXNjZSkgfHwgKGNvYWxlc2NlICYmICh0aGlzLnR5cGUgPT09IHR5cGVzLmxvZ2ljYWxPUiB8fCB0aGlzLnR5cGUgPT09IHR5cGVzLmxvZ2ljYWxBTkQpKSkge1xuICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJMb2dpY2FsIGV4cHJlc3Npb25zIGFuZCBjb2FsZXNjZSBleHByZXNzaW9ucyBjYW5ub3QgYmUgbWl4ZWQuIFdyYXAgZWl0aGVyIGJ5IHBhcmVudGhlc2VzXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VFeHByT3Aobm9kZSwgbGVmdFN0YXJ0UG9zLCBsZWZ0U3RhcnRMb2MsIG1pblByZWMsIG5vSW4pXG4gICAgfVxuICB9XG4gIHJldHVybiBsZWZ0XG59O1xuXG5wcCQzLmJ1aWxkQmluYXJ5ID0gZnVuY3Rpb24oc3RhcnRQb3MsIHN0YXJ0TG9jLCBsZWZ0LCByaWdodCwgb3AsIGxvZ2ljYWwpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gIG5vZGUubGVmdCA9IGxlZnQ7XG4gIG5vZGUub3BlcmF0b3IgPSBvcDtcbiAgbm9kZS5yaWdodCA9IHJpZ2h0O1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGxvZ2ljYWwgPyBcIkxvZ2ljYWxFeHByZXNzaW9uXCIgOiBcIkJpbmFyeUV4cHJlc3Npb25cIilcbn07XG5cbi8vIFBhcnNlIHVuYXJ5IG9wZXJhdG9ycywgYm90aCBwcmVmaXggYW5kIHBvc3RmaXguXG5cbnBwJDMucGFyc2VNYXliZVVuYXJ5ID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgc2F3VW5hcnkpIHtcbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jLCBleHByO1xuICBpZiAodGhpcy5pc0NvbnRleHR1YWwoXCJhd2FpdFwiKSAmJiAodGhpcy5pbkFzeW5jIHx8ICghdGhpcy5pbkZ1bmN0aW9uICYmIHRoaXMub3B0aW9ucy5hbGxvd0F3YWl0T3V0c2lkZUZ1bmN0aW9uKSkpIHtcbiAgICBleHByID0gdGhpcy5wYXJzZUF3YWl0KCk7XG4gICAgc2F3VW5hcnkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMudHlwZS5wcmVmaXgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCksIHVwZGF0ZSA9IHRoaXMudHlwZSA9PT0gdHlwZXMuaW5jRGVjO1xuICAgIG5vZGUub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICAgIG5vZGUucHJlZml4ID0gdHJ1ZTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZU1heWJlVW5hcnkobnVsbCwgdHJ1ZSk7XG4gICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7XG4gICAgaWYgKHVwZGF0ZSkgeyB0aGlzLmNoZWNrTFZhbChub2RlLmFyZ3VtZW50KTsgfVxuICAgIGVsc2UgaWYgKHRoaXMuc3RyaWN0ICYmIG5vZGUub3BlcmF0b3IgPT09IFwiZGVsZXRlXCIgJiZcbiAgICAgICAgICAgICBub2RlLmFyZ3VtZW50LnR5cGUgPT09IFwiSWRlbnRpZmllclwiKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJEZWxldGluZyBsb2NhbCB2YXJpYWJsZSBpbiBzdHJpY3QgbW9kZVwiKTsgfVxuICAgIGVsc2UgeyBzYXdVbmFyeSA9IHRydWU7IH1cbiAgICBleHByID0gdGhpcy5maW5pc2hOb2RlKG5vZGUsIHVwZGF0ZSA/IFwiVXBkYXRlRXhwcmVzc2lvblwiIDogXCJVbmFyeUV4cHJlc3Npb25cIik7XG4gIH0gZWxzZSB7XG4gICAgZXhwciA9IHRoaXMucGFyc2VFeHByU3Vic2NyaXB0cyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICBpZiAodGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykpIHsgcmV0dXJuIGV4cHIgfVxuICAgIHdoaWxlICh0aGlzLnR5cGUucG9zdGZpeCAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSkge1xuICAgICAgdmFyIG5vZGUkMSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgIG5vZGUkMS5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgICBub2RlJDEucHJlZml4ID0gZmFsc2U7XG4gICAgICBub2RlJDEuYXJndW1lbnQgPSBleHByO1xuICAgICAgdGhpcy5jaGVja0xWYWwoZXhwcik7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIGV4cHIgPSB0aGlzLmZpbmlzaE5vZGUobm9kZSQxLCBcIlVwZGF0ZUV4cHJlc3Npb25cIik7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzYXdVbmFyeSAmJiB0aGlzLmVhdCh0eXBlcy5zdGFyc3RhcikpXG4gICAgeyByZXR1cm4gdGhpcy5idWlsZEJpbmFyeShzdGFydFBvcywgc3RhcnRMb2MsIGV4cHIsIHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIGZhbHNlKSwgXCIqKlwiLCBmYWxzZSkgfVxuICBlbHNlXG4gICAgeyByZXR1cm4gZXhwciB9XG59O1xuXG4vLyBQYXJzZSBjYWxsLCBkb3QsIGFuZCBgW11gLXN1YnNjcmlwdCBleHByZXNzaW9ucy5cblxucHAkMy5wYXJzZUV4cHJTdWJzY3JpcHRzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJBdG9tKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICBpZiAoZXhwci50eXBlID09PSBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIgJiYgdGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tTdGFydCwgdGhpcy5sYXN0VG9rRW5kKSAhPT0gXCIpXCIpXG4gICAgeyByZXR1cm4gZXhwciB9XG4gIHZhciByZXN1bHQgPSB0aGlzLnBhcnNlU3Vic2NyaXB0cyhleHByLCBzdGFydFBvcywgc3RhcnRMb2MpO1xuICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyAmJiByZXN1bHQudHlwZSA9PT0gXCJNZW1iZXJFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID49IHJlc3VsdC5zdGFydCkgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSAtMTsgfVxuICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kID49IHJlc3VsdC5zdGFydCkgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kID0gLTE7IH1cbiAgfVxuICByZXR1cm4gcmVzdWx0XG59O1xuXG5wcCQzLnBhcnNlU3Vic2NyaXB0cyA9IGZ1bmN0aW9uKGJhc2UsIHN0YXJ0UG9zLCBzdGFydExvYywgbm9DYWxscykge1xuICB2YXIgbWF5YmVBc3luY0Fycm93ID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgYmFzZS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBiYXNlLm5hbWUgPT09IFwiYXN5bmNcIiAmJlxuICAgICAgdGhpcy5sYXN0VG9rRW5kID09PSBiYXNlLmVuZCAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiBiYXNlLmVuZCAtIGJhc2Uuc3RhcnQgPT09IDUgJiZcbiAgICAgIHRoaXMucG90ZW50aWFsQXJyb3dBdCA9PT0gYmFzZS5zdGFydDtcbiAgdmFyIG9wdGlvbmFsQ2hhaW5lZCA9IGZhbHNlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIGVsZW1lbnQgPSB0aGlzLnBhcnNlU3Vic2NyaXB0KGJhc2UsIHN0YXJ0UG9zLCBzdGFydExvYywgbm9DYWxscywgbWF5YmVBc3luY0Fycm93LCBvcHRpb25hbENoYWluZWQpO1xuXG4gICAgaWYgKGVsZW1lbnQub3B0aW9uYWwpIHsgb3B0aW9uYWxDaGFpbmVkID0gdHJ1ZTsgfVxuICAgIGlmIChlbGVtZW50ID09PSBiYXNlIHx8IGVsZW1lbnQudHlwZSA9PT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAob3B0aW9uYWxDaGFpbmVkKSB7XG4gICAgICAgIHZhciBjaGFpbk5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICAgIGNoYWluTm9kZS5leHByZXNzaW9uID0gZWxlbWVudDtcbiAgICAgICAgZWxlbWVudCA9IHRoaXMuZmluaXNoTm9kZShjaGFpbk5vZGUsIFwiQ2hhaW5FeHByZXNzaW9uXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRcbiAgICB9XG5cbiAgICBiYXNlID0gZWxlbWVudDtcbiAgfVxufTtcblxucHAkMy5wYXJzZVN1YnNjcmlwdCA9IGZ1bmN0aW9uKGJhc2UsIHN0YXJ0UG9zLCBzdGFydExvYywgbm9DYWxscywgbWF5YmVBc3luY0Fycm93LCBvcHRpb25hbENoYWluZWQpIHtcbiAgdmFyIG9wdGlvbmFsU3VwcG9ydGVkID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExO1xuICB2YXIgb3B0aW9uYWwgPSBvcHRpb25hbFN1cHBvcnRlZCAmJiB0aGlzLmVhdCh0eXBlcy5xdWVzdGlvbkRvdCk7XG4gIGlmIChub0NhbGxzICYmIG9wdGlvbmFsKSB7IHRoaXMucmFpc2UodGhpcy5sYXN0VG9rU3RhcnQsIFwiT3B0aW9uYWwgY2hhaW5pbmcgY2Fubm90IGFwcGVhciBpbiB0aGUgY2FsbGVlIG9mIG5ldyBleHByZXNzaW9uc1wiKTsgfVxuXG4gIHZhciBjb21wdXRlZCA9IHRoaXMuZWF0KHR5cGVzLmJyYWNrZXRMKTtcbiAgaWYgKGNvbXB1dGVkIHx8IChvcHRpb25hbCAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLnBhcmVuTCAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLmJhY2tRdW90ZSkgfHwgdGhpcy5lYXQodHlwZXMuZG90KSkge1xuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIG5vZGUub2JqZWN0ID0gYmFzZTtcbiAgICBub2RlLnByb3BlcnR5ID0gY29tcHV0ZWQgPyB0aGlzLnBhcnNlRXhwcmVzc2lvbigpIDogdGhpcy5wYXJzZUlkZW50KHRoaXMub3B0aW9ucy5hbGxvd1Jlc2VydmVkICE9PSBcIm5ldmVyXCIpO1xuICAgIG5vZGUuY29tcHV0ZWQgPSAhIWNvbXB1dGVkO1xuICAgIGlmIChjb21wdXRlZCkgeyB0aGlzLmV4cGVjdCh0eXBlcy5icmFja2V0Uik7IH1cbiAgICBpZiAob3B0aW9uYWxTdXBwb3J0ZWQpIHtcbiAgICAgIG5vZGUub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICB9XG4gICAgYmFzZSA9IHRoaXMuZmluaXNoTm9kZShub2RlLCBcIk1lbWJlckV4cHJlc3Npb25cIik7XG4gIH0gZWxzZSBpZiAoIW5vQ2FsbHMgJiYgdGhpcy5lYXQodHlwZXMucGFyZW5MKSkge1xuICAgIHZhciByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnMsIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBvbGRBd2FpdElkZW50UG9zID0gdGhpcy5hd2FpdElkZW50UG9zO1xuICAgIHRoaXMueWllbGRQb3MgPSAwO1xuICAgIHRoaXMuYXdhaXRQb3MgPSAwO1xuICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IDA7XG4gICAgdmFyIGV4cHJMaXN0ID0gdGhpcy5wYXJzZUV4cHJMaXN0KHR5cGVzLnBhcmVuUiwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgsIGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICBpZiAobWF5YmVBc3luY0Fycm93ICYmICFvcHRpb25hbCAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiB0aGlzLmVhdCh0eXBlcy5hcnJvdykpIHtcbiAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZhbHNlKTtcbiAgICAgIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG4gICAgICBpZiAodGhpcy5hd2FpdElkZW50UG9zID4gMClcbiAgICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuYXdhaXRJZGVudFBvcywgXCJDYW5ub3QgdXNlICdhd2FpdCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIik7IH1cbiAgICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcztcbiAgICAgIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcztcbiAgICAgIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3M7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIGV4cHJMaXN0LCB0cnVlKVxuICAgIH1cbiAgICB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTtcbiAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3MgfHwgdGhpcy55aWVsZFBvcztcbiAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3MgfHwgdGhpcy5hd2FpdFBvcztcbiAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSBvbGRBd2FpdElkZW50UG9zIHx8IHRoaXMuYXdhaXRJZGVudFBvcztcbiAgICB2YXIgbm9kZSQxID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIG5vZGUkMS5jYWxsZWUgPSBiYXNlO1xuICAgIG5vZGUkMS5hcmd1bWVudHMgPSBleHByTGlzdDtcbiAgICBpZiAob3B0aW9uYWxTdXBwb3J0ZWQpIHtcbiAgICAgIG5vZGUkMS5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICAgIH1cbiAgICBiYXNlID0gdGhpcy5maW5pc2hOb2RlKG5vZGUkMSwgXCJDYWxsRXhwcmVzc2lvblwiKTtcbiAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmJhY2tRdW90ZSkge1xuICAgIGlmIChvcHRpb25hbCB8fCBvcHRpb25hbENoYWluZWQpIHtcbiAgICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJPcHRpb25hbCBjaGFpbmluZyBjYW5ub3QgYXBwZWFyIGluIHRoZSB0YWcgb2YgdGFnZ2VkIHRlbXBsYXRlIGV4cHJlc3Npb25zXCIpO1xuICAgIH1cbiAgICB2YXIgbm9kZSQyID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIG5vZGUkMi50YWcgPSBiYXNlO1xuICAgIG5vZGUkMi5xdWFzaSA9IHRoaXMucGFyc2VUZW1wbGF0ZSh7aXNUYWdnZWQ6IHRydWV9KTtcbiAgICBiYXNlID0gdGhpcy5maW5pc2hOb2RlKG5vZGUkMiwgXCJUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb25cIik7XG4gIH1cbiAgcmV0dXJuIGJhc2Vcbn07XG5cbi8vIFBhcnNlIGFuIGF0b21pYyBleHByZXNzaW9uIOKAlCBlaXRoZXIgYSBzaW5nbGUgdG9rZW4gdGhhdCBpcyBhblxuLy8gZXhwcmVzc2lvbiwgYW4gZXhwcmVzc2lvbiBzdGFydGVkIGJ5IGEga2V5d29yZCBsaWtlIGBmdW5jdGlvbmAgb3Jcbi8vIGBuZXdgLCBvciBhbiBleHByZXNzaW9uIHdyYXBwZWQgaW4gcHVuY3R1YXRpb24gbGlrZSBgKClgLCBgW11gLFxuLy8gb3IgYHt9YC5cblxucHAkMy5wYXJzZUV4cHJBdG9tID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAvLyBJZiBhIGRpdmlzaW9uIG9wZXJhdG9yIGFwcGVhcnMgaW4gYW4gZXhwcmVzc2lvbiBwb3NpdGlvbiwgdGhlXG4gIC8vIHRva2VuaXplciBnb3QgY29uZnVzZWQsIGFuZCB3ZSBmb3JjZSBpdCB0byByZWFkIGEgcmVnZXhwIGluc3RlYWQuXG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLnNsYXNoKSB7IHRoaXMucmVhZFJlZ2V4cCgpOyB9XG5cbiAgdmFyIG5vZGUsIGNhbkJlQXJyb3cgPSB0aGlzLnBvdGVudGlhbEFycm93QXQgPT09IHRoaXMuc3RhcnQ7XG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gIGNhc2UgdHlwZXMuX3N1cGVyOlxuICAgIGlmICghdGhpcy5hbGxvd1N1cGVyKVxuICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3N1cGVyJyBrZXl3b3JkIG91dHNpZGUgYSBtZXRob2RcIik7IH1cbiAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5wYXJlbkwgJiYgIXRoaXMuYWxsb3dEaXJlY3RTdXBlcilcbiAgICAgIHsgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcInN1cGVyKCkgY2FsbCBvdXRzaWRlIGNvbnN0cnVjdG9yIG9mIGEgc3ViY2xhc3NcIik7IH1cbiAgICAvLyBUaGUgYHN1cGVyYCBrZXl3b3JkIGNhbiBhcHBlYXIgYXQgYmVsb3c6XG4gICAgLy8gU3VwZXJQcm9wZXJ0eTpcbiAgICAvLyAgICAgc3VwZXIgWyBFeHByZXNzaW9uIF1cbiAgICAvLyAgICAgc3VwZXIgLiBJZGVudGlmaWVyTmFtZVxuICAgIC8vIFN1cGVyQ2FsbDpcbiAgICAvLyAgICAgc3VwZXIgKCBBcmd1bWVudHMgKVxuICAgIGlmICh0aGlzLnR5cGUgIT09IHR5cGVzLmRvdCAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLmJyYWNrZXRMICYmIHRoaXMudHlwZSAhPT0gdHlwZXMucGFyZW5MKVxuICAgICAgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTdXBlclwiKVxuXG4gIGNhc2UgdHlwZXMuX3RoaXM6XG4gICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRoaXNFeHByZXNzaW9uXCIpXG5cbiAgY2FzZSB0eXBlcy5uYW1lOlxuICAgIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYywgY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zRXNjO1xuICAgIHZhciBpZCA9IHRoaXMucGFyc2VJZGVudChmYWxzZSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmICFjb250YWluc0VzYyAmJiBpZC5uYW1lID09PSBcImFzeW5jXCIgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgdGhpcy5lYXQodHlwZXMuX2Z1bmN0aW9uKSlcbiAgICAgIHsgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIDAsIGZhbHNlLCB0cnVlKSB9XG4gICAgaWYgKGNhbkJlQXJyb3cgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgIGlmICh0aGlzLmVhdCh0eXBlcy5hcnJvdykpXG4gICAgICAgIHsgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBbaWRdLCBmYWxzZSkgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmIGlkLm5hbWUgPT09IFwiYXN5bmNcIiAmJiB0aGlzLnR5cGUgPT09IHR5cGVzLm5hbWUgJiYgIWNvbnRhaW5zRXNjKSB7XG4gICAgICAgIGlkID0gdGhpcy5wYXJzZUlkZW50KGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgfHwgIXRoaXMuZWF0KHR5cGVzLmFycm93KSlcbiAgICAgICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSwgW2lkXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkXG5cbiAgY2FzZSB0eXBlcy5yZWdleHA6XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBub2RlID0gdGhpcy5wYXJzZUxpdGVyYWwodmFsdWUudmFsdWUpO1xuICAgIG5vZGUucmVnZXggPSB7cGF0dGVybjogdmFsdWUucGF0dGVybiwgZmxhZ3M6IHZhbHVlLmZsYWdzfTtcbiAgICByZXR1cm4gbm9kZVxuXG4gIGNhc2UgdHlwZXMubnVtOiBjYXNlIHR5cGVzLnN0cmluZzpcbiAgICByZXR1cm4gdGhpcy5wYXJzZUxpdGVyYWwodGhpcy52YWx1ZSlcblxuICBjYXNlIHR5cGVzLl9udWxsOiBjYXNlIHR5cGVzLl90cnVlOiBjYXNlIHR5cGVzLl9mYWxzZTpcbiAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBub2RlLnZhbHVlID0gdGhpcy50eXBlID09PSB0eXBlcy5fbnVsbCA/IG51bGwgOiB0aGlzLnR5cGUgPT09IHR5cGVzLl90cnVlO1xuICAgIG5vZGUucmF3ID0gdGhpcy50eXBlLmtleXdvcmQ7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkxpdGVyYWxcIilcblxuICBjYXNlIHR5cGVzLnBhcmVuTDpcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LCBleHByID0gdGhpcy5wYXJzZVBhcmVuQW5kRGlzdGluZ3Vpc2hFeHByZXNzaW9uKGNhbkJlQXJyb3cpO1xuICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduIDwgMCAmJiAhdGhpcy5pc1NpbXBsZUFzc2lnblRhcmdldChleHByKSlcbiAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSBzdGFydDsgfVxuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPCAwKVxuICAgICAgICB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQgPSBzdGFydDsgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwclxuXG4gIGNhc2UgdHlwZXMuYnJhY2tldEw6XG4gICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5lbGVtZW50cyA9IHRoaXMucGFyc2VFeHByTGlzdCh0eXBlcy5icmFja2V0UiwgdHJ1ZSwgdHJ1ZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFycmF5RXhwcmVzc2lvblwiKVxuXG4gIGNhc2UgdHlwZXMuYnJhY2VMOlxuICAgIHJldHVybiB0aGlzLnBhcnNlT2JqKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKVxuXG4gIGNhc2UgdHlwZXMuX2Z1bmN0aW9uOlxuICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24obm9kZSwgMClcblxuICBjYXNlIHR5cGVzLl9jbGFzczpcbiAgICByZXR1cm4gdGhpcy5wYXJzZUNsYXNzKHRoaXMuc3RhcnROb2RlKCksIGZhbHNlKVxuXG4gIGNhc2UgdHlwZXMuX25ldzpcbiAgICByZXR1cm4gdGhpcy5wYXJzZU5ldygpXG5cbiAgY2FzZSB0eXBlcy5iYWNrUXVvdGU6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VUZW1wbGF0ZSgpXG5cbiAgY2FzZSB0eXBlcy5faW1wb3J0OlxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTEpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwckltcG9ydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnVuZXhwZWN0ZWQoKVxuICAgIH1cblxuICBkZWZhdWx0OlxuICAgIHRoaXMudW5leHBlY3RlZCgpO1xuICB9XG59O1xuXG5wcCQzLnBhcnNlRXhwckltcG9ydCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG5cbiAgLy8gQ29uc3VtZSBgaW1wb3J0YCBhcyBhbiBpZGVudGlmaWVyIGZvciBgaW1wb3J0Lm1ldGFgLlxuICAvLyBCZWNhdXNlIGB0aGlzLnBhcnNlSWRlbnQodHJ1ZSlgIGRvZXNuJ3QgY2hlY2sgZXNjYXBlIHNlcXVlbmNlcywgaXQgbmVlZHMgdGhlIGNoZWNrIG9mIGB0aGlzLmNvbnRhaW5zRXNjYC5cbiAgaWYgKHRoaXMuY29udGFpbnNFc2MpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiRXNjYXBlIHNlcXVlbmNlIGluIGtleXdvcmQgaW1wb3J0XCIpOyB9XG4gIHZhciBtZXRhID0gdGhpcy5wYXJzZUlkZW50KHRydWUpO1xuXG4gIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gIGNhc2UgdHlwZXMucGFyZW5MOlxuICAgIHJldHVybiB0aGlzLnBhcnNlRHluYW1pY0ltcG9ydChub2RlKVxuICBjYXNlIHR5cGVzLmRvdDpcbiAgICBub2RlLm1ldGEgPSBtZXRhO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSW1wb3J0TWV0YShub2RlKVxuICBkZWZhdWx0OlxuICAgIHRoaXMudW5leHBlY3RlZCgpO1xuICB9XG59O1xuXG5wcCQzLnBhcnNlRHluYW1pY0ltcG9ydCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KCk7IC8vIHNraXAgYChgXG5cbiAgLy8gUGFyc2Ugbm9kZS5zb3VyY2UuXG4gIG5vZGUuc291cmNlID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG5cbiAgLy8gVmVyaWZ5IGVuZGluZy5cbiAgaWYgKCF0aGlzLmVhdCh0eXBlcy5wYXJlblIpKSB7XG4gICAgdmFyIGVycm9yUG9zID0gdGhpcy5zdGFydDtcbiAgICBpZiAodGhpcy5lYXQodHlwZXMuY29tbWEpICYmIHRoaXMuZWF0KHR5cGVzLnBhcmVuUikpIHtcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShlcnJvclBvcywgXCJUcmFpbGluZyBjb21tYSBpcyBub3QgYWxsb3dlZCBpbiBpbXBvcnQoKVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bmV4cGVjdGVkKGVycm9yUG9zKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSW1wb3J0RXhwcmVzc2lvblwiKVxufTtcblxucHAkMy5wYXJzZUltcG9ydE1ldGEgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpOyAvLyBza2lwIGAuYFxuXG4gIHZhciBjb250YWluc0VzYyA9IHRoaXMuY29udGFpbnNFc2M7XG4gIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSk7XG5cbiAgaWYgKG5vZGUucHJvcGVydHkubmFtZSAhPT0gXCJtZXRhXCIpXG4gICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5wcm9wZXJ0eS5zdGFydCwgXCJUaGUgb25seSB2YWxpZCBtZXRhIHByb3BlcnR5IGZvciBpbXBvcnQgaXMgJ2ltcG9ydC5tZXRhJ1wiKTsgfVxuICBpZiAoY29udGFpbnNFc2MpXG4gICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCInaW1wb3J0Lm1ldGEnIG11c3Qgbm90IGNvbnRhaW4gZXNjYXBlZCBjaGFyYWN0ZXJzXCIpOyB9XG4gIGlmICh0aGlzLm9wdGlvbnMuc291cmNlVHlwZSAhPT0gXCJtb2R1bGVcIilcbiAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIkNhbm5vdCB1c2UgJ2ltcG9ydC5tZXRhJyBvdXRzaWRlIGEgbW9kdWxlXCIpOyB9XG5cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIk1ldGFQcm9wZXJ0eVwiKVxufTtcblxucHAkMy5wYXJzZUxpdGVyYWwgPSBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gIG5vZGUudmFsdWUgPSB2YWx1ZTtcbiAgbm9kZS5yYXcgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcbiAgaWYgKG5vZGUucmF3LmNoYXJDb2RlQXQobm9kZS5yYXcubGVuZ3RoIC0gMSkgPT09IDExMCkgeyBub2RlLmJpZ2ludCA9IG5vZGUucmF3LnNsaWNlKDAsIC0xKS5yZXBsYWNlKC9fL2csIFwiXCIpOyB9XG4gIHRoaXMubmV4dCgpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTGl0ZXJhbFwiKVxufTtcblxucHAkMy5wYXJzZVBhcmVuRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmV4cGVjdCh0eXBlcy5wYXJlbkwpO1xuICB2YXIgdmFsID0gdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgdGhpcy5leHBlY3QodHlwZXMucGFyZW5SKTtcbiAgcmV0dXJuIHZhbFxufTtcblxucHAkMy5wYXJzZVBhcmVuQW5kRGlzdGluZ3Vpc2hFeHByZXNzaW9uID0gZnVuY3Rpb24oY2FuQmVBcnJvdykge1xuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIHZhbCwgYWxsb3dUcmFpbGluZ0NvbW1hID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDg7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgIHRoaXMubmV4dCgpO1xuXG4gICAgdmFyIGlubmVyU3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBpbm5lclN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICB2YXIgZXhwckxpc3QgPSBbXSwgZmlyc3QgPSB0cnVlLCBsYXN0SXNDb21tYSA9IGZhbHNlO1xuICAgIHZhciByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnMsIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBzcHJlYWRTdGFydDtcbiAgICB0aGlzLnlpZWxkUG9zID0gMDtcbiAgICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgICAvLyBEbyBub3Qgc2F2ZSBhd2FpdElkZW50UG9zIHRvIGFsbG93IGNoZWNraW5nIGF3YWl0cyBuZXN0ZWQgaW4gcGFyYW1ldGVyc1xuICAgIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzLnBhcmVuUikge1xuICAgICAgZmlyc3QgPyBmaXJzdCA9IGZhbHNlIDogdGhpcy5leHBlY3QodHlwZXMuY29tbWEpO1xuICAgICAgaWYgKGFsbG93VHJhaWxpbmdDb21tYSAmJiB0aGlzLmFmdGVyVHJhaWxpbmdDb21tYSh0eXBlcy5wYXJlblIsIHRydWUpKSB7XG4gICAgICAgIGxhc3RJc0NvbW1hID0gdHJ1ZTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcy5lbGxpcHNpcykge1xuICAgICAgICBzcHJlYWRTdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgICAgIGV4cHJMaXN0LnB1c2godGhpcy5wYXJzZVBhcmVuSXRlbSh0aGlzLnBhcnNlUmVzdEJpbmRpbmcoKSkpO1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5jb21tYSkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCIpOyB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleHByTGlzdC5wdXNoKHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdGhpcy5wYXJzZVBhcmVuSXRlbSkpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW5uZXJFbmRQb3MgPSB0aGlzLnN0YXJ0LCBpbm5lckVuZExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgdGhpcy5leHBlY3QodHlwZXMucGFyZW5SKTtcblxuICAgIGlmIChjYW5CZUFycm93ICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpICYmIHRoaXMuZWF0KHR5cGVzLmFycm93KSkge1xuICAgICAgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgZmFsc2UpO1xuICAgICAgdGhpcy5jaGVja1lpZWxkQXdhaXRJbkRlZmF1bHRQYXJhbXMoKTtcbiAgICAgIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcztcbiAgICAgIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcztcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlUGFyZW5BcnJvd0xpc3Qoc3RhcnRQb3MsIHN0YXJ0TG9jLCBleHByTGlzdClcbiAgICB9XG5cbiAgICBpZiAoIWV4cHJMaXN0Lmxlbmd0aCB8fCBsYXN0SXNDb21tYSkgeyB0aGlzLnVuZXhwZWN0ZWQodGhpcy5sYXN0VG9rU3RhcnQpOyB9XG4gICAgaWYgKHNwcmVhZFN0YXJ0KSB7IHRoaXMudW5leHBlY3RlZChzcHJlYWRTdGFydCk7IH1cbiAgICB0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCB0cnVlKTtcbiAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3MgfHwgdGhpcy55aWVsZFBvcztcbiAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3MgfHwgdGhpcy5hd2FpdFBvcztcblxuICAgIGlmIChleHByTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICB2YWwgPSB0aGlzLnN0YXJ0Tm9kZUF0KGlubmVyU3RhcnRQb3MsIGlubmVyU3RhcnRMb2MpO1xuICAgICAgdmFsLmV4cHJlc3Npb25zID0gZXhwckxpc3Q7XG4gICAgICB0aGlzLmZpbmlzaE5vZGVBdCh2YWwsIFwiU2VxdWVuY2VFeHByZXNzaW9uXCIsIGlubmVyRW5kUG9zLCBpbm5lckVuZExvYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbCA9IGV4cHJMaXN0WzBdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWwgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIH1cblxuICBpZiAodGhpcy5vcHRpb25zLnByZXNlcnZlUGFyZW5zKSB7XG4gICAgdmFyIHBhciA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBwYXIuZXhwcmVzc2lvbiA9IHZhbDtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKHBhciwgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWxcbiAgfVxufTtcblxucHAkMy5wYXJzZVBhcmVuSXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgcmV0dXJuIGl0ZW1cbn07XG5cbnBwJDMucGFyc2VQYXJlbkFycm93TGlzdCA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgZXhwckxpc3QpIHtcbiAgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBleHByTGlzdClcbn07XG5cbi8vIE5ldydzIHByZWNlZGVuY2UgaXMgc2xpZ2h0bHkgdHJpY2t5LiBJdCBtdXN0IGFsbG93IGl0cyBhcmd1bWVudCB0b1xuLy8gYmUgYSBgW11gIG9yIGRvdCBzdWJzY3JpcHQgZXhwcmVzc2lvbiwgYnV0IG5vdCBhIGNhbGwg4oCUIGF0IGxlYXN0LFxuLy8gbm90IHdpdGhvdXQgd3JhcHBpbmcgaXQgaW4gcGFyZW50aGVzZXMuIFRodXMsIGl0IHVzZXMgdGhlIG5vQ2FsbHNcbi8vIGFyZ3VtZW50IHRvIHBhcnNlU3Vic2NyaXB0cyB0byBwcmV2ZW50IGl0IGZyb20gY29uc3VtaW5nIHRoZVxuLy8gYXJndW1lbnQgbGlzdC5cblxudmFyIGVtcHR5JDEgPSBbXTtcblxucHAkMy5wYXJzZU5ldyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5jb250YWluc0VzYykgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgXCJFc2NhcGUgc2VxdWVuY2UgaW4ga2V5d29yZCBuZXdcIik7IH1cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB2YXIgbWV0YSA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHRoaXMuZWF0KHR5cGVzLmRvdCkpIHtcbiAgICBub2RlLm1ldGEgPSBtZXRhO1xuICAgIHZhciBjb250YWluc0VzYyA9IHRoaXMuY29udGFpbnNFc2M7XG4gICAgbm9kZS5wcm9wZXJ0eSA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcbiAgICBpZiAobm9kZS5wcm9wZXJ0eS5uYW1lICE9PSBcInRhcmdldFwiKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5wcm9wZXJ0eS5zdGFydCwgXCJUaGUgb25seSB2YWxpZCBtZXRhIHByb3BlcnR5IGZvciBuZXcgaXMgJ25ldy50YXJnZXQnXCIpOyB9XG4gICAgaWYgKGNvbnRhaW5zRXNjKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCInbmV3LnRhcmdldCcgbXVzdCBub3QgY29udGFpbiBlc2NhcGVkIGNoYXJhY3RlcnNcIik7IH1cbiAgICBpZiAoIXRoaXMuaW5Ob25BcnJvd0Z1bmN0aW9uKCkpXG4gICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShub2RlLnN0YXJ0LCBcIiduZXcudGFyZ2V0JyBjYW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9uc1wiKTsgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJNZXRhUHJvcGVydHlcIilcbiAgfVxuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIGlzSW1wb3J0ID0gdGhpcy50eXBlID09PSB0eXBlcy5faW1wb3J0O1xuICBub2RlLmNhbGxlZSA9IHRoaXMucGFyc2VTdWJzY3JpcHRzKHRoaXMucGFyc2VFeHByQXRvbSgpLCBzdGFydFBvcywgc3RhcnRMb2MsIHRydWUpO1xuICBpZiAoaXNJbXBvcnQgJiYgbm9kZS5jYWxsZWUudHlwZSA9PT0gXCJJbXBvcnRFeHByZXNzaW9uXCIpIHtcbiAgICB0aGlzLnJhaXNlKHN0YXJ0UG9zLCBcIkNhbm5vdCB1c2UgbmV3IHdpdGggaW1wb3J0KClcIik7XG4gIH1cbiAgaWYgKHRoaXMuZWF0KHR5cGVzLnBhcmVuTCkpIHsgbm9kZS5hcmd1bWVudHMgPSB0aGlzLnBhcnNlRXhwckxpc3QodHlwZXMucGFyZW5SLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCwgZmFsc2UpOyB9XG4gIGVsc2UgeyBub2RlLmFyZ3VtZW50cyA9IGVtcHR5JDE7IH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIk5ld0V4cHJlc3Npb25cIilcbn07XG5cbi8vIFBhcnNlIHRlbXBsYXRlIGV4cHJlc3Npb24uXG5cbnBwJDMucGFyc2VUZW1wbGF0ZUVsZW1lbnQgPSBmdW5jdGlvbihyZWYpIHtcbiAgdmFyIGlzVGFnZ2VkID0gcmVmLmlzVGFnZ2VkO1xuXG4gIHZhciBlbGVtID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuaW52YWxpZFRlbXBsYXRlKSB7XG4gICAgaWYgKCFpc1RhZ2dlZCkge1xuICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiQmFkIGVzY2FwZSBzZXF1ZW5jZSBpbiB1bnRhZ2dlZCB0ZW1wbGF0ZSBsaXRlcmFsXCIpO1xuICAgIH1cbiAgICBlbGVtLnZhbHVlID0ge1xuICAgICAgcmF3OiB0aGlzLnZhbHVlLFxuICAgICAgY29va2VkOiBudWxsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtLnZhbHVlID0ge1xuICAgICAgcmF3OiB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKS5yZXBsYWNlKC9cXHJcXG4/L2csIFwiXFxuXCIpLFxuICAgICAgY29va2VkOiB0aGlzLnZhbHVlXG4gICAgfTtcbiAgfVxuICB0aGlzLm5leHQoKTtcbiAgZWxlbS50YWlsID0gdGhpcy50eXBlID09PSB0eXBlcy5iYWNrUXVvdGU7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUoZWxlbSwgXCJUZW1wbGF0ZUVsZW1lbnRcIilcbn07XG5cbnBwJDMucGFyc2VUZW1wbGF0ZSA9IGZ1bmN0aW9uKHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpc1RhZ2dlZCA9IHJlZi5pc1RhZ2dlZDsgaWYgKCBpc1RhZ2dlZCA9PT0gdm9pZCAwICkgaXNUYWdnZWQgPSBmYWxzZTtcblxuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gIHRoaXMubmV4dCgpO1xuICBub2RlLmV4cHJlc3Npb25zID0gW107XG4gIHZhciBjdXJFbHQgPSB0aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KHtpc1RhZ2dlZDogaXNUYWdnZWR9KTtcbiAgbm9kZS5xdWFzaXMgPSBbY3VyRWx0XTtcbiAgd2hpbGUgKCFjdXJFbHQudGFpbCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmVvZikgeyB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIlVudGVybWluYXRlZCB0ZW1wbGF0ZSBsaXRlcmFsXCIpOyB9XG4gICAgdGhpcy5leHBlY3QodHlwZXMuZG9sbGFyQnJhY2VMKTtcbiAgICBub2RlLmV4cHJlc3Npb25zLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7XG4gICAgdGhpcy5leHBlY3QodHlwZXMuYnJhY2VSKTtcbiAgICBub2RlLnF1YXNpcy5wdXNoKGN1ckVsdCA9IHRoaXMucGFyc2VUZW1wbGF0ZUVsZW1lbnQoe2lzVGFnZ2VkOiBpc1RhZ2dlZH0pKTtcbiAgfVxuICB0aGlzLm5leHQoKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlRlbXBsYXRlTGl0ZXJhbFwiKVxufTtcblxucHAkMy5pc0FzeW5jUHJvcCA9IGZ1bmN0aW9uKHByb3ApIHtcbiAgcmV0dXJuICFwcm9wLmNvbXB1dGVkICYmIHByb3Aua2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmIHByb3Aua2V5Lm5hbWUgPT09IFwiYXN5bmNcIiAmJlxuICAgICh0aGlzLnR5cGUgPT09IHR5cGVzLm5hbWUgfHwgdGhpcy50eXBlID09PSB0eXBlcy5udW0gfHwgdGhpcy50eXBlID09PSB0eXBlcy5zdHJpbmcgfHwgdGhpcy50eXBlID09PSB0eXBlcy5icmFja2V0TCB8fCB0aGlzLnR5cGUua2V5d29yZCB8fCAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgdGhpcy50eXBlID09PSB0eXBlcy5zdGFyKSkgJiZcbiAgICAhbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKVxufTtcblxuLy8gUGFyc2UgYW4gb2JqZWN0IGxpdGVyYWwgb3IgYmluZGluZyBwYXR0ZXJuLlxuXG5wcCQzLnBhcnNlT2JqID0gZnVuY3Rpb24oaXNQYXR0ZXJuLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgZmlyc3QgPSB0cnVlLCBwcm9wSGFzaCA9IHt9O1xuICBub2RlLnByb3BlcnRpZXMgPSBbXTtcbiAgdGhpcy5uZXh0KCk7XG4gIHdoaWxlICghdGhpcy5lYXQodHlwZXMuYnJhY2VSKSkge1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzLmNvbW1hKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNSAmJiB0aGlzLmFmdGVyVHJhaWxpbmdDb21tYSh0eXBlcy5icmFjZVIpKSB7IGJyZWFrIH1cbiAgICB9IGVsc2UgeyBmaXJzdCA9IGZhbHNlOyB9XG5cbiAgICB2YXIgcHJvcCA9IHRoaXMucGFyc2VQcm9wZXJ0eShpc1BhdHRlcm4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIGlmICghaXNQYXR0ZXJuKSB7IHRoaXMuY2hlY2tQcm9wQ2xhc2gocHJvcCwgcHJvcEhhc2gsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpOyB9XG4gICAgbm9kZS5wcm9wZXJ0aWVzLnB1c2gocHJvcCk7XG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBpc1BhdHRlcm4gPyBcIk9iamVjdFBhdHRlcm5cIiA6IFwiT2JqZWN0RXhwcmVzc2lvblwiKVxufTtcblxucHAkMy5wYXJzZVByb3BlcnR5ID0gZnVuY3Rpb24oaXNQYXR0ZXJuLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBwcm9wID0gdGhpcy5zdGFydE5vZGUoKSwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIHN0YXJ0UG9zLCBzdGFydExvYztcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHRoaXMuZWF0KHR5cGVzLmVsbGlwc2lzKSkge1xuICAgIGlmIChpc1BhdHRlcm4pIHtcbiAgICAgIHByb3AuYXJndW1lbnQgPSB0aGlzLnBhcnNlSWRlbnQoZmFsc2UpO1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuY29tbWEpIHtcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIkNvbW1hIGlzIG5vdCBwZXJtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3QgZWxlbWVudFwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocHJvcCwgXCJSZXN0RWxlbWVudFwiKVxuICAgIH1cbiAgICAvLyBUbyBkaXNhbGxvdyBwYXJlbnRoZXNpemVkIGlkZW50aWZpZXIgdmlhIGB0aGlzLnRvQXNzaWduYWJsZSgpYC5cbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5wYXJlbkwgJiYgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA8IDApIHtcbiAgICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gdGhpcy5zdGFydDtcbiAgICAgIH1cbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kIDwgMCkge1xuICAgICAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kID0gdGhpcy5zdGFydDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gUGFyc2UgYXJndW1lbnQuXG4gICAgcHJvcC5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgLy8gVG8gZGlzYWxsb3cgdHJhaWxpbmcgY29tbWEgdmlhIGB0aGlzLnRvQXNzaWduYWJsZSgpYC5cbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5jb21tYSAmJiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA8IDApIHtcbiAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IHRoaXMuc3RhcnQ7XG4gICAgfVxuICAgIC8vIEZpbmlzaFxuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocHJvcCwgXCJTcHJlYWRFbGVtZW50XCIpXG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgcHJvcC5tZXRob2QgPSBmYWxzZTtcbiAgICBwcm9wLnNob3J0aGFuZCA9IGZhbHNlO1xuICAgIGlmIChpc1BhdHRlcm4gfHwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0O1xuICAgICAgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgIH1cbiAgICBpZiAoIWlzUGF0dGVybilcbiAgICAgIHsgaXNHZW5lcmF0b3IgPSB0aGlzLmVhdCh0eXBlcy5zdGFyKTsgfVxuICB9XG4gIHZhciBjb250YWluc0VzYyA9IHRoaXMuY29udGFpbnNFc2M7XG4gIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUocHJvcCk7XG4gIGlmICghaXNQYXR0ZXJuICYmICFjb250YWluc0VzYyAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiAhaXNHZW5lcmF0b3IgJiYgdGhpcy5pc0FzeW5jUHJvcChwcm9wKSkge1xuICAgIGlzQXN5bmMgPSB0cnVlO1xuICAgIGlzR2VuZXJhdG9yID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgdGhpcy5lYXQodHlwZXMuc3Rhcik7XG4gICAgdGhpcy5wYXJzZVByb3BlcnR5TmFtZShwcm9wLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgfSBlbHNlIHtcbiAgICBpc0FzeW5jID0gZmFsc2U7XG4gIH1cbiAgdGhpcy5wYXJzZVByb3BlcnR5VmFsdWUocHJvcCwgaXNQYXR0ZXJuLCBpc0dlbmVyYXRvciwgaXNBc3luYywgc3RhcnRQb3MsIHN0YXJ0TG9jLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBjb250YWluc0VzYyk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUocHJvcCwgXCJQcm9wZXJ0eVwiKVxufTtcblxucHAkMy5wYXJzZVByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihwcm9wLCBpc1BhdHRlcm4sIGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBzdGFydFBvcywgc3RhcnRMb2MsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGNvbnRhaW5zRXNjKSB7XG4gIGlmICgoaXNHZW5lcmF0b3IgfHwgaXNBc3luYykgJiYgdGhpcy50eXBlID09PSB0eXBlcy5jb2xvbilcbiAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG5cbiAgaWYgKHRoaXMuZWF0KHR5cGVzLmNvbG9uKSkge1xuICAgIHByb3AudmFsdWUgPSBpc1BhdHRlcm4gPyB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHRoaXMuc3RhcnQsIHRoaXMuc3RhcnRMb2MpIDogdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICBwcm9wLmtpbmQgPSBcImluaXRcIjtcbiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLnR5cGUgPT09IHR5cGVzLnBhcmVuTCkge1xuICAgIGlmIChpc1BhdHRlcm4pIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICBwcm9wLmtpbmQgPSBcImluaXRcIjtcbiAgICBwcm9wLm1ldGhvZCA9IHRydWU7XG4gICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNZXRob2QoaXNHZW5lcmF0b3IsIGlzQXN5bmMpO1xuICB9IGVsc2UgaWYgKCFpc1BhdHRlcm4gJiYgIWNvbnRhaW5zRXNjICYmXG4gICAgICAgICAgICAgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDUgJiYgIXByb3AuY29tcHV0ZWQgJiYgcHJvcC5rZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiZcbiAgICAgICAgICAgICAocHJvcC5rZXkubmFtZSA9PT0gXCJnZXRcIiB8fCBwcm9wLmtleS5uYW1lID09PSBcInNldFwiKSAmJlxuICAgICAgICAgICAgICh0aGlzLnR5cGUgIT09IHR5cGVzLmNvbW1hICYmIHRoaXMudHlwZSAhPT0gdHlwZXMuYnJhY2VSICYmIHRoaXMudHlwZSAhPT0gdHlwZXMuZXEpKSB7XG4gICAgaWYgKGlzR2VuZXJhdG9yIHx8IGlzQXN5bmMpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICBwcm9wLmtpbmQgPSBwcm9wLmtleS5uYW1lO1xuICAgIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUocHJvcCk7XG4gICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNZXRob2QoZmFsc2UpO1xuICAgIHZhciBwYXJhbUNvdW50ID0gcHJvcC5raW5kID09PSBcImdldFwiID8gMCA6IDE7XG4gICAgaWYgKHByb3AudmFsdWUucGFyYW1zLmxlbmd0aCAhPT0gcGFyYW1Db3VudCkge1xuICAgICAgdmFyIHN0YXJ0ID0gcHJvcC52YWx1ZS5zdGFydDtcbiAgICAgIGlmIChwcm9wLmtpbmQgPT09IFwiZ2V0XCIpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcImdldHRlciBzaG91bGQgaGF2ZSBubyBwYXJhbXNcIik7IH1cbiAgICAgIGVsc2VcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwic2V0dGVyIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtXCIpOyB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wLmtpbmQgPT09IFwic2V0XCIgJiYgcHJvcC52YWx1ZS5wYXJhbXNbMF0udHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShwcm9wLnZhbHVlLnBhcmFtc1swXS5zdGFydCwgXCJTZXR0ZXIgY2Fubm90IHVzZSByZXN0IHBhcmFtc1wiKTsgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiAhcHJvcC5jb21wdXRlZCAmJiBwcm9wLmtleS50eXBlID09PSBcIklkZW50aWZpZXJcIikge1xuICAgIGlmIChpc0dlbmVyYXRvciB8fCBpc0FzeW5jKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgdGhpcy5jaGVja1VucmVzZXJ2ZWQocHJvcC5rZXkpO1xuICAgIGlmIChwcm9wLmtleS5uYW1lID09PSBcImF3YWl0XCIgJiYgIXRoaXMuYXdhaXRJZGVudFBvcylcbiAgICAgIHsgdGhpcy5hd2FpdElkZW50UG9zID0gc3RhcnRQb3M7IH1cbiAgICBwcm9wLmtpbmQgPSBcImluaXRcIjtcbiAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICBwcm9wLnZhbHVlID0gdGhpcy5wYXJzZU1heWJlRGVmYXVsdChzdGFydFBvcywgc3RhcnRMb2MsIHByb3Aua2V5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuZXEgJiYgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduIDwgMClcbiAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA9IHRoaXMuc3RhcnQ7IH1cbiAgICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWF5YmVEZWZhdWx0KHN0YXJ0UG9zLCBzdGFydExvYywgcHJvcC5rZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wLnZhbHVlID0gcHJvcC5rZXk7XG4gICAgfVxuICAgIHByb3Auc2hvcnRoYW5kID0gdHJ1ZTtcbiAgfSBlbHNlIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbn07XG5cbnBwJDMucGFyc2VQcm9wZXJ0eU5hbWUgPSBmdW5jdGlvbihwcm9wKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgIGlmICh0aGlzLmVhdCh0eXBlcy5icmFja2V0TCkpIHtcbiAgICAgIHByb3AuY29tcHV0ZWQgPSB0cnVlO1xuICAgICAgcHJvcC5rZXkgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzLmJyYWNrZXRSKTtcbiAgICAgIHJldHVybiBwcm9wLmtleVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wLmNvbXB1dGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBwcm9wLmtleSA9IHRoaXMudHlwZSA9PT0gdHlwZXMubnVtIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMuc3RyaW5nID8gdGhpcy5wYXJzZUV4cHJBdG9tKCkgOiB0aGlzLnBhcnNlSWRlbnQodGhpcy5vcHRpb25zLmFsbG93UmVzZXJ2ZWQgIT09IFwibmV2ZXJcIilcbn07XG5cbi8vIEluaXRpYWxpemUgZW1wdHkgZnVuY3Rpb24gbm9kZS5cblxucHAkMy5pbml0RnVuY3Rpb24gPSBmdW5jdGlvbihub2RlKSB7XG4gIG5vZGUuaWQgPSBudWxsO1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHsgbm9kZS5nZW5lcmF0b3IgPSBub2RlLmV4cHJlc3Npb24gPSBmYWxzZTsgfVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpIHsgbm9kZS5hc3luYyA9IGZhbHNlOyB9XG59O1xuXG4vLyBQYXJzZSBvYmplY3Qgb3IgY2xhc3MgbWV0aG9kLlxuXG5wcCQzLnBhcnNlTWV0aG9kID0gZnVuY3Rpb24oaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGFsbG93RGlyZWN0U3VwZXIpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkQXdhaXRJZGVudFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcztcblxuICB0aGlzLmluaXRGdW5jdGlvbihub2RlKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KVxuICAgIHsgbm9kZS5nZW5lcmF0b3IgPSBpc0dlbmVyYXRvcjsgfVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpXG4gICAgeyBub2RlLmFzeW5jID0gISFpc0FzeW5jOyB9XG5cbiAgdGhpcy55aWVsZFBvcyA9IDA7XG4gIHRoaXMuYXdhaXRQb3MgPSAwO1xuICB0aGlzLmF3YWl0SWRlbnRQb3MgPSAwO1xuICB0aGlzLmVudGVyU2NvcGUoZnVuY3Rpb25GbGFncyhpc0FzeW5jLCBub2RlLmdlbmVyYXRvcikgfCBTQ09QRV9TVVBFUiB8IChhbGxvd0RpcmVjdFN1cGVyID8gU0NPUEVfRElSRUNUX1NVUEVSIDogMCkpO1xuXG4gIHRoaXMuZXhwZWN0KHR5cGVzLnBhcmVuTCk7XG4gIG5vZGUucGFyYW1zID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KHR5cGVzLnBhcmVuUiwgZmFsc2UsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KTtcbiAgdGhpcy5jaGVja1lpZWxkQXdhaXRJbkRlZmF1bHRQYXJhbXMoKTtcbiAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShub2RlLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zO1xuICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3M7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJGdW5jdGlvbkV4cHJlc3Npb25cIilcbn07XG5cbi8vIFBhcnNlIGFycm93IGZ1bmN0aW9uIGV4cHJlc3Npb24gd2l0aCBnaXZlbiBwYXJhbWV0ZXJzLlxuXG5wcCQzLnBhcnNlQXJyb3dFeHByZXNzaW9uID0gZnVuY3Rpb24obm9kZSwgcGFyYW1zLCBpc0FzeW5jKSB7XG4gIHZhciBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkQXdhaXRJZGVudFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcztcblxuICB0aGlzLmVudGVyU2NvcGUoZnVuY3Rpb25GbGFncyhpc0FzeW5jLCBmYWxzZSkgfCBTQ09QRV9BUlJPVyk7XG4gIHRoaXMuaW5pdEZ1bmN0aW9uKG5vZGUpO1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpIHsgbm9kZS5hc3luYyA9ICEhaXNBc3luYzsgfVxuXG4gIHRoaXMueWllbGRQb3MgPSAwO1xuICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgdGhpcy5hd2FpdElkZW50UG9zID0gMDtcblxuICBub2RlLnBhcmFtcyA9IHRoaXMudG9Bc3NpZ25hYmxlTGlzdChwYXJhbXMsIHRydWUpO1xuICB0aGlzLnBhcnNlRnVuY3Rpb25Cb2R5KG5vZGUsIHRydWUsIGZhbHNlKTtcblxuICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3M7XG4gIHRoaXMuYXdhaXRQb3MgPSBvbGRBd2FpdFBvcztcbiAgdGhpcy5hd2FpdElkZW50UG9zID0gb2xkQXdhaXRJZGVudFBvcztcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFycm93RnVuY3Rpb25FeHByZXNzaW9uXCIpXG59O1xuXG4vLyBQYXJzZSBmdW5jdGlvbiBib2R5IGFuZCBjaGVjayBwYXJhbWV0ZXJzLlxuXG5wcCQzLnBhcnNlRnVuY3Rpb25Cb2R5ID0gZnVuY3Rpb24obm9kZSwgaXNBcnJvd0Z1bmN0aW9uLCBpc01ldGhvZCkge1xuICB2YXIgaXNFeHByZXNzaW9uID0gaXNBcnJvd0Z1bmN0aW9uICYmIHRoaXMudHlwZSAhPT0gdHlwZXMuYnJhY2VMO1xuICB2YXIgb2xkU3RyaWN0ID0gdGhpcy5zdHJpY3QsIHVzZVN0cmljdCA9IGZhbHNlO1xuXG4gIGlmIChpc0V4cHJlc3Npb24pIHtcbiAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICBub2RlLmV4cHJlc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tQYXJhbXMobm9kZSwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHZhciBub25TaW1wbGUgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNyAmJiAhdGhpcy5pc1NpbXBsZVBhcmFtTGlzdChub2RlLnBhcmFtcyk7XG4gICAgaWYgKCFvbGRTdHJpY3QgfHwgbm9uU2ltcGxlKSB7XG4gICAgICB1c2VTdHJpY3QgPSB0aGlzLnN0cmljdERpcmVjdGl2ZSh0aGlzLmVuZCk7XG4gICAgICAvLyBJZiB0aGlzIGlzIGEgc3RyaWN0IG1vZGUgZnVuY3Rpb24sIHZlcmlmeSB0aGF0IGFyZ3VtZW50IG5hbWVzXG4gICAgICAvLyBhcmUgbm90IHJlcGVhdGVkLCBhbmQgaXQgZG9lcyBub3QgdHJ5IHRvIGJpbmQgdGhlIHdvcmRzIGBldmFsYFxuICAgICAgLy8gb3IgYGFyZ3VtZW50c2AuXG4gICAgICBpZiAodXNlU3RyaWN0ICYmIG5vblNpbXBsZSlcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJJbGxlZ2FsICd1c2Ugc3RyaWN0JyBkaXJlY3RpdmUgaW4gZnVuY3Rpb24gd2l0aCBub24tc2ltcGxlIHBhcmFtZXRlciBsaXN0XCIpOyB9XG4gICAgfVxuICAgIC8vIFN0YXJ0IGEgbmV3IHNjb3BlIHdpdGggcmVnYXJkIHRvIGxhYmVscyBhbmQgdGhlIGBpbkZ1bmN0aW9uYFxuICAgIC8vIGZsYWcgKHJlc3RvcmUgdGhlbSB0byB0aGVpciBvbGQgdmFsdWUgYWZ0ZXJ3YXJkcykuXG4gICAgdmFyIG9sZExhYmVscyA9IHRoaXMubGFiZWxzO1xuICAgIHRoaXMubGFiZWxzID0gW107XG4gICAgaWYgKHVzZVN0cmljdCkgeyB0aGlzLnN0cmljdCA9IHRydWU7IH1cblxuICAgIC8vIEFkZCB0aGUgcGFyYW1zIHRvIHZhckRlY2xhcmVkTmFtZXMgdG8gZW5zdXJlIHRoYXQgYW4gZXJyb3IgaXMgdGhyb3duXG4gICAgLy8gaWYgYSBsZXQvY29uc3QgZGVjbGFyYXRpb24gaW4gdGhlIGZ1bmN0aW9uIGNsYXNoZXMgd2l0aCBvbmUgb2YgdGhlIHBhcmFtcy5cbiAgICB0aGlzLmNoZWNrUGFyYW1zKG5vZGUsICFvbGRTdHJpY3QgJiYgIXVzZVN0cmljdCAmJiAhaXNBcnJvd0Z1bmN0aW9uICYmICFpc01ldGhvZCAmJiB0aGlzLmlzU2ltcGxlUGFyYW1MaXN0KG5vZGUucGFyYW1zKSk7XG4gICAgLy8gRW5zdXJlIHRoZSBmdW5jdGlvbiBuYW1lIGlzbid0IGEgZm9yYmlkZGVuIGlkZW50aWZpZXIgaW4gc3RyaWN0IG1vZGUsIGUuZy4gJ2V2YWwnXG4gICAgaWYgKHRoaXMuc3RyaWN0ICYmIG5vZGUuaWQpIHsgdGhpcy5jaGVja0xWYWwobm9kZS5pZCwgQklORF9PVVRTSURFKTsgfVxuICAgIG5vZGUuYm9keSA9IHRoaXMucGFyc2VCbG9jayhmYWxzZSwgdW5kZWZpbmVkLCB1c2VTdHJpY3QgJiYgIW9sZFN0cmljdCk7XG4gICAgbm9kZS5leHByZXNzaW9uID0gZmFsc2U7XG4gICAgdGhpcy5hZGFwdERpcmVjdGl2ZVByb2xvZ3VlKG5vZGUuYm9keS5ib2R5KTtcbiAgICB0aGlzLmxhYmVscyA9IG9sZExhYmVscztcbiAgfVxuICB0aGlzLmV4aXRTY29wZSgpO1xufTtcblxucHAkMy5pc1NpbXBsZVBhcmFtTGlzdCA9IGZ1bmN0aW9uKHBhcmFtcykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IHBhcmFtczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBwYXJhbSA9IGxpc3RbaV07XG5cbiAgICBpZiAocGFyYW0udHlwZSAhPT0gXCJJZGVudGlmaWVyXCIpIHsgcmV0dXJuIGZhbHNlXG4gIH0gfVxuICByZXR1cm4gdHJ1ZVxufTtcblxuLy8gQ2hlY2tzIGZ1bmN0aW9uIHBhcmFtcyBmb3IgdmFyaW91cyBkaXNhbGxvd2VkIHBhdHRlcm5zIHN1Y2ggYXMgdXNpbmcgXCJldmFsXCJcbi8vIG9yIFwiYXJndW1lbnRzXCIgYW5kIGR1cGxpY2F0ZSBwYXJhbWV0ZXJzLlxuXG5wcCQzLmNoZWNrUGFyYW1zID0gZnVuY3Rpb24obm9kZSwgYWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBuYW1lSGFzaCA9IHt9O1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUucGFyYW1zOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIHBhcmFtID0gbGlzdFtpXTtcblxuICAgIHRoaXMuY2hlY2tMVmFsKHBhcmFtLCBCSU5EX1ZBUiwgYWxsb3dEdXBsaWNhdGVzID8gbnVsbCA6IG5hbWVIYXNoKTtcbiAgfVxufTtcblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMsIGFuZCByZXR1cm5zIHRoZW0gYXNcbi8vIGFuIGFycmF5LiBgY2xvc2VgIGlzIHRoZSB0b2tlbiB0eXBlIHRoYXQgZW5kcyB0aGUgbGlzdCwgYW5kXG4vLyBgYWxsb3dFbXB0eWAgY2FuIGJlIHR1cm5lZCBvbiB0byBhbGxvdyBzdWJzZXF1ZW50IGNvbW1hcyB3aXRoXG4vLyBub3RoaW5nIGluIGJldHdlZW4gdGhlbSB0byBiZSBwYXJzZWQgYXMgYG51bGxgICh3aGljaCBpcyBuZWVkZWRcbi8vIGZvciBhcnJheSBsaXRlcmFscykuXG5cbnBwJDMucGFyc2VFeHByTGlzdCA9IGZ1bmN0aW9uKGNsb3NlLCBhbGxvd1RyYWlsaW5nQ29tbWEsIGFsbG93RW1wdHksIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIGVsdHMgPSBbXSwgZmlyc3QgPSB0cnVlO1xuICB3aGlsZSAoIXRoaXMuZWF0KGNsb3NlKSkge1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIHRoaXMuZXhwZWN0KHR5cGVzLmNvbW1hKTtcbiAgICAgIGlmIChhbGxvd1RyYWlsaW5nQ29tbWEgJiYgdGhpcy5hZnRlclRyYWlsaW5nQ29tbWEoY2xvc2UpKSB7IGJyZWFrIH1cbiAgICB9IGVsc2UgeyBmaXJzdCA9IGZhbHNlOyB9XG5cbiAgICB2YXIgZWx0ID0gKHZvaWQgMCk7XG4gICAgaWYgKGFsbG93RW1wdHkgJiYgdGhpcy50eXBlID09PSB0eXBlcy5jb21tYSlcbiAgICAgIHsgZWx0ID0gbnVsbDsgfVxuICAgIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuZWxsaXBzaXMpIHtcbiAgICAgIGVsdCA9IHRoaXMucGFyc2VTcHJlYWQocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyAmJiB0aGlzLnR5cGUgPT09IHR5cGVzLmNvbW1hICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA8IDApXG4gICAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy50cmFpbGluZ0NvbW1hID0gdGhpcy5zdGFydDsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIH1cbiAgICBlbHRzLnB1c2goZWx0KTtcbiAgfVxuICByZXR1cm4gZWx0c1xufTtcblxucHAkMy5jaGVja1VucmVzZXJ2ZWQgPSBmdW5jdGlvbihyZWYpIHtcbiAgdmFyIHN0YXJ0ID0gcmVmLnN0YXJ0O1xuICB2YXIgZW5kID0gcmVmLmVuZDtcbiAgdmFyIG5hbWUgPSByZWYubmFtZTtcblxuICBpZiAodGhpcy5pbkdlbmVyYXRvciAmJiBuYW1lID09PSBcInlpZWxkXCIpXG4gICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwiQ2Fubm90IHVzZSAneWllbGQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGEgZ2VuZXJhdG9yXCIpOyB9XG4gIGlmICh0aGlzLmluQXN5bmMgJiYgbmFtZSA9PT0gXCJhd2FpdFwiKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcIkNhbm5vdCB1c2UgJ2F3YWl0JyBhcyBpZGVudGlmaWVyIGluc2lkZSBhbiBhc3luYyBmdW5jdGlvblwiKTsgfVxuICBpZiAodGhpcy5rZXl3b3Jkcy50ZXN0KG5hbWUpKVxuICAgIHsgdGhpcy5yYWlzZShzdGFydCwgKFwiVW5leHBlY3RlZCBrZXl3b3JkICdcIiArIG5hbWUgKyBcIidcIikpOyB9XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2ICYmXG4gICAgdGhpcy5pbnB1dC5zbGljZShzdGFydCwgZW5kKS5pbmRleE9mKFwiXFxcXFwiKSAhPT0gLTEpIHsgcmV0dXJuIH1cbiAgdmFyIHJlID0gdGhpcy5zdHJpY3QgPyB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3QgOiB0aGlzLnJlc2VydmVkV29yZHM7XG4gIGlmIChyZS50ZXN0KG5hbWUpKSB7XG4gICAgaWYgKCF0aGlzLmluQXN5bmMgJiYgbmFtZSA9PT0gXCJhd2FpdFwiKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIFwiQ2Fubm90IHVzZSBrZXl3b3JkICdhd2FpdCcgb3V0c2lkZSBhbiBhc3luYyBmdW5jdGlvblwiKTsgfVxuICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgKFwiVGhlIGtleXdvcmQgJ1wiICsgbmFtZSArIFwiJyBpcyByZXNlcnZlZFwiKSk7XG4gIH1cbn07XG5cbi8vIFBhcnNlIHRoZSBuZXh0IHRva2VuIGFzIGFuIGlkZW50aWZpZXIuIElmIGBsaWJlcmFsYCBpcyB0cnVlICh1c2VkXG4vLyB3aGVuIHBhcnNpbmcgcHJvcGVydGllcyksIGl0IHdpbGwgYWxzbyBjb252ZXJ0IGtleXdvcmRzIGludG9cbi8vIGlkZW50aWZpZXJzLlxuXG5wcCQzLnBhcnNlSWRlbnQgPSBmdW5jdGlvbihsaWJlcmFsLCBpc0JpbmRpbmcpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5uYW1lKSB7XG4gICAgbm9kZS5uYW1lID0gdGhpcy52YWx1ZTtcbiAgfSBlbHNlIGlmICh0aGlzLnR5cGUua2V5d29yZCkge1xuICAgIG5vZGUubmFtZSA9IHRoaXMudHlwZS5rZXl3b3JkO1xuXG4gICAgLy8gVG8gZml4IGh0dHBzOi8vZ2l0aHViLmNvbS9hY29ybmpzL2Fjb3JuL2lzc3Vlcy81NzVcbiAgICAvLyBgY2xhc3NgIGFuZCBgZnVuY3Rpb25gIGtleXdvcmRzIHB1c2ggbmV3IGNvbnRleHQgaW50byB0aGlzLmNvbnRleHQuXG4gICAgLy8gQnV0IHRoZXJlIGlzIG5vIGNoYW5jZSB0byBwb3AgdGhlIGNvbnRleHQgaWYgdGhlIGtleXdvcmQgaXMgY29uc3VtZWQgYXMgYW4gaWRlbnRpZmllciBzdWNoIGFzIGEgcHJvcGVydHkgbmFtZS5cbiAgICAvLyBJZiB0aGUgcHJldmlvdXMgdG9rZW4gaXMgYSBkb3QsIHRoaXMgZG9lcyBub3QgYXBwbHkgYmVjYXVzZSB0aGUgY29udGV4dC1tYW5hZ2luZyBjb2RlIGFscmVhZHkgaWdub3JlZCB0aGUga2V5d29yZFxuICAgIGlmICgobm9kZS5uYW1lID09PSBcImNsYXNzXCIgfHwgbm9kZS5uYW1lID09PSBcImZ1bmN0aW9uXCIpICYmXG4gICAgICAgICh0aGlzLmxhc3RUb2tFbmQgIT09IHRoaXMubGFzdFRva1N0YXJ0ICsgMSB8fCB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5sYXN0VG9rU3RhcnQpICE9PSA0NikpIHtcbiAgICAgIHRoaXMuY29udGV4dC5wb3AoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy51bmV4cGVjdGVkKCk7XG4gIH1cbiAgdGhpcy5uZXh0KCEhbGliZXJhbCk7XG4gIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIklkZW50aWZpZXJcIik7XG4gIGlmICghbGliZXJhbCkge1xuICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKG5vZGUpO1xuICAgIGlmIChub2RlLm5hbWUgPT09IFwiYXdhaXRcIiAmJiAhdGhpcy5hd2FpdElkZW50UG9zKVxuICAgICAgeyB0aGlzLmF3YWl0SWRlbnRQb3MgPSBub2RlLnN0YXJ0OyB9XG4gIH1cbiAgcmV0dXJuIG5vZGVcbn07XG5cbi8vIFBhcnNlcyB5aWVsZCBleHByZXNzaW9uIGluc2lkZSBnZW5lcmF0b3IuXG5cbnBwJDMucGFyc2VZaWVsZCA9IGZ1bmN0aW9uKG5vSW4pIHtcbiAgaWYgKCF0aGlzLnlpZWxkUG9zKSB7IHRoaXMueWllbGRQb3MgPSB0aGlzLnN0YXJ0OyB9XG5cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB0aGlzLm5leHQoKTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuc2VtaSB8fCB0aGlzLmNhbkluc2VydFNlbWljb2xvbigpIHx8ICh0aGlzLnR5cGUgIT09IHR5cGVzLnN0YXIgJiYgIXRoaXMudHlwZS5zdGFydHNFeHByKSkge1xuICAgIG5vZGUuZGVsZWdhdGUgPSBmYWxzZTtcbiAgICBub2RlLmFyZ3VtZW50ID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmRlbGVnYXRlID0gdGhpcy5lYXQodHlwZXMuc3Rhcik7XG4gICAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihub0luKTtcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiWWllbGRFeHByZXNzaW9uXCIpXG59O1xuXG5wcCQzLnBhcnNlQXdhaXQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmF3YWl0UG9zKSB7IHRoaXMuYXdhaXRQb3MgPSB0aGlzLnN0YXJ0OyB9XG5cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB0aGlzLm5leHQoKTtcbiAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIGZhbHNlKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkF3YWl0RXhwcmVzc2lvblwiKVxufTtcblxudmFyIHBwJDQgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmFpc2UgZXhjZXB0aW9ucyBvbiBwYXJzZSBlcnJvcnMuIEl0XG4vLyB0YWtlcyBhbiBvZmZzZXQgaW50ZWdlciAoaW50byB0aGUgY3VycmVudCBgaW5wdXRgKSB0byBpbmRpY2F0ZVxuLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvciwgYXR0YWNoZXMgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmRcbi8vIG9mIHRoZSBlcnJvciBtZXNzYWdlLCBhbmQgdGhlbiByYWlzZXMgYSBgU3ludGF4RXJyb3JgIHdpdGggdGhhdFxuLy8gbWVzc2FnZS5cblxucHAkNC5yYWlzZSA9IGZ1bmN0aW9uKHBvcywgbWVzc2FnZSkge1xuICB2YXIgbG9jID0gZ2V0TGluZUluZm8odGhpcy5pbnB1dCwgcG9zKTtcbiAgbWVzc2FnZSArPSBcIiAoXCIgKyBsb2MubGluZSArIFwiOlwiICsgbG9jLmNvbHVtbiArIFwiKVwiO1xuICB2YXIgZXJyID0gbmV3IFN5bnRheEVycm9yKG1lc3NhZ2UpO1xuICBlcnIucG9zID0gcG9zOyBlcnIubG9jID0gbG9jOyBlcnIucmFpc2VkQXQgPSB0aGlzLnBvcztcbiAgdGhyb3cgZXJyXG59O1xuXG5wcCQ0LnJhaXNlUmVjb3ZlcmFibGUgPSBwcCQ0LnJhaXNlO1xuXG5wcCQ0LmN1clBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBQb3NpdGlvbih0aGlzLmN1ckxpbmUsIHRoaXMucG9zIC0gdGhpcy5saW5lU3RhcnQpXG4gIH1cbn07XG5cbnZhciBwcCQ1ID0gUGFyc2VyLnByb3RvdHlwZTtcblxudmFyIFNjb3BlID0gZnVuY3Rpb24gU2NvcGUoZmxhZ3MpIHtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICAvLyBBIGxpc3Qgb2YgdmFyLWRlY2xhcmVkIG5hbWVzIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGVcbiAgdGhpcy52YXIgPSBbXTtcbiAgLy8gQSBsaXN0IG9mIGxleGljYWxseS1kZWNsYXJlZCBuYW1lcyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlXG4gIHRoaXMubGV4aWNhbCA9IFtdO1xuICAvLyBBIGxpc3Qgb2YgbGV4aWNhbGx5LWRlY2xhcmVkIEZ1bmN0aW9uRGVjbGFyYXRpb24gbmFtZXMgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZVxuICB0aGlzLmZ1bmN0aW9ucyA9IFtdO1xufTtcblxuLy8gVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBrZWVwIHRyYWNrIG9mIGRlY2xhcmVkIHZhcmlhYmxlcyBpbiB0aGUgY3VycmVudCBzY29wZSBpbiBvcmRlciB0byBkZXRlY3QgZHVwbGljYXRlIHZhcmlhYmxlIG5hbWVzLlxuXG5wcCQ1LmVudGVyU2NvcGUgPSBmdW5jdGlvbihmbGFncykge1xuICB0aGlzLnNjb3BlU3RhY2sucHVzaChuZXcgU2NvcGUoZmxhZ3MpKTtcbn07XG5cbnBwJDUuZXhpdFNjb3BlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc2NvcGVTdGFjay5wb3AoKTtcbn07XG5cbi8vIFRoZSBzcGVjIHNheXM6XG4vLyA+IEF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBmdW5jdGlvbiwgb3Igc2NyaXB0LCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXJlXG4vLyA+IHRyZWF0ZWQgbGlrZSB2YXIgZGVjbGFyYXRpb25zIHJhdGhlciB0aGFuIGxpa2UgbGV4aWNhbCBkZWNsYXJhdGlvbnMuXG5wcCQ1LnRyZWF0RnVuY3Rpb25zQXNWYXJJblNjb3BlID0gZnVuY3Rpb24oc2NvcGUpIHtcbiAgcmV0dXJuIChzY29wZS5mbGFncyAmIFNDT1BFX0ZVTkNUSU9OKSB8fCAhdGhpcy5pbk1vZHVsZSAmJiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9UT1ApXG59O1xuXG5wcCQ1LmRlY2xhcmVOYW1lID0gZnVuY3Rpb24obmFtZSwgYmluZGluZ1R5cGUsIHBvcykge1xuICB2YXIgcmVkZWNsYXJlZCA9IGZhbHNlO1xuICBpZiAoYmluZGluZ1R5cGUgPT09IEJJTkRfTEVYSUNBTCkge1xuICAgIHZhciBzY29wZSA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgcmVkZWNsYXJlZCA9IHNjb3BlLmxleGljYWwuaW5kZXhPZihuYW1lKSA+IC0xIHx8IHNjb3BlLmZ1bmN0aW9ucy5pbmRleE9mKG5hbWUpID4gLTEgfHwgc2NvcGUudmFyLmluZGV4T2YobmFtZSkgPiAtMTtcbiAgICBzY29wZS5sZXhpY2FsLnB1c2gobmFtZSk7XG4gICAgaWYgKHRoaXMuaW5Nb2R1bGUgJiYgKHNjb3BlLmZsYWdzICYgU0NPUEVfVE9QKSlcbiAgICAgIHsgZGVsZXRlIHRoaXMudW5kZWZpbmVkRXhwb3J0c1tuYW1lXTsgfVxuICB9IGVsc2UgaWYgKGJpbmRpbmdUeXBlID09PSBCSU5EX1NJTVBMRV9DQVRDSCkge1xuICAgIHZhciBzY29wZSQxID0gdGhpcy5jdXJyZW50U2NvcGUoKTtcbiAgICBzY29wZSQxLmxleGljYWwucHVzaChuYW1lKTtcbiAgfSBlbHNlIGlmIChiaW5kaW5nVHlwZSA9PT0gQklORF9GVU5DVElPTikge1xuICAgIHZhciBzY29wZSQyID0gdGhpcy5jdXJyZW50U2NvcGUoKTtcbiAgICBpZiAodGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFyKVxuICAgICAgeyByZWRlY2xhcmVkID0gc2NvcGUkMi5sZXhpY2FsLmluZGV4T2YobmFtZSkgPiAtMTsgfVxuICAgIGVsc2VcbiAgICAgIHsgcmVkZWNsYXJlZCA9IHNjb3BlJDIubGV4aWNhbC5pbmRleE9mKG5hbWUpID4gLTEgfHwgc2NvcGUkMi52YXIuaW5kZXhPZihuYW1lKSA+IC0xOyB9XG4gICAgc2NvcGUkMi5mdW5jdGlvbnMucHVzaChuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5zY29wZVN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB2YXIgc2NvcGUkMyA9IHRoaXMuc2NvcGVTdGFja1tpXTtcbiAgICAgIGlmIChzY29wZSQzLmxleGljYWwuaW5kZXhPZihuYW1lKSA+IC0xICYmICEoKHNjb3BlJDMuZmxhZ3MgJiBTQ09QRV9TSU1QTEVfQ0FUQ0gpICYmIHNjb3BlJDMubGV4aWNhbFswXSA9PT0gbmFtZSkgfHxcbiAgICAgICAgICAhdGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZShzY29wZSQzKSAmJiBzY29wZSQzLmZ1bmN0aW9ucy5pbmRleE9mKG5hbWUpID4gLTEpIHtcbiAgICAgICAgcmVkZWNsYXJlZCA9IHRydWU7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzY29wZSQzLnZhci5wdXNoKG5hbWUpO1xuICAgICAgaWYgKHRoaXMuaW5Nb2R1bGUgJiYgKHNjb3BlJDMuZmxhZ3MgJiBTQ09QRV9UT1ApKVxuICAgICAgICB7IGRlbGV0ZSB0aGlzLnVuZGVmaW5lZEV4cG9ydHNbbmFtZV07IH1cbiAgICAgIGlmIChzY29wZSQzLmZsYWdzICYgU0NPUEVfVkFSKSB7IGJyZWFrIH1cbiAgICB9XG4gIH1cbiAgaWYgKHJlZGVjbGFyZWQpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHBvcywgKFwiSWRlbnRpZmllciAnXCIgKyBuYW1lICsgXCInIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWRcIikpOyB9XG59O1xuXG5wcCQ1LmNoZWNrTG9jYWxFeHBvcnQgPSBmdW5jdGlvbihpZCkge1xuICAvLyBzY29wZS5mdW5jdGlvbnMgbXVzdCBiZSBlbXB0eSBhcyBNb2R1bGUgY29kZSBpcyBhbHdheXMgc3RyaWN0LlxuICBpZiAodGhpcy5zY29wZVN0YWNrWzBdLmxleGljYWwuaW5kZXhPZihpZC5uYW1lKSA9PT0gLTEgJiZcbiAgICAgIHRoaXMuc2NvcGVTdGFja1swXS52YXIuaW5kZXhPZihpZC5uYW1lKSA9PT0gLTEpIHtcbiAgICB0aGlzLnVuZGVmaW5lZEV4cG9ydHNbaWQubmFtZV0gPSBpZDtcbiAgfVxufTtcblxucHAkNS5jdXJyZW50U2NvcGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc2NvcGVTdGFja1t0aGlzLnNjb3BlU3RhY2subGVuZ3RoIC0gMV1cbn07XG5cbnBwJDUuY3VycmVudFZhclNjb3BlID0gZnVuY3Rpb24oKSB7XG4gIGZvciAodmFyIGkgPSB0aGlzLnNjb3BlU3RhY2subGVuZ3RoIC0gMTs7IGktLSkge1xuICAgIHZhciBzY29wZSA9IHRoaXMuc2NvcGVTdGFja1tpXTtcbiAgICBpZiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9WQVIpIHsgcmV0dXJuIHNjb3BlIH1cbiAgfVxufTtcblxuLy8gQ291bGQgYmUgdXNlZnVsIGZvciBgdGhpc2AsIGBuZXcudGFyZ2V0YCwgYHN1cGVyKClgLCBgc3VwZXIucHJvcGVydHlgLCBhbmQgYHN1cGVyW3Byb3BlcnR5XWAuXG5wcCQ1LmN1cnJlbnRUaGlzU2NvcGUgPSBmdW5jdGlvbigpIHtcbiAgZm9yICh2YXIgaSA9IHRoaXMuc2NvcGVTdGFjay5sZW5ndGggLSAxOzsgaS0tKSB7XG4gICAgdmFyIHNjb3BlID0gdGhpcy5zY29wZVN0YWNrW2ldO1xuICAgIGlmIChzY29wZS5mbGFncyAmIFNDT1BFX1ZBUiAmJiAhKHNjb3BlLmZsYWdzICYgU0NPUEVfQVJST1cpKSB7IHJldHVybiBzY29wZSB9XG4gIH1cbn07XG5cbnZhciBOb2RlID0gZnVuY3Rpb24gTm9kZShwYXJzZXIsIHBvcywgbG9jKSB7XG4gIHRoaXMudHlwZSA9IFwiXCI7XG4gIHRoaXMuc3RhcnQgPSBwb3M7XG4gIHRoaXMuZW5kID0gMDtcbiAgaWYgKHBhcnNlci5vcHRpb25zLmxvY2F0aW9ucylcbiAgICB7IHRoaXMubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKHBhcnNlciwgbG9jKTsgfVxuICBpZiAocGFyc2VyLm9wdGlvbnMuZGlyZWN0U291cmNlRmlsZSlcbiAgICB7IHRoaXMuc291cmNlRmlsZSA9IHBhcnNlci5vcHRpb25zLmRpcmVjdFNvdXJjZUZpbGU7IH1cbiAgaWYgKHBhcnNlci5vcHRpb25zLnJhbmdlcylcbiAgICB7IHRoaXMucmFuZ2UgPSBbcG9zLCAwXTsgfVxufTtcblxuLy8gU3RhcnQgYW4gQVNUIG5vZGUsIGF0dGFjaGluZyBhIHN0YXJ0IG9mZnNldC5cblxudmFyIHBwJDYgPSBQYXJzZXIucHJvdG90eXBlO1xuXG5wcCQ2LnN0YXJ0Tm9kZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IE5vZGUodGhpcywgdGhpcy5zdGFydCwgdGhpcy5zdGFydExvYylcbn07XG5cbnBwJDYuc3RhcnROb2RlQXQgPSBmdW5jdGlvbihwb3MsIGxvYykge1xuICByZXR1cm4gbmV3IE5vZGUodGhpcywgcG9zLCBsb2MpXG59O1xuXG4vLyBGaW5pc2ggYW4gQVNUIG5vZGUsIGFkZGluZyBgdHlwZWAgYW5kIGBlbmRgIHByb3BlcnRpZXMuXG5cbmZ1bmN0aW9uIGZpbmlzaE5vZGVBdChub2RlLCB0eXBlLCBwb3MsIGxvYykge1xuICBub2RlLnR5cGUgPSB0eXBlO1xuICBub2RlLmVuZCA9IHBvcztcbiAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgeyBub2RlLmxvYy5lbmQgPSBsb2M7IH1cbiAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpXG4gICAgeyBub2RlLnJhbmdlWzFdID0gcG9zOyB9XG4gIHJldHVybiBub2RlXG59XG5cbnBwJDYuZmluaXNoTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIHR5cGUpIHtcbiAgcmV0dXJuIGZpbmlzaE5vZGVBdC5jYWxsKHRoaXMsIG5vZGUsIHR5cGUsIHRoaXMubGFzdFRva0VuZCwgdGhpcy5sYXN0VG9rRW5kTG9jKVxufTtcblxuLy8gRmluaXNoIG5vZGUgYXQgZ2l2ZW4gcG9zaXRpb25cblxucHAkNi5maW5pc2hOb2RlQXQgPSBmdW5jdGlvbihub2RlLCB0eXBlLCBwb3MsIGxvYykge1xuICByZXR1cm4gZmluaXNoTm9kZUF0LmNhbGwodGhpcywgbm9kZSwgdHlwZSwgcG9zLCBsb2MpXG59O1xuXG4vLyBUaGUgYWxnb3JpdGhtIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWdleHAgY2FuIGFwcGVhciBhdCBhXG5cbnZhciBUb2tDb250ZXh0ID0gZnVuY3Rpb24gVG9rQ29udGV4dCh0b2tlbiwgaXNFeHByLCBwcmVzZXJ2ZVNwYWNlLCBvdmVycmlkZSwgZ2VuZXJhdG9yKSB7XG4gIHRoaXMudG9rZW4gPSB0b2tlbjtcbiAgdGhpcy5pc0V4cHIgPSAhIWlzRXhwcjtcbiAgdGhpcy5wcmVzZXJ2ZVNwYWNlID0gISFwcmVzZXJ2ZVNwYWNlO1xuICB0aGlzLm92ZXJyaWRlID0gb3ZlcnJpZGU7XG4gIHRoaXMuZ2VuZXJhdG9yID0gISFnZW5lcmF0b3I7XG59O1xuXG52YXIgdHlwZXMkMSA9IHtcbiAgYl9zdGF0OiBuZXcgVG9rQ29udGV4dChcIntcIiwgZmFsc2UpLFxuICBiX2V4cHI6IG5ldyBUb2tDb250ZXh0KFwie1wiLCB0cnVlKSxcbiAgYl90bXBsOiBuZXcgVG9rQ29udGV4dChcIiR7XCIsIGZhbHNlKSxcbiAgcF9zdGF0OiBuZXcgVG9rQ29udGV4dChcIihcIiwgZmFsc2UpLFxuICBwX2V4cHI6IG5ldyBUb2tDb250ZXh0KFwiKFwiLCB0cnVlKSxcbiAgcV90bXBsOiBuZXcgVG9rQ29udGV4dChcImBcIiwgdHJ1ZSwgdHJ1ZSwgZnVuY3Rpb24gKHApIHsgcmV0dXJuIHAudHJ5UmVhZFRlbXBsYXRlVG9rZW4oKTsgfSksXG4gIGZfc3RhdDogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCBmYWxzZSksXG4gIGZfZXhwcjogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCB0cnVlKSxcbiAgZl9leHByX2dlbjogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCB0cnVlLCBmYWxzZSwgbnVsbCwgdHJ1ZSksXG4gIGZfZ2VuOiBuZXcgVG9rQ29udGV4dChcImZ1bmN0aW9uXCIsIGZhbHNlLCBmYWxzZSwgbnVsbCwgdHJ1ZSlcbn07XG5cbnZhciBwcCQ3ID0gUGFyc2VyLnByb3RvdHlwZTtcblxucHAkNy5pbml0aWFsQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gW3R5cGVzJDEuYl9zdGF0XVxufTtcblxucHAkNy5icmFjZUlzQmxvY2sgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5jdXJDb250ZXh0KCk7XG4gIGlmIChwYXJlbnQgPT09IHR5cGVzJDEuZl9leHByIHx8IHBhcmVudCA9PT0gdHlwZXMkMS5mX3N0YXQpXG4gICAgeyByZXR1cm4gdHJ1ZSB9XG4gIGlmIChwcmV2VHlwZSA9PT0gdHlwZXMuY29sb24gJiYgKHBhcmVudCA9PT0gdHlwZXMkMS5iX3N0YXQgfHwgcGFyZW50ID09PSB0eXBlcyQxLmJfZXhwcikpXG4gICAgeyByZXR1cm4gIXBhcmVudC5pc0V4cHIgfVxuXG4gIC8vIFRoZSBjaGVjayBmb3IgYHR0Lm5hbWUgJiYgZXhwckFsbG93ZWRgIGRldGVjdHMgd2hldGhlciB3ZSBhcmVcbiAgLy8gYWZ0ZXIgYSBgeWllbGRgIG9yIGBvZmAgY29uc3RydWN0LiBTZWUgdGhlIGB1cGRhdGVDb250ZXh0YCBmb3JcbiAgLy8gYHR0Lm5hbWVgLlxuICBpZiAocHJldlR5cGUgPT09IHR5cGVzLl9yZXR1cm4gfHwgcHJldlR5cGUgPT09IHR5cGVzLm5hbWUgJiYgdGhpcy5leHByQWxsb3dlZClcbiAgICB7IHJldHVybiBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpIH1cbiAgaWYgKHByZXZUeXBlID09PSB0eXBlcy5fZWxzZSB8fCBwcmV2VHlwZSA9PT0gdHlwZXMuc2VtaSB8fCBwcmV2VHlwZSA9PT0gdHlwZXMuZW9mIHx8IHByZXZUeXBlID09PSB0eXBlcy5wYXJlblIgfHwgcHJldlR5cGUgPT09IHR5cGVzLmFycm93KVxuICAgIHsgcmV0dXJuIHRydWUgfVxuICBpZiAocHJldlR5cGUgPT09IHR5cGVzLmJyYWNlTClcbiAgICB7IHJldHVybiBwYXJlbnQgPT09IHR5cGVzJDEuYl9zdGF0IH1cbiAgaWYgKHByZXZUeXBlID09PSB0eXBlcy5fdmFyIHx8IHByZXZUeXBlID09PSB0eXBlcy5fY29uc3QgfHwgcHJldlR5cGUgPT09IHR5cGVzLm5hbWUpXG4gICAgeyByZXR1cm4gZmFsc2UgfVxuICByZXR1cm4gIXRoaXMuZXhwckFsbG93ZWRcbn07XG5cbnBwJDcuaW5HZW5lcmF0b3JDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGZvciAodmFyIGkgPSB0aGlzLmNvbnRleHQubGVuZ3RoIC0gMTsgaSA+PSAxOyBpLS0pIHtcbiAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dFtpXTtcbiAgICBpZiAoY29udGV4dC50b2tlbiA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgeyByZXR1cm4gY29udGV4dC5nZW5lcmF0b3IgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxucHAkNy51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgdmFyIHVwZGF0ZSwgdHlwZSA9IHRoaXMudHlwZTtcbiAgaWYgKHR5cGUua2V5d29yZCAmJiBwcmV2VHlwZSA9PT0gdHlwZXMuZG90KVxuICAgIHsgdGhpcy5leHByQWxsb3dlZCA9IGZhbHNlOyB9XG4gIGVsc2UgaWYgKHVwZGF0ZSA9IHR5cGUudXBkYXRlQ29udGV4dClcbiAgICB7IHVwZGF0ZS5jYWxsKHRoaXMsIHByZXZUeXBlKTsgfVxuICBlbHNlXG4gICAgeyB0aGlzLmV4cHJBbGxvd2VkID0gdHlwZS5iZWZvcmVFeHByOyB9XG59O1xuXG4vLyBUb2tlbi1zcGVjaWZpYyBjb250ZXh0IHVwZGF0ZSBjb2RlXG5cbnR5cGVzLnBhcmVuUi51cGRhdGVDb250ZXh0ID0gdHlwZXMuYnJhY2VSLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY29udGV4dC5sZW5ndGggPT09IDEpIHtcbiAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb3V0ID0gdGhpcy5jb250ZXh0LnBvcCgpO1xuICBpZiAob3V0ID09PSB0eXBlcyQxLmJfc3RhdCAmJiB0aGlzLmN1ckNvbnRleHQoKS50b2tlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgb3V0ID0gdGhpcy5jb250ZXh0LnBvcCgpO1xuICB9XG4gIHRoaXMuZXhwckFsbG93ZWQgPSAhb3V0LmlzRXhwcjtcbn07XG5cbnR5cGVzLmJyYWNlTC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgdGhpcy5jb250ZXh0LnB1c2godGhpcy5icmFjZUlzQmxvY2socHJldlR5cGUpID8gdHlwZXMkMS5iX3N0YXQgOiB0eXBlcyQxLmJfZXhwcik7XG4gIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlO1xufTtcblxudHlwZXMuZG9sbGFyQnJhY2VMLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5jb250ZXh0LnB1c2godHlwZXMkMS5iX3RtcGwpO1xuICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbn07XG5cbnR5cGVzLnBhcmVuTC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgdmFyIHN0YXRlbWVudFBhcmVucyA9IHByZXZUeXBlID09PSB0eXBlcy5faWYgfHwgcHJldlR5cGUgPT09IHR5cGVzLl9mb3IgfHwgcHJldlR5cGUgPT09IHR5cGVzLl93aXRoIHx8IHByZXZUeXBlID09PSB0eXBlcy5fd2hpbGU7XG4gIHRoaXMuY29udGV4dC5wdXNoKHN0YXRlbWVudFBhcmVucyA/IHR5cGVzJDEucF9zdGF0IDogdHlwZXMkMS5wX2V4cHIpO1xuICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbn07XG5cbnR5cGVzLmluY0RlYy51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIC8vIHRva0V4cHJBbGxvd2VkIHN0YXlzIHVuY2hhbmdlZFxufTtcblxudHlwZXMuX2Z1bmN0aW9uLnVwZGF0ZUNvbnRleHQgPSB0eXBlcy5fY2xhc3MudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIGlmIChwcmV2VHlwZS5iZWZvcmVFeHByICYmIHByZXZUeXBlICE9PSB0eXBlcy5zZW1pICYmIHByZXZUeXBlICE9PSB0eXBlcy5fZWxzZSAmJlxuICAgICAgIShwcmV2VHlwZSA9PT0gdHlwZXMuX3JldHVybiAmJiBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpKSAmJlxuICAgICAgISgocHJldlR5cGUgPT09IHR5cGVzLmNvbG9uIHx8IHByZXZUeXBlID09PSB0eXBlcy5icmFjZUwpICYmIHRoaXMuY3VyQ29udGV4dCgpID09PSB0eXBlcyQxLmJfc3RhdCkpXG4gICAgeyB0aGlzLmNvbnRleHQucHVzaCh0eXBlcyQxLmZfZXhwcik7IH1cbiAgZWxzZVxuICAgIHsgdGhpcy5jb250ZXh0LnB1c2godHlwZXMkMS5mX3N0YXQpOyB9XG4gIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbn07XG5cbnR5cGVzLmJhY2tRdW90ZS51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmN1ckNvbnRleHQoKSA9PT0gdHlwZXMkMS5xX3RtcGwpXG4gICAgeyB0aGlzLmNvbnRleHQucG9wKCk7IH1cbiAgZWxzZVxuICAgIHsgdGhpcy5jb250ZXh0LnB1c2godHlwZXMkMS5xX3RtcGwpOyB9XG4gIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbn07XG5cbnR5cGVzLnN0YXIudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIGlmIChwcmV2VHlwZSA9PT0gdHlwZXMuX2Z1bmN0aW9uKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDE7XG4gICAgaWYgKHRoaXMuY29udGV4dFtpbmRleF0gPT09IHR5cGVzJDEuZl9leHByKVxuICAgICAgeyB0aGlzLmNvbnRleHRbaW5kZXhdID0gdHlwZXMkMS5mX2V4cHJfZ2VuOyB9XG4gICAgZWxzZVxuICAgICAgeyB0aGlzLmNvbnRleHRbaW5kZXhdID0gdHlwZXMkMS5mX2dlbjsgfVxuICB9XG4gIHRoaXMuZXhwckFsbG93ZWQgPSB0cnVlO1xufTtcblxudHlwZXMubmFtZS51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgdmFyIGFsbG93ZWQgPSBmYWxzZTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIHByZXZUeXBlICE9PSB0eXBlcy5kb3QpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gXCJvZlwiICYmICF0aGlzLmV4cHJBbGxvd2VkIHx8XG4gICAgICAgIHRoaXMudmFsdWUgPT09IFwieWllbGRcIiAmJiB0aGlzLmluR2VuZXJhdG9yQ29udGV4dCgpKVxuICAgICAgeyBhbGxvd2VkID0gdHJ1ZTsgfVxuICB9XG4gIHRoaXMuZXhwckFsbG93ZWQgPSBhbGxvd2VkO1xufTtcblxuLy8gVGhpcyBmaWxlIGNvbnRhaW5zIFVuaWNvZGUgcHJvcGVydGllcyBleHRyYWN0ZWQgZnJvbSB0aGUgRUNNQVNjcmlwdFxuLy8gc3BlY2lmaWNhdGlvbi4gVGhlIGxpc3RzIGFyZSBleHRyYWN0ZWQgbGlrZSBzbzpcbi8vICQkKCcjdGFibGUtYmluYXJ5LXVuaWNvZGUtcHJvcGVydGllcyA+IGZpZ3VyZSA+IHRhYmxlID4gdGJvZHkgPiB0ciA+IHRkOm50aC1jaGlsZCgxKSBjb2RlJykubWFwKGVsID0+IGVsLmlubmVyVGV4dClcblxuLy8gI3RhYmxlLWJpbmFyeS11bmljb2RlLXByb3BlcnRpZXNcbnZhciBlY21hOUJpbmFyeVByb3BlcnRpZXMgPSBcIkFTQ0lJIEFTQ0lJX0hleF9EaWdpdCBBSGV4IEFscGhhYmV0aWMgQWxwaGEgQW55IEFzc2lnbmVkIEJpZGlfQ29udHJvbCBCaWRpX0MgQmlkaV9NaXJyb3JlZCBCaWRpX00gQ2FzZV9JZ25vcmFibGUgQ0kgQ2FzZWQgQ2hhbmdlc19XaGVuX0Nhc2Vmb2xkZWQgQ1dDRiBDaGFuZ2VzX1doZW5fQ2FzZW1hcHBlZCBDV0NNIENoYW5nZXNfV2hlbl9Mb3dlcmNhc2VkIENXTCBDaGFuZ2VzX1doZW5fTkZLQ19DYXNlZm9sZGVkIENXS0NGIENoYW5nZXNfV2hlbl9UaXRsZWNhc2VkIENXVCBDaGFuZ2VzX1doZW5fVXBwZXJjYXNlZCBDV1UgRGFzaCBEZWZhdWx0X0lnbm9yYWJsZV9Db2RlX1BvaW50IERJIERlcHJlY2F0ZWQgRGVwIERpYWNyaXRpYyBEaWEgRW1vamkgRW1vamlfQ29tcG9uZW50IEVtb2ppX01vZGlmaWVyIEVtb2ppX01vZGlmaWVyX0Jhc2UgRW1vamlfUHJlc2VudGF0aW9uIEV4dGVuZGVyIEV4dCBHcmFwaGVtZV9CYXNlIEdyX0Jhc2UgR3JhcGhlbWVfRXh0ZW5kIEdyX0V4dCBIZXhfRGlnaXQgSGV4IElEU19CaW5hcnlfT3BlcmF0b3IgSURTQiBJRFNfVHJpbmFyeV9PcGVyYXRvciBJRFNUIElEX0NvbnRpbnVlIElEQyBJRF9TdGFydCBJRFMgSWRlb2dyYXBoaWMgSWRlbyBKb2luX0NvbnRyb2wgSm9pbl9DIExvZ2ljYWxfT3JkZXJfRXhjZXB0aW9uIExPRSBMb3dlcmNhc2UgTG93ZXIgTWF0aCBOb25jaGFyYWN0ZXJfQ29kZV9Qb2ludCBOQ2hhciBQYXR0ZXJuX1N5bnRheCBQYXRfU3luIFBhdHRlcm5fV2hpdGVfU3BhY2UgUGF0X1dTIFF1b3RhdGlvbl9NYXJrIFFNYXJrIFJhZGljYWwgUmVnaW9uYWxfSW5kaWNhdG9yIFJJIFNlbnRlbmNlX1Rlcm1pbmFsIFNUZXJtIFNvZnRfRG90dGVkIFNEIFRlcm1pbmFsX1B1bmN0dWF0aW9uIFRlcm0gVW5pZmllZF9JZGVvZ3JhcGggVUlkZW8gVXBwZXJjYXNlIFVwcGVyIFZhcmlhdGlvbl9TZWxlY3RvciBWUyBXaGl0ZV9TcGFjZSBzcGFjZSBYSURfQ29udGludWUgWElEQyBYSURfU3RhcnQgWElEU1wiO1xudmFyIGVjbWExMEJpbmFyeVByb3BlcnRpZXMgPSBlY21hOUJpbmFyeVByb3BlcnRpZXMgKyBcIiBFeHRlbmRlZF9QaWN0b2dyYXBoaWNcIjtcbnZhciBlY21hMTFCaW5hcnlQcm9wZXJ0aWVzID0gZWNtYTEwQmluYXJ5UHJvcGVydGllcztcbnZhciB1bmljb2RlQmluYXJ5UHJvcGVydGllcyA9IHtcbiAgOTogZWNtYTlCaW5hcnlQcm9wZXJ0aWVzLFxuICAxMDogZWNtYTEwQmluYXJ5UHJvcGVydGllcyxcbiAgMTE6IGVjbWExMUJpbmFyeVByb3BlcnRpZXNcbn07XG5cbi8vICN0YWJsZS11bmljb2RlLWdlbmVyYWwtY2F0ZWdvcnktdmFsdWVzXG52YXIgdW5pY29kZUdlbmVyYWxDYXRlZ29yeVZhbHVlcyA9IFwiQ2FzZWRfTGV0dGVyIExDIENsb3NlX1B1bmN0dWF0aW9uIFBlIENvbm5lY3Rvcl9QdW5jdHVhdGlvbiBQYyBDb250cm9sIENjIGNudHJsIEN1cnJlbmN5X1N5bWJvbCBTYyBEYXNoX1B1bmN0dWF0aW9uIFBkIERlY2ltYWxfTnVtYmVyIE5kIGRpZ2l0IEVuY2xvc2luZ19NYXJrIE1lIEZpbmFsX1B1bmN0dWF0aW9uIFBmIEZvcm1hdCBDZiBJbml0aWFsX1B1bmN0dWF0aW9uIFBpIExldHRlciBMIExldHRlcl9OdW1iZXIgTmwgTGluZV9TZXBhcmF0b3IgWmwgTG93ZXJjYXNlX0xldHRlciBMbCBNYXJrIE0gQ29tYmluaW5nX01hcmsgTWF0aF9TeW1ib2wgU20gTW9kaWZpZXJfTGV0dGVyIExtIE1vZGlmaWVyX1N5bWJvbCBTayBOb25zcGFjaW5nX01hcmsgTW4gTnVtYmVyIE4gT3Blbl9QdW5jdHVhdGlvbiBQcyBPdGhlciBDIE90aGVyX0xldHRlciBMbyBPdGhlcl9OdW1iZXIgTm8gT3RoZXJfUHVuY3R1YXRpb24gUG8gT3RoZXJfU3ltYm9sIFNvIFBhcmFncmFwaF9TZXBhcmF0b3IgWnAgUHJpdmF0ZV9Vc2UgQ28gUHVuY3R1YXRpb24gUCBwdW5jdCBTZXBhcmF0b3IgWiBTcGFjZV9TZXBhcmF0b3IgWnMgU3BhY2luZ19NYXJrIE1jIFN1cnJvZ2F0ZSBDcyBTeW1ib2wgUyBUaXRsZWNhc2VfTGV0dGVyIEx0IFVuYXNzaWduZWQgQ24gVXBwZXJjYXNlX0xldHRlciBMdVwiO1xuXG4vLyAjdGFibGUtdW5pY29kZS1zY3JpcHQtdmFsdWVzXG52YXIgZWNtYTlTY3JpcHRWYWx1ZXMgPSBcIkFkbGFtIEFkbG0gQWhvbSBBaG9tIEFuYXRvbGlhbl9IaWVyb2dseXBocyBIbHV3IEFyYWJpYyBBcmFiIEFybWVuaWFuIEFybW4gQXZlc3RhbiBBdnN0IEJhbGluZXNlIEJhbGkgQmFtdW0gQmFtdSBCYXNzYV9WYWggQmFzcyBCYXRhayBCYXRrIEJlbmdhbGkgQmVuZyBCaGFpa3N1a2kgQmhrcyBCb3BvbW9mbyBCb3BvIEJyYWhtaSBCcmFoIEJyYWlsbGUgQnJhaSBCdWdpbmVzZSBCdWdpIEJ1aGlkIEJ1aGQgQ2FuYWRpYW5fQWJvcmlnaW5hbCBDYW5zIENhcmlhbiBDYXJpIENhdWNhc2lhbl9BbGJhbmlhbiBBZ2hiIENoYWttYSBDYWttIENoYW0gQ2hhbSBDaGVyb2tlZSBDaGVyIENvbW1vbiBaeXl5IENvcHRpYyBDb3B0IFFhYWMgQ3VuZWlmb3JtIFhzdXggQ3lwcmlvdCBDcHJ0IEN5cmlsbGljIEN5cmwgRGVzZXJldCBEc3J0IERldmFuYWdhcmkgRGV2YSBEdXBsb3lhbiBEdXBsIEVneXB0aWFuX0hpZXJvZ2x5cGhzIEVneXAgRWxiYXNhbiBFbGJhIEV0aGlvcGljIEV0aGkgR2VvcmdpYW4gR2VvciBHbGFnb2xpdGljIEdsYWcgR290aGljIEdvdGggR3JhbnRoYSBHcmFuIEdyZWVrIEdyZWsgR3VqYXJhdGkgR3VqciBHdXJtdWtoaSBHdXJ1IEhhbiBIYW5pIEhhbmd1bCBIYW5nIEhhbnVub28gSGFubyBIYXRyYW4gSGF0ciBIZWJyZXcgSGViciBIaXJhZ2FuYSBIaXJhIEltcGVyaWFsX0FyYW1haWMgQXJtaSBJbmhlcml0ZWQgWmluaCBRYWFpIEluc2NyaXB0aW9uYWxfUGFobGF2aSBQaGxpIEluc2NyaXB0aW9uYWxfUGFydGhpYW4gUHJ0aSBKYXZhbmVzZSBKYXZhIEthaXRoaSBLdGhpIEthbm5hZGEgS25kYSBLYXRha2FuYSBLYW5hIEtheWFoX0xpIEthbGkgS2hhcm9zaHRoaSBLaGFyIEtobWVyIEtobXIgS2hvamtpIEtob2ogS2h1ZGF3YWRpIFNpbmQgTGFvIExhb28gTGF0aW4gTGF0biBMZXBjaGEgTGVwYyBMaW1idSBMaW1iIExpbmVhcl9BIExpbmEgTGluZWFyX0IgTGluYiBMaXN1IExpc3UgTHljaWFuIEx5Y2kgTHlkaWFuIEx5ZGkgTWFoYWphbmkgTWFoaiBNYWxheWFsYW0gTWx5bSBNYW5kYWljIE1hbmQgTWFuaWNoYWVhbiBNYW5pIE1hcmNoZW4gTWFyYyBNYXNhcmFtX0dvbmRpIEdvbm0gTWVldGVpX01heWVrIE10ZWkgTWVuZGVfS2lrYWt1aSBNZW5kIE1lcm9pdGljX0N1cnNpdmUgTWVyYyBNZXJvaXRpY19IaWVyb2dseXBocyBNZXJvIE1pYW8gUGxyZCBNb2RpIE1vZGkgTW9uZ29saWFuIE1vbmcgTXJvIE1yb28gTXVsdGFuaSBNdWx0IE15YW5tYXIgTXltciBOYWJhdGFlYW4gTmJhdCBOZXdfVGFpX0x1ZSBUYWx1IE5ld2EgTmV3YSBOa28gTmtvbyBOdXNodSBOc2h1IE9naGFtIE9nYW0gT2xfQ2hpa2kgT2xjayBPbGRfSHVuZ2FyaWFuIEh1bmcgT2xkX0l0YWxpYyBJdGFsIE9sZF9Ob3J0aF9BcmFiaWFuIE5hcmIgT2xkX1Blcm1pYyBQZXJtIE9sZF9QZXJzaWFuIFhwZW8gT2xkX1NvdXRoX0FyYWJpYW4gU2FyYiBPbGRfVHVya2ljIE9ya2ggT3JpeWEgT3J5YSBPc2FnZSBPc2dlIE9zbWFueWEgT3NtYSBQYWhhd2hfSG1vbmcgSG1uZyBQYWxteXJlbmUgUGFsbSBQYXVfQ2luX0hhdSBQYXVjIFBoYWdzX1BhIFBoYWcgUGhvZW5pY2lhbiBQaG54IFBzYWx0ZXJfUGFobGF2aSBQaGxwIFJlamFuZyBSam5nIFJ1bmljIFJ1bnIgU2FtYXJpdGFuIFNhbXIgU2F1cmFzaHRyYSBTYXVyIFNoYXJhZGEgU2hyZCBTaGF2aWFuIFNoYXcgU2lkZGhhbSBTaWRkIFNpZ25Xcml0aW5nIFNnbncgU2luaGFsYSBTaW5oIFNvcmFfU29tcGVuZyBTb3JhIFNveW9tYm8gU295byBTdW5kYW5lc2UgU3VuZCBTeWxvdGlfTmFncmkgU3lsbyBTeXJpYWMgU3lyYyBUYWdhbG9nIFRnbGcgVGFnYmFud2EgVGFnYiBUYWlfTGUgVGFsZSBUYWlfVGhhbSBMYW5hIFRhaV9WaWV0IFRhdnQgVGFrcmkgVGFrciBUYW1pbCBUYW1sIFRhbmd1dCBUYW5nIFRlbHVndSBUZWx1IFRoYWFuYSBUaGFhIFRoYWkgVGhhaSBUaWJldGFuIFRpYnQgVGlmaW5hZ2ggVGZuZyBUaXJodXRhIFRpcmggVWdhcml0aWMgVWdhciBWYWkgVmFpaSBXYXJhbmdfQ2l0aSBXYXJhIFlpIFlpaWkgWmFuYWJhemFyX1NxdWFyZSBaYW5iXCI7XG52YXIgZWNtYTEwU2NyaXB0VmFsdWVzID0gZWNtYTlTY3JpcHRWYWx1ZXMgKyBcIiBEb2dyYSBEb2dyIEd1bmphbGFfR29uZGkgR29uZyBIYW5pZmlfUm9oaW5neWEgUm9oZyBNYWthc2FyIE1ha2EgTWVkZWZhaWRyaW4gTWVkZiBPbGRfU29nZGlhbiBTb2dvIFNvZ2RpYW4gU29nZFwiO1xudmFyIGVjbWExMVNjcmlwdFZhbHVlcyA9IGVjbWExMFNjcmlwdFZhbHVlcyArIFwiIEVseW1haWMgRWx5bSBOYW5kaW5hZ2FyaSBOYW5kIE55aWFrZW5nX1B1YWNodWVfSG1vbmcgSG1ucCBXYW5jaG8gV2Nob1wiO1xudmFyIHVuaWNvZGVTY3JpcHRWYWx1ZXMgPSB7XG4gIDk6IGVjbWE5U2NyaXB0VmFsdWVzLFxuICAxMDogZWNtYTEwU2NyaXB0VmFsdWVzLFxuICAxMTogZWNtYTExU2NyaXB0VmFsdWVzXG59O1xuXG52YXIgZGF0YSA9IHt9O1xuZnVuY3Rpb24gYnVpbGRVbmljb2RlRGF0YShlY21hVmVyc2lvbikge1xuICB2YXIgZCA9IGRhdGFbZWNtYVZlcnNpb25dID0ge1xuICAgIGJpbmFyeTogd29yZHNSZWdleHAodW5pY29kZUJpbmFyeVByb3BlcnRpZXNbZWNtYVZlcnNpb25dICsgXCIgXCIgKyB1bmljb2RlR2VuZXJhbENhdGVnb3J5VmFsdWVzKSxcbiAgICBub25CaW5hcnk6IHtcbiAgICAgIEdlbmVyYWxfQ2F0ZWdvcnk6IHdvcmRzUmVnZXhwKHVuaWNvZGVHZW5lcmFsQ2F0ZWdvcnlWYWx1ZXMpLFxuICAgICAgU2NyaXB0OiB3b3Jkc1JlZ2V4cCh1bmljb2RlU2NyaXB0VmFsdWVzW2VjbWFWZXJzaW9uXSlcbiAgICB9XG4gIH07XG4gIGQubm9uQmluYXJ5LlNjcmlwdF9FeHRlbnNpb25zID0gZC5ub25CaW5hcnkuU2NyaXB0O1xuXG4gIGQubm9uQmluYXJ5LmdjID0gZC5ub25CaW5hcnkuR2VuZXJhbF9DYXRlZ29yeTtcbiAgZC5ub25CaW5hcnkuc2MgPSBkLm5vbkJpbmFyeS5TY3JpcHQ7XG4gIGQubm9uQmluYXJ5LnNjeCA9IGQubm9uQmluYXJ5LlNjcmlwdF9FeHRlbnNpb25zO1xufVxuYnVpbGRVbmljb2RlRGF0YSg5KTtcbmJ1aWxkVW5pY29kZURhdGEoMTApO1xuYnVpbGRVbmljb2RlRGF0YSgxMSk7XG5cbnZhciBwcCQ4ID0gUGFyc2VyLnByb3RvdHlwZTtcblxudmFyIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZSA9IGZ1bmN0aW9uIFJlZ0V4cFZhbGlkYXRpb25TdGF0ZShwYXJzZXIpIHtcbiAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gIHRoaXMudmFsaWRGbGFncyA9IFwiZ2ltXCIgKyAocGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiA/IFwidXlcIiA6IFwiXCIpICsgKHBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgPyBcInNcIiA6IFwiXCIpO1xuICB0aGlzLnVuaWNvZGVQcm9wZXJ0aWVzID0gZGF0YVtwYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMSA/IDExIDogcGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb25dO1xuICB0aGlzLnNvdXJjZSA9IFwiXCI7XG4gIHRoaXMuZmxhZ3MgPSBcIlwiO1xuICB0aGlzLnN0YXJ0ID0gMDtcbiAgdGhpcy5zd2l0Y2hVID0gZmFsc2U7XG4gIHRoaXMuc3dpdGNoTiA9IGZhbHNlO1xuICB0aGlzLnBvcyA9IDA7XG4gIHRoaXMubGFzdEludFZhbHVlID0gMDtcbiAgdGhpcy5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICB0aGlzLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSA9IGZhbHNlO1xuICB0aGlzLm51bUNhcHR1cmluZ1BhcmVucyA9IDA7XG4gIHRoaXMubWF4QmFja1JlZmVyZW5jZSA9IDA7XG4gIHRoaXMuZ3JvdXBOYW1lcyA9IFtdO1xuICB0aGlzLmJhY2tSZWZlcmVuY2VOYW1lcyA9IFtdO1xufTtcblxuUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0IChzdGFydCwgcGF0dGVybiwgZmxhZ3MpIHtcbiAgdmFyIHVuaWNvZGUgPSBmbGFncy5pbmRleE9mKFwidVwiKSAhPT0gLTE7XG4gIHRoaXMuc3RhcnQgPSBzdGFydCB8IDA7XG4gIHRoaXMuc291cmNlID0gcGF0dGVybiArIFwiXCI7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgdGhpcy5zd2l0Y2hVID0gdW5pY29kZSAmJiB0aGlzLnBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDY7XG4gIHRoaXMuc3dpdGNoTiA9IHVuaWNvZGUgJiYgdGhpcy5wYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5O1xufTtcblxuUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5yYWlzZSA9IGZ1bmN0aW9uIHJhaXNlIChtZXNzYWdlKSB7XG4gIHRoaXMucGFyc2VyLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5zdGFydCwgKFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246IC9cIiArICh0aGlzLnNvdXJjZSkgKyBcIi86IFwiICsgbWVzc2FnZSkpO1xufTtcblxuLy8gSWYgdSBmbGFnIGlzIGdpdmVuLCB0aGlzIHJldHVybnMgdGhlIGNvZGUgcG9pbnQgYXQgdGhlIGluZGV4IChpdCBjb21iaW5lcyBhIHN1cnJvZ2F0ZSBwYWlyKS5cbi8vIE90aGVyd2lzZSwgdGhpcyByZXR1cm5zIHRoZSBjb2RlIHVuaXQgb2YgdGhlIGluZGV4IChjYW4gYmUgYSBwYXJ0IG9mIGEgc3Vycm9nYXRlIHBhaXIpLlxuUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5hdCA9IGZ1bmN0aW9uIGF0IChpLCBmb3JjZVUpIHtcbiAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgdmFyIHMgPSB0aGlzLnNvdXJjZTtcbiAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgaWYgKGkgPj0gbCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIHZhciBjID0gcy5jaGFyQ29kZUF0KGkpO1xuICBpZiAoIShmb3JjZVUgfHwgdGhpcy5zd2l0Y2hVKSB8fCBjIDw9IDB4RDdGRiB8fCBjID49IDB4RTAwMCB8fCBpICsgMSA+PSBsKSB7XG4gICAgcmV0dXJuIGNcbiAgfVxuICB2YXIgbmV4dCA9IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIHJldHVybiBuZXh0ID49IDB4REMwMCAmJiBuZXh0IDw9IDB4REZGRiA/IChjIDw8IDEwKSArIG5leHQgLSAweDM1RkRDMDAgOiBjXG59O1xuXG5SZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLm5leHRJbmRleCA9IGZ1bmN0aW9uIG5leHRJbmRleCAoaSwgZm9yY2VVKSB7XG4gICAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gIHZhciBzID0gdGhpcy5zb3VyY2U7XG4gIHZhciBsID0gcy5sZW5ndGg7XG4gIGlmIChpID49IGwpIHtcbiAgICByZXR1cm4gbFxuICB9XG4gIHZhciBjID0gcy5jaGFyQ29kZUF0KGkpLCBuZXh0O1xuICBpZiAoIShmb3JjZVUgfHwgdGhpcy5zd2l0Y2hVKSB8fCBjIDw9IDB4RDdGRiB8fCBjID49IDB4RTAwMCB8fCBpICsgMSA+PSBsIHx8XG4gICAgICAobmV4dCA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhEQzAwIHx8IG5leHQgPiAweERGRkYpIHtcbiAgICByZXR1cm4gaSArIDFcbiAgfVxuICByZXR1cm4gaSArIDJcbn07XG5cblJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuY3VycmVudCA9IGZ1bmN0aW9uIGN1cnJlbnQgKGZvcmNlVSkge1xuICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICByZXR1cm4gdGhpcy5hdCh0aGlzLnBvcywgZm9yY2VVKVxufTtcblxuUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5sb29rYWhlYWQgPSBmdW5jdGlvbiBsb29rYWhlYWQgKGZvcmNlVSkge1xuICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICByZXR1cm4gdGhpcy5hdCh0aGlzLm5leHRJbmRleCh0aGlzLnBvcywgZm9yY2VVKSwgZm9yY2VVKVxufTtcblxuUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5hZHZhbmNlID0gZnVuY3Rpb24gYWR2YW5jZSAoZm9yY2VVKSB7XG4gICAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gIHRoaXMucG9zID0gdGhpcy5uZXh0SW5kZXgodGhpcy5wb3MsIGZvcmNlVSk7XG59O1xuXG5SZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLmVhdCA9IGZ1bmN0aW9uIGVhdCAoY2gsIGZvcmNlVSkge1xuICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICBpZiAodGhpcy5jdXJyZW50KGZvcmNlVSkgPT09IGNoKSB7XG4gICAgdGhpcy5hZHZhbmNlKGZvcmNlVSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbmZ1bmN0aW9uIGNvZGVQb2ludFRvU3RyaW5nKGNoKSB7XG4gIGlmIChjaCA8PSAweEZGRkYpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpIH1cbiAgY2ggLT0gMHgxMDAwMDtcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKGNoID4+IDEwKSArIDB4RDgwMCwgKGNoICYgMHgwM0ZGKSArIDB4REMwMClcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgZmxhZ3MgcGFydCBvZiBhIGdpdmVuIFJlZ0V4cExpdGVyYWwuXG4gKlxuICogQHBhcmFtIHtSZWdFeHBWYWxpZGF0aW9uU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byB2YWxpZGF0ZSBSZWdFeHAuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xucHAkOC52YWxpZGF0ZVJlZ0V4cEZsYWdzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHZhbGlkRmxhZ3MgPSBzdGF0ZS52YWxpZEZsYWdzO1xuICB2YXIgZmxhZ3MgPSBzdGF0ZS5mbGFncztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGZsYWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGZsYWcgPSBmbGFncy5jaGFyQXQoaSk7XG4gICAgaWYgKHZhbGlkRmxhZ3MuaW5kZXhPZihmbGFnKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMucmFpc2Uoc3RhdGUuc3RhcnQsIFwiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiKTtcbiAgICB9XG4gICAgaWYgKGZsYWdzLmluZGV4T2YoZmxhZywgaSArIDEpID4gLTEpIHtcbiAgICAgIHRoaXMucmFpc2Uoc3RhdGUuc3RhcnQsIFwiRHVwbGljYXRlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFnXCIpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGUgcGF0dGVybiBwYXJ0IG9mIGEgZ2l2ZW4gUmVnRXhwTGl0ZXJhbC5cbiAqXG4gKiBAcGFyYW0ge1JlZ0V4cFZhbGlkYXRpb25TdGF0ZX0gc3RhdGUgVGhlIHN0YXRlIHRvIHZhbGlkYXRlIFJlZ0V4cC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5wcCQ4LnZhbGlkYXRlUmVnRXhwUGF0dGVybiA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHRoaXMucmVnZXhwX3BhdHRlcm4oc3RhdGUpO1xuXG4gIC8vIFRoZSBnb2FsIHN5bWJvbCBmb3IgdGhlIHBhcnNlIGlzIHxQYXR0ZXJuW35VLCB+Tl18LiBJZiB0aGUgcmVzdWx0IG9mXG4gIC8vIHBhcnNpbmcgY29udGFpbnMgYSB8R3JvdXBOYW1lfCwgcmVwYXJzZSB3aXRoIHRoZSBnb2FsIHN5bWJvbFxuICAvLyB8UGF0dGVyblt+VSwgK05dfCBhbmQgdXNlIHRoaXMgcmVzdWx0IGluc3RlYWQuIFRocm93IGEgKlN5bnRheEVycm9yKlxuICAvLyBleGNlcHRpb24gaWYgX1BfIGRpZCBub3QgY29uZm9ybSB0byB0aGUgZ3JhbW1hciwgaWYgYW55IGVsZW1lbnRzIG9mIF9QX1xuICAvLyB3ZXJlIG5vdCBtYXRjaGVkIGJ5IHRoZSBwYXJzZSwgb3IgaWYgYW55IEVhcmx5IEVycm9yIGNvbmRpdGlvbnMgZXhpc3QuXG4gIGlmICghc3RhdGUuc3dpdGNoTiAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSAmJiBzdGF0ZS5ncm91cE5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICBzdGF0ZS5zd2l0Y2hOID0gdHJ1ZTtcbiAgICB0aGlzLnJlZ2V4cF9wYXR0ZXJuKHN0YXRlKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtUGF0dGVyblxucHAkOC5yZWdleHBfcGF0dGVybiA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHN0YXRlLnBvcyA9IDA7XG4gIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSA9IFwiXCI7XG4gIHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSA9IGZhbHNlO1xuICBzdGF0ZS5udW1DYXB0dXJpbmdQYXJlbnMgPSAwO1xuICBzdGF0ZS5tYXhCYWNrUmVmZXJlbmNlID0gMDtcbiAgc3RhdGUuZ3JvdXBOYW1lcy5sZW5ndGggPSAwO1xuICBzdGF0ZS5iYWNrUmVmZXJlbmNlTmFtZXMubGVuZ3RoID0gMDtcblxuICB0aGlzLnJlZ2V4cF9kaXNqdW5jdGlvbihzdGF0ZSk7XG5cbiAgaWYgKHN0YXRlLnBvcyAhPT0gc3RhdGUuc291cmNlLmxlbmd0aCkge1xuICAgIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZXMgYXMgVjguXG4gICAgaWYgKHN0YXRlLmVhdCgweDI5IC8qICkgKi8pKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIlVubWF0Y2hlZCAnKSdcIik7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5lYXQoMHg1RCAvKiBdICovKSB8fCBzdGF0ZS5lYXQoMHg3RCAvKiB9ICovKSkge1xuICAgICAgc3RhdGUucmFpc2UoXCJMb25lIHF1YW50aWZpZXIgYnJhY2tldHNcIik7XG4gICAgfVxuICB9XG4gIGlmIChzdGF0ZS5tYXhCYWNrUmVmZXJlbmNlID4gc3RhdGUubnVtQ2FwdHVyaW5nUGFyZW5zKSB7XG4gICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGVzY2FwZVwiKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IHN0YXRlLmJhY2tSZWZlcmVuY2VOYW1lczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgbmFtZSA9IGxpc3RbaV07XG5cbiAgICBpZiAoc3RhdGUuZ3JvdXBOYW1lcy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIG5hbWVkIGNhcHR1cmUgcmVmZXJlbmNlZFwiKTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLURpc2p1bmN0aW9uXG5wcCQ4LnJlZ2V4cF9kaXNqdW5jdGlvbiA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHRoaXMucmVnZXhwX2FsdGVybmF0aXZlKHN0YXRlKTtcbiAgd2hpbGUgKHN0YXRlLmVhdCgweDdDIC8qIHwgKi8pKSB7XG4gICAgdGhpcy5yZWdleHBfYWx0ZXJuYXRpdmUoc3RhdGUpO1xuICB9XG5cbiAgLy8gTWFrZSB0aGUgc2FtZSBtZXNzYWdlIGFzIFY4LlxuICBpZiAodGhpcy5yZWdleHBfZWF0UXVhbnRpZmllcihzdGF0ZSwgdHJ1ZSkpIHtcbiAgICBzdGF0ZS5yYWlzZShcIk5vdGhpbmcgdG8gcmVwZWF0XCIpO1xuICB9XG4gIGlmIChzdGF0ZS5lYXQoMHg3QiAvKiB7ICovKSkge1xuICAgIHN0YXRlLnJhaXNlKFwiTG9uZSBxdWFudGlmaWVyIGJyYWNrZXRzXCIpO1xuICB9XG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1BbHRlcm5hdGl2ZVxucHAkOC5yZWdleHBfYWx0ZXJuYXRpdmUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB3aGlsZSAoc3RhdGUucG9zIDwgc3RhdGUuc291cmNlLmxlbmd0aCAmJiB0aGlzLnJlZ2V4cF9lYXRUZXJtKHN0YXRlKSlcbiAgICB7IH1cbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1UZXJtXG5wcCQ4LnJlZ2V4cF9lYXRUZXJtID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgaWYgKHRoaXMucmVnZXhwX2VhdEFzc2VydGlvbihzdGF0ZSkpIHtcbiAgICAvLyBIYW5kbGUgYFF1YW50aWZpYWJsZUFzc2VydGlvbiBRdWFudGlmaWVyYCBhbHRlcm5hdGl2ZS5cbiAgICAvLyBgc3RhdGUubGFzdEFzc2VydGlvbklzUXVhbnRpZmlhYmxlYCBpcyB0cnVlIGlmIHRoZSBsYXN0IGVhdGVuIEFzc2VydGlvblxuICAgIC8vIGlzIGEgUXVhbnRpZmlhYmxlQXNzZXJ0aW9uLlxuICAgIGlmIChzdGF0ZS5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgJiYgdGhpcy5yZWdleHBfZWF0UXVhbnRpZmllcihzdGF0ZSkpIHtcbiAgICAgIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZSBhcyBWOC5cbiAgICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBxdWFudGlmaWVyXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHN0YXRlLnN3aXRjaFUgPyB0aGlzLnJlZ2V4cF9lYXRBdG9tKHN0YXRlKSA6IHRoaXMucmVnZXhwX2VhdEV4dGVuZGVkQXRvbShzdGF0ZSkpIHtcbiAgICB0aGlzLnJlZ2V4cF9lYXRRdWFudGlmaWVyKHN0YXRlKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQXNzZXJ0aW9uXG5wcCQ4LnJlZ2V4cF9lYXRBc3NlcnRpb24gPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSA9IGZhbHNlO1xuXG4gIC8vIF4sICRcbiAgaWYgKHN0YXRlLmVhdCgweDVFIC8qIF4gKi8pIHx8IHN0YXRlLmVhdCgweDI0IC8qICQgKi8pKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIFxcYiBcXEJcbiAgaWYgKHN0YXRlLmVhdCgweDVDIC8qIFxcICovKSkge1xuICAgIGlmIChzdGF0ZS5lYXQoMHg0MiAvKiBCICovKSB8fCBzdGF0ZS5lYXQoMHg2MiAvKiBiICovKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gIH1cblxuICAvLyBMb29rYWhlYWQgLyBMb29rYmVoaW5kXG4gIGlmIChzdGF0ZS5lYXQoMHgyOCAvKiAoICovKSAmJiBzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKSkge1xuICAgIHZhciBsb29rYmVoaW5kID0gZmFsc2U7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5KSB7XG4gICAgICBsb29rYmVoaW5kID0gc3RhdGUuZWF0KDB4M0MgLyogPCAqLyk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5lYXQoMHgzRCAvKiA9ICovKSB8fCBzdGF0ZS5lYXQoMHgyMSAvKiAhICovKSkge1xuICAgICAgdGhpcy5yZWdleHBfZGlzanVuY3Rpb24oc3RhdGUpO1xuICAgICAgaWYgKCFzdGF0ZS5lYXQoMHgyOSAvKiApICovKSkge1xuICAgICAgICBzdGF0ZS5yYWlzZShcIlVudGVybWluYXRlZCBncm91cFwiKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZSA9ICFsb29rYmVoaW5kO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1RdWFudGlmaWVyXG5wcCQ4LnJlZ2V4cF9lYXRRdWFudGlmaWVyID0gZnVuY3Rpb24oc3RhdGUsIG5vRXJyb3IpIHtcbiAgaWYgKCBub0Vycm9yID09PSB2b2lkIDAgKSBub0Vycm9yID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMucmVnZXhwX2VhdFF1YW50aWZpZXJQcmVmaXgoc3RhdGUsIG5vRXJyb3IpKSB7XG4gICAgc3RhdGUuZWF0KDB4M0YgLyogPyAqLyk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLVF1YW50aWZpZXJQcmVmaXhcbnBwJDgucmVnZXhwX2VhdFF1YW50aWZpZXJQcmVmaXggPSBmdW5jdGlvbihzdGF0ZSwgbm9FcnJvcikge1xuICByZXR1cm4gKFxuICAgIHN0YXRlLmVhdCgweDJBIC8qICogKi8pIHx8XG4gICAgc3RhdGUuZWF0KDB4MkIgLyogKyAqLykgfHxcbiAgICBzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdEJyYWNlZFF1YW50aWZpZXIoc3RhdGUsIG5vRXJyb3IpXG4gIClcbn07XG5wcCQ4LnJlZ2V4cF9lYXRCcmFjZWRRdWFudGlmaWVyID0gZnVuY3Rpb24oc3RhdGUsIG5vRXJyb3IpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICBpZiAoc3RhdGUuZWF0KDB4N0IgLyogeyAqLykpIHtcbiAgICB2YXIgbWluID0gMCwgbWF4ID0gLTE7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdERlY2ltYWxEaWdpdHMoc3RhdGUpKSB7XG4gICAgICBtaW4gPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICBpZiAoc3RhdGUuZWF0KDB4MkMgLyogLCAqLykgJiYgdGhpcy5yZWdleHBfZWF0RGVjaW1hbERpZ2l0cyhzdGF0ZSkpIHtcbiAgICAgICAgbWF4ID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pKSB7XG4gICAgICAgIC8vIFN5bnRheEVycm9yIGluIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNzZWMtdGVybVxuICAgICAgICBpZiAobWF4ICE9PSAtMSAmJiBtYXggPCBtaW4gJiYgIW5vRXJyb3IpIHtcbiAgICAgICAgICBzdGF0ZS5yYWlzZShcIm51bWJlcnMgb3V0IG9mIG9yZGVyIGluIHt9IHF1YW50aWZpZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXRlLnN3aXRjaFUgJiYgIW5vRXJyb3IpIHtcbiAgICAgIHN0YXRlLnJhaXNlKFwiSW5jb21wbGV0ZSBxdWFudGlmaWVyXCIpO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUF0b21cbnBwJDgucmVnZXhwX2VhdEF0b20gPSBmdW5jdGlvbihzdGF0ZSkge1xuICByZXR1cm4gKFxuICAgIHRoaXMucmVnZXhwX2VhdFBhdHRlcm5DaGFyYWN0ZXJzKHN0YXRlKSB8fFxuICAgIHN0YXRlLmVhdCgweDJFIC8qIC4gKi8pIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0UmV2ZXJzZVNvbGlkdXNBdG9tRXNjYXBlKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckNsYXNzKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdFVuY2FwdHVyaW5nR3JvdXAoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0Q2FwdHVyaW5nR3JvdXAoc3RhdGUpXG4gIClcbn07XG5wcCQ4LnJlZ2V4cF9lYXRSZXZlcnNlU29saWR1c0F0b21Fc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIGlmIChzdGF0ZS5lYXQoMHg1QyAvKiBcXCAqLykpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0QXRvbUVzY2FwZShzdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcbnBwJDgucmVnZXhwX2VhdFVuY2FwdHVyaW5nR3JvdXAgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIGlmIChzdGF0ZS5lYXQoMHgyOCAvKiAoICovKSkge1xuICAgIGlmIChzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKSAmJiBzdGF0ZS5lYXQoMHgzQSAvKiA6ICovKSkge1xuICAgICAgdGhpcy5yZWdleHBfZGlzanVuY3Rpb24oc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLmVhdCgweDI5IC8qICkgKi8pKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICBzdGF0ZS5yYWlzZShcIlVudGVybWluYXRlZCBncm91cFwiKTtcbiAgICB9XG4gICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xucHAkOC5yZWdleHBfZWF0Q2FwdHVyaW5nR3JvdXAgPSBmdW5jdGlvbihzdGF0ZSkge1xuICBpZiAoc3RhdGUuZWF0KDB4MjggLyogKCAqLykpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkpIHtcbiAgICAgIHRoaXMucmVnZXhwX2dyb3VwU3BlY2lmaWVyKHN0YXRlKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmN1cnJlbnQoKSA9PT0gMHgzRiAvKiA/ICovKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZ3JvdXBcIik7XG4gICAgfVxuICAgIHRoaXMucmVnZXhwX2Rpc2p1bmN0aW9uKHN0YXRlKTtcbiAgICBpZiAoc3RhdGUuZWF0KDB4MjkgLyogKSAqLykpIHtcbiAgICAgIHN0YXRlLm51bUNhcHR1cmluZ1BhcmVucyArPSAxO1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgc3RhdGUucmFpc2UoXCJVbnRlcm1pbmF0ZWQgZ3JvdXBcIik7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItRXh0ZW5kZWRBdG9tXG5wcCQ4LnJlZ2V4cF9lYXRFeHRlbmRlZEF0b20gPSBmdW5jdGlvbihzdGF0ZSkge1xuICByZXR1cm4gKFxuICAgIHN0YXRlLmVhdCgweDJFIC8qIC4gKi8pIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0UmV2ZXJzZVNvbGlkdXNBdG9tRXNjYXBlKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckNsYXNzKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdFVuY2FwdHVyaW5nR3JvdXAoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0Q2FwdHVyaW5nR3JvdXAoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0SW52YWxpZEJyYWNlZFF1YW50aWZpZXIoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0RXh0ZW5kZWRQYXR0ZXJuQ2hhcmFjdGVyKHN0YXRlKVxuICApXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItSW52YWxpZEJyYWNlZFF1YW50aWZpZXJcbnBwJDgucmVnZXhwX2VhdEludmFsaWRCcmFjZWRRdWFudGlmaWVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgaWYgKHRoaXMucmVnZXhwX2VhdEJyYWNlZFF1YW50aWZpZXIoc3RhdGUsIHRydWUpKSB7XG4gICAgc3RhdGUucmFpc2UoXCJOb3RoaW5nIHRvIHJlcGVhdFwiKTtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLVN5bnRheENoYXJhY3RlclxucHAkOC5yZWdleHBfZWF0U3ludGF4Q2hhcmFjdGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoaXNTeW50YXhDaGFyYWN0ZXIoY2gpKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuZnVuY3Rpb24gaXNTeW50YXhDaGFyYWN0ZXIoY2gpIHtcbiAgcmV0dXJuIChcbiAgICBjaCA9PT0gMHgyNCAvKiAkICovIHx8XG4gICAgY2ggPj0gMHgyOCAvKiAoICovICYmIGNoIDw9IDB4MkIgLyogKyAqLyB8fFxuICAgIGNoID09PSAweDJFIC8qIC4gKi8gfHxcbiAgICBjaCA9PT0gMHgzRiAvKiA/ICovIHx8XG4gICAgY2ggPj0gMHg1QiAvKiBbICovICYmIGNoIDw9IDB4NUUgLyogXiAqLyB8fFxuICAgIGNoID49IDB4N0IgLyogeyAqLyAmJiBjaCA8PSAweDdEIC8qIH0gKi9cbiAgKVxufVxuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1QYXR0ZXJuQ2hhcmFjdGVyXG4vLyBCdXQgZWF0IGVhZ2VyLlxucHAkOC5yZWdleHBfZWF0UGF0dGVybkNoYXJhY3RlcnMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHZhciBjaCA9IDA7XG4gIHdoaWxlICgoY2ggPSBzdGF0ZS5jdXJyZW50KCkpICE9PSAtMSAmJiAhaXNTeW50YXhDaGFyYWN0ZXIoY2gpKSB7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICB9XG4gIHJldHVybiBzdGF0ZS5wb3MgIT09IHN0YXJ0XG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItRXh0ZW5kZWRQYXR0ZXJuQ2hhcmFjdGVyXG5wcCQ4LnJlZ2V4cF9lYXRFeHRlbmRlZFBhdHRlcm5DaGFyYWN0ZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gIGlmIChcbiAgICBjaCAhPT0gLTEgJiZcbiAgICBjaCAhPT0gMHgyNCAvKiAkICovICYmXG4gICAgIShjaCA+PSAweDI4IC8qICggKi8gJiYgY2ggPD0gMHgyQiAvKiArICovKSAmJlxuICAgIGNoICE9PSAweDJFIC8qIC4gKi8gJiZcbiAgICBjaCAhPT0gMHgzRiAvKiA/ICovICYmXG4gICAgY2ggIT09IDB4NUIgLyogWyAqLyAmJlxuICAgIGNoICE9PSAweDVFIC8qIF4gKi8gJiZcbiAgICBjaCAhPT0gMHg3QyAvKiB8ICovXG4gICkge1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gR3JvdXBTcGVjaWZpZXIgOjpcbi8vICAgW2VtcHR5XVxuLy8gICBgP2AgR3JvdXBOYW1lXG5wcCQ4LnJlZ2V4cF9ncm91cFNwZWNpZmllciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5lYXQoMHgzRiAvKiA/ICovKSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRHcm91cE5hbWUoc3RhdGUpKSB7XG4gICAgICBpZiAoc3RhdGUuZ3JvdXBOYW1lcy5pbmRleE9mKHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSkgIT09IC0xKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiRHVwbGljYXRlIGNhcHR1cmUgZ3JvdXAgbmFtZVwiKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLmdyb3VwTmFtZXMucHVzaChzdGF0ZS5sYXN0U3RyaW5nVmFsdWUpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBncm91cFwiKTtcbiAgfVxufTtcblxuLy8gR3JvdXBOYW1lIDo6XG4vLyAgIGA8YCBSZWdFeHBJZGVudGlmaWVyTmFtZSBgPmBcbi8vIE5vdGU6IHRoaXMgdXBkYXRlcyBgc3RhdGUubGFzdFN0cmluZ1ZhbHVlYCBwcm9wZXJ0eSB3aXRoIHRoZSBlYXRlbiBuYW1lLlxucHAkOC5yZWdleHBfZWF0R3JvdXBOYW1lID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgaWYgKHN0YXRlLmVhdCgweDNDIC8qIDwgKi8pKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdFJlZ0V4cElkZW50aWZpZXJOYW1lKHN0YXRlKSAmJiBzdGF0ZS5lYXQoMHgzRSAvKiA+ICovKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZVwiKTtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIFJlZ0V4cElkZW50aWZpZXJOYW1lIDo6XG4vLyAgIFJlZ0V4cElkZW50aWZpZXJTdGFydFxuLy8gICBSZWdFeHBJZGVudGlmaWVyTmFtZSBSZWdFeHBJZGVudGlmaWVyUGFydFxuLy8gTm90ZTogdGhpcyB1cGRhdGVzIGBzdGF0ZS5sYXN0U3RyaW5nVmFsdWVgIHByb3BlcnR5IHdpdGggdGhlIGVhdGVuIG5hbWUuXG5wcCQ4LnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyTmFtZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSA9IFwiXCI7XG4gIGlmICh0aGlzLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyU3RhcnQoc3RhdGUpKSB7XG4gICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlICs9IGNvZGVQb2ludFRvU3RyaW5nKHN0YXRlLmxhc3RJbnRWYWx1ZSk7XG4gICAgd2hpbGUgKHRoaXMucmVnZXhwX2VhdFJlZ0V4cElkZW50aWZpZXJQYXJ0KHN0YXRlKSkge1xuICAgICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlICs9IGNvZGVQb2ludFRvU3RyaW5nKHN0YXRlLmxhc3RJbnRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBSZWdFeHBJZGVudGlmaWVyU3RhcnQgOjpcbi8vICAgVW5pY29kZUlEU3RhcnRcbi8vICAgYCRgXG4vLyAgIGBfYFxuLy8gICBgXFxgIFJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZVsrVV1cbnBwJDgucmVnZXhwX2VhdFJlZ0V4cElkZW50aWZpZXJTdGFydCA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgdmFyIGZvcmNlVSA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMTtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudChmb3JjZVUpO1xuICBzdGF0ZS5hZHZhbmNlKGZvcmNlVSk7XG5cbiAgaWYgKGNoID09PSAweDVDIC8qIFxcICovICYmIHRoaXMucmVnZXhwX2VhdFJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZShzdGF0ZSwgZm9yY2VVKSkge1xuICAgIGNoID0gc3RhdGUubGFzdEludFZhbHVlO1xuICB9XG4gIGlmIChpc1JlZ0V4cElkZW50aWZpZXJTdGFydChjaCkpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaDtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgc3RhdGUucG9zID0gc3RhcnQ7XG4gIHJldHVybiBmYWxzZVxufTtcbmZ1bmN0aW9uIGlzUmVnRXhwSWRlbnRpZmllclN0YXJ0KGNoKSB7XG4gIHJldHVybiBpc0lkZW50aWZpZXJTdGFydChjaCwgdHJ1ZSkgfHwgY2ggPT09IDB4MjQgLyogJCAqLyB8fCBjaCA9PT0gMHg1RiAvKiBfICovXG59XG5cbi8vIFJlZ0V4cElkZW50aWZpZXJQYXJ0IDo6XG4vLyAgIFVuaWNvZGVJRENvbnRpbnVlXG4vLyAgIGAkYFxuLy8gICBgX2Bcbi8vICAgYFxcYCBSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VbK1VdXG4vLyAgIDxaV05KPlxuLy8gICA8WldKPlxucHAkOC5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllclBhcnQgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHZhciBmb3JjZVUgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTE7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoZm9yY2VVKTtcbiAgc3RhdGUuYWR2YW5jZShmb3JjZVUpO1xuXG4gIGlmIChjaCA9PT0gMHg1QyAvKiBcXCAqLyAmJiB0aGlzLnJlZ2V4cF9lYXRSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2Uoc3RhdGUsIGZvcmNlVSkpIHtcbiAgICBjaCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgfVxuICBpZiAoaXNSZWdFeHBJZGVudGlmaWVyUGFydChjaCkpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaDtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgc3RhdGUucG9zID0gc3RhcnQ7XG4gIHJldHVybiBmYWxzZVxufTtcbmZ1bmN0aW9uIGlzUmVnRXhwSWRlbnRpZmllclBhcnQoY2gpIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllckNoYXIoY2gsIHRydWUpIHx8IGNoID09PSAweDI0IC8qICQgKi8gfHwgY2ggPT09IDB4NUYgLyogXyAqLyB8fCBjaCA9PT0gMHgyMDBDIC8qIDxaV05KPiAqLyB8fCBjaCA9PT0gMHgyMDBEIC8qIDxaV0o+ICovXG59XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1BdG9tRXNjYXBlXG5wcCQ4LnJlZ2V4cF9lYXRBdG9tRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgaWYgKFxuICAgIHRoaXMucmVnZXhwX2VhdEJhY2tSZWZlcmVuY2Uoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3NFc2NhcGUoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyRXNjYXBlKHN0YXRlKSB8fFxuICAgIChzdGF0ZS5zd2l0Y2hOICYmIHRoaXMucmVnZXhwX2VhdEtHcm91cE5hbWUoc3RhdGUpKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgLy8gTWFrZSB0aGUgc2FtZSBtZXNzYWdlIGFzIFY4LlxuICAgIGlmIChzdGF0ZS5jdXJyZW50KCkgPT09IDB4NjMgLyogYyAqLykge1xuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHVuaWNvZGUgZXNjYXBlXCIpO1xuICAgIH1cbiAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZXNjYXBlXCIpO1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcbnBwJDgucmVnZXhwX2VhdEJhY2tSZWZlcmVuY2UgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIGlmICh0aGlzLnJlZ2V4cF9lYXREZWNpbWFsRXNjYXBlKHN0YXRlKSkge1xuICAgIHZhciBuID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICAvLyBGb3IgU3ludGF4RXJyb3IgaW4gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3NlYy1hdG9tZXNjYXBlXG4gICAgICBpZiAobiA+IHN0YXRlLm1heEJhY2tSZWZlcmVuY2UpIHtcbiAgICAgICAgc3RhdGUubWF4QmFja1JlZmVyZW5jZSA9IG47XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAobiA8PSBzdGF0ZS5udW1DYXB0dXJpbmdQYXJlbnMpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcbnBwJDgucmVnZXhwX2VhdEtHcm91cE5hbWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICBpZiAoc3RhdGUuZWF0KDB4NkIgLyogayAqLykpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0R3JvdXBOYW1lKHN0YXRlKSkge1xuICAgICAgc3RhdGUuYmFja1JlZmVyZW5jZU5hbWVzLnB1c2goc3RhdGUubGFzdFN0cmluZ1ZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBuYW1lZCByZWZlcmVuY2VcIik7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQ2hhcmFjdGVyRXNjYXBlXG5wcCQ4LnJlZ2V4cF9lYXRDaGFyYWN0ZXJFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICByZXR1cm4gKFxuICAgIHRoaXMucmVnZXhwX2VhdENvbnRyb2xFc2NhcGUoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0Q0NvbnRyb2xMZXR0ZXIoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0WmVybyhzdGF0ZSkgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRIZXhFc2NhcGVTZXF1ZW5jZShzdGF0ZSkgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2Uoc3RhdGUsIGZhbHNlKSB8fFxuICAgICghc3RhdGUuc3dpdGNoVSAmJiB0aGlzLnJlZ2V4cF9lYXRMZWdhY3lPY3RhbEVzY2FwZVNlcXVlbmNlKHN0YXRlKSkgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRJZGVudGl0eUVzY2FwZShzdGF0ZSlcbiAgKVxufTtcbnBwJDgucmVnZXhwX2VhdENDb250cm9sTGV0dGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICBpZiAoc3RhdGUuZWF0KDB4NjMgLyogYyAqLykpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0Q29udHJvbExldHRlcihzdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcbnBwJDgucmVnZXhwX2VhdFplcm8gPSBmdW5jdGlvbihzdGF0ZSkge1xuICBpZiAoc3RhdGUuY3VycmVudCgpID09PSAweDMwIC8qIDAgKi8gJiYgIWlzRGVjaW1hbERpZ2l0KHN0YXRlLmxvb2thaGVhZCgpKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1Db250cm9sRXNjYXBlXG5wcCQ4LnJlZ2V4cF9lYXRDb250cm9sRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoY2ggPT09IDB4NzQgLyogdCAqLykge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MDk7IC8qIFxcdCAqL1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChjaCA9PT0gMHg2RSAvKiBuICovKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgwQTsgLyogXFxuICovXG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGNoID09PSAweDc2IC8qIHYgKi8pIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDBCOyAvKiBcXHYgKi9cbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoY2ggPT09IDB4NjYgLyogZiAqLykge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MEM7IC8qIFxcZiAqL1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChjaCA9PT0gMHg3MiAvKiByICovKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgwRDsgLyogXFxyICovXG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1Db250cm9sTGV0dGVyXG5wcCQ4LnJlZ2V4cF9lYXRDb250cm9sTGV0dGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoaXNDb250cm9sTGV0dGVyKGNoKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoICUgMHgyMDtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5mdW5jdGlvbiBpc0NvbnRyb2xMZXR0ZXIoY2gpIHtcbiAgcmV0dXJuIChcbiAgICAoY2ggPj0gMHg0MSAvKiBBICovICYmIGNoIDw9IDB4NUEgLyogWiAqLykgfHxcbiAgICAoY2ggPj0gMHg2MSAvKiBhICovICYmIGNoIDw9IDB4N0EgLyogeiAqLylcbiAgKVxufVxuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1SZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VcbnBwJDgucmVnZXhwX2VhdFJlZ0V4cFVuaWNvZGVFc2NhcGVTZXF1ZW5jZSA9IGZ1bmN0aW9uKHN0YXRlLCBmb3JjZVUpIHtcbiAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgdmFyIHN3aXRjaFUgPSBmb3JjZVUgfHwgc3RhdGUuc3dpdGNoVTtcblxuICBpZiAoc3RhdGUuZWF0KDB4NzUgLyogdSAqLykpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0Rml4ZWRIZXhEaWdpdHMoc3RhdGUsIDQpKSB7XG4gICAgICB2YXIgbGVhZCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgIGlmIChzd2l0Y2hVICYmIGxlYWQgPj0gMHhEODAwICYmIGxlYWQgPD0gMHhEQkZGKSB7XG4gICAgICAgIHZhciBsZWFkU3Vycm9nYXRlRW5kID0gc3RhdGUucG9zO1xuICAgICAgICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pICYmIHN0YXRlLmVhdCgweDc1IC8qIHUgKi8pICYmIHRoaXMucmVnZXhwX2VhdEZpeGVkSGV4RGlnaXRzKHN0YXRlLCA0KSkge1xuICAgICAgICAgIHZhciB0cmFpbCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgICAgICBpZiAodHJhaWwgPj0gMHhEQzAwICYmIHRyYWlsIDw9IDB4REZGRikge1xuICAgICAgICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gKGxlYWQgLSAweEQ4MDApICogMHg0MDAgKyAodHJhaWwgLSAweERDMDApICsgMHgxMDAwMDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlLnBvcyA9IGxlYWRTdXJyb2dhdGVFbmQ7XG4gICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGxlYWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBzd2l0Y2hVICYmXG4gICAgICBzdGF0ZS5lYXQoMHg3QiAvKiB7ICovKSAmJlxuICAgICAgdGhpcy5yZWdleHBfZWF0SGV4RGlnaXRzKHN0YXRlKSAmJlxuICAgICAgc3RhdGUuZWF0KDB4N0QgLyogfSAqLykgJiZcbiAgICAgIGlzVmFsaWRVbmljb2RlKHN0YXRlLmxhc3RJbnRWYWx1ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChzd2l0Y2hVKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgdW5pY29kZSBlc2NhcGVcIik7XG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59O1xuZnVuY3Rpb24gaXNWYWxpZFVuaWNvZGUoY2gpIHtcbiAgcmV0dXJuIGNoID49IDAgJiYgY2ggPD0gMHgxMEZGRkZcbn1cblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUlkZW50aXR5RXNjYXBlXG5wcCQ4LnJlZ2V4cF9lYXRJZGVudGl0eUVzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdFN5bnRheENoYXJhY3RlcihzdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChzdGF0ZS5lYXQoMHgyRiAvKiAvICovKSkge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgyRjsgLyogLyAqL1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gIGlmIChjaCAhPT0gMHg2MyAvKiBjICovICYmICghc3RhdGUuc3dpdGNoTiB8fCBjaCAhPT0gMHg2QiAvKiBrICovKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoO1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1EZWNpbWFsRXNjYXBlXG5wcCQ4LnJlZ2V4cF9lYXREZWNpbWFsRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoY2ggPj0gMHgzMSAvKiAxICovICYmIGNoIDw9IDB4MzkgLyogOSAqLykge1xuICAgIGRvIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDEwICogc3RhdGUubGFzdEludFZhbHVlICsgKGNoIC0gMHgzMCAvKiAwICovKTtcbiAgICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICB9IHdoaWxlICgoY2ggPSBzdGF0ZS5jdXJyZW50KCkpID49IDB4MzAgLyogMCAqLyAmJiBjaCA8PSAweDM5IC8qIDkgKi8pXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNoYXJhY3RlckNsYXNzRXNjYXBlXG5wcCQ4LnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzc0VzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcblxuICBpZiAoaXNDaGFyYWN0ZXJDbGFzc0VzY2FwZShjaCkpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAtMTtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChcbiAgICBzdGF0ZS5zd2l0Y2hVICYmXG4gICAgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiZcbiAgICAoY2ggPT09IDB4NTAgLyogUCAqLyB8fCBjaCA9PT0gMHg3MCAvKiBwICovKVxuICApIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAtMTtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgaWYgKFxuICAgICAgc3RhdGUuZWF0KDB4N0IgLyogeyAqLykgJiZcbiAgICAgIHRoaXMucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlRXhwcmVzc2lvbihzdGF0ZSkgJiZcbiAgICAgIHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgcHJvcGVydHkgbmFtZVwiKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufTtcbmZ1bmN0aW9uIGlzQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoY2gpIHtcbiAgcmV0dXJuIChcbiAgICBjaCA9PT0gMHg2NCAvKiBkICovIHx8XG4gICAgY2ggPT09IDB4NDQgLyogRCAqLyB8fFxuICAgIGNoID09PSAweDczIC8qIHMgKi8gfHxcbiAgICBjaCA9PT0gMHg1MyAvKiBTICovIHx8XG4gICAgY2ggPT09IDB4NzcgLyogdyAqLyB8fFxuICAgIGNoID09PSAweDU3IC8qIFcgKi9cbiAgKVxufVxuXG4vLyBVbmljb2RlUHJvcGVydHlWYWx1ZUV4cHJlc3Npb24gOjpcbi8vICAgVW5pY29kZVByb3BlcnR5TmFtZSBgPWAgVW5pY29kZVByb3BlcnR5VmFsdWVcbi8vICAgTG9uZVVuaWNvZGVQcm9wZXJ0eU5hbWVPclZhbHVlXG5wcCQ4LnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlWYWx1ZUV4cHJlc3Npb24gPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG5cbiAgLy8gVW5pY29kZVByb3BlcnR5TmFtZSBgPWAgVW5pY29kZVByb3BlcnR5VmFsdWVcbiAgaWYgKHRoaXMucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eU5hbWUoc3RhdGUpICYmIHN0YXRlLmVhdCgweDNEIC8qID0gKi8pKSB7XG4gICAgdmFyIG5hbWUgPSBzdGF0ZS5sYXN0U3RyaW5nVmFsdWU7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlKHN0YXRlKSkge1xuICAgICAgdmFyIHZhbHVlID0gc3RhdGUubGFzdFN0cmluZ1ZhbHVlO1xuICAgICAgdGhpcy5yZWdleHBfdmFsaWRhdGVVbmljb2RlUHJvcGVydHlOYW1lQW5kVmFsdWUoc3RhdGUsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHN0YXRlLnBvcyA9IHN0YXJ0O1xuXG4gIC8vIExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZVxuICBpZiAodGhpcy5yZWdleHBfZWF0TG9uZVVuaWNvZGVQcm9wZXJ0eU5hbWVPclZhbHVlKHN0YXRlKSkge1xuICAgIHZhciBuYW1lT3JWYWx1ZSA9IHN0YXRlLmxhc3RTdHJpbmdWYWx1ZTtcbiAgICB0aGlzLnJlZ2V4cF92YWxpZGF0ZVVuaWNvZGVQcm9wZXJ0eU5hbWVPclZhbHVlKHN0YXRlLCBuYW1lT3JWYWx1ZSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5wcCQ4LnJlZ2V4cF92YWxpZGF0ZVVuaWNvZGVQcm9wZXJ0eU5hbWVBbmRWYWx1ZSA9IGZ1bmN0aW9uKHN0YXRlLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAoIWhhcyhzdGF0ZS51bmljb2RlUHJvcGVydGllcy5ub25CaW5hcnksIG5hbWUpKVxuICAgIHsgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7IH1cbiAgaWYgKCFzdGF0ZS51bmljb2RlUHJvcGVydGllcy5ub25CaW5hcnlbbmFtZV0udGVzdCh2YWx1ZSkpXG4gICAgeyBzdGF0ZS5yYWlzZShcIkludmFsaWQgcHJvcGVydHkgdmFsdWVcIik7IH1cbn07XG5wcCQ4LnJlZ2V4cF92YWxpZGF0ZVVuaWNvZGVQcm9wZXJ0eU5hbWVPclZhbHVlID0gZnVuY3Rpb24oc3RhdGUsIG5hbWVPclZhbHVlKSB7XG4gIGlmICghc3RhdGUudW5pY29kZVByb3BlcnRpZXMuYmluYXJ5LnRlc3QobmFtZU9yVmFsdWUpKVxuICAgIHsgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7IH1cbn07XG5cbi8vIFVuaWNvZGVQcm9wZXJ0eU5hbWUgOjpcbi8vICAgVW5pY29kZVByb3BlcnR5TmFtZUNoYXJhY3RlcnNcbnBwJDgucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eU5hbWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgY2ggPSAwO1xuICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICB3aGlsZSAoaXNVbmljb2RlUHJvcGVydHlOYW1lQ2hhcmFjdGVyKGNoID0gc3RhdGUuY3VycmVudCgpKSkge1xuICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSArPSBjb2RlUG9pbnRUb1N0cmluZyhjaCk7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICB9XG4gIHJldHVybiBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgIT09IFwiXCJcbn07XG5mdW5jdGlvbiBpc1VuaWNvZGVQcm9wZXJ0eU5hbWVDaGFyYWN0ZXIoY2gpIHtcbiAgcmV0dXJuIGlzQ29udHJvbExldHRlcihjaCkgfHwgY2ggPT09IDB4NUYgLyogXyAqL1xufVxuXG4vLyBVbmljb2RlUHJvcGVydHlWYWx1ZSA6OlxuLy8gICBVbmljb2RlUHJvcGVydHlWYWx1ZUNoYXJhY3RlcnNcbnBwJDgucmVnZXhwX2VhdFVuaWNvZGVQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gMDtcbiAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgd2hpbGUgKGlzVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXIoY2ggPSBzdGF0ZS5jdXJyZW50KCkpKSB7XG4gICAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlICs9IGNvZGVQb2ludFRvU3RyaW5nKGNoKTtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSAhPT0gXCJcIlxufTtcbmZ1bmN0aW9uIGlzVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXIoY2gpIHtcbiAgcmV0dXJuIGlzVW5pY29kZVByb3BlcnR5TmFtZUNoYXJhY3RlcihjaCkgfHwgaXNEZWNpbWFsRGlnaXQoY2gpXG59XG5cbi8vIExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZSA6OlxuLy8gICBVbmljb2RlUHJvcGVydHlWYWx1ZUNoYXJhY3RlcnNcbnBwJDgucmVnZXhwX2VhdExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHJldHVybiB0aGlzLnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlWYWx1ZShzdGF0ZSlcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNoYXJhY3RlckNsYXNzXG5wcCQ4LnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzcyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5lYXQoMHg1QiAvKiBbICovKSkge1xuICAgIHN0YXRlLmVhdCgweDVFIC8qIF4gKi8pO1xuICAgIHRoaXMucmVnZXhwX2NsYXNzUmFuZ2VzKHN0YXRlKTtcbiAgICBpZiAoc3RhdGUuZWF0KDB4NUQgLyogXSAqLykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIFVucmVhY2hhYmxlIHNpbmNlIGl0IHRocmV3IFwidW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiIGVycm9yIGJlZm9yZS5cbiAgICBzdGF0ZS5yYWlzZShcIlVudGVybWluYXRlZCBjaGFyYWN0ZXIgY2xhc3NcIik7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DbGFzc1Jhbmdlc1xuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtTm9uZW1wdHlDbGFzc1Jhbmdlc1xuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtTm9uZW1wdHlDbGFzc1Jhbmdlc05vRGFzaFxucHAkOC5yZWdleHBfY2xhc3NSYW5nZXMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB3aGlsZSAodGhpcy5yZWdleHBfZWF0Q2xhc3NBdG9tKHN0YXRlKSkge1xuICAgIHZhciBsZWZ0ID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgIGlmIChzdGF0ZS5lYXQoMHgyRCAvKiAtICovKSAmJiB0aGlzLnJlZ2V4cF9lYXRDbGFzc0F0b20oc3RhdGUpKSB7XG4gICAgICB2YXIgcmlnaHQgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICBpZiAoc3RhdGUuc3dpdGNoVSAmJiAobGVmdCA9PT0gLTEgfHwgcmlnaHQgPT09IC0xKSkge1xuICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzXCIpO1xuICAgICAgfVxuICAgICAgaWYgKGxlZnQgIT09IC0xICYmIHJpZ2h0ICE9PSAtMSAmJiBsZWZ0ID4gcmlnaHQpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJSYW5nZSBvdXQgb2Ygb3JkZXIgaW4gY2hhcmFjdGVyIGNsYXNzXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ2xhc3NBdG9tXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DbGFzc0F0b21Ob0Rhc2hcbnBwJDgucmVnZXhwX2VhdENsYXNzQXRvbSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcblxuICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdENsYXNzRXNjYXBlKHN0YXRlKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZSBhcyBWOC5cbiAgICAgIHZhciBjaCQxID0gc3RhdGUuY3VycmVudCgpO1xuICAgICAgaWYgKGNoJDEgPT09IDB4NjMgLyogYyAqLyB8fCBpc09jdGFsRGlnaXQoY2gkMSkpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGNsYXNzIGVzY2FwZVwiKTtcbiAgICAgIH1cbiAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBlc2NhcGVcIik7XG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG5cbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoY2ggIT09IDB4NUQgLyogXSAqLykge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoO1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQ2xhc3NFc2NhcGVcbnBwJDgucmVnZXhwX2VhdENsYXNzRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuXG4gIGlmIChzdGF0ZS5lYXQoMHg2MiAvKiBiICovKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MDg7IC8qIDxCUz4gKi9cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHN0YXRlLnN3aXRjaFUgJiYgc3RhdGUuZWF0KDB4MkQgLyogLSAqLykpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDJEOyAvKiAtICovXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICghc3RhdGUuc3dpdGNoVSAmJiBzdGF0ZS5lYXQoMHg2MyAvKiBjICovKSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRDbGFzc0NvbnRyb2xMZXR0ZXIoc3RhdGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3NFc2NhcGUoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0Q2hhcmFjdGVyRXNjYXBlKHN0YXRlKVxuICApXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQ2xhc3NDb250cm9sTGV0dGVyXG5wcCQ4LnJlZ2V4cF9lYXRDbGFzc0NvbnRyb2xMZXR0ZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG4gIGlmIChpc0RlY2ltYWxEaWdpdChjaCkgfHwgY2ggPT09IDB4NUYgLyogXyAqLykge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoICUgMHgyMDtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUhleEVzY2FwZVNlcXVlbmNlXG5wcCQ4LnJlZ2V4cF9lYXRIZXhFc2NhcGVTZXF1ZW5jZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgaWYgKHN0YXRlLmVhdCgweDc4IC8qIHggKi8pKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdEZpeGVkSGV4RGlnaXRzKHN0YXRlLCAyKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKHN0YXRlLnN3aXRjaFUpIHtcbiAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBlc2NhcGVcIik7XG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtRGVjaW1hbERpZ2l0c1xucHAkOC5yZWdleHBfZWF0RGVjaW1hbERpZ2l0cyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgdmFyIGNoID0gMDtcbiAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KGNoID0gc3RhdGUuY3VycmVudCgpKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDEwICogc3RhdGUubGFzdEludFZhbHVlICsgKGNoIC0gMHgzMCAvKiAwICovKTtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlLnBvcyAhPT0gc3RhcnRcbn07XG5mdW5jdGlvbiBpc0RlY2ltYWxEaWdpdChjaCkge1xuICByZXR1cm4gY2ggPj0gMHgzMCAvKiAwICovICYmIGNoIDw9IDB4MzkgLyogOSAqL1xufVxuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhEaWdpdHNcbnBwJDgucmVnZXhwX2VhdEhleERpZ2l0cyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgdmFyIGNoID0gMDtcbiAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgd2hpbGUgKGlzSGV4RGlnaXQoY2ggPSBzdGF0ZS5jdXJyZW50KCkpKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMTYgKiBzdGF0ZS5sYXN0SW50VmFsdWUgKyBoZXhUb0ludChjaCk7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICB9XG4gIHJldHVybiBzdGF0ZS5wb3MgIT09IHN0YXJ0XG59O1xuZnVuY3Rpb24gaXNIZXhEaWdpdChjaCkge1xuICByZXR1cm4gKFxuICAgIChjaCA+PSAweDMwIC8qIDAgKi8gJiYgY2ggPD0gMHgzOSAvKiA5ICovKSB8fFxuICAgIChjaCA+PSAweDQxIC8qIEEgKi8gJiYgY2ggPD0gMHg0NiAvKiBGICovKSB8fFxuICAgIChjaCA+PSAweDYxIC8qIGEgKi8gJiYgY2ggPD0gMHg2NiAvKiBmICovKVxuICApXG59XG5mdW5jdGlvbiBoZXhUb0ludChjaCkge1xuICBpZiAoY2ggPj0gMHg0MSAvKiBBICovICYmIGNoIDw9IDB4NDYgLyogRiAqLykge1xuICAgIHJldHVybiAxMCArIChjaCAtIDB4NDEgLyogQSAqLylcbiAgfVxuICBpZiAoY2ggPj0gMHg2MSAvKiBhICovICYmIGNoIDw9IDB4NjYgLyogZiAqLykge1xuICAgIHJldHVybiAxMCArIChjaCAtIDB4NjEgLyogYSAqLylcbiAgfVxuICByZXR1cm4gY2ggLSAweDMwIC8qIDAgKi9cbn1cblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUxlZ2FjeU9jdGFsRXNjYXBlU2VxdWVuY2Vcbi8vIEFsbG93cyBvbmx5IDAtMzc3KG9jdGFsKSBpLmUuIDAtMjU1KGRlY2ltYWwpLlxucHAkOC5yZWdleHBfZWF0TGVnYWN5T2N0YWxFc2NhcGVTZXF1ZW5jZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIGlmICh0aGlzLnJlZ2V4cF9lYXRPY3RhbERpZ2l0KHN0YXRlKSkge1xuICAgIHZhciBuMSA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0T2N0YWxEaWdpdChzdGF0ZSkpIHtcbiAgICAgIHZhciBuMiA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgIGlmIChuMSA8PSAzICYmIHRoaXMucmVnZXhwX2VhdE9jdGFsRGlnaXQoc3RhdGUpKSB7XG4gICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IG4xICogNjQgKyBuMiAqIDggKyBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBuMSAqIDggKyBuMjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gbjE7XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1PY3RhbERpZ2l0XG5wcCQ4LnJlZ2V4cF9lYXRPY3RhbERpZ2l0ID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoaXNPY3RhbERpZ2l0KGNoKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoIC0gMHgzMDsgLyogMCAqL1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gIHJldHVybiBmYWxzZVxufTtcbmZ1bmN0aW9uIGlzT2N0YWxEaWdpdChjaCkge1xuICByZXR1cm4gY2ggPj0gMHgzMCAvKiAwICovICYmIGNoIDw9IDB4MzcgLyogNyAqL1xufVxuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXg0RGlnaXRzXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhEaWdpdFxuLy8gQW5kIEhleERpZ2l0IEhleERpZ2l0IGluIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUhleEVzY2FwZVNlcXVlbmNlXG5wcCQ4LnJlZ2V4cF9lYXRGaXhlZEhleERpZ2l0cyA9IGZ1bmN0aW9uKHN0YXRlLCBsZW5ndGgpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICAgIGlmICghaXNIZXhEaWdpdChjaCkpIHtcbiAgICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDE2ICogc3RhdGUubGFzdEludFZhbHVlICsgaGV4VG9JbnQoY2gpO1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgfVxuICByZXR1cm4gdHJ1ZVxufTtcblxuLy8gT2JqZWN0IHR5cGUgdXNlZCB0byByZXByZXNlbnQgdG9rZW5zLiBOb3RlIHRoYXQgbm9ybWFsbHksIHRva2Vuc1xuLy8gc2ltcGx5IGV4aXN0IGFzIHByb3BlcnRpZXMgb24gdGhlIHBhcnNlciBvYmplY3QuIFRoaXMgaXMgb25seVxuLy8gdXNlZCBmb3IgdGhlIG9uVG9rZW4gY2FsbGJhY2sgYW5kIHRoZSBleHRlcm5hbCB0b2tlbml6ZXIuXG5cbnZhciBUb2tlbiA9IGZ1bmN0aW9uIFRva2VuKHApIHtcbiAgdGhpcy50eXBlID0gcC50eXBlO1xuICB0aGlzLnZhbHVlID0gcC52YWx1ZTtcbiAgdGhpcy5zdGFydCA9IHAuc3RhcnQ7XG4gIHRoaXMuZW5kID0gcC5lbmQ7XG4gIGlmIChwLm9wdGlvbnMubG9jYXRpb25zKVxuICAgIHsgdGhpcy5sb2MgPSBuZXcgU291cmNlTG9jYXRpb24ocCwgcC5zdGFydExvYywgcC5lbmRMb2MpOyB9XG4gIGlmIChwLm9wdGlvbnMucmFuZ2VzKVxuICAgIHsgdGhpcy5yYW5nZSA9IFtwLnN0YXJ0LCBwLmVuZF07IH1cbn07XG5cbi8vICMjIFRva2VuaXplclxuXG52YXIgcHAkOSA9IFBhcnNlci5wcm90b3R5cGU7XG5cbi8vIE1vdmUgdG8gdGhlIG5leHQgdG9rZW5cblxucHAkOS5uZXh0ID0gZnVuY3Rpb24oaWdub3JlRXNjYXBlU2VxdWVuY2VJbktleXdvcmQpIHtcbiAgaWYgKCFpZ25vcmVFc2NhcGVTZXF1ZW5jZUluS2V5d29yZCAmJiB0aGlzLnR5cGUua2V5d29yZCAmJiB0aGlzLmNvbnRhaW5zRXNjKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiRXNjYXBlIHNlcXVlbmNlIGluIGtleXdvcmQgXCIgKyB0aGlzLnR5cGUua2V5d29yZCk7IH1cbiAgaWYgKHRoaXMub3B0aW9ucy5vblRva2VuKVxuICAgIHsgdGhpcy5vcHRpb25zLm9uVG9rZW4obmV3IFRva2VuKHRoaXMpKTsgfVxuXG4gIHRoaXMubGFzdFRva0VuZCA9IHRoaXMuZW5kO1xuICB0aGlzLmxhc3RUb2tTdGFydCA9IHRoaXMuc3RhcnQ7XG4gIHRoaXMubGFzdFRva0VuZExvYyA9IHRoaXMuZW5kTG9jO1xuICB0aGlzLmxhc3RUb2tTdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gIHRoaXMubmV4dFRva2VuKCk7XG59O1xuXG5wcCQ5LmdldFRva2VuID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmV4dCgpO1xuICByZXR1cm4gbmV3IFRva2VuKHRoaXMpXG59O1xuXG4vLyBJZiB3ZSdyZSBpbiBhbiBFUzYgZW52aXJvbm1lbnQsIG1ha2UgcGFyc2VycyBpdGVyYWJsZVxuaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIpXG4gIHsgcHAkOVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdG9rZW4gPSB0aGlzJDEuZ2V0VG9rZW4oKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb25lOiB0b2tlbi50eXBlID09PSB0eXBlcy5lb2YsXG4gICAgICAgICAgdmFsdWU6IHRva2VuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07IH1cblxuLy8gVG9nZ2xlIHN0cmljdCBtb2RlLiBSZS1yZWFkcyB0aGUgbmV4dCBudW1iZXIgb3Igc3RyaW5nIHRvIHBsZWFzZVxuLy8gcGVkYW50aWMgdGVzdHMgKGBcInVzZSBzdHJpY3RcIjsgMDEwO2Agc2hvdWxkIGZhaWwpLlxuXG5wcCQ5LmN1ckNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuY29udGV4dFt0aGlzLmNvbnRleHQubGVuZ3RoIC0gMV1cbn07XG5cbi8vIFJlYWQgYSBzaW5nbGUgdG9rZW4sIHVwZGF0aW5nIHRoZSBwYXJzZXIgb2JqZWN0J3MgdG9rZW4tcmVsYXRlZFxuLy8gcHJvcGVydGllcy5cblxucHAkOS5uZXh0VG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIGN1ckNvbnRleHQgPSB0aGlzLmN1ckNvbnRleHQoKTtcbiAgaWYgKCFjdXJDb250ZXh0IHx8ICFjdXJDb250ZXh0LnByZXNlcnZlU3BhY2UpIHsgdGhpcy5za2lwU3BhY2UoKTsgfVxuXG4gIHRoaXMuc3RhcnQgPSB0aGlzLnBvcztcbiAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHsgdGhpcy5zdGFydExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKTsgfVxuICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpIHsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuZW9mKSB9XG5cbiAgaWYgKGN1ckNvbnRleHQub3ZlcnJpZGUpIHsgcmV0dXJuIGN1ckNvbnRleHQub3ZlcnJpZGUodGhpcykgfVxuICBlbHNlIHsgdGhpcy5yZWFkVG9rZW4odGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKTsgfVxufTtcblxucHAkOS5yZWFkVG9rZW4gPSBmdW5jdGlvbihjb2RlKSB7XG4gIC8vIElkZW50aWZpZXIgb3Iga2V5d29yZC4gJ1xcdVhYWFgnIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCBpblxuICAvLyBpZGVudGlmaWVycywgc28gJ1xcJyBhbHNvIGRpc3BhdGNoZXMgdG8gdGhhdC5cbiAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNvZGUsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB8fCBjb2RlID09PSA5MiAvKiAnXFwnICovKVxuICAgIHsgcmV0dXJuIHRoaXMucmVhZFdvcmQoKSB9XG5cbiAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5Gcm9tQ29kZShjb2RlKVxufTtcblxucHAkOS5mdWxsQ2hhckNvZGVBdFBvcyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY29kZSA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gIGlmIChjb2RlIDw9IDB4ZDdmZiB8fCBjb2RlID49IDB4ZTAwMCkgeyByZXR1cm4gY29kZSB9XG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gIHJldHVybiAoY29kZSA8PCAxMCkgKyBuZXh0IC0gMHgzNWZkYzAwXG59O1xuXG5wcCQ5LnNraXBCbG9ja0NvbW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0YXJ0TG9jID0gdGhpcy5vcHRpb25zLm9uQ29tbWVudCAmJiB0aGlzLmN1clBvc2l0aW9uKCk7XG4gIHZhciBzdGFydCA9IHRoaXMucG9zLCBlbmQgPSB0aGlzLmlucHV0LmluZGV4T2YoXCIqL1wiLCB0aGlzLnBvcyArPSAyKTtcbiAgaWYgKGVuZCA9PT0gLTEpIHsgdGhpcy5yYWlzZSh0aGlzLnBvcyAtIDIsIFwiVW50ZXJtaW5hdGVkIGNvbW1lbnRcIik7IH1cbiAgdGhpcy5wb3MgPSBlbmQgKyAyO1xuICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgIGxpbmVCcmVha0cubGFzdEluZGV4ID0gc3RhcnQ7XG4gICAgdmFyIG1hdGNoO1xuICAgIHdoaWxlICgobWF0Y2ggPSBsaW5lQnJlYWtHLmV4ZWModGhpcy5pbnB1dCkpICYmIG1hdGNoLmluZGV4IDwgdGhpcy5wb3MpIHtcbiAgICAgICsrdGhpcy5jdXJMaW5lO1xuICAgICAgdGhpcy5saW5lU3RhcnQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5vbkNvbW1lbnQpXG4gICAgeyB0aGlzLm9wdGlvbnMub25Db21tZW50KHRydWUsIHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQgKyAyLCBlbmQpLCBzdGFydCwgdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydExvYywgdGhpcy5jdXJQb3NpdGlvbigpKTsgfVxufTtcblxucHAkOS5za2lwTGluZUNvbW1lbnQgPSBmdW5jdGlvbihzdGFydFNraXApIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gIHZhciBzdGFydExvYyA9IHRoaXMub3B0aW9ucy5vbkNvbW1lbnQgJiYgdGhpcy5jdXJQb3NpdGlvbigpO1xuICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKz0gc3RhcnRTa2lwKTtcbiAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgIWlzTmV3TGluZShjaCkpIHtcbiAgICBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKTtcbiAgfVxuICBpZiAodGhpcy5vcHRpb25zLm9uQ29tbWVudClcbiAgICB7IHRoaXMub3B0aW9ucy5vbkNvbW1lbnQoZmFsc2UsIHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQgKyBzdGFydFNraXAsIHRoaXMucG9zKSwgc3RhcnQsIHRoaXMucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2MsIHRoaXMuY3VyUG9zaXRpb24oKSk7IH1cbn07XG5cbi8vIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBhcnNlIGFuZCBhZnRlciBldmVyeSB0b2tlbi4gU2tpcHNcbi8vIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRzLCBhbmQuXG5cbnBwJDkuc2tpcFNwYWNlID0gZnVuY3Rpb24oKSB7XG4gIGxvb3A6IHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKSB7XG4gICAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAzMjogY2FzZSAxNjA6IC8vICcgJ1xuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAxMzpcbiAgICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKSA9PT0gMTApIHtcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgIH1cbiAgICBjYXNlIDEwOiBjYXNlIDgyMzI6IGNhc2UgODIzMzpcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgICAgICArK3RoaXMuY3VyTGluZTtcbiAgICAgICAgdGhpcy5saW5lU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgY2FzZSA0NzogLy8gJy8nXG4gICAgICBzd2l0Y2ggKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpKSB7XG4gICAgICBjYXNlIDQyOiAvLyAnKidcbiAgICAgICAgdGhpcy5za2lwQmxvY2tDb21tZW50KCk7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDQ3OlxuICAgICAgICB0aGlzLnNraXBMaW5lQ29tbWVudCgyKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrIGxvb3BcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChjaCA+IDggJiYgY2ggPCAxNCB8fCBjaCA+PSA1NzYwICYmIG5vbkFTQ0lJd2hpdGVzcGFjZS50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSkge1xuICAgICAgICArK3RoaXMucG9zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWsgbG9vcFxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgdG9rZW4uIFNldHMgYGVuZGAsIGB2YWxgLCBhbmRcbi8vIG1haW50YWlucyBgY29udGV4dGAgYW5kIGBleHByQWxsb3dlZGAsIGFuZCBza2lwcyB0aGUgc3BhY2UgYWZ0ZXJcbi8vIHRoZSB0b2tlbiwgc28gdGhhdCB0aGUgbmV4dCBvbmUncyBgc3RhcnRgIHdpbGwgcG9pbnQgYXQgdGhlXG4vLyByaWdodCBwb3NpdGlvbi5cblxucHAkOS5maW5pc2hUb2tlbiA9IGZ1bmN0aW9uKHR5cGUsIHZhbCkge1xuICB0aGlzLmVuZCA9IHRoaXMucG9zO1xuICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgeyB0aGlzLmVuZExvYyA9IHRoaXMuY3VyUG9zaXRpb24oKTsgfVxuICB2YXIgcHJldlR5cGUgPSB0aGlzLnR5cGU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMudmFsdWUgPSB2YWw7XG5cbiAgdGhpcy51cGRhdGVDb250ZXh0KHByZXZUeXBlKTtcbn07XG5cbi8vICMjIyBUb2tlbiByZWFkaW5nXG5cbi8vIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHRvIGZldGNoIHRoZSBuZXh0IHRva2VuLiBJdFxuLy8gaXMgc29tZXdoYXQgb2JzY3VyZSwgYmVjYXVzZSBpdCB3b3JrcyBpbiBjaGFyYWN0ZXIgY29kZXMgcmF0aGVyXG4vLyB0aGFuIGNoYXJhY3RlcnMsIGFuZCBiZWNhdXNlIG9wZXJhdG9yIHBhcnNpbmcgaGFzIGJlZW4gaW5saW5lZFxuLy8gaW50byBpdC5cbi8vXG4vLyBBbGwgaW4gdGhlIG5hbWUgb2Ygc3BlZWQuXG4vL1xucHAkOS5yZWFkVG9rZW5fZG90ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gIGlmIChuZXh0ID49IDQ4ICYmIG5leHQgPD0gNTcpIHsgcmV0dXJuIHRoaXMucmVhZE51bWJlcih0cnVlKSB9XG4gIHZhciBuZXh0MiA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpO1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgbmV4dCA9PT0gNDYgJiYgbmV4dDIgPT09IDQ2KSB7IC8vIDQ2ID0gZG90ICcuJ1xuICAgIHRoaXMucG9zICs9IDM7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuZWxsaXBzaXMpXG4gIH0gZWxzZSB7XG4gICAgKyt0aGlzLnBvcztcbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5kb3QpXG4gIH1cbn07XG5cbnBwJDkucmVhZFRva2VuX3NsYXNoID0gZnVuY3Rpb24oKSB7IC8vICcvJ1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICBpZiAodGhpcy5leHByQWxsb3dlZCkgeyArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5yZWFkUmVnZXhwKCkgfVxuICBpZiAobmV4dCA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYXNzaWduLCAyKSB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLnNsYXNoLCAxKVxufTtcblxucHAkOS5yZWFkVG9rZW5fbXVsdF9tb2R1bG9fZXhwID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnJSonXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gIHZhciBzaXplID0gMTtcbiAgdmFyIHRva2VudHlwZSA9IGNvZGUgPT09IDQyID8gdHlwZXMuc3RhciA6IHR5cGVzLm1vZHVsbztcblxuICAvLyBleHBvbmVudGlhdGlvbiBvcGVyYXRvciAqKiBhbmQgKio9XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNyAmJiBjb2RlID09PSA0MiAmJiBuZXh0ID09PSA0Mikge1xuICAgICsrc2l6ZTtcbiAgICB0b2tlbnR5cGUgPSB0eXBlcy5zdGFyc3RhcjtcbiAgICBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMik7XG4gIH1cblxuICBpZiAobmV4dCA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYXNzaWduLCBzaXplICsgMSkgfVxuICByZXR1cm4gdGhpcy5maW5pc2hPcCh0b2tlbnR5cGUsIHNpemUpXG59O1xuXG5wcCQ5LnJlYWRUb2tlbl9waXBlX2FtcCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJ3wmJ1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICBpZiAobmV4dCA9PT0gY29kZSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTIpIHtcbiAgICAgIHZhciBuZXh0MiA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpO1xuICAgICAgaWYgKG5leHQyID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5hc3NpZ24sIDMpIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AoY29kZSA9PT0gMTI0ID8gdHlwZXMubG9naWNhbE9SIDogdHlwZXMubG9naWNhbEFORCwgMilcbiAgfVxuICBpZiAobmV4dCA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYXNzaWduLCAyKSB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKGNvZGUgPT09IDEyNCA/IHR5cGVzLmJpdHdpc2VPUiA6IHR5cGVzLmJpdHdpc2VBTkQsIDEpXG59O1xuXG5wcCQ5LnJlYWRUb2tlbl9jYXJldCA9IGZ1bmN0aW9uKCkgeyAvLyAnXidcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmFzc2lnbiwgMikgfVxuICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5iaXR3aXNlWE9SLCAxKVxufTtcblxucHAkOS5yZWFkVG9rZW5fcGx1c19taW4gPSBmdW5jdGlvbihjb2RlKSB7IC8vICcrLSdcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgaWYgKG5leHQgPT09IGNvZGUpIHtcbiAgICBpZiAobmV4dCA9PT0gNDUgJiYgIXRoaXMuaW5Nb2R1bGUgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT09IDYyICYmXG4gICAgICAgICh0aGlzLmxhc3RUb2tFbmQgPT09IDAgfHwgbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMucG9zKSkpKSB7XG4gICAgICAvLyBBIGAtLT5gIGxpbmUgY29tbWVudFxuICAgICAgdGhpcy5za2lwTGluZUNvbW1lbnQoMyk7XG4gICAgICB0aGlzLnNraXBTcGFjZSgpO1xuICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2VuKClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuaW5jRGVjLCAyKVxuICB9XG4gIGlmIChuZXh0ID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5hc3NpZ24sIDIpIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMucGx1c01pbiwgMSlcbn07XG5cbnBwJDkucmVhZFRva2VuX2x0X2d0ID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnPD4nXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gIHZhciBzaXplID0gMTtcbiAgaWYgKG5leHQgPT09IGNvZGUpIHtcbiAgICBzaXplID0gY29kZSA9PT0gNjIgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT09IDYyID8gMyA6IDI7XG4gICAgaWYgKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIHNpemUpID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5hc3NpZ24sIHNpemUgKyAxKSB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYml0U2hpZnQsIHNpemUpXG4gIH1cbiAgaWYgKG5leHQgPT09IDMzICYmIGNvZGUgPT09IDYwICYmICF0aGlzLmluTW9kdWxlICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09PSA0NSAmJlxuICAgICAgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMykgPT09IDQ1KSB7XG4gICAgLy8gYDwhLS1gLCBhbiBYTUwtc3R5bGUgY29tbWVudCB0aGF0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIGxpbmUgY29tbWVudFxuICAgIHRoaXMuc2tpcExpbmVDb21tZW50KDQpO1xuICAgIHRoaXMuc2tpcFNwYWNlKCk7XG4gICAgcmV0dXJuIHRoaXMubmV4dFRva2VuKClcbiAgfVxuICBpZiAobmV4dCA9PT0gNjEpIHsgc2l6ZSA9IDI7IH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMucmVsYXRpb25hbCwgc2l6ZSlcbn07XG5cbnBwJDkucmVhZFRva2VuX2VxX2V4Y2wgPSBmdW5jdGlvbihjb2RlKSB7IC8vICc9ISdcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmVxdWFsaXR5LCB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PT0gNjEgPyAzIDogMikgfVxuICBpZiAoY29kZSA9PT0gNjEgJiYgbmV4dCA9PT0gNjIgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHsgLy8gJz0+J1xuICAgIHRoaXMucG9zICs9IDI7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuYXJyb3cpXG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AoY29kZSA9PT0gNjEgPyB0eXBlcy5lcSA6IHR5cGVzLnByZWZpeCwgMSlcbn07XG5cbnBwJDkucmVhZFRva2VuX3F1ZXN0aW9uID0gZnVuY3Rpb24oKSB7IC8vICc/J1xuICB2YXIgZWNtYVZlcnNpb24gPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb247XG4gIGlmIChlY21hVmVyc2lvbiA+PSAxMSkge1xuICAgIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgaWYgKG5leHQgPT09IDQ2KSB7XG4gICAgICB2YXIgbmV4dDIgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgICAgIGlmIChuZXh0MiA8IDQ4IHx8IG5leHQyID4gNTcpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMucXVlc3Rpb25Eb3QsIDIpIH1cbiAgICB9XG4gICAgaWYgKG5leHQgPT09IDYzKSB7XG4gICAgICBpZiAoZWNtYVZlcnNpb24gPj0gMTIpIHtcbiAgICAgICAgdmFyIG5leHQyJDEgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgICAgICAgaWYgKG5leHQyJDEgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmFzc2lnbiwgMykgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuY29hbGVzY2UsIDIpXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLnF1ZXN0aW9uLCAxKVxufTtcblxucHAkOS5nZXRUb2tlbkZyb21Db2RlID0gZnVuY3Rpb24oY29kZSkge1xuICBzd2l0Y2ggKGNvZGUpIHtcbiAgLy8gVGhlIGludGVycHJldGF0aW9uIG9mIGEgZG90IGRlcGVuZHMgb24gd2hldGhlciBpdCBpcyBmb2xsb3dlZFxuICAvLyBieSBhIGRpZ2l0IG9yIGFub3RoZXIgdHdvIGRvdHMuXG4gIGNhc2UgNDY6IC8vICcuJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9kb3QoKVxuXG4gIC8vIFB1bmN0dWF0aW9uIHRva2Vucy5cbiAgY2FzZSA0MDogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMucGFyZW5MKVxuICBjYXNlIDQxOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5wYXJlblIpXG4gIGNhc2UgNTk6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLnNlbWkpXG4gIGNhc2UgNDQ6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmNvbW1hKVxuICBjYXNlIDkxOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5icmFja2V0TClcbiAgY2FzZSA5MzogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuYnJhY2tldFIpXG4gIGNhc2UgMTIzOiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5icmFjZUwpXG4gIGNhc2UgMTI1OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5icmFjZVIpXG4gIGNhc2UgNTg6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmNvbG9uKVxuXG4gIGNhc2UgOTY6IC8vICdgJ1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA2KSB7IGJyZWFrIH1cbiAgICArK3RoaXMucG9zO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmJhY2tRdW90ZSlcblxuICBjYXNlIDQ4OiAvLyAnMCdcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIGlmIChuZXh0ID09PSAxMjAgfHwgbmV4dCA9PT0gODgpIHsgcmV0dXJuIHRoaXMucmVhZFJhZGl4TnVtYmVyKDE2KSB9IC8vICcweCcsICcwWCcgLSBoZXggbnVtYmVyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgICBpZiAobmV4dCA9PT0gMTExIHx8IG5leHQgPT09IDc5KSB7IHJldHVybiB0aGlzLnJlYWRSYWRpeE51bWJlcig4KSB9IC8vICcwbycsICcwTycgLSBvY3RhbCBudW1iZXJcbiAgICAgIGlmIChuZXh0ID09PSA5OCB8fCBuZXh0ID09PSA2NikgeyByZXR1cm4gdGhpcy5yZWFkUmFkaXhOdW1iZXIoMikgfSAvLyAnMGInLCAnMEInIC0gYmluYXJ5IG51bWJlclxuICAgIH1cblxuICAvLyBBbnl0aGluZyBlbHNlIGJlZ2lubmluZyB3aXRoIGEgZGlnaXQgaXMgYW4gaW50ZWdlciwgb2N0YWxcbiAgLy8gbnVtYmVyLCBvciBmbG9hdC5cbiAgY2FzZSA0OTogY2FzZSA1MDogY2FzZSA1MTogY2FzZSA1MjogY2FzZSA1MzogY2FzZSA1NDogY2FzZSA1NTogY2FzZSA1NjogY2FzZSA1NzogLy8gMS05XG4gICAgcmV0dXJuIHRoaXMucmVhZE51bWJlcihmYWxzZSlcblxuICAvLyBRdW90ZXMgcHJvZHVjZSBzdHJpbmdzLlxuICBjYXNlIDM0OiBjYXNlIDM5OiAvLyAnXCInLCBcIidcIlxuICAgIHJldHVybiB0aGlzLnJlYWRTdHJpbmcoY29kZSlcblxuICAvLyBPcGVyYXRvcnMgYXJlIHBhcnNlZCBpbmxpbmUgaW4gdGlueSBzdGF0ZSBtYWNoaW5lcy4gJz0nICg2MSkgaXNcbiAgLy8gb2Z0ZW4gcmVmZXJyZWQgdG8uIGBmaW5pc2hPcGAgc2ltcGx5IHNraXBzIHRoZSBhbW91bnQgb2ZcbiAgLy8gY2hhcmFjdGVycyBpdCBpcyBnaXZlbiBhcyBzZWNvbmQgYXJndW1lbnQsIGFuZCByZXR1cm5zIGEgdG9rZW5cbiAgLy8gb2YgdGhlIHR5cGUgZ2l2ZW4gYnkgaXRzIGZpcnN0IGFyZ3VtZW50LlxuXG4gIGNhc2UgNDc6IC8vICcvJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9zbGFzaCgpXG5cbiAgY2FzZSAzNzogY2FzZSA0MjogLy8gJyUqJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9tdWx0X21vZHVsb19leHAoY29kZSlcblxuICBjYXNlIDEyNDogY2FzZSAzODogLy8gJ3wmJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9waXBlX2FtcChjb2RlKVxuXG4gIGNhc2UgOTQ6IC8vICdeJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9jYXJldCgpXG5cbiAgY2FzZSA0MzogY2FzZSA0NTogLy8gJystJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9wbHVzX21pbihjb2RlKVxuXG4gIGNhc2UgNjA6IGNhc2UgNjI6IC8vICc8PidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fbHRfZ3QoY29kZSlcblxuICBjYXNlIDYxOiBjYXNlIDMzOiAvLyAnPSEnXG4gICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX2VxX2V4Y2woY29kZSlcblxuICBjYXNlIDYzOiAvLyAnPydcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcXVlc3Rpb24oKVxuXG4gIGNhc2UgMTI2OiAvLyAnfidcbiAgICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5wcmVmaXgsIDEpXG4gIH1cblxuICB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIlVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiArIGNvZGVQb2ludFRvU3RyaW5nJDEoY29kZSkgKyBcIidcIik7XG59O1xuXG5wcCQ5LmZpbmlzaE9wID0gZnVuY3Rpb24odHlwZSwgc2l6ZSkge1xuICB2YXIgc3RyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLnBvcywgdGhpcy5wb3MgKyBzaXplKTtcbiAgdGhpcy5wb3MgKz0gc2l6ZTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZSwgc3RyKVxufTtcblxucHAkOS5yZWFkUmVnZXhwID0gZnVuY3Rpb24oKSB7XG4gIHZhciBlc2NhcGVkLCBpbkNsYXNzLCBzdGFydCA9IHRoaXMucG9zO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7IHRoaXMucmFpc2Uoc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiKTsgfVxuICAgIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckF0KHRoaXMucG9zKTtcbiAgICBpZiAobGluZUJyZWFrLnRlc3QoY2gpKSB7IHRoaXMucmFpc2Uoc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHJlZ3VsYXIgZXhwcmVzc2lvblwiKTsgfVxuICAgIGlmICghZXNjYXBlZCkge1xuICAgICAgaWYgKGNoID09PSBcIltcIikgeyBpbkNsYXNzID0gdHJ1ZTsgfVxuICAgICAgZWxzZSBpZiAoY2ggPT09IFwiXVwiICYmIGluQ2xhc3MpIHsgaW5DbGFzcyA9IGZhbHNlOyB9XG4gICAgICBlbHNlIGlmIChjaCA9PT0gXCIvXCIgJiYgIWluQ2xhc3MpIHsgYnJlYWsgfVxuICAgICAgZXNjYXBlZCA9IGNoID09PSBcIlxcXFxcIjtcbiAgICB9IGVsc2UgeyBlc2NhcGVkID0gZmFsc2U7IH1cbiAgICArK3RoaXMucG9zO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gdGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpO1xuICArK3RoaXMucG9zO1xuICB2YXIgZmxhZ3NTdGFydCA9IHRoaXMucG9zO1xuICB2YXIgZmxhZ3MgPSB0aGlzLnJlYWRXb3JkMSgpO1xuICBpZiAodGhpcy5jb250YWluc0VzYykgeyB0aGlzLnVuZXhwZWN0ZWQoZmxhZ3NTdGFydCk7IH1cblxuICAvLyBWYWxpZGF0ZSBwYXR0ZXJuXG4gIHZhciBzdGF0ZSA9IHRoaXMucmVnZXhwU3RhdGUgfHwgKHRoaXMucmVnZXhwU3RhdGUgPSBuZXcgUmVnRXhwVmFsaWRhdGlvblN0YXRlKHRoaXMpKTtcbiAgc3RhdGUucmVzZXQoc3RhcnQsIHBhdHRlcm4sIGZsYWdzKTtcbiAgdGhpcy52YWxpZGF0ZVJlZ0V4cEZsYWdzKHN0YXRlKTtcbiAgdGhpcy52YWxpZGF0ZVJlZ0V4cFBhdHRlcm4oc3RhdGUpO1xuXG4gIC8vIENyZWF0ZSBMaXRlcmFsI3ZhbHVlIHByb3BlcnR5IHZhbHVlLlxuICB2YXIgdmFsdWUgPSBudWxsO1xuICB0cnkge1xuICAgIHZhbHVlID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBFU1RyZWUgcmVxdWlyZXMgbnVsbCBpZiBpdCBmYWlsZWQgdG8gaW5zdGFudGlhdGUgUmVnRXhwIG9iamVjdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXN0cmVlL2VzdHJlZS9ibG9iL2EyNzAwM2FkZjRmZDdiZmFkNDRkZTljZWYzNzJhMmVhY2Q1MjdiMWMvZXM1Lm1kI3JlZ2V4cGxpdGVyYWxcbiAgfVxuXG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLnJlZ2V4cCwge3BhdHRlcm46IHBhdHRlcm4sIGZsYWdzOiBmbGFncywgdmFsdWU6IHZhbHVlfSlcbn07XG5cbi8vIFJlYWQgYW4gaW50ZWdlciBpbiB0aGUgZ2l2ZW4gcmFkaXguIFJldHVybiBudWxsIGlmIHplcm8gZGlnaXRzXG4vLyB3ZXJlIHJlYWQsIHRoZSBpbnRlZ2VyIHZhbHVlIG90aGVyd2lzZS4gV2hlbiBgbGVuYCBpcyBnaXZlbiwgdGhpc1xuLy8gd2lsbCByZXR1cm4gYG51bGxgIHVubGVzcyB0aGUgaW50ZWdlciBoYXMgZXhhY3RseSBgbGVuYCBkaWdpdHMuXG5cbnBwJDkucmVhZEludCA9IGZ1bmN0aW9uKHJhZGl4LCBsZW4sIG1heWJlTGVnYWN5T2N0YWxOdW1lcmljTGl0ZXJhbCkge1xuICAvLyBgbGVuYCBpcyB1c2VkIGZvciBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlcy4gSW4gdGhhdCBjYXNlLCBkaXNhbGxvdyBzZXBhcmF0b3JzLlxuICB2YXIgYWxsb3dTZXBhcmF0b3JzID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDEyICYmIGxlbiA9PT0gdW5kZWZpbmVkO1xuXG4gIC8vIGBtYXliZUxlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWxgIGlzIHRydWUgaWYgaXQgZG9lc24ndCBoYXZlIHByZWZpeCAoMHgsMG8sMGIpXG4gIC8vIGFuZCBpc24ndCBmcmFjdGlvbiBwYXJ0IG5vciBleHBvbmVudCBwYXJ0LiBJbiB0aGF0IGNhc2UsIGlmIHRoZSBmaXJzdCBkaWdpdFxuICAvLyBpcyB6ZXJvIHRoZW4gZGlzYWxsb3cgc2VwYXJhdG9ycy5cbiAgdmFyIGlzTGVnYWN5T2N0YWxOdW1lcmljTGl0ZXJhbCA9IG1heWJlTGVnYWN5T2N0YWxOdW1lcmljTGl0ZXJhbCAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpID09PSA0ODtcblxuICB2YXIgc3RhcnQgPSB0aGlzLnBvcywgdG90YWwgPSAwLCBsYXN0Q29kZSA9IDA7XG4gIGZvciAodmFyIGkgPSAwLCBlID0gbGVuID09IG51bGwgPyBJbmZpbml0eSA6IGxlbjsgaSA8IGU7ICsraSwgKyt0aGlzLnBvcykge1xuICAgIHZhciBjb2RlID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSwgdmFsID0gKHZvaWQgMCk7XG5cbiAgICBpZiAoYWxsb3dTZXBhcmF0b3JzICYmIGNvZGUgPT09IDk1KSB7XG4gICAgICBpZiAoaXNMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnBvcywgXCJOdW1lcmljIHNlcGFyYXRvciBpcyBub3QgYWxsb3dlZCBpbiBsZWdhY3kgb2N0YWwgbnVtZXJpYyBsaXRlcmFsc1wiKTsgfVxuICAgICAgaWYgKGxhc3RDb2RlID09PSA5NSkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5wb3MsIFwiTnVtZXJpYyBzZXBhcmF0b3IgbXVzdCBiZSBleGFjdGx5IG9uZSB1bmRlcnNjb3JlXCIpOyB9XG4gICAgICBpZiAoaSA9PT0gMCkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5wb3MsIFwiTnVtZXJpYyBzZXBhcmF0b3IgaXMgbm90IGFsbG93ZWQgYXQgdGhlIGZpcnN0IG9mIGRpZ2l0c1wiKTsgfVxuICAgICAgbGFzdENvZGUgPSBjb2RlO1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoY29kZSA+PSA5NykgeyB2YWwgPSBjb2RlIC0gOTcgKyAxMDsgfSAvLyBhXG4gICAgZWxzZSBpZiAoY29kZSA+PSA2NSkgeyB2YWwgPSBjb2RlIC0gNjUgKyAxMDsgfSAvLyBBXG4gICAgZWxzZSBpZiAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3KSB7IHZhbCA9IGNvZGUgLSA0ODsgfSAvLyAwLTlcbiAgICBlbHNlIHsgdmFsID0gSW5maW5pdHk7IH1cbiAgICBpZiAodmFsID49IHJhZGl4KSB7IGJyZWFrIH1cbiAgICBsYXN0Q29kZSA9IGNvZGU7XG4gICAgdG90YWwgPSB0b3RhbCAqIHJhZGl4ICsgdmFsO1xuICB9XG5cbiAgaWYgKGFsbG93U2VwYXJhdG9ycyAmJiBsYXN0Q29kZSA9PT0gOTUpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMucG9zIC0gMSwgXCJOdW1lcmljIHNlcGFyYXRvciBpcyBub3QgYWxsb3dlZCBhdCB0aGUgbGFzdCBvZiBkaWdpdHNcIik7IH1cbiAgaWYgKHRoaXMucG9zID09PSBzdGFydCB8fCBsZW4gIT0gbnVsbCAmJiB0aGlzLnBvcyAtIHN0YXJ0ICE9PSBsZW4pIHsgcmV0dXJuIG51bGwgfVxuXG4gIHJldHVybiB0b3RhbFxufTtcblxuZnVuY3Rpb24gc3RyaW5nVG9OdW1iZXIoc3RyLCBpc0xlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwpIHtcbiAgaWYgKGlzTGVnYWN5T2N0YWxOdW1lcmljTGl0ZXJhbCkge1xuICAgIHJldHVybiBwYXJzZUludChzdHIsIDgpXG4gIH1cblxuICAvLyBgcGFyc2VGbG9hdCh2YWx1ZSlgIHN0b3BzIHBhcnNpbmcgYXQgdGhlIGZpcnN0IG51bWVyaWMgc2VwYXJhdG9yIHRoZW4gcmV0dXJucyBhIHdyb25nIHZhbHVlLlxuICByZXR1cm4gcGFyc2VGbG9hdChzdHIucmVwbGFjZSgvXy9nLCBcIlwiKSlcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9CaWdJbnQoc3RyKSB7XG4gIGlmICh0eXBlb2YgQmlnSW50ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gYEJpZ0ludCh2YWx1ZSlgIHRocm93cyBzeW50YXggZXJyb3IgaWYgdGhlIHN0cmluZyBjb250YWlucyBudW1lcmljIHNlcGFyYXRvcnMuXG4gIHJldHVybiBCaWdJbnQoc3RyLnJlcGxhY2UoL18vZywgXCJcIikpXG59XG5cbnBwJDkucmVhZFJhZGl4TnVtYmVyID0gZnVuY3Rpb24ocmFkaXgpIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gIHRoaXMucG9zICs9IDI7IC8vIDB4XG4gIHZhciB2YWwgPSB0aGlzLnJlYWRJbnQocmFkaXgpO1xuICBpZiAodmFsID09IG51bGwpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0ICsgMiwgXCJFeHBlY3RlZCBudW1iZXIgaW4gcmFkaXggXCIgKyByYWRpeCk7IH1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMSAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpID09PSAxMTApIHtcbiAgICB2YWwgPSBzdHJpbmdUb0JpZ0ludCh0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0aGlzLnBvcykpO1xuICAgICsrdGhpcy5wb3M7XG4gIH0gZWxzZSBpZiAoaXNJZGVudGlmaWVyU3RhcnQodGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKSkgeyB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpOyB9XG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLm51bSwgdmFsKVxufTtcblxuLy8gUmVhZCBhbiBpbnRlZ2VyLCBvY3RhbCBpbnRlZ2VyLCBvciBmbG9hdGluZy1wb2ludCBudW1iZXIuXG5cbnBwJDkucmVhZE51bWJlciA9IGZ1bmN0aW9uKHN0YXJ0c1dpdGhEb3QpIHtcbiAgdmFyIHN0YXJ0ID0gdGhpcy5wb3M7XG4gIGlmICghc3RhcnRzV2l0aERvdCAmJiB0aGlzLnJlYWRJbnQoMTAsIHVuZGVmaW5lZCwgdHJ1ZSkgPT09IG51bGwpIHsgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKTsgfVxuICB2YXIgb2N0YWwgPSB0aGlzLnBvcyAtIHN0YXJ0ID49IDIgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHN0YXJ0KSA9PT0gNDg7XG4gIGlmIChvY3RhbCAmJiB0aGlzLnN0cmljdCkgeyB0aGlzLnJhaXNlKHN0YXJ0LCBcIkludmFsaWQgbnVtYmVyXCIpOyB9XG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgaWYgKCFvY3RhbCAmJiAhc3RhcnRzV2l0aERvdCAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTEgJiYgbmV4dCA9PT0gMTEwKSB7XG4gICAgdmFyIHZhbCQxID0gc3RyaW5nVG9CaWdJbnQodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpKTtcbiAgICArK3RoaXMucG9zO1xuICAgIGlmIChpc0lkZW50aWZpZXJTdGFydCh0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpKSB7IHRoaXMucmFpc2UodGhpcy5wb3MsIFwiSWRlbnRpZmllciBkaXJlY3RseSBhZnRlciBudW1iZXJcIik7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5udW0sIHZhbCQxKVxuICB9XG4gIGlmIChvY3RhbCAmJiAvWzg5XS8udGVzdCh0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0aGlzLnBvcykpKSB7IG9jdGFsID0gZmFsc2U7IH1cbiAgaWYgKG5leHQgPT09IDQ2ICYmICFvY3RhbCkgeyAvLyAnLidcbiAgICArK3RoaXMucG9zO1xuICAgIHRoaXMucmVhZEludCgxMCk7XG4gICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gIH1cbiAgaWYgKChuZXh0ID09PSA2OSB8fCBuZXh0ID09PSAxMDEpICYmICFvY3RhbCkgeyAvLyAnZUUnXG4gICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKTtcbiAgICBpZiAobmV4dCA9PT0gNDMgfHwgbmV4dCA9PT0gNDUpIHsgKyt0aGlzLnBvczsgfSAvLyAnKy0nXG4gICAgaWYgKHRoaXMucmVhZEludCgxMCkgPT09IG51bGwpIHsgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKTsgfVxuICB9XG4gIGlmIChpc0lkZW50aWZpZXJTdGFydCh0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCkpKSB7IHRoaXMucmFpc2UodGhpcy5wb3MsIFwiSWRlbnRpZmllciBkaXJlY3RseSBhZnRlciBudW1iZXJcIik7IH1cblxuICB2YXIgdmFsID0gc3RyaW5nVG9OdW1iZXIodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpLCBvY3RhbCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLm51bSwgdmFsKVxufTtcblxuLy8gUmVhZCBhIHN0cmluZyB2YWx1ZSwgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC1lc2NhcGVzLlxuXG5wcCQ5LnJlYWRDb2RlUG9pbnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSwgY29kZTtcblxuICBpZiAoY2ggPT09IDEyMykgeyAvLyAneydcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNikgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIHZhciBjb2RlUG9zID0gKyt0aGlzLnBvcztcbiAgICBjb2RlID0gdGhpcy5yZWFkSGV4Q2hhcih0aGlzLmlucHV0LmluZGV4T2YoXCJ9XCIsIHRoaXMucG9zKSAtIHRoaXMucG9zKTtcbiAgICArK3RoaXMucG9zO1xuICAgIGlmIChjb2RlID4gMHgxMEZGRkYpIHsgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oY29kZVBvcywgXCJDb2RlIHBvaW50IG91dCBvZiBib3VuZHNcIik7IH1cbiAgfSBlbHNlIHtcbiAgICBjb2RlID0gdGhpcy5yZWFkSGV4Q2hhcig0KTtcbiAgfVxuICByZXR1cm4gY29kZVxufTtcblxuZnVuY3Rpb24gY29kZVBvaW50VG9TdHJpbmckMShjb2RlKSB7XG4gIC8vIFVURi0xNiBEZWNvZGluZ1xuICBpZiAoY29kZSA8PSAweEZGRkYpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgfVxuICBjb2RlIC09IDB4MTAwMDA7XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKChjb2RlID4+IDEwKSArIDB4RDgwMCwgKGNvZGUgJiAxMDIzKSArIDB4REMwMClcbn1cblxucHAkOS5yZWFkU3RyaW5nID0gZnVuY3Rpb24ocXVvdGUpIHtcbiAgdmFyIG91dCA9IFwiXCIsIGNodW5rU3RhcnQgPSArK3RoaXMucG9zO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpOyB9XG4gICAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICBpZiAoY2ggPT09IHF1b3RlKSB7IGJyZWFrIH1cbiAgICBpZiAoY2ggPT09IDkyKSB7IC8vICdcXCdcbiAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgIG91dCArPSB0aGlzLnJlYWRFc2NhcGVkQ2hhcihmYWxzZSk7XG4gICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpc05ld0xpbmUoY2gsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMCkpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIlVudGVybWluYXRlZCBzdHJpbmcgY29uc3RhbnRcIik7IH1cbiAgICAgICsrdGhpcy5wb3M7XG4gICAgfVxuICB9XG4gIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKyspO1xuICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5zdHJpbmcsIG91dClcbn07XG5cbi8vIFJlYWRzIHRlbXBsYXRlIHN0cmluZyB0b2tlbnMuXG5cbnZhciBJTlZBTElEX1RFTVBMQVRFX0VTQ0FQRV9FUlJPUiA9IHt9O1xuXG5wcCQ5LnRyeVJlYWRUZW1wbGF0ZVRva2VuID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuaW5UZW1wbGF0ZUVsZW1lbnQgPSB0cnVlO1xuICB0cnkge1xuICAgIHRoaXMucmVhZFRtcGxUb2tlbigpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyID09PSBJTlZBTElEX1RFTVBMQVRFX0VTQ0FQRV9FUlJPUikge1xuICAgICAgdGhpcy5yZWFkSW52YWxpZFRlbXBsYXRlVG9rZW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgdGhpcy5pblRlbXBsYXRlRWxlbWVudCA9IGZhbHNlO1xufTtcblxucHAkOS5pbnZhbGlkU3RyaW5nVG9rZW4gPSBmdW5jdGlvbihwb3NpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAodGhpcy5pblRlbXBsYXRlRWxlbWVudCAmJiB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSkge1xuICAgIHRocm93IElOVkFMSURfVEVNUExBVEVfRVNDQVBFX0VSUk9SXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5yYWlzZShwb3NpdGlvbiwgbWVzc2FnZSk7XG4gIH1cbn07XG5cbnBwJDkucmVhZFRtcGxUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgb3V0ID0gXCJcIiwgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICBmb3IgKDs7KSB7XG4gICAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIik7IH1cbiAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgIGlmIChjaCA9PT0gOTYgfHwgY2ggPT09IDM2ICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpID09PSAxMjMpIHsgLy8gJ2AnLCAnJHsnXG4gICAgICBpZiAodGhpcy5wb3MgPT09IHRoaXMuc3RhcnQgJiYgKHRoaXMudHlwZSA9PT0gdHlwZXMudGVtcGxhdGUgfHwgdGhpcy50eXBlID09PSB0eXBlcy5pbnZhbGlkVGVtcGxhdGUpKSB7XG4gICAgICAgIGlmIChjaCA9PT0gMzYpIHtcbiAgICAgICAgICB0aGlzLnBvcyArPSAyO1xuICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmRvbGxhckJyYWNlTClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmJhY2tRdW90ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMudGVtcGxhdGUsIG91dClcbiAgICB9XG4gICAgaWYgKGNoID09PSA5MikgeyAvLyAnXFwnXG4gICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICBvdXQgKz0gdGhpcy5yZWFkRXNjYXBlZENoYXIodHJ1ZSk7XG4gICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgfSBlbHNlIGlmIChpc05ld0xpbmUoY2gpKSB7XG4gICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICArK3RoaXMucG9zO1xuICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgY2FzZSAxMzpcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcykgPT09IDEwKSB7ICsrdGhpcy5wb3M7IH1cbiAgICAgIGNhc2UgMTA6XG4gICAgICAgIG91dCArPSBcIlxcblwiO1xuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICAgICAgKyt0aGlzLmN1ckxpbmU7XG4gICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICB9XG4gICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgfSBlbHNlIHtcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgfVxuICB9XG59O1xuXG4vLyBSZWFkcyBhIHRlbXBsYXRlIHRva2VuIHRvIHNlYXJjaCBmb3IgdGhlIGVuZCwgd2l0aG91dCB2YWxpZGF0aW5nIGFueSBlc2NhcGUgc2VxdWVuY2VzXG5wcCQ5LnJlYWRJbnZhbGlkVGVtcGxhdGVUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICBmb3IgKDsgdGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aDsgdGhpcy5wb3MrKykge1xuICAgIHN3aXRjaCAodGhpcy5pbnB1dFt0aGlzLnBvc10pIHtcbiAgICBjYXNlIFwiXFxcXFwiOlxuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiJFwiOlxuICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3MgKyAxXSAhPT0gXCJ7XCIpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICBjYXNlIFwiYFwiOlxuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuaW52YWxpZFRlbXBsYXRlLCB0aGlzLmlucHV0LnNsaWNlKHRoaXMuc3RhcnQsIHRoaXMucG9zKSlcblxuICAgIC8vIG5vIGRlZmF1bHRcbiAgICB9XG4gIH1cbiAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIlVudGVybWluYXRlZCB0ZW1wbGF0ZVwiKTtcbn07XG5cbi8vIFVzZWQgdG8gcmVhZCBlc2NhcGVkIGNoYXJhY3RlcnNcblxucHAkOS5yZWFkRXNjYXBlZENoYXIgPSBmdW5jdGlvbihpblRlbXBsYXRlKSB7XG4gIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCgrK3RoaXMucG9zKTtcbiAgKyt0aGlzLnBvcztcbiAgc3dpdGNoIChjaCkge1xuICBjYXNlIDExMDogcmV0dXJuIFwiXFxuXCIgLy8gJ24nIC0+ICdcXG4nXG4gIGNhc2UgMTE0OiByZXR1cm4gXCJcXHJcIiAvLyAncicgLT4gJ1xccidcbiAgY2FzZSAxMjA6IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucmVhZEhleENoYXIoMikpIC8vICd4J1xuICBjYXNlIDExNzogcmV0dXJuIGNvZGVQb2ludFRvU3RyaW5nJDEodGhpcy5yZWFkQ29kZVBvaW50KCkpIC8vICd1J1xuICBjYXNlIDExNjogcmV0dXJuIFwiXFx0XCIgLy8gJ3QnIC0+ICdcXHQnXG4gIGNhc2UgOTg6IHJldHVybiBcIlxcYlwiIC8vICdiJyAtPiAnXFxiJ1xuICBjYXNlIDExODogcmV0dXJuIFwiXFx1MDAwYlwiIC8vICd2JyAtPiAnXFx1MDAwYidcbiAgY2FzZSAxMDI6IHJldHVybiBcIlxcZlwiIC8vICdmJyAtPiAnXFxmJ1xuICBjYXNlIDEzOiBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gMTApIHsgKyt0aGlzLnBvczsgfSAvLyAnXFxyXFxuJ1xuICBjYXNlIDEwOiAvLyAnIFxcbidcbiAgICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykgeyB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zOyArK3RoaXMuY3VyTGluZTsgfVxuICAgIHJldHVybiBcIlwiXG4gIGNhc2UgNTY6XG4gIGNhc2UgNTc6XG4gICAgaWYgKGluVGVtcGxhdGUpIHtcbiAgICAgIHZhciBjb2RlUG9zID0gdGhpcy5wb3MgLSAxO1xuXG4gICAgICB0aGlzLmludmFsaWRTdHJpbmdUb2tlbihcbiAgICAgICAgY29kZVBvcyxcbiAgICAgICAgXCJJbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiB0ZW1wbGF0ZSBzdHJpbmdcIlxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIGRlZmF1bHQ6XG4gICAgaWYgKGNoID49IDQ4ICYmIGNoIDw9IDU1KSB7XG4gICAgICB2YXIgb2N0YWxTdHIgPSB0aGlzLmlucHV0LnN1YnN0cih0aGlzLnBvcyAtIDEsIDMpLm1hdGNoKC9eWzAtN10rLylbMF07XG4gICAgICB2YXIgb2N0YWwgPSBwYXJzZUludChvY3RhbFN0ciwgOCk7XG4gICAgICBpZiAob2N0YWwgPiAyNTUpIHtcbiAgICAgICAgb2N0YWxTdHIgPSBvY3RhbFN0ci5zbGljZSgwLCAtMSk7XG4gICAgICAgIG9jdGFsID0gcGFyc2VJbnQob2N0YWxTdHIsIDgpO1xuICAgICAgfVxuICAgICAgdGhpcy5wb3MgKz0gb2N0YWxTdHIubGVuZ3RoIC0gMTtcbiAgICAgIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICAgIGlmICgob2N0YWxTdHIgIT09IFwiMFwiIHx8IGNoID09PSA1NiB8fCBjaCA9PT0gNTcpICYmICh0aGlzLnN0cmljdCB8fCBpblRlbXBsYXRlKSkge1xuICAgICAgICB0aGlzLmludmFsaWRTdHJpbmdUb2tlbihcbiAgICAgICAgICB0aGlzLnBvcyAtIDEgLSBvY3RhbFN0ci5sZW5ndGgsXG4gICAgICAgICAgaW5UZW1wbGF0ZVxuICAgICAgICAgICAgPyBcIk9jdGFsIGxpdGVyYWwgaW4gdGVtcGxhdGUgc3RyaW5nXCJcbiAgICAgICAgICAgIDogXCJPY3RhbCBsaXRlcmFsIGluIHN0cmljdCBtb2RlXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG9jdGFsKVxuICAgIH1cbiAgICBpZiAoaXNOZXdMaW5lKGNoKSkge1xuICAgICAgLy8gVW5pY29kZSBuZXcgbGluZSBjaGFyYWN0ZXJzIGFmdGVyIFxcIGdldCByZW1vdmVkIGZyb20gb3V0cHV0IGluIGJvdGhcbiAgICAgIC8vIHRlbXBsYXRlIGxpdGVyYWxzIGFuZCBzdHJpbmdzXG4gICAgICByZXR1cm4gXCJcIlxuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaClcbiAgfVxufTtcblxuLy8gVXNlZCB0byByZWFkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2VzICgnXFx4JywgJ1xcdScsICdcXFUnKS5cblxucHAkOS5yZWFkSGV4Q2hhciA9IGZ1bmN0aW9uKGxlbikge1xuICB2YXIgY29kZVBvcyA9IHRoaXMucG9zO1xuICB2YXIgbiA9IHRoaXMucmVhZEludCgxNiwgbGVuKTtcbiAgaWYgKG4gPT09IG51bGwpIHsgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oY29kZVBvcywgXCJCYWQgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZVwiKTsgfVxuICByZXR1cm4gblxufTtcblxuLy8gUmVhZCBhbiBpZGVudGlmaWVyLCBhbmQgcmV0dXJuIGl0IGFzIGEgc3RyaW5nLiBTZXRzIGB0aGlzLmNvbnRhaW5zRXNjYFxuLy8gdG8gd2hldGhlciB0aGUgd29yZCBjb250YWluZWQgYSAnXFx1JyBlc2NhcGUuXG4vL1xuLy8gSW5jcmVtZW50YWxseSBhZGRzIG9ubHkgZXNjYXBlZCBjaGFycywgYWRkaW5nIG90aGVyIGNodW5rcyBhcy1pc1xuLy8gYXMgYSBtaWNyby1vcHRpbWl6YXRpb24uXG5cbnBwJDkucmVhZFdvcmQxID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY29udGFpbnNFc2MgPSBmYWxzZTtcbiAgdmFyIHdvcmQgPSBcIlwiLCBmaXJzdCA9IHRydWUsIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgdmFyIGFzdHJhbCA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2O1xuICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgIHZhciBjaCA9IHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKTtcbiAgICBpZiAoaXNJZGVudGlmaWVyQ2hhcihjaCwgYXN0cmFsKSkge1xuICAgICAgdGhpcy5wb3MgKz0gY2ggPD0gMHhmZmZmID8gMSA6IDI7XG4gICAgfSBlbHNlIGlmIChjaCA9PT0gOTIpIHsgLy8gXCJcXFwiXG4gICAgICB0aGlzLmNvbnRhaW5zRXNjID0gdHJ1ZTtcbiAgICAgIHdvcmQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICB2YXIgZXNjU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcykgIT09IDExNykgLy8gXCJ1XCJcbiAgICAgICAgeyB0aGlzLmludmFsaWRTdHJpbmdUb2tlbih0aGlzLnBvcywgXCJFeHBlY3RpbmcgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UgXFxcXHVYWFhYXCIpOyB9XG4gICAgICArK3RoaXMucG9zO1xuICAgICAgdmFyIGVzYyA9IHRoaXMucmVhZENvZGVQb2ludCgpO1xuICAgICAgaWYgKCEoZmlyc3QgPyBpc0lkZW50aWZpZXJTdGFydCA6IGlzSWRlbnRpZmllckNoYXIpKGVzYywgYXN0cmFsKSlcbiAgICAgICAgeyB0aGlzLmludmFsaWRTdHJpbmdUb2tlbihlc2NTdGFydCwgXCJJbnZhbGlkIFVuaWNvZGUgZXNjYXBlXCIpOyB9XG4gICAgICB3b3JkICs9IGNvZGVQb2ludFRvU3RyaW5nJDEoZXNjKTtcbiAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWtcbiAgICB9XG4gICAgZmlyc3QgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gd29yZCArIHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpXG59O1xuXG4vLyBSZWFkIGFuIGlkZW50aWZpZXIgb3Iga2V5d29yZCB0b2tlbi4gV2lsbCBjaGVjayBmb3IgcmVzZXJ2ZWRcbi8vIHdvcmRzIHdoZW4gbmVjZXNzYXJ5LlxuXG5wcCQ5LnJlYWRXb3JkID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3b3JkID0gdGhpcy5yZWFkV29yZDEoKTtcbiAgdmFyIHR5cGUgPSB0eXBlcy5uYW1lO1xuICBpZiAodGhpcy5rZXl3b3Jkcy50ZXN0KHdvcmQpKSB7XG4gICAgdHlwZSA9IGtleXdvcmRzJDFbd29yZF07XG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZSwgd29yZClcbn07XG5cbi8vIEFjb3JuIGlzIGEgdGlueSwgZmFzdCBKYXZhU2NyaXB0IHBhcnNlciB3cml0dGVuIGluIEphdmFTY3JpcHQuXG5cbnZhciB2ZXJzaW9uID0gXCI3LjQuMVwiO1xuXG5QYXJzZXIuYWNvcm4gPSB7XG4gIFBhcnNlcjogUGFyc2VyLFxuICB2ZXJzaW9uOiB2ZXJzaW9uLFxuICBkZWZhdWx0T3B0aW9uczogZGVmYXVsdE9wdGlvbnMsXG4gIFBvc2l0aW9uOiBQb3NpdGlvbixcbiAgU291cmNlTG9jYXRpb246IFNvdXJjZUxvY2F0aW9uLFxuICBnZXRMaW5lSW5mbzogZ2V0TGluZUluZm8sXG4gIE5vZGU6IE5vZGUsXG4gIFRva2VuVHlwZTogVG9rZW5UeXBlLFxuICB0b2tUeXBlczogdHlwZXMsXG4gIGtleXdvcmRUeXBlczoga2V5d29yZHMkMSxcbiAgVG9rQ29udGV4dDogVG9rQ29udGV4dCxcbiAgdG9rQ29udGV4dHM6IHR5cGVzJDEsXG4gIGlzSWRlbnRpZmllckNoYXI6IGlzSWRlbnRpZmllckNoYXIsXG4gIGlzSWRlbnRpZmllclN0YXJ0OiBpc0lkZW50aWZpZXJTdGFydCxcbiAgVG9rZW46IFRva2VuLFxuICBpc05ld0xpbmU6IGlzTmV3TGluZSxcbiAgbGluZUJyZWFrOiBsaW5lQnJlYWssXG4gIGxpbmVCcmVha0c6IGxpbmVCcmVha0csXG4gIG5vbkFTQ0lJd2hpdGVzcGFjZTogbm9uQVNDSUl3aGl0ZXNwYWNlXG59O1xuXG4vLyBUaGUgbWFpbiBleHBvcnRlZCBpbnRlcmZhY2UgKHVuZGVyIGBzZWxmLmFjb3JuYCB3aGVuIGluIHRoZVxuLy8gYnJvd3NlcikgaXMgYSBgcGFyc2VgIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjb2RlIHN0cmluZyBhbmRcbi8vIHJldHVybnMgYW4gYWJzdHJhY3Qgc3ludGF4IHRyZWUgYXMgc3BlY2lmaWVkIGJ5IFtNb3ppbGxhIHBhcnNlclxuLy8gQVBJXVthcGldLlxuLy9cbi8vIFthcGldOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJXG5cbmZ1bmN0aW9uIHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBQYXJzZXIucGFyc2UoaW5wdXQsIG9wdGlvbnMpXG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcGFyc2UgYSBzaW5nbGUgZXhwcmVzc2lvbiBhdCBhIGdpdmVuXG4vLyBvZmZzZXQgaW4gYSBzdHJpbmcuIFVzZWZ1bCBmb3IgcGFyc2luZyBtaXhlZC1sYW5ndWFnZSBmb3JtYXRzXG4vLyB0aGF0IGVtYmVkIEphdmFTY3JpcHQgZXhwcmVzc2lvbnMuXG5cbmZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbkF0KGlucHV0LCBwb3MsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIFBhcnNlci5wYXJzZUV4cHJlc3Npb25BdChpbnB1dCwgcG9zLCBvcHRpb25zKVxufVxuXG4vLyBBY29ybiBpcyBvcmdhbml6ZWQgYXMgYSB0b2tlbml6ZXIgYW5kIGEgcmVjdXJzaXZlLWRlc2NlbnQgcGFyc2VyLlxuLy8gVGhlIGB0b2tlbml6ZXJgIGV4cG9ydCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIHRva2VuaXplci5cblxuZnVuY3Rpb24gdG9rZW5pemVyKGlucHV0LCBvcHRpb25zKSB7XG4gIHJldHVybiBQYXJzZXIudG9rZW5pemVyKGlucHV0LCBvcHRpb25zKVxufVxuXG5leHBvcnQgeyBOb2RlLCBQYXJzZXIsIFBvc2l0aW9uLCBTb3VyY2VMb2NhdGlvbiwgVG9rQ29udGV4dCwgVG9rZW4sIFRva2VuVHlwZSwgZGVmYXVsdE9wdGlvbnMsIGdldExpbmVJbmZvLCBpc0lkZW50aWZpZXJDaGFyLCBpc0lkZW50aWZpZXJTdGFydCwgaXNOZXdMaW5lLCBrZXl3b3JkcyQxIGFzIGtleXdvcmRUeXBlcywgbGluZUJyZWFrLCBsaW5lQnJlYWtHLCBub25BU0NJSXdoaXRlc3BhY2UsIHBhcnNlLCBwYXJzZUV4cHJlc3Npb25BdCwgdHlwZXMkMSBhcyB0b2tDb250ZXh0cywgdHlwZXMgYXMgdG9rVHlwZXMsIHRva2VuaXplciwgdmVyc2lvbiB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/acorn/dist/acorn.mjs\n')},"../../node_modules/airbnb-js-shims/index.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/airbnb-js-shims/target/es5.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvaW5kZXguanM/OGIwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBTyxDQUFDLGtEQUFjIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJy4vdGFyZ2V0L2VzNScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/index.js\n')},"../../node_modules/airbnb-js-shims/target/es2015.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/es6-shim/es6-shim.js");\n\n__webpack_require__("../../node_modules/function.prototype.name/shim.js")();\n\n__webpack_require__("../../node_modules/airbnb-js-shims/target/es2016.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzMjAxNS5qcz9lZWM5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFPLENBQUMseUNBQVU7O0FBRWxCLG1CQUFPLENBQUMsb0RBQThCOztBQUV0QyxtQkFBTyxDQUFDLHFEQUFVIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzMjAxNS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxucmVxdWlyZSgnZXM2LXNoaW0nKTtcblxucmVxdWlyZSgnZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvc2hpbScpKCk7XG5cbnJlcXVpcmUoJy4vZXMyMDE2Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/target/es2015.js\n')},"../../node_modules/airbnb-js-shims/target/es2016.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n// Array#includes is stage 4, in ES7/ES2016\n__webpack_require__("../../node_modules/array-includes/shim.js")();\n\n__webpack_require__("../../node_modules/airbnb-js-shims/target/es2017.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzMjAxNi5qcz81ZWNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0EsbUJBQU8sQ0FBQywyQ0FBcUI7O0FBRTdCLG1CQUFPLENBQUMscURBQVUiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FpcmJuYi1qcy1zaGltcy90YXJnZXQvZXMyMDE2LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBBcnJheSNpbmNsdWRlcyBpcyBzdGFnZSA0LCBpbiBFUzcvRVMyMDE2XG5yZXF1aXJlKCdhcnJheS1pbmNsdWRlcy9zaGltJykoKTtcblxucmVxdWlyZSgnLi9lczIwMTcnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/target/es2016.js\n')},"../../node_modules/airbnb-js-shims/target/es2017.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n// Object.values/Object.entries are stage 4, in ES2017\n__webpack_require__("../../node_modules/object.values/shim.js")();\n__webpack_require__("../../node_modules/object.entries/shim.js")();\n\n// String#padStart/String#padEnd are stage 4, in ES2017\n__webpack_require__("../../node_modules/string.prototype.padstart/shim.js")();\n__webpack_require__("../../node_modules/string.prototype.padend/shim.js")();\n\n// Object.getOwnPropertyDescriptors is stage 4, in ES2017\n__webpack_require__("../../node_modules/object.getownpropertydescriptors/shim.js")();\n\n__webpack_require__("../../node_modules/airbnb-js-shims/target/es2018.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzMjAxNy5qcz9mZDM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0EsbUJBQU8sQ0FBQywwQ0FBb0I7QUFDNUIsbUJBQU8sQ0FBQywyQ0FBcUI7O0FBRTdCO0FBQ0EsbUJBQU8sQ0FBQyxzREFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxvREFBOEI7O0FBRXRDO0FBQ0EsbUJBQU8sQ0FBQyw2REFBdUM7O0FBRS9DLG1CQUFPLENBQUMscURBQVUiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FpcmJuYi1qcy1zaGltcy90YXJnZXQvZXMyMDE3LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vLyBPYmplY3QudmFsdWVzL09iamVjdC5lbnRyaWVzIGFyZSBzdGFnZSA0LCBpbiBFUzIwMTdcbnJlcXVpcmUoJ29iamVjdC52YWx1ZXMvc2hpbScpKCk7XG5yZXF1aXJlKCdvYmplY3QuZW50cmllcy9zaGltJykoKTtcblxuLy8gU3RyaW5nI3BhZFN0YXJ0L1N0cmluZyNwYWRFbmQgYXJlIHN0YWdlIDQsIGluIEVTMjAxN1xucmVxdWlyZSgnc3RyaW5nLnByb3RvdHlwZS5wYWRzdGFydC9zaGltJykoKTtcbnJlcXVpcmUoJ3N0cmluZy5wcm90b3R5cGUucGFkZW5kL3NoaW0nKSgpO1xuXG4vLyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyBpcyBzdGFnZSA0LCBpbiBFUzIwMTdcbnJlcXVpcmUoJ29iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzL3NoaW0nKSgpO1xuXG5yZXF1aXJlKCcuL2VzMjAxOCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/target/es2017.js\n')},"../../node_modules/airbnb-js-shims/target/es2018.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nif (typeof Promise === \'function\') {\n __webpack_require__("../../node_modules/promise.prototype.finally/auto.js"); // eslint-disable-line global-require\n}\n\n__webpack_require__("../../node_modules/airbnb-js-shims/target/es2019.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzMjAxOC5qcz83Njg2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0EsRUFBRSxtQkFBTyxDQUFDLHNEQUFnQyxFQUFFO0FBQzVDOztBQUVBLG1CQUFPLENBQUMscURBQVUiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FpcmJuYi1qcy1zaGltcy90YXJnZXQvZXMyMDE4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAodHlwZW9mIFByb21pc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgcmVxdWlyZSgncHJvbWlzZS5wcm90b3R5cGUuZmluYWxseS9hdXRvJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcbn1cblxucmVxdWlyZSgnLi9lczIwMTknKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/target/es2018.js\n')},"../../node_modules/airbnb-js-shims/target/es2019.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/array.prototype.flat/auto.js");\n__webpack_require__("../../node_modules/array.prototype.flatmap/auto.js");\n\n__webpack_require__("../../node_modules/symbol.prototype.description/auto.js");\n\n__webpack_require__("../../node_modules/object.fromentries/auto.js");\n\n__webpack_require__("../../node_modules/airbnb-js-shims/target/es2020.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzMjAxOS5qcz81YmM4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFPLENBQUMsaURBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0RBQThCOztBQUV0QyxtQkFBTyxDQUFDLHlEQUFtQzs7QUFFM0MsbUJBQU8sQ0FBQywrQ0FBeUI7O0FBRWpDLG1CQUFPLENBQUMscURBQVUiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FpcmJuYi1qcy1zaGltcy90YXJnZXQvZXMyMDE5LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5yZXF1aXJlKCdhcnJheS5wcm90b3R5cGUuZmxhdC9hdXRvJyk7XG5yZXF1aXJlKCdhcnJheS5wcm90b3R5cGUuZmxhdG1hcC9hdXRvJyk7XG5cbnJlcXVpcmUoJ3N5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb24vYXV0bycpO1xuXG5yZXF1aXJlKCdvYmplY3QuZnJvbWVudHJpZXMvYXV0bycpO1xuXG5yZXF1aXJlKCcuL2VzMjAyMCcpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/target/es2019.js\n')},"../../node_modules/airbnb-js-shims/target/es2020.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/string.prototype.matchall/auto.js");\n\n__webpack_require__("../../node_modules/globalthis/auto.js");\n\n__webpack_require__("../../node_modules/promise.allsettled/auto.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzMjAyMC5qcz9lNjU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFPLENBQUMsc0RBQWdDOztBQUV4QyxtQkFBTyxDQUFDLHVDQUFpQjs7QUFFekIsbUJBQU8sQ0FBQywrQ0FBeUIiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FpcmJuYi1qcy1zaGltcy90YXJnZXQvZXMyMDIwLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5yZXF1aXJlKCdzdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsL2F1dG8nKTtcblxucmVxdWlyZSgnZ2xvYmFsdGhpcy9hdXRvJyk7XG5cbnJlcXVpcmUoJ3Byb21pc2UuYWxsc2V0dGxlZC9hdXRvJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/target/es2020.js\n')},"../../node_modules/airbnb-js-shims/target/es5.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/es5-shim/es5-shim.js");\n__webpack_require__("../../node_modules/es5-shim/es5-sham.js");\n\n__webpack_require__("../../node_modules/airbnb-js-shims/target/es2015.js");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9haXJibmItanMtc2hpbXMvdGFyZ2V0L2VzNS5qcz9lYTcxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFPLENBQUMseUNBQVU7QUFDbEIsbUJBQU8sQ0FBQyx5Q0FBbUI7O0FBRTNCLG1CQUFPLENBQUMscURBQVUiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FpcmJuYi1qcy1zaGltcy90YXJnZXQvZXM1LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5yZXF1aXJlKCdlczUtc2hpbScpO1xucmVxdWlyZSgnZXM1LXNoaW0vZXM1LXNoYW0nKTtcblxucmVxdWlyZSgnLi9lczIwMTUnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/airbnb-js-shims/target/es5.js\n')},"../../node_modules/ansi-to-html/lib/ansi_to_html.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { 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 it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, 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(n); 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\nvar entities = __webpack_require__(\"../../node_modules/entities/lib/index.js\");\n\nvar defaults = {\n fg: '#FFF',\n bg: '#000',\n newline: false,\n escapeXML: false,\n stream: false,\n colors: getDefaultColors()\n};\n\nfunction getDefaultColors() {\n var colors = {\n 0: '#000',\n 1: '#A00',\n 2: '#0A0',\n 3: '#A50',\n 4: '#00A',\n 5: '#A0A',\n 6: '#0AA',\n 7: '#AAA',\n 8: '#555',\n 9: '#F55',\n 10: '#5F5',\n 11: '#FF5',\n 12: '#55F',\n 13: '#F5F',\n 14: '#5FF',\n 15: '#FFF'\n };\n range(0, 5).forEach(function (red) {\n range(0, 5).forEach(function (green) {\n range(0, 5).forEach(function (blue) {\n return setStyleColor(red, green, blue, colors);\n });\n });\n });\n range(0, 23).forEach(function (gray) {\n var c = gray + 232;\n var l = toHexString(gray * 10 + 8);\n colors[c] = '#' + l + l + l;\n });\n return colors;\n}\n/**\n * @param {number} red\n * @param {number} green\n * @param {number} blue\n * @param {object} colors\n */\n\n\nfunction setStyleColor(red, green, blue, colors) {\n var c = 16 + red * 36 + green * 6 + blue;\n var r = red > 0 ? red * 40 + 55 : 0;\n var g = green > 0 ? green * 40 + 55 : 0;\n var b = blue > 0 ? blue * 40 + 55 : 0;\n colors[c] = toColorHexString([r, g, b]);\n}\n/**\n * Converts from a number like 15 to a hex string like 'F'\n * @param {number} num\n * @returns {string}\n */\n\n\nfunction toHexString(num) {\n var str = num.toString(16);\n\n while (str.length < 2) {\n str = '0' + str;\n }\n\n return str;\n}\n/**\n * Converts from an array of numbers like [15, 15, 15] to a hex string like 'FFF'\n * @param {[red, green, blue]} ref\n * @returns {string}\n */\n\n\nfunction toColorHexString(ref) {\n var results = [];\n\n var _iterator = _createForOfIteratorHelper(ref),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var r = _step.value;\n results.push(toHexString(r));\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return '#' + results.join('');\n}\n/**\n * @param {Array} stack\n * @param {string} token\n * @param {*} data\n * @param {object} options\n */\n\n\nfunction generateOutput(stack, token, data, options) {\n var result;\n\n if (token === 'text') {\n result = pushText(data, options);\n } else if (token === 'display') {\n result = handleDisplay(stack, data, options);\n } else if (token === 'xterm256') {\n result = pushForegroundColor(stack, options.colors[data]);\n } else if (token === 'rgb') {\n result = handleRgb(stack, data);\n }\n\n return result;\n}\n/**\n * @param {Array} stack\n * @param {string} data\n * @returns {*}\n */\n\n\nfunction handleRgb(stack, data) {\n data = data.substring(2).slice(0, -1);\n var operation = +data.substr(0, 2);\n var color = data.substring(5).split(';');\n var rgb = color.map(function (value) {\n return ('0' + Number(value).toString(16)).substr(-2);\n }).join('');\n return pushStyle(stack, (operation === 38 ? 'color:#' : 'background-color:#') + rgb);\n}\n/**\n * @param {Array} stack\n * @param {number} code\n * @param {object} options\n * @returns {*}\n */\n\n\nfunction handleDisplay(stack, code, options) {\n code = parseInt(code, 10);\n var codeMap = {\n '-1': function _() {\n return '<br/>';\n },\n 0: function _() {\n return stack.length && resetStyles(stack);\n },\n 1: function _() {\n return pushTag(stack, 'b');\n },\n 3: function _() {\n return pushTag(stack, 'i');\n },\n 4: function _() {\n return pushTag(stack, 'u');\n },\n 8: function _() {\n return pushStyle(stack, 'display:none');\n },\n 9: function _() {\n return pushTag(stack, 'strike');\n },\n 22: function _() {\n return pushStyle(stack, 'font-weight:normal;text-decoration:none;font-style:normal');\n },\n 23: function _() {\n return closeTag(stack, 'i');\n },\n 24: function _() {\n return closeTag(stack, 'u');\n },\n 39: function _() {\n return pushForegroundColor(stack, options.fg);\n },\n 49: function _() {\n return pushBackgroundColor(stack, options.bg);\n },\n 53: function _() {\n return pushStyle(stack, 'text-decoration:overline');\n }\n };\n var result;\n\n if (codeMap[code]) {\n result = codeMap[code]();\n } else if (4 < code && code < 7) {\n result = pushTag(stack, 'blink');\n } else if (29 < code && code < 38) {\n result = pushForegroundColor(stack, options.colors[code - 30]);\n } else if (39 < code && code < 48) {\n result = pushBackgroundColor(stack, options.colors[code - 40]);\n } else if (89 < code && code < 98) {\n result = pushForegroundColor(stack, options.colors[8 + (code - 90)]);\n } else if (99 < code && code < 108) {\n result = pushBackgroundColor(stack, options.colors[8 + (code - 100)]);\n }\n\n return result;\n}\n/**\n * Clear all the styles\n * @returns {string}\n */\n\n\nfunction resetStyles(stack) {\n var stackClone = stack.slice(0);\n stack.length = 0;\n return stackClone.reverse().map(function (tag) {\n return '</' + tag + '>';\n }).join('');\n}\n/**\n * Creates an array of numbers ranging from low to high\n * @param {number} low\n * @param {number} high\n * @returns {Array}\n * @example range(3, 7); // creates [3, 4, 5, 6, 7]\n */\n\n\nfunction range(low, high) {\n var results = [];\n\n for (var j = low; j <= high; j++) {\n results.push(j);\n }\n\n return results;\n}\n/**\n * Returns a new function that is true if value is NOT the same category\n * @param {string} category\n * @returns {function}\n */\n\n\nfunction notCategory(category) {\n return function (e) {\n return (category === null || e.category !== category) && category !== 'all';\n };\n}\n/**\n * Converts a code into an ansi token type\n * @param {number} code\n * @returns {string}\n */\n\n\nfunction categoryForCode(code) {\n code = parseInt(code, 10);\n var result = null;\n\n if (code === 0) {\n result = 'all';\n } else if (code === 1) {\n result = 'bold';\n } else if (2 < code && code < 5) {\n result = 'underline';\n } else if (4 < code && code < 7) {\n result = 'blink';\n } else if (code === 8) {\n result = 'hide';\n } else if (code === 9) {\n result = 'strike';\n } else if (29 < code && code < 38 || code === 39 || 89 < code && code < 98) {\n result = 'foreground-color';\n } else if (39 < code && code < 48 || code === 49 || 99 < code && code < 108) {\n result = 'background-color';\n }\n\n return result;\n}\n/**\n * @param {string} text\n * @param {object} options\n * @returns {string}\n */\n\n\nfunction pushText(text, options) {\n if (options.escapeXML) {\n return entities.encodeXML(text);\n }\n\n return text;\n}\n/**\n * @param {Array} stack\n * @param {string} tag\n * @param {string} [style='']\n * @returns {string}\n */\n\n\nfunction pushTag(stack, tag, style) {\n if (!style) {\n style = '';\n }\n\n stack.push(tag);\n return \"<\".concat(tag).concat(style ? \" style=\\\"\".concat(style, \"\\\"\") : '', \">\");\n}\n/**\n * @param {Array} stack\n * @param {string} style\n * @returns {string}\n */\n\n\nfunction pushStyle(stack, style) {\n return pushTag(stack, 'span', style);\n}\n\nfunction pushForegroundColor(stack, color) {\n return pushTag(stack, 'span', 'color:' + color);\n}\n\nfunction pushBackgroundColor(stack, color) {\n return pushTag(stack, 'span', 'background-color:' + color);\n}\n/**\n * @param {Array} stack\n * @param {string} style\n * @returns {string}\n */\n\n\nfunction closeTag(stack, style) {\n var last;\n\n if (stack.slice(-1)[0] === style) {\n last = stack.pop();\n }\n\n if (last) {\n return '</' + style + '>';\n }\n}\n/**\n * @param {string} text\n * @param {object} options\n * @param {function} callback\n * @returns {Array}\n */\n\n\nfunction tokenize(text, options, callback) {\n var ansiMatch = false;\n var ansiHandler = 3;\n\n function remove() {\n return '';\n }\n\n function removeXterm256(m, g1) {\n callback('xterm256', g1);\n return '';\n }\n\n function newline(m) {\n if (options.newline) {\n callback('display', -1);\n } else {\n callback('text', m);\n }\n\n return '';\n }\n\n function ansiMess(m, g1) {\n ansiMatch = true;\n\n if (g1.trim().length === 0) {\n g1 = '0';\n }\n\n g1 = g1.trimRight(';').split(';');\n\n var _iterator2 = _createForOfIteratorHelper(g1),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var g = _step2.value;\n callback('display', g);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return '';\n }\n\n function realText(m) {\n callback('text', m);\n return '';\n }\n\n function rgb(m) {\n callback('rgb', m);\n return '';\n }\n /* eslint no-control-regex:0 */\n\n\n var tokens = [{\n pattern: /^\\x08+/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[[012]?K/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[\\(B/,\n sub: remove\n }, {\n pattern: /^\\x1b\\[[34]8;2;\\d+;\\d+;\\d+m/,\n sub: rgb\n }, {\n pattern: /^\\x1b\\[38;5;(\\d+)m/,\n sub: removeXterm256\n }, {\n pattern: /^\\n/,\n sub: newline\n }, {\n pattern: /^\\r+\\n/,\n sub: newline\n }, {\n pattern: /^\\x1b\\[((?:\\d{1,3};?)+|)m/,\n sub: ansiMess\n }, {\n // CSI n J\n // ED - Erase in Display Clears part of the screen.\n // If n is 0 (or missing), clear from cursor to end of screen.\n // If n is 1, clear from cursor to beginning of the screen.\n // If n is 2, clear entire screen (and moves cursor to upper left on DOS ANSI.SYS).\n // If n is 3, clear entire screen and delete all lines saved in the scrollback buffer\n // (this feature was added for xterm and is supported by other terminal applications).\n pattern: /^\\x1b\\[\\d?J/,\n sub: remove\n }, {\n // CSI n ; m f\n // HVP - Horizontal Vertical Position Same as CUP\n pattern: /^\\x1b\\[\\d{0,3};\\d{0,3}f/,\n sub: remove\n }, {\n // catch-all for CSI sequences?\n pattern: /^\\x1b\\[?[\\d;]{0,3}/,\n sub: remove\n }, {\n /**\n * extracts real text - not containing:\n * - `\\x1b' - ESC - escape (Ascii 27)\n * - '\\x08' - BS - backspace (Ascii 8)\n * - `\\n` - Newline - linefeed (LF) (ascii 10)\n * - `\\r` - Windows Carriage Return (CR)\n */\n pattern: /^(([^\\x1b\\x08\\r\\n])+)/,\n sub: realText\n }];\n\n function process(handler, i) {\n if (i > ansiHandler && ansiMatch) {\n return;\n }\n\n ansiMatch = false;\n text = text.replace(handler.pattern, handler.sub);\n }\n\n var results1 = [];\n var _text = text,\n length = _text.length;\n\n outer: while (length > 0) {\n for (var i = 0, o = 0, len = tokens.length; o < len; i = ++o) {\n var handler = tokens[i];\n process(handler, i);\n\n if (text.length !== length) {\n // We matched a token and removed it from the text. We need to\n // start matching *all* tokens against the new text.\n length = text.length;\n continue outer;\n }\n }\n\n if (text.length === length) {\n break;\n }\n\n results1.push(0);\n length = text.length;\n }\n\n return results1;\n}\n/**\n * If streaming, then the stack is \"sticky\"\n *\n * @param {Array} stickyStack\n * @param {string} token\n * @param {*} data\n * @returns {Array}\n */\n\n\nfunction updateStickyStack(stickyStack, token, data) {\n if (token !== 'text') {\n stickyStack = stickyStack.filter(notCategory(categoryForCode(data)));\n stickyStack.push({\n token: token,\n data: data,\n category: categoryForCode(data)\n });\n }\n\n return stickyStack;\n}\n\nvar Filter = /*#__PURE__*/function () {\n /**\n * @param {object} options\n * @param {string=} options.fg The default foreground color used when reset color codes are encountered.\n * @param {string=} options.bg The default background color used when reset color codes are encountered.\n * @param {boolean=} options.newline Convert newline characters to `<br/>`.\n * @param {boolean=} options.escapeXML Generate HTML/XML entities.\n * @param {boolean=} options.stream Save style state across invocations of `toHtml()`.\n * @param {(string[] | {[code: number]: string})=} options.colors Can override specific colors or the entire ANSI palette.\n */\n function Filter(options) {\n _classCallCheck(this, Filter);\n\n options = options || {};\n\n if (options.colors) {\n options.colors = Object.assign({}, defaults.colors, options.colors);\n }\n\n this.options = Object.assign({}, defaults, options);\n this.stack = [];\n this.stickyStack = [];\n }\n /**\n * @param {string | string[]} input\n * @returns {string}\n */\n\n\n _createClass(Filter, [{\n key: \"toHtml\",\n value: function toHtml(input) {\n var _this = this;\n\n input = typeof input === 'string' ? [input] : input;\n var stack = this.stack,\n options = this.options;\n var buf = [];\n this.stickyStack.forEach(function (element) {\n var output = generateOutput(stack, element.token, element.data, options);\n\n if (output) {\n buf.push(output);\n }\n });\n tokenize(input.join(''), options, function (token, data) {\n var output = generateOutput(stack, token, data, options);\n\n if (output) {\n buf.push(output);\n }\n\n if (options.stream) {\n _this.stickyStack = updateStickyStack(_this.stickyStack, token, data);\n }\n });\n\n if (stack.length) {\n buf.push(resetStyles(stack));\n }\n\n return buf.join('');\n }\n }]);\n\n return Filter;\n}();\n\nmodule.exports = Filter;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hbnNpLXRvLWh0bWwvc3JjL2Fuc2lfdG9faHRtbC5qcz9hNjJiIl0sIm5hbWVzIjpbImVudGl0aWVzIiwicmVxdWlyZSIsImRlZmF1bHRzIiwiZmciLCJiZyIsIm5ld2xpbmUiLCJlc2NhcGVYTUwiLCJzdHJlYW0iLCJjb2xvcnMiLCJnZXREZWZhdWx0Q29sb3JzIiwicmFuZ2UiLCJmb3JFYWNoIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwic2V0U3R5bGVDb2xvciIsImdyYXkiLCJjIiwibCIsInRvSGV4U3RyaW5nIiwiciIsImciLCJiIiwidG9Db2xvckhleFN0cmluZyIsIm51bSIsInN0ciIsInRvU3RyaW5nIiwibGVuZ3RoIiwicmVmIiwicmVzdWx0cyIsInB1c2giLCJqb2luIiwiZ2VuZXJhdGVPdXRwdXQiLCJzdGFjayIsInRva2VuIiwiZGF0YSIsIm9wdGlvbnMiLCJyZXN1bHQiLCJwdXNoVGV4dCIsImhhbmRsZURpc3BsYXkiLCJwdXNoRm9yZWdyb3VuZENvbG9yIiwiaGFuZGxlUmdiIiwic3Vic3RyaW5nIiwic2xpY2UiLCJvcGVyYXRpb24iLCJzdWJzdHIiLCJjb2xvciIsInNwbGl0IiwicmdiIiwibWFwIiwidmFsdWUiLCJOdW1iZXIiLCJwdXNoU3R5bGUiLCJjb2RlIiwicGFyc2VJbnQiLCJjb2RlTWFwIiwicmVzZXRTdHlsZXMiLCJwdXNoVGFnIiwiY2xvc2VUYWciLCJwdXNoQmFja2dyb3VuZENvbG9yIiwic3RhY2tDbG9uZSIsInJldmVyc2UiLCJ0YWciLCJsb3ciLCJoaWdoIiwiaiIsIm5vdENhdGVnb3J5IiwiY2F0ZWdvcnkiLCJlIiwiY2F0ZWdvcnlGb3JDb2RlIiwidGV4dCIsImVuY29kZVhNTCIsInN0eWxlIiwibGFzdCIsInBvcCIsInRva2VuaXplIiwiY2FsbGJhY2siLCJhbnNpTWF0Y2giLCJhbnNpSGFuZGxlciIsInJlbW92ZSIsInJlbW92ZVh0ZXJtMjU2IiwibSIsImcxIiwiYW5zaU1lc3MiLCJ0cmltIiwidHJpbVJpZ2h0IiwicmVhbFRleHQiLCJ0b2tlbnMiLCJwYXR0ZXJuIiwic3ViIiwicHJvY2VzcyIsImhhbmRsZXIiLCJpIiwicmVwbGFjZSIsInJlc3VsdHMxIiwib3V0ZXIiLCJvIiwibGVuIiwidXBkYXRlU3RpY2t5U3RhY2siLCJzdGlja3lTdGFjayIsImZpbHRlciIsIkZpbHRlciIsIk9iamVjdCIsImFzc2lnbiIsImlucHV0IiwiYnVmIiwiZWxlbWVudCIsIm91dHB1dCIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFhOzs7Ozs7Ozs7Ozs7OztBQUNiLElBQU1BLFFBQVEsR0FBR0MsbUJBQU8sQ0FBQywwQ0FBRCxDQUF4Qjs7QUFDQSxJQUFNQyxRQUFRLEdBQUc7QUFDYkMsSUFBRSxFQUFFLE1BRFM7QUFFYkMsSUFBRSxFQUFFLE1BRlM7QUFHYkMsU0FBTyxFQUFFLEtBSEk7QUFJYkMsV0FBUyxFQUFFLEtBSkU7QUFLYkMsUUFBTSxFQUFFLEtBTEs7QUFNYkMsUUFBTSxFQUFFQyxnQkFBZ0I7QUFOWCxDQUFqQjs7QUFTQSxTQUFTQSxnQkFBVCxHQUE0QjtBQUN4QixNQUFNRCxNQUFNLEdBQUc7QUFDWCxPQUFHLE1BRFE7QUFFWCxPQUFHLE1BRlE7QUFHWCxPQUFHLE1BSFE7QUFJWCxPQUFHLE1BSlE7QUFLWCxPQUFHLE1BTFE7QUFNWCxPQUFHLE1BTlE7QUFPWCxPQUFHLE1BUFE7QUFRWCxPQUFHLE1BUlE7QUFTWCxPQUFHLE1BVFE7QUFVWCxPQUFHLE1BVlE7QUFXWCxRQUFJLE1BWE87QUFZWCxRQUFJLE1BWk87QUFhWCxRQUFJLE1BYk87QUFjWCxRQUFJLE1BZE87QUFlWCxRQUFJLE1BZk87QUFnQlgsUUFBSTtBQWhCTyxHQUFmO0FBbUJBRSxPQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBTCxDQUFZQyxPQUFaLENBQW9CLFVBQUFDLEdBQUcsRUFBSTtBQUN2QkYsU0FB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T0FBTyxDQUFDdkUsSUFBL0IsRUFBcUNDLE9BQXJDLENBQTdCOztBQUVBLFlBQUl1RSxNQUFKLEVBQVk7QUFDUkYsYUFBRyxDQUFDM0UsSUFBSixDQUFTNkUsTUFBVDtBQUNIO0FBQ0osT0FORDtBQVFBaEMsY0FBUSxDQUFDNkIsS0FBSyxDQUFDekUsSUFBTixDQUFXLEVBQVgsQ0FBRCxFQUFpQkssT0FBakIsRUFBMEIsVUFBQ0YsS0FBRCxFQUFRQyxJQUFSLEVBQWlCO0FBQy9DLFlBQU13RSxNQUFNLEdBQUczRSxjQUFjLENBQUNDLEtBQUQsRUFBUUMsS0FBUixFQUFlQyxJQUFmLEVBQXFCQyxPQUFyQixDQUE3Qjs7QUFFQSxZQUFJdUUsTUFBSixFQUFZO0FBQ1JGLGFBQUcsQ0FBQzNFLElBQUosQ0FBUzZFLE1BQVQ7QUFDSDs7QUFFRCxZQUFJdkUsT0FBTyxDQUFDN0IsTUFBWixFQUFvQjtBQUNoQixlQUFJLENBQUM0RixXQUFMLEdBQW1CRCxpQkFBaUIsQ0FBQyxLQUFJLENBQUNDLFdBQU4sRUFBbUJqRSxLQUFuQixFQUEwQkMsSUFBMUIsQ0FBcEM7QUFDSDtBQUNKLE9BVk8sQ0FBUjs7QUFZQSxVQUFJRixLQUFLLENBQUNOLE1BQVYsRUFBa0I7QUFDZDhFLFdBQUcsQ0FBQzNFLElBQUosQ0FBUzBCLFdBQVcsQ0FBQ3ZCLEtBQUQsQ0FBcEI7QUFDSDs7QUFFRCxhQUFPd0UsR0FBRyxDQUFDMUUsSUFBSixDQUFTLEVBQVQsQ0FBUDtBQUNIOzs7Ozs7QUFHTDZFLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlIsTUFBakIiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2Fuc2ktdG8taHRtbC9saWIvYW5zaV90b19odG1sLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZW50aXRpZXMgPSByZXF1aXJlKCdlbnRpdGllcycpO1xuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgZmc6ICcjRkZGJyxcbiAgICBiZzogJyMwMDAnLFxuICAgIG5ld2xpbmU6IGZhbHNlLFxuICAgIGVzY2FwZVhNTDogZmFsc2UsXG4gICAgc3RyZWFtOiBmYWxzZSxcbiAgICBjb2xvcnM6IGdldERlZmF1bHRDb2xvcnMoKVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbG9ycygpIHtcbiAgICBjb25zdCBjb2xvcnMgPSB7XG4gICAgICAgIDA6ICcjMDAwJyxcbiAgICAgICAgMTogJyNBMDAnLFxuICAgICAgICAyOiAnIzBBMCcsXG4gICAgICAgIDM6ICcjQTUwJyxcbiAgICAgICAgNDogJyMwMEEnLFxuICAgICAgICA1OiAnI0EwQScsXG4gICAgICAgIDY6ICcjMEFBJyxcbiAgICAgICAgNzogJyNBQUEnLFxuICAgICAgICA4OiAnIzU1NScsXG4gICAgICAgIDk6ICcjRjU1JyxcbiAgICAgICAgMTA6ICcjNUY1JyxcbiAgICAgICAgMTE6ICcjRkY1JyxcbiAgICAgICAgMTI6ICcjNTVGJyxcbiAgICAgICAgMTM6ICcjRjVGJyxcbiAgICAgICAgMTQ6ICcjNUZGJyxcbiAgICAgICAgMTU6ICcjRkZGJ1xuICAgIH07XG5cbiAgICByYW5nZSgwLCA1KS5mb3JFYWNoKHJlZCA9PiB7XG4gICAgICAgIHJhbmdlKDAsIDUpLmZvckVhY2goZ3JlZW4gPT4ge1xuICAgICAgICAgICAgcmFuZ2UoMCwgNSkuZm9yRWFjaChibHVlID0+IHNldFN0eWxlQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgY29sb3JzKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmFuZ2UoMCwgMjMpLmZvckVhY2goZnVuY3Rpb24gKGdyYXkpIHtcbiAgICAgICAgY29uc3QgYyA9IGdyYXkgKyAyMzI7XG4gICAgICAgIGNvbnN0IGwgPSB0b0hleFN0cmluZyhncmF5ICogMTAgKyA4KTtcblxuICAgICAgICBjb2xvcnNbY10gPSAnIycgKyBsICsgbCArIGw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29sb3JzO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmVlblxuICogQHBhcmFtIHtudW1iZXJ9IGJsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2xvcnNcbiAqL1xuZnVuY3Rpb24gc2V0U3R5bGVDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBjb2xvcnMpIHtcbiAgICBjb25zdCBjID0gMTYgKyAocmVkICogMzYpICsgKGdyZWVuICogNikgKyBibHVlO1xuICAgIGNvbnN0IHIgPSByZWQgPiAwID8gcmVkICogNDAgKyA1NSA6IDA7XG4gICAgY29uc3QgZyA9IGdyZWVuID4gMCA/IGdyZWVuICogNDAgKyA1NSA6IDA7XG4gICAgY29uc3QgYiA9IGJsdWUgPiAwID8gYmx1ZSAqIDQwICsgNTUgOiAwO1xuXG4gICAgY29sb3JzW2NdID0gdG9Db2xvckhleFN0cmluZyhbciwgZywgYl0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSBudW1iZXIgbGlrZSAxNSB0byBhIGhleCBzdHJpbmcgbGlrZSAnRidcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRvSGV4U3RyaW5nKG51bSkge1xuICAgIGxldCBzdHIgPSBudW0udG9TdHJpbmcoMTYpO1xuXG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSB7XG4gICAgICAgIHN0ciA9ICcwJyArIHN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYW4gYXJyYXkgb2YgbnVtYmVycyBsaWtlIFsxNSwgMTUsIDE1XSB0byBhIGhleCBzdHJpbmcgbGlrZSAnRkZGJ1xuICogQHBhcmFtIHtbcmVkLCBncmVlbiwgYmx1ZV19IHJlZlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9Db2xvckhleFN0cmluZyhyZWYpIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHIgb2YgcmVmKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh0b0hleFN0cmluZyhyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcjJyArIHJlc3VsdHMuam9pbignJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBnZW5lcmF0ZU91dHB1dChzdGFjaywgdG9rZW4sIGRhdGEsIG9wdGlvbnMpIHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKHRva2VuID09PSAndGV4dCcpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaFRleHQoZGF0YSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ2Rpc3BsYXknKSB7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZURpc3BsYXkoc3RhY2ssIGRhdGEsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICd4dGVybTI1NicpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEZvcmVncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbZGF0YV0pO1xuICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICdyZ2InKSB7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZVJnYihzdGFjaywgZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBoYW5kbGVSZ2Ioc3RhY2ssIGRhdGEpIHtcbiAgICBkYXRhID0gZGF0YS5zdWJzdHJpbmcoMikuc2xpY2UoMCwgLTEpO1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9ICtkYXRhLnN1YnN0cigwLDIpO1xuXG4gICAgY29uc3QgY29sb3IgPSBkYXRhLnN1YnN0cmluZyg1KS5zcGxpdCgnOycpO1xuICAgIGNvbnN0IHJnYiA9IGNvbG9yLm1hcChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKCcwJyArIE51bWJlcih2YWx1ZSkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpO1xuICAgIH0pLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIHB1c2hTdHlsZShzdGFjaywgKG9wZXJhdGlvbiA9PT0gMzggPyAnY29sb3I6IycgOiAnYmFja2dyb3VuZC1jb2xvcjojJykgKyByZ2IpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBoYW5kbGVEaXNwbGF5KHN0YWNrLCBjb2RlLCBvcHRpb25zKSB7XG4gICAgY29kZSA9IHBhcnNlSW50KGNvZGUsIDEwKTtcblxuICAgIGNvbnN0IGNvZGVNYXAgPSB7XG4gICAgICAgICctMSc6ICgpID0+ICc8YnIvPicsXG4gICAgICAgIDA6ICgpID0+IHN0YWNrLmxlbmd0aCAmJiByZXNldFN0eWxlcyhzdGFjayksXG4gICAgICAgIDE6ICgpID0+IHB1c2hUYWcoc3RhY2ssICdiJyksXG4gICAgICAgIDM6ICgpID0+IHB1c2hUYWcoc3RhY2ssICdpJyksXG4gICAgICAgIDQ6ICgpID0+IHB1c2hUYWcoc3RhY2ssICd1JyksXG4gICAgICAgIDg6ICgpID0+IHB1c2hTdHlsZShzdGFjaywgJ2Rpc3BsYXk6bm9uZScpLFxuICAgICAgICA5OiAoKSA9PiBwdXNoVGFnKHN0YWNrLCAnc3RyaWtlJyksXG4gICAgICAgIDIyOiAoKSA9PiBwdXNoU3R5bGUoc3RhY2ssICdmb250LXdlaWdodDpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zdHlsZTpub3JtYWwnKSxcbiAgICAgICAgMjM6ICgpID0+IGNsb3NlVGFnKHN0YWNrLCAnaScpLFxuICAgICAgICAyNDogKCkgPT4gY2xvc2VUYWcoc3RhY2ssICd1JyksXG4gICAgICAgIDM5OiAoKSA9PiBwdXNoRm9yZWdyb3VuZENvbG9yKHN0YWNrLCBvcHRpb25zLmZnKSxcbiAgICAgICAgNDk6ICgpID0+IHB1c2hCYWNrZ3JvdW5kQ29sb3Ioc3RhY2ssIG9wdGlvbnMuYmcpLFxuICAgICAgICA1MzogKCkgPT4gcHVzaFN0eWxlKHN0YWNrLCAndGV4dC1kZWNvcmF0aW9uOm92ZXJsaW5lJylcbiAgICB9O1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoY29kZU1hcFtjb2RlXSkge1xuICAgICAgICByZXN1bHQgPSBjb2RlTWFwW2NvZGVdKCk7XG4gICAgfSBlbHNlIGlmICg0IDwgY29kZSAmJiBjb2RlIDwgNykge1xuICAgICAgICByZXN1bHQgPSBwdXNoVGFnKHN0YWNrLCAnYmxpbmsnKTtcbiAgICB9IGVsc2UgaWYgKDI5IDwgY29kZSAmJiBjb2RlIDwgMzgpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEZvcmVncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbY29kZSAtIDMwXSk7XG4gICAgfSBlbHNlIGlmICgoMzkgPCBjb2RlICYmIGNvZGUgPCA0OCkpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEJhY2tncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbY29kZSAtIDQwXSk7XG4gICAgfSBlbHNlIGlmICgoODkgPCBjb2RlICYmIGNvZGUgPCA5OCkpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEZvcmVncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbOCArIChjb2RlIC0gOTApXSk7XG4gICAgfSBlbHNlIGlmICgoOTkgPCBjb2RlICYmIGNvZGUgPCAxMDgpKSB7XG4gICAgICAgIHJlc3VsdCA9IHB1c2hCYWNrZ3JvdW5kQ29sb3Ioc3RhY2ssIG9wdGlvbnMuY29sb3JzWzggKyAoY29kZSAtIDEwMCldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENsZWFyIGFsbCB0aGUgc3R5bGVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiByZXNldFN0eWxlcyhzdGFjaykge1xuICAgIGNvbnN0IHN0YWNrQ2xvbmUgPSBzdGFjay5zbGljZSgwKTtcblxuICAgIHN0YWNrLmxlbmd0aCA9IDA7XG5cbiAgICByZXR1cm4gc3RhY2tDbG9uZS5yZXZlcnNlKCkubWFwKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgICAgcmV0dXJuICc8LycgKyB0YWcgKyAnPic7XG4gICAgfSkuam9pbignJyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIHJhbmdpbmcgZnJvbSBsb3cgdG8gaGlnaFxuICogQHBhcmFtIHtudW1iZXJ9IGxvd1xuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2hcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBleGFtcGxlIHJhbmdlKDMsIDcpOyAvLyBjcmVhdGVzIFszLCA0LCA1LCA2LCA3XVxuICovXG5mdW5jdGlvbiByYW5nZShsb3csIGhpZ2gpIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGxldCBqID0gbG93OyBqIDw9IGhpZ2g7IGorKykge1xuICAgICAgICByZXN1bHRzLnB1c2goaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cblxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgZnVuY3Rpb24gdGhhdCBpcyB0cnVlIGlmIHZhbHVlIGlzIE5PVCB0aGUgc2FtZSBjYXRlZ29yeVxuICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5XG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIG5vdENhdGVnb3J5KGNhdGVnb3J5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiAoY2F0ZWdvcnkgPT09IG51bGwgfHwgZS5jYXRlZ29yeSAhPT0gY2F0ZWdvcnkpICYmIGNhdGVnb3J5ICE9PSAnYWxsJztcbiAgICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29kZSBpbnRvIGFuIGFuc2kgdG9rZW4gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhdGVnb3J5Rm9yQ29kZShjb2RlKSB7XG4gICAgY29kZSA9IHBhcnNlSW50KGNvZGUsIDEwKTtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHJlc3VsdCA9ICdhbGwnO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMSkge1xuICAgICAgICByZXN1bHQgPSAnYm9sZCc7XG4gICAgfSBlbHNlIGlmICgoMiA8IGNvZGUgJiYgY29kZSA8IDUpKSB7XG4gICAgICAgIHJlc3VsdCA9ICd1bmRlcmxpbmUnO1xuICAgIH0gZWxzZSBpZiAoKDQgPCBjb2RlICYmIGNvZGUgPCA3KSkge1xuICAgICAgICByZXN1bHQgPSAnYmxpbmsnO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gOCkge1xuICAgICAgICByZXN1bHQgPSAnaGlkZSc7XG4gICAgfSBlbHNlIGlmIChjb2RlID09PSA5KSB7XG4gICAgICAgIHJlc3VsdCA9ICdzdHJpa2UnO1xuICAgIH0gZWxzZSBpZiAoKDI5IDwgY29kZSAmJiBjb2RlIDwgMzgpIHx8IGNvZGUgPT09IDM5IHx8ICg4OSA8IGNvZGUgJiYgY29kZSA8IDk4KSkge1xuICAgICAgICByZXN1bHQgPSAnZm9yZWdyb3VuZC1jb2xvcic7XG4gICAgfSBlbHNlIGlmICgoMzkgPCBjb2RlICYmIGNvZGUgPCA0OCkgfHwgY29kZSA9PT0gNDkgfHwgKDk5IDwgY29kZSAmJiBjb2RlIDwgMTA4KSkge1xuICAgICAgICByZXN1bHQgPSAnYmFja2dyb3VuZC1jb2xvcic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHB1c2hUZXh0KHRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5lc2NhcGVYTUwpIHtcbiAgICAgICAgcmV0dXJuIGVudGl0aWVzLmVuY29kZVhNTCh0ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHlsZT0nJ11cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHB1c2hUYWcoc3RhY2ssIHRhZywgc3R5bGUpIHtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICAgIHN0eWxlID0gJyc7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh0YWcpO1xuXG4gICAgcmV0dXJuIGA8JHt0YWd9JHtzdHlsZSA/IGAgc3R5bGU9XCIke3N0eWxlfVwiYCA6ICcnfT5gO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHB1c2hTdHlsZSAoc3RhY2ssIHN0eWxlKSB7XG4gICAgcmV0dXJuIHB1c2hUYWcoc3RhY2ssICdzcGFuJywgc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRm9yZWdyb3VuZENvbG9yKHN0YWNrLCBjb2xvcikge1xuICAgIHJldHVybiBwdXNoVGFnKHN0YWNrLCAnc3BhbicsICdjb2xvcjonICsgY29sb3IpO1xufVxuXG5mdW5jdGlvbiBwdXNoQmFja2dyb3VuZENvbG9yKHN0YWNrLCBjb2xvcikge1xuICAgIHJldHVybiBwdXNoVGFnKHN0YWNrLCAnc3BhbicsICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBjb2xvcik7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2xvc2VUYWcoc3RhY2ssIHN0eWxlKSB7XG4gICAgbGV0IGxhc3Q7XG5cbiAgICBpZiAoc3RhY2suc2xpY2UoLTEpWzBdID09PSBzdHlsZSkge1xuICAgICAgICBsYXN0ID0gc3RhY2sucG9wKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgICAgcmV0dXJuICc8LycgKyBzdHlsZSArICc+JztcbiAgICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZSh0ZXh0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGxldCBhbnNpTWF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBhbnNpSGFuZGxlciA9IDM7XG5cbiAgICBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVYdGVybTI1NihtLCBnMSkge1xuICAgICAgICBjYWxsYmFjaygneHRlcm0yNTYnLCBnMSk7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdsaW5lKG0pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMubmV3bGluZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soJ2Rpc3BsYXknLCAtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygndGV4dCcsIG0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFuc2lNZXNzKG0sIGcxKSB7XG4gICAgICAgIGFuc2lNYXRjaCA9IHRydWU7XG4gICAgICAgIGlmIChnMS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBnMSA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIGcxID0gZzEudHJpbVJpZ2h0KCc7Jykuc3BsaXQoJzsnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGcgb2YgZzEpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCdkaXNwbGF5JywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhbFRleHQobSkge1xuICAgICAgICBjYWxsYmFjaygndGV4dCcsIG0pO1xuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZ2IobSkge1xuICAgICAgICBjYWxsYmFjaygncmdiJywgbSk7XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qIGVzbGludCBuby1jb250cm9sLXJlZ2V4OjAgKi9cbiAgICBjb25zdCB0b2tlbnMgPSBbe1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDA4Ky8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDFiXFxbWzAxMl0/Sy8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDFiXFxbXFwoQi8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDFiXFxbWzM0XTg7MjtcXGQrO1xcZCs7XFxkK20vLFxuICAgICAgICBzdWI6IHJnYlxuICAgIH0sIHtcbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcWzM4OzU7KFxcZCspbS8sXG4gICAgICAgIHN1YjogcmVtb3ZlWHRlcm0yNTZcbiAgICB9LCB7XG4gICAgICAgIHBhdHRlcm46IC9eXFxuLyxcbiAgICAgICAgc3ViOiBuZXdsaW5lXG4gICAgfSx7XG4gICAgICAgIHBhdHRlcm46IC9eXFxyK1xcbi8sXG4gICAgICAgIHN1YjogbmV3bGluZVxuICAgIH0sIHtcbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcWygoPzpcXGR7MSwzfTs/KSt8KW0vLFxuICAgICAgICBzdWI6IGFuc2lNZXNzXG4gICAgfSwge1xuICAgICAgICAvLyBDU0kgbiBKXG4gICAgICAgIC8vIEVEIC0gRXJhc2UgaW4gRGlzcGxheSBDbGVhcnMgcGFydCBvZiB0aGUgc2NyZWVuLlxuICAgICAgICAvLyBJZiBuIGlzIDAgKG9yIG1pc3NpbmcpLCBjbGVhciBmcm9tIGN1cnNvciB0byBlbmQgb2Ygc2NyZWVuLlxuICAgICAgICAvLyBJZiBuIGlzIDEsIGNsZWFyIGZyb20gY3Vyc29yIHRvIGJlZ2lubmluZyBvZiB0aGUgc2NyZWVuLlxuICAgICAgICAvLyBJZiBuIGlzIDIsIGNsZWFyIGVudGlyZSBzY3JlZW4gKGFuZCBtb3ZlcyBjdXJzb3IgdG8gdXBwZXIgbGVmdCBvbiBET1MgQU5TSS5TWVMpLlxuICAgICAgICAvLyBJZiBuIGlzIDMsIGNsZWFyIGVudGlyZSBzY3JlZW4gYW5kIGRlbGV0ZSBhbGwgbGluZXMgc2F2ZWQgaW4gdGhlIHNjcm9sbGJhY2sgYnVmZmVyXG4gICAgICAgIC8vICAgKHRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgZm9yIHh0ZXJtIGFuZCBpcyBzdXBwb3J0ZWQgYnkgb3RoZXIgdGVybWluYWwgYXBwbGljYXRpb25zKS5cbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcW1xcZD9KLyxcbiAgICAgICAgc3ViOiByZW1vdmVcbiAgICB9LCB7XG4gICAgICAgIC8vIENTSSBuIDsgbSBmXG4gICAgICAgIC8vIEhWUCAtIEhvcml6b250YWwgVmVydGljYWwgUG9zaXRpb24gU2FtZSBhcyBDVVBcbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcW1xcZHswLDN9O1xcZHswLDN9Zi8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICAvLyBjYXRjaC1hbGwgZm9yIENTSSBzZXF1ZW5jZXM/XG4gICAgICAgIHBhdHRlcm46IC9eXFx4MWJcXFs/W1xcZDtdezAsM30vLFxuICAgICAgICBzdWI6IHJlbW92ZVxuICAgIH0sIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGV4dHJhY3RzIHJlYWwgdGV4dCAtIG5vdCBjb250YWluaW5nOlxuICAgICAgICAgKiAtIGBcXHgxYicgLSBFU0MgLSBlc2NhcGUgKEFzY2lpIDI3KVxuICAgICAgICAgKiAtICdcXHgwOCcgLSBCUyAtIGJhY2tzcGFjZSAoQXNjaWkgOClcbiAgICAgICAgICogLSBgXFxuYCAtIE5ld2xpbmUgLSBsaW5lZmVlZCAoTEYpIChhc2NpaSAxMClcbiAgICAgICAgICogLSBgXFxyYCAtIFdpbmRvd3MgQ2FycmlhZ2UgUmV0dXJuIChDUilcbiAgICAgICAgICovXG4gICAgICAgIHBhdHRlcm46IC9eKChbXlxceDFiXFx4MDhcXHJcXG5dKSspLyxcbiAgICAgICAgc3ViOiByZWFsVGV4dFxuICAgIH1dO1xuXG4gICAgZnVuY3Rpb24gcHJvY2VzcyhoYW5kbGVyLCBpKSB7XG4gICAgICAgIGlmIChpID4gYW5zaUhhbmRsZXIgJiYgYW5zaU1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhbnNpTWF0Y2ggPSBmYWxzZTtcblxuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGhhbmRsZXIucGF0dGVybiwgaGFuZGxlci5zdWIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMxID0gW107XG4gICAgbGV0IHtsZW5ndGh9ID0gdGV4dDtcblxuICAgIG91dGVyOlxuICAgIHdoaWxlIChsZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBvID0gMCwgbGVuID0gdG9rZW5zLmxlbmd0aDsgbyA8IGxlbjsgaSA9ICsrbykge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHByb2Nlc3MoaGFuZGxlciwgaSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIHRva2VuIGFuZCByZW1vdmVkIGl0IGZyb20gdGhlIHRleHQuIFdlIG5lZWQgdG9cbiAgICAgICAgICAgICAgICAvLyBzdGFydCBtYXRjaGluZyAqYWxsKiB0b2tlbnMgYWdhaW5zdCB0aGUgbmV3IHRleHQuXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0czEucHVzaCgwKTtcblxuICAgICAgICBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0czE7XG59XG5cbi8qKlxuICogSWYgc3RyZWFtaW5nLCB0aGVuIHRoZSBzdGFjayBpcyBcInN0aWNreVwiXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc3RpY2t5U3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVN0aWNreVN0YWNrKHN0aWNreVN0YWNrLCB0b2tlbiwgZGF0YSkge1xuICAgIGlmICh0b2tlbiAhPT0gJ3RleHQnKSB7XG4gICAgICAgIHN0aWNreVN0YWNrID0gc3RpY2t5U3RhY2suZmlsdGVyKG5vdENhdGVnb3J5KGNhdGVnb3J5Rm9yQ29kZShkYXRhKSkpO1xuICAgICAgICBzdGlja3lTdGFjay5wdXNoKHt0b2tlbiwgZGF0YSwgY2F0ZWdvcnk6IGNhdGVnb3J5Rm9yQ29kZShkYXRhKX0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdGlja3lTdGFjaztcbn1cblxuY2xhc3MgRmlsdGVyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5mZyBUaGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGNvbG9yIHVzZWQgd2hlbiByZXNldCBjb2xvciBjb2RlcyBhcmUgZW5jb3VudGVyZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmJnIFRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29sb3IgdXNlZCB3aGVuIHJlc2V0IGNvbG9yIGNvZGVzIGFyZSBlbmNvdW50ZXJlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRpb25zLm5ld2xpbmUgQ29udmVydCBuZXdsaW5lIGNoYXJhY3RlcnMgdG8gYDxici8+YC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRpb25zLmVzY2FwZVhNTCBHZW5lcmF0ZSBIVE1ML1hNTCBlbnRpdGllcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRpb25zLnN0cmVhbSBTYXZlIHN0eWxlIHN0YXRlIGFjcm9zcyBpbnZvY2F0aW9ucyBvZiBgdG9IdG1sKClgLlxuICAgICAqIEBwYXJhbSB7KHN0cmluZ1tdIHwge1tjb2RlOiBudW1iZXJdOiBzdHJpbmd9KT19IG9wdGlvbnMuY29sb3JzIENhbiBvdmVycmlkZSBzcGVjaWZpYyBjb2xvcnMgb3IgdGhlIGVudGlyZSBBTlNJIHBhbGV0dGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29sb3JzKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLmNvbG9ycywgb3B0aW9ucy5jb2xvcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMuc3RpY2t5U3RhY2sgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRvSHRtbCAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gW2lucHV0XSA6IGlucHV0O1xuICAgICAgICBjb25zdCB7c3RhY2ssIG9wdGlvbnN9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYnVmID0gW107XG5cbiAgICAgICAgdGhpcy5zdGlja3lTdGFjay5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZ2VuZXJhdGVPdXRwdXQoc3RhY2ssIGVsZW1lbnQudG9rZW4sIGVsZW1lbnQuZGF0YSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBidWYucHVzaChvdXRwdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0b2tlbml6ZShpbnB1dC5qb2luKCcnKSwgb3B0aW9ucywgKHRva2VuLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBnZW5lcmF0ZU91dHB1dChzdGFjaywgdG9rZW4sIGRhdGEsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAob3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgYnVmLnB1c2gob3V0cHV0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGlja3lTdGFjayA9IHVwZGF0ZVN0aWNreVN0YWNrKHRoaXMuc3RpY2t5U3RhY2ssIHRva2VuLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgYnVmLnB1c2gocmVzZXRTdHlsZXMoc3RhY2spKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWYuam9pbignJyk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/ansi-to-html/lib/ansi_to_html.js\n")},"../../node_modules/array-includes/implementation.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar ToIntegerOrInfinity = __webpack_require__("../../node_modules/es-abstract/2021/ToIntegerOrInfinity.js");\nvar ToLength = __webpack_require__("../../node_modules/es-abstract/2021/ToLength.js");\nvar ToObject = __webpack_require__("../../node_modules/es-abstract/2021/ToObject.js");\nvar SameValueZero = __webpack_require__("../../node_modules/es-abstract/2021/SameValueZero.js");\nvar $isNaN = __webpack_require__("../../node_modules/es-abstract/helpers/isNaN.js");\nvar $isFinite = __webpack_require__("../../node_modules/es-abstract/helpers/isFinite.js");\nvar GetIntrinsic = __webpack_require__("../../node_modules/get-intrinsic/index.js");\nvar callBound = __webpack_require__("../../node_modules/call-bind/callBound.js");\nvar isString = __webpack_require__("../../node_modules/is-string/index.js");\n\nvar $charAt = callBound(\'String.prototype.charAt\');\nvar $indexOf = GetIntrinsic(\'%Array.prototype.indexOf%\'); // TODO: use callBind.apply without breaking IE 8\nvar $max = GetIntrinsic(\'%Math.max%\');\n\nmodule.exports = function includes(searchElement) {\n\tvar fromIndex = arguments.length > 1 ? ToIntegerOrInfinity(arguments[1]) : 0;\n\tif ($indexOf && !$isNaN(searchElement) && $isFinite(fromIndex) && typeof searchElement !== \'undefined\') {\n\t\treturn $indexOf.apply(this, arguments) > -1;\n\t}\n\n\tvar O = ToObject(this);\n\tvar length = ToLength(O.length);\n\tif (length === 0) {\n\t\treturn false;\n\t}\n\tvar k = fromIndex >= 0 ? fromIndex : $max(0, length + fromIndex);\n\twhile (k < length) {\n\t\tif (SameValueZero(searchElement, isString(O) ? $charAt(O, k) : O[k])) {\n\t\t\treturn true;\n\t\t}\n\t\tk += 1;\n\t}\n\treturn false;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS1pbmNsdWRlcy9pbXBsZW1lbnRhdGlvbi5qcz8zOWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLDBCQUEwQixtQkFBTyxDQUFDLDREQUFzQztBQUN4RSxlQUFlLG1CQUFPLENBQUMsaURBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxpREFBMkI7QUFDbEQsb0JBQW9CLG1CQUFPLENBQUMsc0RBQWdDO0FBQzVELGFBQWEsbUJBQU8sQ0FBQyxpREFBMkI7QUFDaEQsZ0JBQWdCLG1CQUFPLENBQUMsb0RBQThCO0FBQ3RELG1CQUFtQixtQkFBTyxDQUFDLDJDQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLDJDQUFxQjtBQUM3QyxlQUFlLG1CQUFPLENBQUMsdUNBQVc7O0FBRWxDO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvYXJyYXktaW5jbHVkZXMvaW1wbGVtZW50YXRpb24uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG52YXIgVG9MZW5ndGggPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvTGVuZ3RoJyk7XG52YXIgVG9PYmplY3QgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvT2JqZWN0Jyk7XG52YXIgU2FtZVZhbHVlWmVybyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvU2FtZVZhbHVlWmVybycpO1xudmFyICRpc05hTiA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0L2hlbHBlcnMvaXNOYU4nKTtcbnZhciAkaXNGaW5pdGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC9oZWxwZXJzL2lzRmluaXRlJyk7XG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJ2lzLXN0cmluZycpO1xuXG52YXIgJGNoYXJBdCA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5jaGFyQXQnKTtcbnZhciAkaW5kZXhPZiA9IEdldEludHJpbnNpYygnJUFycmF5LnByb3RvdHlwZS5pbmRleE9mJScpOyAvLyBUT0RPOiB1c2UgY2FsbEJpbmQuYXBwbHkgd2l0aG91dCBicmVha2luZyBJRSA4XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQpIHtcblx0dmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gVG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudHNbMV0pIDogMDtcblx0aWYgKCRpbmRleE9mICYmICEkaXNOYU4oc2VhcmNoRWxlbWVudCkgJiYgJGlzRmluaXRlKGZyb21JbmRleCkgJiYgdHlwZW9mIHNlYXJjaEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuICRpbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPiAtMTtcblx0fVxuXG5cdHZhciBPID0gVG9PYmplY3QodGhpcyk7XG5cdHZhciBsZW5ndGggPSBUb0xlbmd0aChPLmxlbmd0aCk7XG5cdGlmIChsZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0dmFyIGsgPSBmcm9tSW5kZXggPj0gMCA/IGZyb21JbmRleCA6ICRtYXgoMCwgbGVuZ3RoICsgZnJvbUluZGV4KTtcblx0d2hpbGUgKGsgPCBsZW5ndGgpIHtcblx0XHRpZiAoU2FtZVZhbHVlWmVybyhzZWFyY2hFbGVtZW50LCBpc1N0cmluZyhPKSA/ICRjaGFyQXQoTywgaykgOiBPW2tdKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/array-includes/implementation.js\n')},"../../node_modules/array-includes/polyfill.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar implementation = __webpack_require__("../../node_modules/array-includes/implementation.js");\n\nmodule.exports = function getPolyfill() {\n\treturn Array.prototype.includes || implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS1pbmNsdWRlcy9wb2x5ZmlsbC5qcz9hOTllIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLHFCQUFxQixtQkFBTyxDQUFDLHFEQUFrQjs7QUFFL0M7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hcnJheS1pbmNsdWRlcy9wb2x5ZmlsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzIHx8IGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array-includes/polyfill.js\n')},"../../node_modules/array-includes/shim.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar define = __webpack_require__("../../node_modules/define-properties/index.js");\nvar getPolyfill = __webpack_require__("../../node_modules/array-includes/polyfill.js");\n\nmodule.exports = function shimArrayPrototypeIncludes() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tArray.prototype,\n\t\t{ includes: polyfill },\n\t\t{ includes: function () { return Array.prototype.includes !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS1pbmNsdWRlcy9zaGltLmpzPzEzNTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLCtDQUFtQjtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQywrQ0FBWTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLHFCQUFxQjtBQUN4QixHQUFHLHdCQUF3Qiw4Q0FBOEMsRUFBRTtBQUMzRTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FycmF5LWluY2x1ZGVzL3NoaW0uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1BcnJheVByb3RvdHlwZUluY2x1ZGVzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0QXJyYXkucHJvdG90eXBlLFxuXHRcdHsgaW5jbHVkZXM6IHBvbHlmaWxsIH0sXG5cdFx0eyBpbmNsdWRlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/array-includes/shim.js\n')},"../../node_modules/array.prototype.flat/auto.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/array.prototype.flat/shim.js")();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdC9hdXRvLmpzPzk2MjQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsbUJBQU8sQ0FBQyxpREFBUSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXQvYXV0by5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxucmVxdWlyZSgnLi9zaGltJykoKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flat/auto.js\n')},"../../node_modules/array.prototype.flat/implementation.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar ArraySpeciesCreate = __webpack_require__("../../node_modules/es-abstract/2021/ArraySpeciesCreate.js");\nvar FlattenIntoArray = __webpack_require__("../../node_modules/es-abstract/2021/FlattenIntoArray.js");\nvar Get = __webpack_require__("../../node_modules/es-abstract/2021/Get.js");\nvar ToIntegerOrInfinity = __webpack_require__("../../node_modules/es-abstract/2021/ToIntegerOrInfinity.js");\nvar ToLength = __webpack_require__("../../node_modules/es-abstract/2021/ToLength.js");\nvar ToObject = __webpack_require__("../../node_modules/es-abstract/2021/ToObject.js");\n\nmodule.exports = function flat() {\n\tvar O = ToObject(this);\n\tvar sourceLen = ToLength(Get(O, \'length\'));\n\n\tvar depthNum = 1;\n\tif (arguments.length > 0 && typeof arguments[0] !== \'undefined\') {\n\t\tdepthNum = ToIntegerOrInfinity(arguments[0]);\n\t}\n\n\tvar A = ArraySpeciesCreate(O, 0);\n\tFlattenIntoArray(A, O, sourceLen, 0, depthNum);\n\treturn A;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdC9pbXBsZW1lbnRhdGlvbi5qcz81MzRmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLHlCQUF5QixtQkFBTyxDQUFDLDJEQUFxQztBQUN0RSx1QkFBdUIsbUJBQU8sQ0FBQyx5REFBbUM7QUFDbEUsVUFBVSxtQkFBTyxDQUFDLDRDQUFzQjtBQUN4QywwQkFBMEIsbUJBQU8sQ0FBQyw0REFBc0M7QUFDeEUsZUFBZSxtQkFBTyxDQUFDLGlEQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsaURBQTJCOztBQUVsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5mbGF0L2ltcGxlbWVudGF0aW9uLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9BcnJheVNwZWNpZXNDcmVhdGUnKTtcbnZhciBGbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9GbGF0dGVuSW50b0FycmF5Jyk7XG52YXIgR2V0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9HZXQnKTtcbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG52YXIgVG9MZW5ndGggPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvTGVuZ3RoJyk7XG52YXIgVG9PYmplY3QgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1RvT2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxhdCgpIHtcblx0dmFyIE8gPSBUb09iamVjdCh0aGlzKTtcblx0dmFyIHNvdXJjZUxlbiA9IFRvTGVuZ3RoKEdldChPLCAnbGVuZ3RoJykpO1xuXG5cdHZhciBkZXB0aE51bSA9IDE7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAndW5kZWZpbmVkJykge1xuXHRcdGRlcHRoTnVtID0gVG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudHNbMF0pO1xuXHR9XG5cblx0dmFyIEEgPSBBcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG5cdEZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgc291cmNlTGVuLCAwLCBkZXB0aE51bSk7XG5cdHJldHVybiBBO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flat/implementation.js\n')},"../../node_modules/array.prototype.flat/polyfill.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar implementation = __webpack_require__("../../node_modules/array.prototype.flat/implementation.js");\n\nmodule.exports = function getPolyfill() {\n\treturn Array.prototype.flat || implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdC9wb2x5ZmlsbC5qcz9iZGUyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLHFCQUFxQixtQkFBTyxDQUFDLDJEQUFrQjs7QUFFL0M7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdC9wb2x5ZmlsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZsYXQgfHwgaW1wbGVtZW50YXRpb247XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flat/polyfill.js\n')},"../../node_modules/array.prototype.flat/shim.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar define = __webpack_require__("../../node_modules/define-properties/index.js");\nvar getPolyfill = __webpack_require__("../../node_modules/array.prototype.flat/polyfill.js");\n\nmodule.exports = function shimFlat() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tArray.prototype,\n\t\t{ flat: polyfill },\n\t\t{ flat: function () { return Array.prototype.flat !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdC9zaGltLmpzPzNhNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLCtDQUFtQjtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyxxREFBWTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLGlCQUFpQjtBQUNwQixHQUFHLG9CQUFvQiwwQ0FBMEMsRUFBRTtBQUNuRTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5mbGF0L3NoaW0uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1GbGF0KCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0QXJyYXkucHJvdG90eXBlLFxuXHRcdHsgZmxhdDogcG9seWZpbGwgfSxcblx0XHR7IGZsYXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5mbGF0ICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flat/shim.js\n')},"../../node_modules/array.prototype.flatmap/auto.js":function(module,exports,__webpack_require__){"use strict";eval('\n\n__webpack_require__("../../node_modules/array.prototype.flatmap/shim.js")();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdG1hcC9hdXRvLmpzPzZlMDciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsbUJBQU8sQ0FBQyxvREFBUSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXRtYXAvYXV0by5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxucmVxdWlyZSgnLi9zaGltJykoKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flatmap/auto.js\n')},"../../node_modules/array.prototype.flatmap/implementation.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar ArraySpeciesCreate = __webpack_require__("../../node_modules/es-abstract/2021/ArraySpeciesCreate.js");\nvar FlattenIntoArray = __webpack_require__("../../node_modules/es-abstract/2021/FlattenIntoArray.js");\nvar Get = __webpack_require__("../../node_modules/es-abstract/2021/Get.js");\nvar IsCallable = __webpack_require__("../../node_modules/es-abstract/2021/IsCallable.js");\nvar ToLength = __webpack_require__("../../node_modules/es-abstract/2021/ToLength.js");\nvar ToObject = __webpack_require__("../../node_modules/es-abstract/2021/ToObject.js");\n\nmodule.exports = function flatMap(mapperFunction) {\n\tvar O = ToObject(this);\n\tvar sourceLen = ToLength(Get(O, \'length\'));\n\n\tif (!IsCallable(mapperFunction)) {\n\t\tthrow new TypeError(\'mapperFunction must be a function\');\n\t}\n\n\tvar T;\n\tif (arguments.length > 1) {\n\t\tT = arguments[1];\n\t}\n\n\tvar A = ArraySpeciesCreate(O, 0);\n\tFlattenIntoArray(A, O, sourceLen, 0, 1, mapperFunction, T);\n\treturn A;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdG1hcC9pbXBsZW1lbnRhdGlvbi5qcz8wMjRkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLHlCQUF5QixtQkFBTyxDQUFDLDJEQUFxQztBQUN0RSx1QkFBdUIsbUJBQU8sQ0FBQyx5REFBbUM7QUFDbEUsVUFBVSxtQkFBTyxDQUFDLDRDQUFzQjtBQUN4QyxpQkFBaUIsbUJBQU8sQ0FBQyxtREFBNkI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLGlEQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsaURBQTJCOztBQUVsRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdG1hcC9pbXBsZW1lbnRhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQXJyYXlTcGVjaWVzQ3JlYXRlJyk7XG52YXIgRmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvRmxhdHRlbkludG9BcnJheScpO1xudmFyIEdldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0Jyk7XG52YXIgSXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZScpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aCcpO1xudmFyIFRvT2JqZWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYXRNYXAobWFwcGVyRnVuY3Rpb24pIHtcblx0dmFyIE8gPSBUb09iamVjdCh0aGlzKTtcblx0dmFyIHNvdXJjZUxlbiA9IFRvTGVuZ3RoKEdldChPLCAnbGVuZ3RoJykpO1xuXG5cdGlmICghSXNDYWxsYWJsZShtYXBwZXJGdW5jdGlvbikpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdtYXBwZXJGdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdHZhciBUO1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRUID0gYXJndW1lbnRzWzFdO1xuXHR9XG5cblx0dmFyIEEgPSBBcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG5cdEZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgc291cmNlTGVuLCAwLCAxLCBtYXBwZXJGdW5jdGlvbiwgVCk7XG5cdHJldHVybiBBO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flatmap/implementation.js\n')},"../../node_modules/array.prototype.flatmap/polyfill.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar implementation = __webpack_require__("../../node_modules/array.prototype.flatmap/implementation.js");\n\nmodule.exports = function getPolyfill() {\n\treturn Array.prototype.flatMap || implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdG1hcC9wb2x5ZmlsbC5qcz8zZGYwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLHFCQUFxQixtQkFBTyxDQUFDLDhEQUFrQjs7QUFFL0M7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdG1hcC9wb2x5ZmlsbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZsYXRNYXAgfHwgaW1wbGVtZW50YXRpb247XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flatmap/polyfill.js\n')},"../../node_modules/array.prototype.flatmap/shim.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar define = __webpack_require__("../../node_modules/define-properties/index.js");\nvar getPolyfill = __webpack_require__("../../node_modules/array.prototype.flatmap/polyfill.js");\n\nmodule.exports = function shimFlatMap() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tArray.prototype,\n\t\t{ flatMap: polyfill },\n\t\t{ flatMap: function () { return Array.prototype.flatMap !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmxhdG1hcC9zaGltLmpzPzlkMTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLCtDQUFtQjtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyx3REFBWTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLG9CQUFvQjtBQUN2QixHQUFHLHVCQUF1Qiw2Q0FBNkMsRUFBRTtBQUN6RTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5mbGF0bWFwL3NoaW0uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1GbGF0TWFwKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0QXJyYXkucHJvdG90eXBlLFxuXHRcdHsgZmxhdE1hcDogcG9seWZpbGwgfSxcblx0XHR7IGZsYXRNYXA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5mbGF0TWFwICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.flatmap/shim.js\n')},"../../node_modules/array.prototype.map/implementation.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar ArraySpeciesCreate = __webpack_require__("../../node_modules/es-abstract/2021/ArraySpeciesCreate.js");\nvar Call = __webpack_require__("../../node_modules/es-abstract/2021/Call.js");\nvar CreateDataPropertyOrThrow = __webpack_require__("../../node_modules/es-abstract/2021/CreateDataPropertyOrThrow.js");\nvar Get = __webpack_require__("../../node_modules/es-abstract/2021/Get.js");\nvar HasProperty = __webpack_require__("../../node_modules/es-abstract/2021/HasProperty.js");\nvar IsCallable = __webpack_require__("../../node_modules/es-abstract/2021/IsCallable.js");\nvar ToUint32 = __webpack_require__("../../node_modules/es-abstract/2021/ToUint32.js");\nvar ToObject = __webpack_require__("../../node_modules/es-abstract/2021/ToObject.js");\nvar ToString = __webpack_require__("../../node_modules/es-abstract/2021/ToString.js");\n\nvar callBound = __webpack_require__("../../node_modules/call-bind/callBound.js");\n\nvar isString = __webpack_require__("../../node_modules/is-string/index.js");\n\n// Check failure of by-index access of string characters (IE < 9) and failure of `0 in boxedString` (Rhino)\nvar boxedString = Object(\'a\');\nvar splitString = boxedString[0] !== \'a\' || !(0 in boxedString);\n\nvar strSplit = callBound(\'String.prototype.split\');\n\nmodule.exports = function map(callbackfn) {\n\tvar O = ToObject(this);\n\tvar self = splitString && isString(O) ? strSplit(O, \'\') : O;\n\tvar len = ToUint32(self.length);\n\n\t// If no callback function or if callback is not a callable function\n\tif (!IsCallable(callbackfn)) {\n\t\tthrow new TypeError(\'Array.prototype.map callback must be a function\');\n\t}\n\n\tvar T;\n\tif (arguments.length > 1) {\n\t\tT = arguments[1];\n\t}\n\n\tvar A = ArraySpeciesCreate(O, len);\n\tvar k = 0;\n\twhile (k < len) {\n\t\tvar Pk = ToString(k);\n\t\tvar kPresent = HasProperty(O, Pk);\n\t\tif (kPresent) {\n\t\t\tvar kValue = Get(O, Pk);\n\t\t\tvar mappedValue = Call(callbackfn, T, [kValue, k, O]);\n\t\t\tCreateDataPropertyOrThrow(A, Pk, mappedValue);\n\t\t}\n\t\tk += 1;\n\t}\n\n\treturn A;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUubWFwL2ltcGxlbWVudGF0aW9uLmpzP2MwOGYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIseUJBQXlCLG1CQUFPLENBQUMsMkRBQXFDO0FBQ3RFLFdBQVcsbUJBQU8sQ0FBQyw2Q0FBdUI7QUFDMUMsZ0NBQWdDLG1CQUFPLENBQUMsa0VBQTRDO0FBQ3BGLFVBQVUsbUJBQU8sQ0FBQyw0Q0FBc0I7QUFDeEMsa0JBQWtCLG1CQUFPLENBQUMsb0RBQThCO0FBQ3hELGlCQUFpQixtQkFBTyxDQUFDLG1EQUE2QjtBQUN0RCxlQUFlLG1CQUFPLENBQUMsaURBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxpREFBMkI7QUFDbEQsZUFBZSxtQkFBTyxDQUFDLGlEQUEyQjs7QUFFbEQsZ0JBQWdCLG1CQUFPLENBQUMsMkNBQXFCOztBQUU3QyxlQUFlLG1CQUFPLENBQUMsdUNBQVc7O0FBRWxDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLm1hcC9pbXBsZW1lbnRhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQXJyYXlTcGVjaWVzQ3JlYXRlJyk7XG52YXIgQ2FsbCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ2FsbCcpO1xudmFyIENyZWF0ZURhdGFQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZURhdGFQcm9wZXJ0eU9yVGhyb3cnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEhhc1Byb3BlcnR5ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9IYXNQcm9wZXJ0eScpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcbnZhciBUb1VpbnQzMiA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9VaW50MzInKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyIGlzU3RyaW5nID0gcmVxdWlyZSgnaXMtc3RyaW5nJyk7XG5cbi8vIENoZWNrIGZhaWx1cmUgb2YgYnktaW5kZXggYWNjZXNzIG9mIHN0cmluZyBjaGFyYWN0ZXJzIChJRSA8IDkpIGFuZCBmYWlsdXJlIG9mIGAwIGluIGJveGVkU3RyaW5nYCAoUmhpbm8pXG52YXIgYm94ZWRTdHJpbmcgPSBPYmplY3QoJ2EnKTtcbnZhciBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9PSAnYScgfHwgISgwIGluIGJveGVkU3RyaW5nKTtcblxudmFyIHN0clNwbGl0ID0gY2FsbEJvdW5kKCdTdHJpbmcucHJvdG90eXBlLnNwbGl0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4pIHtcblx0dmFyIE8gPSBUb09iamVjdCh0aGlzKTtcblx0dmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBpc1N0cmluZyhPKSA/IHN0clNwbGl0KE8sICcnKSA6IE87XG5cdHZhciBsZW4gPSBUb1VpbnQzMihzZWxmLmxlbmd0aCk7XG5cblx0Ly8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb25cblx0aWYgKCFJc0NhbGxhYmxlKGNhbGxiYWNrZm4pKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLm1hcCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdHZhciBUO1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRUID0gYXJndW1lbnRzWzFdO1xuXHR9XG5cblx0dmFyIEEgPSBBcnJheVNwZWNpZXNDcmVhdGUoTywgbGVuKTtcblx0dmFyIGsgPSAwO1xuXHR3aGlsZSAoayA8IGxlbikge1xuXHRcdHZhciBQayA9IFRvU3RyaW5nKGspO1xuXHRcdHZhciBrUHJlc2VudCA9IEhhc1Byb3BlcnR5KE8sIFBrKTtcblx0XHRpZiAoa1ByZXNlbnQpIHtcblx0XHRcdHZhciBrVmFsdWUgPSBHZXQoTywgUGspO1xuXHRcdFx0dmFyIG1hcHBlZFZhbHVlID0gQ2FsbChjYWxsYmFja2ZuLCBULCBba1ZhbHVlLCBrLCBPXSk7XG5cdFx0XHRDcmVhdGVEYXRhUHJvcGVydHlPclRocm93KEEsIFBrLCBtYXBwZWRWYWx1ZSk7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXG5cdHJldHVybiBBO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.map/implementation.js\n')},"../../node_modules/array.prototype.map/index.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar define = __webpack_require__("../../node_modules/define-properties/index.js");\nvar RequireObjectCoercible = __webpack_require__("../../node_modules/es-abstract/2021/RequireObjectCoercible.js");\nvar callBound = __webpack_require__("../../node_modules/call-bind/callBound.js");\n\nvar implementation = __webpack_require__("../../node_modules/array.prototype.map/implementation.js");\nvar getPolyfill = __webpack_require__("../../node_modules/array.prototype.map/polyfill.js");\nvar polyfill = getPolyfill();\nvar shim = __webpack_require__("../../node_modules/array.prototype.map/shim.js");\n\nvar $slice = callBound(\'Array.prototype.slice\');\n\n// eslint-disable-next-line no-unused-vars\nvar boundMapShim = function map(array, callbackfn) {\n\tRequireObjectCoercible(array);\n\treturn polyfill.apply(array, $slice(arguments, 1));\n};\ndefine(boundMapShim, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = boundMapShim;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUubWFwL2luZGV4LmpzPzYxNDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLCtDQUFtQjtBQUN4Qyw2QkFBNkIsbUJBQU8sQ0FBQywrREFBeUM7QUFDOUUsZ0JBQWdCLG1CQUFPLENBQUMsMkNBQXFCOztBQUU3QyxxQkFBcUIsbUJBQU8sQ0FBQywwREFBa0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsb0RBQVk7QUFDdEM7QUFDQSxXQUFXLG1CQUFPLENBQUMsZ0RBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5tYXAvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgJHNsaWNlID0gY2FsbEJvdW5kKCdBcnJheS5wcm90b3R5cGUuc2xpY2UnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG52YXIgYm91bmRNYXBTaGltID0gZnVuY3Rpb24gbWFwKGFycmF5LCBjYWxsYmFja2ZuKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJyYXkpO1xuXHRyZXR1cm4gcG9seWZpbGwuYXBwbHkoYXJyYXksICRzbGljZShhcmd1bWVudHMsIDEpKTtcbn07XG5kZWZpbmUoYm91bmRNYXBTaGltLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZE1hcFNoaW07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.map/index.js\n')},"../../node_modules/array.prototype.map/polyfill.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar arrayMethodBoxesProperly = __webpack_require__("../../node_modules/es-array-method-boxes-properly/index.js");\n\nvar implementation = __webpack_require__("../../node_modules/array.prototype.map/implementation.js");\n\nmodule.exports = function getPolyfill() {\n\tvar method = Array.prototype.map;\n\treturn arrayMethodBoxesProperly(method) ? method : implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUubWFwL3BvbHlmaWxsLmpzPzIyOGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsK0JBQStCLG1CQUFPLENBQUMsNERBQWdDOztBQUV2RSxxQkFBcUIsbUJBQU8sQ0FBQywwREFBa0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUubWFwL3BvbHlmaWxsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXJyYXlNZXRob2RCb3hlc1Byb3Blcmx5ID0gcmVxdWlyZSgnZXMtYXJyYXktbWV0aG9kLWJveGVzLXByb3Blcmx5Jyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0dmFyIG1ldGhvZCA9IEFycmF5LnByb3RvdHlwZS5tYXA7XG5cdHJldHVybiBhcnJheU1ldGhvZEJveGVzUHJvcGVybHkobWV0aG9kKSA/IG1ldGhvZCA6IGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.map/polyfill.js\n')},"../../node_modules/array.prototype.map/shim.js":function(module,exports,__webpack_require__){"use strict";eval('\n\nvar define = __webpack_require__("../../node_modules/define-properties/index.js");\nvar getPolyfill = __webpack_require__("../../node_modules/array.prototype.map/polyfill.js");\n\nmodule.exports = function shimArrayPrototypeMap() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tArray.prototype,\n\t\t{ map: polyfill },\n\t\t{ map: function () { return Array.prototype.map !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUubWFwL3NoaW0uanM/YmI2OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsK0NBQW1CO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLG9EQUFZOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsZ0JBQWdCO0FBQ25CLEdBQUcsbUJBQW1CLHlDQUF5QyxFQUFFO0FBQ2pFO0FBQ0E7QUFDQSIsImZpbGUiOiIuLi8uLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLm1hcC9zaGltLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltQXJyYXlQcm90b3R5cGVNYXAoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGRlZmluZShcblx0XHRBcnJheS5wcm90b3R5cGUsXG5cdFx0eyBtYXA6IHBvbHlmaWxsIH0sXG5cdFx0eyBtYXA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAgIT09IHBvbHlmaWxsOyB9IH1cblx0KTtcblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/array.prototype.map/shim.js\n')},"../../node_modules/assert/assert.js":function(module,exports,__webpack_require__){"use strict";eval("/* WEBPACK VAR INJECTION */(function(global) {\n\nvar objectAssign = __webpack_require__(\"../../node_modules/object-assign/index.js\");\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = __webpack_require__(\"../../node_modules/node-libs-browser/node_modules/util/util.js\");\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(\"../../node_modules/webpack/buildin/global.js\")))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzP2YxZjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOENBQWE7O0FBRWIsbUJBQW1CLG1CQUFPLENBQUMsMkNBQWU7O0FBRTFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsZ0VBQU87QUFDMUI7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSCxzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFFBQVE7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlCQUF5QjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLG9CQUFvQjs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4uLy4uL25vZGVfbW9kdWxlcy9hc3NlcnQvYXNzZXJ0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/assert/assert.js\n")},"../../node_modules/call-bind/callBound.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(\"../../node_modules/get-intrinsic/index.js\");\n\nvar callBind = __webpack_require__(\"../../node_modules/call-bind/index.js\");\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvY2FsbEJvdW5kLmpzPzZhMTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsbUJBQW1CLG1CQUFPLENBQUMsMkNBQWU7O0FBRTFDLGVBQWUsbUJBQU8sQ0FBQyx1Q0FBSTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../node_modules/call-bind/callBound.js\n")},"../../node_modules/call-bind/index.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(\"../../node_modules/function-bind/index.js\");\nvar GetIntrinsic = __webpack_require__(\"../../node_modules/get-intrinsic/index.js\");\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9tYWluL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanM/M2EyNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsMkNBQWU7QUFDbEMsbUJBQW1CLG1CQUFPLENBQUMsMkNBQWU7O0FBRTFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9CQUFvQixRQUFRLFdBQVc7QUFDdkMsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQyxtQkFBbUI7QUFDOUQsQ0FBQztBQUNEO0FBQ0EiLCJmaWxlIjoiLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFwcGx5ID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JScpO1xudmFyICRjYWxsID0gR2V0SW50cmluc2ljKCclRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlJyk7XG52YXIgJHJlZmxlY3RBcHBseSA9IEdldEludHJpbnNpYygnJVJlZmxlY3QuYXBwbHklJywgdHJ1ZSkgfHwgYmluZC5jYWxsKCRjYWxsLCAkYXBwbHkpO1xuXG52YXIgJGdPUEQgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJScsIHRydWUpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IEdldEludHJpbnNpYygnJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUnLCB0cnVlKTtcbnZhciAkbWF4ID0gR2V0SW50cmluc2ljKCclTWF0aC5tYXglJyk7XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHQkZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyB2YWx1ZTogMSB9KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGRlZmluZVByb3BlcnR5XG5cdFx0JGRlZmluZVByb3BlcnR5ID0gbnVsbDtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCaW5kKG9yaWdpbmFsRnVuY3Rpb24pIHtcblx0dmFyIGZ1bmMgPSAkcmVmbGVjdEFwcGx5KGJpbmQsICRjYWxsLCBhcmd1bWVudHMpO1xuXHRpZiAoJGdPUEQgJiYgJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0dmFyIGRlc2MgPSAkZ09QRChmdW5jLCAnbGVuZ3RoJyk7XG5cdFx0aWYgKGRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0XHQvLyBvcmlnaW5hbCBsZW5ndGgsIHBsdXMgdGhlIHJlY2VpdmVyLCBtaW51cyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgKGFmdGVyIHRoZSByZWNlaXZlcilcblx0XHRcdCRkZWZpbmVQcm9wZXJ0eShcblx0XHRcdFx0ZnVuYyxcblx0XHRcdFx0J2xlbmd0aCcsXG5cdFx0XHRcdHsgdmFsdWU6IDEgKyAkbWF4KDAsIG9yaWdpbmFsRnVuY3Rpb24ubGVuZ3RoIC0gKGFyZ3VtZW50cy5sZW5ndGggLSAxKSkgfVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZ1bmM7XG59O1xuXG52YXIgYXBwbHlCaW5kID0gZnVuY3Rpb24gYXBwbHlCaW5kKCkge1xuXHRyZXR1cm4gJHJlZmxlY3RBcHBseShiaW5kLCAkYXBwbHksIGFyZ3VtZW50cyk7XG59O1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdCRkZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ2FwcGx5JywgeyB2YWx1ZTogYXBwbHlCaW5kIH0pO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMuYXBwbHkgPSBhcHBseUJpbmQ7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../node_modules/call-bind/index.js\n")}}]);
|