@preply/ds-docs 0.4.3-beta.32

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +92 -0
  3. package/config/main.js +23 -0
  4. package/config/manager-head.html +1 -0
  5. package/config/manager.js +16 -0
  6. package/config/packages.js +21 -0
  7. package/config/preview-head.html +1 -0
  8. package/config/preview.js +16 -0
  9. package/config/webpack.config.js +97 -0
  10. package/dist/0.338f6ec8c298c14e9987.manager.bundle.js +1 -0
  11. package/dist/0.3fa9c511.iframe.bundle.js +1 -0
  12. package/dist/10.cbab8b16.iframe.bundle.js +1 -0
  13. package/dist/11.eb6590ee.iframe.bundle.js +1 -0
  14. package/dist/12.14fcbdc9.iframe.bundle.js +1 -0
  15. package/dist/4.ca91571aa289a44fd646.manager.bundle.js +2 -0
  16. package/dist/4.ca91571aa289a44fd646.manager.bundle.js.LICENSE.txt +8 -0
  17. package/dist/5.09384b194ae4afd5b83d.manager.bundle.js +1 -0
  18. package/dist/6.32fc62c8a6ce2df04956.manager.bundle.js +2 -0
  19. package/dist/6.32fc62c8a6ce2df04956.manager.bundle.js.LICENSE.txt +12 -0
  20. package/dist/7.caafbbb780553290f515.manager.bundle.js +1 -0
  21. package/dist/8.66293b7ba6e3ca90f9ef.manager.bundle.js +1 -0
  22. package/dist/9.50d8be07.iframe.bundle.js +1 -0
  23. package/dist/docs-pages/docs/pages/00.welcome/static/andre.jpg +0 -0
  24. package/dist/docs-pages/docs/pages/00.welcome/static/designers.svg +5 -0
  25. package/dist/docs-pages/docs/pages/00.welcome/static/developers.svg +5 -0
  26. package/dist/docs-pages/docs/pages/00.welcome/static/header.png +0 -0
  27. package/dist/docs-pages/docs/pages/00.welcome/static/vadim.jpg +0 -0
  28. package/dist/docs-pages/docs/pages/04.contributing/static/flowchart.png +0 -0
  29. package/dist/favicon.ico +0 -0
  30. package/dist/global/docs/static/favicon.svg +4 -0
  31. package/dist/global/docs/static/logo.svg +1 -0
  32. package/dist/iframe.html +138 -0
  33. package/dist/index.html +55 -0
  34. package/dist/main.515f4f3f1dbf7ce958bc.manager.bundle.js +1 -0
  35. package/dist/main~493df0b3.c053cefd.iframe.bundle.js +1 -0
  36. package/dist/runtime~main.b422f1cd6ad7b4837a59.manager.bundle.js +1 -0
  37. package/dist/runtime~main.b9288cbc.iframe.bundle.js +1 -0
  38. package/dist/vendors~main.a298dbf4b4228db7a7c0.manager.bundle.js +2 -0
  39. package/dist/vendors~main.a298dbf4b4228db7a7c0.manager.bundle.js.LICENSE.txt +82 -0
  40. package/dist/vendors~main~253ae210.2cd1feec.iframe.bundle.js +1 -0
  41. package/dist/vendors~main~4134d62c.806278b4.iframe.bundle.js +1 -0
  42. package/dist/vendors~main~678f84af.83492059.iframe.bundle.js +1 -0
  43. package/dist/vendors~main~a353122d.312fbc2d.iframe.bundle.js +1 -0
  44. package/dist/vendors~main~bdc480fb.2ad5d7bf.iframe.bundle.js +1 -0
  45. package/dist/vendors~main~d88e64ba.a117b568.iframe.bundle.js +1 -0
  46. package/dist/web-lib/src/components/Avatar/docs/static/avatar.png +0 -0
  47. package/docs/static/favicon.svg +4 -0
  48. package/docs/static/logo.svg +1 -0
  49. package/package.json +47 -0
  50. package/scripts/copy-metadata-and-assets.js +87 -0
  51. package/scripts/copy-statics.js +10 -0
  52. package/tsconfig.json +3 -0
  53. package/utils/globs.js +16 -0
  54. package/utils/statics.js +30 -0
@@ -0,0 +1 @@
1
+ (window.webpackJsonp=window.webpackJsonp||[]).push([[4],{0: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__(1);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQG1keC1qcy9yZWFjdC9kaXN0L2VzbS5qcz80MmQyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTBCOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsc0JBQXNCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLHVCQUF1QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxlQUFlLDZCQUE2QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCLDRDQUFLLGlCQUFpQjtBQUNwRDtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsNENBQUsscUNBQXFDO0FBQ2xFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw0Q0FBSztBQUMvQjs7QUFFQTtBQUNBLDZHQUE2RztBQUM3Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiw0Q0FBSztBQUMzQjtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDRDQUFLLGVBQWUsNENBQUssYUFBYTtBQUM5RDtBQUNBO0FBQ0Esb0NBQW9DLDRDQUFLO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0JBQXdCLDRDQUFLO0FBQzdCO0FBQ0EsS0FBSyxVQUFVO0FBQ2Y7QUFDQSxLQUFLO0FBQ0w7O0FBRUEsc0JBQXNCLDRDQUFLO0FBQzNCO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixnQkFBZ0I7QUFDbkM7QUFDQTs7QUFFQSxXQUFXLDRDQUFLO0FBQ2hCOztBQUVBLFNBQVMsNENBQUs7QUFDZDs7QUFFOEYiLCJmaWxlIjoiMC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpO1xuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7XG4gICAgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7XG4gICAgfSk7XG4gICAga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuXG4gICAgaWYgKGkgJSAyKSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG5cbiAgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpO1xuXG4gIHZhciBrZXksIGk7XG5cbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldO1xuICAgICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XG59O1xuXG52YXIgTURYQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbnZhciB3aXRoTURYQ29tcG9uZW50cyA9IGZ1bmN0aW9uIHdpdGhNRFhDb21wb25lbnRzKENvbXBvbmVudCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIGFsbENvbXBvbmVudHMgPSB1c2VNRFhDb21wb25lbnRzKHByb3BzLmNvbXBvbmVudHMpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgY29tcG9uZW50czogYWxsQ29tcG9uZW50c1xuICAgIH0pKTtcbiAgfTtcbn07XG52YXIgdXNlTURYQ29tcG9uZW50cyA9IGZ1bmN0aW9uIHVzZU1EWENvbXBvbmVudHMoY29tcG9uZW50cykge1xuICB2YXIgY29udGV4dENvbXBvbmVudHMgPSBSZWFjdC51c2VDb250ZXh0KE1EWENvbnRleHQpO1xuICB2YXIgYWxsQ29tcG9uZW50cyA9IGNvbnRleHRDb21wb25lbnRzO1xuXG4gIGlmIChjb21wb25lbnRzKSB7XG4gICAgYWxsQ29tcG9uZW50cyA9IGlzRnVuY3Rpb24oY29tcG9uZW50cykgPyBjb21wb25lbnRzKGNvbnRleHRDb21wb25lbnRzKSA6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjb250ZXh0Q29tcG9uZW50cyksIGNvbXBvbmVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENvbXBvbmVudHM7XG59O1xudmFyIE1EWFByb3ZpZGVyID0gZnVuY3Rpb24gTURYUHJvdmlkZXIocHJvcHMpIHtcbiAgdmFyIGFsbENvbXBvbmVudHMgPSB1c2VNRFhDb21wb25lbnRzKHByb3BzLmNvbXBvbmVudHMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTURYQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBhbGxDb21wb25lbnRzXG4gIH0sIHByb3BzLmNoaWxkcmVuKTtcbn07XG5cbnZhciBUWVBFX1BST1BfTkFNRSA9ICdtZHhUeXBlJztcbnZhciBERUZBVUxUUyA9IHtcbiAgaW5saW5lQ29kZTogJ2NvZGUnLFxuICB3cmFwcGVyOiBmdW5jdGlvbiB3cmFwcGVyKF9yZWYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwge30sIGNoaWxkcmVuKTtcbiAgfVxufTtcbnZhciBNRFhDcmVhdGVFbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgdmFyIHByb3BDb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICAgIG1keFR5cGUgPSBwcm9wcy5tZHhUeXBlLFxuICAgICAgb3JpZ2luYWxUeXBlID0gcHJvcHMub3JpZ2luYWxUeXBlLFxuICAgICAgcGFyZW50TmFtZSA9IHByb3BzLnBhcmVudE5hbWUsXG4gICAgICBldGMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFtcImNvbXBvbmVudHNcIiwgXCJtZHhUeXBlXCIsIFwib3JpZ2luYWxUeXBlXCIsIFwicGFyZW50TmFtZVwiXSk7XG5cbiAgdmFyIGNvbXBvbmVudHMgPSB1c2VNRFhDb21wb25lbnRzKHByb3BDb21wb25lbnRzKTtcbiAgdmFyIHR5cGUgPSBtZHhUeXBlO1xuICB2YXIgQ29tcG9uZW50ID0gY29tcG9uZW50c1tcIlwiLmNvbmNhdChwYXJlbnROYW1lLCBcIi5cIikuY29uY2F0KHR5cGUpXSB8fCBjb21wb25lbnRzW3R5cGVdIHx8IERFRkFVTFRTW3R5cGVdIHx8IG9yaWdpbmFsVHlwZTtcblxuICBpZiAocHJvcENvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7XG4gICAgICByZWY6IHJlZlxuICAgIH0sIGV0YyksIHt9LCB7XG4gICAgICBjb21wb25lbnRzOiBwcm9wQ29tcG9uZW50c1xuICAgIH0pKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9vYmplY3RTcHJlYWQyKHtcbiAgICByZWY6IHJlZlxuICB9LCBldGMpKTtcbn0pO1xuTURYQ3JlYXRlRWxlbWVudC5kaXNwbGF5TmFtZSA9ICdNRFhDcmVhdGVFbGVtZW50JztcbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQgKHR5cGUsIHByb3BzKSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbWR4VHlwZSA9IHByb3BzICYmIHByb3BzLm1keFR5cGU7XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCBtZHhUeXBlKSB7XG4gICAgdmFyIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICB2YXIgY3JlYXRlRWxlbWVudEFyZ0FycmF5ID0gbmV3IEFycmF5KGFyZ3NMZW5ndGgpO1xuICAgIGNyZWF0ZUVsZW1lbnRBcmdBcnJheVswXSA9IE1EWENyZWF0ZUVsZW1lbnQ7XG4gICAgdmFyIG5ld1Byb3BzID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCBrZXkpKSB7XG4gICAgICAgIG5ld1Byb3BzW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5ld1Byb3BzLm9yaWdpbmFsVHlwZSA9IHR5cGU7XG4gICAgbmV3UHJvcHNbVFlQRV9QUk9QX05BTUVdID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZSA6IG1keFR5cGU7XG4gICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5WzFdID0gbmV3UHJvcHM7XG5cbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3NMZW5ndGg7IGkrKykge1xuICAgICAgY3JlYXRlRWxlbWVudEFyZ0FycmF5W2ldID0gYXJnc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudC5hcHBseShudWxsLCBjcmVhdGVFbGVtZW50QXJnQXJyYXkpO1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQuYXBwbHkobnVsbCwgYXJncyk7XG59XG5cbmV4cG9ydCB7IE1EWENvbnRleHQsIE1EWFByb3ZpZGVyLCBjcmVhdGVFbGVtZW50IGFzIG1keCwgdXNlTURYQ29tcG9uZW50cywgd2l0aE1EWENvbXBvbmVudHMgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n')},126: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_PR-13/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_PR-13/node_modules/@emotion/unitless/dist/unitless.browser.esm.js\nvar unitless_browser_esm = __webpack_require__(278);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@emotion/memoize/dist/memoize.browser.esm.js\nvar memoize_browser_esm = __webpack_require__(275);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaGFzaC9kaXN0L2hhc2guYnJvd3Nlci5lc20uanM/YTI4OCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2VyaWFsaXplL2Rpc3Qvc2VyaWFsaXplLmJyb3dzZXIuZXNtLmpzP2Q3ODAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUVaO0FBQ0E7QUFDQTs7QUFFQSxRQUFRLFVBQVU7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlLDREQUFPLEVBQUM7Ozs7Ozs7OztBQ3REZ0I7QUFDRTtBQUNGOztBQUV2QyxnUkFBZ1IsdUNBQXVDO0FBQ3ZUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1Qiw4Q0FBTztBQUM5QjtBQUNBLENBQUM7O0FBRUQsSUFBSSx1Q0FBaUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLHVDQUFRO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBLElBQUksS0FBcUMsRUFBRSw0R0EwQjFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxLQUE2RixFQUFFLEVBRWxHOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnREFBZ0Q7O0FBRWhELGNBQWMsS0FBd0UsRUFBRSxFQUU3RTs7QUFFWDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFVBQVUsS0FBcUMsRUFBRSxFQUVqRDs7QUFFVDtBQUNBOztBQUVBO0FBQ0EsVUFBVSxLQUFxQyxFQUFFLDBCQVcxQzs7QUFFUDtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxNQUFNLEtBQTZJLEVBQUUsRUFHbEo7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLGdCQUFnQjtBQUNuQztBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZCQUE2QiwwQkFBMEI7QUFDdkQsU0FBUztBQUNULG1EQUFtRCx1Q0FBaUIsa0JBQWtCO0FBQ3RGO0FBQ0EsT0FBTztBQUNQLGdEQUFnRCxZQUFvQjtBQUNwRTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCLG1CQUFtQjtBQUM3QztBQUNBLHVEQUF1RCx1Q0FBaUIsc0JBQXNCO0FBQzlGO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRUFBMEU7QUFDMUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLEtBQTZELEVBQUUsRUFFbEU7O0FBRWpCLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUNBQW1DLEdBQUcsT0FBTztBQUM3Qzs7QUFFQSxJQUFJLEtBQXFDLEVBQUUsRUFFMUM7QUFDRDs7O0FBR0E7QUFDQSxJQUFJLHFDQUFlO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsUUFBUSxLQUFpRSxFQUFFLEVBRXRFOztBQUVMO0FBQ0EsR0FBRzs7O0FBR0gsaUJBQWlCLGlCQUFpQjtBQUNsQzs7QUFFQTtBQUNBLFVBQVUsS0FBaUUsRUFBRSxFQUV0RTs7QUFFUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsTUFBTSxLQUFxQyxFQUFFLEVBSzFDOzs7QUFHSDtBQUNBO0FBQ0EsWUFBWTs7QUFFWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLGdCQUFVOztBQUV2QixNQUFNLEtBQXFDLEVBQUUsRUFXMUM7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUyQiIsImZpbGUiOiIxMjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2dhcnljb3VydC9tdXJtdXJoYXNoLWpzXG4vLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYWFwcGxlYnkvc21oYXNoZXIvYmxvYi82MWEwNTMwZjI4Mjc3ZjJlODUwYmZjMzk2MDBjZTYxZDAyYjUxOGRlL3NyYy9NdXJtdXJIYXNoMi5jcHAjTDM3LUw4NlxuZnVuY3Rpb24gbXVybXVyMihzdHIpIHtcbiAgLy8gJ20nIGFuZCAncicgYXJlIG1peGluZyBjb25zdGFudHMgZ2VuZXJhdGVkIG9mZmxpbmUuXG4gIC8vIFRoZXkncmUgbm90IHJlYWxseSAnbWFnaWMnLCB0aGV5IGp1c3QgaGFwcGVuIHRvIHdvcmsgd2VsbC5cbiAgLy8gY29uc3QgbSA9IDB4NWJkMWU5OTU7XG4gIC8vIGNvbnN0IHIgPSAyNDtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaFxuICB2YXIgaCA9IDA7IC8vIE1peCA0IGJ5dGVzIGF0IGEgdGltZSBpbnRvIHRoZSBoYXNoXG5cbiAgdmFyIGssXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XG5cbiAgZm9yICg7IGxlbiA+PSA0OyArK2ksIGxlbiAtPSA0KSB7XG4gICAgayA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgOCB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMTYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDI0O1xuICAgIGsgPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICAgIGsgXj1cbiAgICAvKiBrID4+PiByOiAqL1xuICAgIGsgPj4+IDI0O1xuICAgIGggPVxuICAgIC8qIE1hdGguaW11bChrLCBtKTogKi9cbiAgICAoayAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChrID4+PiAxNikgKiAweGU5OTUgPDwgMTYpIF5cbiAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBIYW5kbGUgdGhlIGxhc3QgZmV3IGJ5dGVzIG9mIHRoZSBpbnB1dCBhcnJheVxuXG5cbiAgc3dpdGNoIChsZW4pIHtcbiAgICBjYXNlIDM6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcblxuICAgIGNhc2UgMjpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG5cbiAgICBjYXNlIDE6XG4gICAgICBoIF49IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgICAgIGggPVxuICAgICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgICAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgfSAvLyBEbyBhIGZldyBmaW5hbCBtaXhlcyBvZiB0aGUgaGFzaCB0byBlbnN1cmUgdGhlIGxhc3QgZmV3XG4gIC8vIGJ5dGVzIGFyZSB3ZWxsLWluY29ycG9yYXRlZC5cblxuXG4gIGggXj0gaCA+Pj4gMTM7XG4gIGggPVxuICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIHJldHVybiAoKGggXiBoID4+PiAxNSkgPj4+IDApLnRvU3RyaW5nKDM2KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbXVybXVyMjtcbiIsImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0VfRVJST1IgPSBcIllvdSBoYXZlIGlsbGVnYWwgZXNjYXBlIHNlcXVlbmNlIGluIHlvdXIgdGVtcGxhdGUgbGl0ZXJhbCwgbW9zdCBsaWtlbHkgaW5zaWRlIGNvbnRlbnQncyBwcm9wZXJ0eSB2YWx1ZS5cXG5CZWNhdXNlIHlvdSB3cml0ZSB5b3VyIENTUyBpbnNpZGUgYSBKYXZhU2NyaXB0IHN0cmluZyB5b3UgYWN0dWFsbHkgaGF2ZSB0byBkbyBkb3VibGUgZXNjYXBpbmcsIHNvIGZvciBleGFtcGxlIFxcXCJjb250ZW50OiAnXFxcXDAwZDcnO1xcXCIgc2hvdWxkIGJlY29tZSBcXFwiY29udGVudDogJ1xcXFxcXFxcMDBkNyc7XFxcIi5cXG5Zb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aGlzIGhlcmU6XFxuaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvVGVtcGxhdGVfbGl0ZXJhbHMjRVMyMDE4X3JldmlzaW9uX29mX2lsbGVnYWxfZXNjYXBlX3NlcXVlbmNlc1wiO1xudmFyIFVOREVGSU5FRF9BU19PQkpFQ1RfS0VZX0VSUk9SID0gXCJZb3UgaGF2ZSBwYXNzZWQgaW4gZmFsc3kgdmFsdWUgYXMgc3R5bGUgb2JqZWN0J3Mga2V5IChjYW4gaGFwcGVuIHdoZW4gaW4gZXhhbXBsZSB5b3UgcGFzcyB1bmV4cG9ydGVkIGNvbXBvbmVudCBhcyBjb21wdXRlZCBrZXkpLlwiO1xudmFyIGh5cGhlbmF0ZVJlZ2V4ID0gL1tBLVpdfF5tcy9nO1xudmFyIGFuaW1hdGlvblJlZ2V4ID0gL19FTU9fKFteX10rPylfKFteXSo/KV9FTU9fL2c7XG5cbnZhciBpc0N1c3RvbVByb3BlcnR5ID0gZnVuY3Rpb24gaXNDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eSkge1xuICByZXR1cm4gcHJvcGVydHkuY2hhckNvZGVBdCgxKSA9PT0gNDU7XG59O1xuXG52YXIgaXNQcm9jZXNzYWJsZVZhbHVlID0gZnVuY3Rpb24gaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xufTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSBtZW1vaXplKGZ1bmN0aW9uIChzdHlsZU5hbWUpIHtcbiAgcmV0dXJuIGlzQ3VzdG9tUHJvcGVydHkoc3R5bGVOYW1lKSA/IHN0eWxlTmFtZSA6IHN0eWxlTmFtZS5yZXBsYWNlKGh5cGhlbmF0ZVJlZ2V4LCAnLSQmJykudG9Mb3dlckNhc2UoKTtcbn0pO1xuXG52YXIgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShhbmltYXRpb25SZWdleCwgZnVuY3Rpb24gKG1hdGNoLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgICAgbmFtZTogcDEsXG4gICAgICAgICAgICAgIHN0eWxlczogcDIsXG4gICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgaWYgKHVuaXRsZXNzW2tleV0gIT09IDEgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlICsgJ3B4JztcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBjb250ZW50VmFsdWVQYXR0ZXJuID0gLyhhdHRyfGNhbGN8Y291bnRlcnM/fHVybClcXCgvO1xuICB2YXIgY29udGVudFZhbHVlcyA9IFsnbm9ybWFsJywgJ25vbmUnLCAnY291bnRlcicsICdvcGVuLXF1b3RlJywgJ2Nsb3NlLXF1b3RlJywgJ25vLW9wZW4tcXVvdGUnLCAnbm8tY2xvc2UtcXVvdGUnLCAnaW5pdGlhbCcsICdpbmhlcml0JywgJ3Vuc2V0J107XG4gIHZhciBvbGRQcm9jZXNzU3R5bGVWYWx1ZSA9IHByb2Nlc3NTdHlsZVZhbHVlO1xuICB2YXIgbXNQYXR0ZXJuID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuICB2YXIgaHlwaGVuYXRlZENhY2hlID0ge307XG5cbiAgcHJvY2Vzc1N0eWxlVmFsdWUgPSBmdW5jdGlvbiBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCBjb250ZW50VmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSAmJiAhY29udGVudFZhbHVlUGF0dGVybi50ZXN0KHZhbHVlKSAmJiAodmFsdWUuY2hhckF0KDApICE9PSB2YWx1ZS5jaGFyQXQodmFsdWUubGVuZ3RoIC0gMSkgfHwgdmFsdWUuY2hhckF0KDApICE9PSAnXCInICYmIHZhbHVlLmNoYXJBdCgwKSAhPT0gXCInXCIpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJZb3Ugc2VlbSB0byBiZSB1c2luZyBhIHZhbHVlIGZvciAnY29udGVudCcgd2l0aG91dCBxdW90ZXMsIHRyeSByZXBsYWNpbmcgaXQgd2l0aCBgY29udGVudDogJ1xcXCJcIiArIHZhbHVlICsgXCJcXFwiJ2BcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb2Nlc3NlZCA9IG9sZFByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpO1xuXG4gICAgaWYgKHByb2Nlc3NlZCAhPT0gJycgJiYgIWlzQ3VzdG9tUHJvcGVydHkoa2V5KSAmJiBrZXkuaW5kZXhPZignLScpICE9PSAtMSAmJiBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoeXBoZW5hdGVkQ2FjaGVba2V5XSA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVXNpbmcga2ViYWItY2FzZSBmb3IgY3NzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gXCIgKyBrZXkucmVwbGFjZShtc1BhdHRlcm4sICdtcy0nKS5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChzdHIsIF9jaGFyKSB7XG4gICAgICAgIHJldHVybiBfY2hhci50b1VwcGVyQ2FzZSgpO1xuICAgICAgfSkgKyBcIj9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZDtcbiAgfTtcbn1cblxudmFyIHNob3VsZFdhcm5BYm91dEludGVycG9sYXRpbmdDbGFzc05hbWVGcm9tQ3NzID0gdHJ1ZTtcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbiwgY291bGRCZVNlbGVjdG9ySW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKGludGVycG9sYXRpb24uX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaW50ZXJwb2xhdGlvbi50b1N0cmluZygpID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wb25lbnQgc2VsZWN0b3JzIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBiYWJlbC1wbHVnaW4tZW1vdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGlvbjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGludGVycG9sYXRpb24uYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGludGVycG9sYXRpb24ubmFtZSxcbiAgICAgICAgICAgIHN0eWxlczogaW50ZXJwb2xhdGlvbi5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBpbnRlcnBvbGF0aW9uLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbi5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gaW50ZXJwb2xhdGlvbi5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IGludGVycG9sYXRpb24uc3R5bGVzICsgXCI7XCI7XG5cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbnRlcnBvbGF0aW9uLm1hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdHlsZXMgKz0gaW50ZXJwb2xhdGlvbi5tYXA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQsIGNvdWxkQmVTZWxlY3RvckludGVycG9sYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJwb2xhdGVkIGluIGNzcyBjYWxscyB3aWxsIGJlIHN0cmluZ2lmaWVkLlxcbicgKyAnSWYgeW91IHdhbnQgdG8gaGF2ZSBhIGNzcyBjYWxsIGJhc2VkIG9uIHByb3BzLCBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBjc3MgY2FsbCBsaWtlIHRoaXNcXG4nICsgJ2xldCBkeW5hbWljU3R5bGUgPSAocHJvcHMpID0+IGNzc2Bjb2xvcjogJHtwcm9wcy5jb2xvcn1gXFxuJyArICdJdCBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IHdpdGggcHJvcHMgb3IgaW50ZXJwb2xhdGVkIGluIGEgc3R5bGVkIGNhbGwgbGlrZSB0aGlzXFxuJyArIFwibGV0IFNvbWVDb21wb25lbnQgPSBzdHlsZWQoJ2RpdicpYCR7ZHluYW1pY1N0eWxlfWBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZWQgPSBpbnRlcnBvbGF0aW9uLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgdmFyIGZha2VWYXJOYW1lID0gXCJhbmltYXRpb25cIiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICAgIG1hdGNoZWQucHVzaChcImNvbnN0IFwiICsgZmFrZVZhck5hbWUgKyBcIiA9IGtleWZyYW1lc2BcIiArIHAyLnJlcGxhY2UoL15Aa2V5ZnJhbWVzIGFuaW1hdGlvbi1cXHcrLywgJycpICsgXCJgXCIpO1xuICAgICAgICAgIHJldHVybiBcIiR7XCIgKyBmYWtlVmFyTmFtZSArIFwifVwiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdga2V5ZnJhbWVzYCBvdXRwdXQgZ290IGludGVycG9sYXRlZCBpbnRvIHBsYWluIHN0cmluZywgcGxlYXNlIHdyYXAgaXQgd2l0aCBgY3NzYC5cXG5cXG4nICsgJ0luc3RlYWQgb2YgZG9pbmcgdGhpczpcXG5cXG4nICsgW10uY29uY2F0KG1hdGNoZWQsIFtcImBcIiArIHJlcGxhY2VkICsgXCJgXCJdKS5qb2luKCdcXG4nKSArICdcXG5cXG5Zb3Ugc2hvdWxkIHdyYXAgaXQgd2l0aCBgY3NzYCBsaWtlIHRoaXM6XFxuXFxuJyArIChcImNzc2BcIiArIHJlcGxhY2VkICsgXCJgXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfSAvLyBmaW5hbGl6ZSBzdHJpbmcgdmFsdWVzIChyZWd1bGFyIHN0cmluZ3MgYW5kIGZ1bmN0aW9ucyBpbnRlcnBvbGF0ZWQgaW50byBjc3MgY2FsbHMpXG5cblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGludGVycG9sYXRpb247XG4gIH1cblxuICB2YXIgY2FjaGVkID0gcmVnaXN0ZXJlZFtpbnRlcnBvbGF0aW9uXTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uICYmIHNob3VsZFdhcm5BYm91dEludGVycG9sYXRpbmdDbGFzc05hbWVGcm9tQ3NzICYmIGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc29sZS5lcnJvcignSW50ZXJwb2xhdGluZyBhIGNsYXNzTmFtZSBmcm9tIGNzc2BgIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoIGNvbXBvc2l0aW9uLlxcbicgKyAnSW50ZXJwb2xhdGluZyBhIGNsYXNzTmFtZSBmcm9tIGNzc2BgIHdpbGwgYmUgY29tcGxldGVseSB1bnN1cHBvcnRlZCBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uIG9mIEVtb3Rpb24nKTtcbiAgICBzaG91bGRXYXJuQWJvdXRJbnRlcnBvbGF0aW5nQ2xhc3NOYW1lRnJvbUNzcyA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkICYmICFjb3VsZEJlU2VsZWN0b3JJbnRlcnBvbGF0aW9uID8gY2FjaGVkIDogaW50ZXJwb2xhdGlvbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0sIGZhbHNlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtfa2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIHJlZ2lzdGVyZWRbdmFsdWVdICsgXCJ9XCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlKSkge1xuICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKF9rZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShfa2V5LCB2YWx1ZSkgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKF9rZXkgPT09ICdOT19DT01QT05FTlRfU0VMRUNUT1InICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGJhYmVsLXBsdWdpbi1lbW90aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHR5cGVvZiB2YWx1ZVswXSA9PT0gJ3N0cmluZycgJiYgKHJlZ2lzdGVyZWQgPT0gbnVsbCB8fCByZWdpc3RlcmVkW3ZhbHVlWzBdXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB2YWx1ZS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWVbX2ldKSkge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShfa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoX2tleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUsIGZhbHNlKTtcblxuICAgICAgICAgIHN3aXRjaCAoX2tleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoX2tleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBfa2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihVTkRFRklORURfQVNfT0JKRUNUX0tFWV9FUlJPUik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IF9rZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO1xcbntdKylcXHMqOy9nO1xudmFyIHNvdXJjZU1hcFBhdHRlcm47XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNvdXJjZU1hcFBhdHRlcm4gPSAvXFwvXFwqI1xcc3NvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvblxcL2pzb247XFxTK1xccytcXCpcXC8vO1xufSAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxuXG52YXIgY3Vyc29yO1xudmFyIHNlcmlhbGl6ZVN0eWxlcyA9IGZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncywgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbMF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihJTExFR0FMX0VTQ0FQRV9TRVFVRU5DRV9FUlJPUik7XG4gICAgfVxuXG4gICAgc3R5bGVzICs9IHN0cmluZ3NbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0sIHN0eWxlcy5jaGFyQ29kZUF0KHN0eWxlcy5sZW5ndGggLSAxKSA9PT0gNDYpO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHN0cmluZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKElMTEVHQUxfRVNDQVBFX1NFUVVFTkNFX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgc3R5bGVzICs9IHN0cmluZ3NbaV07XG4gICAgfVxuICB9XG5cbiAgdmFyIHNvdXJjZU1hcDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHN0eWxlcyA9IHN0eWxlcy5yZXBsYWNlKHNvdXJjZU1hcFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgc291cmNlTWFwID0gbWF0Y2g7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSk7XG4gIH0gLy8gdXNpbmcgYSBnbG9iYWwgcmVnZXggd2l0aCAuZXhlYyBpcyBzdGF0ZWZ1bCBzbyBsYXN0SW5kZXggaGFzIHRvIGJlIHJlc2V0IGVhY2ggdGltZVxuXG5cbiAgbGFiZWxQYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gIHZhciBpZGVudGlmaWVyTmFtZSA9ICcnO1xuICB2YXIgbWF0Y2g7IC8vIGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNWI4MDljMmNmMjk0OTgwMGEwZjYxZmI1XG5cbiAgd2hpbGUgKChtYXRjaCA9IGxhYmVsUGF0dGVybi5leGVjKHN0eWxlcykpICE9PSBudWxsKSB7XG4gICAgaWRlbnRpZmllck5hbWUgKz0gJy0nICsgLy8gJEZsb3dGaXhNZSB3ZSBrbm93IGl0J3Mgbm90IG51bGxcbiAgICBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFNlcmlhbGl6ZWRTdHlsZXMgdHlwZSBkb2Vzbid0IGhhdmUgdG9TdHJpbmcgcHJvcGVydHkgKGFuZCB3ZSBkb24ndCB3YW50IHRvIGFkZCBpdClcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHN0eWxlczogc3R5bGVzLFxuICAgICAgbWFwOiBzb3VyY2VNYXAsXG4gICAgICBuZXh0OiBjdXJzb3IsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBcIllvdSBoYXZlIHRyaWVkIHRvIHN0cmluZ2lmeSBvYmplY3QgcmV0dXJuZWQgZnJvbSBgY3NzYCBmdW5jdGlvbi4gSXQgaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgdXNlZCBkaXJlY3RseSAoZS5nLiBhcyB2YWx1ZSBvZiB0aGUgYGNsYXNzTmFtZWAgcHJvcCksIGJ1dCByYXRoZXIgaGFuZGVkIHRvIGVtb3Rpb24gc28gaXQgY2FuIGhhbmRsZSBpdCAoZS5nLiBhcyB2YWx1ZSBvZiBgY3NzYCBwcm9wKS5cIjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufTtcblxuZXhwb3J0IHsgc2VyaWFsaXplU3R5bGVzIH07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///126\n")},127: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXRpbHMvZGlzdC91dGlscy5icm93c2VyLmVzbS5qcz9jNzU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRTZDIiwiZmlsZSI6IjEyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBpc0Jyb3dzZXIgPSBcIm9iamVjdFwiICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgJiYgY2FjaGUuY29tcGF0ICE9PSB1bmRlZmluZWQpICYmIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID0gc2VyaWFsaXplZC5zdHlsZXM7XG4gIH1cblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIG1heWJlU3R5bGVzID0gY2FjaGUuaW5zZXJ0KFwiLlwiICsgY2xhc3NOYW1lLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzIH07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///127\n')},147:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _emotion_memoize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(275);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC9kaXN0L2lzLXByb3AtdmFsaWQuYnJvd3Nlci5lc20uanM/NmQ3MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUF1Qzs7QUFFdkMsazdIQUFrN0g7O0FBRWw3SCxZQUFZLHdFQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWUsOERBQUssRUFBQyIsImZpbGUiOiIxNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWVtb2l6ZSBmcm9tICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIHJlYWN0UHJvcHNSZWdleCA9IC9eKChjaGlsZHJlbnxkYW5nZXJvdXNseVNldElubmVySFRNTHxrZXl8cmVmfGF1dG9Gb2N1c3xkZWZhdWx0VmFsdWV8ZGVmYXVsdENoZWNrZWR8aW5uZXJIVE1MfHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZ3xzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmd8dmFsdWVMaW5rfGFjY2VwdHxhY2NlcHRDaGFyc2V0fGFjY2Vzc0tleXxhY3Rpb258YWxsb3d8YWxsb3dVc2VyTWVkaWF8YWxsb3dQYXltZW50UmVxdWVzdHxhbGxvd0Z1bGxTY3JlZW58YWxsb3dUcmFuc3BhcmVuY3l8YWx0fGFzeW5jfGF1dG9Db21wbGV0ZXxhdXRvUGxheXxjYXB0dXJlfGNlbGxQYWRkaW5nfGNlbGxTcGFjaW5nfGNoYWxsZW5nZXxjaGFyU2V0fGNoZWNrZWR8Y2l0ZXxjbGFzc0lEfGNsYXNzTmFtZXxjb2xzfGNvbFNwYW58Y29udGVudHxjb250ZW50RWRpdGFibGV8Y29udGV4dE1lbnV8Y29udHJvbHN8Y29udHJvbHNMaXN0fGNvb3Jkc3xjcm9zc09yaWdpbnxkYXRhfGRhdGVUaW1lfGRlY29kaW5nfGRlZmF1bHR8ZGVmZXJ8ZGlyfGRpc2FibGVkfGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlfGRvd25sb2FkfGRyYWdnYWJsZXxlbmNUeXBlfGZvcm18Zm9ybUFjdGlvbnxmb3JtRW5jVHlwZXxmb3JtTWV0aG9kfGZvcm1Ob1ZhbGlkYXRlfGZvcm1UYXJnZXR8ZnJhbWVCb3JkZXJ8aGVhZGVyc3xoZWlnaHR8aGlkZGVufGhpZ2h8aHJlZnxocmVmTGFuZ3xodG1sRm9yfGh0dHBFcXVpdnxpZHxpbnB1dE1vZGV8aW50ZWdyaXR5fGlzfGtleVBhcmFtc3xrZXlUeXBlfGtpbmR8bGFiZWx8bGFuZ3xsaXN0fGxvYWRpbmd8bG9vcHxsb3d8bWFyZ2luSGVpZ2h0fG1hcmdpbldpZHRofG1heHxtYXhMZW5ndGh8bWVkaWF8bWVkaWFHcm91cHxtZXRob2R8bWlufG1pbkxlbmd0aHxtdWx0aXBsZXxtdXRlZHxuYW1lfG5vbmNlfG5vVmFsaWRhdGV8b3BlbnxvcHRpbXVtfHBhdHRlcm58cGxhY2Vob2xkZXJ8cGxheXNJbmxpbmV8cG9zdGVyfHByZWxvYWR8cHJvZmlsZXxyYWRpb0dyb3VwfHJlYWRPbmx5fHJlZmVycmVyUG9saWN5fHJlbHxyZXF1aXJlZHxyZXZlcnNlZHxyb2xlfHJvd3N8cm93U3BhbnxzYW5kYm94fHNjb3BlfHNjb3BlZHxzY3JvbGxpbmd8c2VhbWxlc3N8c2VsZWN0ZWR8c2hhcGV8c2l6ZXxzaXplc3xzbG90fHNwYW58c3BlbGxDaGVja3xzcmN8c3JjRG9jfHNyY0xhbmd8c3JjU2V0fHN0YXJ0fHN0ZXB8c3R5bGV8c3VtbWFyeXx0YWJJbmRleHx0YXJnZXR8dGl0bGV8dHlwZXx1c2VNYXB8dmFsdWV8d2lkdGh8d21vZGV8d3JhcHxhYm91dHxkYXRhdHlwZXxpbmxpc3R8cHJlZml4fHByb3BlcnR5fHJlc291cmNlfHR5cGVvZnx2b2NhYnxhdXRvQ2FwaXRhbGl6ZXxhdXRvQ29ycmVjdHxhdXRvU2F2ZXxjb2xvcnxpbmVydHxpdGVtUHJvcHxpdGVtU2NvcGV8aXRlbVR5cGV8aXRlbUlEfGl0ZW1SZWZ8b258cmVzdWx0c3xzZWN1cml0eXx1bnNlbGVjdGFibGV8YWNjZW50SGVpZ2h0fGFjY3VtdWxhdGV8YWRkaXRpdmV8YWxpZ25tZW50QmFzZWxpbmV8YWxsb3dSZW9yZGVyfGFscGhhYmV0aWN8YW1wbGl0dWRlfGFyYWJpY0Zvcm18YXNjZW50fGF0dHJpYnV0ZU5hbWV8YXR0cmlidXRlVHlwZXxhdXRvUmV2ZXJzZXxhemltdXRofGJhc2VGcmVxdWVuY3l8YmFzZWxpbmVTaGlmdHxiYXNlUHJvZmlsZXxiYm94fGJlZ2lufGJpYXN8Ynl8Y2FsY01vZGV8Y2FwSGVpZ2h0fGNsaXB8Y2xpcFBhdGhVbml0c3xjbGlwUGF0aHxjbGlwUnVsZXxjb2xvckludGVycG9sYXRpb258Y29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyc3xjb2xvclByb2ZpbGV8Y29sb3JSZW5kZXJpbmd8Y29udGVudFNjcmlwdFR5cGV8Y29udGVudFN0eWxlVHlwZXxjdXJzb3J8Y3h8Y3l8ZHxkZWNlbGVyYXRlfGRlc2NlbnR8ZGlmZnVzZUNvbnN0YW50fGRpcmVjdGlvbnxkaXNwbGF5fGRpdmlzb3J8ZG9taW5hbnRCYXNlbGluZXxkdXJ8ZHh8ZHl8ZWRnZU1vZGV8ZWxldmF0aW9ufGVuYWJsZUJhY2tncm91bmR8ZW5kfGV4cG9uZW50fGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWR8ZmlsbHxmaWxsT3BhY2l0eXxmaWxsUnVsZXxmaWx0ZXJ8ZmlsdGVyUmVzfGZpbHRlclVuaXRzfGZsb29kQ29sb3J8Zmxvb2RPcGFjaXR5fGZvY3VzYWJsZXxmb250RmFtaWx5fGZvbnRTaXplfGZvbnRTaXplQWRqdXN0fGZvbnRTdHJldGNofGZvbnRTdHlsZXxmb250VmFyaWFudHxmb250V2VpZ2h0fGZvcm1hdHxmcm9tfGZyfGZ4fGZ5fGcxfGcyfGdseXBoTmFtZXxnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbHxnbHlwaE9yaWVudGF0aW9uVmVydGljYWx8Z2x5cGhSZWZ8Z3JhZGllbnRUcmFuc2Zvcm18Z3JhZGllbnRVbml0c3xoYW5naW5nfGhvcml6QWR2WHxob3Jpek9yaWdpblh8aWRlb2dyYXBoaWN8aW1hZ2VSZW5kZXJpbmd8aW58aW4yfGludGVyY2VwdHxrfGsxfGsyfGszfGs0fGtlcm5lbE1hdHJpeHxrZXJuZWxVbml0TGVuZ3RofGtlcm5pbmd8a2V5UG9pbnRzfGtleVNwbGluZXN8a2V5VGltZXN8bGVuZ3RoQWRqdXN0fGxldHRlclNwYWNpbmd8bGlnaHRpbmdDb2xvcnxsaW1pdGluZ0NvbmVBbmdsZXxsb2NhbHxtYXJrZXJFbmR8bWFya2VyTWlkfG1hcmtlclN0YXJ0fG1hcmtlckhlaWdodHxtYXJrZXJVbml0c3xtYXJrZXJXaWR0aHxtYXNrfG1hc2tDb250ZW50VW5pdHN8bWFza1VuaXRzfG1hdGhlbWF0aWNhbHxtb2RlfG51bU9jdGF2ZXN8b2Zmc2V0fG9wYWNpdHl8b3BlcmF0b3J8b3JkZXJ8b3JpZW50fG9yaWVudGF0aW9ufG9yaWdpbnxvdmVyZmxvd3xvdmVybGluZVBvc2l0aW9ufG92ZXJsaW5lVGhpY2tuZXNzfHBhbm9zZTF8cGFpbnRPcmRlcnxwYXRoTGVuZ3RofHBhdHRlcm5Db250ZW50VW5pdHN8cGF0dGVyblRyYW5zZm9ybXxwYXR0ZXJuVW5pdHN8cG9pbnRlckV2ZW50c3xwb2ludHN8cG9pbnRzQXRYfHBvaW50c0F0WXxwb2ludHNBdFp8cHJlc2VydmVBbHBoYXxwcmVzZXJ2ZUFzcGVjdFJhdGlvfHByaW1pdGl2ZVVuaXRzfHJ8cmFkaXVzfHJlZlh8cmVmWXxyZW5kZXJpbmdJbnRlbnR8cmVwZWF0Q291bnR8cmVwZWF0RHVyfHJlcXVpcmVkRXh0ZW5zaW9uc3xyZXF1aXJlZEZlYXR1cmVzfHJlc3RhcnR8cmVzdWx0fHJvdGF0ZXxyeHxyeXxzY2FsZXxzZWVkfHNoYXBlUmVuZGVyaW5nfHNsb3BlfHNwYWNpbmd8c3BlY3VsYXJDb25zdGFudHxzcGVjdWxhckV4cG9uZW50fHNwZWVkfHNwcmVhZE1ldGhvZHxzdGFydE9mZnNldHxzdGREZXZpYXRpb258c3RlbWh8c3RlbXZ8c3RpdGNoVGlsZXN8c3RvcENvbG9yfHN0b3BPcGFjaXR5fHN0cmlrZXRocm91Z2hQb3NpdGlvbnxzdHJpa2V0aHJvdWdoVGhpY2tuZXNzfHN0cmluZ3xzdHJva2V8c3Ryb2tlRGFzaGFycmF5fHN0cm9rZURhc2hvZmZzZXR8c3Ryb2tlTGluZWNhcHxzdHJva2VMaW5lam9pbnxzdHJva2VNaXRlcmxpbWl0fHN0cm9rZU9wYWNpdHl8c3Ryb2tlV2lkdGh8c3VyZmFjZVNjYWxlfHN5c3RlbUxhbmd1YWdlfHRhYmxlVmFsdWVzfHRhcmdldFh8dGFyZ2V0WXx0ZXh0QW5jaG9yfHRleHREZWNvcmF0aW9ufHRleHRSZW5kZXJpbmd8dGV4dExlbmd0aHx0b3x0cmFuc2Zvcm18dTF8dTJ8dW5kZXJsaW5lUG9zaXRpb258dW5kZXJsaW5lVGhpY2tuZXNzfHVuaWNvZGV8dW5pY29kZUJpZGl8dW5pY29kZVJhbmdlfHVuaXRzUGVyRW18dkFscGhhYmV0aWN8dkhhbmdpbmd8dklkZW9ncmFwaGljfHZNYXRoZW1hdGljYWx8dmFsdWVzfHZlY3RvckVmZmVjdHx2ZXJzaW9ufHZlcnRBZHZZfHZlcnRPcmlnaW5YfHZlcnRPcmlnaW5ZfHZpZXdCb3h8dmlld1RhcmdldHx2aXNpYmlsaXR5fHdpZHRoc3x3b3JkU3BhY2luZ3x3cml0aW5nTW9kZXx4fHhIZWlnaHR8eDF8eDJ8eENoYW5uZWxTZWxlY3Rvcnx4bGlua0FjdHVhdGV8eGxpbmtBcmNyb2xlfHhsaW5rSHJlZnx4bGlua1JvbGV8eGxpbmtTaG93fHhsaW5rVGl0bGV8eGxpbmtUeXBlfHhtbEJhc2V8eG1sbnN8eG1sbnNYbGlua3x4bWxMYW5nfHhtbFNwYWNlfHl8eTF8eTJ8eUNoYW5uZWxTZWxlY3Rvcnx6fHpvb21BbmRQYW58Zm9yfGNsYXNzfGF1dG9mb2N1cyl8KChbRGRdW0FhXVtUdF1bQWFdfFtBYV1bUnJdW0lpXVtBYV18eCktLiopKSQvOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViZmVlNjhhNGNkN2U2MDA5ZWY2MWQyM1xuXG52YXIgaW5kZXggPSBtZW1vaXplKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHJldHVybiByZWFjdFByb3BzUmVnZXgudGVzdChwcm9wKSB8fCBwcm9wLmNoYXJDb2RlQXQoMCkgPT09IDExMVxuICAvKiBvICovXG4gICYmIHByb3AuY2hhckNvZGVBdCgxKSA9PT0gMTEwXG4gIC8qIG4gKi9cbiAgJiYgcHJvcC5jaGFyQ29kZUF0KDIpIDwgOTE7XG59XG4vKiBaKzEgKi9cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGluZGV4O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///147\n')},16: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__(21);\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__(178);\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__(12);\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__(15);\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__(13);\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__(14);\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__(47);\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__(30);\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__(20);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jbGllbnQtbG9nZ2VyL2Rpc3QvZXNtL2luZGV4LmpzPzA0ZTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTRDO0FBQ1Q7QUFDYTtBQUNEO0FBQ0Q7QUFDVztBQUNYO0FBQ0g7QUFDZjtBQUM1QixlQUFlLDZDQUFNO0FBQ3JCLGNBQWMsNkNBQU07QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsMEZBQTBGLGFBQWE7QUFDdkc7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7QUFFQSwwRUFBMEUsZUFBZTtBQUN6RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFOztBQUUvRTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDhKQUE4Six5QkFBeUI7QUFDOUw7OztBQUdBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc2V0LmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBnbG9iYWwgZnJvbSAnZ2xvYmFsJztcbnZhciBMT0dMRVZFTCA9IGdsb2JhbC5MT0dMRVZFTCxcbiAgICBjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGU7XG52YXIgbGV2ZWxzID0ge1xuICB0cmFjZTogMSxcbiAgZGVidWc6IDIsXG4gIGluZm86IDMsXG4gIHdhcm46IDQsXG4gIGVycm9yOiA1LFxuICBzaWxlbnQ6IDEwXG59O1xudmFyIGN1cnJlbnRMb2dMZXZlbFN0cmluZyA9IExPR0xFVkVMO1xudmFyIGN1cnJlbnRMb2dMZXZlbE51bWJlciA9IGxldmVsc1tjdXJyZW50TG9nTGV2ZWxTdHJpbmddIHx8IGxldmVscy5pbmZvO1xuZXhwb3J0IHZhciBsb2dnZXIgPSB7XG4gIHRyYWNlOiBmdW5jdGlvbiB0cmFjZShtZXNzYWdlKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRMb2dMZXZlbE51bWJlciA8PSBsZXZlbHMudHJhY2UgJiYgY29uc29sZS50cmFjZS5hcHBseShjb25zb2xlLCBbbWVzc2FnZV0uY29uY2F0KHJlc3QpKTtcbiAgfSxcbiAgZGVidWc6IGZ1bmN0aW9uIGRlYnVnKG1lc3NhZ2UpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudExvZ0xldmVsTnVtYmVyIDw9IGxldmVscy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnLmFwcGx5KGNvbnNvbGUsIFttZXNzYWdlXS5jb25jYXQocmVzdCkpO1xuICB9LFxuICBpbmZvOiBmdW5jdGlvbiBpbmZvKG1lc3NhZ2UpIHtcbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAxID8gX2xlbjMgLSAxIDogMCksIF9rZXkzID0gMTsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudExvZ0xldmVsTnVtYmVyIDw9IGxldmVscy5pbmZvICYmIGNvbnNvbGUuaW5mby5hcHBseShjb25zb2xlLCBbbWVzc2FnZV0uY29uY2F0KHJlc3QpKTtcbiAgfSxcbiAgd2FybjogZnVuY3Rpb24gd2FybihtZXNzYWdlKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW40ID4gMSA/IF9sZW40IC0gMSA6IDApLCBfa2V5NCA9IDE7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgIHJlc3RbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRMb2dMZXZlbE51bWJlciA8PSBsZXZlbHMud2FybiAmJiBjb25zb2xlLndhcm4uYXBwbHkoY29uc29sZSwgW21lc3NhZ2VdLmNvbmNhdChyZXN0KSk7XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7XG4gICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgIHJlc3RbX2tleTUgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRMb2dMZXZlbE51bWJlciA8PSBsZXZlbHMuZXJyb3IgJiYgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBbbWVzc2FnZV0uY29uY2F0KHJlc3QpKTtcbiAgfSxcbiAgbG9nOiBmdW5jdGlvbiBsb2cobWVzc2FnZSkge1xuICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuNiA+IDEgPyBfbGVuNiAtIDEgOiAwKSwgX2tleTYgPSAxOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICByZXN0W19rZXk2IC0gMV0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50TG9nTGV2ZWxOdW1iZXIgPCBsZXZlbHMuc2lsZW50ICYmIGNvbnNvbGUubG9nLmFwcGx5KGNvbnNvbGUsIFttZXNzYWdlXS5jb25jYXQocmVzdCkpO1xuICB9XG59O1xudmFyIGxvZ2dlZCA9IG5ldyBTZXQoKTtcbmV4cG9ydCB2YXIgb25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgICBpZiAobG9nZ2VkLmhhcyhtZXNzYWdlKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBsb2dnZWQuYWRkKG1lc3NhZ2UpO1xuXG4gICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW43ID4gMSA/IF9sZW43IC0gMSA6IDApLCBfa2V5NyA9IDE7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgIHJlc3RbX2tleTcgLSAxXSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvZ2dlclt0eXBlXS5hcHBseShsb2dnZXIsIFttZXNzYWdlXS5jb25jYXQocmVzdCkpO1xuICB9O1xufTtcblxub25jZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGxvZ2dlZC5jbGVhcigpO1xufTtcblxub25jZS50cmFjZSA9IG9uY2UoJ3RyYWNlJyk7XG5vbmNlLmRlYnVnID0gb25jZSgnZGVidWcnKTtcbm9uY2UuaW5mbyA9IG9uY2UoJ2luZm8nKTtcbm9uY2Uud2FybiA9IG9uY2UoJ3dhcm4nKTtcbm9uY2UuZXJyb3IgPSBvbmNlKCdlcnJvcicpO1xub25jZS5sb2cgPSBvbmNlKCdsb2cnKTtcbmV4cG9ydCB2YXIgcHJldHR5ID0gZnVuY3Rpb24gcHJldHR5KHR5cGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJnQXJyYXkgPSBbXTtcblxuICAgIGZvciAodmFyIF9sZW44ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOCksIF9rZXk4ID0gMDsgX2tleTggPCBfbGVuODsgX2tleTgrKykge1xuICAgICAgYXJnc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuICAgIH1cblxuICAgIGlmIChhcmdzLmxlbmd0aCkge1xuICAgICAgdmFyIHN0YXJ0VGFnUmUgPSAvPHNwYW5cXHMrc3R5bGU9KFsnXCJdKShbXidcIl0qKVxcMVxccyo+L2dpO1xuICAgICAgdmFyIGVuZFRhZ1JlID0gLzxcXC9zcGFuPi9naTtcbiAgICAgIHZhciByZVJlc3VsdEFycmF5O1xuICAgICAgYXJnQXJyYXkucHVzaChhcmdzWzBdLnJlcGxhY2Uoc3RhcnRUYWdSZSwgJyVjJykucmVwbGFjZShlbmRUYWdSZSwgJyVjJykpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cblxuICAgICAgd2hpbGUgKHJlUmVzdWx0QXJyYXkgPSBzdGFydFRhZ1JlLmV4ZWMoYXJnc1swXSkpIHtcbiAgICAgICAgYXJnQXJyYXkucHVzaChyZVJlc3VsdEFycmF5WzJdKTtcbiAgICAgICAgYXJnQXJyYXkucHVzaCgnJyk7XG4gICAgICB9IC8vIHBhc3MgdGhyb3VnaCBzdWJzZXF1ZW50IGFyZ3Mgc2luY2UgY2hyb21lIGRldiB0b29scyBkb2VzIG5vdCAoeWV0KSBzdXBwb3J0IGNvbnNvbGUubG9nIHN0eWxpbmcgb2YgdGhlIGZvbGxvd2luZyBmb3JtOiBjb25zb2xlLmxvZygnJWNCbHVlIScsICdjb2xvcjogYmx1ZTsnLCAnJWNSZWQhJywgJ2NvbG9yOiByZWQ7Jyk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcblxuXG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFyZ3MubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgYXJnQXJyYXkucHVzaChhcmdzW2pdKTtcbiAgICAgIH1cbiAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItc3ByZWFkXG5cblxuICAgIGxvZ2dlclt0eXBlXS5hcHBseShsb2dnZXIsIGFyZ0FycmF5KTtcbiAgfTtcbn07XG5wcmV0dHkudHJhY2UgPSBwcmV0dHkoJ3RyYWNlJyk7XG5wcmV0dHkuZGVidWcgPSBwcmV0dHkoJ2RlYnVnJyk7XG5wcmV0dHkuaW5mbyA9IHByZXR0eSgnaW5mbycpO1xucHJldHR5Lndhcm4gPSBwcmV0dHkoJ3dhcm4nKTtcbnByZXR0eS5lcnJvciA9IHByZXR0eSgnZXJyb3InKTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///16\n")},184: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2V0UHJvdG90eXBlT2YuanM/MGU4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIxODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///184\n')},198:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar bind = __webpack_require__(295);\nvar GetIntrinsic = __webpack_require__(27);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2luZGV4LmpzPzJlMTAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLEdBQWU7QUFDbEMsbUJBQW1CLG1CQUFPLENBQUMsRUFBZTs7QUFFMUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLFFBQVEsV0FBVztBQUN2QyxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDLG1CQUFtQjtBQUM5RCxDQUFDO0FBQ0Q7QUFDQSIsImZpbGUiOiIxOTguanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0aWYgKCRnT1BEICYmICRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHZhciBkZXNjID0gJGdPUEQoZnVuYywgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0Ly8gb3JpZ2luYWwgbGVuZ3RoLCBwbHVzIHRoZSByZWNlaXZlciwgbWludXMgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIChhZnRlciB0aGUgcmVjZWl2ZXIpXG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdGZ1bmMsXG5cdFx0XHRcdCdsZW5ndGgnLFxuXHRcdFx0XHR7IHZhbHVlOiAxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpIH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmdW5jO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///198\n")},2: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, 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__(1);\nvar react_default = /*#__PURE__*/__webpack_require__.n(react);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/node_modules/core-js/modules/es.array.includes.js\nvar es_array_includes = __webpack_require__(76);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.includes.js\nvar es_string_includes = __webpack_require__(79);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.object.assign.js\nvar es_object_assign = __webpack_require__(8);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.find.js\nvar es_array_find = __webpack_require__(89);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.object.values.js\nvar es_object_values = __webpack_require__(129);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.symbol.js\nvar es_symbol = __webpack_require__(4);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.symbol.description.js\nvar es_symbol_description = __webpack_require__(11);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.object.to-string.js\nvar es_object_to_string = __webpack_require__(12);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.symbol.iterator.js\nvar es_symbol_iterator = __webpack_require__(19);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.iterator.js\nvar es_string_iterator = __webpack_require__(15);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.iterator.js\nvar es_array_iterator = __webpack_require__(13);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/web.dom-collections.iterator.js\nvar web_dom_collections_iterator = __webpack_require__(14);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.slice.js\nvar es_array_slice = __webpack_require__(9);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__(7);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.from.js\nvar es_array_from = __webpack_require__(22);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/lodash/mapValues.js\nvar mapValues = __webpack_require__(55);\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__(386);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/ArgsTable/TabbedArgsTable.js\nvar TabbedArgsTable = __webpack_require__(1010);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/client-api/dist/esm/filterArgTypes.js\nvar filterArgTypes = __webpack_require__(539);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/core-events/dist/esm/index.js\nvar esm = __webpack_require__(31);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/global/window.js\nvar global_window = __webpack_require__(20);\nvar window_default = /*#__PURE__*/__webpack_require__.n(global_window);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/node_modules/@storybook/addon-docs/dist/esm/blocks/types.js\nvar CURRENT_SELECTION = \'.\';\nvar PRIMARY_STORY = \'^\';\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.filter.js\nvar es_array_filter = __webpack_require__(51);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.join.js\nvar es_array_join = __webpack_require__(29);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__(24);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.split.js\nvar es_string_split = __webpack_require__(67);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__(30);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/addon-docs/dist/esm/blocks/utils.js\n\n\n\n\n\n\n\n\n\n\n/* eslint-disable no-underscore-dangle */\nvar getDocsStories = function getDocsStories(context) {\n var storyStore = context.storyStore,\n kind = context.kind;\n\n if (!storyStore) {\n return [];\n }\n\n return storyStore.getStoriesForKind(kind).filter(function (s) {\n return !(s.parameters && s.parameters.docs && s.parameters.docs.disable);\n });\n};\n\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_PR-13/node_modules/@mdx-js/react/dist/esm.js\nvar dist_esm = __webpack_require__(0);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/index.js\nvar components_dist_esm = __webpack_require__(43);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/Story.js + 1 modules\nvar blocks_Story = __webpack_require__(1018);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/csf/dist/index.js\nvar dist = __webpack_require__(40);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/addon-docs/dist/esm/blocks/Story.js\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 mdxComponentMeta = _ref.mdxComponentMeta;\n return Object(dist["toId"])(mdxComponentMeta.id || mdxComponentMeta.title, Object(dist["storyNameFromExport"])(mdxStoryNameToKey[storyName]));\n};\nvar Story_getStoryProps = function getStoryProps(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 var previewId = inputId || Story_lookupStoryId(name, context);\n var data = context.storyStore.fromId(previewId) || {};\n var height = props.height,\n inline = props.inline;\n var _data$storyFn = data.storyFn,\n storyFn = _data$storyFn === void 0 ? undefined : _data$storyFn,\n _data$name = data.name,\n storyName = _data$name === void 0 ? undefined : _data$name,\n _data$parameters = data.parameters,\n parameters = _data$parameters === void 0 ? {} : _data$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 return {\n parameters: parameters,\n inline: storyIsInline,\n id: previewId,\n storyFn: prepareForInline && storyFn ? function () {\n return prepareForInline(storyFn, data);\n } : storyFn,\n height: height || (storyIsInline ? undefined : iframeHeight),\n title: storyName\n };\n};\n\nvar Story_Story = function Story(props) {\n return /*#__PURE__*/react_default.a.createElement(DocsContext.Consumer, null, function (context) {\n var storyProps = Story_getStoryProps(props, context);\n\n if (!storyProps) {\n return null;\n }\n\n return /*#__PURE__*/react_default.a.createElement("div", {\n id: storyBlockIdFromId(storyProps.id)\n }, /*#__PURE__*/react_default.a.createElement(dist_esm["a" /* MDXProvider */], {\n components: components_dist_esm["resetComponents"]\n }, /*#__PURE__*/react_default.a.createElement(blocks_Story["a" /* Story */], storyProps)));\n });\n};\n\nStory_Story.defaultProps = {\n children: null,\n name: null\n};\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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 _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 _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/* eslint-disable no-underscore-dangle */\n\n\n\n\n\n\n\n\n\n\nvar ArgsTable_useArgs = function useArgs(storyId, storyStore) {\n var story = storyStore.fromId(storyId);\n\n if (!story) {\n throw new Error("Unknown story: ".concat(storyId));\n }\n\n var initialArgs = story.args;\n\n var _useState = Object(react["useState"])(initialArgs),\n _useState2 = _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 storyStore._channel.on(esm["default"].STORY_ARGS_UPDATED, cb);\n\n return function () {\n return storyStore._channel.off(esm["default"].STORY_ARGS_UPDATED, cb);\n };\n }, [storyId]);\n var updateArgs = Object(react["useCallback"])(function (newArgs) {\n return storyStore.updateStoryArgs(storyId, newArgs);\n }, [storyId]);\n var resetArgs = Object(react["useCallback"])(function (argNames) {\n return storyStore.resetStoryArgs(storyId, argNames);\n }, [storyId]);\n return [args, updateArgs, resetArgs];\n};\n\nvar ArgsTable_extractComponentArgTypes = function extractComponentArgTypes(component, _ref, include, exclude) {\n var parameters = _ref.parameters;\n var params = parameters || {};\n\n var _ref2 = params.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 var context = arguments.length > 1 ? arguments[1] : undefined;\n var _ref3 = props,\n of = _ref3.of;\n var _ref4 = props,\n story = _ref4.story;\n var _context$parameters = context.parameters,\n parameters = _context$parameters === void 0 ? {} : _context$parameters;\n var component = parameters.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 argTypes = context.parameters.argTypes,\n storyStore = context.storyStore;\n var story = 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 var storyArgTypes;\n\n try {\n var storyId;\n\n switch (story) {\n case CURRENT_SELECTION:\n {\n storyId = currentId;\n storyArgTypes = argTypes;\n break;\n }\n\n case PRIMARY_STORY:\n {\n var primaryStory = getDocsStories(context)[0];\n storyId = primaryStory.id;\n storyArgTypes = primaryStory.parameters.argTypes;\n break;\n }\n\n default:\n {\n storyId = Story_lookupStoryId(story, context);\n var data = storyStore.fromId(storyId);\n storyArgTypes = data.parameters.argTypes;\n }\n }\n\n storyArgTypes = Object(filterArgTypes["a" /* filterArgTypes */])(storyArgTypes, include, exclude);\n var mainLabel = getComponentName(component) || \'Story\'; // eslint-disable-next-line prefer-const\n\n var _useArgs = ArgsTable_useArgs(storyId, storyStore),\n _useArgs2 = _slicedToArray(_useArgs, 3),\n args = _useArgs2[0],\n updateArgs = _useArgs2[1],\n resetArgs = _useArgs2[2];\n\n var tabs = _defineProperty({}, mainLabel, {\n rows: storyArgTypes,\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 = storyArgTypes && Object.values(storyArgTypes).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, _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 _context$parameters2 = context.parameters;\n _context$parameters2 = _context$parameters2 === void 0 ? {} : _context$parameters2;\n var subcomponents = _context$parameters2.subcomponents,\n controls = _context$parameters2.controls;\n var _ref5 = props,\n include = _ref5.include,\n exclude = _ref5.exclude,\n components = _ref5.components,\n sortProp = _ref5.sort;\n var _ref6 = props,\n story = _ref6.story;\n var sort = sortProp || (controls === null || controls === void 0 ? void 0 : controls.sort);\n var main = ArgsTable_getComponent(props, context);\n\n if (story) {\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(_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_PR-13/node_modules/core-js/modules/es.object.keys.js\nvar es_object_keys = __webpack_require__(18);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/Preview.js + 2 modules\nvar Preview = __webpack_require__(1016);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/fast-deep-equal/index.js\nvar fast_deep_equal = __webpack_require__(282);\nvar fast_deep_equal_default = /*#__PURE__*/__webpack_require__.n(fast_deep_equal);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/addons/dist/esm/index.js + 1 modules\nvar addons_dist_esm = __webpack_require__(165);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/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 = addons_dist_esm["a" /* addons */].getChannel();\n var sourcesRef = react_default.a.useRef();\n\n var handleSnippetRendered = function handleSnippetRendered(id, newItem) {\n if (newItem !== sources[id]) {\n var newSources = Object.assign({}, sourcesRef.current, SourceContainer_defineProperty({}, id, newItem));\n sourcesRef.current = newSources;\n }\n }; // Bind this early (instead of inside `useEffect`), because the `SNIPPET_RENDERED` event\n // is triggered *during* the rendering process, not after. We have to use the ref\n // to ensure we don\'t end up calling setState outside the effect though.\n\n\n channel.on(SNIPPET_RENDERED, handleSnippetRendered);\n Object(react["useEffect"])(function () {\n var current = sourcesRef.current || {};\n\n if (!fast_deep_equal_default()(sources, current)) {\n setSources(current);\n }\n\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__(279);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/client-logger/dist/esm/index.js\nvar client_logger_dist_esm = __webpack_require__(16);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__(21);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__(47);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/client-api/dist/esm/parameters.js\nvar esm_parameters = __webpack_require__(113);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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\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(context) {\n var _docs$source;\n\n var id = context.id,\n parameters = context.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, context) : 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_PR-13/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 Source_getStoryContext = function getStoryContext(storyId, docsContext) {\n var storyStore = docsContext.storyStore;\n var storyContext = storyStore === null || storyStore === void 0 ? void 0 : storyStore.fromId(storyId);\n\n if (!storyContext) {\n // Fallback if we can\'t get the story data for this story\n client_logger_dist_esm["a" /* logger */].warn("Unable to find information for story ID \'".concat(storyId, "\'"));\n return null;\n }\n\n return storyContext;\n};\n\nvar getSourceState = function getSourceState(storyIds, docsContext) {\n var states = storyIds.map(function (storyId) {\n var _storyContext$paramet, _storyContext$paramet2;\n\n var storyContext = Source_getStoryContext(storyId, docsContext);\n if (!storyContext) return null;\n return (_storyContext$paramet = storyContext.parameters.docs) === null || _storyContext$paramet === void 0 ? void 0 : (_storyContext$paramet2 = _storyContext$paramet.source) === null || _storyContext$paramet2 === void 0 ? void 0 : _storyContext$paramet2.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, storyContext) {\n var _parameters$docs, _parameters$docs$sour, _parameters$docs2, _parameters$docs2$sou, _enhanced$docs, _enhanced$docs$source;\n\n if (!storyContext) {\n return snippet;\n }\n\n var parameters = storyContext.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) {\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, storyContext)) || 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, storyContext)) || snippet;\n } // otherwise, use the source code logic\n\n\n var enhanced = enhanceSource_enhanceSource(storyContext) || 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 _docsContext$paramete = docsContext.parameters,\n parameters = _docsContext$paramete === void 0 ? {} : _docsContext$paramete;\n var codeProps = props;\n var singleProps = props;\n var multiProps = props;\n var source = codeProps.code; // prefer user-specified code\n\n var targetId = singleProps.id === CURRENT_SELECTION || !singleProps.id ? currentId : singleProps.id;\n var targetIds = multiProps.ids || [targetId];\n\n if (!source) {\n source = targetIds.map(function (storyId) {\n var storySource = getStorySource(storyId, sourceContext);\n var storyContext = Source_getStoryContext(storyId, docsContext);\n return Source_getSnippet(storySource, storyContext);\n }).join(\'\\n\\n\');\n }\n\n var state = getSourceState(targetIds, docsContext);\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_PR-13/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\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 mdxComponentMeta = docsContext.mdxComponentMeta,\n mdxStoryNameToKey = docsContext.mdxStoryNameToKey;\n var sourceState = withSource;\n\n if (sourceState === SourceState.NONE) {\n return props;\n }\n\n if (mdxSource) {\n return Object.assign({}, props, {\n withSource: Source_getSourceProps({\n code: decodeURI(mdxSource)\n }, docsContext, sourceContext)\n });\n }\n\n var childArray = Array.isArray(children) ? children : [children];\n var stories = childArray.filter(function (c) {\n return c.props && (c.props.id || c.props.name);\n });\n var targetIds = stories.map(function (s) {\n return s.props.id || Object(dist["toId"])(mdxComponentMeta.id || mdxComponentMeta.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 return Object.assign({}, props, {\n // pass through columns etc.\n withSource: sourceProps,\n isExpanded: sourceState === SourceState.OPEN\n });\n};\n\nvar Canvas_Canvas = function Canvas(props) {\n var docsContext = Object(react["useContext"])(DocsContext);\n var sourceContext = Object(react["useContext"])(SourceContext);\n var previewProps = Canvas_getPreviewProps(props, docsContext, sourceContext);\n var children = props.children;\n return /*#__PURE__*/react_default.a.createElement(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_PR-13/node_modules/core-js/modules/es.string.trim.js\nvar es_string_trim = __webpack_require__(166);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/blocks/Description.js\nvar Description = __webpack_require__(1011);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/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_PR-13/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_PR-13/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_PR-13/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/utils/index.js\n\n\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/doctrine/lib/doctrine.js\nvar doctrine = __webpack_require__(283);\nvar doctrine_default = /*#__PURE__*/__webpack_require__.n(doctrine);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/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_PR-13/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_PR-13/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_PR-13/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_PR-13/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_PR-13/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_PR-13/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_PR-13/node_modules/@storybook/addon-docs/dist/esm/lib/convert/typescript/index.js\nvar typescript = __webpack_require__(555);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/addon-docs/dist/esm/lib/convert/flow/index.js\nvar flow = __webpack_require__(556);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/addon-docs/dist/esm/lib/convert/proptypes/index.js\nvar proptypes = __webpack_require__(557);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/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_PR-13/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_PR-13/node_modules/@storybook/addon-docs/dist/esm/lib/docgen/index.js\n\n\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@storybook/addon-docs/dist/esm/blocks/Description.js\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 parameters = _ref2.parameters;\n\n if (children || markdown) {\n return {\n markdown: children || markdown\n };\n }\n\n var component = parameters.component,\n 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, 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__(1012);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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 kind = _ref.kind;\n var groups = kind.trim().split(STORY_KIND_PATH_SEPARATOR);\n return groups && groups[groups.length - 1] || kind;\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_PR-13/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 var context = Object(react["useContext"])(DocsContext);\n var parameters = context.parameters;\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_PR-13/node_modules/core-js/modules/es.object.freeze.js\nvar es_object_freeze = __webpack_require__(46);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/util-deprecate/browser.js\nvar browser = __webpack_require__(35);\nvar browser_default = /*#__PURE__*/__webpack_require__.n(browser);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/ts-dedent/esm/index.js\nvar ts_dedent_esm = __webpack_require__(26);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/components/dist/esm/typography/DocumentFormatting.js\nvar DocumentFormatting = __webpack_require__(124);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.match.js\nvar es_string_match = __webpack_require__(116);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.starts-with.js\nvar es_string_starts_with = __webpack_require__(152);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.reduce.js\nvar es_array_reduce = __webpack_require__(71);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/theming/dist/esm/index.js\nvar theming_dist_esm = __webpack_require__(3);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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\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 addons_dist_esm["a" /* addons */].getChannel().emit(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_PR-13/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_PR-13/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 })));\n};\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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\n\nvar Primary_Primary = function Primary(_ref) {\n var name = _ref.name;\n var context = Object(react["useContext"])(DocsContext);\n var componentStories = getDocsStories(context);\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_PR-13/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_PR-13/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 var context = Object(react["useContext"])(DocsContext);\n var componentStories = getDocsStories(context);\n var stories = componentStories;\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_PR-13/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_PR-13/node_modules/core-js/modules/web.url.js\nvar web_url = __webpack_require__(180);\n\n// EXTERNAL MODULE: ./node_modules/@storybook/theming/dist/esm/ensure.js\nvar ensure = __webpack_require__(506);\n\n// EXTERNAL MODULE: ./node_modules/emotion-theming/dist/emotion-theming.browser.esm.js\nvar emotion_theming_browser_esm = __webpack_require__(367);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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\n var _ref2 = context || {},\n _ref2$id = _ref2.id,\n storyId = _ref2$id === void 0 ? null : _ref2$id,\n _ref2$parameters = _ref2.parameters,\n parameters = _ref2$parameters === void 0 ? {} : _ref2$parameters;\n\n var _parameters$options = parameters.options,\n options = _parameters$options === void 0 ? {} : _parameters$options,\n _parameters$docs = parameters.docs,\n docs = _parameters$docs === void 0 ? {} : _parameters$docs;\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(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_PR-13/node_modules/@storybook/addon-docs/dist/esm/blocks/Meta.js\n\n\n\n\n\n\n\n\n\n\nvar Meta_document = window_default.a.document;\n\nfunction getFirstStoryId(docsContext) {\n var stories = getDocsStories(docsContext);\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_PR-13/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_PR-13/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_PR-13/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_PR-13/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_PR-13/node_modules/@storybook/addon-docs/dist/esm/index.js\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9BbmNob3IuanM/YzQ3OSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9Eb2NzQ29udGV4dC5qcz81ODg2Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL3R5cGVzLmpzPzBhNTgiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvdXRpbHMuanM/OTNiMyIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9TdG9yeS5qcz82MzYwIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL0FyZ3NUYWJsZS5qcz82ZGJhIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vc2hhcmVkLmpzPzIxZmEiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvU291cmNlQ29udGFpbmVyLmpzPzBhMGYiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvZW5oYW5jZVNvdXJjZS5qcz82YTg1Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL1NvdXJjZS5qcz8wZmZjIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL0NhbnZhcy5qcz8xMWRmIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi90eXBlcy5qcz82NzMyIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi91dGlscy9kZWZhdWx0VmFsdWUuanM/OTFkZSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vdXRpbHMvc3RyaW5nLmpzPzhjZjgiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvZG9jZ2VuL3V0aWxzL2RvY2dlbkluZm8uanM/ZDMxMCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vdXRpbHMvaW5kZXguanM/NmNhOSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9qc2RvY1BhcnNlci5qcz83ZjdlIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL3V0aWxzLmpzP2JmNWQiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvZG9jZ2VuL2Zsb3cvY3JlYXRlVHlwZS5qcz84ZTgwIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi9mbG93L2NyZWF0ZURlZmF1bHRWYWx1ZS5qcz9mNDE3Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi9mbG93L2NyZWF0ZVByb3BEZWYuanM/N2U0YSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vdHlwZVNjcmlwdC9jcmVhdGVUeXBlLmpzPzllMDUiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvZG9jZ2VuL3R5cGVTY3JpcHQvY3JlYXRlRGVmYXVsdFZhbHVlLmpzPzE5YTgiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvZG9jZ2VuL3R5cGVTY3JpcHQvY3JlYXRlUHJvcERlZi5qcz9hNjJmIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2NvbnZlcnQvaW5kZXguanM/ZDQzMyIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vY3JlYXRlUHJvcERlZi5qcz8xYWU3Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vbGliL2RvY2dlbi9leHRyYWN0RG9jZ2VuUHJvcHMuanM/NDhhNiIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9kb2NnZW4vaW5kZXguanM/MDFhMSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9EZXNjcmlwdGlvbi5qcz9mYjZmIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL1RpdGxlLmpzP2VkNTAiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvU3VidGl0bGUuanM/ZWRmNiIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9tZHguanM/MWZjNyIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9TdWJoZWFkaW5nLmpzPzgxM2UiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvRG9jc1N0b3J5LmpzPzI4NmYiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvUHJpbWFyeS5qcz82NDVjIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL0hlYWRpbmcuanM/ODVhZCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9TdG9yaWVzLmpzPzQ4YjIiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvRG9jc1BhZ2UuanM/NjE1OCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9Eb2NzQ29udGFpbmVyLmpzPzhiYTYiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9ibG9ja3MvTWV0YS5qcz81ZTFiIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL1ByZXZpZXcuanM/ZDAzMyIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9Qcm9wcy5qcz9hNTY1Iiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9Ac3Rvcnlib29rL2FkZG9uLWRvY3MvZGlzdC9lc20vYmxvY2tzL1dyYXBwZXIuanM/ZDZkZSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2Jsb2Nrcy9pbmRleC5qcz9lYmNiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQTBCO0FBQ25CO0FBQ1A7QUFDQTtBQUNPLElBQUksYUFBTTtBQUNqQjtBQUNBO0FBQ0Esc0JBQXNCLGVBQUs7QUFDM0I7QUFDQSxHQUFHO0FBQ0gsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZzQztBQUNVOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSSx1QkFBWTtBQUNoQixFQUFFLHVCQUFZLGlDQUFpQyw4QkFBYSxHQUFHO0FBQy9ELEVBQUUsdUJBQVk7QUFDZDs7QUFFTyxrQkFBa0IsdUJBQVksa0I7O0FDZjlCO0FBQ0Esd0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDRHFDO0FBQ0Y7QUFDRDtBQUNHO0FBQ0Q7QUFDQTtBQUNHO0FBQ0M7QUFDRjs7QUFFN0M7QUFDTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gs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LHNCQUFzQixlQUFLLGVBQWUsMEJBQVM7QUFDbkQsQ0FBQyxFQUFFLHdDQUFNLENBQUMsb0JBQWUsS0FBSyxvQkFBZSxHQUFHLDJCQUFzQiw4SkFBOEo7O0FBRXBPO0FBQ0EsTUFBTSxpQkFBaUI7QUFDdkIsRTs7QUNsQjBCO0FBQ25CLElBQUksZUFBTztBQUNsQjtBQUNBLHNCQUFzQixlQUFLO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxFOztBQ1JnRztBQUN2RTtBQUNHO0FBQ0g7QUFDSztBQUNBO0FBQ0g7QUFDSztBQUNKO0FBQ0Y7QUFDSDtBQUNHO0FBQ0E7QUFDRjtBQUNDO0FBQ1M7QUFDUjtBQUNGO0FBQ0s7QUFDRjtBQUNIO0FBQ0U7QUFDRiIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCB2YXIgYW5jaG9yQmxvY2tJZEZyb21JZCA9IGZ1bmN0aW9uIGFuY2hvckJsb2NrSWRGcm9tSWQoc3RvcnlJZCkge1xuICByZXR1cm4gXCJhbmNob3ItLVwiLmNvbmNhdChzdG9yeUlkKTtcbn07XG5leHBvcnQgdmFyIEFuY2hvciA9IGZ1bmN0aW9uIEFuY2hvcihfcmVmKSB7XG4gIHZhciBzdG9yeUlkID0gX3JlZi5zdG9yeUlkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgIGlkOiBhbmNob3JCbG9ja0lkRnJvbUlkKHN0b3J5SWQpXG4gIH0sIGNoaWxkcmVuKTtcbn07IiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpbmRvdyBhcyBnbG9iYWxXaW5kb3cgfSBmcm9tICdnbG9iYWwnO1xuXG4vLyBXZSBhZGQgRG9jc0NvbnRleHQgdG8gd2luZG93LiBUaGUgcmVhc29uIGlzIHRoYXQgaW4gY2FzZSBEb2NzQ29udGV4dC50cyBpc1xuLy8gaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMgKG1heWJlIG9uY2UgZGlyZWN0bHksIGFuZCBhbm90aGVyIHRpbWUgZnJvbSBhIG1pbmlmaWVkIGJ1bmRsZSlcbi8vIHdlIHdpbGwgaGF2ZSBtdWx0aXBsZSBEb2NzQ29udGV4dCBkZWZpbml0aW9ucyAtIGxlYWRpbmcgdG8gbG9zdCBjb250ZXh0IGluXG4vLyB0aGUgUmVhY3QgY29tcG9uZW50IHRyZWUuXG4vLyBUaGlzIHdhcyBzcGVjaWZpY2FsbHkgYSBwcm9ibGVtIHdpdGggdGhlIFZpdGUgYnVpbGRlci5cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmlmIChnbG9iYWxXaW5kb3cuX19ET0NTX0NPTlRFWFRfXyA9PT0gdW5kZWZpbmVkKSB7XG4gIGdsb2JhbFdpbmRvdy5fX0RPQ1NfQ09OVEVYVF9fID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQoe30pO1xuICBnbG9iYWxXaW5kb3cuX19ET0NTX0NPTlRFWFRfXy5kaXNwbGF5TmFtZSA9ICdEb2NzQ29udGV4dCc7XG59XG5cbmV4cG9ydCB2YXIgRG9jc0NvbnRleHQgPSBnbG9iYWxXaW5kb3cuX19ET0NTX0NPTlRFWFRfXzsiLCJleHBvcnQgdmFyIENVUlJFTlRfU0VMRUNUSU9OID0gJy4nO1xuZXhwb3J0IHZhciBQUklNQVJZX1NUT1JZID0gJ14nOyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuZXhwb3J0IHZhciBnZXREb2NzU3RvcmllcyA9IGZ1bmN0aW9uIGdldERvY3NTdG9yaWVzKGNvbnRleHQpIHtcbiAgdmFyIHN0b3J5U3RvcmUgPSBjb250ZXh0LnN0b3J5U3RvcmUsXG4gICAgICBraW5kID0gY29udGV4dC5raW5kO1xuXG4gIGlmICghc3RvcnlTdG9yZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBzdG9yeVN0b3JlLmdldFN0b3JpZXNGb3JLaW5kKGtpbmQpLmZpbHRlcihmdW5jdGlvbiAocykge1xuICAgIHJldHVybiAhKHMucGFyYW1ldGVycyAmJiBzLnBhcmFtZXRlcnMuZG9jcyAmJiBzLnBhcmFtZXRlcnMuZG9jcy5kaXNhYmxlKTtcbiAgfSk7XG59O1xuXG52YXIgdGl0bGVDYXNlID0gZnVuY3Rpb24gdGl0bGVDYXNlKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCctJykubWFwKGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHBhcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwYXJ0LnNsaWNlKDEpO1xuICB9KS5qb2luKCcnKTtcbn07XG5cbmV4cG9ydCB2YXIgZ2V0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50KSB7XG4gIGlmICghY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgIGlmIChjb21wb25lbnQuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgcmV0dXJuIHRpdGxlQ2FzZShjb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICBpZiAoY29tcG9uZW50Ll9fZG9jZ2VuSW5mbyAmJiBjb21wb25lbnQuX19kb2NnZW5JbmZvLmRpc3BsYXlOYW1lKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudC5fX2RvY2dlbkluZm8uZGlzcGxheU5hbWU7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50Lm5hbWU7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvRWxlbWVudChlbGVtZW50KSB7XG4gIHZhciBibG9jayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ3N0YXJ0JztcbiAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7XG4gICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgIGJsb2NrOiBibG9jayxcbiAgICBpbmxpbmU6ICduZWFyZXN0J1xuICB9KTtcbn0iLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1EWFByb3ZpZGVyIH0gZnJvbSAnQG1keC1qcy9yZWFjdCc7XG5pbXBvcnQgeyByZXNldENvbXBvbmVudHMsIFN0b3J5IGFzIFB1cmVTdG9yeSB9IGZyb20gJ0BzdG9yeWJvb2svY29tcG9uZW50cyc7XG5pbXBvcnQgeyB0b0lkLCBzdG9yeU5hbWVGcm9tRXhwb3J0IH0gZnJvbSAnQHN0b3J5Ym9vay9jc2YnO1xuaW1wb3J0IHsgQ1VSUkVOVF9TRUxFQ1RJT04gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5leHBvcnQgdmFyIHN0b3J5QmxvY2tJZEZyb21JZCA9IGZ1bmN0aW9uIHN0b3J5QmxvY2tJZEZyb21JZChzdG9yeUlkKSB7XG4gIHJldHVybiBcInN0b3J5LS1cIi5jb25jYXQoc3RvcnlJZCk7XG59O1xuZXhwb3J0IHZhciBsb29rdXBTdG9yeUlkID0gZnVuY3Rpb24gbG9va3VwU3RvcnlJZChzdG9yeU5hbWUsIF9yZWYpIHtcbiAgdmFyIG1keFN0b3J5TmFtZVRvS2V5ID0gX3JlZi5tZHhTdG9yeU5hbWVUb0tleSxcbiAgICAgIG1keENvbXBvbmVudE1ldGEgPSBfcmVmLm1keENvbXBvbmVudE1ldGE7XG4gIHJldHVybiB0b0lkKG1keENvbXBvbmVudE1ldGEuaWQgfHwgbWR4Q29tcG9uZW50TWV0YS50aXRsZSwgc3RvcnlOYW1lRnJvbUV4cG9ydChtZHhTdG9yeU5hbWVUb0tleVtzdG9yeU5hbWVdKSk7XG59O1xuZXhwb3J0IHZhciBnZXRTdG9yeVByb3BzID0gZnVuY3Rpb24gZ2V0U3RvcnlQcm9wcyhwcm9wcywgY29udGV4dCkge1xuICB2YXIgX3JlZjIgPSBwcm9wcyxcbiAgICAgIGlkID0gX3JlZjIuaWQ7XG4gIHZhciBfcmVmMyA9IHByb3BzLFxuICAgICAgbmFtZSA9IF9yZWYzLm5hbWU7XG4gIHZhciBpbnB1dElkID0gaWQgPT09IENVUlJFTlRfU0VMRUNUSU9OID8gY29udGV4dC5pZCA6IGlkO1xuICB2YXIgcHJldmlld0lkID0gaW5wdXRJZCB8fCBsb29rdXBTdG9yeUlkKG5hbWUsIGNvbnRleHQpO1xuICB2YXIgZGF0YSA9IGNvbnRleHQuc3RvcnlTdG9yZS5mcm9tSWQocHJldmlld0lkKSB8fCB7fTtcbiAgdmFyIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgIGlubGluZSA9IHByb3BzLmlubGluZTtcbiAgdmFyIF9kYXRhJHN0b3J5Rm4gPSBkYXRhLnN0b3J5Rm4sXG4gICAgICBzdG9yeUZuID0gX2RhdGEkc3RvcnlGbiA9PT0gdm9pZCAwID8gdW5kZWZpbmVkIDogX2RhdGEkc3RvcnlGbixcbiAgICAgIF9kYXRhJG5hbWUgPSBkYXRhLm5hbWUsXG4gICAgICBzdG9yeU5hbWUgPSBfZGF0YSRuYW1lID09PSB2b2lkIDAgPyB1bmRlZmluZWQgOiBfZGF0YSRuYW1lLFxuICAgICAgX2RhdGEkcGFyYW1ldGVycyA9IGRhdGEucGFyYW1ldGVycyxcbiAgICAgIHBhcmFtZXRlcnMgPSBfZGF0YSRwYXJhbWV0ZXJzID09PSB2b2lkIDAgPyB7fSA6IF9kYXRhJHBhcmFtZXRlcnM7XG4gIHZhciBfcGFyYW1ldGVycyRkb2NzID0gcGFyYW1ldGVycy5kb2NzLFxuICAgICAgZG9jcyA9IF9wYXJhbWV0ZXJzJGRvY3MgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtZXRlcnMkZG9jcztcblxuICBpZiAoZG9jcy5kaXNhYmxlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gcHJlZmVyIGJsb2NrIHByb3BzLCB0aGVuIHN0b3J5IHBhcmFtZXRlcnMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLXNwZWNpZmljIHNldHRpbmdzIGFuZCBvcHRpb25hbGx5IG92ZXJyaWRkZW4gYnkgdXNlcnNcblxuXG4gIHZhciBfZG9jcyRpbmxpbmVTdG9yaWVzID0gZG9jcy5pbmxpbmVTdG9yaWVzLFxuICAgICAgaW5saW5lU3RvcmllcyA9IF9kb2NzJGlubGluZVN0b3JpZXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX2RvY3MkaW5saW5lU3RvcmllcyxcbiAgICAgIF9kb2NzJGlmcmFtZUhlaWdodCA9IGRvY3MuaWZyYW1lSGVpZ2h0LFxuICAgICAgaWZyYW1lSGVpZ2h0ID0gX2RvY3MkaWZyYW1lSGVpZ2h0ID09PSB2b2lkIDAgPyAxMDAgOiBfZG9jcyRpZnJhbWVIZWlnaHQsXG4gICAgICBwcmVwYXJlRm9ySW5saW5lID0gZG9jcy5wcmVwYXJlRm9ySW5saW5lO1xuICB2YXIgc3RvcnlJc0lubGluZSA9IHR5cGVvZiBpbmxpbmUgPT09ICdib29sZWFuJyA/IGlubGluZSA6IGlubGluZVN0b3JpZXM7XG5cbiAgaWYgKHN0b3J5SXNJbmxpbmUgJiYgIXByZXBhcmVGb3JJbmxpbmUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdG9yeSAnXCIuY29uY2F0KHN0b3J5TmFtZSwgXCInIGlzIHNldCB0byByZW5kZXIgaW5saW5lLCBidXQgbm8gJ3ByZXBhcmVGb3JJbmxpbmUnIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGluIHlvdXIgZG9jcyBjb25maWd1cmF0aW9uIVwiKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnM6IHBhcmFtZXRlcnMsXG4gICAgaW5saW5lOiBzdG9yeUlzSW5saW5lLFxuICAgIGlkOiBwcmV2aWV3SWQsXG4gICAgc3RvcnlGbjogcHJlcGFyZUZvcklubGluZSAmJiBzdG9yeUZuID8gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHByZXBhcmVGb3JJbmxpbmUoc3RvcnlGbiwgZGF0YSk7XG4gICAgfSA6IHN0b3J5Rm4sXG4gICAgaGVpZ2h0OiBoZWlnaHQgfHwgKHN0b3J5SXNJbmxpbmUgPyB1bmRlZmluZWQgOiBpZnJhbWVIZWlnaHQpLFxuICAgIHRpdGxlOiBzdG9yeU5hbWVcbiAgfTtcbn07XG5cbnZhciBTdG9yeSA9IGZ1bmN0aW9uIFN0b3J5KHByb3BzKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEb2NzQ29udGV4dC5Db25zdW1lciwgbnVsbCwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICB2YXIgc3RvcnlQcm9wcyA9IGdldFN0b3J5UHJvcHMocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgaWYgKCFzdG9yeVByb3BzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgaWQ6IHN0b3J5QmxvY2tJZEZyb21JZChzdG9yeVByb3BzLmlkKVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1EWFByb3ZpZGVyLCB7XG4gICAgICBjb21wb25lbnRzOiByZXNldENvbXBvbmVudHNcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlU3RvcnksIHN0b3J5UHJvcHMpKSk7XG4gIH0pO1xufTtcblxuU3RvcnkuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogbnVsbCxcbiAgbmFtZTogbnVsbFxufTtcbmV4cG9ydCB7IFN0b3J5IH07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudmFsdWVzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanNcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBtYXBWYWx1ZXMgZnJvbSAnbG9kYXNoL21hcFZhbHVlcyc7XG5pbXBvcnQgeyBBcmdzVGFibGUgYXMgUHVyZUFyZ3NUYWJsZSwgQXJnc1RhYmxlRXJyb3IsIFRhYmJlZEFyZ3NUYWJsZSB9IGZyb20gJ0BzdG9yeWJvb2svY29tcG9uZW50cyc7XG5pbXBvcnQgeyBmaWx0ZXJBcmdUeXBlcyB9IGZyb20gJ0BzdG9yeWJvb2svY2xpZW50LWFwaSc7XG5pbXBvcnQgRXZlbnRzIGZyb20gJ0BzdG9yeWJvb2svY29yZS1ldmVudHMnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbmltcG9ydCB7IENVUlJFTlRfU0VMRUNUSU9OLCBQUklNQVJZX1NUT1JZIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRDb21wb25lbnROYW1lLCBnZXREb2NzU3RvcmllcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbG9va3VwU3RvcnlJZCB9IGZyb20gJy4vU3RvcnknO1xuXG52YXIgdXNlQXJncyA9IGZ1bmN0aW9uIHVzZUFyZ3Moc3RvcnlJZCwgc3RvcnlTdG9yZSkge1xuICB2YXIgc3RvcnkgPSBzdG9yeVN0b3JlLmZyb21JZChzdG9yeUlkKTtcblxuICBpZiAoIXN0b3J5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBzdG9yeTogXCIuY29uY2F0KHN0b3J5SWQpKTtcbiAgfVxuXG4gIHZhciBpbml0aWFsQXJncyA9IHN0b3J5LmFyZ3M7XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGluaXRpYWxBcmdzKSxcbiAgICAgIF91c2VTdGF0ZTIgPSBfc2xpY2VkVG9BcnJheShfdXNlU3RhdGUsIDIpLFxuICAgICAgYXJncyA9IF91c2VTdGF0ZTJbMF0sXG4gICAgICBzZXRBcmdzID0gX3VzZVN0YXRlMlsxXTtcblxuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjYiA9IGZ1bmN0aW9uIGNiKGNoYW5nZWQpIHtcbiAgICAgIGlmIChjaGFuZ2VkLnN0b3J5SWQgPT09IHN0b3J5SWQpIHtcbiAgICAgICAgc2V0QXJncyhjaGFuZ2VkLmFyZ3MpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzdG9yeVN0b3JlLl9jaGFubmVsLm9uKEV2ZW50cy5TVE9SWV9BUkdTX1VQREFURUQsIGNiKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc3RvcnlTdG9yZS5fY2hhbm5lbC5vZmYoRXZlbnRzLlNUT1JZX0FSR1NfVVBEQVRFRCwgY2IpO1xuICAgIH07XG4gIH0sIFtzdG9yeUlkXSk7XG4gIHZhciB1cGRhdGVBcmdzID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld0FyZ3MpIHtcbiAgICByZXR1cm4gc3RvcnlTdG9yZS51cGRhdGVTdG9yeUFyZ3Moc3RvcnlJZCwgbmV3QXJncyk7XG4gIH0sIFtzdG9yeUlkXSk7XG4gIHZhciByZXNldEFyZ3MgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoYXJnTmFtZXMpIHtcbiAgICByZXR1cm4gc3RvcnlTdG9yZS5yZXNldFN0b3J5QXJncyhzdG9yeUlkLCBhcmdOYW1lcyk7XG4gIH0sIFtzdG9yeUlkXSk7XG4gIHJldHVybiBbYXJncywgdXBkYXRlQXJncywgcmVzZXRBcmdzXTtcbn07XG5cbmV4cG9ydCB2YXIgZXh0cmFjdENvbXBvbmVudEFyZ1R5cGVzID0gZnVuY3Rpb24gZXh0cmFjdENvbXBvbmVudEFyZ1R5cGVzKGNvbXBvbmVudCwgX3JlZiwgaW5jbHVkZSwgZXhjbHVkZSkge1xuICB2YXIgcGFyYW1ldGVycyA9IF9yZWYucGFyYW1ldGVycztcbiAgdmFyIHBhcmFtcyA9IHBhcmFtZXRlcnMgfHwge307XG5cbiAgdmFyIF9yZWYyID0gcGFyYW1zLmRvY3MgfHwge30sXG4gICAgICBleHRyYWN0QXJnVHlwZXMgPSBfcmVmMi5leHRyYWN0QXJnVHlwZXM7XG5cbiAgaWYgKCFleHRyYWN0QXJnVHlwZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoQXJnc1RhYmxlRXJyb3IuQVJHU19VTlNVUFBPUlRFRCk7XG4gIH1cblxuICB2YXIgYXJnVHlwZXMgPSBleHRyYWN0QXJnVHlwZXMoY29tcG9uZW50KTtcbiAgYXJnVHlwZXMgPSBmaWx0ZXJBcmdUeXBlcyhhcmdUeXBlcywgaW5jbHVkZSwgZXhjbHVkZSk7XG4gIHJldHVybiBhcmdUeXBlcztcbn07XG5cbnZhciBpc1Nob3J0Y3V0ID0gZnVuY3Rpb24gaXNTaG9ydGN1dCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgW0NVUlJFTlRfU0VMRUNUSU9OLCBQUklNQVJZX1NUT1JZXS5pbmNsdWRlcyh2YWx1ZSk7XG59O1xuXG5leHBvcnQgdmFyIGdldENvbXBvbmVudCA9IGZ1bmN0aW9uIGdldENvbXBvbmVudCgpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIGNvbnRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIF9yZWYzID0gcHJvcHMsXG4gICAgICBvZiA9IF9yZWYzLm9mO1xuICB2YXIgX3JlZjQgPSBwcm9wcyxcbiAgICAgIHN0b3J5ID0gX3JlZjQuc3Rvcnk7XG4gIHZhciBfY29udGV4dCRwYXJhbWV0ZXJzID0gY29udGV4dC5wYXJhbWV0ZXJzLFxuICAgICAgcGFyYW1ldGVycyA9IF9jb250ZXh0JHBhcmFtZXRlcnMgPT09IHZvaWQgMCA/IHt9IDogX2NvbnRleHQkcGFyYW1ldGVycztcbiAgdmFyIGNvbXBvbmVudCA9IHBhcmFtZXRlcnMuY29tcG9uZW50O1xuXG4gIGlmIChpc1Nob3J0Y3V0KG9mKSB8fCBpc1Nob3J0Y3V0KHN0b3J5KSkge1xuICAgIHJldHVybiBjb21wb25lbnQgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICghb2YpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoQXJnc1RhYmxlRXJyb3IuTk9fQ09NUE9ORU5UKTtcbiAgfVxuXG4gIHJldHVybiBvZjtcbn07XG5cbnZhciBhZGRDb21wb25lbnRUYWJzID0gZnVuY3Rpb24gYWRkQ29tcG9uZW50VGFicyh0YWJzLCBjb21wb25lbnRzLCBjb250ZXh0LCBpbmNsdWRlLCBleGNsdWRlLCBzb3J0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0YWJzLCBtYXBWYWx1ZXMoY29tcG9uZW50cywgZnVuY3Rpb24gKGNvbXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm93czogZXh0cmFjdENvbXBvbmVudEFyZ1R5cGVzKGNvbXAsIGNvbnRleHQsIGluY2x1ZGUsIGV4Y2x1ZGUpLFxuICAgICAgc29ydDogc29ydFxuICAgIH07XG4gIH0pKTtcbn07XG5cbmV4cG9ydCB2YXIgU3RvcnlUYWJsZSA9IGZ1bmN0aW9uIFN0b3J5VGFibGUocHJvcHMpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KTtcbiAgdmFyIGN1cnJlbnRJZCA9IGNvbnRleHQuaWQsXG4gICAgICBhcmdUeXBlcyA9IGNvbnRleHQucGFyYW1ldGVycy5hcmdUeXBlcyxcbiAgICAgIHN0b3J5U3RvcmUgPSBjb250ZXh0LnN0b3J5U3RvcmU7XG4gIHZhciBzdG9yeSA9IHByb3BzLnN0b3J5LFxuICAgICAgY29tcG9uZW50ID0gcHJvcHMuY29tcG9uZW50LFxuICAgICAgc3ViY29tcG9uZW50cyA9IHByb3BzLnN1YmNvbXBvbmVudHMsXG4gICAgICBzaG93Q29tcG9uZW50ID0gcHJvcHMuc2hvd0NvbXBvbmVudCxcbiAgICAgIGluY2x1ZGUgPSBwcm9wcy5pbmNsdWRlLFxuICAgICAgZXhjbHVkZSA9IHByb3BzLmV4Y2x1ZGUsXG4gICAgICBzb3J0ID0gcHJvcHMuc29ydDtcbiAgdmFyIHN0b3J5QXJnVHlwZXM7XG5cbiAgdHJ5IHtcbiAgICB2YXIgc3RvcnlJZDtcblxuICAgIHN3aXRjaCAoc3RvcnkpIHtcbiAgICAgIGNhc2UgQ1VSUkVOVF9TRUxFQ1RJT046XG4gICAgICAgIHtcbiAgICAgICAgICBzdG9yeUlkID0gY3VycmVudElkO1xuICAgICAgICAgIHN0b3J5QXJnVHlwZXMgPSBhcmdUeXBlcztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFBSSU1BUllfU1RPUlk6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcHJpbWFyeVN0b3J5ID0gZ2V0RG9jc1N0b3JpZXMoY29udGV4dClbMF07XG4gICAgICAgICAgc3RvcnlJZCA9IHByaW1hcnlTdG9yeS5pZDtcbiAgICAgICAgICBzdG9yeUFyZ1R5cGVzID0gcHJpbWFyeVN0b3J5LnBhcmFtZXRlcnMuYXJnVHlwZXM7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHN0b3J5SWQgPSBsb29rdXBTdG9yeUlkKHN0b3J5LCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgZGF0YSA9IHN0b3J5U3RvcmUuZnJvbUlkKHN0b3J5SWQpO1xuICAgICAgICAgIHN0b3J5QXJnVHlwZXMgPSBkYXRhLnBhcmFtZXRlcnMuYXJnVHlwZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdG9yeUFyZ1R5cGVzID0gZmlsdGVyQXJnVHlwZXMoc3RvcnlBcmdUeXBlcywgaW5jbHVkZSwgZXhjbHVkZSk7XG4gICAgdmFyIG1haW5MYWJlbCA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50KSB8fCAnU3RvcnknOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cbiAgICB2YXIgX3VzZUFyZ3MgPSB1c2VBcmdzKHN0b3J5SWQsIHN0b3J5U3RvcmUpLFxuICAgICAgICBfdXNlQXJnczIgPSBfc2xpY2VkVG9BcnJheShfdXNlQXJncywgMyksXG4gICAgICAgIGFyZ3MgPSBfdXNlQXJnczJbMF0sXG4gICAgICAgIHVwZGF0ZUFyZ3MgPSBfdXNlQXJnczJbMV0sXG4gICAgICAgIHJlc2V0QXJncyA9IF91c2VBcmdzMlsyXTtcblxuICAgIHZhciB0YWJzID0gX2RlZmluZVByb3BlcnR5KHt9LCBtYWluTGFiZWwsIHtcbiAgICAgIHJvd3M6IHN0b3J5QXJnVHlwZXMsXG4gICAgICBhcmdzOiBhcmdzLFxuICAgICAgdXBkYXRlQXJnczogdXBkYXRlQXJncyxcbiAgICAgIHJlc2V0QXJnczogcmVzZXRBcmdzXG4gICAgfSk7IC8vIFVzZSB0aGUgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIGNvbXBvbmVudCB0YWJzIGlmIHRoZXJlIGFyZSBubyBjb250cm9sc1xuXG5cbiAgICB2YXIgc3RvcnlIYXNBcmdzV2l0aENvbnRyb2xzID0gc3RvcnlBcmdUeXBlcyAmJiBPYmplY3QudmFsdWVzKHN0b3J5QXJnVHlwZXMpLmZpbmQoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiAhISh2ICE9PSBudWxsICYmIHYgIT09IHZvaWQgMCAmJiB2LmNvbnRyb2wpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFzdG9yeUhhc0FyZ3NXaXRoQ29udHJvbHMpIHtcbiAgICAgIHVwZGF0ZUFyZ3MgPSBudWxsO1xuICAgICAgcmVzZXRBcmdzID0gbnVsbDtcbiAgICAgIHRhYnMgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50ICYmICghc3RvcnlIYXNBcmdzV2l0aENvbnRyb2xzIHx8IHNob3dDb21wb25lbnQpKSB7XG4gICAgICB0YWJzID0gYWRkQ29tcG9uZW50VGFicyh0YWJzLCBfZGVmaW5lUHJvcGVydHkoe30sIG1haW5MYWJlbCwgY29tcG9uZW50KSwgY29udGV4dCwgaW5jbHVkZSwgZXhjbHVkZSk7XG4gICAgfVxuXG4gICAgaWYgKHN1YmNvbXBvbmVudHMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1YmNvbXBvbmVudHMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgc3ViY29tcG9uZW50cyBhcnJheS4gRXhwZWN0ZWQgYW4gb2JqZWN0IHdob3NlIGtleXMgYXJlIHRhYiBsYWJlbHMgYW5kIHdob3NlIHZhbHVlcyBhcmUgY29tcG9uZW50cy5cIik7XG4gICAgICB9XG5cbiAgICAgIHRhYnMgPSBhZGRDb21wb25lbnRUYWJzKHRhYnMsIHN1YmNvbXBvbmVudHMsIGNvbnRleHQsIGluY2x1ZGUsIGV4Y2x1ZGUpO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWJiZWRBcmdzVGFibGUsIHtcbiAgICAgIHRhYnM6IHRhYnMsXG4gICAgICBzb3J0OiBzb3J0XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlQXJnc1RhYmxlLCB7XG4gICAgICBlcnJvcjogZXJyLm1lc3NhZ2VcbiAgICB9KTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgQ29tcG9uZW50c1RhYmxlID0gZnVuY3Rpb24gQ29tcG9uZW50c1RhYmxlKHByb3BzKSB7XG4gIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChEb2NzQ29udGV4dCk7XG4gIHZhciBjb21wb25lbnRzID0gcHJvcHMuY29tcG9uZW50cyxcbiAgICAgIGluY2x1ZGUgPSBwcm9wcy5pbmNsdWRlLFxuICAgICAgZXhjbHVkZSA9IHByb3BzLmV4Y2x1ZGUsXG4gICAgICBzb3J0ID0gcHJvcHMuc29ydDtcbiAgdmFyIHRhYnMgPSBhZGRDb21wb25lbnRUYWJzKHt9LCBjb21wb25lbnRzLCBjb250ZXh0LCBpbmNsdWRlLCBleGNsdWRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRhYmJlZEFyZ3NUYWJsZSwge1xuICAgIHRhYnM6IHRhYnMsXG4gICAgc29ydDogc29ydFxuICB9KTtcbn07XG5leHBvcnQgdmFyIEFyZ3NUYWJsZSA9IGZ1bmN0aW9uIEFyZ3NUYWJsZShwcm9wcykge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgX2NvbnRleHQkcGFyYW1ldGVyczIgPSBjb250ZXh0LnBhcmFtZXRlcnM7XG4gIF9jb250ZXh0JHBhcmFtZXRlcnMyID0gX2NvbnRleHQkcGFyYW1ldGVyczIgPT09IHZvaWQgMCA/IHt9IDogX2NvbnRleHQkcGFyYW1ldGVyczI7XG4gIHZhciBzdWJjb21wb25lbnRzID0gX2NvbnRleHQkcGFyYW1ldGVyczIuc3ViY29tcG9uZW50cyxcbiAgICAgIGNvbnRyb2xzID0gX2NvbnRleHQkcGFyYW1ldGVyczIuY29udHJvbHM7XG4gIHZhciBfcmVmNSA9IHByb3BzLFxuICAgICAgaW5jbHVkZSA9IF9yZWY1LmluY2x1ZGUsXG4gICAgICBleGNsdWRlID0gX3JlZjUuZXhjbHVkZSxcbiAgICAgIGNvbXBvbmVudHMgPSBfcmVmNS5jb21wb25lbnRzLFxuICAgICAgc29ydFByb3AgPSBfcmVmNS5zb3J0O1xuICB2YXIgX3JlZjYgPSBwcm9wcyxcbiAgICAgIHN0b3J5ID0gX3JlZjYuc3Rvcnk7XG4gIHZhciBzb3J0ID0gc29ydFByb3AgfHwgKGNvbnRyb2xzID09PSBudWxsIHx8IGNvbnRyb2xzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb250cm9scy5zb3J0KTtcbiAgdmFyIG1haW4gPSBnZXRDb21wb25lbnQocHJvcHMsIGNvbnRleHQpO1xuXG4gIGlmIChzdG9yeSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdG9yeVRhYmxlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudDogbWFpbixcbiAgICAgIHN1YmNvbXBvbmVudHM6IHN1YmNvbXBvbmVudHMsXG4gICAgICBzb3J0OiBzb3J0XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKCFjb21wb25lbnRzICYmICFzdWJjb21wb25lbnRzKSB7XG4gICAgdmFyIG1haW5Qcm9wcztcblxuICAgIHRyeSB7XG4gICAgICBtYWluUHJvcHMgPSB7XG4gICAgICAgIHJvd3M6IGV4dHJhY3RDb21wb25lbnRBcmdUeXBlcyhtYWluLCBjb250ZXh0LCBpbmNsdWRlLCBleGNsdWRlKVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIG1haW5Qcm9wcyA9IHtcbiAgICAgICAgZXJyb3I6IGVyci5tZXNzYWdlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlQXJnc1RhYmxlLCBfZXh0ZW5kcyh7fSwgbWFpblByb3BzLCB7XG4gICAgICBzb3J0OiBzb3J0XG4gICAgfSkpO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50c1RhYmxlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudHM6IGNvbXBvbmVudHMsXG4gICAgICBzb3J0OiBzb3J0XG4gICAgfSkpO1xuICB9XG5cbiAgdmFyIG1haW5MYWJlbCA9IGdldENvbXBvbmVudE5hbWUobWFpbik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnRzVGFibGUsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudHM6IE9iamVjdC5hc3NpZ24oX2RlZmluZVByb3BlcnR5KHt9LCBtYWluTGFiZWwsIG1haW4pLCBzdWJjb21wb25lbnRzKSxcbiAgICBzb3J0OiBzb3J0XG4gIH0pKTtcbn07XG5BcmdzVGFibGUuZGVmYXVsdFByb3BzID0ge1xuICBvZjogQ1VSUkVOVF9TRUxFQ1RJT05cbn07IiwiZXhwb3J0IHZhciBBRERPTl9JRCA9ICdzdG9yeWJvb2svZG9jcyc7XG5leHBvcnQgdmFyIFBBTkVMX0lEID0gXCJcIi5jb25jYXQoQURET05fSUQsIFwiL3BhbmVsXCIpO1xuZXhwb3J0IHZhciBQQVJBTV9LRVkgPSBcImRvY3NcIjtcbmV4cG9ydCB2YXIgU05JUFBFVF9SRU5ERVJFRCA9IFwiXCIuY29uY2F0KEFERE9OX0lELCBcIi9zbmlwcGV0LXJlbmRlcmVkXCIpO1xuZXhwb3J0IHZhciBTb3VyY2VUeXBlO1xuXG4oZnVuY3Rpb24gKFNvdXJjZVR5cGUpIHtcbiAgU291cmNlVHlwZVtcIkFVVE9cIl0gPSBcImF1dG9cIjtcbiAgU291cmNlVHlwZVtcIkNPREVcIl0gPSBcImNvZGVcIjtcbiAgU291cmNlVHlwZVtcIkRZTkFNSUNcIl0gPSBcImR5bmFtaWNcIjtcbn0pKFNvdXJjZVR5cGUgfHwgKFNvdXJjZVR5cGUgPSB7fSkpOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanNcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBhZGRvbnMgfSBmcm9tICdAc3Rvcnlib29rL2FkZG9ucyc7XG5pbXBvcnQgeyBTTklQUEVUX1JFTkRFUkVEIH0gZnJvbSAnLi4vc2hhcmVkJztcbmV4cG9ydCB2YXIgU291cmNlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb250ZXh0KHtcbiAgc291cmNlczoge31cbn0pO1xuZXhwb3J0IHZhciBTb3VyY2VDb250YWluZXIgPSBmdW5jdGlvbiBTb3VyY2VDb250YWluZXIoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuXG4gIHZhciBfdXNlU3RhdGUgPSB1c2VTdGF0ZSh7fSksXG4gICAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICAgIHNvdXJjZXMgPSBfdXNlU3RhdGUyWzBdLFxuICAgICAgc2V0U291cmNlcyA9IF91c2VTdGF0ZTJbMV07XG5cbiAgdmFyIGNoYW5uZWwgPSBhZGRvbnMuZ2V0Q2hhbm5lbCgpO1xuICB2YXIgc291cmNlc1JlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHZhciBoYW5kbGVTbmlwcGV0UmVuZGVyZWQgPSBmdW5jdGlvbiBoYW5kbGVTbmlwcGV0UmVuZGVyZWQoaWQsIG5ld0l0ZW0pIHtcbiAgICBpZiAobmV3SXRlbSAhPT0gc291cmNlc1tpZF0pIHtcbiAgICAgIHZhciBuZXdTb3VyY2VzID0gT2JqZWN0LmFzc2lnbih7fSwgc291cmNlc1JlZi5jdXJyZW50LCBfZGVmaW5lUHJvcGVydHkoe30sIGlkLCBuZXdJdGVtKSk7XG4gICAgICBzb3VyY2VzUmVmLmN1cnJlbnQgPSBuZXdTb3VyY2VzO1xuICAgIH1cbiAgfTsgLy8gQmluZCB0aGlzIGVhcmx5IChpbnN0ZWFkIG9mIGluc2lkZSBgdXNlRWZmZWN0YCksIGJlY2F1c2UgdGhlIGBTTklQUEVUX1JFTkRFUkVEYCBldmVudFxuICAvLyBpcyB0cmlnZ2VyZWQgKmR1cmluZyogdGhlIHJlbmRlcmluZyBwcm9jZXNzLCBub3QgYWZ0ZXIuIFdlIGhhdmUgdG8gdXNlIHRoZSByZWZcbiAgLy8gdG8gZW5zdXJlIHdlIGRvbid0IGVuZCB1cCBjYWxsaW5nIHNldFN0YXRlIG91dHNpZGUgdGhlIGVmZmVjdCB0aG91Z2guXG5cblxuICBjaGFubmVsLm9uKFNOSVBQRVRfUkVOREVSRUQsIGhhbmRsZVNuaXBwZXRSZW5kZXJlZCk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzb3VyY2VzUmVmLmN1cnJlbnQgfHwge307XG5cbiAgICBpZiAoIWRlZXBFcXVhbChzb3VyY2VzLCBjdXJyZW50KSkge1xuICAgICAgc2V0U291cmNlcyhjdXJyZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGNoYW5uZWwub2ZmKFNOSVBQRVRfUkVOREVSRUQsIGhhbmRsZVNuaXBwZXRSZW5kZXJlZCk7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTb3VyY2VDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHNvdXJjZXM6IHNvdXJjZXNcbiAgICB9XG4gIH0sIGNoaWxkcmVuKTtcbn07IiwiZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IHsgY29tYmluZVBhcmFtZXRlcnMgfSBmcm9tICdAc3Rvcnlib29rL2NsaWVudC1hcGknO1xuXG4vKipcbiAqIGdpdmVuIGEgbG9jYXRpb24sIGV4dHJhY3QgdGhlIHRleHQgZnJvbSB0aGUgZnVsbCBzb3VyY2VcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNvdXJjZShsb2NhdGlvbiwgbGluZXMpIHtcbiAgdmFyIHN0YXJ0ID0gbG9jYXRpb24uc3RhcnRCb2R5LFxuICAgICAgZW5kID0gbG9jYXRpb24uZW5kQm9keTtcblxuICBpZiAoc3RhcnQubGluZSA9PT0gZW5kLmxpbmUgJiYgbGluZXNbc3RhcnQubGluZSAtIDFdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbGluZXNbc3RhcnQubGluZSAtIDFdLnN1YnN0cmluZyhzdGFydC5jb2wsIGVuZC5jb2wpO1xuICB9IC8vIE5PVEU6IHN0b3J5c291cmNlIGxvY2F0aW9ucyBhcmUgMS1iYXNlZCBub3QgMC1iYXNlZCFcblxuXG4gIHZhciBzdGFydExpbmUgPSBsaW5lc1tzdGFydC5saW5lIC0gMV07XG4gIHZhciBlbmRMaW5lID0gbGluZXNbZW5kLmxpbmUgLSAxXTtcblxuICBpZiAoc3RhcnRMaW5lID09PSB1bmRlZmluZWQgfHwgZW5kTGluZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gW3N0YXJ0TGluZS5zdWJzdHJpbmcoc3RhcnQuY29sKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShsaW5lcy5zbGljZShzdGFydC5saW5lLCBlbmQubGluZSAtIDEpKSwgW2VuZExpbmUuc3Vic3RyaW5nKDAsIGVuZC5jb2wpXSkuam9pbignXFxuJyk7XG59IC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRU5EIEBzdG9yeWJvb2svc291cmNlLWxvYWRlci9leHRyYWN0LXNvdXJjZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblxuLyoqXG4gKiBSZXBsYWNlcyBmdWxsIHN0b3J5IGlkIG5hbWUgbGlrZTogc3Rvcnkta2luZC0tc3RvcnktbmFtZSAtPiBzdG9yeS1uYW1lXG4gKiBAcGFyYW0gaWRcbiAqL1xudmFyIHN0b3J5SWRUb1Nhbml0aXplZFN0b3J5TmFtZSA9IGZ1bmN0aW9uIHN0b3J5SWRUb1Nhbml0aXplZFN0b3J5TmFtZShpZCkge1xuICByZXR1cm4gaWQucmVwbGFjZSgvXi4qPy0tLywgJycpO1xufTtcblxudmFyIGV4dHJhY3QgPSBmdW5jdGlvbiBleHRyYWN0KHRhcmdldElkLCBfcmVmKSB7XG4gIHZhciBzb3VyY2UgPSBfcmVmLnNvdXJjZSxcbiAgICAgIGxvY2F0aW9uc01hcCA9IF9yZWYubG9jYXRpb25zTWFwO1xuXG4gIGlmICghbG9jYXRpb25zTWFwKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHZhciBzYW5pdGl6ZWRTdG9yeU5hbWUgPSBzdG9yeUlkVG9TYW5pdGl6ZWRTdG9yeU5hbWUodGFyZ2V0SWQpO1xuICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbnNNYXBbc2FuaXRpemVkU3RvcnlOYW1lXTtcblxuICBpZiAoIWxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgnXFxuJyk7XG4gIHJldHVybiBleHRyYWN0U291cmNlKGxvY2F0aW9uLCBsaW5lcyk7XG59O1xuXG5leHBvcnQgdmFyIGVuaGFuY2VTb3VyY2UgPSBmdW5jdGlvbiBlbmhhbmNlU291cmNlKGNvbnRleHQpIHtcbiAgdmFyIF9kb2NzJHNvdXJjZTtcblxuICB2YXIgaWQgPSBjb250ZXh0LmlkLFxuICAgICAgcGFyYW1ldGVycyA9IGNvbnRleHQucGFyYW1ldGVycztcbiAgdmFyIHN0b3J5U291cmNlID0gcGFyYW1ldGVycy5zdG9yeVNvdXJjZSxcbiAgICAgIF9wYXJhbWV0ZXJzJGRvY3MgPSBwYXJhbWV0ZXJzLmRvY3MsXG4gICAgICBkb2NzID0gX3BhcmFtZXRlcnMkZG9jcyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1ldGVycyRkb2NzO1xuICB2YXIgdHJhbnNmb3JtU291cmNlID0gZG9jcy50cmFuc2Zvcm1Tb3VyY2U7IC8vIG5vIGlucHV0IG9yIHVzZXIgaGFzIG1hbnVhbGx5IG92ZXJyaWRkZW4gdGhlIG91dHB1dFxuXG4gIGlmICghKHN0b3J5U291cmNlICE9PSBudWxsICYmIHN0b3J5U291cmNlICE9PSB2b2lkIDAgJiYgc3RvcnlTb3VyY2Uuc291cmNlKSB8fCAoX2RvY3Mkc291cmNlID0gZG9jcy5zb3VyY2UpICE9PSBudWxsICYmIF9kb2NzJHNvdXJjZSAhPT0gdm9pZCAwICYmIF9kb2NzJHNvdXJjZS5jb2RlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgaW5wdXQgPSBleHRyYWN0KGlkLCBzdG9yeVNvdXJjZSk7XG4gIHZhciBjb2RlID0gdHJhbnNmb3JtU291cmNlID8gdHJhbnNmb3JtU291cmNlKGlucHV0LCBjb250ZXh0KSA6IGlucHV0O1xuICByZXR1cm4ge1xuICAgIGRvY3M6IGNvbWJpbmVQYXJhbWV0ZXJzKGRvY3MsIHtcbiAgICAgIHNvdXJjZToge1xuICAgICAgICBjb2RlOiBjb2RlXG4gICAgICB9XG4gICAgfSlcbiAgfTtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU291cmNlIGFzIFB1cmVTb3VyY2UsIFNvdXJjZUVycm9yIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BzdG9yeWJvb2svY2xpZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xuaW1wb3J0IHsgU291cmNlQ29udGV4dCB9IGZyb20gJy4vU291cmNlQ29udGFpbmVyJztcbmltcG9ydCB7IENVUlJFTlRfU0VMRUNUSU9OIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBTb3VyY2VUeXBlIH0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IGVuaGFuY2VTb3VyY2UgfSBmcm9tICcuL2VuaGFuY2VTb3VyY2UnO1xuZXhwb3J0IHZhciBTb3VyY2VTdGF0ZTtcblxuKGZ1bmN0aW9uIChTb3VyY2VTdGF0ZSkge1xuICBTb3VyY2VTdGF0ZVtcIk9QRU5cIl0gPSBcIm9wZW5cIjtcbiAgU291cmNlU3RhdGVbXCJDTE9TRURcIl0gPSBcImNsb3NlZFwiO1xuICBTb3VyY2VTdGF0ZVtcIk5PTkVcIl0gPSBcIm5vbmVcIjtcbn0pKFNvdXJjZVN0YXRlIHx8IChTb3VyY2VTdGF0ZSA9IHt9KSk7XG5cbnZhciBnZXRTdG9yeUNvbnRleHQgPSBmdW5jdGlvbiBnZXRTdG9yeUNvbnRleHQoc3RvcnlJZCwgZG9jc0NvbnRleHQpIHtcbiAgdmFyIHN0b3J5U3RvcmUgPSBkb2NzQ29udGV4dC5zdG9yeVN0b3JlO1xuICB2YXIgc3RvcnlDb250ZXh0ID0gc3RvcnlTdG9yZSA9PT0gbnVsbCB8fCBzdG9yeVN0b3JlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzdG9yeVN0b3JlLmZyb21JZChzdG9yeUlkKTtcblxuICBpZiAoIXN0b3J5Q29udGV4dCkge1xuICAgIC8vIEZhbGxiYWNrIGlmIHdlIGNhbid0IGdldCB0aGUgc3RvcnkgZGF0YSBmb3IgdGhpcyBzdG9yeVxuICAgIGxvZ2dlci53YXJuKFwiVW5hYmxlIHRvIGZpbmQgaW5mb3JtYXRpb24gZm9yIHN0b3J5IElEICdcIi5jb25jYXQoc3RvcnlJZCwgXCInXCIpKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBzdG9yeUNvbnRleHQ7XG59O1xuXG52YXIgZ2V0U291cmNlU3RhdGUgPSBmdW5jdGlvbiBnZXRTb3VyY2VTdGF0ZShzdG9yeUlkcywgZG9jc0NvbnRleHQpIHtcbiAgdmFyIHN0YXRlcyA9IHN0b3J5SWRzLm1hcChmdW5jdGlvbiAoc3RvcnlJZCkge1xuICAgIHZhciBfc3RvcnlDb250ZXh0JHBhcmFtZXQsIF9zdG9yeUNvbnRleHQkcGFyYW1ldDI7XG5cbiAgICB2YXIgc3RvcnlDb250ZXh0ID0gZ2V0U3RvcnlDb250ZXh0KHN0b3J5SWQsIGRvY3NDb250ZXh0KTtcbiAgICBpZiAoIXN0b3J5Q29udGV4dCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIChfc3RvcnlDb250ZXh0JHBhcmFtZXQgPSBzdG9yeUNvbnRleHQucGFyYW1ldGVycy5kb2NzKSA9PT0gbnVsbCB8fCBfc3RvcnlDb250ZXh0JHBhcmFtZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfc3RvcnlDb250ZXh0JHBhcmFtZXQyID0gX3N0b3J5Q29udGV4dCRwYXJhbWV0LnNvdXJjZSkgPT09IG51bGwgfHwgX3N0b3J5Q29udGV4dCRwYXJhbWV0MiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3N0b3J5Q29udGV4dCRwYXJhbWV0Mi5zdGF0ZTtcbiAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuICBpZiAoc3RhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFNvdXJjZVN0YXRlLkNMT1NFRDsgLy8gRklYTUU6IGhhbmRsaW5nIG11bHRpcGxlIHN0b3JpZXMgaXMgYSBwYWluXG5cbiAgcmV0dXJuIHN0YXRlc1swXTtcbn07XG5cbnZhciBnZXRTdG9yeVNvdXJjZSA9IGZ1bmN0aW9uIGdldFN0b3J5U291cmNlKHN0b3J5SWQsIHNvdXJjZUNvbnRleHQpIHtcbiAgdmFyIHNvdXJjZXMgPSBzb3VyY2VDb250ZXh0LnNvdXJjZXM7IC8vIHNvdXJjZSByZW5kZXJpbmcgaXMgYXN5bmMgc28gc291cmNlIGlzIHVuYXZhaWxhYmxlIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVuZGVyIGN5Y2xlLFxuICAvLyBzbyB3ZSBmYWlsIGdyYWNlZnVsbHkgaGVyZSB3aXRob3V0IHdhcm5pbmdcblxuICByZXR1cm4gKHNvdXJjZXMgPT09IG51bGwgfHwgc291cmNlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlc1tzdG9yeUlkXSkgfHwgJyc7XG59O1xuXG52YXIgZ2V0U25pcHBldCA9IGZ1bmN0aW9uIGdldFNuaXBwZXQoc25pcHBldCwgc3RvcnlDb250ZXh0KSB7XG4gIHZhciBfcGFyYW1ldGVycyRkb2NzLCBfcGFyYW1ldGVycyRkb2NzJHNvdXIsIF9wYXJhbWV0ZXJzJGRvY3MyLCBfcGFyYW1ldGVycyRkb2NzMiRzb3UsIF9lbmhhbmNlZCRkb2NzLCBfZW5oYW5jZWQkZG9jcyRzb3VyY2U7XG5cbiAgaWYgKCFzdG9yeUNvbnRleHQpIHtcbiAgICByZXR1cm4gc25pcHBldDtcbiAgfVxuXG4gIHZhciBwYXJhbWV0ZXJzID0gc3RvcnlDb250ZXh0LnBhcmFtZXRlcnM7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZVxuXG4gIHZhciBpc0FyZ3NTdG9yeSA9IHBhcmFtZXRlcnMuX19pc0FyZ3NTdG9yeTtcbiAgdmFyIHR5cGUgPSAoKF9wYXJhbWV0ZXJzJGRvY3MgPSBwYXJhbWV0ZXJzLmRvY3MpID09PSBudWxsIHx8IF9wYXJhbWV0ZXJzJGRvY3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfcGFyYW1ldGVycyRkb2NzJHNvdXIgPSBfcGFyYW1ldGVycyRkb2NzLnNvdXJjZSkgPT09IG51bGwgfHwgX3BhcmFtZXRlcnMkZG9jcyRzb3VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcGFyYW1ldGVycyRkb2NzJHNvdXIudHlwZSkgfHwgU291cmNlVHlwZS5BVVRPOyAvLyBpZiB1c2VyIGhhcyBoYXJkLWNvZGVkIHRoZSBzbmlwcGV0LCB0aGF0IHRha2VzIHByZWNlZGVuY2VcblxuICB2YXIgdXNlckNvZGUgPSAoX3BhcmFtZXRlcnMkZG9jczIgPSBwYXJhbWV0ZXJzLmRvY3MpID09PSBudWxsIHx8IF9wYXJhbWV0ZXJzJGRvY3MyID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX3BhcmFtZXRlcnMkZG9jczIkc291ID0gX3BhcmFtZXRlcnMkZG9jczIuc291cmNlKSA9PT0gbnVsbCB8fCBfcGFyYW1ldGVycyRkb2NzMiRzb3UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9wYXJhbWV0ZXJzJGRvY3MyJHNvdS5jb2RlO1xuXG4gIGlmICh1c2VyQ29kZSkge1xuICAgIHJldHVybiB1c2VyQ29kZTtcbiAgfSAvLyBpZiB1c2VyIGhhcyBleHBsaWNpdGx5IHNldCB0aGlzIGFzIGR5bmFtaWMsIHVzZSBzbmlwcGV0XG5cblxuICBpZiAodHlwZSA9PT0gU291cmNlVHlwZS5EWU5BTUlDKSB7XG4gICAgdmFyIF9wYXJhbWV0ZXJzJGRvY3MzLCBfcGFyYW1ldGVycyRkb2NzMyR0cmE7XG5cbiAgICByZXR1cm4gKChfcGFyYW1ldGVycyRkb2NzMyA9IHBhcmFtZXRlcnMuZG9jcykgPT09IG51bGwgfHwgX3BhcmFtZXRlcnMkZG9jczMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfcGFyYW1ldGVycyRkb2NzMyR0cmEgPSBfcGFyYW1ldGVycyRkb2NzMy50cmFuc2Zvcm1Tb3VyY2UpID09PSBudWxsIHx8IF9wYXJhbWV0ZXJzJGRvY3MzJHRyYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmFtZXRlcnMkZG9jczMkdHJhLmNhbGwoX3BhcmFtZXRlcnMkZG9jczMsIHNuaXBwZXQsIHN0b3J5Q29udGV4dCkpIHx8IHNuaXBwZXQ7XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBhcmdzIHN0b3J5IGFuZCB0aGVyZSdzIGEgc25pcHBldFxuXG5cbiAgaWYgKHR5cGUgPT09IFNvdXJjZVR5cGUuQVVUTyAmJiBzbmlwcGV0ICYmIGlzQXJnc1N0b3J5KSB7XG4gICAgdmFyIF9wYXJhbWV0ZXJzJGRvY3M0LCBfcGFyYW1ldGVycyRkb2NzNCR0cmE7XG5cbiAgICByZXR1cm4gKChfcGFyYW1ldGVycyRkb2NzNCA9IHBhcmFtZXRlcnMuZG9jcykgPT09IG51bGwgfHwgX3BhcmFtZXRlcnMkZG9jczQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfcGFyYW1ldGVycyRkb2NzNCR0cmEgPSBfcGFyYW1ldGVycyRkb2NzNC50cmFuc2Zvcm1Tb3VyY2UpID09PSBudWxsIHx8IF9wYXJhbWV0ZXJzJGRvY3M0JHRyYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmFtZXRlcnMkZG9jczQkdHJhLmNhbGwoX3BhcmFtZXRlcnMkZG9jczQsIHNuaXBwZXQsIHN0b3J5Q29udGV4dCkpIHx8IHNuaXBwZXQ7XG4gIH0gLy8gb3RoZXJ3aXNlLCB1c2UgdGhlIHNvdXJjZSBjb2RlIGxvZ2ljXG5cblxuICB2YXIgZW5oYW5jZWQgPSBlbmhhbmNlU291cmNlKHN0b3J5Q29udGV4dCkgfHwgcGFyYW1ldGVycztcbiAgcmV0dXJuIChlbmhhbmNlZCA9PT0gbnVsbCB8fCBlbmhhbmNlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9lbmhhbmNlZCRkb2NzID0gZW5oYW5jZWQuZG9jcykgPT09IG51bGwgfHwgX2VuaGFuY2VkJGRvY3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IChfZW5oYW5jZWQkZG9jcyRzb3VyY2UgPSBfZW5oYW5jZWQkZG9jcy5zb3VyY2UpID09PSBudWxsIHx8IF9lbmhhbmNlZCRkb2NzJHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2VuaGFuY2VkJGRvY3Mkc291cmNlLmNvZGUpIHx8ICcnO1xufTtcblxuZXhwb3J0IHZhciBnZXRTb3VyY2VQcm9wcyA9IGZ1bmN0aW9uIGdldFNvdXJjZVByb3BzKHByb3BzLCBkb2NzQ29udGV4dCwgc291cmNlQ29udGV4dCkge1xuICB2YXIgY3VycmVudElkID0gZG9jc0NvbnRleHQuaWQsXG4gICAgICBfZG9jc0NvbnRleHQkcGFyYW1ldGUgPSBkb2NzQ29udGV4dC5wYXJhbWV0ZXJzLFxuICAgICAgcGFyYW1ldGVycyA9IF9kb2NzQ29udGV4dCRwYXJhbWV0ZSA9PT0gdm9pZCAwID8ge30gOiBfZG9jc0NvbnRleHQkcGFyYW1ldGU7XG4gIHZhciBjb2RlUHJvcHMgPSBwcm9wcztcbiAgdmFyIHNpbmdsZVByb3BzID0gcHJvcHM7XG4gIHZhciBtdWx0aVByb3BzID0gcHJvcHM7XG4gIHZhciBzb3VyY2UgPSBjb2RlUHJvcHMuY29kZTsgLy8gcHJlZmVyIHVzZXItc3BlY2lmaWVkIGNvZGVcblxuICB2YXIgdGFyZ2V0SWQgPSBzaW5nbGVQcm9wcy5pZCA9PT0gQ1VSUkVOVF9TRUxFQ1RJT04gfHwgIXNpbmdsZVByb3BzLmlkID8gY3VycmVudElkIDogc2luZ2xlUHJvcHMuaWQ7XG4gIHZhciB0YXJnZXRJZHMgPSBtdWx0aVByb3BzLmlkcyB8fCBbdGFyZ2V0SWRdO1xuXG4gIGlmICghc291cmNlKSB7XG4gICAgc291cmNlID0gdGFyZ2V0SWRzLm1hcChmdW5jdGlvbiAoc3RvcnlJZCkge1xuICAgICAgdmFyIHN0b3J5U291cmNlID0gZ2V0U3RvcnlTb3VyY2Uoc3RvcnlJZCwgc291cmNlQ29udGV4dCk7XG4gICAgICB2YXIgc3RvcnlDb250ZXh0ID0gZ2V0U3RvcnlDb250ZXh0KHN0b3J5SWQsIGRvY3NDb250ZXh0KTtcbiAgICAgIHJldHVybiBnZXRTbmlwcGV0KHN0b3J5U291cmNlLCBzdG9yeUNvbnRleHQpO1xuICAgIH0pLmpvaW4oJ1xcblxcbicpO1xuICB9XG5cbiAgdmFyIHN0YXRlID0gZ2V0U291cmNlU3RhdGUodGFyZ2V0SWRzLCBkb2NzQ29udGV4dCk7XG4gIHZhciBfcGFyYW1ldGVycyRkb2NzNSA9IHBhcmFtZXRlcnMuZG9jcyxcbiAgICAgIGRvY3NQYXJhbWV0ZXJzID0gX3BhcmFtZXRlcnMkZG9jczUgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtZXRlcnMkZG9jczU7XG4gIHZhciBfZG9jc1BhcmFtZXRlcnMkc291cmMgPSBkb2NzUGFyYW1ldGVycy5zb3VyY2UsXG4gICAgICBzb3VyY2VQYXJhbWV0ZXJzID0gX2RvY3NQYXJhbWV0ZXJzJHNvdXJjID09PSB2b2lkIDAgPyB7fSA6IF9kb2NzUGFyYW1ldGVycyRzb3VyYztcbiAgdmFyIF9zb3VyY2VQYXJhbWV0ZXJzJGxhbiA9IHNvdXJjZVBhcmFtZXRlcnMubGFuZ3VhZ2UsXG4gICAgICBkb2NzTGFuZ3VhZ2UgPSBfc291cmNlUGFyYW1ldGVycyRsYW4gPT09IHZvaWQgMCA/IG51bGwgOiBfc291cmNlUGFyYW1ldGVycyRsYW47XG4gIHJldHVybiBzb3VyY2UgPyB7XG4gICAgY29kZTogc291cmNlLFxuICAgIHN0YXRlOiBzdGF0ZSxcbiAgICBsYW5ndWFnZTogcHJvcHMubGFuZ3VhZ2UgfHwgZG9jc0xhbmd1YWdlIHx8ICdqc3gnLFxuICAgIGRhcms6IHByb3BzLmRhcmsgfHwgZmFsc2VcbiAgfSA6IHtcbiAgICBlcnJvcjogU291cmNlRXJyb3IuU09VUkNFX1VOQVZBSUxBQkxFLFxuICAgIHN0YXRlOiBzdGF0ZVxuICB9O1xufTtcbi8qKlxuICogU3Rvcnkgc291cmNlIGRvYyBibG9jayByZW5kZXJzIHNvdXJjZSBjb2RlIGlmIHByb3ZpZGVkLFxuICogb3IgdGhlIHNvdXJjZSBmb3IgYSBzdG9yeSBpZiBgc3RvcnlJZGAgaXMgcHJvdmlkZWQsIG9yXG4gKiB0aGUgc291cmNlIGZvciB0aGUgY3VycmVudCBzdG9yeSBpZiBub3RoaW5nIGlzIHByb3ZpZGVkLlxuICovXG5cbmV4cG9ydCB2YXIgU291cmNlID0gZnVuY3Rpb24gU291cmNlKHByb3BzKSB7XG4gIHZhciBzb3VyY2VDb250ZXh0ID0gdXNlQ29udGV4dChTb3VyY2VDb250ZXh0KTtcbiAgdmFyIGRvY3NDb250ZXh0ID0gdXNlQ29udGV4dChEb2NzQ29udGV4dCk7XG4gIHZhciBzb3VyY2VQcm9wcyA9IGdldFNvdXJjZVByb3BzKHByb3BzLCBkb2NzQ29udGV4dCwgc291cmNlQ29udGV4dCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlU291cmNlLCBzb3VyY2VQcm9wcyk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTURYUHJvdmlkZXIgfSBmcm9tICdAbWR4LWpzL3JlYWN0JztcbmltcG9ydCB7IHRvSWQsIHN0b3J5TmFtZUZyb21FeHBvcnQgfSBmcm9tICdAc3Rvcnlib29rL2NzZic7XG5pbXBvcnQgeyByZXNldENvbXBvbmVudHMsIFByZXZpZXcgYXMgUHVyZVByZXZpZXcgfSBmcm9tICdAc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbmltcG9ydCB7IFNvdXJjZUNvbnRleHQgfSBmcm9tICcuL1NvdXJjZUNvbnRhaW5lcic7XG5pbXBvcnQgeyBnZXRTb3VyY2VQcm9wcywgU291cmNlU3RhdGUgfSBmcm9tICcuL1NvdXJjZSc7XG5leHBvcnQgeyBTb3VyY2VTdGF0ZSB9O1xuXG52YXIgZ2V0UHJldmlld1Byb3BzID0gZnVuY3Rpb24gZ2V0UHJldmlld1Byb3BzKF9yZWYsIGRvY3NDb250ZXh0LCBzb3VyY2VDb250ZXh0KSB7XG4gIHZhciB3aXRoU291cmNlID0gX3JlZi53aXRoU291cmNlLFxuICAgICAgbWR4U291cmNlID0gX3JlZi5tZHhTb3VyY2UsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJ3aXRoU291cmNlXCIsIFwibWR4U291cmNlXCIsIFwiY2hpbGRyZW5cIl0pO1xuXG4gIHZhciBtZHhDb21wb25lbnRNZXRhID0gZG9jc0NvbnRleHQubWR4Q29tcG9uZW50TWV0YSxcbiAgICAgIG1keFN0b3J5TmFtZVRvS2V5ID0gZG9jc0NvbnRleHQubWR4U3RvcnlOYW1lVG9LZXk7XG4gIHZhciBzb3VyY2VTdGF0ZSA9IHdpdGhTb3VyY2U7XG5cbiAgaWYgKHNvdXJjZVN0YXRlID09PSBTb3VyY2VTdGF0ZS5OT05FKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgaWYgKG1keFNvdXJjZSkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgd2l0aFNvdXJjZTogZ2V0U291cmNlUHJvcHMoe1xuICAgICAgICBjb2RlOiBkZWNvZGVVUkkobWR4U291cmNlKVxuICAgICAgfSwgZG9jc0NvbnRleHQsIHNvdXJjZUNvbnRleHQpXG4gICAgfSk7XG4gIH1cblxuICB2YXIgY2hpbGRBcnJheSA9IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pID8gY2hpbGRyZW4gOiBbY2hpbGRyZW5dO1xuICB2YXIgc3RvcmllcyA9IGNoaWxkQXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMucHJvcHMgJiYgKGMucHJvcHMuaWQgfHwgYy5wcm9wcy5uYW1lKTtcbiAgfSk7XG4gIHZhciB0YXJnZXRJZHMgPSBzdG9yaWVzLm1hcChmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnByb3BzLmlkIHx8IHRvSWQobWR4Q29tcG9uZW50TWV0YS5pZCB8fCBtZHhDb21wb25lbnRNZXRhLnRpdGxlLCBzdG9yeU5hbWVGcm9tRXhwb3J0KG1keFN0b3J5TmFtZVRvS2V5W3MucHJvcHMubmFtZV0pKTtcbiAgfSk7XG4gIHZhciBzb3VyY2VQcm9wcyA9IGdldFNvdXJjZVByb3BzKHtcbiAgICBpZHM6IHRhcmdldElkc1xuICB9LCBkb2NzQ29udGV4dCwgc291cmNlQ29udGV4dCk7XG4gIGlmICghc291cmNlU3RhdGUpIHNvdXJjZVN0YXRlID0gc291cmNlUHJvcHMuc3RhdGU7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcywge1xuICAgIC8vIHBhc3MgdGhyb3VnaCBjb2x1bW5zIGV0Yy5cbiAgICB3aXRoU291cmNlOiBzb3VyY2VQcm9wcyxcbiAgICBpc0V4cGFuZGVkOiBzb3VyY2VTdGF0ZSA9PT0gU291cmNlU3RhdGUuT1BFTlxuICB9KTtcbn07XG5cbmV4cG9ydCB2YXIgQ2FudmFzID0gZnVuY3Rpb24gQ2FudmFzKHByb3BzKSB7XG4gIHZhciBkb2NzQ29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoU291cmNlQ29udGV4dCk7XG4gIHZhciBwcmV2aWV3UHJvcHMgPSBnZXRQcmV2aWV3UHJvcHMocHJvcHMsIGRvY3NDb250ZXh0LCBzb3VyY2VDb250ZXh0KTtcbiAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNRFhQcm92aWRlciwge1xuICAgIGNvbXBvbmVudHM6IHJlc2V0Q29tcG9uZW50c1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlUHJldmlldywgcHJldmlld1Byb3BzLCBjaGlsZHJlbikpO1xufTsiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxuLy8gZXhwb3J0IHR5cGUgRG9jZ2VuVHlwZSA9IERvY2dlblByb3BUeXBlIHwgRG9jZ2VuRmxvd1R5cGUgfCBEb2NnZW5UeXBlU2NyaXB0VHlwZTtcbmV4cG9ydCB2YXIgVHlwZVN5c3RlbTtcblxuKGZ1bmN0aW9uIChUeXBlU3lzdGVtKSB7XG4gIFR5cGVTeXN0ZW1bXCJKQVZBU0NSSVBUXCJdID0gXCJKYXZhU2NyaXB0XCI7XG4gIFR5cGVTeXN0ZW1bXCJGTE9XXCJdID0gXCJGbG93XCI7XG4gIFR5cGVTeXN0ZW1bXCJUWVBFU0NSSVBUXCJdID0gXCJUeXBlU2NyaXB0XCI7XG4gIFR5cGVTeXN0ZW1bXCJVTktOT1dOXCJdID0gXCJVbmtub3duXCI7XG59KShUeXBlU3lzdGVtIHx8IChUeXBlU3lzdGVtID0ge30pKTsiLCJ2YXIgQkxBQ0tMSVNUID0gWydudWxsJywgJ3VuZGVmaW5lZCddO1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmYXVsdFZhbHVlQmxhY2tsaXN0ZWQodmFsdWUpIHtcbiAgcmV0dXJuIEJMQUNLTElTVC5zb21lKGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHggPT09IHZhbHVlO1xuICB9KTtcbn0iLCJleHBvcnQgdmFyIHN0ciA9IGZ1bmN0aW9uIHN0cihvYmopIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRGVzY3JpcHRpb246IGV4cGVjdGVkIHN0cmluZywgZ290OiBcIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkob2JqKSkpO1xufTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cbmltcG9ydCB7IHN0ciB9IGZyb20gJy4vc3RyaW5nJztcbmV4cG9ydCBmdW5jdGlvbiBoYXNEb2NnZW4oY29tcG9uZW50KSB7XG4gIHJldHVybiAhIWNvbXBvbmVudC5fX2RvY2dlbkluZm87XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZERvY2dlblNlY3Rpb24oZG9jZ2VuU2VjdGlvbikge1xuICByZXR1cm4gZG9jZ2VuU2VjdGlvbiAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRvY2dlblNlY3Rpb24pLmxlbmd0aCA+IDA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jZ2VuU2VjdGlvbihjb21wb25lbnQsIHNlY3Rpb24pIHtcbiAgcmV0dXJuIGhhc0RvY2dlbihjb21wb25lbnQpID8gY29tcG9uZW50Ll9fZG9jZ2VuSW5mb1tzZWN0aW9uXSA6IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jZ2VuRGVzY3JpcHRpb24oY29tcG9uZW50KSB7XG4gIHJldHVybiBoYXNEb2NnZW4oY29tcG9uZW50KSAmJiBzdHIoY29tcG9uZW50Ll9fZG9jZ2VuSW5mby5kZXNjcmlwdGlvbik7XG59IiwiZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0VmFsdWUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9kb2NnZW5JbmZvJzsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmpvaW4uanNcIjtcbmltcG9ydCBkb2N0cmluZSBmcm9tICdkb2N0cmluZSc7XG5cbmZ1bmN0aW9uIGNvbnRhaW5zSnNEb2ModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdmFsdWUuaW5jbHVkZXMoJ0AnKTtcbn1cblxuZnVuY3Rpb24gcGFyc2UoY29udGVudCwgdGFncykge1xuICB2YXIgYXN0O1xuXG4gIHRyeSB7XG4gICAgYXN0ID0gZG9jdHJpbmUucGFyc2UoY29udGVudCwge1xuICAgICAgdGFnczogdGFncyxcbiAgICAgIHNsb3BweTogdHJ1ZVxuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIEpTRG9jIHRhZ3MuJyk7XG4gIH1cblxuICByZXR1cm4gYXN0O1xufVxuXG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICB0YWdzOiBbJ3BhcmFtJywgJ2FyZycsICdhcmd1bWVudCcsICdyZXR1cm5zJywgJ2lnbm9yZSddXG59O1xuZXhwb3J0IHZhciBwYXJzZUpzRG9jID0gZnVuY3Rpb24gcGFyc2VKc0RvYyh2YWx1ZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogREVGQVVMVF9PUFRJT05TO1xuXG4gIGlmICghY29udGFpbnNKc0RvYyh2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5jbHVkZXNKc0RvYzogZmFsc2UsXG4gICAgICBpZ25vcmU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBqc0RvY0FzdCA9IHBhcnNlKHZhbHVlLCBvcHRpb25zLnRhZ3MpO1xuICB2YXIgZXh0cmFjdGVkVGFncyA9IGV4dHJhY3RKc0RvY1RhZ3MoanNEb2NBc3QpO1xuXG4gIGlmIChleHRyYWN0ZWRUYWdzLmlnbm9yZSkge1xuICAgIC8vIFRoZXJlIGlzIG5vIHBvaW50IGluIGRvaW5nIG90aGVyIHN0dWZmIHNpbmNlIHRoaXMgcHJvcCB3aWxsIG5vdCBiZSByZW5kZXJlZC5cbiAgICByZXR1cm4ge1xuICAgICAgaW5jbHVkZXNKc0RvYzogdHJ1ZSxcbiAgICAgIGlnbm9yZTogdHJ1ZVxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluY2x1ZGVzSnNEb2M6IHRydWUsXG4gICAgaWdub3JlOiBmYWxzZSxcbiAgICAvLyBBbHdheXMgdXNlIHRoZSBwYXJzZWQgZGVzY3JpcHRpb24gdG8gZW5zdXJlIEpTRG9jIGlzIHJlbW92ZWQgZnJvbSB0aGUgZGVzY3JpcHRpb24uXG4gICAgZGVzY3JpcHRpb246IGpzRG9jQXN0LmRlc2NyaXB0aW9uLFxuICAgIGV4dHJhY3RlZFRhZ3M6IGV4dHJhY3RlZFRhZ3NcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGV4dHJhY3RKc0RvY1RhZ3MoYXN0KSB7XG4gIHZhciBleHRyYWN0ZWRUYWdzID0ge1xuICAgIHBhcmFtczogbnVsbCxcbiAgICByZXR1cm5zOiBudWxsLFxuICAgIGlnbm9yZTogZmFsc2VcbiAgfTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdC50YWdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIHRhZyA9IGFzdC50YWdzW2ldO1xuXG4gICAgaWYgKHRhZy50aXRsZSA9PT0gJ2lnbm9yZScpIHtcbiAgICAgIGV4dHJhY3RlZFRhZ3MuaWdub3JlID0gdHJ1ZTsgLy8gT25jZSB3ZSByZWFjaCBhbiBAaWdub3JlIHRhZywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcGFyc2luZyB0aGUgb3RoZXIgdGFncyBzaW5jZSB3ZSB3aWxsIG5vdCByZW5kZXIgdGhlIHByb3AuXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKHRhZy50aXRsZSkge1xuICAgICAgICAvLyBhcmcgJiBhcmd1bWVudCBhcmUgYWxpYXNlcyBmb3IgcGFyYW0uXG4gICAgICAgIGNhc2UgJ3BhcmFtJzpcbiAgICAgICAgY2FzZSAnYXJnJzpcbiAgICAgICAgY2FzZSAnYXJndW1lbnQnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBwYXJhbVRhZyA9IGV4dHJhY3RQYXJhbSh0YWcpO1xuXG4gICAgICAgICAgICBpZiAocGFyYW1UYWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAoZXh0cmFjdGVkVGFncy5wYXJhbXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RlZFRhZ3MucGFyYW1zID0gW107XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBleHRyYWN0ZWRUYWdzLnBhcmFtcy5wdXNoKHBhcmFtVGFnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ3JldHVybnMnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZXR1cm5zVGFnID0gZXh0cmFjdFJldHVybnModGFnKTtcblxuICAgICAgICAgICAgaWYgKHJldHVybnNUYWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICBleHRyYWN0ZWRUYWdzLnJldHVybnMgPSByZXR1cm5zVGFnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXh0cmFjdGVkVGFncztcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFBhcmFtKHRhZykge1xuICB2YXIgcGFyYW1OYW1lID0gdGFnLm5hbWU7IC8vIFdoZW4gdGhlIEBwYXJhbSBkb2Vzbid0IGhhdmUgYSBuYW1lIGJ1dCBoYXZlIGEgdHlwZSBhbmQgYSBkZXNjcmlwdGlvbiwgXCJudWxsLW51bGxcIiBpcyByZXR1cm5lZC5cblxuICBpZiAocGFyYW1OYW1lICE9IG51bGwgJiYgcGFyYW1OYW1lICE9PSAnbnVsbC1udWxsJykge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0YWcubmFtZSxcbiAgICAgIHR5cGU6IHRhZy50eXBlLFxuICAgICAgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbixcbiAgICAgIGdldFByZXR0eU5hbWU6IGZ1bmN0aW9uIGdldFByZXR0eU5hbWUoKSB7XG4gICAgICAgIGlmIChwYXJhbU5hbWUuaW5jbHVkZXMoJ251bGwnKSkge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIGEgZmV3IGNhc2VzIGluIHdoaWNoIHRoZSByZXR1cm5lZCBwYXJhbSBuYW1lIGNvbnRhaW5zIFwibnVsbFwiLlxuICAgICAgICAgIC8vIC0gQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQtIE9yaWdpbmFsIFN5bnRoZXRpY0V2ZW50XG4gICAgICAgICAgLy8gLSBAcGFyYW0ge1N5bnRoZXRpY0V2ZW50fSBldmVudC5cXG5AcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICAgIHJldHVybiBwYXJhbU5hbWUucmVwbGFjZSgnLW51bGwnLCAnJykucmVwbGFjZSgnLm51bGwnLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFnLm5hbWU7XG4gICAgICB9LFxuICAgICAgZ2V0VHlwZU5hbWU6IGZ1bmN0aW9uIGdldFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnLnR5cGUgIT0gbnVsbCA/IGV4dHJhY3RUeXBlTmFtZSh0YWcudHlwZSkgOiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFJldHVybnModGFnKSB7XG4gIGlmICh0YWcudHlwZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRhZy50eXBlLFxuICAgICAgZGVzY3JpcHRpb246IHRhZy5kZXNjcmlwdGlvbixcbiAgICAgIGdldFR5cGVOYW1lOiBmdW5jdGlvbiBnZXRUeXBlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RUeXBlTmFtZSh0YWcudHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VHlwZU5hbWUodHlwZSkge1xuICBpZiAodHlwZS50eXBlID09PSAnTmFtZUV4cHJlc3Npb24nKSB7XG4gICAgcmV0dXJuIHR5cGUubmFtZTtcbiAgfVxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdSZWNvcmRUeXBlJykge1xuICAgIHZhciByZWNvcmRGaWVsZHMgPSB0eXBlLmZpZWxkcy5tYXAoZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICBpZiAoZmllbGQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICB2YXIgdmFsdWVUeXBlTmFtZSA9IGV4dHJhY3RUeXBlTmFtZShmaWVsZC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChmaWVsZC5rZXksIFwiOiBcIikuY29uY2F0KHZhbHVlVHlwZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmllbGQua2V5O1xuICAgIH0pO1xuICAgIHJldHVybiBcIih7XCIuY29uY2F0KHJlY29yZEZpZWxkcy5qb2luKCcsICcpLCBcIn0pXCIpO1xuICB9XG5cbiAgaWYgKHR5cGUudHlwZSA9PT0gJ1VuaW9uVHlwZScpIHtcbiAgICB2YXIgdW5pb25FbGVtZW50cyA9IHR5cGUuZWxlbWVudHMubWFwKGV4dHJhY3RUeXBlTmFtZSk7XG4gICAgcmV0dXJuIFwiKFwiLmNvbmNhdCh1bmlvbkVsZW1lbnRzLmpvaW4oJ3wnKSwgXCIpXCIpO1xuICB9IC8vIE9ubHkgc3VwcG9ydCB1bnR5cGVkIGFycmF5OiBbXS4gTWlnaHQgYWRkIG1vcmUgc3VwcG9ydCBsYXRlciBpZiByZXF1aXJlZC5cblxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdBcnJheVR5cGUnKSB7XG4gICAgcmV0dXJuICdbXSc7XG4gIH1cblxuICBpZiAodHlwZS50eXBlID09PSAnVHlwZUFwcGxpY2F0aW9uJykge1xuICAgIGlmICh0eXBlLmV4cHJlc3Npb24gIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGUuZXhwcmVzc2lvbi5uYW1lID09PSAnQXJyYXknKSB7XG4gICAgICAgIHZhciBhcnJheVR5cGUgPSBleHRyYWN0VHlwZU5hbWUodHlwZS5hcHBsaWNhdGlvbnNbMF0pO1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoYXJyYXlUeXBlLCBcIltdXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdOdWxsYWJsZVR5cGUnIHx8IHR5cGUudHlwZSA9PT0gJ05vbk51bGxhYmxlVHlwZScgfHwgdHlwZS50eXBlID09PSAnT3B0aW9uYWxUeXBlJykge1xuICAgIHJldHVybiBleHRyYWN0VHlwZU5hbWUodHlwZS5leHByZXNzaW9uKTtcbiAgfVxuXG4gIGlmICh0eXBlLnR5cGUgPT09ICdBbGxMaXRlcmFsJykge1xuICAgIHJldHVybiAnYW55JztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5leHBvcnQgdmFyIE1BWF9UWVBFX1NVTU1BUllfTEVOR1RIID0gOTA7XG5leHBvcnQgdmFyIE1BWF9ERUZBVUxUX1ZBTFVFX1NVTU1BUllfTEVOR1RIID0gNTA7XG5leHBvcnQgZnVuY3Rpb24gaXNUb29Mb25nRm9yVHlwZVN1bW1hcnkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IE1BWF9UWVBFX1NVTU1BUllfTEVOR1RIO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVG9vTG9uZ0ZvckRlZmF1bHRWYWx1ZVN1bW1hcnkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLmxlbmd0aCA+IE1BWF9ERUZBVUxUX1ZBTFVFX1NVTU1BUllfTEVOR1RIO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN1bW1hcnlWYWx1ZShzdW1tYXJ5LCBkZXRhaWwpIHtcbiAgaWYgKHN1bW1hcnkgPT09IGRldGFpbCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdW1tYXJ5OiBzdW1tYXJ5XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeTogc3VtbWFyeSxcbiAgICBkZXRhaWw6IGRldGFpbFxuICB9O1xufVxuZXhwb3J0IHZhciBub3JtYWxpemVOZXdsaW5lcyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZU5ld2xpbmVzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcXFxyXFxcXG4vZywgJ1xcXFxuJyk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVN1bW1hcnlWYWx1ZSwgaXNUb29Mb25nRm9yVHlwZVN1bW1hcnkgfSBmcm9tICcuLi8uLi91dGlscyc7XG52YXIgRmxvd1R5cGVzVHlwZTtcblxuKGZ1bmN0aW9uIChGbG93VHlwZXNUeXBlKSB7XG4gIEZsb3dUeXBlc1R5cGVbXCJVTklPTlwiXSA9IFwidW5pb25cIjtcbiAgRmxvd1R5cGVzVHlwZVtcIlNJR05BVFVSRVwiXSA9IFwic2lnbmF0dXJlXCI7XG59KShGbG93VHlwZXNUeXBlIHx8IChGbG93VHlwZXNUeXBlID0ge30pKTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVVbmlvbkVsZW1lbnQoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcbiAgICAgIGVsZW1lbnRzID0gX3JlZi5lbGVtZW50cyxcbiAgICAgIHJhdyA9IF9yZWYucmF3O1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRzICE9IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudHMubWFwKGdlbmVyYXRlVW5pb25FbGVtZW50KS5qb2luKCcgfCAnKTtcbiAgfVxuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIHJldHVybiByYXc7XG4gIH1cblxuICByZXR1cm4gbmFtZTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVVbmlvbihfcmVmMikge1xuICB2YXIgbmFtZSA9IF9yZWYyLm5hbWUsXG4gICAgICByYXcgPSBfcmVmMi5yYXcsXG4gICAgICBlbGVtZW50cyA9IF9yZWYyLmVsZW1lbnRzO1xuXG4gIGlmIChlbGVtZW50cyAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVN1bW1hcnlWYWx1ZShlbGVtZW50cy5tYXAoZ2VuZXJhdGVVbmlvbkVsZW1lbnQpLmpvaW4oJyB8ICcpKTtcbiAgfVxuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIC8vIEZsb3cgVW5pb25zIGNhbiBiZSBkZWZpbmVkIHdpdGggb3Igd2l0aG91dCBhIGxlYWRpbmcgYHxgIGNoYXJhY3Rlciwgc28gdHJ5IHRvIHJlbW92ZSBpdC5cbiAgICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKHJhdy5yZXBsYWNlKC9eXFx8XFxzKi8sICcnKSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKG5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUZ1bmNTaWduYXR1cmUoX3JlZjMpIHtcbiAgdmFyIHR5cGUgPSBfcmVmMy50eXBlLFxuICAgICAgcmF3ID0gX3JlZjMucmF3O1xuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIHJldHVybiBjcmVhdGVTdW1tYXJ5VmFsdWUocmF3KTtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVTdW1tYXJ5VmFsdWUodHlwZSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlT2JqZWN0U2lnbmF0dXJlKF9yZWY0KSB7XG4gIHZhciB0eXBlID0gX3JlZjQudHlwZSxcbiAgICAgIHJhdyA9IF9yZWY0LnJhdztcblxuICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICByZXR1cm4gIWlzVG9vTG9uZ0ZvclR5cGVTdW1tYXJ5KHJhdykgPyBjcmVhdGVTdW1tYXJ5VmFsdWUocmF3KSA6IGNyZWF0ZVN1bW1hcnlWYWx1ZSh0eXBlLCByYXcpO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVN1bW1hcnlWYWx1ZSh0eXBlKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTaWduYXR1cmUoZmxvd1R5cGUpIHtcbiAgdmFyIHR5cGUgPSBmbG93VHlwZS50eXBlO1xuICByZXR1cm4gdHlwZSA9PT0gJ29iamVjdCcgPyBnZW5lcmF0ZU9iamVjdFNpZ25hdHVyZShmbG93VHlwZSkgOiBnZW5lcmF0ZUZ1bmNTaWduYXR1cmUoZmxvd1R5cGUpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZURlZmF1bHQoX3JlZjUpIHtcbiAgdmFyIG5hbWUgPSBfcmVmNS5uYW1lLFxuICAgICAgcmF3ID0gX3JlZjUucmF3O1xuXG4gIGlmIChyYXcgIT0gbnVsbCkge1xuICAgIHJldHVybiAhaXNUb29Mb25nRm9yVHlwZVN1bW1hcnkocmF3KSA/IGNyZWF0ZVN1bW1hcnlWYWx1ZShyYXcpIDogY3JlYXRlU3VtbWFyeVZhbHVlKG5hbWUsIHJhdyk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHlwZSh0eXBlKSB7XG4gIC8vIEEgdHlwZSBjb3VsZCBiZSBudWxsIGlmIGEgZGVmYXVsdFByb3AgaGFzIGJlZW4gcHJvdmlkZWQgd2l0aG91dCBhIHR5cGUgZGVmaW5pdGlvbi5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlLm5hbWUpIHtcbiAgICBjYXNlIEZsb3dUeXBlc1R5cGUuVU5JT046XG4gICAgICByZXR1cm4gZ2VuZXJhdGVVbmlvbih0eXBlKTtcblxuICAgIGNhc2UgRmxvd1R5cGVzVHlwZS5TSUdOQVRVUkU6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVTaWduYXR1cmUodHlwZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGdlbmVyYXRlRGVmYXVsdCh0eXBlKTtcbiAgfVxufSIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdW1tYXJ5VmFsdWUsIGlzVG9vTG9uZ0ZvckRlZmF1bHRWYWx1ZVN1bW1hcnkgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBpc0RlZmF1bHRWYWx1ZUJsYWNrbGlzdGVkIH0gZnJvbSAnLi4vdXRpbHMvZGVmYXVsdFZhbHVlJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlLCB0eXBlKSB7XG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZS52YWx1ZTtcblxuICAgIGlmICghaXNEZWZhdWx0VmFsdWVCbGFja2xpc3RlZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAhaXNUb29Mb25nRm9yRGVmYXVsdFZhbHVlU3VtbWFyeSh2YWx1ZSkgPyBjcmVhdGVTdW1tYXJ5VmFsdWUodmFsdWUpIDogY3JlYXRlU3VtbWFyeVZhbHVlKHR5cGUubmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCB7IGNyZWF0ZVR5cGUgfSBmcm9tICcuL2NyZWF0ZVR5cGUnO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdFZhbHVlIH0gZnJvbSAnLi9jcmVhdGVEZWZhdWx0VmFsdWUnO1xuZXhwb3J0IHZhciBjcmVhdGVGbG93UHJvcERlZiA9IGZ1bmN0aW9uIGNyZWF0ZUZsb3dQcm9wRGVmKHByb3BOYW1lLCBkb2NnZW5JbmZvKSB7XG4gIHZhciBmbG93VHlwZSA9IGRvY2dlbkluZm8uZmxvd1R5cGUsXG4gICAgICBkZXNjcmlwdGlvbiA9IGRvY2dlbkluZm8uZGVzY3JpcHRpb24sXG4gICAgICByZXF1aXJlZCA9IGRvY2dlbkluZm8ucmVxdWlyZWQsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBkb2NnZW5JbmZvLmRlZmF1bHRWYWx1ZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBwcm9wTmFtZSxcbiAgICB0eXBlOiBjcmVhdGVUeXBlKGZsb3dUeXBlKSxcbiAgICByZXF1aXJlZDogcmVxdWlyZWQsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgIGRlZmF1bHRWYWx1ZTogY3JlYXRlRGVmYXVsdFZhbHVlKGRlZmF1bHRWYWx1ZSwgZmxvd1R5cGUpXG4gIH07XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlU3VtbWFyeVZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGUoX3JlZikge1xuICB2YXIgdHNUeXBlID0gX3JlZi50c1R5cGUsXG4gICAgICByZXF1aXJlZCA9IF9yZWYucmVxdWlyZWQ7XG5cbiAgLy8gQSB0eXBlIGNvdWxkIGJlIG51bGwgaWYgYSBkZWZhdWx0UHJvcCBoYXMgYmVlbiBwcm92aWRlZCB3aXRob3V0IGEgdHlwZSBkZWZpbml0aW9uLlxuICBpZiAodHNUeXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghcmVxdWlyZWQpIHtcbiAgICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKHRzVHlwZS5uYW1lLnJlcGxhY2UoJyB8IHVuZGVmaW5lZCcsICcnKSk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKHRzVHlwZS5uYW1lKTtcbn0iLCJpbXBvcnQgeyBjcmVhdGVTdW1tYXJ5VmFsdWUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBpc0RlZmF1bHRWYWx1ZUJsYWNrbGlzdGVkIH0gZnJvbSAnLi4vdXRpbHMvZGVmYXVsdFZhbHVlJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0VmFsdWUoX3JlZikge1xuICB2YXIgZGVmYXVsdFZhbHVlID0gX3JlZi5kZWZhdWx0VmFsdWU7XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdmFyIHZhbHVlID0gZGVmYXVsdFZhbHVlLnZhbHVlO1xuXG4gICAgaWYgKCFpc0RlZmF1bHRWYWx1ZUJsYWNrbGlzdGVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVN1bW1hcnlWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlVHlwZSB9IGZyb20gJy4vY3JlYXRlVHlwZSc7XG5pbXBvcnQgeyBjcmVhdGVEZWZhdWx0VmFsdWUgfSBmcm9tICcuL2NyZWF0ZURlZmF1bHRWYWx1ZSc7XG5leHBvcnQgdmFyIGNyZWF0ZVRzUHJvcERlZiA9IGZ1bmN0aW9uIGNyZWF0ZVRzUHJvcERlZihwcm9wTmFtZSwgZG9jZ2VuSW5mbykge1xuICB2YXIgZGVzY3JpcHRpb24gPSBkb2NnZW5JbmZvLmRlc2NyaXB0aW9uLFxuICAgICAgcmVxdWlyZWQgPSBkb2NnZW5JbmZvLnJlcXVpcmVkO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IHByb3BOYW1lLFxuICAgIHR5cGU6IGNyZWF0ZVR5cGUoZG9jZ2VuSW5mbyksXG4gICAgcmVxdWlyZWQ6IHJlcXVpcmVkLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICBkZWZhdWx0VmFsdWU6IGNyZWF0ZURlZmF1bHRWYWx1ZShkb2NnZW5JbmZvKVxuICB9O1xufTsiLCJpbXBvcnQgeyBjb252ZXJ0IGFzIHRzQ29udmVydCB9IGZyb20gJy4vdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBjb252ZXJ0IGFzIGZsb3dDb252ZXJ0IH0gZnJvbSAnLi9mbG93JztcbmltcG9ydCB7IGNvbnZlcnQgYXMgcHJvcFR5cGVzQ29udmVydCB9IGZyb20gJy4vcHJvcHR5cGVzJztcbmV4cG9ydCB2YXIgY29udmVydCA9IGZ1bmN0aW9uIGNvbnZlcnQoZG9jZ2VuSW5mbykge1xuICB2YXIgdHlwZSA9IGRvY2dlbkluZm8udHlwZSxcbiAgICAgIHRzVHlwZSA9IGRvY2dlbkluZm8udHNUeXBlLFxuICAgICAgZmxvd1R5cGUgPSBkb2NnZW5JbmZvLmZsb3dUeXBlO1xuICBpZiAodHlwZSAhPSBudWxsKSByZXR1cm4gcHJvcFR5cGVzQ29udmVydCh0eXBlKTtcbiAgaWYgKHRzVHlwZSAhPSBudWxsKSByZXR1cm4gdHNDb252ZXJ0KHRzVHlwZSk7XG4gIGlmIChmbG93VHlwZSAhPSBudWxsKSByZXR1cm4gZmxvd0NvbnZlcnQoZmxvd1R5cGUpO1xuICByZXR1cm4gbnVsbDtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanNcIjtcbmltcG9ydCB7IFR5cGVTeXN0ZW0gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZVN1bW1hcnlWYWx1ZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZUZsb3dQcm9wRGVmIH0gZnJvbSAnLi9mbG93L2NyZWF0ZVByb3BEZWYnO1xuaW1wb3J0IHsgaXNEZWZhdWx0VmFsdWVCbGFja2xpc3RlZCB9IGZyb20gJy4vdXRpbHMvZGVmYXVsdFZhbHVlJztcbmltcG9ydCB7IGNyZWF0ZVRzUHJvcERlZiB9IGZyb20gJy4vdHlwZVNjcmlwdC9jcmVhdGVQcm9wRGVmJztcbmltcG9ydCB7IGNvbnZlcnQgfSBmcm9tICcuLi9jb252ZXJ0JztcblxuZnVuY3Rpb24gY3JlYXRlVHlwZSh0eXBlKSB7XG4gIC8vIEEgdHlwZSBjb3VsZCBiZSBudWxsIGlmIGEgZGVmYXVsdFByb3AgaGFzIGJlZW4gcHJvdmlkZWQgd2l0aG91dCBhIHR5cGUgZGVmaW5pdGlvbi5cbiAgcmV0dXJuIHR5cGUgIT0gbnVsbCA/IGNyZWF0ZVN1bW1hcnlWYWx1ZSh0eXBlLm5hbWUpIDogbnVsbDtcbn0gLy8gQSBoZXVyaXN0aWMgdG8gdGVsbCBpZiBhIGRlZmF1bHRWYWx1ZSBjb21lcyBmcm9tIFJEVFxuXG5cbmZ1bmN0aW9uIGlzUmVhY3REb2NnZW5UeXBlc2NyaXB0KGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgY29tcHV0ZWQgPSBkZWZhdWx0VmFsdWUuY29tcHV0ZWQsXG4gICAgICBmdW5jID0gZGVmYXVsdFZhbHVlLmZ1bmM7XG4gIHJldHVybiB0eXBlb2YgY29tcHV0ZWQgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBmdW5jID09PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmdWYWx1ZWQodHlwZSkge1xuICBpZiAoIXR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZS5uYW1lID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGUubmFtZSA9PT0gJ2VudW0nKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodHlwZS52YWx1ZSkgJiYgdHlwZS52YWx1ZS5ldmVyeShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIHR2ID0gX3JlZi52YWx1ZTtcbiAgICAgIHJldHVybiB0eXBlb2YgdHYgPT09ICdzdHJpbmcnICYmIHR2WzBdID09PSAnXCInICYmIHR2W3R2Lmxlbmd0aCAtIDFdID09PSAnXCInO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlLCB0eXBlKSB7XG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZS52YWx1ZTtcblxuICAgIGlmICghaXNEZWZhdWx0VmFsdWVCbGFja2xpc3RlZCh2YWx1ZSkpIHtcbiAgICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIGluIGByZWFjdC1kb2NnZW4tdHlwZXNjcmlwdC1sb2FkZXJgLCB3aGljaCByZXR1cm5zICdzdHJpbmcnIGZvciBhIHN0cmluZ1xuICAgICAgLy8gZGVmYXVsdCwgaW5zdGVhZCBvZiBcIidzdHJpbmcnXCIgLS0gd2hpY2ggaXMgaW5jb3JyZWN0XG4gICAgICBpZiAoaXNSZWFjdERvY2dlblR5cGVzY3JpcHQoZGVmYXVsdFZhbHVlKSAmJiBpc1N0cmluZ1ZhbHVlZCh0eXBlKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlU3VtbWFyeVZhbHVlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjcmVhdGVTdW1tYXJ5VmFsdWUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCYXNpY1Byb3BEZWYobmFtZSwgdHlwZSwgZG9jZ2VuSW5mbykge1xuICB2YXIgZGVzY3JpcHRpb24gPSBkb2NnZW5JbmZvLmRlc2NyaXB0aW9uLFxuICAgICAgcmVxdWlyZWQgPSBkb2NnZW5JbmZvLnJlcXVpcmVkLFxuICAgICAgZGVmYXVsdFZhbHVlID0gZG9jZ2VuSW5mby5kZWZhdWx0VmFsdWU7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICB0eXBlOiBjcmVhdGVUeXBlKHR5cGUpLFxuICAgIHJlcXVpcmVkOiByZXF1aXJlZCxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgZGVmYXVsdFZhbHVlOiBjcmVhdGVEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlLCB0eXBlKVxuICB9O1xufVxuXG5mdW5jdGlvbiBhcHBseUpzRG9jUmVzdWx0KHByb3BEZWYsIGpzRG9jUGFyc2luZ1Jlc3VsdCkge1xuICBpZiAoanNEb2NQYXJzaW5nUmVzdWx0LmluY2x1ZGVzSnNEb2MpIHtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBqc0RvY1BhcnNpbmdSZXN1bHQuZGVzY3JpcHRpb24sXG4gICAgICAgIGV4dHJhY3RlZFRhZ3MgPSBqc0RvY1BhcnNpbmdSZXN1bHQuZXh0cmFjdGVkVGFncztcblxuICAgIGlmIChkZXNjcmlwdGlvbiAhPSBudWxsKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHByb3BEZWYuZGVzY3JpcHRpb24gPSBqc0RvY1BhcnNpbmdSZXN1bHQuZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgdmFyIGhhc1BhcmFtcyA9IGV4dHJhY3RlZFRhZ3MucGFyYW1zICE9IG51bGw7XG4gICAgdmFyIGhhc1JldHVybnMgPSBleHRyYWN0ZWRUYWdzLnJldHVybnMgIT0gbnVsbCAmJiBleHRyYWN0ZWRUYWdzLnJldHVybnMudHlwZSAhPSBudWxsO1xuXG4gICAgaWYgKGhhc1BhcmFtcyB8fCBoYXNSZXR1cm5zKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHByb3BEZWYuanNEb2NUYWdzID0ge1xuICAgICAgICBwYXJhbXM6IGhhc1BhcmFtcyAmJiBleHRyYWN0ZWRUYWdzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogeC5nZXRQcmV0dHlOYW1lKCksXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogeC5kZXNjcmlwdGlvblxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICByZXR1cm5zOiBoYXNSZXR1cm5zICYmIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZXh0cmFjdGVkVGFncy5yZXR1cm5zLmRlc2NyaXB0aW9uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb3BEZWY7XG59XG5cbmV4cG9ydCB2YXIgamF2YVNjcmlwdEZhY3RvcnkgPSBmdW5jdGlvbiBqYXZhU2NyaXB0RmFjdG9yeShwcm9wTmFtZSwgZG9jZ2VuSW5mbywganNEb2NQYXJzaW5nUmVzdWx0KSB7XG4gIHZhciBwcm9wRGVmID0gY3JlYXRlQmFzaWNQcm9wRGVmKHByb3BOYW1lLCBkb2NnZW5JbmZvLnR5cGUsIGRvY2dlbkluZm8pO1xuICBwcm9wRGVmLnNiVHlwZSA9IGNvbnZlcnQoZG9jZ2VuSW5mbyk7XG4gIHJldHVybiBhcHBseUpzRG9jUmVzdWx0KHByb3BEZWYsIGpzRG9jUGFyc2luZ1Jlc3VsdCk7XG59O1xuZXhwb3J0IHZhciB0c0ZhY3RvcnkgPSBmdW5jdGlvbiB0c0ZhY3RvcnkocHJvcE5hbWUsIGRvY2dlbkluZm8sIGpzRG9jUGFyc2luZ1Jlc3VsdCkge1xuICB2YXIgcHJvcERlZiA9IGNyZWF0ZVRzUHJvcERlZihwcm9wTmFtZSwgZG9jZ2VuSW5mbyk7XG4gIHByb3BEZWYuc2JUeXBlID0gY29udmVydChkb2NnZW5JbmZvKTtcbiAgcmV0dXJuIGFwcGx5SnNEb2NSZXN1bHQocHJvcERlZiwganNEb2NQYXJzaW5nUmVzdWx0KTtcbn07XG5leHBvcnQgdmFyIGZsb3dGYWN0b3J5ID0gZnVuY3Rpb24gZmxvd0ZhY3RvcnkocHJvcE5hbWUsIGRvY2dlbkluZm8sIGpzRG9jUGFyc2luZ1Jlc3VsdCkge1xuICB2YXIgcHJvcERlZiA9IGNyZWF0ZUZsb3dQcm9wRGVmKHByb3BOYW1lLCBkb2NnZW5JbmZvKTtcbiAgcHJvcERlZi5zYlR5cGUgPSBjb252ZXJ0KGRvY2dlbkluZm8pO1xuICByZXR1cm4gYXBwbHlKc0RvY1Jlc3VsdChwcm9wRGVmLCBqc0RvY1BhcnNpbmdSZXN1bHQpO1xufTtcbmV4cG9ydCB2YXIgdW5rbm93bkZhY3RvcnkgPSBmdW5jdGlvbiB1bmtub3duRmFjdG9yeShwcm9wTmFtZSwgZG9jZ2VuSW5mbywganNEb2NQYXJzaW5nUmVzdWx0KSB7XG4gIHZhciBwcm9wRGVmID0gY3JlYXRlQmFzaWNQcm9wRGVmKHByb3BOYW1lLCB7XG4gICAgbmFtZTogJ3Vua25vd24nXG4gIH0sIGRvY2dlbkluZm8pO1xuICByZXR1cm4gYXBwbHlKc0RvY1Jlc3VsdChwcm9wRGVmLCBqc0RvY1BhcnNpbmdSZXN1bHQpO1xufTtcbmV4cG9ydCB2YXIgZ2V0UHJvcERlZkZhY3RvcnkgPSBmdW5jdGlvbiBnZXRQcm9wRGVmRmFjdG9yeSh0eXBlU3lzdGVtKSB7XG4gIHN3aXRjaCAodHlwZVN5c3RlbSkge1xuICAgIGNhc2UgVHlwZVN5c3RlbS5KQVZBU0NSSVBUOlxuICAgICAgcmV0dXJuIGphdmFTY3JpcHRGYWN0b3J5O1xuXG4gICAgY2FzZSBUeXBlU3lzdGVtLlRZUEVTQ1JJUFQ6XG4gICAgICByZXR1cm4gdHNGYWN0b3J5O1xuXG4gICAgY2FzZSBUeXBlU3lzdGVtLkZMT1c6XG4gICAgICByZXR1cm4gZmxvd0ZhY3Rvcnk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVua25vd25GYWN0b3J5O1xuICB9XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUpzRG9jIH0gZnJvbSAnLi4vanNkb2NQYXJzZXInO1xuaW1wb3J0IHsgVHlwZVN5c3RlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RG9jZ2VuU2VjdGlvbiwgaXNWYWxpZERvY2dlblNlY3Rpb24sIGdldERvY2dlbkRlc2NyaXB0aW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBnZXRQcm9wRGVmRmFjdG9yeSB9IGZyb20gJy4vY3JlYXRlUHJvcERlZic7XG5cbnZhciBnZXRUeXBlU3lzdGVtID0gZnVuY3Rpb24gZ2V0VHlwZVN5c3RlbShkb2NnZW5JbmZvKSB7XG4gIGlmIChkb2NnZW5JbmZvLnR5cGUgIT0gbnVsbCkge1xuICAgIHJldHVybiBUeXBlU3lzdGVtLkpBVkFTQ1JJUFQ7XG4gIH1cblxuICBpZiAoZG9jZ2VuSW5mby5mbG93VHlwZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFR5cGVTeXN0ZW0uRkxPVztcbiAgfVxuXG4gIGlmIChkb2NnZW5JbmZvLnRzVHlwZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFR5cGVTeXN0ZW0uVFlQRVNDUklQVDtcbiAgfVxuXG4gIHJldHVybiBUeXBlU3lzdGVtLlVOS05PV047XG59O1xuXG5leHBvcnQgdmFyIGV4dHJhY3RDb21wb25lbnRTZWN0aW9uQXJyYXkgPSBmdW5jdGlvbiBleHRyYWN0Q29tcG9uZW50U2VjdGlvbkFycmF5KGRvY2dlblNlY3Rpb24pIHtcbiAgdmFyIHR5cGVTeXN0ZW0gPSBnZXRUeXBlU3lzdGVtKGRvY2dlblNlY3Rpb25bMF0pO1xuICB2YXIgY3JlYXRlUHJvcERlZiA9IGdldFByb3BEZWZGYWN0b3J5KHR5cGVTeXN0ZW0pO1xuICByZXR1cm4gZG9jZ2VuU2VjdGlvbi5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgX2l0ZW0kdHlwZTtcblxuICAgIHZhciBzYW5pdGl6ZWRJdGVtID0gaXRlbTtcblxuICAgIGlmICgoX2l0ZW0kdHlwZSA9IGl0ZW0udHlwZSkgIT09IG51bGwgJiYgX2l0ZW0kdHlwZSAhPT0gdm9pZCAwICYmIF9pdGVtJHR5cGUuZWxlbWVudHMpIHtcbiAgICAgIHNhbml0aXplZEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0udHlwZSwge1xuICAgICAgICAgIHZhbHVlOiBpdGVtLnR5cGUuZWxlbWVudHNcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBleHRyYWN0UHJvcChzYW5pdGl6ZWRJdGVtLm5hbWUsIHNhbml0aXplZEl0ZW0sIHR5cGVTeXN0ZW0sIGNyZWF0ZVByb3BEZWYpO1xuICB9KTtcbn07XG5leHBvcnQgdmFyIGV4dHJhY3RDb21wb25lbnRTZWN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gZXh0cmFjdENvbXBvbmVudFNlY3Rpb25PYmplY3QoZG9jZ2VuU2VjdGlvbikge1xuICB2YXIgZG9jZ2VuUHJvcHNLZXlzID0gT2JqZWN0LmtleXMoZG9jZ2VuU2VjdGlvbik7XG4gIHZhciB0eXBlU3lzdGVtID0gZ2V0VHlwZVN5c3RlbShkb2NnZW5TZWN0aW9uW2RvY2dlblByb3BzS2V5c1swXV0pO1xuICB2YXIgY3JlYXRlUHJvcERlZiA9IGdldFByb3BEZWZGYWN0b3J5KHR5cGVTeXN0ZW0pO1xuICByZXR1cm4gZG9jZ2VuUHJvcHNLZXlzLm1hcChmdW5jdGlvbiAocHJvcE5hbWUpIHtcbiAgICB2YXIgZG9jZ2VuSW5mbyA9IGRvY2dlblNlY3Rpb25bcHJvcE5hbWVdO1xuICAgIHJldHVybiBkb2NnZW5JbmZvICE9IG51bGwgPyBleHRyYWN0UHJvcChwcm9wTmFtZSwgZG9jZ2VuSW5mbywgdHlwZVN5c3RlbSwgY3JlYXRlUHJvcERlZikgOiBudWxsO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG59O1xuZXhwb3J0IHZhciBleHRyYWN0Q29tcG9uZW50UHJvcHMgPSBmdW5jdGlvbiBleHRyYWN0Q29tcG9uZW50UHJvcHMoY29tcG9uZW50LCBzZWN0aW9uKSB7XG4gIHZhciBkb2NnZW5TZWN0aW9uID0gZ2V0RG9jZ2VuU2VjdGlvbihjb21wb25lbnQsIHNlY3Rpb24pO1xuXG4gIGlmICghaXNWYWxpZERvY2dlblNlY3Rpb24oZG9jZ2VuU2VjdGlvbikpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gdnVlLWRvY2dlbi1hcGkgaGFzIGRpdmVyZ2VkIGZyb20gcmVhY3QtZG9jZ2VuIGFuZCByZXR1cm5zIGFuIGFycmF5XG5cblxuICByZXR1cm4gQXJyYXkuaXNBcnJheShkb2NnZW5TZWN0aW9uKSA/IGV4dHJhY3RDb21wb25lbnRTZWN0aW9uQXJyYXkoZG9jZ2VuU2VjdGlvbikgOiBleHRyYWN0Q29tcG9uZW50U2VjdGlvbk9iamVjdChkb2NnZW5TZWN0aW9uKTtcbn07XG5cbmZ1bmN0aW9uIGV4dHJhY3RQcm9wKHByb3BOYW1lLCBkb2NnZW5JbmZvLCB0eXBlU3lzdGVtLCBjcmVhdGVQcm9wRGVmKSB7XG4gIHZhciBqc0RvY1BhcnNpbmdSZXN1bHQgPSBwYXJzZUpzRG9jKGRvY2dlbkluZm8uZGVzY3JpcHRpb24pO1xuICB2YXIgaXNJZ25vcmVkID0ganNEb2NQYXJzaW5nUmVzdWx0LmluY2x1ZGVzSnNEb2MgJiYganNEb2NQYXJzaW5nUmVzdWx0Lmlnbm9yZTtcblxuICBpZiAoIWlzSWdub3JlZCkge1xuICAgIHZhciBwcm9wRGVmID0gY3JlYXRlUHJvcERlZihwcm9wTmFtZSwgZG9jZ2VuSW5mbywganNEb2NQYXJzaW5nUmVzdWx0KTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcERlZjogcHJvcERlZixcbiAgICAgIGpzRG9jVGFnczoganNEb2NQYXJzaW5nUmVzdWx0LmV4dHJhY3RlZFRhZ3MsXG4gICAgICBkb2NnZW5JbmZvOiBkb2NnZW5JbmZvLFxuICAgICAgdHlwZVN5c3RlbTogdHlwZVN5c3RlbVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RDb21wb25lbnREZXNjcmlwdGlvbihjb21wb25lbnQpIHtcbiAgcmV0dXJuIGNvbXBvbmVudCAhPSBudWxsICYmIGdldERvY2dlbkRlc2NyaXB0aW9uKGNvbXBvbmVudCk7XG59IiwiZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZXh0cmFjdERvY2dlblByb3BzJzsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRGVzY3JpcHRpb24gfSBmcm9tICdAc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbmltcG9ydCB7IENVUlJFTlRfU0VMRUNUSU9OIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzdHIgfSBmcm9tICcuLi9saWIvZG9jZ2VuJztcbmV4cG9ydCB2YXIgRGVzY3JpcHRpb25UeXBlO1xuXG4oZnVuY3Rpb24gKERlc2NyaXB0aW9uVHlwZSkge1xuICBEZXNjcmlwdGlvblR5cGVbXCJJTkZPXCJdID0gXCJpbmZvXCI7XG4gIERlc2NyaXB0aW9uVHlwZVtcIk5PVEVTXCJdID0gXCJub3Rlc1wiO1xuICBEZXNjcmlwdGlvblR5cGVbXCJET0NHRU5cIl0gPSBcImRvY2dlblwiO1xuICBEZXNjcmlwdGlvblR5cGVbXCJMRUdBQ1lfNV8yXCJdID0gXCJsZWdhY3ktNS4yXCI7XG4gIERlc2NyaXB0aW9uVHlwZVtcIkFVVE9cIl0gPSBcImF1dG9cIjtcbn0pKERlc2NyaXB0aW9uVHlwZSB8fCAoRGVzY3JpcHRpb25UeXBlID0ge30pKTtcblxudmFyIGdldE5vdGVzID0gZnVuY3Rpb24gZ2V0Tm90ZXMobm90ZXMpIHtcbiAgcmV0dXJuIG5vdGVzICYmICh0eXBlb2Ygbm90ZXMgPT09ICdzdHJpbmcnID8gbm90ZXMgOiBzdHIobm90ZXMubWFya2Rvd24pIHx8IHN0cihub3Rlcy50ZXh0KSk7XG59O1xuXG52YXIgZ2V0SW5mbyA9IGZ1bmN0aW9uIGdldEluZm8oaW5mbykge1xuICByZXR1cm4gaW5mbyAmJiAodHlwZW9mIGluZm8gPT09ICdzdHJpbmcnID8gaW5mbyA6IHN0cihpbmZvLnRleHQpKTtcbn07XG5cbnZhciBub0Rlc2NyaXB0aW9uID0gZnVuY3Rpb24gbm9EZXNjcmlwdGlvbihjb21wb25lbnQpIHtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgdmFyIGdldERlc2NyaXB0aW9uUHJvcHMgPSBmdW5jdGlvbiBnZXREZXNjcmlwdGlvblByb3BzKF9yZWYsIF9yZWYyKSB7XG4gIHZhciBvZiA9IF9yZWYub2YsXG4gICAgICB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgbWFya2Rvd24gPSBfcmVmLm1hcmtkb3duLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgcGFyYW1ldGVycyA9IF9yZWYyLnBhcmFtZXRlcnM7XG5cbiAgaWYgKGNoaWxkcmVuIHx8IG1hcmtkb3duKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcmtkb3duOiBjaGlsZHJlbiB8fCBtYXJrZG93blxuICAgIH07XG4gIH1cblxuICB2YXIgY29tcG9uZW50ID0gcGFyYW1ldGVycy5jb21wb25lbnQsXG4gICAgICBub3RlcyA9IHBhcmFtZXRlcnMubm90ZXMsXG4gICAgICBpbmZvID0gcGFyYW1ldGVycy5pbmZvLFxuICAgICAgZG9jcyA9IHBhcmFtZXRlcnMuZG9jcztcblxuICB2YXIgX3JlZjMgPSBkb2NzIHx8IHt9LFxuICAgICAgX3JlZjMkZXh0cmFjdENvbXBvbmVuID0gX3JlZjMuZXh0cmFjdENvbXBvbmVudERlc2NyaXB0aW9uLFxuICAgICAgZXh0cmFjdENvbXBvbmVudERlc2NyaXB0aW9uID0gX3JlZjMkZXh0cmFjdENvbXBvbmVuID09PSB2b2lkIDAgPyBub0Rlc2NyaXB0aW9uIDogX3JlZjMkZXh0cmFjdENvbXBvbmVuLFxuICAgICAgZGVzY3JpcHRpb24gPSBfcmVmMy5kZXNjcmlwdGlvbjtcblxuICB2YXIgdGFyZ2V0ID0gb2YgPT09IENVUlJFTlRfU0VMRUNUSU9OID8gY29tcG9uZW50IDogb2Y7IC8vIG92ZXJyaWRlIGNvbXBvbmVudCBkZXNjcmlwdGlvblxuXG4gIHZhciBjb21wb25lbnREZXNjcmlwdGlvblBhcmFtZXRlciA9IGRlc2NyaXB0aW9uID09PSBudWxsIHx8IGRlc2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZXNjcmlwdGlvbi5jb21wb25lbnQ7XG5cbiAgaWYgKGNvbXBvbmVudERlc2NyaXB0aW9uUGFyYW1ldGVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcmtkb3duOiBjb21wb25lbnREZXNjcmlwdGlvblBhcmFtZXRlclxuICAgIH07XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIERlc2NyaXB0aW9uVHlwZS5JTkZPOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFya2Rvd246IGdldEluZm8oaW5mbylcbiAgICAgIH07XG5cbiAgICBjYXNlIERlc2NyaXB0aW9uVHlwZS5OT1RFUzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcmtkb3duOiBnZXROb3Rlcyhub3RlcylcbiAgICAgIH07XG4gICAgLy8gRklYTUU6IHJlbW92ZSBpbiA2LjBcblxuICAgIGNhc2UgRGVzY3JpcHRpb25UeXBlLkxFR0FDWV81XzI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXJrZG93bjogXCJcXG5cIi5jb25jYXQoZ2V0Tm90ZXMobm90ZXMpIHx8IGdldEluZm8oaW5mbykgfHwgJycsIFwiXFxuXFxuXCIpLmNvbmNhdChleHRyYWN0Q29tcG9uZW50RGVzY3JpcHRpb24odGFyZ2V0KSB8fCAnJywgXCJcXG5cIikudHJpbSgpXG4gICAgICB9O1xuXG4gICAgY2FzZSBEZXNjcmlwdGlvblR5cGUuRE9DR0VOOlxuICAgIGNhc2UgRGVzY3JpcHRpb25UeXBlLkFVVE86XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hcmtkb3duOiBleHRyYWN0Q29tcG9uZW50RGVzY3JpcHRpb24odGFyZ2V0LCBwYXJhbWV0ZXJzKVxuICAgICAgfTtcbiAgfVxufTtcblxudmFyIERlc2NyaXB0aW9uQ29udGFpbmVyID0gZnVuY3Rpb24gRGVzY3JpcHRpb25Db250YWluZXIocHJvcHMpIHtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KTtcblxuICB2YXIgX2dldERlc2NyaXB0aW9uUHJvcHMgPSBnZXREZXNjcmlwdGlvblByb3BzKHByb3BzLCBjb250ZXh0KSxcbiAgICAgIG1hcmtkb3duID0gX2dldERlc2NyaXB0aW9uUHJvcHMubWFya2Rvd247XG5cbiAgcmV0dXJuIG1hcmtkb3duID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGVzY3JpcHRpb24sIHtcbiAgICBtYXJrZG93bjogbWFya2Rvd25cbiAgfSkgOiBudWxsO1xufTsgLy8gc2luY2Ugd2UgYXJlIGluIHRoZSBkb2NzIGJsb2NrcywgYXNzdW1lIGRlZmF1bHQgZGVzY3JpcHRpb24gaWYgZm9yIHByaW1hcnkgY29tcG9uZW50IHN0b3J5XG5cblxuRGVzY3JpcHRpb25Db250YWluZXIuZGVmYXVsdFByb3BzID0ge1xuICBvZjogJy4nXG59O1xuZXhwb3J0IHsgRGVzY3JpcHRpb25Db250YWluZXIgYXMgRGVzY3JpcHRpb24gfTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qc1wiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUaXRsZSBhcyBQdXJlVGl0bGUgfSBmcm9tICdAc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbnZhciBTVE9SWV9LSU5EX1BBVEhfU0VQQVJBVE9SID0gL1xccypcXC9cXHMqLztcbmV4cG9ydCB2YXIgZXh0cmFjdFRpdGxlID0gZnVuY3Rpb24gZXh0cmFjdFRpdGxlKF9yZWYpIHtcbiAgdmFyIGtpbmQgPSBfcmVmLmtpbmQ7XG4gIHZhciBncm91cHMgPSBraW5kLnRyaW0oKS5zcGxpdChTVE9SWV9LSU5EX1BBVEhfU0VQQVJBVE9SKTtcbiAgcmV0dXJuIGdyb3VwcyAmJiBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdIHx8IGtpbmQ7XG59O1xuZXhwb3J0IHZhciBUaXRsZSA9IGZ1bmN0aW9uIFRpdGxlKF9yZWYyKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgdGV4dCA9IGNoaWxkcmVuO1xuXG4gIGlmICghdGV4dCkge1xuICAgIHRleHQgPSBleHRyYWN0VGl0bGUoY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gdGV4dCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFB1cmVUaXRsZSwge1xuICAgIGNsYXNzTmFtZTogXCJzYmRvY3MtdGl0bGVcIlxuICB9LCB0ZXh0KSA6IG51bGw7XG59OyIsImltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3VidGl0bGUgYXMgUHVyZVN1YnRpdGxlIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5leHBvcnQgdmFyIFN1YnRpdGxlID0gZnVuY3Rpb24gU3VidGl0bGUoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgcGFyYW1ldGVycyA9IGNvbnRleHQucGFyYW1ldGVycztcbiAgdmFyIHRleHQgPSBjaGlsZHJlbjtcblxuICBpZiAoIXRleHQpIHtcbiAgICB0ZXh0ID0gcGFyYW1ldGVycyA9PT0gbnVsbCB8fCBwYXJhbWV0ZXJzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbWV0ZXJzLmNvbXBvbmVudFN1YnRpdGxlO1xuICB9XG5cbiAgcmV0dXJuIHRleHQgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQdXJlU3VidGl0bGUsIHtcbiAgICBjbGFzc05hbWU6IFwic2Jkb2NzLXN1YnRpdGxlXCJcbiAgfSwgdGV4dCkgOiBudWxsO1xufTsiLCJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnN0YXJ0cy13aXRoLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGFkZG9ucyB9IGZyb20gJ0BzdG9yeWJvb2svYWRkb25zJztcbmltcG9ydCB7IE5BVklHQVRFX1VSTCB9IGZyb20gJ0BzdG9yeWJvb2svY29yZS1ldmVudHMnO1xuaW1wb3J0IHsgU291cmNlLCBDb2RlLCBjb21wb25lbnRzIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCBnbG9iYWwgZnJvbSAnZ2xvYmFsJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BzdG9yeWJvb2svdGhlbWluZyc7XG5pbXBvcnQgeyBEb2NzQ29udGV4dCB9IGZyb20gJy4vRG9jc0NvbnRleHQnO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50OyAvLyBIYWNreSB1dGlsaXR5IGZvciBhc3NlcnRpbmcgaWRlbnRpZmllcnMgaW4gTURYIFN0b3J5IGVsZW1lbnRzXG5cbmV4cG9ydCB2YXIgYXNzZXJ0SXNGbiA9IGZ1bmN0aW9uIGFzc2VydElzRm4odmFsKSB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgc3RvcnkgZnVuY3Rpb24sIGdvdDogXCIuY29uY2F0KHZhbCkpO1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn07IC8vIEhhY2t5IHV0aWxpdHkgZm9yIGFkZGluZyBtZHhTdG9yeVRvSWQgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuXG5leHBvcnQgdmFyIEFkZENvbnRleHQgPSBmdW5jdGlvbiBBZGRDb250ZXh0KHByb3BzKSB7XG4gIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgW1wiY2hpbGRyZW5cIl0pO1xuXG4gIHZhciBwYXJlbnRDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChEb2NzQ29udGV4dCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEb2NzQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCByZXN0KVxuICB9LCBjaGlsZHJlbik7XG59O1xuZXhwb3J0IHZhciBDb2RlT3JTb3VyY2VNZHggPSBmdW5jdGlvbiBDb2RlT3JTb3VyY2VNZHgoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNsYXNzTmFtZVwiLCBcImNoaWxkcmVuXCJdKTtcblxuICAvLyBtYXJrZG93bi10by1qc3ggZG9lcyBub3QgYWRkIGNsYXNzTmFtZSB0byBpbmxpbmUgY29kZVxuICBpZiAodHlwZW9mIGNsYXNzTmFtZSAhPT0gJ3N0cmluZycgJiYgKHR5cGVvZiBjaGlsZHJlbiAhPT0gJ3N0cmluZycgfHwgIWNoaWxkcmVuLm1hdGNoKC9bXFxuXFxyXS9nKSkpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29kZSwgbnVsbCwgY2hpbGRyZW4pO1xuICB9IC8vIGNsYXNzTmFtZTogXCJsYW5nLWpzeFwiXG5cblxuICB2YXIgbGFuZ3VhZ2UgPSBjbGFzc05hbWUgJiYgY2xhc3NOYW1lLnNwbGl0KCctJyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTb3VyY2UsIF9leHRlbmRzKHtcbiAgICBsYW5ndWFnZTogbGFuZ3VhZ2UgJiYgbGFuZ3VhZ2VbMV0gfHwgJ3BsYWludGV4dCcsXG4gICAgZm9ybWF0OiBmYWxzZSxcbiAgICBjb2RlOiBjaGlsZHJlblxuICB9LCByZXN0KSk7XG59O1xuXG5mdW5jdGlvbiBuYXZpZ2F0ZSh1cmwpIHtcbiAgYWRkb25zLmdldENoYW5uZWwoKS5lbWl0KE5BVklHQVRFX1VSTCwgdXJsKTtcbn0gLy8gQHRzLWlnbm9yZVxuXG5cbnZhciBBID0gY29tcG9uZW50cy5hO1xuXG52YXIgQW5jaG9ySW5QYWdlID0gZnVuY3Rpb24gQW5jaG9ySW5QYWdlKF9yZWYyKSB7XG4gIHZhciBoYXNoID0gX3JlZjIuaGFzaCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBLCB7XG4gICAgaHJlZjogaGFzaCxcbiAgICB0YXJnZXQ6IFwiX3NlbGZcIixcbiAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgaWQgPSBoYXNoLnN1YnN0cmluZygxKTtcbiAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBuYXZpZ2F0ZShoYXNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIGNoaWxkcmVuKTtcbn07XG5cbmV4cG9ydCB2YXIgQW5jaG9yTWR4ID0gZnVuY3Rpb24gQW5jaG9yTWR4KHByb3BzKSB7XG4gIHZhciBocmVmID0gcHJvcHMuaHJlZixcbiAgICAgIHRhcmdldCA9IHByb3BzLnRhcmdldCxcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJocmVmXCIsIFwidGFyZ2V0XCIsIFwiY2hpbGRyZW5cIl0pO1xuXG4gIGlmIChocmVmKSB7XG4gICAgLy8gRW5hYmxlIHNjcm9sbGluZyBmb3IgaW4tcGFnZSBhbmNob3JzLlxuICAgIGlmIChocmVmLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvckluUGFnZSwge1xuICAgICAgICBoYXNoOiBocmVmXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfSAvLyBMaW5rcyB0byBvdGhlciBwYWdlcyBvZiBTQiBzaG91bGQgdXNlIHRoZSBiYXNlIFVSTCBvZiB0aGUgdG9wIGxldmVsIGlmcmFtZSBpbnN0ZWFkIG9mIHRoZSBiYXNlIFVSTCBvZiB0aGUgcHJldmlldyBpZnJhbWUuXG5cblxuICAgIGlmICh0YXJnZXQgIT09ICdfYmxhbmsnKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQSwgX2V4dGVuZHMoe1xuICAgICAgICBocmVmOiBocmVmLFxuICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gdXNlIHRoZSBBIGVsZW1lbnQncyBocmVmLCB3aGljaCBoYXMgYmVlbiBtb2RpZmllZCBmb3JcbiAgICAgICAgICAvLyBsb2NhbCBwYXRocyB3aXRob3V0IGEgYD9wYXRoPWAgcXVlcnkgcGFyYW0gcHJlZml4XG5cbiAgICAgICAgICBuYXZpZ2F0ZShldmVudC5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgnaHJlZicpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXRcbiAgICAgIH0sIHJlc3QpLCBjaGlsZHJlbik7XG4gICAgfVxuICB9IC8vIEV4dGVybmFsIFVSTCBkb250IG5lZWQgYW55IG1vZGlmaWNhdGlvbi5cblxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBLCBwcm9wcyk7XG59O1xudmFyIFNVUFBPUlRFRF9NRFhfSEVBREVSUyA9IFsnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnXTtcbnZhciBPY3RpY29uSGVhZGVycyA9IFNVUFBPUlRFRF9NRFhfSEVBREVSUy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgaGVhZGVyVHlwZSkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYWNjLCBfZGVmaW5lUHJvcGVydHkoe30sIGhlYWRlclR5cGUsIHN0eWxlZChjb21wb25lbnRzW2hlYWRlclR5cGVdKSh7XG4gICAgJyYgc3ZnJzoge1xuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbiAgICB9LFxuICAgICcmOmhvdmVyIHN2Zyc6IHtcbiAgICAgIHZpc2liaWxpdHk6ICd2aXNpYmxlJ1xuICAgIH1cbiAgfSkpKTtcbn0sIHt9KTtcbnZhciBPY3RpY29uQW5jaG9yID0gc3R5bGVkLmEoZnVuY3Rpb24gKCkge1xuICByZXR1cm4ge1xuICAgIGZsb2F0OiAnbGVmdCcsXG4gICAgcGFkZGluZ1JpZ2h0OiAnNHB4JyxcbiAgICBtYXJnaW5MZWZ0OiAnLTIwcHgnLFxuICAgIC8vIEFsbG93IHRoZSB0aGVtZSdzIHRleHQgY29sb3IgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbGluayBjb2xvci5cbiAgICBjb2xvcjogJ2luaGVyaXQnXG4gIH07XG59KTtcblxudmFyIEhlYWRlcldpdGhPY3RpY29uQW5jaG9yID0gZnVuY3Rpb24gSGVhZGVyV2l0aE9jdGljb25BbmNob3IoX3JlZjMpIHtcbiAgdmFyIGFzID0gX3JlZjMuYXMsXG4gICAgICBpZCA9IF9yZWYzLmlkLFxuICAgICAgY2hpbGRyZW4gPSBfcmVmMy5jaGlsZHJlbixcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjMsIFtcImFzXCIsIFwiaWRcIiwgXCJjaGlsZHJlblwiXSk7XG5cbiAgLy8gQHRzLWlnbm9yZVxuICB2YXIgT2N0aWNvbkhlYWRlciA9IE9jdGljb25IZWFkZXJzW2FzXTtcbiAgdmFyIGhhc2ggPSBcIiNcIi5jb25jYXQoaWQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT2N0aWNvbkhlYWRlciwgX2V4dGVuZHMoe1xuICAgIGlkOiBpZFxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoT2N0aWNvbkFuY2hvciwge1xuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgaHJlZjogaGFzaCxcbiAgICB0YWJJbmRleDogLTEsXG4gICAgdGFyZ2V0OiBcIl9zZWxmXCIsXG4gICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhldmVudCkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIG5hdmlnYXRlKGhhc2gpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwge1xuICAgIHZpZXdCb3g6IFwiMCAwIDE2IDE2XCIsXG4gICAgdmVyc2lvbjogXCIxLjFcIixcbiAgICB3aWR0aDogXCIxNlwiLFxuICAgIGhlaWdodDogXCIxNlwiLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGZpbGxSdWxlOiBcImV2ZW5vZGRcIixcbiAgICBkOiBcIk00IDloMXYxSDRjLTEuNSAwLTMtMS42OS0zLTMuNVMyLjU1IDMgNCAzaDRjMS40NSAwIDMgMS42OSAzIDMuNSAwIDEuNDEtLjkxIDIuNzItMiAzLjI1VjguNTljLjU4LS40NSAxLTEuMjcgMS0yLjA5QzEwIDUuMjIgOC45OCA0IDggNEg0Yy0uOTggMC0yIDEuMjItMiAyLjVTMyA5IDQgOXptOS0zaC0xdjFoMWMxIDAgMiAxLjIyIDIgMi41UzEzLjk4IDEyIDEzIDEySDljLS45OCAwLTItMS4yMi0yLTIuNSAwLS44My40Mi0xLjY0IDEtMi4wOVY2LjI1Yy0xLjA5LjUzLTIgMS44NC0yIDMuMjVDNiAxMS4zMSA3LjU1IDEzIDkgMTNoNGMxLjQ1IDAgMy0xLjY5IDMtMy41UzE0LjUgNiAxMyA2elwiXG4gIH0pKSksIGNoaWxkcmVuKTtcbn07XG5cbmV4cG9ydCB2YXIgSGVhZGVyTWR4ID0gZnVuY3Rpb24gSGVhZGVyTWR4KHByb3BzKSB7XG4gIHZhciBhcyA9IHByb3BzLmFzLFxuICAgICAgaWQgPSBwcm9wcy5pZCxcbiAgICAgIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbXCJhc1wiLCBcImlkXCIsIFwiY2hpbGRyZW5cIl0pOyAvLyBBbiBpZCBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIG9uIGV2ZXJ5IGhlYWRlciBieSB0aGUgXCJyZW1hcmstc2x1Z1wiIHBsdWdpbi5cblxuXG4gIGlmIChpZCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIZWFkZXJXaXRoT2N0aWNvbkFuY2hvciwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGFzLFxuICAgICAgaWQ6IGlkXG4gICAgfSwgcmVzdCksIGNoaWxkcmVuKTtcbiAgfSAvLyBAdHMtaWdub3JlXG5cblxuICB2YXIgSGVhZGVyID0gY29tcG9uZW50c1thc107IC8vIE1ha2Ugc3VyZSBpdCBzdGlsbCB3b3JrIGlmIFwicmVtYXJrLXNsdWdcIiBwbHVnaW4gaXMgbm90IHByZXNlbnQuXG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEhlYWRlciwgcHJvcHMpO1xufTtcbmV4cG9ydCB2YXIgSGVhZGVyc01keCA9IFNVUFBPUlRFRF9NRFhfSEVBREVSUy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgaGVhZGVyVHlwZSkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYWNjLCBfZGVmaW5lUHJvcGVydHkoe30sIGhlYWRlclR5cGUsIGZ1bmN0aW9uIChwcm9wcykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIZWFkZXJNZHgsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBoZWFkZXJUeXBlXG4gICAgfSwgcHJvcHMpKTtcbiAgfSkpO1xufSwge30pOyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSDMgfSBmcm9tICdAc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgSGVhZGVyTWR4IH0gZnJvbSAnLi9tZHgnO1xuZXhwb3J0IHZhciBTdWJoZWFkaW5nID0gZnVuY3Rpb24gU3ViaGVhZGluZyhfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICBkaXNhYmxlQW5jaG9yID0gX3JlZi5kaXNhYmxlQW5jaG9yO1xuXG4gIGlmIChkaXNhYmxlQW5jaG9yIHx8IHR5cGVvZiBjaGlsZHJlbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSDMsIG51bGwsIGNoaWxkcmVuKTtcbiAgfVxuXG4gIHZhciB0YWdJRCA9IGNoaWxkcmVuLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2dpLCAnLScpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSGVhZGVyTWR4LCB7XG4gICAgYXM6IFwiaDNcIixcbiAgICBpZDogdGFnSURcbiAgfSwgY2hpbGRyZW4pO1xufTsiLCJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJlZXplLmpzXCI7XG5cbnZhciBfdGVtcGxhdGVPYmplY3Q7XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIF90YWdnZWRUZW1wbGF0ZUxpdGVyYWwoc3RyaW5ncywgcmF3KSB7IGlmICghcmF3KSB7IHJhdyA9IHN0cmluZ3Muc2xpY2UoMCk7IH0gcmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3RyaW5ncywgeyByYXc6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUocmF3KSB9IH0pKTsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGRlcHJlY2F0ZSBmcm9tICd1dGlsLWRlcHJlY2F0ZSc7XG5pbXBvcnQgZGVkZW50IGZyb20gJ3RzLWRlZGVudCc7XG5pbXBvcnQgeyBTdWJoZWFkaW5nIH0gZnJvbSAnLi9TdWJoZWFkaW5nJztcbmltcG9ydCB7IEFuY2hvciB9IGZyb20gJy4vQW5jaG9yJztcbmltcG9ydCB7IERlc2NyaXB0aW9uIH0gZnJvbSAnLi9EZXNjcmlwdGlvbic7XG5pbXBvcnQgeyBTdG9yeSB9IGZyb20gJy4vU3RvcnknO1xuaW1wb3J0IHsgQ2FudmFzIH0gZnJvbSAnLi9DYW52YXMnO1xudmFyIHdhcm5TdG9yeURlc2NyaXB0aW9uID0gZGVwcmVjYXRlKGZ1bmN0aW9uICgpIHt9LCBkZWRlbnQoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICBEZXByZWNhdGVkIHBhcmFtZXRlcjogZG9jcy5zdG9yeURlc2NyaXB0aW9uID0+IGRvY3MuZGVzY3JpcHRpb24uc3RvcnlcXG4gICAgICBcXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL3N0b3J5Ym9va2pzL3N0b3J5Ym9vay9ibG9iL25leHQvTUlHUkFUSU9OLm1kI2RvY3MtZGVzY3JpcHRpb24tcGFyYW1ldGVyXFxuICBcIl0pKSkpO1xuZXhwb3J0IHZhciBEb2NzU3RvcnkgPSBmdW5jdGlvbiBEb2NzU3RvcnkoX3JlZikge1xuICB2YXIgaWQgPSBfcmVmLmlkLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIF9yZWYkZXhwYW5kZWQgPSBfcmVmLmV4cGFuZGVkLFxuICAgICAgZXhwYW5kZWQgPSBfcmVmJGV4cGFuZGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRleHBhbmRlZCxcbiAgICAgIF9yZWYkd2l0aFRvb2xiYXIgPSBfcmVmLndpdGhUb29sYmFyLFxuICAgICAgd2l0aFRvb2xiYXIgPSBfcmVmJHdpdGhUb29sYmFyID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkd2l0aFRvb2xiYXIsXG4gICAgICBfcmVmJHBhcmFtZXRlcnMgPSBfcmVmLnBhcmFtZXRlcnMsXG4gICAgICBwYXJhbWV0ZXJzID0gX3JlZiRwYXJhbWV0ZXJzID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkcGFyYW1ldGVycztcbiAgdmFyIGRlc2NyaXB0aW9uO1xuICB2YXIgZG9jcyA9IHBhcmFtZXRlcnMuZG9jcztcblxuICBpZiAoZXhwYW5kZWQgJiYgZG9jcykge1xuICAgIHZhciBfZG9jcyRkZXNjcmlwdGlvbjtcblxuICAgIGRlc2NyaXB0aW9uID0gKF9kb2NzJGRlc2NyaXB0aW9uID0gZG9jcy5kZXNjcmlwdGlvbikgPT09IG51bGwgfHwgX2RvY3MkZGVzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kb2NzJGRlc2NyaXB0aW9uLnN0b3J5O1xuXG4gICAgaWYgKCFkZXNjcmlwdGlvbikge1xuICAgICAgZGVzY3JpcHRpb24gPSBkb2NzLnN0b3J5RGVzY3JpcHRpb247XG4gICAgICBpZiAoZGVzY3JpcHRpb24pIHdhcm5TdG9yeURlc2NyaXB0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN1YmhlYWRpbmcgPSBleHBhbmRlZCAmJiBuYW1lO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7XG4gICAgc3RvcnlJZDogaWRcbiAgfSwgc3ViaGVhZGluZyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJoZWFkaW5nLCBudWxsLCBzdWJoZWFkaW5nKSwgZGVzY3JpcHRpb24gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGVzY3JpcHRpb24sIHtcbiAgICBtYXJrZG93bjogZGVzY3JpcHRpb25cbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhbnZhcywge1xuICAgIHdpdGhUb29sYmFyOiB3aXRoVG9vbGJhclxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdG9yeSwge1xuICAgIGlkOiBpZFxuICB9KSkpO1xufTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5pbXBvcnQgeyBEb2NzU3RvcnkgfSBmcm9tICcuL0RvY3NTdG9yeSc7XG5pbXBvcnQgeyBnZXREb2NzU3RvcmllcyB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHZhciBQcmltYXJ5ID0gZnVuY3Rpb24gUHJpbWFyeShfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgY29tcG9uZW50U3RvcmllcyA9IGdldERvY3NTdG9yaWVzKGNvbnRleHQpO1xuICB2YXIgc3Rvcnk7XG5cbiAgaWYgKGNvbXBvbmVudFN0b3JpZXMpIHtcbiAgICBzdG9yeSA9IG5hbWUgPyBjb21wb25lbnRTdG9yaWVzLmZpbmQoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLm5hbWUgPT09IG5hbWU7XG4gICAgfSkgOiBjb21wb25lbnRTdG9yaWVzWzBdO1xuICB9XG5cbiAgcmV0dXJuIHN0b3J5ID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG9jc1N0b3J5LCBfZXh0ZW5kcyh7fSwgc3RvcnksIHtcbiAgICBleHBhbmRlZDogZmFsc2UsXG4gICAgd2l0aFRvb2xiYXI6IHRydWVcbiAgfSkpIDogbnVsbDtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBIMiB9IGZyb20gJ0BzdG9yeWJvb2svY29tcG9uZW50cyc7XG5pbXBvcnQgeyBIZWFkZXJNZHggfSBmcm9tICcuL21keCc7XG5leHBvcnQgdmFyIEhlYWRpbmcgPSBmdW5jdGlvbiBIZWFkaW5nKF9yZWYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbixcbiAgICAgIGRpc2FibGVBbmNob3IgPSBfcmVmLmRpc2FibGVBbmNob3I7XG5cbiAgaWYgKGRpc2FibGVBbmNob3IgfHwgdHlwZW9mIGNoaWxkcmVuICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIMiwgbnVsbCwgY2hpbGRyZW4pO1xuICB9XG5cbiAgdmFyIHRhZ0lEID0gY2hpbGRyZW4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksICctJyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIZWFkZXJNZHgsIHtcbiAgICBhczogXCJoMlwiLFxuICAgIGlkOiB0YWdJRFxuICB9LCBjaGlsZHJlbik7XG59OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRG9jc0NvbnRleHQgfSBmcm9tICcuL0RvY3NDb250ZXh0JztcbmltcG9ydCB7IERvY3NTdG9yeSB9IGZyb20gJy4vRG9jc1N0b3J5JztcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICcuL0hlYWRpbmcnO1xuaW1wb3J0IHsgZ2V0RG9jc1N0b3JpZXMgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB2YXIgU3RvcmllcyA9IGZ1bmN0aW9uIFN0b3JpZXMoX3JlZikge1xuICB2YXIgdGl0bGUgPSBfcmVmLnRpdGxlLFxuICAgICAgX3JlZiRpbmNsdWRlUHJpbWFyeSA9IF9yZWYuaW5jbHVkZVByaW1hcnksXG4gICAgICBpbmNsdWRlUHJpbWFyeSA9IF9yZWYkaW5jbHVkZVByaW1hcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpbmNsdWRlUHJpbWFyeTtcbiAgdmFyIGNvbnRleHQgPSB1c2VDb250ZXh0KERvY3NDb250ZXh0KTtcbiAgdmFyIGNvbXBvbmVudFN0b3JpZXMgPSBnZXREb2NzU3Rvcmllcyhjb250ZXh0KTtcbiAgdmFyIHN0b3JpZXMgPSBjb21wb25lbnRTdG9yaWVzO1xuICBpZiAoIWluY2x1ZGVQcmltYXJ5KSBzdG9yaWVzID0gc3Rvcmllcy5zbGljZSgxKTtcblxuICBpZiAoIXN0b3JpZXMgfHwgc3Rvcmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSGVhZGluZywgbnVsbCwgdGl0bGUpLCBzdG9yaWVzLm1hcChmdW5jdGlvbiAoc3RvcnkpIHtcbiAgICByZXR1cm4gc3RvcnkgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRG9jc1N0b3J5LCBfZXh0ZW5kcyh7XG4gICAgICBrZXk6IHN0b3J5LmlkXG4gICAgfSwgc3RvcnksIHtcbiAgICAgIGV4cGFuZGVkOiB0cnVlXG4gICAgfSkpO1xuICB9KSk7XG59O1xuU3Rvcmllcy5kZWZhdWx0UHJvcHMgPSB7XG4gIHRpdGxlOiAnU3Rvcmllcydcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi9UaXRsZSc7XG5pbXBvcnQgeyBTdWJ0aXRsZSB9IGZyb20gJy4vU3VidGl0bGUnO1xuaW1wb3J0IHsgRGVzY3JpcHRpb24gfSBmcm9tICcuL0Rlc2NyaXB0aW9uJztcbmltcG9ydCB7IFByaW1hcnkgfSBmcm9tICcuL1ByaW1hcnknO1xuaW1wb3J0IHsgUFJJTUFSWV9TVE9SWSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQXJnc1RhYmxlIH0gZnJvbSAnLi9BcmdzVGFibGUnO1xuaW1wb3J0IHsgU3RvcmllcyB9IGZyb20gJy4vU3Rvcmllcyc7XG5leHBvcnQgdmFyIERvY3NQYWdlID0gZnVuY3Rpb24gRG9jc1BhZ2UoKSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGl0bGUsIG51bGwpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdWJ0aXRsZSwgbnVsbCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERlc2NyaXB0aW9uLCBudWxsKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJpbWFyeSwgbnVsbCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFyZ3NUYWJsZSwge1xuICAgIHN0b3J5OiBQUklNQVJZX1NUT1JZXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTdG9yaWVzLCBudWxsKSk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5mcmVlemUuanNcIjtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLnVybC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZ2xvYmFsIGZyb20gJ2dsb2JhbCc7XG5pbXBvcnQgZGVwcmVjYXRlIGZyb20gJ3V0aWwtZGVwcmVjYXRlJztcbmltcG9ydCBkZWRlbnQgZnJvbSAndHMtZGVkZW50JztcbmltcG9ydCB7IE1EWFByb3ZpZGVyIH0gZnJvbSAnQG1keC1qcy9yZWFjdCc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyLCBlbnN1cmUgYXMgZW5zdXJlVGhlbWUgfSBmcm9tICdAc3Rvcnlib29rL3RoZW1pbmcnO1xuaW1wb3J0IHsgRG9jc1dyYXBwZXIsIERvY3NDb250ZW50LCBjb21wb25lbnRzIGFzIGh0bWxDb21wb25lbnRzIH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5pbXBvcnQgeyBhbmNob3JCbG9ja0lkRnJvbUlkIH0gZnJvbSAnLi9BbmNob3InO1xuaW1wb3J0IHsgc3RvcnlCbG9ja0lkRnJvbUlkIH0gZnJvbSAnLi9TdG9yeSc7XG5pbXBvcnQgeyBTb3VyY2VDb250YWluZXIgfSBmcm9tICcuL1NvdXJjZUNvbnRhaW5lcic7XG5pbXBvcnQgeyBDb2RlT3JTb3VyY2VNZHgsIEFuY2hvck1keCwgSGVhZGVyc01keCB9IGZyb20gJy4vbWR4JztcbmltcG9ydCB7IHNjcm9sbFRvRWxlbWVudCB9IGZyb20gJy4vdXRpbHMnO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50LFxuICAgIGdsb2JhbFdpbmRvdyA9IGdsb2JhbC53aW5kb3c7XG52YXIgZGVmYXVsdENvbXBvbmVudHMgPSBPYmplY3QuYXNzaWduKHt9LCBodG1sQ29tcG9uZW50cywge1xuICBjb2RlOiBDb2RlT3JTb3VyY2VNZHgsXG4gIGE6IEFuY2hvck1keFxufSwgSGVhZGVyc01keCk7XG52YXIgd2Fybk9wdGlvbnNUaGVtZSA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoKSB7fSwgZGVkZW50KF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgRGVwcmVjYXRlZCBwYXJhbWV0ZXI6IG9wdGlvbnMudGhlbWUgPT4gZG9jcy50aGVtZVxcblxcbiAgICBodHRwczovL2dpdGh1Yi5jb20vc3Rvcnlib29ranMvc3Rvcnlib29rL2Jsb2IvbmV4dC9hZGRvbnMvZG9jcy9kb2NzL3RoZW1pbmcubWQjc3Rvcnlib29rLXRoZW1pbmdcXG5cIl0pKSkpO1xuZXhwb3J0IHZhciBEb2NzQ29udGFpbmVyID0gZnVuY3Rpb24gRG9jc0NvbnRhaW5lcihfcmVmKSB7XG4gIHZhciBjb250ZXh0ID0gX3JlZi5jb250ZXh0LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuO1xuXG4gIHZhciBfcmVmMiA9IGNvbnRleHQgfHwge30sXG4gICAgICBfcmVmMiRpZCA9IF9yZWYyLmlkLFxuICAgICAgc3RvcnlJZCA9IF9yZWYyJGlkID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkaWQsXG4gICAgICBfcmVmMiRwYXJhbWV0ZXJzID0gX3JlZjIucGFyYW1ldGVycyxcbiAgICAgIHBhcmFtZXRlcnMgPSBfcmVmMiRwYXJhbWV0ZXJzID09PSB2b2lkIDAgPyB7fSA6IF9yZWYyJHBhcmFtZXRlcnM7XG5cbiAgdmFyIF9wYXJhbWV0ZXJzJG9wdGlvbnMgPSBwYXJhbWV0ZXJzLm9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX3BhcmFtZXRlcnMkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcGFyYW1ldGVycyRvcHRpb25zLFxuICAgICAgX3BhcmFtZXRlcnMkZG9jcyA9IHBhcmFtZXRlcnMuZG9jcyxcbiAgICAgIGRvY3MgPSBfcGFyYW1ldGVycyRkb2NzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbWV0ZXJzJGRvY3M7XG4gIHZhciB0aGVtZVZhcnMgPSBkb2NzLnRoZW1lO1xuXG4gIGlmICghdGhlbWVWYXJzICYmIG9wdGlvbnMudGhlbWUpIHtcbiAgICB3YXJuT3B0aW9uc1RoZW1lKCk7XG4gICAgdGhlbWVWYXJzID0gb3B0aW9ucy50aGVtZTtcbiAgfVxuXG4gIHZhciB0aGVtZSA9IGVuc3VyZVRoZW1lKHRoZW1lVmFycyk7XG4gIHZhciBhbGxDb21wb25lbnRzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbXBvbmVudHMsIGRvY3MuY29tcG9uZW50cyk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVybDtcblxuICAgIHRyeSB7XG4gICAgICB1cmwgPSBuZXcgVVJMKGdsb2JhbFdpbmRvdy5wYXJlbnQubG9jYXRpb24pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh1cmwuaGFzaCkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh1cmwuaGFzaC5zdWJzdHJpbmcoMSkpO1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAvLyBJbnRyb2R1Y2luZyBhIGRlbGF5IHRvIGVuc3VyZSBzY3JvbGxpbmcgd29ya3Mgd2hlbiBpdCdzIGEgZnVsbCByZWZyZXNoLlxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzY3JvbGxUb0VsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFuY2hvckJsb2NrSWRGcm9tSWQoc3RvcnlJZCkpIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHN0b3J5QmxvY2tJZEZyb21JZChzdG9yeUlkKSk7XG5cbiAgICAgIGlmIChfZWxlbWVudCkge1xuICAgICAgICB2YXIgYWxsU3RvcmllcyA9IF9lbGVtZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkfD1cImFuY2hvci1cIl0nKTtcblxuICAgICAgICB2YXIgc2Nyb2xsVGFyZ2V0ID0gX2VsZW1lbnQ7XG5cbiAgICAgICAgaWYgKGFsbFN0b3JpZXMgJiYgYWxsU3Rvcmllc1swXSA9PT0gX2VsZW1lbnQpIHtcbiAgICAgICAgICAvLyBJbmNsdWRlIGNvbnRlbnQgYWJvdmUgZmlyc3Qgc3RvcnlcbiAgICAgICAgICBzY3JvbGxUYXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZG9jcy1yb290Jyk7XG4gICAgICAgIH0gLy8gSW50cm9kdWNpbmcgYSBkZWxheSB0byBlbnN1cmUgc2Nyb2xsaW5nIHdvcmtzIHdoZW4gaXQncyBhIGZ1bGwgcmVmcmVzaC5cblxuXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHNjcm9sbFRvRWxlbWVudChzY3JvbGxUYXJnZXQsICdzdGFydCcpO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0b3J5SWRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERvY3NDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbnRleHRcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU291cmNlQ29udGFpbmVyLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZVByb3ZpZGVyLCB7XG4gICAgdGhlbWU6IHRoZW1lXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1EWFByb3ZpZGVyLCB7XG4gICAgY29tcG9uZW50czogYWxsQ29tcG9uZW50c1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEb2NzV3JhcHBlciwge1xuICAgIGNsYXNzTmFtZTogXCJzYmRvY3Mgc2Jkb2NzLXdyYXBwZXJcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEb2NzQ29udGVudCwge1xuICAgIGNsYXNzTmFtZTogXCJzYmRvY3Mgc2Jkb2NzLWNvbnRlbnRcIlxuICB9LCBjaGlsZHJlbikpKSkpKTtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi51cmwuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBnbG9iYWwgZnJvbSAnZ2xvYmFsJztcbmltcG9ydCB7IEFuY2hvciB9IGZyb20gJy4vQW5jaG9yJztcbmltcG9ydCB7IERvY3NDb250ZXh0IH0gZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5pbXBvcnQgeyBnZXREb2NzU3RvcmllcyB9IGZyb20gJy4vdXRpbHMnO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuXG5mdW5jdGlvbiBnZXRGaXJzdFN0b3J5SWQoZG9jc0NvbnRleHQpIHtcbiAgdmFyIHN0b3JpZXMgPSBnZXREb2NzU3Rvcmllcyhkb2NzQ29udGV4dCk7XG4gIHJldHVybiBzdG9yaWVzLmxlbmd0aCA+IDAgPyBzdG9yaWVzWzBdLmlkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQW5jaG9yKCkge1xuICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoRG9jc0NvbnRleHQpO1xuICB2YXIgYW5jaG9ySWQgPSBnZXRGaXJzdFN0b3J5SWQoY29udGV4dCkgfHwgY29udGV4dC5pZDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge1xuICAgIHN0b3J5SWQ6IGFuY2hvcklkXG4gIH0pO1xufVxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyB1c2VkIHRvIGRlY2xhcmUgY29tcG9uZW50IG1ldGFkYXRhIGluIGRvY3NcbiAqIGFuZCBnZXRzIHRyYW5zZm9ybWVkIGludG8gYSBkZWZhdWx0IGV4cG9ydCB1bmRlcm5lYXRoIHRoZSBob29kLlxuICovXG5cblxuZXhwb3J0IHZhciBNZXRhID0gZnVuY3Rpb24gTWV0YSgpIHtcbiAgdmFyIHBhcmFtcyA9IG5ldyBVUkwoZG9jdW1lbnQubG9jYXRpb24pLnNlYXJjaFBhcmFtcztcbiAgdmFyIGlzRG9jcyA9IHBhcmFtcy5nZXQoJ3ZpZXdNb2RlJykgPT09ICdkb2NzJztcbiAgcmV0dXJuIGlzRG9jcyA/IHJlbmRlckFuY2hvcigpIDogbnVsbDtcbn07IiwiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmZyZWV6ZS5qc1wiO1xuXG52YXIgX3RlbXBsYXRlT2JqZWN0O1xuXG5mdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKHN0cmluZ3MsIHJhdykgeyBpZiAoIXJhdykgeyByYXcgPSBzdHJpbmdzLnNsaWNlKDApOyB9IHJldHVybiBPYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0cmluZ3MsIHsgcmF3OiB7IHZhbHVlOiBPYmplY3QuZnJlZXplKHJhdykgfSB9KSk7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZXByZWNhdGUgZnJvbSAndXRpbC1kZXByZWNhdGUnO1xuaW1wb3J0IGRlZGVudCBmcm9tICd0cy1kZWRlbnQnO1xuaW1wb3J0IHsgQ2FudmFzIH0gZnJvbSAnLi9DYW52YXMnO1xuZXhwb3J0IHZhciBQcmV2aWV3ID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2FudmFzLCBwcm9wcyk7XG59LCBkZWRlbnQoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICBQcmV2aWV3IGRvYyBibG9jayBoYXMgYmVlbiByZW5hbWVkIHRvIENhbnZhcy5cXG5cXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL3N0b3J5Ym9va2pzL3N0b3J5Ym9vay9ibG9iL25leHQvTUlHUkFUSU9OLm1kI3ByZXZpZXdwcm9wcy1yZW5hbWVkXFxuICBcIl0pKSkpOyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5mcmVlemUuanNcIjtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVwcmVjYXRlIGZyb20gJ3V0aWwtZGVwcmVjYXRlJztcbmltcG9ydCBkZWRlbnQgZnJvbSAndHMtZGVkZW50JztcbmltcG9ydCB7IEFyZ3NUYWJsZSB9IGZyb20gJy4vQXJnc1RhYmxlJztcbmltcG9ydCB7IENVUlJFTlRfU0VMRUNUSU9OIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgdmFyIFByb3BzID0gZGVwcmVjYXRlKGZ1bmN0aW9uIChwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQXJnc1RhYmxlLCBwcm9wcyk7XG59LCBkZWRlbnQoX3RlbXBsYXRlT2JqZWN0IHx8IChfdGVtcGxhdGVPYmplY3QgPSBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsKFtcIlxcbiAgICBQcm9wcyBkb2MgYmxvY2sgaGFzIGJlZW4gcmVuYW1lZCB0byBBcmdzVGFibGUuXFxuXFxuICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zdG9yeWJvb2tqcy9zdG9yeWJvb2svYmxvYi9uZXh0L01JR1JBVElPTi5tZCNwcmV2aWV3cHJvcHMtcmVuYW1lZFxcbiAgXCJdKSkpKTsgLy8gQHRzLWlnbm9yZVxuXG5Qcm9wcy5kZWZhdWx0UHJvcHMgPSB7XG4gIG9mOiBDVVJSRU5UX1NFTEVDVElPTlxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBXcmFwcGVyID0gZnVuY3Rpb24gV3JhcHBlcihfcmVmKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGZvbnRGYW1pbHk6ICdzYW5zLXNlcmlmJ1xuICAgIH1cbiAgfSwgY2hpbGRyZW4pO1xufTsiLCJleHBvcnQgeyBDb2xvclBhbGV0dGUsIENvbG9ySXRlbSwgSWNvbkdhbGxlcnksIEljb25JdGVtLCBUeXBlc2V0IH0gZnJvbSAnQHN0b3J5Ym9vay9jb21wb25lbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vQW5jaG9yJztcbmV4cG9ydCAqIGZyb20gJy4vQXJnc1RhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vQ2FudmFzJztcbmV4cG9ydCAqIGZyb20gJy4vRGVzY3JpcHRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Eb2NzQ29udGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL0RvY3NQYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vRG9jc0NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL0RvY3NTdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL0hlYWRpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9NZXRhJztcbmV4cG9ydCAqIGZyb20gJy4vUHJldmlldyc7XG5leHBvcnQgKiBmcm9tICcuL1ByaW1hcnknO1xuZXhwb3J0ICogZnJvbSAnLi9Qcm9wcyc7XG5leHBvcnQgKiBmcm9tICcuL1NvdXJjZSc7XG5leHBvcnQgKiBmcm9tICcuL1NvdXJjZUNvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL1N0b3JpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL1N1YmhlYWRpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9TdWJ0aXRsZSc7XG5leHBvcnQgKiBmcm9tICcuL1RpdGxlJztcbmV4cG9ydCAqIGZyb20gJy4vV3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbWR4JzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2\n')},222: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWNvcm4td2Fsay9kaXN0L3dhbGsubWpzPzk0NDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUI7QUFDckIsR0FBRyxFQUFFO0FBQ0w7QUFDQTtBQUNBLGdCQUFnQixpQkFBaUI7QUFDakMsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsR0FBRyxFQUFFO0FBQ0w7QUFDQTtBQUNBLGdCQUFnQixzQkFBc0I7QUFDdEM7QUFDQSxnQkFBZ0IseUNBQXlDO0FBQ3pELGdCQUFnQixpQkFBaUI7QUFDakMsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxLQUFLLHlCQUF5QixzQkFBc0IsRUFBRTtBQUN0RDtBQUNBLEtBQUsscUJBQXFCLGFBQWEsRUFBRTtBQUN6QztBQUNBLEtBQUs7QUFDTDs7QUFFQSx5Q0FBeUMsa0JBQWtCLG9CQUFvQjs7QUFFL0U7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixHQUFHLEVBQUU7QUFDTDtBQUNBO0FBQ0Esb0JBQW9CLDBCQUEwQjtBQUM5QyxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9CQUFvQjtBQUN6QztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsZ0JBQWdCLHNCQUFzQjtBQUN0QztBQUNBLG9CQUFvQixrREFBa0Q7QUFD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YSBQYXJzZXIgQVBJIGNvbXBhdGlibGUgdHJlZXNcblxuLy8gQSBzaW1wbGUgd2FsayBpcyBvbmUgd2hlcmUgeW91IHNpbXBseSBzcGVjaWZ5IGNhbGxiYWNrcyB0byBiZVxuLy8gY2FsbGVkIG9uIHNwZWNpZmljIG5vZGVzLiBUaGUgbGFzdCB0d28gYXJndW1lbnRzIGFyZSBvcHRpb25hbC4gQVxuLy8gc2ltcGxlIHVzZSB3b3VsZCBiZVxuLy9cbi8vICAgICB3YWxrLnNpbXBsZShteVRyZWUsIHtcbi8vICAgICAgICAgRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkgeyAuLi4gfVxuLy8gICAgIH0pO1xuLy9cbi8vIHRvIGRvIHNvbWV0aGluZyB3aXRoIGFsbCBleHByZXNzaW9ucy4gQWxsIFBhcnNlciBBUEkgbm9kZSB0eXBlc1xuLy8gY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgbm9kZSB0eXBlcywgYXMgd2VsbCBhcyBFeHByZXNzaW9uIGFuZFxuLy8gU3RhdGVtZW50LCB3aGljaCBkZW5vdGUgY2F0ZWdvcmllcyBvZiBub2Rlcy5cbi8vXG4vLyBUaGUgYmFzZSBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBwYXNzIGEgY3VzdG9tIChyZWN1cnNpdmUpXG4vLyB3YWxrZXIsIGFuZCBzdGF0ZSBjYW4gYmUgdXNlZCB0byBnaXZlIHRoaXMgd2Fsa2VkIGFuIGluaXRpYWxcbi8vIHN0YXRlLlxuXG5mdW5jdGlvbiBzaW1wbGUobm9kZSwgdmlzaXRvcnMsIGJhc2VWaXNpdG9yLCBzdGF0ZSwgb3ZlcnJpZGUpIHtcbiAgaWYgKCFiYXNlVmlzaXRvcikgeyBiYXNlVmlzaXRvciA9IGJhc2VcbiAgOyB9KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGUsIGZvdW5kID0gdmlzaXRvcnNbdHlwZV07XG4gICAgYmFzZVZpc2l0b3JbdHlwZV0obm9kZSwgc3QsIGMpO1xuICAgIGlmIChmb3VuZCkgeyBmb3VuZChub2RlLCBzdCk7IH1cbiAgfSkobm9kZSwgc3RhdGUsIG92ZXJyaWRlKTtcbn1cblxuLy8gQW4gYW5jZXN0b3Igd2FsayBrZWVwcyBhbiBhcnJheSBvZiBhbmNlc3RvciBub2RlcyAoaW5jbHVkaW5nIHRoZVxuLy8gY3VycmVudCBub2RlKSBhbmQgcGFzc2VzIHRoZW0gdG8gdGhlIGNhbGxiYWNrIGFzIHRoaXJkIHBhcmFtZXRlclxuLy8gKGFuZCBhbHNvIGFzIHN0YXRlIHBhcmFtZXRlciB3aGVuIG5vIG90aGVyIHN0YXRlIGlzIHByZXNlbnQpLlxuZnVuY3Rpb24gYW5jZXN0b3Iobm9kZSwgdmlzaXRvcnMsIGJhc2VWaXNpdG9yLCBzdGF0ZSwgb3ZlcnJpZGUpIHtcbiAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZVxuICA7IH0oZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZSwgZm91bmQgPSB2aXNpdG9yc1t0eXBlXTtcbiAgICB2YXIgaXNOZXcgPSBub2RlICE9PSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdO1xuICAgIGlmIChpc05ldykgeyBhbmNlc3RvcnMucHVzaChub2RlKTsgfVxuICAgIGJhc2VWaXNpdG9yW3R5cGVdKG5vZGUsIHN0LCBjKTtcbiAgICBpZiAoZm91bmQpIHsgZm91bmQobm9kZSwgc3QgfHwgYW5jZXN0b3JzLCBhbmNlc3RvcnMpOyB9XG4gICAgaWYgKGlzTmV3KSB7IGFuY2VzdG9ycy5wb3AoKTsgfVxuICB9KShub2RlLCBzdGF0ZSwgb3ZlcnJpZGUpO1xufVxuXG4vLyBBIHJlY3Vyc2l2ZSB3YWxrIGlzIG9uZSB3aGVyZSB5b3VyIGZ1bmN0aW9ucyBvdmVycmlkZSB0aGUgZGVmYXVsdFxuLy8gd2Fsa2Vycy4gVGhleSBjYW4gbW9kaWZ5IGFuZCByZXBsYWNlIHRoZSBzdGF0ZSBwYXJhbWV0ZXIgdGhhdCdzXG4vLyB0aHJlYWRlZCB0aHJvdWdoIHRoZSB3YWxrLCBhbmQgY2FuIG9wdCBob3cgYW5kIHdoZXRoZXIgdG8gd2Fsa1xuLy8gdGhlaXIgY2hpbGQgbm9kZXMgKGJ5IGNhbGxpbmcgdGhlaXIgdGhpcmQgYXJndW1lbnQgb24gdGhlc2Vcbi8vIG5vZGVzKS5cbmZ1bmN0aW9uIHJlY3Vyc2l2ZShub2RlLCBzdGF0ZSwgZnVuY3MsIGJhc2VWaXNpdG9yLCBvdmVycmlkZSkge1xuICB2YXIgdmlzaXRvciA9IGZ1bmNzID8gbWFrZShmdW5jcywgYmFzZVZpc2l0b3IgfHwgdW5kZWZpbmVkKSA6IGJhc2VWaXNpdG9yXG4gIDsoZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2aXNpdG9yW292ZXJyaWRlIHx8IG5vZGUudHlwZV0obm9kZSwgc3QsIGMpO1xuICB9KShub2RlLCBzdGF0ZSwgb3ZlcnJpZGUpO1xufVxuXG5mdW5jdGlvbiBtYWtlVGVzdCh0ZXN0KSB7XG4gIGlmICh0eXBlb2YgdGVzdCA9PT0gXCJzdHJpbmdcIilcbiAgICB7IHJldHVybiBmdW5jdGlvbiAodHlwZSkgeyByZXR1cm4gdHlwZSA9PT0gdGVzdDsgfSB9XG4gIGVsc2UgaWYgKCF0ZXN0KVxuICAgIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWU7IH0gfVxuICBlbHNlXG4gICAgeyByZXR1cm4gdGVzdCB9XG59XG5cbnZhciBGb3VuZCA9IGZ1bmN0aW9uIEZvdW5kKG5vZGUsIHN0YXRlKSB7IHRoaXMubm9kZSA9IG5vZGU7IHRoaXMuc3RhdGUgPSBzdGF0ZTsgfTtcblxuLy8gQSBmdWxsIHdhbGsgdHJpZ2dlcnMgdGhlIGNhbGxiYWNrIG9uIGVhY2ggbm9kZVxuZnVuY3Rpb24gZnVsbChub2RlLCBjYWxsYmFjaywgYmFzZVZpc2l0b3IsIHN0YXRlLCBvdmVycmlkZSkge1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZVxuICA7IH0oZnVuY3Rpb24gYyhub2RlLCBzdCwgb3ZlcnJpZGUpIHtcbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICBiYXNlVmlzaXRvclt0eXBlXShub2RlLCBzdCwgYyk7XG4gICAgaWYgKCFvdmVycmlkZSkgeyBjYWxsYmFjayhub2RlLCBzdCwgdHlwZSk7IH1cbiAgfSkobm9kZSwgc3RhdGUsIG92ZXJyaWRlKTtcbn1cblxuLy8gQW4gZnVsbEFuY2VzdG9yIHdhbGsgaXMgbGlrZSBhbiBhbmNlc3RvciB3YWxrLCBidXQgdHJpZ2dlcnNcbi8vIHRoZSBjYWxsYmFjayBvbiBlYWNoIG5vZGVcbmZ1bmN0aW9uIGZ1bGxBbmNlc3Rvcihub2RlLCBjYWxsYmFjaywgYmFzZVZpc2l0b3IsIHN0YXRlKSB7XG4gIGlmICghYmFzZVZpc2l0b3IpIHsgYmFzZVZpc2l0b3IgPSBiYXNlOyB9XG4gIHZhciBhbmNlc3RvcnMgPSBbXVxuICA7KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgdmFyIHR5cGUgPSBvdmVycmlkZSB8fCBub2RlLnR5cGU7XG4gICAgdmFyIGlzTmV3ID0gbm9kZSAhPT0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAxXTtcbiAgICBpZiAoaXNOZXcpIHsgYW5jZXN0b3JzLnB1c2gobm9kZSk7IH1cbiAgICBiYXNlVmlzaXRvclt0eXBlXShub2RlLCBzdCwgYyk7XG4gICAgaWYgKCFvdmVycmlkZSkgeyBjYWxsYmFjayhub2RlLCBzdCB8fCBhbmNlc3RvcnMsIGFuY2VzdG9ycywgdHlwZSk7IH1cbiAgICBpZiAoaXNOZXcpIHsgYW5jZXN0b3JzLnBvcCgpOyB9XG4gIH0pKG5vZGUsIHN0YXRlKTtcbn1cblxuLy8gRmluZCBhIG5vZGUgd2l0aCBhIGdpdmVuIHN0YXJ0LCBlbmQsIGFuZCB0eXBlIChhbGwgYXJlIG9wdGlvbmFsLFxuLy8gbnVsbCBjYW4gYmUgdXNlZCBhcyB3aWxkY2FyZCkuIFJldHVybnMgYSB7bm9kZSwgc3RhdGV9IG9iamVjdCwgb3Jcbi8vIHVuZGVmaW5lZCB3aGVuIGl0IGRvZXNuJ3QgZmluZCBhIG1hdGNoaW5nIG5vZGUuXG5mdW5jdGlvbiBmaW5kTm9kZUF0KG5vZGUsIHN0YXJ0LCBlbmQsIHRlc3QsIGJhc2VWaXNpdG9yLCBzdGF0ZSkge1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZTsgfVxuICB0ZXN0ID0gbWFrZVRlc3QodGVzdCk7XG4gIHRyeSB7XG4gICAgKGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICAgIGlmICgoc3RhcnQgPT0gbnVsbCB8fCBub2RlLnN0YXJ0IDw9IHN0YXJ0KSAmJlxuICAgICAgICAgIChlbmQgPT0gbnVsbCB8fCBub2RlLmVuZCA+PSBlbmQpKVxuICAgICAgICB7IGJhc2VWaXNpdG9yW3R5cGVdKG5vZGUsIHN0LCBjKTsgfVxuICAgICAgaWYgKChzdGFydCA9PSBudWxsIHx8IG5vZGUuc3RhcnQgPT09IHN0YXJ0KSAmJlxuICAgICAgICAgIChlbmQgPT0gbnVsbCB8fCBub2RlLmVuZCA9PT0gZW5kKSAmJlxuICAgICAgICAgIHRlc3QodHlwZSwgbm9kZSkpXG4gICAgICAgIHsgdGhyb3cgbmV3IEZvdW5kKG5vZGUsIHN0KSB9XG4gICAgfSkobm9kZSwgc3RhdGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBGb3VuZCkgeyByZXR1cm4gZSB9XG4gICAgdGhyb3cgZVxuICB9XG59XG5cbi8vIEZpbmQgdGhlIGlubmVybW9zdCBub2RlIG9mIGEgZ2l2ZW4gdHlwZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlblxuLy8gcG9zaXRpb24uIEludGVyZmFjZSBzaW1pbGFyIHRvIGZpbmROb2RlQXQuXG5mdW5jdGlvbiBmaW5kTm9kZUFyb3VuZChub2RlLCBwb3MsIHRlc3QsIGJhc2VWaXNpdG9yLCBzdGF0ZSkge1xuICB0ZXN0ID0gbWFrZVRlc3QodGVzdCk7XG4gIGlmICghYmFzZVZpc2l0b3IpIHsgYmFzZVZpc2l0b3IgPSBiYXNlOyB9XG4gIHRyeSB7XG4gICAgKGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICAgIGlmIChub2RlLnN0YXJ0ID4gcG9zIHx8IG5vZGUuZW5kIDwgcG9zKSB7IHJldHVybiB9XG4gICAgICBiYXNlVmlzaXRvclt0eXBlXShub2RlLCBzdCwgYyk7XG4gICAgICBpZiAodGVzdCh0eXBlLCBub2RlKSkgeyB0aHJvdyBuZXcgRm91bmQobm9kZSwgc3QpIH1cbiAgICB9KShub2RlLCBzdGF0ZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEZvdW5kKSB7IHJldHVybiBlIH1cbiAgICB0aHJvdyBlXG4gIH1cbn1cblxuLy8gRmluZCB0aGUgb3V0ZXJtb3N0IG1hdGNoaW5nIG5vZGUgYWZ0ZXIgYSBnaXZlbiBwb3NpdGlvbi5cbmZ1bmN0aW9uIGZpbmROb2RlQWZ0ZXIobm9kZSwgcG9zLCB0ZXN0LCBiYXNlVmlzaXRvciwgc3RhdGUpIHtcbiAgdGVzdCA9IG1ha2VUZXN0KHRlc3QpO1xuICBpZiAoIWJhc2VWaXNpdG9yKSB7IGJhc2VWaXNpdG9yID0gYmFzZTsgfVxuICB0cnkge1xuICAgIChmdW5jdGlvbiBjKG5vZGUsIHN0LCBvdmVycmlkZSkge1xuICAgICAgaWYgKG5vZGUuZW5kIDwgcG9zKSB7IHJldHVybiB9XG4gICAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICAgIGlmIChub2RlLnN0YXJ0ID49IHBvcyAmJiB0ZXN0KHR5cGUsIG5vZGUpKSB7IHRocm93IG5ldyBGb3VuZChub2RlLCBzdCkgfVxuICAgICAgYmFzZVZpc2l0b3JbdHlwZV0obm9kZSwgc3QsIGMpO1xuICAgIH0pKG5vZGUsIHN0YXRlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgRm91bmQpIHsgcmV0dXJuIGUgfVxuICAgIHRocm93IGVcbiAgfVxufVxuXG4vLyBGaW5kIHRoZSBvdXRlcm1vc3QgbWF0Y2hpbmcgbm9kZSBiZWZvcmUgYSBnaXZlbiBwb3NpdGlvbi5cbmZ1bmN0aW9uIGZpbmROb2RlQmVmb3JlKG5vZGUsIHBvcywgdGVzdCwgYmFzZVZpc2l0b3IsIHN0YXRlKSB7XG4gIHRlc3QgPSBtYWtlVGVzdCh0ZXN0KTtcbiAgaWYgKCFiYXNlVmlzaXRvcikgeyBiYXNlVmlzaXRvciA9IGJhc2U7IH1cbiAgdmFyIG1heFxuICA7KGZ1bmN0aW9uIGMobm9kZSwgc3QsIG92ZXJyaWRlKSB7XG4gICAgaWYgKG5vZGUuc3RhcnQgPiBwb3MpIHsgcmV0dXJuIH1cbiAgICB2YXIgdHlwZSA9IG92ZXJyaWRlIHx8IG5vZGUudHlwZTtcbiAgICBpZiAobm9kZS5lbmQgPD0gcG9zICYmICghbWF4IHx8IG1heC5ub2RlLmVuZCA8IG5vZGUuZW5kKSAmJiB0ZXN0KHR5cGUsIG5vZGUpKVxuICAgICAgeyBtYXggPSBuZXcgRm91bmQobm9kZSwgc3QpOyB9XG4gICAgYmFzZVZpc2l0b3JbdHlwZV0obm9kZSwgc3QsIGMpO1xuICB9KShub2RlLCBzdGF0ZSk7XG4gIHJldHVybiBtYXhcbn1cblxuLy8gRmFsbGJhY2sgdG8gYW4gT2JqZWN0LmNyZWF0ZSBwb2x5ZmlsbCBmb3Igb2xkZXIgZW52aXJvbm1lbnRzLlxudmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24ocHJvdG8pIHtcbiAgZnVuY3Rpb24gQ3RvcigpIHt9XG4gIEN0b3IucHJvdG90eXBlID0gcHJvdG87XG4gIHJldHVybiBuZXcgQ3RvclxufTtcblxuLy8gVXNlZCB0byBjcmVhdGUgYSBjdXN0b20gd2Fsa2VyLiBXaWxsIGZpbGwgaW4gYWxsIG1pc3Npbmcgbm9kZVxuLy8gdHlwZSBwcm9wZXJ0aWVzIHdpdGggdGhlIGRlZmF1bHRzLlxuZnVuY3Rpb24gbWFrZShmdW5jcywgYmFzZVZpc2l0b3IpIHtcbiAgdmFyIHZpc2l0b3IgPSBjcmVhdGUoYmFzZVZpc2l0b3IgfHwgYmFzZSk7XG4gIGZvciAodmFyIHR5cGUgaW4gZnVuY3MpIHsgdmlzaXRvclt0eXBlXSA9IGZ1bmNzW3R5cGVdOyB9XG4gIHJldHVybiB2aXNpdG9yXG59XG5cbmZ1bmN0aW9uIHNraXBUaHJvdWdoKG5vZGUsIHN0LCBjKSB7IGMobm9kZSwgc3QpOyB9XG5mdW5jdGlvbiBpZ25vcmUoX25vZGUsIF9zdCwgX2MpIHt9XG5cbi8vIE5vZGUgd2Fsa2Vycy5cblxudmFyIGJhc2UgPSB7fTtcblxuYmFzZS5Qcm9ncmFtID0gYmFzZS5CbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuYm9keTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBzdG10ID0gbGlzdFtpXTtcblxuICAgIGMoc3RtdCwgc3QsIFwiU3RhdGVtZW50XCIpO1xuICB9XG59O1xuYmFzZS5TdGF0ZW1lbnQgPSBza2lwVGhyb3VnaDtcbmJhc2UuRW1wdHlTdGF0ZW1lbnQgPSBpZ25vcmU7XG5iYXNlLkV4cHJlc3Npb25TdGF0ZW1lbnQgPSBiYXNlLlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uID0gYmFzZS5DaGFpbkV4cHJlc3Npb24gPVxuICBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZS5leHByZXNzaW9uLCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9O1xuYmFzZS5JZlN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgYyhub2RlLmNvbnNlcXVlbnQsIHN0LCBcIlN0YXRlbWVudFwiKTtcbiAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB7IGMobm9kZS5hbHRlcm5hdGUsIHN0LCBcIlN0YXRlbWVudFwiKTsgfVxufTtcbmJhc2UuTGFiZWxlZFN0YXRlbWVudCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLmJvZHksIHN0LCBcIlN0YXRlbWVudFwiKTsgfTtcbmJhc2UuQnJlYWtTdGF0ZW1lbnQgPSBiYXNlLkNvbnRpbnVlU3RhdGVtZW50ID0gaWdub3JlO1xuYmFzZS5XaXRoU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5vYmplY3QsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIik7XG59O1xuYmFzZS5Td2l0Y2hTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmRpc2NyaW1pbmFudCwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gbm9kZS5jYXNlczsgaSQxIDwgbGlzdCQxLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICB2YXIgY3MgPSBsaXN0JDFbaSQxXTtcblxuICAgIGlmIChjcy50ZXN0KSB7IGMoY3MudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gY3MuY29uc2VxdWVudDsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICB2YXIgY29ucyA9IGxpc3RbaV07XG5cbiAgICAgIGMoY29ucywgc3QsIFwiU3RhdGVtZW50XCIpO1xuICAgIH1cbiAgfVxufTtcbmJhc2UuU3dpdGNoQ2FzZSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS50ZXN0KSB7IGMobm9kZS50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG4gIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5jb25zZXF1ZW50OyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIGNvbnMgPSBsaXN0W2ldO1xuXG4gICAgYyhjb25zLCBzdCwgXCJTdGF0ZW1lbnRcIik7XG4gIH1cbn07XG5iYXNlLlJldHVyblN0YXRlbWVudCA9IGJhc2UuWWllbGRFeHByZXNzaW9uID0gYmFzZS5Bd2FpdEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuYXJndW1lbnQpIHsgYyhub2RlLmFyZ3VtZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG59O1xuYmFzZS5UaHJvd1N0YXRlbWVudCA9IGJhc2UuU3ByZWFkRWxlbWVudCA9XG4gIGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLmFyZ3VtZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9O1xuYmFzZS5UcnlTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmJsb2NrLCBzdCwgXCJTdGF0ZW1lbnRcIik7XG4gIGlmIChub2RlLmhhbmRsZXIpIHsgYyhub2RlLmhhbmRsZXIsIHN0KTsgfVxuICBpZiAobm9kZS5maW5hbGl6ZXIpIHsgYyhub2RlLmZpbmFsaXplciwgc3QsIFwiU3RhdGVtZW50XCIpOyB9XG59O1xuYmFzZS5DYXRjaENsYXVzZSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBpZiAobm9kZS5wYXJhbSkgeyBjKG5vZGUucGFyYW0sIHN0LCBcIlBhdHRlcm5cIik7IH1cbiAgYyhub2RlLmJvZHksIHN0LCBcIlN0YXRlbWVudFwiKTtcbn07XG5iYXNlLldoaWxlU3RhdGVtZW50ID0gYmFzZS5Eb1doaWxlU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS50ZXN0LCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICBjKG5vZGUuYm9keSwgc3QsIFwiU3RhdGVtZW50XCIpO1xufTtcbmJhc2UuRm9yU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmluaXQpIHsgYyhub2RlLmluaXQsIHN0LCBcIkZvckluaXRcIik7IH1cbiAgaWYgKG5vZGUudGVzdCkgeyBjKG5vZGUudGVzdCwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICBpZiAobm9kZS51cGRhdGUpIHsgYyhub2RlLnVwZGF0ZSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICBjKG5vZGUuYm9keSwgc3QsIFwiU3RhdGVtZW50XCIpO1xufTtcbmJhc2UuRm9ySW5TdGF0ZW1lbnQgPSBiYXNlLkZvck9mU3RhdGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5sZWZ0LCBzdCwgXCJGb3JJbml0XCIpO1xuICBjKG5vZGUucmlnaHQsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5ib2R5LCBzdCwgXCJTdGF0ZW1lbnRcIik7XG59O1xuYmFzZS5Gb3JJbml0ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7IGMobm9kZSwgc3QpOyB9XG4gIGVsc2UgeyBjKG5vZGUsIHN0LCBcIkV4cHJlc3Npb25cIik7IH1cbn07XG5iYXNlLkRlYnVnZ2VyU3RhdGVtZW50ID0gaWdub3JlO1xuXG5iYXNlLkZ1bmN0aW9uRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHsgcmV0dXJuIGMobm9kZSwgc3QsIFwiRnVuY3Rpb25cIik7IH07XG5iYXNlLlZhcmlhYmxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLmRlY2xhcmF0aW9uczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBkZWNsID0gbGlzdFtpXTtcblxuICAgIGMoZGVjbCwgc3QpO1xuICB9XG59O1xuYmFzZS5WYXJpYWJsZURlY2xhcmF0b3IgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmlkLCBzdCwgXCJQYXR0ZXJuXCIpO1xuICBpZiAobm9kZS5pbml0KSB7IGMobm9kZS5pbml0LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG59O1xuXG5iYXNlLkZ1bmN0aW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmlkKSB7IGMobm9kZS5pZCwgc3QsIFwiUGF0dGVyblwiKTsgfVxuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUucGFyYW1zOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIHBhcmFtID0gbGlzdFtpXTtcblxuICAgIGMocGFyYW0sIHN0LCBcIlBhdHRlcm5cIik7XG4gIH1cbiAgYyhub2RlLmJvZHksIHN0LCBub2RlLmV4cHJlc3Npb24gPyBcIkV4cHJlc3Npb25cIiA6IFwiU3RhdGVtZW50XCIpO1xufTtcblxuYmFzZS5QYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLnR5cGUgPT09IFwiSWRlbnRpZmllclwiKVxuICAgIHsgYyhub2RlLCBzdCwgXCJWYXJpYWJsZVBhdHRlcm5cIik7IH1cbiAgZWxzZSBpZiAobm9kZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIilcbiAgICB7IGMobm9kZSwgc3QsIFwiTWVtYmVyUGF0dGVyblwiKTsgfVxuICBlbHNlXG4gICAgeyBjKG5vZGUsIHN0KTsgfVxufTtcbmJhc2UuVmFyaWFibGVQYXR0ZXJuID0gaWdub3JlO1xuYmFzZS5NZW1iZXJQYXR0ZXJuID0gc2tpcFRocm91Z2g7XG5iYXNlLlJlc3RFbGVtZW50ID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7IHJldHVybiBjKG5vZGUuYXJndW1lbnQsIHN0LCBcIlBhdHRlcm5cIik7IH07XG5iYXNlLkFycmF5UGF0dGVybiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuZWxlbWVudHM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGVsdCA9IGxpc3RbaV07XG5cbiAgICBpZiAoZWx0KSB7IGMoZWx0LCBzdCwgXCJQYXR0ZXJuXCIpOyB9XG4gIH1cbn07XG5iYXNlLk9iamVjdFBhdHRlcm4gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLnByb3BlcnRpZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIHByb3AgPSBsaXN0W2ldO1xuXG4gICAgaWYgKHByb3AudHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG4gICAgICBpZiAocHJvcC5jb21wdXRlZCkgeyBjKHByb3Aua2V5LCBzdCwgXCJFeHByZXNzaW9uXCIpOyB9XG4gICAgICBjKHByb3AudmFsdWUsIHN0LCBcIlBhdHRlcm5cIik7XG4gICAgfSBlbHNlIGlmIChwcm9wLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIikge1xuICAgICAgYyhwcm9wLmFyZ3VtZW50LCBzdCwgXCJQYXR0ZXJuXCIpO1xuICAgIH1cbiAgfVxufTtcblxuYmFzZS5FeHByZXNzaW9uID0gc2tpcFRocm91Z2g7XG5iYXNlLlRoaXNFeHByZXNzaW9uID0gYmFzZS5TdXBlciA9IGJhc2UuTWV0YVByb3BlcnR5ID0gaWdub3JlO1xuYmFzZS5BcnJheUV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLmVsZW1lbnRzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBlbHQgPSBsaXN0W2ldO1xuXG4gICAgaWYgKGVsdCkgeyBjKGVsdCwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICB9XG59O1xuYmFzZS5PYmplY3RFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5wcm9wZXJ0aWVzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIHByb3AgPSBsaXN0W2ldO1xuXG4gICAgYyhwcm9wLCBzdCk7XG4gIH1cbn07XG5iYXNlLkZ1bmN0aW9uRXhwcmVzc2lvbiA9IGJhc2UuQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24gPSBiYXNlLkZ1bmN0aW9uRGVjbGFyYXRpb247XG5iYXNlLlNlcXVlbmNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuZXhwcmVzc2lvbnM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgIHtcbiAgICB2YXIgZXhwciA9IGxpc3RbaV07XG5cbiAgICBjKGV4cHIsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIH1cbn07XG5iYXNlLlRlbXBsYXRlTGl0ZXJhbCA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUucXVhc2lzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIHF1YXNpID0gbGlzdFtpXTtcblxuICAgIGMocXVhc2ksIHN0KTtcbiAgfVxuXG4gIGZvciAodmFyIGkkMSA9IDAsIGxpc3QkMSA9IG5vZGUuZXhwcmVzc2lvbnM7IGkkMSA8IGxpc3QkMS5sZW5ndGg7IGkkMSArPSAxKVxuICAgIHtcbiAgICB2YXIgZXhwciA9IGxpc3QkMVtpJDFdO1xuXG4gICAgYyhleHByLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICB9XG59O1xuYmFzZS5UZW1wbGF0ZUVsZW1lbnQgPSBpZ25vcmU7XG5iYXNlLlVuYXJ5RXhwcmVzc2lvbiA9IGJhc2UuVXBkYXRlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuYXJndW1lbnQsIHN0LCBcIkV4cHJlc3Npb25cIik7XG59O1xuYmFzZS5CaW5hcnlFeHByZXNzaW9uID0gYmFzZS5Mb2dpY2FsRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUubGVmdCwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgYyhub2RlLnJpZ2h0LCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuQXNzaWdubWVudEV4cHJlc3Npb24gPSBiYXNlLkFzc2lnbm1lbnRQYXR0ZXJuID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5sZWZ0LCBzdCwgXCJQYXR0ZXJuXCIpO1xuICBjKG5vZGUucmlnaHQsIHN0LCBcIkV4cHJlc3Npb25cIik7XG59O1xuYmFzZS5Db25kaXRpb25hbEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLnRlc3QsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5jb25zZXF1ZW50LCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICBjKG5vZGUuYWx0ZXJuYXRlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuTmV3RXhwcmVzc2lvbiA9IGJhc2UuQ2FsbEV4cHJlc3Npb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgYyhub2RlLmNhbGxlZSwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbiAgaWYgKG5vZGUuYXJndW1lbnRzKVxuICAgIHsgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLmFyZ3VtZW50czsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICAgIHZhciBhcmcgPSBsaXN0W2ldO1xuXG4gICAgICAgIGMoYXJnLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xuICAgICAgfSB9XG59O1xuYmFzZS5NZW1iZXJFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS5vYmplY3QsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGlmIChub2RlLmNvbXB1dGVkKSB7IGMobm9kZS5wcm9wZXJ0eSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxufTtcbmJhc2UuRXhwb3J0TmFtZWREZWNsYXJhdGlvbiA9IGJhc2UuRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGlmIChub2RlLmRlY2xhcmF0aW9uKVxuICAgIHsgYyhub2RlLmRlY2xhcmF0aW9uLCBzdCwgbm9kZS50eXBlID09PSBcIkV4cG9ydE5hbWVkRGVjbGFyYXRpb25cIiB8fCBub2RlLmRlY2xhcmF0aW9uLmlkID8gXCJTdGF0ZW1lbnRcIiA6IFwiRXhwcmVzc2lvblwiKTsgfVxuICBpZiAobm9kZS5zb3VyY2UpIHsgYyhub2RlLnNvdXJjZSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxufTtcbmJhc2UuRXhwb3J0QWxsRGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuZXhwb3J0ZWQpXG4gICAgeyBjKG5vZGUuZXhwb3J0ZWQsIHN0KTsgfVxuICBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuSW1wb3J0RGVjbGFyYXRpb24gPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLnNwZWNpZmllcnM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgIHtcbiAgICB2YXIgc3BlYyA9IGxpc3RbaV07XG5cbiAgICBjKHNwZWMsIHN0KTtcbiAgfVxuICBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuSW1wb3J0RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBjKG5vZGUuc291cmNlLCBzdCwgXCJFeHByZXNzaW9uXCIpO1xufTtcbmJhc2UuSW1wb3J0U3BlY2lmaWVyID0gYmFzZS5JbXBvcnREZWZhdWx0U3BlY2lmaWVyID0gYmFzZS5JbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgPSBiYXNlLklkZW50aWZpZXIgPSBiYXNlLkxpdGVyYWwgPSBpZ25vcmU7XG5cbmJhc2UuVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uID0gZnVuY3Rpb24gKG5vZGUsIHN0LCBjKSB7XG4gIGMobm9kZS50YWcsIHN0LCBcIkV4cHJlc3Npb25cIik7XG4gIGMobm9kZS5xdWFzaSwgc3QsIFwiRXhwcmVzc2lvblwiKTtcbn07XG5iYXNlLkNsYXNzRGVjbGFyYXRpb24gPSBiYXNlLkNsYXNzRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykgeyByZXR1cm4gYyhub2RlLCBzdCwgXCJDbGFzc1wiKTsgfTtcbmJhc2UuQ2xhc3MgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuaWQpIHsgYyhub2RlLmlkLCBzdCwgXCJQYXR0ZXJuXCIpOyB9XG4gIGlmIChub2RlLnN1cGVyQ2xhc3MpIHsgYyhub2RlLnN1cGVyQ2xhc3MsIHN0LCBcIkV4cHJlc3Npb25cIik7IH1cbiAgYyhub2RlLmJvZHksIHN0KTtcbn07XG5iYXNlLkNsYXNzQm9keSA9IGZ1bmN0aW9uIChub2RlLCBzdCwgYykge1xuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuYm9keTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBlbHQgPSBsaXN0W2ldO1xuXG4gICAgYyhlbHQsIHN0KTtcbiAgfVxufTtcbmJhc2UuTWV0aG9kRGVmaW5pdGlvbiA9IGJhc2UuUHJvcGVydHkgPSBmdW5jdGlvbiAobm9kZSwgc3QsIGMpIHtcbiAgaWYgKG5vZGUuY29tcHV0ZWQpIHsgYyhub2RlLmtleSwgc3QsIFwiRXhwcmVzc2lvblwiKTsgfVxuICBjKG5vZGUudmFsdWUsIHN0LCBcIkV4cHJlc3Npb25cIik7XG59O1xuXG5leHBvcnQgeyBhbmNlc3RvciwgYmFzZSwgZmluZE5vZGVBZnRlciwgZmluZE5vZGVBcm91bmQsIGZpbmROb2RlQXQsIGZpbmROb2RlQmVmb3JlLCBmdWxsLCBmdWxsQW5jZXN0b3IsIG1ha2UsIHJlY3Vyc2l2ZSwgc2ltcGxlIH07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///222\n')},264: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__(46);\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__(9);\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__(12);\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__(118);\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__(822);\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__(18);\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__(51);\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__(59);\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__(35);\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__(26);\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__(820).setImmediate))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jaGFubmVscy9kaXN0L2VzbS9pbmRleC5qcz83ZmI3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkM7O0FBRTdDOztBQUVBLCtDQUErQyxZQUFZLHdCQUF3QixFQUFFLHdEQUF3RCxPQUFPLDRCQUE0QixFQUFFLEdBQUc7O0FBRXJMLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFOztBQUUzVCw2REFBNkQsc0VBQXNFLDhEQUE4RCxvQkFBb0I7O0FBRTFLO0FBQ0s7QUFDQTtBQUNOO0FBQ0M7QUFDQztBQUNhO0FBQ2xCO0FBQ1I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTs7QUFFQSxxRkFBcUY7QUFDckY7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIscURBQVM7QUFDcEM7QUFDQSxLQUFLLEVBQUUsaUVBQU07QUFDYjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsNEZBQTRGLGFBQWE7QUFDekc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0EsQ0FBQztBQUNjLGdFQUFPLEUiLCJmaWxlIjoiMjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5mcmVlemUuanNcIjtcblxudmFyIF90ZW1wbGF0ZU9iamVjdDtcblxuZnVuY3Rpb24gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChzdHJpbmdzLCByYXcpIHsgaWYgKCFyYXcpIHsgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTsgfSByZXR1cm4gT2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzdHJpbmdzLCB7IHJhdzogeyB2YWx1ZTogT2JqZWN0LmZyZWV6ZShyYXcpIH0gfSkpOyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzXCI7XG5pbXBvcnQgZGVwcmVjYXRlIGZyb20gJ3V0aWwtZGVwcmVjYXRlJztcbmltcG9ydCBkZWRlbnQgZnJvbSAndHMtZGVkZW50JztcblxudmFyIGdlbmVyYXRlUmFuZG9tSWQgPSBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUlkKCkge1xuICAvLyBnZW5lcmF0ZXMgYSByYW5kb20gMTMgY2hhcmFjdGVyIHN0cmluZ1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc2xpY2UoMik7XG59O1xuXG5leHBvcnQgdmFyIENoYW5uZWwgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDaGFubmVsKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgIHRyYW5zcG9ydCA9IF9yZWYudHJhbnNwb3J0LFxuICAgICAgICBfcmVmJGFzeW5jID0gX3JlZi5hc3luYyxcbiAgICAgICAgYXN5bmMgPSBfcmVmJGFzeW5jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkYXN5bmM7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2hhbm5lbCk7XG5cbiAgICB0aGlzLmlzQXN5bmMgPSB2b2lkIDA7XG4gICAgdGhpcy5zZW5kZXIgPSBnZW5lcmF0ZVJhbmRvbUlkKCk7XG4gICAgdGhpcy5ldmVudHMgPSB7fTtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLnRyYW5zcG9ydCA9IHZvaWQgMDtcbiAgICB0aGlzLmFkZFBlZXJMaXN0ZW5lciA9IGRlcHJlY2F0ZShmdW5jdGlvbiAoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgX3RoaXMuYWRkTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfSwgZGVkZW50KF90ZW1wbGF0ZU9iamVjdCB8fCAoX3RlbXBsYXRlT2JqZWN0ID0gX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbChbXCJcXG4gICAgICBjaGFubmVsLmFkZFBlZXJMaXN0ZW5lciBpcyBkZXByZWNhdGVkXFxuICAgIFwiXSkpKSk7XG4gICAgdGhpcy5pc0FzeW5jID0gYXN5bmM7XG5cbiAgICBpZiAodHJhbnNwb3J0KSB7XG4gICAgICB0aGlzLnRyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgIHRoaXMudHJhbnNwb3J0LnNldEhhbmRsZXIoZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVFdmVudChldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ2hhbm5lbCwgW3tcbiAgICBrZXk6IFwiaGFzVHJhbnNwb3J0XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnRyYW5zcG9ydDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkTGlzdGVuZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgdGhpcy5ldmVudHNbZXZlbnROYW1lXSA9IHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0gfHwgW107XG4gICAgICB0aGlzLmV2ZW50c1tldmVudE5hbWVdLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbWl0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50ID0ge1xuICAgICAgICB0eXBlOiBldmVudE5hbWUsXG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICAgIGZyb206IHRoaXMuc2VuZGVyXG4gICAgICB9O1xuICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcblxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID49IDEgJiYgYXJnc1swXSAmJiBhcmdzWzBdLm9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IGFyZ3NbMF0ub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgICBpZiAoX3RoaXMyLnRyYW5zcG9ydCkge1xuICAgICAgICAgIF90aGlzMi50cmFuc3BvcnQuc2VuZChldmVudCwgb3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczIuaGFuZGxlRXZlbnQoZXZlbnQpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuaXNBc3luYykge1xuICAgICAgICAvLyB0b2RvIEknbSBub3Qgc3VyZSBob3cgdG8gdGVzdCB0aGlzXG4gICAgICAgIHNldEltbWVkaWF0ZShoYW5kbGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRsZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibGFzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsYXN0KGV2ZW50TmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVtldmVudE5hbWVdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJldmVudE5hbWVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5ldmVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsaXN0ZW5lckNvdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZXZlbnROYW1lKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5saXN0ZW5lcnMoZXZlbnROYW1lKTtcbiAgICAgIHJldHVybiBsaXN0ZW5lcnMgPyBsaXN0ZW5lcnMubGVuZ3RoIDogMDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibGlzdGVuZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxpc3RlbmVycyhldmVudE5hbWUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmV2ZW50c1tldmVudE5hbWVdO1xuICAgICAgcmV0dXJuIGxpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9uY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb25jZShldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgb25jZUxpc3RlbmVyID0gdGhpcy5vbmNlTGlzdGVuZXIoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICB0aGlzLmFkZExpc3RlbmVyKGV2ZW50TmFtZSwgb25jZUxpc3RlbmVyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlQWxsTGlzdGVuZXJzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudE5hbWUpIHtcbiAgICAgIGlmICghZXZlbnROYW1lKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzID0ge307XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZUxpc3RlbmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycyhldmVudE5hbWUpO1xuXG4gICAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgIHRoaXMuZXZlbnRzW2V2ZW50TmFtZV0gPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgcmV0dXJuIGwgIT09IGxpc3RlbmVyO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnROYW1lLCBsaXN0ZW5lcikge1xuICAgICAgdGhpcy5hZGRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib2ZmXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYW5kbGVFdmVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudCkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IHRoaXMubGlzdGVuZXJzKGV2ZW50LnR5cGUpO1xuXG4gICAgICBpZiAobGlzdGVuZXJzICYmIGxpc3RlbmVycy5sZW5ndGgpIHtcbiAgICAgICAgbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgZm4uYXBwbHkoZXZlbnQsIGV2ZW50LmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRhW2V2ZW50LnR5cGVdID0gZXZlbnQuYXJncztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib25jZUxpc3RlbmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9uY2VMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIG9uY2VMaXN0ZW5lciA9IGZ1bmN0aW9uIG9uY2VMaXN0ZW5lcigpIHtcbiAgICAgICAgX3RoaXMzLnJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSwgb25jZUxpc3RlbmVyKTtcblxuICAgICAgICByZXR1cm4gbGlzdGVuZXIuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG9uY2VMaXN0ZW5lcjtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ2hhbm5lbDtcbn0oKTtcbmV4cG9ydCBkZWZhdWx0IENoYW5uZWw7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///264\n')},265: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__(184);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcz8zNDI1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBaUQ7QUFDbEM7QUFDZjtBQUNBO0FBQ0EsRUFBRSwwRUFBYztBQUNoQiIsImZpbGUiOiIyNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///265\n')},266:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(126);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvY3NzLmJyb3dzZXIuZXNtLmpzPzliY2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBcUQ7O0FBRXJEO0FBQ0EscUVBQXFFLGFBQWE7QUFDbEY7QUFDQTs7QUFFQSxTQUFTLGtGQUFlO0FBQ3hCOztBQUVlLDREQUFHLEVBQUMiLCJmaWxlIjoiMjY2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcblxuZnVuY3Rpb24gY3NzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6ZVN0eWxlcyhhcmdzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3NzO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///266\n')},271: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWNvcm4vZGlzdC9hY29ybi5tanM/YWZkYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsdUJBQXVCO0FBQ3ZCLHlCQUF5QjtBQUN6QjtBQUNBOztBQUVBOztBQUVBO0FBQ0Esa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsdUJBQXVCO0FBQ3ZCLHlCQUF5QjtBQUN6QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxzQ0FBc0M7QUFDM0M7QUFDQSxLQUFLLHVDQUF1QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxLQUFLLHNDQUFzQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7O0FBRUE7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUU2VCIsImZpbGUiOiIyNzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBSZXNlcnZlZCB3b3JkIGxpc3RzIGZvciB2YXJpb3VzIGRpYWxlY3RzIG9mIHRoZSBsYW5ndWFnZVxuXG52YXIgcmVzZXJ2ZWRXb3JkcyA9IHtcbiAgMzogXCJhYnN0cmFjdCBib29sZWFuIGJ5dGUgY2hhciBjbGFzcyBkb3VibGUgZW51bSBleHBvcnQgZXh0ZW5kcyBmaW5hbCBmbG9hdCBnb3RvIGltcGxlbWVudHMgaW1wb3J0IGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc2hvcnQgc3RhdGljIHN1cGVyIHN5bmNocm9uaXplZCB0aHJvd3MgdHJhbnNpZW50IHZvbGF0aWxlXCIsXG4gIDU6IFwiY2xhc3MgZW51bSBleHRlbmRzIHN1cGVyIGNvbnN0IGV4cG9ydCBpbXBvcnRcIixcbiAgNjogXCJlbnVtXCIsXG4gIHN0cmljdDogXCJpbXBsZW1lbnRzIGludGVyZmFjZSBsZXQgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgc3RhdGljIHlpZWxkXCIsXG4gIHN0cmljdEJpbmQ6IFwiZXZhbCBhcmd1bWVudHNcIlxufTtcblxuLy8gQW5kIHRoZSBrZXl3b3Jkc1xuXG52YXIgZWNtYTVBbmRMZXNzS2V5d29yZHMgPSBcImJyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkbyBlbHNlIGZpbmFsbHkgZm9yIGZ1bmN0aW9uIGlmIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ5IHZhciB3aGlsZSB3aXRoIG51bGwgdHJ1ZSBmYWxzZSBpbnN0YW5jZW9mIHR5cGVvZiB2b2lkIGRlbGV0ZSBuZXcgaW4gdGhpc1wiO1xuXG52YXIga2V5d29yZHMgPSB7XG4gIDU6IGVjbWE1QW5kTGVzc0tleXdvcmRzLFxuICBcIjVtb2R1bGVcIjogZWNtYTVBbmRMZXNzS2V5d29yZHMgKyBcIiBleHBvcnQgaW1wb3J0XCIsXG4gIDY6IGVjbWE1QW5kTGVzc0tleXdvcmRzICsgXCIgY29uc3QgY2xhc3MgZXh0ZW5kcyBleHBvcnQgaW1wb3J0IHN1cGVyXCJcbn07XG5cbnZhciBrZXl3b3JkUmVsYXRpb25hbE9wZXJhdG9yID0gL15pbihzdGFuY2VvZik/JC87XG5cbi8vICMjIENoYXJhY3RlciBjYXRlZ29yaWVzXG5cbi8vIEJpZyB1Z2x5IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBtYXRjaCBjaGFyYWN0ZXJzIGluIHRoZVxuLy8gd2hpdGVzcGFjZSwgaWRlbnRpZmllciwgYW5kIGlkZW50aWZpZXItc3RhcnQgY2F0ZWdvcmllcy4gVGhlc2Vcbi8vIGFyZSBvbmx5IGFwcGxpZWQgd2hlbiBhIGNoYXJhY3RlciBpcyBmb3VuZCB0byBhY3R1YWxseSBoYXZlIGFcbi8vIGNvZGUgcG9pbnQgYWJvdmUgMTI4LlxuLy8gR2VuZXJhdGVkIGJ5IGBiaW4vZ2VuZXJhdGUtaWRlbnRpZmllci1yZWdleC5qc2AuXG52YXIgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyA9IFwiXFx4YWFcXHhiNVxceGJhXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxcdTAyYzFcXHUwMmM2LVxcdTAyZDFcXHUwMmUwLVxcdTAyZTRcXHUwMmVjXFx1MDJlZVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3YS1cXHUwMzdkXFx1MDM3ZlxcdTAzODZcXHUwMzg4LVxcdTAzOGFcXHUwMzhjXFx1MDM4ZS1cXHUwM2ExXFx1MDNhMy1cXHUwM2Y1XFx1MDNmNy1cXHUwNDgxXFx1MDQ4YS1cXHUwNTJmXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1ZDAtXFx1MDVlYVxcdTA1ZWYtXFx1MDVmMlxcdTA2MjAtXFx1MDY0YVxcdTA2NmVcXHUwNjZmXFx1MDY3MS1cXHUwNmQzXFx1MDZkNVxcdTA2ZTVcXHUwNmU2XFx1MDZlZVxcdTA2ZWZcXHUwNmZhLVxcdTA2ZmNcXHUwNmZmXFx1MDcxMFxcdTA3MTItXFx1MDcyZlxcdTA3NGQtXFx1MDdhNVxcdTA3YjFcXHUwN2NhLVxcdTA3ZWFcXHUwN2Y0XFx1MDdmNVxcdTA3ZmFcXHUwODAwLVxcdTA4MTVcXHUwODFhXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NmFcXHUwOGEwLVxcdTA4YjRcXHUwOGI2LVxcdTA4YzdcXHUwOTA0LVxcdTA5MzlcXHUwOTNkXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Y1xcdTA5OGZcXHUwOTkwXFx1MDk5My1cXHUwOWE4XFx1MDlhYS1cXHUwOWIwXFx1MDliMlxcdTA5YjYtXFx1MDliOVxcdTA5YmRcXHUwOWNlXFx1MDlkY1xcdTA5ZGRcXHUwOWRmLVxcdTA5ZTFcXHUwOWYwXFx1MDlmMVxcdTA5ZmNcXHUwYTA1LVxcdTBhMGFcXHUwYTBmXFx1MGExMFxcdTBhMTMtXFx1MGEyOFxcdTBhMmEtXFx1MGEzMFxcdTBhMzJcXHUwYTMzXFx1MGEzNVxcdTBhMzZcXHUwYTM4XFx1MGEzOVxcdTBhNTktXFx1MGE1Y1xcdTBhNWVcXHUwYTcyLVxcdTBhNzRcXHUwYTg1LVxcdTBhOGRcXHUwYThmLVxcdTBhOTFcXHUwYTkzLVxcdTBhYThcXHUwYWFhLVxcdTBhYjBcXHUwYWIyXFx1MGFiM1xcdTBhYjUtXFx1MGFiOVxcdTBhYmRcXHUwYWQwXFx1MGFlMFxcdTBhZTFcXHUwYWY5XFx1MGIwNS1cXHUwYjBjXFx1MGIwZlxcdTBiMTBcXHUwYjEzLVxcdTBiMjhcXHUwYjJhLVxcdTBiMzBcXHUwYjMyXFx1MGIzM1xcdTBiMzUtXFx1MGIzOVxcdTBiM2RcXHUwYjVjXFx1MGI1ZFxcdTBiNWYtXFx1MGI2MVxcdTBiNzFcXHUwYjgzXFx1MGI4NS1cXHUwYjhhXFx1MGI4ZS1cXHUwYjkwXFx1MGI5Mi1cXHUwYjk1XFx1MGI5OVxcdTBiOWFcXHUwYjljXFx1MGI5ZVxcdTBiOWZcXHUwYmEzXFx1MGJhNFxcdTBiYTgtXFx1MGJhYVxcdTBiYWUtXFx1MGJiOVxcdTBiZDBcXHUwYzA1LVxcdTBjMGNcXHUwYzBlLVxcdTBjMTBcXHUwYzEyLVxcdTBjMjhcXHUwYzJhLVxcdTBjMzlcXHUwYzNkXFx1MGM1OC1cXHUwYzVhXFx1MGM2MFxcdTBjNjFcXHUwYzgwXFx1MGM4NS1cXHUwYzhjXFx1MGM4ZS1cXHUwYzkwXFx1MGM5Mi1cXHUwY2E4XFx1MGNhYS1cXHUwY2IzXFx1MGNiNS1cXHUwY2I5XFx1MGNiZFxcdTBjZGVcXHUwY2UwXFx1MGNlMVxcdTBjZjFcXHUwY2YyXFx1MGQwNC1cXHUwZDBjXFx1MGQwZS1cXHUwZDEwXFx1MGQxMi1cXHUwZDNhXFx1MGQzZFxcdTBkNGVcXHUwZDU0LVxcdTBkNTZcXHUwZDVmLVxcdTBkNjFcXHUwZDdhLVxcdTBkN2ZcXHUwZDg1LVxcdTBkOTZcXHUwZDlhLVxcdTBkYjFcXHUwZGIzLVxcdTBkYmJcXHUwZGJkXFx1MGRjMC1cXHUwZGM2XFx1MGUwMS1cXHUwZTMwXFx1MGUzMlxcdTBlMzNcXHUwZTQwLVxcdTBlNDZcXHUwZTgxXFx1MGU4MlxcdTBlODRcXHUwZTg2LVxcdTBlOGFcXHUwZThjLVxcdTBlYTNcXHUwZWE1XFx1MGVhNy1cXHUwZWIwXFx1MGViMlxcdTBlYjNcXHUwZWJkXFx1MGVjMC1cXHUwZWM0XFx1MGVjNlxcdTBlZGMtXFx1MGVkZlxcdTBmMDBcXHUwZjQwLVxcdTBmNDdcXHUwZjQ5LVxcdTBmNmNcXHUwZjg4LVxcdTBmOGNcXHUxMDAwLVxcdTEwMmFcXHUxMDNmXFx1MTA1MC1cXHUxMDU1XFx1MTA1YS1cXHUxMDVkXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2ZS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4ZVxcdTEwYTAtXFx1MTBjNVxcdTEwYzdcXHUxMGNkXFx1MTBkMC1cXHUxMGZhXFx1MTBmYy1cXHUxMjQ4XFx1MTI0YS1cXHUxMjRkXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNWEtXFx1MTI1ZFxcdTEyNjAtXFx1MTI4OFxcdTEyOGEtXFx1MTI4ZFxcdTEyOTAtXFx1MTJiMFxcdTEyYjItXFx1MTJiNVxcdTEyYjgtXFx1MTJiZVxcdTEyYzBcXHUxMmMyLVxcdTEyYzVcXHUxMmM4LVxcdTEyZDZcXHUxMmQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNWFcXHUxMzgwLVxcdTEzOGZcXHUxM2EwLVxcdTEzZjVcXHUxM2Y4LVxcdTEzZmRcXHUxNDAxLVxcdTE2NmNcXHUxNjZmLVxcdTE2N2ZcXHUxNjgxLVxcdTE2OWFcXHUxNmEwLVxcdTE2ZWFcXHUxNmVlLVxcdTE2ZjhcXHUxNzAwLVxcdTE3MGNcXHUxNzBlLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NmNcXHUxNzZlLVxcdTE3NzBcXHUxNzgwLVxcdTE3YjNcXHUxN2Q3XFx1MTdkY1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MThhOFxcdTE4YWFcXHUxOGIwLVxcdTE4ZjVcXHUxOTAwLVxcdTE5MWVcXHUxOTUwLVxcdTE5NmRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5YWJcXHUxOWIwLVxcdTE5YzlcXHUxYTAwLVxcdTFhMTZcXHUxYTIwLVxcdTFhNTRcXHUxYWE3XFx1MWIwNS1cXHUxYjMzXFx1MWI0NS1cXHUxYjRiXFx1MWI4My1cXHUxYmEwXFx1MWJhZVxcdTFiYWZcXHUxYmJhLVxcdTFiZTVcXHUxYzAwLVxcdTFjMjNcXHUxYzRkLVxcdTFjNGZcXHUxYzVhLVxcdTFjN2RcXHUxYzgwLVxcdTFjODhcXHUxYzkwLVxcdTFjYmFcXHUxY2JkLVxcdTFjYmZcXHUxY2U5LVxcdTFjZWNcXHUxY2VlLVxcdTFjZjNcXHUxY2Y1XFx1MWNmNlxcdTFjZmFcXHUxZDAwLVxcdTFkYmZcXHUxZTAwLVxcdTFmMTVcXHUxZjE4LVxcdTFmMWRcXHUxZjIwLVxcdTFmNDVcXHUxZjQ4LVxcdTFmNGRcXHUxZjUwLVxcdTFmNTdcXHUxZjU5XFx1MWY1YlxcdTFmNWRcXHUxZjVmLVxcdTFmN2RcXHUxZjgwLVxcdTFmYjRcXHUxZmI2LVxcdTFmYmNcXHUxZmJlXFx1MWZjMi1cXHUxZmM0XFx1MWZjNi1cXHUxZmNjXFx1MWZkMC1cXHUxZmQzXFx1MWZkNi1cXHUxZmRiXFx1MWZlMC1cXHUxZmVjXFx1MWZmMi1cXHUxZmY0XFx1MWZmNi1cXHUxZmZjXFx1MjA3MVxcdTIwN2ZcXHUyMDkwLVxcdTIwOWNcXHUyMTAyXFx1MjEwN1xcdTIxMGEtXFx1MjExM1xcdTIxMTVcXHUyMTE4LVxcdTIxMWRcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJhLVxcdTIxMzlcXHUyMTNjLVxcdTIxM2ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRlXFx1MjE2MC1cXHUyMTg4XFx1MmMwMC1cXHUyYzJlXFx1MmMzMC1cXHUyYzVlXFx1MmM2MC1cXHUyY2U0XFx1MmNlYi1cXHUyY2VlXFx1MmNmMlxcdTJjZjNcXHUyZDAwLVxcdTJkMjVcXHUyZDI3XFx1MmQyZFxcdTJkMzAtXFx1MmQ2N1xcdTJkNmZcXHUyZDgwLVxcdTJkOTZcXHUyZGEwLVxcdTJkYTZcXHUyZGE4LVxcdTJkYWVcXHUyZGIwLVxcdTJkYjZcXHUyZGI4LVxcdTJkYmVcXHUyZGMwLVxcdTJkYzZcXHUyZGM4LVxcdTJkY2VcXHUyZGQwLVxcdTJkZDZcXHUyZGQ4LVxcdTJkZGVcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM2NcXHUzMDQxLVxcdTMwOTZcXHUzMDliLVxcdTMwOWZcXHUzMGExLVxcdTMwZmFcXHUzMGZjLVxcdTMwZmZcXHUzMTA1LVxcdTMxMmZcXHUzMTMxLVxcdTMxOGVcXHUzMWEwLVxcdTMxYmZcXHUzMWYwLVxcdTMxZmZcXHUzNDAwLVxcdTRkYmZcXHU0ZTAwLVxcdTlmZmNcXHVhMDAwLVxcdWE0OGNcXHVhNGQwLVxcdWE0ZmRcXHVhNTAwLVxcdWE2MGNcXHVhNjEwLVxcdWE2MWZcXHVhNjJhXFx1YTYyYlxcdWE2NDAtXFx1YTY2ZVxcdWE2N2YtXFx1YTY5ZFxcdWE2YTAtXFx1YTZlZlxcdWE3MTctXFx1YTcxZlxcdWE3MjItXFx1YTc4OFxcdWE3OGItXFx1YTdiZlxcdWE3YzItXFx1YTdjYVxcdWE3ZjUtXFx1YTgwMVxcdWE4MDMtXFx1YTgwNVxcdWE4MDctXFx1YTgwYVxcdWE4MGMtXFx1YTgyMlxcdWE4NDAtXFx1YTg3M1xcdWE4ODItXFx1YThiM1xcdWE4ZjItXFx1YThmN1xcdWE4ZmJcXHVhOGZkXFx1YThmZVxcdWE5MGEtXFx1YTkyNVxcdWE5MzAtXFx1YTk0NlxcdWE5NjAtXFx1YTk3Y1xcdWE5ODQtXFx1YTliMlxcdWE5Y2ZcXHVhOWUwLVxcdWE5ZTRcXHVhOWU2LVxcdWE5ZWZcXHVhOWZhLVxcdWE5ZmVcXHVhYTAwLVxcdWFhMjhcXHVhYTQwLVxcdWFhNDJcXHVhYTQ0LVxcdWFhNGJcXHVhYTYwLVxcdWFhNzZcXHVhYTdhXFx1YWE3ZS1cXHVhYWFmXFx1YWFiMVxcdWFhYjVcXHVhYWI2XFx1YWFiOS1cXHVhYWJkXFx1YWFjMFxcdWFhYzJcXHVhYWRiLVxcdWFhZGRcXHVhYWUwLVxcdWFhZWFcXHVhYWYyLVxcdWFhZjRcXHVhYjAxLVxcdWFiMDZcXHVhYjA5LVxcdWFiMGVcXHVhYjExLVxcdWFiMTZcXHVhYjIwLVxcdWFiMjZcXHVhYjI4LVxcdWFiMmVcXHVhYjMwLVxcdWFiNWFcXHVhYjVjLVxcdWFiNjlcXHVhYjcwLVxcdWFiZTJcXHVhYzAwLVxcdWQ3YTNcXHVkN2IwLVxcdWQ3YzZcXHVkN2NiLVxcdWQ3ZmJcXHVmOTAwLVxcdWZhNmRcXHVmYTcwLVxcdWZhZDlcXHVmYjAwLVxcdWZiMDZcXHVmYjEzLVxcdWZiMTdcXHVmYjFkXFx1ZmIxZi1cXHVmYjI4XFx1ZmIyYS1cXHVmYjM2XFx1ZmIzOC1cXHVmYjNjXFx1ZmIzZVxcdWZiNDBcXHVmYjQxXFx1ZmI0M1xcdWZiNDRcXHVmYjQ2LVxcdWZiYjFcXHVmYmQzLVxcdWZkM2RcXHVmZDUwLVxcdWZkOGZcXHVmZDkyLVxcdWZkYzdcXHVmZGYwLVxcdWZkZmJcXHVmZTcwLVxcdWZlNzRcXHVmZTc2LVxcdWZlZmNcXHVmZjIxLVxcdWZmM2FcXHVmZjQxLVxcdWZmNWFcXHVmZjY2LVxcdWZmYmVcXHVmZmMyLVxcdWZmYzdcXHVmZmNhLVxcdWZmY2ZcXHVmZmQyLVxcdWZmZDdcXHVmZmRhLVxcdWZmZGNcIjtcbnZhciBub25BU0NJSWlkZW50aWZpZXJDaGFycyA9IFwiXFx1MjAwY1xcdTIwMGRcXHhiN1xcdTAzMDAtXFx1MDM2ZlxcdTAzODdcXHUwNDgzLVxcdTA0ODdcXHUwNTkxLVxcdTA1YmRcXHUwNWJmXFx1MDVjMVxcdTA1YzJcXHUwNWM0XFx1MDVjNVxcdTA1YzdcXHUwNjEwLVxcdTA2MWFcXHUwNjRiLVxcdTA2NjlcXHUwNjcwXFx1MDZkNi1cXHUwNmRjXFx1MDZkZi1cXHUwNmU0XFx1MDZlN1xcdTA2ZThcXHUwNmVhLVxcdTA2ZWRcXHUwNmYwLVxcdTA2ZjlcXHUwNzExXFx1MDczMC1cXHUwNzRhXFx1MDdhNi1cXHUwN2IwXFx1MDdjMC1cXHUwN2M5XFx1MDdlYi1cXHUwN2YzXFx1MDdmZFxcdTA4MTYtXFx1MDgxOVxcdTA4MWItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyZFxcdTA4NTktXFx1MDg1YlxcdTA4ZDMtXFx1MDhlMVxcdTA4ZTMtXFx1MDkwM1xcdTA5M2EtXFx1MDkzY1xcdTA5M2UtXFx1MDk0ZlxcdTA5NTEtXFx1MDk1N1xcdTA5NjJcXHUwOTYzXFx1MDk2Ni1cXHUwOTZmXFx1MDk4MS1cXHUwOTgzXFx1MDliY1xcdTA5YmUtXFx1MDljNFxcdTA5YzdcXHUwOWM4XFx1MDljYi1cXHUwOWNkXFx1MDlkN1xcdTA5ZTJcXHUwOWUzXFx1MDllNi1cXHUwOWVmXFx1MDlmZVxcdTBhMDEtXFx1MGEwM1xcdTBhM2NcXHUwYTNlLVxcdTBhNDJcXHUwYTQ3XFx1MGE0OFxcdTBhNGItXFx1MGE0ZFxcdTBhNTFcXHUwYTY2LVxcdTBhNzFcXHUwYTc1XFx1MGE4MS1cXHUwYTgzXFx1MGFiY1xcdTBhYmUtXFx1MGFjNVxcdTBhYzctXFx1MGFjOVxcdTBhY2ItXFx1MGFjZFxcdTBhZTJcXHUwYWUzXFx1MGFlNi1cXHUwYWVmXFx1MGFmYS1cXHUwYWZmXFx1MGIwMS1cXHUwYjAzXFx1MGIzY1xcdTBiM2UtXFx1MGI0NFxcdTBiNDdcXHUwYjQ4XFx1MGI0Yi1cXHUwYjRkXFx1MGI1NS1cXHUwYjU3XFx1MGI2MlxcdTBiNjNcXHUwYjY2LVxcdTBiNmZcXHUwYjgyXFx1MGJiZS1cXHUwYmMyXFx1MGJjNi1cXHUwYmM4XFx1MGJjYS1cXHUwYmNkXFx1MGJkN1xcdTBiZTYtXFx1MGJlZlxcdTBjMDAtXFx1MGMwNFxcdTBjM2UtXFx1MGM0NFxcdTBjNDYtXFx1MGM0OFxcdTBjNGEtXFx1MGM0ZFxcdTBjNTVcXHUwYzU2XFx1MGM2MlxcdTBjNjNcXHUwYzY2LVxcdTBjNmZcXHUwYzgxLVxcdTBjODNcXHUwY2JjXFx1MGNiZS1cXHUwY2M0XFx1MGNjNi1cXHUwY2M4XFx1MGNjYS1cXHUwY2NkXFx1MGNkNVxcdTBjZDZcXHUwY2UyXFx1MGNlM1xcdTBjZTYtXFx1MGNlZlxcdTBkMDAtXFx1MGQwM1xcdTBkM2JcXHUwZDNjXFx1MGQzZS1cXHUwZDQ0XFx1MGQ0Ni1cXHUwZDQ4XFx1MGQ0YS1cXHUwZDRkXFx1MGQ1N1xcdTBkNjJcXHUwZDYzXFx1MGQ2Ni1cXHUwZDZmXFx1MGQ4MS1cXHUwZDgzXFx1MGRjYVxcdTBkY2YtXFx1MGRkNFxcdTBkZDZcXHUwZGQ4LVxcdTBkZGZcXHUwZGU2LVxcdTBkZWZcXHUwZGYyXFx1MGRmM1xcdTBlMzFcXHUwZTM0LVxcdTBlM2FcXHUwZTQ3LVxcdTBlNGVcXHUwZTUwLVxcdTBlNTlcXHUwZWIxXFx1MGViNC1cXHUwZWJjXFx1MGVjOC1cXHUwZWNkXFx1MGVkMC1cXHUwZWQ5XFx1MGYxOFxcdTBmMTlcXHUwZjIwLVxcdTBmMjlcXHUwZjM1XFx1MGYzN1xcdTBmMzlcXHUwZjNlXFx1MGYzZlxcdTBmNzEtXFx1MGY4NFxcdTBmODZcXHUwZjg3XFx1MGY4ZC1cXHUwZjk3XFx1MGY5OS1cXHUwZmJjXFx1MGZjNlxcdTEwMmItXFx1MTAzZVxcdTEwNDAtXFx1MTA0OVxcdTEwNTYtXFx1MTA1OVxcdTEwNWUtXFx1MTA2MFxcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2ZFxcdTEwNzEtXFx1MTA3NFxcdTEwODItXFx1MTA4ZFxcdTEwOGYtXFx1MTA5ZFxcdTEzNWQtXFx1MTM1ZlxcdTEzNjktXFx1MTM3MVxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN2I0LVxcdTE3ZDNcXHUxN2RkXFx1MTdlMC1cXHUxN2U5XFx1MTgwYi1cXHUxODBkXFx1MTgxMC1cXHUxODE5XFx1MThhOVxcdTE5MjAtXFx1MTkyYlxcdTE5MzAtXFx1MTkzYlxcdTE5NDYtXFx1MTk0ZlxcdTE5ZDAtXFx1MTlkYVxcdTFhMTctXFx1MWExYlxcdTFhNTUtXFx1MWE1ZVxcdTFhNjAtXFx1MWE3Y1xcdTFhN2YtXFx1MWE4OVxcdTFhOTAtXFx1MWE5OVxcdTFhYjAtXFx1MWFiZFxcdTFhYmZcXHUxYWMwXFx1MWIwMC1cXHUxYjA0XFx1MWIzNC1cXHUxYjQ0XFx1MWI1MC1cXHUxYjU5XFx1MWI2Yi1cXHUxYjczXFx1MWI4MC1cXHUxYjgyXFx1MWJhMS1cXHUxYmFkXFx1MWJiMC1cXHUxYmI5XFx1MWJlNi1cXHUxYmYzXFx1MWMyNC1cXHUxYzM3XFx1MWM0MC1cXHUxYzQ5XFx1MWM1MC1cXHUxYzU5XFx1MWNkMC1cXHUxY2QyXFx1MWNkNC1cXHUxY2U4XFx1MWNlZFxcdTFjZjRcXHUxY2Y3LVxcdTFjZjlcXHUxZGMwLVxcdTFkZjlcXHUxZGZiLVxcdTFkZmZcXHUyMDNmXFx1MjA0MFxcdTIwNTRcXHUyMGQwLVxcdTIwZGNcXHUyMGUxXFx1MjBlNS1cXHUyMGYwXFx1MmNlZi1cXHUyY2YxXFx1MmQ3ZlxcdTJkZTAtXFx1MmRmZlxcdTMwMmEtXFx1MzAyZlxcdTMwOTlcXHUzMDlhXFx1YTYyMC1cXHVhNjI5XFx1YTY2ZlxcdWE2NzQtXFx1YTY3ZFxcdWE2OWVcXHVhNjlmXFx1YTZmMFxcdWE2ZjFcXHVhODAyXFx1YTgwNlxcdWE4MGJcXHVhODIzLVxcdWE4MjdcXHVhODJjXFx1YTg4MFxcdWE4ODFcXHVhOGI0LVxcdWE4YzVcXHVhOGQwLVxcdWE4ZDlcXHVhOGUwLVxcdWE4ZjFcXHVhOGZmLVxcdWE5MDlcXHVhOTI2LVxcdWE5MmRcXHVhOTQ3LVxcdWE5NTNcXHVhOTgwLVxcdWE5ODNcXHVhOWIzLVxcdWE5YzBcXHVhOWQwLVxcdWE5ZDlcXHVhOWU1XFx1YTlmMC1cXHVhOWY5XFx1YWEyOS1cXHVhYTM2XFx1YWE0M1xcdWFhNGNcXHVhYTRkXFx1YWE1MC1cXHVhYTU5XFx1YWE3Yi1cXHVhYTdkXFx1YWFiMFxcdWFhYjItXFx1YWFiNFxcdWFhYjdcXHVhYWI4XFx1YWFiZVxcdWFhYmZcXHVhYWMxXFx1YWFlYi1cXHVhYWVmXFx1YWFmNVxcdWFhZjZcXHVhYmUzLVxcdWFiZWFcXHVhYmVjXFx1YWJlZFxcdWFiZjAtXFx1YWJmOVxcdWZiMWVcXHVmZTAwLVxcdWZlMGZcXHVmZTIwLVxcdWZlMmZcXHVmZTMzXFx1ZmUzNFxcdWZlNGQtXFx1ZmU0ZlxcdWZmMTAtXFx1ZmYxOVxcdWZmM2ZcIjtcblxudmFyIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0ID0gbmV3IFJlZ0V4cChcIltcIiArIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBcIl1cIik7XG52YXIgbm9uQVNDSUlpZGVudGlmaWVyID0gbmV3IFJlZ0V4cChcIltcIiArIG5vbkFTQ0lJaWRlbnRpZmllclN0YXJ0Q2hhcnMgKyBub25BU0NJSWlkZW50aWZpZXJDaGFycyArIFwiXVwiKTtcblxubm9uQVNDSUlpZGVudGlmaWVyU3RhcnRDaGFycyA9IG5vbkFTQ0lJaWRlbnRpZmllckNoYXJzID0gbnVsbDtcblxuLy8gVGhlc2UgYXJlIGEgcnVuLWxlbmd0aCBhbmQgb2Zmc2V0IGVuY29kZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlXG4vLyA+MHhmZmZmIGNvZGUgcG9pbnRzIHRoYXQgYXJlIGEgdmFsaWQgcGFydCBvZiBpZGVudGlmaWVycy4gVGhlXG4vLyBvZmZzZXQgc3RhcnRzIGF0IDB4MTAwMDAsIGFuZCBlYWNoIHBhaXIgb2YgbnVtYmVycyByZXByZXNlbnRzIGFuXG4vLyBvZmZzZXQgdG8gdGhlIG5leHQgcmFuZ2UsIGFuZCB0aGVuIGEgc2l6ZSBvZiB0aGUgcmFuZ2UuIFRoZXkgd2VyZVxuLy8gZ2VuZXJhdGVkIGJ5IGJpbi9nZW5lcmF0ZS1pZGVudGlmaWVyLXJlZ2V4LmpzXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21tYS1zcGFjaW5nXG52YXIgYXN0cmFsSWRlbnRpZmllclN0YXJ0Q29kZXMgPSBbMCwxMSwyLDI1LDIsMTgsMiwxLDIsMTQsMywxMywzNSwxMjIsNzAsNTIsMjY4LDI4LDQsNDgsNDgsMzEsMTQsMjksNiwzNywxMSwyOSwzLDM1LDUsNywyLDQsNDMsMTU3LDE5LDM1LDUsMzUsNSwzOSw5LDUxLDE1NywzMTAsMTAsMjEsMTEsNywxNTMsNSwzLDAsMiw0MywyLDEsNCwwLDMsMjIsMTEsMjIsMTAsMzAsNjYsMTgsMiwxLDExLDIxLDExLDI1LDcxLDU1LDcsMSw2NSwwLDE2LDMsMiwyLDIsMjgsNDMsMjgsNCwyOCwzNiw3LDIsMjcsMjgsNTMsMTEsMjEsMTEsMTgsMTQsMTcsMTExLDcyLDU2LDUwLDE0LDUwLDE0LDM1LDM0OSw0MSw3LDEsNzksMjgsMTEsMCw5LDIxLDEwNywyMCwyOCwyMiwxMyw1Miw3Niw0NCwzMywyNCwyNywzNSwzMCwwLDMsMCw5LDM0LDQsMCwxMyw0NywxNSwzLDIyLDAsMiwwLDM2LDE3LDIsMjQsODUsNiwyLDAsMiwzLDIsMTQsMiw5LDgsNDYsMzksNywzLDEsMywyMSwyLDYsMiwxLDIsNCw0LDAsMTksMCwxMyw0LDE1OSw1MiwxOSwzLDIxLDIsMzEsNDcsMjEsMSwyLDAsMTg1LDQ2LDQyLDMsMzcsNDcsMjEsMCw2MCw0MiwxNCwwLDcyLDI2LDIzMCw0MywxMTcsNjMsMzIsNywzLDAsMyw3LDIsMSwyLDIzLDE2LDAsMiwwLDk1LDcsMywzOCwxNywwLDIsMCwyOSwwLDExLDM5LDgsMCwyMiwwLDEyLDQ1LDIwLDAsMzUsNTYsMjY0LDgsMiwzNiwxOCwwLDUwLDI5LDExMyw2LDIsMSwyLDM3LDIyLDAsMjYsNSwyLDEsMiwzMSwxNSwwLDMyOCwxOCwxOTAsMCw4MCw5MjEsMTAzLDExMCwxOCwxOTUsMjc0OSwxMDcwLDQwNTAsNTgyLDg2MzQsNTY4LDgsMzAsMTE0LDI5LDE5LDQ3LDE3LDMsMzIsMjAsNiwxOCw2ODksNjMsMTI5LDc0LDYsMCw2NywxMiw2NSwxLDIsMCwyOSw2MTM1LDksMTIzNyw0Myw4LDg5NTIsMjg2LDUwLDIsMTgsMyw5LDM5NSwyMzA5LDEwNiw2LDEyLDQsOCw4LDksNTk5MSw4NCwyLDcwLDIsMSwzLDAsMywxLDMsMywyLDExLDIsMCwyLDYsMiw2NCwyLDMsMyw3LDIsNiwyLDI3LDIsMywyLDQsMiwwLDQsNiwyLDMzOSwzLDI0LDIsMjQsMiwzMCwyLDI0LDIsMzAsMiwyNCwyLDMwLDIsMjQsMiwzMCwyLDI0LDIsNywyMzU3LDQ0LDExLDYsMTcsMCwzNzAsNDMsMTMwMSwxOTYsNjAsNjcsOCwwLDEyMDUsMywyLDI2LDIsMSwyLDAsMywwLDIsOSwyLDMsMiwwLDIsMCw3LDAsNSwwLDIsMCwyLDAsMiwyLDIsMSwyLDAsMywwLDIsMCwyLDAsMiwwLDIsMCwyLDEsMiwwLDMsMywyLDYsMiwzLDIsMywyLDAsMiw5LDIsMTYsNiwyLDIsNCwyLDE2LDQ0MjEsNDI3MTcsMzUsNDE0OCwxMiwyMjEsMyw1NzYxLDE1LDc0NzIsMzEwNCw1NDEsMTUwNyw0OTM4XTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbW1hLXNwYWNpbmdcbnZhciBhc3RyYWxJZGVudGlmaWVyQ29kZXMgPSBbNTA5LDAsMjI3LDAsMTUwLDQsMjk0LDksMTM2OCwyLDIsMSw2LDMsNDEsMiw1LDAsMTY2LDEsNTc0LDMsOSw5LDM3MCwxLDE1NCwxMCwxNzYsMiw1NCwxNCwzMiw5LDE2LDMsNDYsMTAsNTQsOSw3LDIsMzcsMTMsMiw5LDYsMSw0NSwwLDEzLDIsNDksMTMsOSwzLDIsMTEsODMsMTEsNywwLDE2MSwxMSw2LDksNywzLDU2LDEsMiw2LDMsMSwzLDIsMTAsMCwxMSwxLDMsNiw0LDQsMTkzLDE3LDEwLDksNSwwLDgyLDE5LDEzLDksMjE0LDYsMyw4LDI4LDEsODMsMTYsMTYsOSw4MiwxMiw5LDksODQsMTQsNSw5LDI0MywxNCwxNjYsOSw3MSw1LDIsMSwzLDMsMiwwLDIsMSwxMyw5LDEyMCw2LDMsNiw0LDAsMjksOSw0MSw2LDIsMyw5LDAsMTAsMTAsNDcsMTUsNDA2LDcsMiw3LDE3LDksNTcsMjEsMiwxMywxMjMsNSw0LDAsMiwxLDIsNiwyLDAsOSw5LDQ5LDQsMiwxLDIsNCw5LDksMzMwLDMsMTkzMDYsOSwxMzUsNCw2MCw2LDI2LDksMTAxNCwwLDIsNTQsOCwzLDgyLDAsMTIsMSwxOTYyOCwxLDUzMTksNCw0LDUsOSw3LDMsNiwzMSwzLDE0OSwyLDE0MTgsNDksNTEzLDU0LDUsNDksOSwwLDE1LDAsMjMsNCwyLDE0LDEzNjEsNiwyLDE2LDMsNiwyLDEsMiw0LDI2Miw2LDEwLDksNDE5LDEzLDE0OTUsNiwxMTAsNiw2LDksNDc1OSw5LDc4NzcxOSwyMzldO1xuXG4vLyBUaGlzIGhhcyBhIGNvbXBsZXhpdHkgbGluZWFyIHRvIHRoZSB2YWx1ZSBvZiB0aGUgY29kZS4gVGhlXG4vLyBhc3N1bXB0aW9uIGlzIHRoYXQgbG9va2luZyB1cCBhc3RyYWwgaWRlbnRpZmllciBjaGFyYWN0ZXJzIGlzXG4vLyByYXJlLlxuZnVuY3Rpb24gaXNJbkFzdHJhbFNldChjb2RlLCBzZXQpIHtcbiAgdmFyIHBvcyA9IDB4MTAwMDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0Lmxlbmd0aDsgaSArPSAyKSB7XG4gICAgcG9zICs9IHNldFtpXTtcbiAgICBpZiAocG9zID4gY29kZSkgeyByZXR1cm4gZmFsc2UgfVxuICAgIHBvcyArPSBzZXRbaSArIDFdO1xuICAgIGlmIChwb3MgPj0gY29kZSkgeyByZXR1cm4gdHJ1ZSB9XG4gIH1cbn1cblxuLy8gVGVzdCB3aGV0aGVyIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUgc3RhcnRzIGFuIGlkZW50aWZpZXIuXG5cbmZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNvZGUsIGFzdHJhbCkge1xuICBpZiAoY29kZSA8IDY1KSB7IHJldHVybiBjb2RlID09PSAzNiB9XG4gIGlmIChjb2RlIDwgOTEpIHsgcmV0dXJuIHRydWUgfVxuICBpZiAoY29kZSA8IDk3KSB7IHJldHVybiBjb2RlID09PSA5NSB9XG4gIGlmIChjb2RlIDwgMTIzKSB7IHJldHVybiB0cnVlIH1cbiAgaWYgKGNvZGUgPD0gMHhmZmZmKSB7IHJldHVybiBjb2RlID49IDB4YWEgJiYgbm9uQVNDSUlpZGVudGlmaWVyU3RhcnQudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpKSB9XG4gIGlmIChhc3RyYWwgPT09IGZhbHNlKSB7IHJldHVybiBmYWxzZSB9XG4gIHJldHVybiBpc0luQXN0cmFsU2V0KGNvZGUsIGFzdHJhbElkZW50aWZpZXJTdGFydENvZGVzKVxufVxuXG4vLyBUZXN0IHdoZXRoZXIgYSBnaXZlbiBjaGFyYWN0ZXIgaXMgcGFydCBvZiBhbiBpZGVudGlmaWVyLlxuXG5mdW5jdGlvbiBpc0lkZW50aWZpZXJDaGFyKGNvZGUsIGFzdHJhbCkge1xuICBpZiAoY29kZSA8IDQ4KSB7IHJldHVybiBjb2RlID09PSAzNiB9XG4gIGlmIChjb2RlIDwgNTgpIHsgcmV0dXJuIHRydWUgfVxuICBpZiAoY29kZSA8IDY1KSB7IHJldHVybiBmYWxzZSB9XG4gIGlmIChjb2RlIDwgOTEpIHsgcmV0dXJuIHRydWUgfVxuICBpZiAoY29kZSA8IDk3KSB7IHJldHVybiBjb2RlID09PSA5NSB9XG4gIGlmIChjb2RlIDwgMTIzKSB7IHJldHVybiB0cnVlIH1cbiAgaWYgKGNvZGUgPD0gMHhmZmZmKSB7IHJldHVybiBjb2RlID49IDB4YWEgJiYgbm9uQVNDSUlpZGVudGlmaWVyLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSkgfVxuICBpZiAoYXN0cmFsID09PSBmYWxzZSkgeyByZXR1cm4gZmFsc2UgfVxuICByZXR1cm4gaXNJbkFzdHJhbFNldChjb2RlLCBhc3RyYWxJZGVudGlmaWVyU3RhcnRDb2RlcykgfHwgaXNJbkFzdHJhbFNldChjb2RlLCBhc3RyYWxJZGVudGlmaWVyQ29kZXMpXG59XG5cbi8vICMjIFRva2VuIHR5cGVzXG5cbi8vIFRoZSBhc3NpZ25tZW50IG9mIGZpbmUtZ3JhaW5lZCwgaW5mb3JtYXRpb24tY2FycnlpbmcgdHlwZSBvYmplY3RzXG4vLyBhbGxvd3MgdGhlIHRva2VuaXplciB0byBzdG9yZSB0aGUgaW5mb3JtYXRpb24gaXQgaGFzIGFib3V0IGFcbi8vIHRva2VuIGluIGEgd2F5IHRoYXQgaXMgdmVyeSBjaGVhcCBmb3IgdGhlIHBhcnNlciB0byBsb29rIHVwLlxuXG4vLyBBbGwgdG9rZW4gdHlwZSB2YXJpYWJsZXMgc3RhcnQgd2l0aCBhbiB1bmRlcnNjb3JlLCB0byBtYWtlIHRoZW1cbi8vIGVhc3kgdG8gcmVjb2duaXplLlxuXG4vLyBUaGUgYGJlZm9yZUV4cHJgIHByb3BlcnR5IGlzIHVzZWQgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gcmVndWxhclxuLy8gZXhwcmVzc2lvbnMgYW5kIGRpdmlzaW9ucy4gSXQgaXMgc2V0IG9uIGFsbCB0b2tlbiB0eXBlcyB0aGF0IGNhblxuLy8gYmUgZm9sbG93ZWQgYnkgYW4gZXhwcmVzc2lvbiAodGh1cywgYSBzbGFzaCBhZnRlciB0aGVtIHdvdWxkIGJlIGFcbi8vIHJlZ3VsYXIgZXhwcmVzc2lvbikuXG4vL1xuLy8gVGhlIGBzdGFydHNFeHByYCBwcm9wZXJ0eSBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSB0b2tlbiBlbmRzIGFcbi8vIGB5aWVsZGAgZXhwcmVzc2lvbi4gSXQgaXMgc2V0IG9uIGFsbCB0b2tlbiB0eXBlcyB0aGF0IGVpdGhlciBjYW5cbi8vIGRpcmVjdGx5IHN0YXJ0IGFuIGV4cHJlc3Npb24gKGxpa2UgYSBxdW90YXRpb24gbWFyaykgb3IgY2FuXG4vLyBjb250aW51ZSBhbiBleHByZXNzaW9uIChsaWtlIHRoZSBib2R5IG9mIGEgc3RyaW5nKS5cbi8vXG4vLyBgaXNMb29wYCBtYXJrcyBhIGtleXdvcmQgYXMgc3RhcnRpbmcgYSBsb29wLCB3aGljaCBpcyBpbXBvcnRhbnRcbi8vIHRvIGtub3cgd2hlbiBwYXJzaW5nIGEgbGFiZWwsIGluIG9yZGVyIHRvIGFsbG93IG9yIGRpc2FsbG93XG4vLyBjb250aW51ZSBqdW1wcyB0byB0aGF0IGxhYmVsLlxuXG52YXIgVG9rZW5UeXBlID0gZnVuY3Rpb24gVG9rZW5UeXBlKGxhYmVsLCBjb25mKSB7XG4gIGlmICggY29uZiA9PT0gdm9pZCAwICkgY29uZiA9IHt9O1xuXG4gIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgdGhpcy5rZXl3b3JkID0gY29uZi5rZXl3b3JkO1xuICB0aGlzLmJlZm9yZUV4cHIgPSAhIWNvbmYuYmVmb3JlRXhwcjtcbiAgdGhpcy5zdGFydHNFeHByID0gISFjb25mLnN0YXJ0c0V4cHI7XG4gIHRoaXMuaXNMb29wID0gISFjb25mLmlzTG9vcDtcbiAgdGhpcy5pc0Fzc2lnbiA9ICEhY29uZi5pc0Fzc2lnbjtcbiAgdGhpcy5wcmVmaXggPSAhIWNvbmYucHJlZml4O1xuICB0aGlzLnBvc3RmaXggPSAhIWNvbmYucG9zdGZpeDtcbiAgdGhpcy5iaW5vcCA9IGNvbmYuYmlub3AgfHwgbnVsbDtcbiAgdGhpcy51cGRhdGVDb250ZXh0ID0gbnVsbDtcbn07XG5cbmZ1bmN0aW9uIGJpbm9wKG5hbWUsIHByZWMpIHtcbiAgcmV0dXJuIG5ldyBUb2tlblR5cGUobmFtZSwge2JlZm9yZUV4cHI6IHRydWUsIGJpbm9wOiBwcmVjfSlcbn1cbnZhciBiZWZvcmVFeHByID0ge2JlZm9yZUV4cHI6IHRydWV9LCBzdGFydHNFeHByID0ge3N0YXJ0c0V4cHI6IHRydWV9O1xuXG4vLyBNYXAga2V5d29yZCBuYW1lcyB0byB0b2tlbiB0eXBlcy5cblxudmFyIGtleXdvcmRzJDEgPSB7fTtcblxuLy8gU3VjY2luY3QgZGVmaW5pdGlvbnMgb2Yga2V5d29yZCB0b2tlbiB0eXBlc1xuZnVuY3Rpb24ga3cobmFtZSwgb3B0aW9ucykge1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICBvcHRpb25zLmtleXdvcmQgPSBuYW1lO1xuICByZXR1cm4ga2V5d29yZHMkMVtuYW1lXSA9IG5ldyBUb2tlblR5cGUobmFtZSwgb3B0aW9ucylcbn1cblxudmFyIHR5cGVzID0ge1xuICBudW06IG5ldyBUb2tlblR5cGUoXCJudW1cIiwgc3RhcnRzRXhwciksXG4gIHJlZ2V4cDogbmV3IFRva2VuVHlwZShcInJlZ2V4cFwiLCBzdGFydHNFeHByKSxcbiAgc3RyaW5nOiBuZXcgVG9rZW5UeXBlKFwic3RyaW5nXCIsIHN0YXJ0c0V4cHIpLFxuICBuYW1lOiBuZXcgVG9rZW5UeXBlKFwibmFtZVwiLCBzdGFydHNFeHByKSxcbiAgZW9mOiBuZXcgVG9rZW5UeXBlKFwiZW9mXCIpLFxuXG4gIC8vIFB1bmN0dWF0aW9uIHRva2VuIHR5cGVzLlxuICBicmFja2V0TDogbmV3IFRva2VuVHlwZShcIltcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgYnJhY2tldFI6IG5ldyBUb2tlblR5cGUoXCJdXCIpLFxuICBicmFjZUw6IG5ldyBUb2tlblR5cGUoXCJ7XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG4gIGJyYWNlUjogbmV3IFRva2VuVHlwZShcIn1cIiksXG4gIHBhcmVuTDogbmV3IFRva2VuVHlwZShcIihcIiwge2JlZm9yZUV4cHI6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgcGFyZW5SOiBuZXcgVG9rZW5UeXBlKFwiKVwiKSxcbiAgY29tbWE6IG5ldyBUb2tlblR5cGUoXCIsXCIsIGJlZm9yZUV4cHIpLFxuICBzZW1pOiBuZXcgVG9rZW5UeXBlKFwiO1wiLCBiZWZvcmVFeHByKSxcbiAgY29sb246IG5ldyBUb2tlblR5cGUoXCI6XCIsIGJlZm9yZUV4cHIpLFxuICBkb3Q6IG5ldyBUb2tlblR5cGUoXCIuXCIpLFxuICBxdWVzdGlvbjogbmV3IFRva2VuVHlwZShcIj9cIiwgYmVmb3JlRXhwciksXG4gIHF1ZXN0aW9uRG90OiBuZXcgVG9rZW5UeXBlKFwiPy5cIiksXG4gIGFycm93OiBuZXcgVG9rZW5UeXBlKFwiPT5cIiwgYmVmb3JlRXhwciksXG4gIHRlbXBsYXRlOiBuZXcgVG9rZW5UeXBlKFwidGVtcGxhdGVcIiksXG4gIGludmFsaWRUZW1wbGF0ZTogbmV3IFRva2VuVHlwZShcImludmFsaWRUZW1wbGF0ZVwiKSxcbiAgZWxsaXBzaXM6IG5ldyBUb2tlblR5cGUoXCIuLi5cIiwgYmVmb3JlRXhwciksXG4gIGJhY2tRdW90ZTogbmV3IFRva2VuVHlwZShcImBcIiwgc3RhcnRzRXhwciksXG4gIGRvbGxhckJyYWNlTDogbmV3IFRva2VuVHlwZShcIiR7XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBzdGFydHNFeHByOiB0cnVlfSksXG5cbiAgLy8gT3BlcmF0b3JzLiBUaGVzZSBjYXJyeSBzZXZlcmFsIGtpbmRzIG9mIHByb3BlcnRpZXMgdG8gaGVscCB0aGVcbiAgLy8gcGFyc2VyIHVzZSB0aGVtIHByb3Blcmx5ICh0aGUgcHJlc2VuY2Ugb2YgdGhlc2UgcHJvcGVydGllcyBpc1xuICAvLyB3aGF0IGNhdGVnb3JpemVzIHRoZW0gYXMgb3BlcmF0b3JzKS5cbiAgLy9cbiAgLy8gYGJpbm9wYCwgd2hlbiBwcmVzZW50LCBzcGVjaWZpZXMgdGhhdCB0aGlzIG9wZXJhdG9yIGlzIGEgYmluYXJ5XG4gIC8vIG9wZXJhdG9yLCBhbmQgd2lsbCByZWZlciB0byBpdHMgcHJlY2VkZW5jZS5cbiAgLy9cbiAgLy8gYHByZWZpeGAgYW5kIGBwb3N0Zml4YCBtYXJrIHRoZSBvcGVyYXRvciBhcyBhIHByZWZpeCBvciBwb3N0Zml4XG4gIC8vIHVuYXJ5IG9wZXJhdG9yLlxuICAvL1xuICAvLyBgaXNBc3NpZ25gIG1hcmtzIGFsbCBvZiBgPWAsIGArPWAsIGAtPWAgZXRjZXRlcmEsIHdoaWNoIGFjdCBhc1xuICAvLyBiaW5hcnkgb3BlcmF0b3JzIHdpdGggYSB2ZXJ5IGxvdyBwcmVjZWRlbmNlLCB0aGF0IHNob3VsZCByZXN1bHRcbiAgLy8gaW4gQXNzaWdubWVudEV4cHJlc3Npb24gbm9kZXMuXG5cbiAgZXE6IG5ldyBUb2tlblR5cGUoXCI9XCIsIHtiZWZvcmVFeHByOiB0cnVlLCBpc0Fzc2lnbjogdHJ1ZX0pLFxuICBhc3NpZ246IG5ldyBUb2tlblR5cGUoXCJfPVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgaXNBc3NpZ246IHRydWV9KSxcbiAgaW5jRGVjOiBuZXcgVG9rZW5UeXBlKFwiKysvLS1cIiwge3ByZWZpeDogdHJ1ZSwgcG9zdGZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBwcmVmaXg6IG5ldyBUb2tlblR5cGUoXCIhL35cIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBsb2dpY2FsT1I6IGJpbm9wKFwifHxcIiwgMSksXG4gIGxvZ2ljYWxBTkQ6IGJpbm9wKFwiJiZcIiwgMiksXG4gIGJpdHdpc2VPUjogYmlub3AoXCJ8XCIsIDMpLFxuICBiaXR3aXNlWE9SOiBiaW5vcChcIl5cIiwgNCksXG4gIGJpdHdpc2VBTkQ6IGJpbm9wKFwiJlwiLCA1KSxcbiAgZXF1YWxpdHk6IGJpbm9wKFwiPT0vIT0vPT09LyE9PVwiLCA2KSxcbiAgcmVsYXRpb25hbDogYmlub3AoXCI8Lz4vPD0vPj1cIiwgNyksXG4gIGJpdFNoaWZ0OiBiaW5vcChcIjw8Lz4+Lz4+PlwiLCA4KSxcbiAgcGx1c01pbjogbmV3IFRva2VuVHlwZShcIisvLVwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDksIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBtb2R1bG86IGJpbm9wKFwiJVwiLCAxMCksXG4gIHN0YXI6IGJpbm9wKFwiKlwiLCAxMCksXG4gIHNsYXNoOiBiaW5vcChcIi9cIiwgMTApLFxuICBzdGFyc3RhcjogbmV3IFRva2VuVHlwZShcIioqXCIsIHtiZWZvcmVFeHByOiB0cnVlfSksXG4gIGNvYWxlc2NlOiBiaW5vcChcIj8/XCIsIDEpLFxuXG4gIC8vIEtleXdvcmQgdG9rZW4gdHlwZXMuXG4gIF9icmVhazoga3coXCJicmVha1wiKSxcbiAgX2Nhc2U6IGt3KFwiY2FzZVwiLCBiZWZvcmVFeHByKSxcbiAgX2NhdGNoOiBrdyhcImNhdGNoXCIpLFxuICBfY29udGludWU6IGt3KFwiY29udGludWVcIiksXG4gIF9kZWJ1Z2dlcjoga3coXCJkZWJ1Z2dlclwiKSxcbiAgX2RlZmF1bHQ6IGt3KFwiZGVmYXVsdFwiLCBiZWZvcmVFeHByKSxcbiAgX2RvOiBrdyhcImRvXCIsIHtpc0xvb3A6IHRydWUsIGJlZm9yZUV4cHI6IHRydWV9KSxcbiAgX2Vsc2U6IGt3KFwiZWxzZVwiLCBiZWZvcmVFeHByKSxcbiAgX2ZpbmFsbHk6IGt3KFwiZmluYWxseVwiKSxcbiAgX2Zvcjoga3coXCJmb3JcIiwge2lzTG9vcDogdHJ1ZX0pLFxuICBfZnVuY3Rpb246IGt3KFwiZnVuY3Rpb25cIiwgc3RhcnRzRXhwciksXG4gIF9pZjoga3coXCJpZlwiKSxcbiAgX3JldHVybjoga3coXCJyZXR1cm5cIiwgYmVmb3JlRXhwciksXG4gIF9zd2l0Y2g6IGt3KFwic3dpdGNoXCIpLFxuICBfdGhyb3c6IGt3KFwidGhyb3dcIiwgYmVmb3JlRXhwciksXG4gIF90cnk6IGt3KFwidHJ5XCIpLFxuICBfdmFyOiBrdyhcInZhclwiKSxcbiAgX2NvbnN0OiBrdyhcImNvbnN0XCIpLFxuICBfd2hpbGU6IGt3KFwid2hpbGVcIiwge2lzTG9vcDogdHJ1ZX0pLFxuICBfd2l0aDoga3coXCJ3aXRoXCIpLFxuICBfbmV3OiBrdyhcIm5ld1wiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBfdGhpczoga3coXCJ0aGlzXCIsIHN0YXJ0c0V4cHIpLFxuICBfc3VwZXI6IGt3KFwic3VwZXJcIiwgc3RhcnRzRXhwciksXG4gIF9jbGFzczoga3coXCJjbGFzc1wiLCBzdGFydHNFeHByKSxcbiAgX2V4dGVuZHM6IGt3KFwiZXh0ZW5kc1wiLCBiZWZvcmVFeHByKSxcbiAgX2V4cG9ydDoga3coXCJleHBvcnRcIiksXG4gIF9pbXBvcnQ6IGt3KFwiaW1wb3J0XCIsIHN0YXJ0c0V4cHIpLFxuICBfbnVsbDoga3coXCJudWxsXCIsIHN0YXJ0c0V4cHIpLFxuICBfdHJ1ZToga3coXCJ0cnVlXCIsIHN0YXJ0c0V4cHIpLFxuICBfZmFsc2U6IGt3KFwiZmFsc2VcIiwgc3RhcnRzRXhwciksXG4gIF9pbjoga3coXCJpblwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDd9KSxcbiAgX2luc3RhbmNlb2Y6IGt3KFwiaW5zdGFuY2VvZlwiLCB7YmVmb3JlRXhwcjogdHJ1ZSwgYmlub3A6IDd9KSxcbiAgX3R5cGVvZjoga3coXCJ0eXBlb2ZcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pLFxuICBfdm9pZDoga3coXCJ2b2lkXCIsIHtiZWZvcmVFeHByOiB0cnVlLCBwcmVmaXg6IHRydWUsIHN0YXJ0c0V4cHI6IHRydWV9KSxcbiAgX2RlbGV0ZToga3coXCJkZWxldGVcIiwge2JlZm9yZUV4cHI6IHRydWUsIHByZWZpeDogdHJ1ZSwgc3RhcnRzRXhwcjogdHJ1ZX0pXG59O1xuXG4vLyBNYXRjaGVzIGEgd2hvbGUgbGluZSBicmVhayAod2hlcmUgQ1JMRiBpcyBjb25zaWRlcmVkIGEgc2luZ2xlXG4vLyBsaW5lIGJyZWFrKS4gVXNlZCB0byBjb3VudCBsaW5lcy5cblxudmFyIGxpbmVCcmVhayA9IC9cXHJcXG4/fFxcbnxcXHUyMDI4fFxcdTIwMjkvO1xudmFyIGxpbmVCcmVha0cgPSBuZXcgUmVnRXhwKGxpbmVCcmVhay5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gaXNOZXdMaW5lKGNvZGUsIGVjbWEyMDE5U3RyaW5nKSB7XG4gIHJldHVybiBjb2RlID09PSAxMCB8fCBjb2RlID09PSAxMyB8fCAoIWVjbWEyMDE5U3RyaW5nICYmIChjb2RlID09PSAweDIwMjggfHwgY29kZSA9PT0gMHgyMDI5KSlcbn1cblxudmFyIG5vbkFTQ0lJd2hpdGVzcGFjZSA9IC9bXFx1MTY4MFxcdTIwMDAtXFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdLztcblxudmFyIHNraXBXaGl0ZVNwYWNlID0gLyg/Olxcc3xcXC9cXC8uKnxcXC9cXCpbXl0qP1xcKlxcLykqL2c7XG5cbnZhciByZWYgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIGhhc093blByb3BlcnR5ID0gcmVmLmhhc093blByb3BlcnR5O1xudmFyIHRvU3RyaW5nID0gcmVmLnRvU3RyaW5nO1xuXG4vLyBDaGVja3MgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LlxuXG5mdW5jdGlvbiBoYXMob2JqLCBwcm9wTmFtZSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3BOYW1lKVxufVxuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgKGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIChcbiAgdG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgQXJyYXldXCJcbik7IH0pO1xuXG5mdW5jdGlvbiB3b3Jkc1JlZ2V4cCh3b3Jkcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIHdvcmRzLnJlcGxhY2UoLyAvZywgXCJ8XCIpICsgXCIpJFwiKVxufVxuXG4vLyBUaGVzZSBhcmUgdXNlZCB3aGVuIGBvcHRpb25zLmxvY2F0aW9uc2AgaXMgb24sIGZvciB0aGVcbi8vIGBzdGFydExvY2AgYW5kIGBlbmRMb2NgIHByb3BlcnRpZXMuXG5cbnZhciBQb3NpdGlvbiA9IGZ1bmN0aW9uIFBvc2l0aW9uKGxpbmUsIGNvbCkge1xuICB0aGlzLmxpbmUgPSBsaW5lO1xuICB0aGlzLmNvbHVtbiA9IGNvbDtcbn07XG5cblBvc2l0aW9uLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiBvZmZzZXQgKG4pIHtcbiAgcmV0dXJuIG5ldyBQb3NpdGlvbih0aGlzLmxpbmUsIHRoaXMuY29sdW1uICsgbilcbn07XG5cbnZhciBTb3VyY2VMb2NhdGlvbiA9IGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9uKHAsIHN0YXJ0LCBlbmQpIHtcbiAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICB0aGlzLmVuZCA9IGVuZDtcbiAgaWYgKHAuc291cmNlRmlsZSAhPT0gbnVsbCkgeyB0aGlzLnNvdXJjZSA9IHAuc291cmNlRmlsZTsgfVxufTtcblxuLy8gVGhlIGBnZXRMaW5lSW5mb2AgZnVuY3Rpb24gaXMgbW9zdGx5IHVzZWZ1bCB3aGVuIHRoZVxuLy8gYGxvY2F0aW9uc2Agb3B0aW9uIGlzIG9mZiAoZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMpIGFuZCB5b3Vcbi8vIHdhbnQgdG8gZmluZCB0aGUgbGluZS9jb2x1bW4gcG9zaXRpb24gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyXG4vLyBvZmZzZXQuIGBpbnB1dGAgc2hvdWxkIGJlIHRoZSBjb2RlIHN0cmluZyB0aGF0IHRoZSBvZmZzZXQgcmVmZXJzXG4vLyBpbnRvLlxuXG5mdW5jdGlvbiBnZXRMaW5lSW5mbyhpbnB1dCwgb2Zmc2V0KSB7XG4gIGZvciAodmFyIGxpbmUgPSAxLCBjdXIgPSAwOzspIHtcbiAgICBsaW5lQnJlYWtHLmxhc3RJbmRleCA9IGN1cjtcbiAgICB2YXIgbWF0Y2ggPSBsaW5lQnJlYWtHLmV4ZWMoaW5wdXQpO1xuICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pbmRleCA8IG9mZnNldCkge1xuICAgICAgKytsaW5lO1xuICAgICAgY3VyID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUG9zaXRpb24obGluZSwgb2Zmc2V0IC0gY3VyKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIHNlY29uZCBvcHRpb25hbCBhcmd1bWVudCBjYW4gYmUgZ2l2ZW4gdG8gZnVydGhlciBjb25maWd1cmVcbi8vIHRoZSBwYXJzZXIgcHJvY2Vzcy4gVGhlc2Ugb3B0aW9ucyBhcmUgcmVjb2duaXplZDpcblxudmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAvLyBgZWNtYVZlcnNpb25gIGluZGljYXRlcyB0aGUgRUNNQVNjcmlwdCB2ZXJzaW9uIHRvIHBhcnNlLiBNdXN0IGJlXG4gIC8vIGVpdGhlciAzLCA1LCA2ICgyMDE1KSwgNyAoMjAxNiksIDggKDIwMTcpLCA5ICgyMDE4KSwgb3IgMTBcbiAgLy8gKDIwMTkpLiBUaGlzIGluZmx1ZW5jZXMgc3VwcG9ydCBmb3Igc3RyaWN0IG1vZGUsIHRoZSBzZXQgb2ZcbiAgLy8gcmVzZXJ2ZWQgd29yZHMsIGFuZCBzdXBwb3J0IGZvciBuZXcgc3ludGF4IGZlYXR1cmVzLiBUaGUgZGVmYXVsdFxuICAvLyBpcyAxMC5cbiAgZWNtYVZlcnNpb246IDEwLFxuICAvLyBgc291cmNlVHlwZWAgaW5kaWNhdGVzIHRoZSBtb2RlIHRoZSBjb2RlIHNob3VsZCBiZSBwYXJzZWQgaW4uXG4gIC8vIENhbiBiZSBlaXRoZXIgYFwic2NyaXB0XCJgIG9yIGBcIm1vZHVsZVwiYC4gVGhpcyBpbmZsdWVuY2VzIGdsb2JhbFxuICAvLyBzdHJpY3QgbW9kZSBhbmQgcGFyc2luZyBvZiBgaW1wb3J0YCBhbmQgYGV4cG9ydGAgZGVjbGFyYXRpb25zLlxuICBzb3VyY2VUeXBlOiBcInNjcmlwdFwiLFxuICAvLyBgb25JbnNlcnRlZFNlbWljb2xvbmAgY2FuIGJlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGNhbGxlZFxuICAvLyB3aGVuIGEgc2VtaWNvbG9uIGlzIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQuIEl0IHdpbGwgYmUgcGFzc2VkXG4gIC8vIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29tbWEgYXMgYW4gb2Zmc2V0LCBhbmQgaWYgYGxvY2F0aW9uc2AgaXNcbiAgLy8gZW5hYmxlZCwgaXQgaXMgZ2l2ZW4gdGhlIGxvY2F0aW9uIGFzIGEgYHtsaW5lLCBjb2x1bW59YCBvYmplY3RcbiAgLy8gYXMgc2Vjb25kIGFyZ3VtZW50LlxuICBvbkluc2VydGVkU2VtaWNvbG9uOiBudWxsLFxuICAvLyBgb25UcmFpbGluZ0NvbW1hYCBpcyBzaW1pbGFyIHRvIGBvbkluc2VydGVkU2VtaWNvbG9uYCwgYnV0IGZvclxuICAvLyB0cmFpbGluZyBjb21tYXMuXG4gIG9uVHJhaWxpbmdDb21tYTogbnVsbCxcbiAgLy8gQnkgZGVmYXVsdCwgcmVzZXJ2ZWQgd29yZHMgYXJlIG9ubHkgZW5mb3JjZWQgaWYgZWNtYVZlcnNpb24gPj0gNS5cbiAgLy8gU2V0IGBhbGxvd1Jlc2VydmVkYCB0byBhIGJvb2xlYW4gdmFsdWUgdG8gZXhwbGljaXRseSB0dXJuIHRoaXMgb25cbiAgLy8gYW4gb2ZmLiBXaGVuIHRoaXMgb3B0aW9uIGhhcyB0aGUgdmFsdWUgXCJuZXZlclwiLCByZXNlcnZlZCB3b3Jkc1xuICAvLyBhbmQga2V5d29yZHMgY2FuIGFsc28gbm90IGJlIHVzZWQgYXMgcHJvcGVydHkgbmFtZXMuXG4gIGFsbG93UmVzZXJ2ZWQ6IG51bGwsXG4gIC8vIFdoZW4gZW5hYmxlZCwgYSByZXR1cm4gYXQgdGhlIHRvcCBsZXZlbCBpcyBub3QgY29uc2lkZXJlZCBhblxuICAvLyBlcnJvci5cbiAgYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb246IGZhbHNlLFxuICAvLyBXaGVuIGVuYWJsZWQsIGltcG9ydC9leHBvcnQgc3RhdGVtZW50cyBhcmUgbm90IGNvbnN0cmFpbmVkIHRvXG4gIC8vIGFwcGVhcmluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtLlxuICBhbGxvd0ltcG9ydEV4cG9ydEV2ZXJ5d2hlcmU6IGZhbHNlLFxuICAvLyBXaGVuIGVuYWJsZWQsIGF3YWl0IGlkZW50aWZpZXJzIGFyZSBhbGxvd2VkIHRvIGFwcGVhciBhdCB0aGUgdG9wLWxldmVsIHNjb3BlLFxuICAvLyBidXQgdGhleSBhcmUgc3RpbGwgbm90IGFsbG93ZWQgaW4gbm9uLWFzeW5jIGZ1bmN0aW9ucy5cbiAgYWxsb3dBd2FpdE91dHNpZGVGdW5jdGlvbjogZmFsc2UsXG4gIC8vIFdoZW4gZW5hYmxlZCwgaGFzaGJhbmcgZGlyZWN0aXZlIGluIHRoZSBiZWdpbm5pbmcgb2YgZmlsZVxuICAvLyBpcyBhbGxvd2VkIGFuZCB0cmVhdGVkIGFzIGEgbGluZSBjb21tZW50LlxuICBhbGxvd0hhc2hCYW5nOiBmYWxzZSxcbiAgLy8gV2hlbiBgbG9jYXRpb25zYCBpcyBvbiwgYGxvY2AgcHJvcGVydGllcyBob2xkaW5nIG9iamVjdHMgd2l0aFxuICAvLyBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzIGluIGB7bGluZSwgY29sdW1ufWAgZm9ybSAod2l0aFxuICAvLyBsaW5lIGJlaW5nIDEtYmFzZWQgYW5kIGNvbHVtbiAwLWJhc2VkKSB3aWxsIGJlIGF0dGFjaGVkIHRvIHRoZVxuICAvLyBub2Rlcy5cbiAgbG9jYXRpb25zOiBmYWxzZSxcbiAgLy8gQSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGFzIGBvblRva2VuYCBvcHRpb24sIHdoaWNoIHdpbGxcbiAgLy8gY2F1c2UgQWNvcm4gdG8gY2FsbCB0aGF0IGZ1bmN0aW9uIHdpdGggb2JqZWN0IGluIHRoZSBzYW1lXG4gIC8vIGZvcm1hdCBhcyB0b2tlbnMgcmV0dXJuZWQgZnJvbSBgdG9rZW5pemVyKCkuZ2V0VG9rZW4oKWAuIE5vdGVcbiAgLy8gdGhhdCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNhbGwgdGhlIHBhcnNlciBmcm9tIHRoZVxuICAvLyBjYWxsYmFja+KAlHRoYXQgd2lsbCBjb3JydXB0IGl0cyBpbnRlcm5hbCBzdGF0ZS5cbiAgb25Ub2tlbjogbnVsbCxcbiAgLy8gQSBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGFzIGBvbkNvbW1lbnRgIG9wdGlvbiwgd2hpY2ggd2lsbFxuICAvLyBjYXVzZSBBY29ybiB0byBjYWxsIHRoYXQgZnVuY3Rpb24gd2l0aCBgKGJsb2NrLCB0ZXh0LCBzdGFydCxcbiAgLy8gZW5kKWAgcGFyYW1ldGVycyB3aGVuZXZlciBhIGNvbW1lbnQgaXMgc2tpcHBlZC4gYGJsb2NrYCBpcyBhXG4gIC8vIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgaXMgYSBibG9jayAoYC8qICovYCkgY29tbWVudCxcbiAgLy8gYHRleHRgIGlzIHRoZSBjb250ZW50IG9mIHRoZSBjb21tZW50LCBhbmQgYHN0YXJ0YCBhbmQgYGVuZGAgYXJlXG4gIC8vIGNoYXJhY3RlciBvZmZzZXRzIHRoYXQgZGVub3RlIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBjb21tZW50LlxuICAvLyBXaGVuIHRoZSBgbG9jYXRpb25zYCBvcHRpb24gaXMgb24sIHR3byBtb3JlIHBhcmFtZXRlcnMgYXJlXG4gIC8vIHBhc3NlZCwgdGhlIGZ1bGwgYHtsaW5lLCBjb2x1bW59YCBsb2NhdGlvbnMgb2YgdGhlIHN0YXJ0IGFuZFxuICAvLyBlbmQgb2YgdGhlIGNvbW1lbnRzLiBOb3RlIHRoYXQgeW91IGFyZSBub3QgYWxsb3dlZCB0byBjYWxsIHRoZVxuICAvLyBwYXJzZXIgZnJvbSB0aGUgY2FsbGJhY2vigJR0aGF0IHdpbGwgY29ycnVwdCBpdHMgaW50ZXJuYWwgc3RhdGUuXG4gIG9uQ29tbWVudDogbnVsbCxcbiAgLy8gTm9kZXMgaGF2ZSB0aGVpciBzdGFydCBhbmQgZW5kIGNoYXJhY3RlcnMgb2Zmc2V0cyByZWNvcmRlZCBpblxuICAvLyBgc3RhcnRgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzIChkaXJlY3RseSBvbiB0aGUgbm9kZSwgcmF0aGVyIHRoYW5cbiAgLy8gdGhlIGBsb2NgIG9iamVjdCwgd2hpY2ggaG9sZHMgbGluZS9jb2x1bW4gZGF0YS4gVG8gYWxzbyBhZGQgYVxuICAvLyBbc2VtaS1zdGFuZGFyZGl6ZWRdW3JhbmdlXSBgcmFuZ2VgIHByb3BlcnR5IGhvbGRpbmcgYSBgW3N0YXJ0LFxuICAvLyBlbmRdYCBhcnJheSB3aXRoIHRoZSBzYW1lIG51bWJlcnMsIHNldCB0aGUgYHJhbmdlc2Agb3B0aW9uIHRvXG4gIC8vIGB0cnVlYC5cbiAgLy9cbiAgLy8gW3JhbmdlXTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1Njc4XG4gIHJhbmdlczogZmFsc2UsXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRvIHBhcnNlIG11bHRpcGxlIGZpbGVzIGludG8gYSBzaW5nbGUgQVNUIGJ5XG4gIC8vIHBhc3NpbmcgdGhlIHRyZWUgcHJvZHVjZWQgYnkgcGFyc2luZyB0aGUgZmlyc3QgZmlsZSBhc1xuICAvLyBgcHJvZ3JhbWAgb3B0aW9uIGluIHN1YnNlcXVlbnQgcGFyc2VzLiBUaGlzIHdpbGwgYWRkIHRoZVxuICAvLyB0b3BsZXZlbCBmb3JtcyBvZiB0aGUgcGFyc2VkIGZpbGUgdG8gdGhlIGBQcm9ncmFtYCAodG9wKSBub2RlXG4gIC8vIG9mIGFuIGV4aXN0aW5nIHBhcnNlIHRyZWUuXG4gIHByb2dyYW06IG51bGwsXG4gIC8vIFdoZW4gYGxvY2F0aW9uc2AgaXMgb24sIHlvdSBjYW4gcGFzcyB0aGlzIHRvIHJlY29yZCB0aGUgc291cmNlXG4gIC8vIGZpbGUgaW4gZXZlcnkgbm9kZSdzIGBsb2NgIG9iamVjdC5cbiAgc291cmNlRmlsZTogbnVsbCxcbiAgLy8gVGhpcyB2YWx1ZSwgaWYgZ2l2ZW4sIGlzIHN0b3JlZCBpbiBldmVyeSBub2RlLCB3aGV0aGVyXG4gIC8vIGBsb2NhdGlvbnNgIGlzIG9uIG9yIG9mZi5cbiAgZGlyZWN0U291cmNlRmlsZTogbnVsbCxcbiAgLy8gV2hlbiBlbmFibGVkLCBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25zIGFyZSByZXByZXNlbnRlZCBieVxuICAvLyAobm9uLXN0YW5kYXJkKSBQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiBub2Rlc1xuICBwcmVzZXJ2ZVBhcmVuczogZmFsc2Vcbn07XG5cbi8vIEludGVycHJldCBhbmQgZGVmYXVsdCBhbiBvcHRpb25zIG9iamVjdFxuXG5mdW5jdGlvbiBnZXRPcHRpb25zKG9wdHMpIHtcbiAgdmFyIG9wdGlvbnMgPSB7fTtcblxuICBmb3IgKHZhciBvcHQgaW4gZGVmYXVsdE9wdGlvbnMpXG4gICAgeyBvcHRpb25zW29wdF0gPSBvcHRzICYmIGhhcyhvcHRzLCBvcHQpID8gb3B0c1tvcHRdIDogZGVmYXVsdE9wdGlvbnNbb3B0XTsgfVxuXG4gIGlmIChvcHRpb25zLmVjbWFWZXJzaW9uID49IDIwMTUpXG4gICAgeyBvcHRpb25zLmVjbWFWZXJzaW9uIC09IDIwMDk7IH1cblxuICBpZiAob3B0aW9ucy5hbGxvd1Jlc2VydmVkID09IG51bGwpXG4gICAgeyBvcHRpb25zLmFsbG93UmVzZXJ2ZWQgPSBvcHRpb25zLmVjbWFWZXJzaW9uIDwgNTsgfVxuXG4gIGlmIChpc0FycmF5KG9wdGlvbnMub25Ub2tlbikpIHtcbiAgICB2YXIgdG9rZW5zID0gb3B0aW9ucy5vblRva2VuO1xuICAgIG9wdGlvbnMub25Ub2tlbiA9IGZ1bmN0aW9uICh0b2tlbikgeyByZXR1cm4gdG9rZW5zLnB1c2godG9rZW4pOyB9O1xuICB9XG4gIGlmIChpc0FycmF5KG9wdGlvbnMub25Db21tZW50KSlcbiAgICB7IG9wdGlvbnMub25Db21tZW50ID0gcHVzaENvbW1lbnQob3B0aW9ucywgb3B0aW9ucy5vbkNvbW1lbnQpOyB9XG5cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZnVuY3Rpb24gcHVzaENvbW1lbnQob3B0aW9ucywgYXJyYXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGJsb2NrLCB0ZXh0LCBzdGFydCwgZW5kLCBzdGFydExvYywgZW5kTG9jKSB7XG4gICAgdmFyIGNvbW1lbnQgPSB7XG4gICAgICB0eXBlOiBibG9jayA/IFwiQmxvY2tcIiA6IFwiTGluZVwiLFxuICAgICAgdmFsdWU6IHRleHQsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBlbmQ6IGVuZFxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMubG9jYXRpb25zKVxuICAgICAgeyBjb21tZW50LmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbih0aGlzLCBzdGFydExvYywgZW5kTG9jKTsgfVxuICAgIGlmIChvcHRpb25zLnJhbmdlcylcbiAgICAgIHsgY29tbWVudC5yYW5nZSA9IFtzdGFydCwgZW5kXTsgfVxuICAgIGFycmF5LnB1c2goY29tbWVudCk7XG4gIH1cbn1cblxuLy8gRWFjaCBzY29wZSBnZXRzIGEgYml0c2V0IHRoYXQgbWF5IGNvbnRhaW4gdGhlc2UgZmxhZ3NcbnZhclxuICAgIFNDT1BFX1RPUCA9IDEsXG4gICAgU0NPUEVfRlVOQ1RJT04gPSAyLFxuICAgIFNDT1BFX1ZBUiA9IFNDT1BFX1RPUCB8IFNDT1BFX0ZVTkNUSU9OLFxuICAgIFNDT1BFX0FTWU5DID0gNCxcbiAgICBTQ09QRV9HRU5FUkFUT1IgPSA4LFxuICAgIFNDT1BFX0FSUk9XID0gMTYsXG4gICAgU0NPUEVfU0lNUExFX0NBVENIID0gMzIsXG4gICAgU0NPUEVfU1VQRVIgPSA2NCxcbiAgICBTQ09QRV9ESVJFQ1RfU1VQRVIgPSAxMjg7XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uRmxhZ3MoYXN5bmMsIGdlbmVyYXRvcikge1xuICByZXR1cm4gU0NPUEVfRlVOQ1RJT04gfCAoYXN5bmMgPyBTQ09QRV9BU1lOQyA6IDApIHwgKGdlbmVyYXRvciA/IFNDT1BFX0dFTkVSQVRPUiA6IDApXG59XG5cbi8vIFVzZWQgaW4gY2hlY2tMVmFsIGFuZCBkZWNsYXJlTmFtZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSBiaW5kaW5nXG52YXJcbiAgICBCSU5EX05PTkUgPSAwLCAvLyBOb3QgYSBiaW5kaW5nXG4gICAgQklORF9WQVIgPSAxLCAvLyBWYXItc3R5bGUgYmluZGluZ1xuICAgIEJJTkRfTEVYSUNBTCA9IDIsIC8vIExldC0gb3IgY29uc3Qtc3R5bGUgYmluZGluZ1xuICAgIEJJTkRfRlVOQ1RJT04gPSAzLCAvLyBGdW5jdGlvbiBkZWNsYXJhdGlvblxuICAgIEJJTkRfU0lNUExFX0NBVENIID0gNCwgLy8gU2ltcGxlIChpZGVudGlmaWVyIHBhdHRlcm4pIGNhdGNoIGJpbmRpbmdcbiAgICBCSU5EX09VVFNJREUgPSA1OyAvLyBTcGVjaWFsIGNhc2UgZm9yIGZ1bmN0aW9uIG5hbWVzIGFzIGJvdW5kIGluc2lkZSB0aGUgZnVuY3Rpb25cblxudmFyIFBhcnNlciA9IGZ1bmN0aW9uIFBhcnNlcihvcHRpb25zLCBpbnB1dCwgc3RhcnRQb3MpIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IGdldE9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuc291cmNlRmlsZSA9IG9wdGlvbnMuc291cmNlRmlsZTtcbiAgdGhpcy5rZXl3b3JkcyA9IHdvcmRzUmVnZXhwKGtleXdvcmRzW29wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiA/IDYgOiBvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCIgPyBcIjVtb2R1bGVcIiA6IDVdKTtcbiAgdmFyIHJlc2VydmVkID0gXCJcIjtcbiAgaWYgKG9wdGlvbnMuYWxsb3dSZXNlcnZlZCAhPT0gdHJ1ZSkge1xuICAgIGZvciAodmFyIHYgPSBvcHRpb25zLmVjbWFWZXJzaW9uOzsgdi0tKVxuICAgICAgeyBpZiAocmVzZXJ2ZWQgPSByZXNlcnZlZFdvcmRzW3ZdKSB7IGJyZWFrIH0gfVxuICAgIGlmIChvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCIpIHsgcmVzZXJ2ZWQgKz0gXCIgYXdhaXRcIjsgfVxuICB9XG4gIHRoaXMucmVzZXJ2ZWRXb3JkcyA9IHdvcmRzUmVnZXhwKHJlc2VydmVkKTtcbiAgdmFyIHJlc2VydmVkU3RyaWN0ID0gKHJlc2VydmVkID8gcmVzZXJ2ZWQgKyBcIiBcIiA6IFwiXCIpICsgcmVzZXJ2ZWRXb3Jkcy5zdHJpY3Q7XG4gIHRoaXMucmVzZXJ2ZWRXb3Jkc1N0cmljdCA9IHdvcmRzUmVnZXhwKHJlc2VydmVkU3RyaWN0KTtcbiAgdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0QmluZCA9IHdvcmRzUmVnZXhwKHJlc2VydmVkU3RyaWN0ICsgXCIgXCIgKyByZXNlcnZlZFdvcmRzLnN0cmljdEJpbmQpO1xuICB0aGlzLmlucHV0ID0gU3RyaW5nKGlucHV0KTtcblxuICAvLyBVc2VkIHRvIHNpZ25hbCB0byBjYWxsZXJzIG9mIGByZWFkV29yZDFgIHdoZXRoZXIgdGhlIHdvcmRcbiAgLy8gY29udGFpbmVkIGFueSBlc2NhcGUgc2VxdWVuY2VzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHdvcmRzIHdpdGhcbiAgLy8gZXNjYXBlIHNlcXVlbmNlcyBtdXN0IG5vdCBiZSBpbnRlcnByZXRlZCBhcyBrZXl3b3Jkcy5cbiAgdGhpcy5jb250YWluc0VzYyA9IGZhbHNlO1xuXG4gIC8vIFNldCB1cCB0b2tlbiBzdGF0ZVxuXG4gIC8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSB0b2tlbml6ZXIgaW4gdGhlIGlucHV0LlxuICBpZiAoc3RhcnRQb3MpIHtcbiAgICB0aGlzLnBvcyA9IHN0YXJ0UG9zO1xuICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5pbnB1dC5sYXN0SW5kZXhPZihcIlxcblwiLCBzdGFydFBvcyAtIDEpICsgMTtcbiAgICB0aGlzLmN1ckxpbmUgPSB0aGlzLmlucHV0LnNsaWNlKDAsIHRoaXMubGluZVN0YXJ0KS5zcGxpdChsaW5lQnJlYWspLmxlbmd0aDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnBvcyA9IHRoaXMubGluZVN0YXJ0ID0gMDtcbiAgICB0aGlzLmN1ckxpbmUgPSAxO1xuICB9XG5cbiAgLy8gUHJvcGVydGllcyBvZiB0aGUgY3VycmVudCB0b2tlbjpcbiAgLy8gSXRzIHR5cGVcbiAgdGhpcy50eXBlID0gdHlwZXMuZW9mO1xuICAvLyBGb3IgdG9rZW5zIHRoYXQgaW5jbHVkZSBtb3JlIGluZm9ybWF0aW9uIHRoYW4gdGhlaXIgdHlwZSwgdGhlIHZhbHVlXG4gIHRoaXMudmFsdWUgPSBudWxsO1xuICAvLyBJdHMgc3RhcnQgYW5kIGVuZCBvZmZzZXRcbiAgdGhpcy5zdGFydCA9IHRoaXMuZW5kID0gdGhpcy5wb3M7XG4gIC8vIEFuZCwgaWYgbG9jYXRpb25zIGFyZSB1c2VkLCB0aGUge2xpbmUsIGNvbHVtbn0gb2JqZWN0XG4gIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhvc2Ugb2Zmc2V0c1xuICB0aGlzLnN0YXJ0TG9jID0gdGhpcy5lbmRMb2MgPSB0aGlzLmN1clBvc2l0aW9uKCk7XG5cbiAgLy8gUG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwcmV2aW91cyB0b2tlblxuICB0aGlzLmxhc3RUb2tFbmRMb2MgPSB0aGlzLmxhc3RUb2tTdGFydExvYyA9IG51bGw7XG4gIHRoaXMubGFzdFRva1N0YXJ0ID0gdGhpcy5sYXN0VG9rRW5kID0gdGhpcy5wb3M7XG5cbiAgLy8gVGhlIGNvbnRleHQgc3RhY2sgaXMgdXNlZCB0byBzdXBlcmZpY2lhbGx5IHRyYWNrIHN5bnRhY3RpY1xuICAvLyBjb250ZXh0IHRvIHByZWRpY3Qgd2hldGhlciBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBhbGxvd2VkIGluIGFcbiAgLy8gZ2l2ZW4gcG9zaXRpb24uXG4gIHRoaXMuY29udGV4dCA9IHRoaXMuaW5pdGlhbENvbnRleHQoKTtcbiAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG5cbiAgLy8gRmlndXJlIG91dCBpZiBpdCdzIGEgbW9kdWxlIGNvZGUuXG4gIHRoaXMuaW5Nb2R1bGUgPSBvcHRpb25zLnNvdXJjZVR5cGUgPT09IFwibW9kdWxlXCI7XG4gIHRoaXMuc3RyaWN0ID0gdGhpcy5pbk1vZHVsZSB8fCB0aGlzLnN0cmljdERpcmVjdGl2ZSh0aGlzLnBvcyk7XG5cbiAgLy8gVXNlZCB0byBzaWduaWZ5IHRoZSBzdGFydCBvZiBhIHBvdGVudGlhbCBhcnJvdyBmdW5jdGlvblxuICB0aGlzLnBvdGVudGlhbEFycm93QXQgPSAtMTtcblxuICAvLyBQb3NpdGlvbnMgdG8gZGVsYXllZC1jaGVjayB0aGF0IHlpZWxkL2F3YWl0IGRvZXMgbm90IGV4aXN0IGluIGRlZmF1bHQgcGFyYW1ldGVycy5cbiAgdGhpcy55aWVsZFBvcyA9IHRoaXMuYXdhaXRQb3MgPSB0aGlzLmF3YWl0SWRlbnRQb3MgPSAwO1xuICAvLyBMYWJlbHMgaW4gc2NvcGUuXG4gIHRoaXMubGFiZWxzID0gW107XG4gIC8vIFRodXMtZmFyIHVuZGVmaW5lZCBleHBvcnRzLlxuICB0aGlzLnVuZGVmaW5lZEV4cG9ydHMgPSB7fTtcblxuICAvLyBJZiBlbmFibGVkLCBza2lwIGxlYWRpbmcgaGFzaGJhbmcgbGluZS5cbiAgaWYgKHRoaXMucG9zID09PSAwICYmIG9wdGlvbnMuYWxsb3dIYXNoQmFuZyAmJiB0aGlzLmlucHV0LnNsaWNlKDAsIDIpID09PSBcIiMhXCIpXG4gICAgeyB0aGlzLnNraXBMaW5lQ29tbWVudCgyKTsgfVxuXG4gIC8vIFNjb3BlIHRyYWNraW5nIGZvciBkdXBsaWNhdGUgdmFyaWFibGUgbmFtZXMgKHNlZSBzY29wZS5qcylcbiAgdGhpcy5zY29wZVN0YWNrID0gW107XG4gIHRoaXMuZW50ZXJTY29wZShTQ09QRV9UT1ApO1xuXG4gIC8vIEZvciBSZWdFeHAgdmFsaWRhdGlvblxuICB0aGlzLnJlZ2V4cFN0YXRlID0gbnVsbDtcbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGluRnVuY3Rpb246IHsgY29uZmlndXJhYmxlOiB0cnVlIH0saW5HZW5lcmF0b3I6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0saW5Bc3luYzogeyBjb25maWd1cmFibGU6IHRydWUgfSxhbGxvd1N1cGVyOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9LGFsbG93RGlyZWN0U3VwZXI6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0sdHJlYXRGdW5jdGlvbnNBc1ZhcjogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG5QYXJzZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UgKCkge1xuICB2YXIgbm9kZSA9IHRoaXMub3B0aW9ucy5wcm9ncmFtIHx8IHRoaXMuc3RhcnROb2RlKCk7XG4gIHRoaXMubmV4dFRva2VuKCk7XG4gIHJldHVybiB0aGlzLnBhcnNlVG9wTGV2ZWwobm9kZSlcbn07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5pbkZ1bmN0aW9uLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmN1cnJlbnRWYXJTY29wZSgpLmZsYWdzICYgU0NPUEVfRlVOQ1RJT04pID4gMCB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmluR2VuZXJhdG9yLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmN1cnJlbnRWYXJTY29wZSgpLmZsYWdzICYgU0NPUEVfR0VORVJBVE9SKSA+IDAgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy5pbkFzeW5jLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmN1cnJlbnRWYXJTY29wZSgpLmZsYWdzICYgU0NPUEVfQVNZTkMpID4gMCB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmFsbG93U3VwZXIuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFRoaXNTY29wZSgpLmZsYWdzICYgU0NPUEVfU1VQRVIpID4gMCB9O1xucHJvdG90eXBlQWNjZXNzb3JzLmFsbG93RGlyZWN0U3VwZXIuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHRoaXMuY3VycmVudFRoaXNTY29wZSgpLmZsYWdzICYgU0NPUEVfRElSRUNUX1NVUEVSKSA+IDAgfTtcbnByb3RvdHlwZUFjY2Vzc29ycy50cmVhdEZ1bmN0aW9uc0FzVmFyLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMudHJlYXRGdW5jdGlvbnNBc1ZhckluU2NvcGUodGhpcy5jdXJyZW50U2NvcGUoKSkgfTtcblxuLy8gU3dpdGNoIHRvIGEgZ2V0dGVyIGZvciA3LjAuMC5cblBhcnNlci5wcm90b3R5cGUuaW5Ob25BcnJvd0Z1bmN0aW9uID0gZnVuY3Rpb24gaW5Ob25BcnJvd0Z1bmN0aW9uICgpIHsgcmV0dXJuICh0aGlzLmN1cnJlbnRUaGlzU2NvcGUoKS5mbGFncyAmIFNDT1BFX0ZVTkNUSU9OKSA+IDAgfTtcblxuUGFyc2VyLmV4dGVuZCA9IGZ1bmN0aW9uIGV4dGVuZCAoKSB7XG4gICAgdmFyIHBsdWdpbnMgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgcGx1Z2luc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHZhciBjbHMgPSB0aGlzO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsdWdpbnMubGVuZ3RoOyBpKyspIHsgY2xzID0gcGx1Z2luc1tpXShjbHMpOyB9XG4gIHJldHVybiBjbHNcbn07XG5cblBhcnNlci5wYXJzZSA9IGZ1bmN0aW9uIHBhcnNlIChpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IHRoaXMob3B0aW9ucywgaW5wdXQpLnBhcnNlKClcbn07XG5cblBhcnNlci5wYXJzZUV4cHJlc3Npb25BdCA9IGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbkF0IChpbnB1dCwgcG9zLCBvcHRpb25zKSB7XG4gIHZhciBwYXJzZXIgPSBuZXcgdGhpcyhvcHRpb25zLCBpbnB1dCwgcG9zKTtcbiAgcGFyc2VyLm5leHRUb2tlbigpO1xuICByZXR1cm4gcGFyc2VyLnBhcnNlRXhwcmVzc2lvbigpXG59O1xuXG5QYXJzZXIudG9rZW5pemVyID0gZnVuY3Rpb24gdG9rZW5pemVyIChpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IHRoaXMob3B0aW9ucywgaW5wdXQpXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggUGFyc2VyLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbnZhciBwcCA9IFBhcnNlci5wcm90b3R5cGU7XG5cbi8vICMjIFBhcnNlciB1dGlsaXRpZXNcblxudmFyIGxpdGVyYWwgPSAvXig/OicoKD86XFxcXC58W14nXFxcXF0pKj8pJ3xcIigoPzpcXFxcLnxbXlwiXFxcXF0pKj8pXCIpLztcbnBwLnN0cmljdERpcmVjdGl2ZSA9IGZ1bmN0aW9uKHN0YXJ0KSB7XG4gIGZvciAoOzspIHtcbiAgICAvLyBUcnkgdG8gZmluZCBzdHJpbmcgbGl0ZXJhbC5cbiAgICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSBzdGFydDtcbiAgICBzdGFydCArPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpWzBdLmxlbmd0aDtcbiAgICB2YXIgbWF0Y2ggPSBsaXRlcmFsLmV4ZWModGhpcy5pbnB1dC5zbGljZShzdGFydCkpO1xuICAgIGlmICghbWF0Y2gpIHsgcmV0dXJuIGZhbHNlIH1cbiAgICBpZiAoKG1hdGNoWzFdIHx8IG1hdGNoWzJdKSA9PT0gXCJ1c2Ugc3RyaWN0XCIpIHtcbiAgICAgIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHN0YXJ0ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgdmFyIHNwYWNlQWZ0ZXIgPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpLCBlbmQgPSBzcGFjZUFmdGVyLmluZGV4ICsgc3BhY2VBZnRlclswXS5sZW5ndGg7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckF0KGVuZCk7XG4gICAgICByZXR1cm4gbmV4dCA9PT0gXCI7XCIgfHwgbmV4dCA9PT0gXCJ9XCIgfHxcbiAgICAgICAgKGxpbmVCcmVhay50ZXN0KHNwYWNlQWZ0ZXJbMF0pICYmXG4gICAgICAgICAhKC9bKGAuWytcXC0vKiU8Pj0sP14mXS8udGVzdChuZXh0KSB8fCBuZXh0ID09PSBcIiFcIiAmJiB0aGlzLmlucHV0LmNoYXJBdChlbmQgKyAxKSA9PT0gXCI9XCIpKVxuICAgIH1cbiAgICBzdGFydCArPSBtYXRjaFswXS5sZW5ndGg7XG5cbiAgICAvLyBTa2lwIHNlbWljb2xvbiwgaWYgYW55LlxuICAgIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHN0YXJ0O1xuICAgIHN0YXJ0ICs9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dClbMF0ubGVuZ3RoO1xuICAgIGlmICh0aGlzLmlucHV0W3N0YXJ0XSA9PT0gXCI7XCIpXG4gICAgICB7IHN0YXJ0Kys7IH1cbiAgfVxufTtcblxuLy8gUHJlZGljYXRlIHRoYXQgdGVzdHMgd2hldGhlciB0aGUgbmV4dCB0b2tlbiBpcyBvZiB0aGUgZ2l2ZW5cbi8vIHR5cGUsIGFuZCBpZiB5ZXMsIGNvbnN1bWVzIGl0IGFzIGEgc2lkZSBlZmZlY3QuXG5cbnBwLmVhdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZSkge1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn07XG5cbi8vIFRlc3RzIHdoZXRoZXIgcGFyc2VkIHRva2VuIGlzIGEgY29udGV4dHVhbCBrZXl3b3JkLlxuXG5wcC5pc0NvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLnR5cGUgPT09IHR5cGVzLm5hbWUgJiYgdGhpcy52YWx1ZSA9PT0gbmFtZSAmJiAhdGhpcy5jb250YWluc0VzY1xufTtcblxuLy8gQ29uc3VtZXMgY29udGV4dHVhbCBrZXl3b3JkIGlmIHBvc3NpYmxlLlxuXG5wcC5lYXRDb250ZXh0dWFsID0gZnVuY3Rpb24obmFtZSkge1xuICBpZiAoIXRoaXMuaXNDb250ZXh0dWFsKG5hbWUpKSB7IHJldHVybiBmYWxzZSB9XG4gIHRoaXMubmV4dCgpO1xuICByZXR1cm4gdHJ1ZVxufTtcblxuLy8gQXNzZXJ0cyB0aGF0IGZvbGxvd2luZyB0b2tlbiBpcyBnaXZlbiBjb250ZXh0dWFsIGtleXdvcmQuXG5cbnBwLmV4cGVjdENvbnRleHR1YWwgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmICghdGhpcy5lYXRDb250ZXh0dWFsKG5hbWUpKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG59O1xuXG4vLyBUZXN0IHdoZXRoZXIgYSBzZW1pY29sb24gY2FuIGJlIGluc2VydGVkIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLlxuXG5wcC5jYW5JbnNlcnRTZW1pY29sb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudHlwZSA9PT0gdHlwZXMuZW9mIHx8XG4gICAgdGhpcy50eXBlID09PSB0eXBlcy5icmFjZVIgfHxcbiAgICBsaW5lQnJlYWsudGVzdCh0aGlzLmlucHV0LnNsaWNlKHRoaXMubGFzdFRva0VuZCwgdGhpcy5zdGFydCkpXG59O1xuXG5wcC5pbnNlcnRTZW1pY29sb24gPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uSW5zZXJ0ZWRTZW1pY29sb24pXG4gICAgICB7IHRoaXMub3B0aW9ucy5vbkluc2VydGVkU2VtaWNvbG9uKHRoaXMubGFzdFRva0VuZCwgdGhpcy5sYXN0VG9rRW5kTG9jKTsgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn07XG5cbi8vIENvbnN1bWUgYSBzZW1pY29sb24sIG9yLCBmYWlsaW5nIHRoYXQsIHNlZSBpZiB3ZSBhcmUgYWxsb3dlZCB0b1xuLy8gcHJldGVuZCB0aGF0IHRoZXJlIGlzIGEgc2VtaWNvbG9uIGF0IHRoaXMgcG9zaXRpb24uXG5cbnBwLnNlbWljb2xvbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuZWF0KHR5cGVzLnNlbWkpICYmICF0aGlzLmluc2VydFNlbWljb2xvbigpKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG59O1xuXG5wcC5hZnRlclRyYWlsaW5nQ29tbWEgPSBmdW5jdGlvbih0b2tUeXBlLCBub3ROZXh0KSB7XG4gIGlmICh0aGlzLnR5cGUgPT09IHRva1R5cGUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLm9uVHJhaWxpbmdDb21tYSlcbiAgICAgIHsgdGhpcy5vcHRpb25zLm9uVHJhaWxpbmdDb21tYSh0aGlzLmxhc3RUb2tTdGFydCwgdGhpcy5sYXN0VG9rU3RhcnRMb2MpOyB9XG4gICAgaWYgKCFub3ROZXh0KVxuICAgICAgeyB0aGlzLm5leHQoKTsgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn07XG5cbi8vIEV4cGVjdCBhIHRva2VuIG9mIGEgZ2l2ZW4gdHlwZS4gSWYgZm91bmQsIGNvbnN1bWUgaXQsIG90aGVyd2lzZSxcbi8vIHJhaXNlIGFuIHVuZXhwZWN0ZWQgdG9rZW4gZXJyb3IuXG5cbnBwLmV4cGVjdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdGhpcy5lYXQodHlwZSkgfHwgdGhpcy51bmV4cGVjdGVkKCk7XG59O1xuXG4vLyBSYWlzZSBhbiB1bmV4cGVjdGVkIHRva2VuIGVycm9yLlxuXG5wcC51bmV4cGVjdGVkID0gZnVuY3Rpb24ocG9zKSB7XG4gIHRoaXMucmFpc2UocG9zICE9IG51bGwgPyBwb3MgOiB0aGlzLnN0YXJ0LCBcIlVuZXhwZWN0ZWQgdG9rZW5cIik7XG59O1xuXG5mdW5jdGlvbiBEZXN0cnVjdHVyaW5nRXJyb3JzKCkge1xuICB0aGlzLnNob3J0aGFuZEFzc2lnbiA9XG4gIHRoaXMudHJhaWxpbmdDb21tYSA9XG4gIHRoaXMucGFyZW50aGVzaXplZEFzc2lnbiA9XG4gIHRoaXMucGFyZW50aGVzaXplZEJpbmQgPVxuICB0aGlzLmRvdWJsZVByb3RvID1cbiAgICAtMTtcbn1cblxucHAuY2hlY2tQYXR0ZXJuRXJyb3JzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgaXNBc3NpZ24pIHtcbiAgaWYgKCFyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7IHJldHVybiB9XG4gIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPiAtMSlcbiAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEsIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCIpOyB9XG4gIHZhciBwYXJlbnMgPSBpc0Fzc2lnbiA/IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA6IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEJpbmQ7XG4gIGlmIChwYXJlbnMgPiAtMSkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocGFyZW5zLCBcIlBhcmVudGhlc2l6ZWQgcGF0dGVyblwiKTsgfVxufTtcblxucHAuY2hlY2tFeHByZXNzaW9uRXJyb3JzID0gZnVuY3Rpb24ocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgYW5kVGhyb3cpIHtcbiAgaWYgKCFyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7IHJldHVybiBmYWxzZSB9XG4gIHZhciBzaG9ydGhhbmRBc3NpZ24gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbjtcbiAgdmFyIGRvdWJsZVByb3RvID0gcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5kb3VibGVQcm90bztcbiAgaWYgKCFhbmRUaHJvdykgeyByZXR1cm4gc2hvcnRoYW5kQXNzaWduID49IDAgfHwgZG91YmxlUHJvdG8gPj0gMCB9XG4gIGlmIChzaG9ydGhhbmRBc3NpZ24gPj0gMClcbiAgICB7IHRoaXMucmFpc2Uoc2hvcnRoYW5kQXNzaWduLCBcIlNob3J0aGFuZCBwcm9wZXJ0eSBhc3NpZ25tZW50cyBhcmUgdmFsaWQgb25seSBpbiBkZXN0cnVjdHVyaW5nIHBhdHRlcm5zXCIpOyB9XG4gIGlmIChkb3VibGVQcm90byA+PSAwKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGRvdWJsZVByb3RvLCBcIlJlZGVmaW5pdGlvbiBvZiBfX3Byb3RvX18gcHJvcGVydHlcIik7IH1cbn07XG5cbnBwLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy55aWVsZFBvcyAmJiAoIXRoaXMuYXdhaXRQb3MgfHwgdGhpcy55aWVsZFBvcyA8IHRoaXMuYXdhaXRQb3MpKVxuICAgIHsgdGhpcy5yYWlzZSh0aGlzLnlpZWxkUG9zLCBcIllpZWxkIGV4cHJlc3Npb24gY2Fubm90IGJlIGEgZGVmYXVsdCB2YWx1ZVwiKTsgfVxuICBpZiAodGhpcy5hd2FpdFBvcylcbiAgICB7IHRoaXMucmFpc2UodGhpcy5hd2FpdFBvcywgXCJBd2FpdCBleHByZXNzaW9uIGNhbm5vdCBiZSBhIGRlZmF1bHQgdmFsdWVcIik7IH1cbn07XG5cbnBwLmlzU2ltcGxlQXNzaWduVGFyZ2V0ID0gZnVuY3Rpb24oZXhwcikge1xuICBpZiAoZXhwci50eXBlID09PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gICAgeyByZXR1cm4gdGhpcy5pc1NpbXBsZUFzc2lnblRhcmdldChleHByLmV4cHJlc3Npb24pIH1cbiAgcmV0dXJuIGV4cHIudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgfHwgZXhwci50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIlxufTtcblxudmFyIHBwJDEgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4vLyAjIyMgU3RhdGVtZW50IHBhcnNpbmdcblxuLy8gUGFyc2UgYSBwcm9ncmFtLiBJbml0aWFsaXplcyB0aGUgcGFyc2VyLCByZWFkcyBhbnkgbnVtYmVyIG9mXG4vLyBzdGF0ZW1lbnRzLCBhbmQgd3JhcHMgdGhlbSBpbiBhIFByb2dyYW0gbm9kZS4gIE9wdGlvbmFsbHkgdGFrZXMgYVxuLy8gYHByb2dyYW1gIGFyZ3VtZW50LiAgSWYgcHJlc2VudCwgdGhlIHN0YXRlbWVudHMgd2lsbCBiZSBhcHBlbmRlZFxuLy8gdG8gaXRzIGJvZHkgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBub2RlLlxuXG5wcCQxLnBhcnNlVG9wTGV2ZWwgPSBmdW5jdGlvbihub2RlKSB7XG4gIHZhciBleHBvcnRzID0ge307XG4gIGlmICghbm9kZS5ib2R5KSB7IG5vZGUuYm9keSA9IFtdOyB9XG4gIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzLmVvZikge1xuICAgIHZhciBzdG10ID0gdGhpcy5wYXJzZVN0YXRlbWVudChudWxsLCB0cnVlLCBleHBvcnRzKTtcbiAgICBub2RlLmJvZHkucHVzaChzdG10KTtcbiAgfVxuICBpZiAodGhpcy5pbk1vZHVsZSlcbiAgICB7IGZvciAodmFyIGkgPSAwLCBsaXN0ID0gT2JqZWN0LmtleXModGhpcy51bmRlZmluZWRFeHBvcnRzKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgICAgIHZhciBuYW1lID0gbGlzdFtpXTtcblxuICAgICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy51bmRlZmluZWRFeHBvcnRzW25hbWVdLnN0YXJ0LCAoXCJFeHBvcnQgJ1wiICsgbmFtZSArIFwiJyBpcyBub3QgZGVmaW5lZFwiKSk7XG4gICAgICB9IH1cbiAgdGhpcy5hZGFwdERpcmVjdGl2ZVByb2xvZ3VlKG5vZGUuYm9keSk7XG4gIHRoaXMubmV4dCgpO1xuICBub2RlLnNvdXJjZVR5cGUgPSB0aGlzLm9wdGlvbnMuc291cmNlVHlwZTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlByb2dyYW1cIilcbn07XG5cbnZhciBsb29wTGFiZWwgPSB7a2luZDogXCJsb29wXCJ9LCBzd2l0Y2hMYWJlbCA9IHtraW5kOiBcInN3aXRjaFwifTtcblxucHAkMS5pc0xldCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYgfHwgIXRoaXMuaXNDb250ZXh0dWFsKFwibGV0XCIpKSB7IHJldHVybiBmYWxzZSB9XG4gIHNraXBXaGl0ZVNwYWNlLmxhc3RJbmRleCA9IHRoaXMucG9zO1xuICB2YXIgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dCk7XG4gIHZhciBuZXh0ID0gdGhpcy5wb3MgKyBza2lwWzBdLmxlbmd0aCwgbmV4dENoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KG5leHQpO1xuICAvLyBGb3IgYW1iaWd1b3VzIGNhc2VzLCBkZXRlcm1pbmUgaWYgYSBMZXhpY2FsRGVjbGFyYXRpb24gKG9yIG9ubHkgYVxuICAvLyBTdGF0ZW1lbnQpIGlzIGFsbG93ZWQgaGVyZS4gSWYgY29udGV4dCBpcyBub3QgZW1wdHkgdGhlbiBvbmx5IGEgU3RhdGVtZW50XG4gIC8vIGlzIGFsbG93ZWQuIEhvd2V2ZXIsIGBsZXQgW2AgaXMgYW4gZXhwbGljaXQgbmVnYXRpdmUgbG9va2FoZWFkIGZvclxuICAvLyBFeHByZXNzaW9uU3RhdGVtZW50LCBzbyBzcGVjaWFsLWNhc2UgaXQgZmlyc3QuXG4gIGlmIChuZXh0Q2ggPT09IDkxKSB7IHJldHVybiB0cnVlIH0gLy8gJ1snXG4gIGlmIChjb250ZXh0KSB7IHJldHVybiBmYWxzZSB9XG5cbiAgaWYgKG5leHRDaCA9PT0gMTIzKSB7IHJldHVybiB0cnVlIH0gLy8gJ3snXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChuZXh0Q2gsIHRydWUpKSB7XG4gICAgdmFyIHBvcyA9IG5leHQgKyAxO1xuICAgIHdoaWxlIChpc0lkZW50aWZpZXJDaGFyKHRoaXMuaW5wdXQuY2hhckNvZGVBdChwb3MpLCB0cnVlKSkgeyArK3BvczsgfVxuICAgIHZhciBpZGVudCA9IHRoaXMuaW5wdXQuc2xpY2UobmV4dCwgcG9zKTtcbiAgICBpZiAoIWtleXdvcmRSZWxhdGlvbmFsT3BlcmF0b3IudGVzdChpZGVudCkpIHsgcmV0dXJuIHRydWUgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gY2hlY2sgJ2FzeW5jIFtubyBMaW5lVGVybWluYXRvciBoZXJlXSBmdW5jdGlvbidcbi8vIC0gJ2FzeW5jIC8qZm9vKi8gZnVuY3Rpb24nIGlzIE9LLlxuLy8gLSAnYXN5bmMgLypcXG4qLyBmdW5jdGlvbicgaXMgaW52YWxpZC5cbnBwJDEuaXNBc3luY0Z1bmN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPCA4IHx8ICF0aGlzLmlzQ29udGV4dHVhbChcImFzeW5jXCIpKVxuICAgIHsgcmV0dXJuIGZhbHNlIH1cblxuICBza2lwV2hpdGVTcGFjZS5sYXN0SW5kZXggPSB0aGlzLnBvcztcbiAgdmFyIHNraXAgPSBza2lwV2hpdGVTcGFjZS5leGVjKHRoaXMuaW5wdXQpO1xuICB2YXIgbmV4dCA9IHRoaXMucG9zICsgc2tpcFswXS5sZW5ndGg7XG4gIHJldHVybiAhbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLnBvcywgbmV4dCkpICYmXG4gICAgdGhpcy5pbnB1dC5zbGljZShuZXh0LCBuZXh0ICsgOCkgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgIChuZXh0ICsgOCA9PT0gdGhpcy5pbnB1dC5sZW5ndGggfHwgIWlzSWRlbnRpZmllckNoYXIodGhpcy5pbnB1dC5jaGFyQXQobmV4dCArIDgpKSlcbn07XG5cbi8vIFBhcnNlIGEgc2luZ2xlIHN0YXRlbWVudC5cbi8vXG4vLyBJZiBleHBlY3RpbmcgYSBzdGF0ZW1lbnQgYW5kIGZpbmRpbmcgYSBzbGFzaCBvcGVyYXRvciwgcGFyc2UgYVxuLy8gcmVndWxhciBleHByZXNzaW9uIGxpdGVyYWwuIFRoaXMgaXMgdG8gaGFuZGxlIGNhc2VzIGxpa2Vcbi8vIGBpZiAoZm9vKSAvYmxhaC8uZXhlYyhmb28pYCwgd2hlcmUgbG9va2luZyBhdCB0aGUgcHJldmlvdXMgdG9rZW5cbi8vIGRvZXMgbm90IGhlbHAuXG5cbnBwJDEucGFyc2VTdGF0ZW1lbnQgPSBmdW5jdGlvbihjb250ZXh0LCB0b3BMZXZlbCwgZXhwb3J0cykge1xuICB2YXIgc3RhcnR0eXBlID0gdGhpcy50eXBlLCBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwga2luZDtcblxuICBpZiAodGhpcy5pc0xldChjb250ZXh0KSkge1xuICAgIHN0YXJ0dHlwZSA9IHR5cGVzLl92YXI7XG4gICAga2luZCA9IFwibGV0XCI7XG4gIH1cblxuICAvLyBNb3N0IHR5cGVzIG9mIHN0YXRlbWVudHMgYXJlIHJlY29nbml6ZWQgYnkgdGhlIGtleXdvcmQgdGhleVxuICAvLyBzdGFydCB3aXRoLiBNYW55IGFyZSB0cml2aWFsIHRvIHBhcnNlLCBzb21lIHJlcXVpcmUgYSBiaXQgb2ZcbiAgLy8gY29tcGxleGl0eS5cblxuICBzd2l0Y2ggKHN0YXJ0dHlwZSkge1xuICBjYXNlIHR5cGVzLl9icmVhazogY2FzZSB0eXBlcy5fY29udGludWU6IHJldHVybiB0aGlzLnBhcnNlQnJlYWtDb250aW51ZVN0YXRlbWVudChub2RlLCBzdGFydHR5cGUua2V5d29yZClcbiAgY2FzZSB0eXBlcy5fZGVidWdnZXI6IHJldHVybiB0aGlzLnBhcnNlRGVidWdnZXJTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0eXBlcy5fZG86IHJldHVybiB0aGlzLnBhcnNlRG9TdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0eXBlcy5fZm9yOiByZXR1cm4gdGhpcy5wYXJzZUZvclN0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl9mdW5jdGlvbjpcbiAgICAvLyBGdW5jdGlvbiBhcyBzb2xlIGJvZHkgb2YgZWl0aGVyIGFuIGlmIHN0YXRlbWVudCBvciBhIGxhYmVsZWQgc3RhdGVtZW50XG4gICAgLy8gd29ya3MsIGJ1dCBub3Qgd2hlbiBpdCBpcyBwYXJ0IG9mIGEgbGFiZWxlZCBzdGF0ZW1lbnQgdGhhdCBpcyB0aGUgc29sZVxuICAgIC8vIGJvZHkgb2YgYW4gaWYgc3RhdGVtZW50LlxuICAgIGlmICgoY29udGV4dCAmJiAodGhpcy5zdHJpY3QgfHwgY29udGV4dCAhPT0gXCJpZlwiICYmIGNvbnRleHQgIT09IFwibGFiZWxcIikpICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VGdW5jdGlvblN0YXRlbWVudChub2RlLCBmYWxzZSwgIWNvbnRleHQpXG4gIGNhc2UgdHlwZXMuX2NsYXNzOlxuICAgIGlmIChjb250ZXh0KSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VDbGFzcyhub2RlLCB0cnVlKVxuICBjYXNlIHR5cGVzLl9pZjogcmV0dXJuIHRoaXMucGFyc2VJZlN0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl9yZXR1cm46IHJldHVybiB0aGlzLnBhcnNlUmV0dXJuU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHlwZXMuX3N3aXRjaDogcmV0dXJuIHRoaXMucGFyc2VTd2l0Y2hTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0eXBlcy5fdGhyb3c6IHJldHVybiB0aGlzLnBhcnNlVGhyb3dTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0eXBlcy5fdHJ5OiByZXR1cm4gdGhpcy5wYXJzZVRyeVN0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLl9jb25zdDogY2FzZSB0eXBlcy5fdmFyOlxuICAgIGtpbmQgPSBraW5kIHx8IHRoaXMudmFsdWU7XG4gICAgaWYgKGNvbnRleHQgJiYga2luZCAhPT0gXCJ2YXJcIikgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlVmFyU3RhdGVtZW50KG5vZGUsIGtpbmQpXG4gIGNhc2UgdHlwZXMuX3doaWxlOiByZXR1cm4gdGhpcy5wYXJzZVdoaWxlU3RhdGVtZW50KG5vZGUpXG4gIGNhc2UgdHlwZXMuX3dpdGg6IHJldHVybiB0aGlzLnBhcnNlV2l0aFN0YXRlbWVudChub2RlKVxuICBjYXNlIHR5cGVzLmJyYWNlTDogcmV0dXJuIHRoaXMucGFyc2VCbG9jayh0cnVlLCBub2RlKVxuICBjYXNlIHR5cGVzLnNlbWk6IHJldHVybiB0aGlzLnBhcnNlRW1wdHlTdGF0ZW1lbnQobm9kZSlcbiAgY2FzZSB0eXBlcy5fZXhwb3J0OlxuICBjYXNlIHR5cGVzLl9pbXBvcnQ6XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+IDEwICYmIHN0YXJ0dHlwZSA9PT0gdHlwZXMuX2ltcG9ydCkge1xuICAgICAgc2tpcFdoaXRlU3BhY2UubGFzdEluZGV4ID0gdGhpcy5wb3M7XG4gICAgICB2YXIgc2tpcCA9IHNraXBXaGl0ZVNwYWNlLmV4ZWModGhpcy5pbnB1dCk7XG4gICAgICB2YXIgbmV4dCA9IHRoaXMucG9zICsgc2tpcFswXS5sZW5ndGgsIG5leHRDaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdChuZXh0KTtcbiAgICAgIGlmIChuZXh0Q2ggPT09IDQwIHx8IG5leHRDaCA9PT0gNDYpIC8vICcoJyBvciAnLidcbiAgICAgICAgeyByZXR1cm4gdGhpcy5wYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSwgdGhpcy5wYXJzZUV4cHJlc3Npb24oKSkgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLmFsbG93SW1wb3J0RXhwb3J0RXZlcnl3aGVyZSkge1xuICAgICAgaWYgKCF0b3BMZXZlbClcbiAgICAgICAgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ2ltcG9ydCcgYW5kICdleHBvcnQnIG1heSBvbmx5IGFwcGVhciBhdCB0aGUgdG9wIGxldmVsXCIpOyB9XG4gICAgICBpZiAoIXRoaXMuaW5Nb2R1bGUpXG4gICAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIidpbXBvcnQnIGFuZCAnZXhwb3J0JyBtYXkgYXBwZWFyIG9ubHkgd2l0aCAnc291cmNlVHlwZTogbW9kdWxlJ1wiKTsgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhcnR0eXBlID09PSB0eXBlcy5faW1wb3J0ID8gdGhpcy5wYXJzZUltcG9ydChub2RlKSA6IHRoaXMucGFyc2VFeHBvcnQobm9kZSwgZXhwb3J0cylcblxuICAgIC8vIElmIHRoZSBzdGF0ZW1lbnQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHN0YXRlbWVudCBrZXl3b3JkIG9yIGFcbiAgICAvLyBicmFjZSwgaXQncyBhbiBFeHByZXNzaW9uU3RhdGVtZW50IG9yIExhYmVsZWRTdGF0ZW1lbnQuIFdlXG4gICAgLy8gc2ltcGx5IHN0YXJ0IHBhcnNpbmcgYW4gZXhwcmVzc2lvbiwgYW5kIGFmdGVyd2FyZHMsIGlmIHRoZVxuICAgIC8vIG5leHQgdG9rZW4gaXMgYSBjb2xvbiBhbmQgdGhlIGV4cHJlc3Npb24gd2FzIGEgc2ltcGxlXG4gICAgLy8gSWRlbnRpZmllciBub2RlLCB3ZSBzd2l0Y2ggdG8gaW50ZXJwcmV0aW5nIGl0IGFzIGEgbGFiZWwuXG4gIGRlZmF1bHQ6XG4gICAgaWYgKHRoaXMuaXNBc3luY0Z1bmN0aW9uKCkpIHtcbiAgICAgIGlmIChjb250ZXh0KSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb25TdGF0ZW1lbnQobm9kZSwgdHJ1ZSwgIWNvbnRleHQpXG4gICAgfVxuXG4gICAgdmFyIG1heWJlTmFtZSA9IHRoaXMudmFsdWUsIGV4cHIgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbigpO1xuICAgIGlmIChzdGFydHR5cGUgPT09IHR5cGVzLm5hbWUgJiYgZXhwci50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiB0aGlzLmVhdCh0eXBlcy5jb2xvbikpXG4gICAgICB7IHJldHVybiB0aGlzLnBhcnNlTGFiZWxlZFN0YXRlbWVudChub2RlLCBtYXliZU5hbWUsIGV4cHIsIGNvbnRleHQpIH1cbiAgICBlbHNlIHsgcmV0dXJuIHRoaXMucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KG5vZGUsIGV4cHIpIH1cbiAgfVxufTtcblxucHAkMS5wYXJzZUJyZWFrQ29udGludWVTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBrZXl3b3JkKSB7XG4gIHZhciBpc0JyZWFrID0ga2V5d29yZCA9PT0gXCJicmVha1wiO1xuICB0aGlzLm5leHQoKTtcbiAgaWYgKHRoaXMuZWF0KHR5cGVzLnNlbWkpIHx8IHRoaXMuaW5zZXJ0U2VtaWNvbG9uKCkpIHsgbm9kZS5sYWJlbCA9IG51bGw7IH1cbiAgZWxzZSBpZiAodGhpcy50eXBlICE9PSB0eXBlcy5uYW1lKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gIGVsc2Uge1xuICAgIG5vZGUubGFiZWwgPSB0aGlzLnBhcnNlSWRlbnQoKTtcbiAgICB0aGlzLnNlbWljb2xvbigpO1xuICB9XG5cbiAgLy8gVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYW4gYWN0dWFsIGRlc3RpbmF0aW9uIHRvIGJyZWFrIG9yXG4gIC8vIGNvbnRpbnVlIHRvLlxuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgdGhpcy5sYWJlbHMubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgbGFiID0gdGhpcy5sYWJlbHNbaV07XG4gICAgaWYgKG5vZGUubGFiZWwgPT0gbnVsbCB8fCBsYWIubmFtZSA9PT0gbm9kZS5sYWJlbC5uYW1lKSB7XG4gICAgICBpZiAobGFiLmtpbmQgIT0gbnVsbCAmJiAoaXNCcmVhayB8fCBsYWIua2luZCA9PT0gXCJsb29wXCIpKSB7IGJyZWFrIH1cbiAgICAgIGlmIChub2RlLmxhYmVsICYmIGlzQnJlYWspIHsgYnJlYWsgfVxuICAgIH1cbiAgfVxuICBpZiAoaSA9PT0gdGhpcy5sYWJlbHMubGVuZ3RoKSB7IHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJVbnN5bnRhY3RpYyBcIiArIGtleXdvcmQpOyB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNCcmVhayA/IFwiQnJlYWtTdGF0ZW1lbnRcIiA6IFwiQ29udGludWVTdGF0ZW1lbnRcIilcbn07XG5cbnBwJDEucGFyc2VEZWJ1Z2dlclN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIHRoaXMuc2VtaWNvbG9uKCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJEZWJ1Z2dlclN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZURvU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgdGhpcy5sYWJlbHMucHVzaChsb29wTGFiZWwpO1xuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KFwiZG9cIik7XG4gIHRoaXMubGFiZWxzLnBvcCgpO1xuICB0aGlzLmV4cGVjdCh0eXBlcy5fd2hpbGUpO1xuICBub2RlLnRlc3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNilcbiAgICB7IHRoaXMuZWF0KHR5cGVzLnNlbWkpOyB9XG4gIGVsc2VcbiAgICB7IHRoaXMuc2VtaWNvbG9uKCk7IH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkRvV2hpbGVTdGF0ZW1lbnRcIilcbn07XG5cbi8vIERpc2FtYmlndWF0aW5nIGJldHdlZW4gYSBgZm9yYCBhbmQgYSBgZm9yYC9gaW5gIG9yIGBmb3JgL2BvZmBcbi8vIGxvb3AgaXMgbm9uLXRyaXZpYWwuIEJhc2ljYWxseSwgd2UgaGF2ZSB0byBwYXJzZSB0aGUgaW5pdCBgdmFyYFxuLy8gc3RhdGVtZW50IG9yIGV4cHJlc3Npb24sIGRpc2FsbG93aW5nIHRoZSBgaW5gIG9wZXJhdG9yIChzZWVcbi8vIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIGBwYXJzZUV4cHJlc3Npb25gKSwgYW5kIHRoZW4gY2hlY2tcbi8vIHdoZXRoZXIgdGhlIG5leHQgdG9rZW4gaXMgYGluYCBvciBgb2ZgLiBXaGVuIHRoZXJlIGlzIG5vIGluaXRcbi8vIHBhcnQgKHNlbWljb2xvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgb3BlbmluZyBwYXJlbnRoZXNpcyksIGl0XG4vLyBpcyBhIHJlZ3VsYXIgYGZvcmAgbG9vcC5cblxucHAkMS5wYXJzZUZvclN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIHZhciBhd2FpdEF0ID0gKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmICh0aGlzLmluQXN5bmMgfHwgKCF0aGlzLmluRnVuY3Rpb24gJiYgdGhpcy5vcHRpb25zLmFsbG93QXdhaXRPdXRzaWRlRnVuY3Rpb24pKSAmJiB0aGlzLmVhdENvbnRleHR1YWwoXCJhd2FpdFwiKSkgPyB0aGlzLmxhc3RUb2tTdGFydCA6IC0xO1xuICB0aGlzLmxhYmVscy5wdXNoKGxvb3BMYWJlbCk7XG4gIHRoaXMuZW50ZXJTY29wZSgwKTtcbiAgdGhpcy5leHBlY3QodHlwZXMucGFyZW5MKTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuc2VtaSkge1xuICAgIGlmIChhd2FpdEF0ID4gLTEpIHsgdGhpcy51bmV4cGVjdGVkKGF3YWl0QXQpOyB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VGb3Iobm9kZSwgbnVsbClcbiAgfVxuICB2YXIgaXNMZXQgPSB0aGlzLmlzTGV0KCk7XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLl92YXIgfHwgdGhpcy50eXBlID09PSB0eXBlcy5fY29uc3QgfHwgaXNMZXQpIHtcbiAgICB2YXIgaW5pdCQxID0gdGhpcy5zdGFydE5vZGUoKSwga2luZCA9IGlzTGV0ID8gXCJsZXRcIiA6IHRoaXMudmFsdWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgdGhpcy5wYXJzZVZhcihpbml0JDEsIHRydWUsIGtpbmQpO1xuICAgIHRoaXMuZmluaXNoTm9kZShpbml0JDEsIFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKTtcbiAgICBpZiAoKHRoaXMudHlwZSA9PT0gdHlwZXMuX2luIHx8ICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkgJiYgaW5pdCQxLmRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5faW4pIHtcbiAgICAgICAgICBpZiAoYXdhaXRBdCA+IC0xKSB7IHRoaXMudW5leHBlY3RlZChhd2FpdEF0KTsgfVxuICAgICAgICB9IGVsc2UgeyBub2RlLmF3YWl0ID0gYXdhaXRBdCA+IC0xOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUZvckluKG5vZGUsIGluaXQkMSlcbiAgICB9XG4gICAgaWYgKGF3YWl0QXQgPiAtMSkgeyB0aGlzLnVuZXhwZWN0ZWQoYXdhaXRBdCk7IH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZUZvcihub2RlLCBpbml0JDEpXG4gIH1cbiAgdmFyIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgPSBuZXcgRGVzdHJ1Y3R1cmluZ0Vycm9ycztcbiAgdmFyIGluaXQgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbih0cnVlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuX2luIHx8ICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSkge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuX2luKSB7XG4gICAgICAgIGlmIChhd2FpdEF0ID4gLTEpIHsgdGhpcy51bmV4cGVjdGVkKGF3YWl0QXQpOyB9XG4gICAgICB9IGVsc2UgeyBub2RlLmF3YWl0ID0gYXdhaXRBdCA+IC0xOyB9XG4gICAgfVxuICAgIHRoaXMudG9Bc3NpZ25hYmxlKGluaXQsIGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICB0aGlzLmNoZWNrTFZhbChpbml0KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUZvckluKG5vZGUsIGluaXQpXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7XG4gIH1cbiAgaWYgKGF3YWl0QXQgPiAtMSkgeyB0aGlzLnVuZXhwZWN0ZWQoYXdhaXRBdCk7IH1cbiAgcmV0dXJuIHRoaXMucGFyc2VGb3Iobm9kZSwgaW5pdClcbn07XG5cbnBwJDEucGFyc2VGdW5jdGlvblN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGlzQXN5bmMsIGRlY2xhcmF0aW9uUG9zaXRpb24pIHtcbiAgdGhpcy5uZXh0KCk7XG4gIHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24obm9kZSwgRlVOQ19TVEFURU1FTlQgfCAoZGVjbGFyYXRpb25Qb3NpdGlvbiA/IDAgOiBGVU5DX0hBTkdJTkdfU1RBVEVNRU5UKSwgZmFsc2UsIGlzQXN5bmMpXG59O1xuXG5wcCQxLnBhcnNlSWZTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpO1xuICBub2RlLnRlc3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIC8vIGFsbG93IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbiBicmFuY2hlcywgYnV0IG9ubHkgaW4gbm9uLXN0cmljdCBtb2RlXG4gIG5vZGUuY29uc2VxdWVudCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJpZlwiKTtcbiAgbm9kZS5hbHRlcm5hdGUgPSB0aGlzLmVhdCh0eXBlcy5fZWxzZSkgPyB0aGlzLnBhcnNlU3RhdGVtZW50KFwiaWZcIikgOiBudWxsO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiSWZTdGF0ZW1lbnRcIilcbn07XG5cbnBwJDEucGFyc2VSZXR1cm5TdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIGlmICghdGhpcy5pbkZ1bmN0aW9uICYmICF0aGlzLm9wdGlvbnMuYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb24pXG4gICAgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiJ3JldHVybicgb3V0c2lkZSBvZiBmdW5jdGlvblwiKTsgfVxuICB0aGlzLm5leHQoKTtcblxuICAvLyBJbiBgcmV0dXJuYCAoYW5kIGBicmVha2AvYGNvbnRpbnVlYCksIHRoZSBrZXl3b3JkcyB3aXRoXG4gIC8vIG9wdGlvbmFsIGFyZ3VtZW50cywgd2UgZWFnZXJseSBsb29rIGZvciBhIHNlbWljb2xvbiBvciB0aGVcbiAgLy8gcG9zc2liaWxpdHkgdG8gaW5zZXJ0IG9uZS5cblxuICBpZiAodGhpcy5lYXQodHlwZXMuc2VtaSkgfHwgdGhpcy5pbnNlcnRTZW1pY29sb24oKSkgeyBub2RlLmFyZ3VtZW50ID0gbnVsbDsgfVxuICBlbHNlIHsgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7IHRoaXMuc2VtaWNvbG9uKCk7IH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlJldHVyblN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZVN3aXRjaFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIG5vZGUuZGlzY3JpbWluYW50ID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpO1xuICBub2RlLmNhc2VzID0gW107XG4gIHRoaXMuZXhwZWN0KHR5cGVzLmJyYWNlTCk7XG4gIHRoaXMubGFiZWxzLnB1c2goc3dpdGNoTGFiZWwpO1xuICB0aGlzLmVudGVyU2NvcGUoMCk7XG5cbiAgLy8gU3RhdGVtZW50cyB1bmRlciBtdXN0IGJlIGdyb3VwZWQgKGJ5IGxhYmVsKSBpbiBTd2l0Y2hDYXNlXG4gIC8vIG5vZGVzLiBgY3VyYCBpcyB1c2VkIHRvIGtlZXAgdGhlIG5vZGUgdGhhdCB3ZSBhcmUgY3VycmVudGx5XG4gIC8vIGFkZGluZyBzdGF0ZW1lbnRzIHRvLlxuXG4gIHZhciBjdXI7XG4gIGZvciAodmFyIHNhd0RlZmF1bHQgPSBmYWxzZTsgdGhpcy50eXBlICE9PSB0eXBlcy5icmFjZVI7KSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuX2Nhc2UgfHwgdGhpcy50eXBlID09PSB0eXBlcy5fZGVmYXVsdCkge1xuICAgICAgdmFyIGlzQ2FzZSA9IHRoaXMudHlwZSA9PT0gdHlwZXMuX2Nhc2U7XG4gICAgICBpZiAoY3VyKSB7IHRoaXMuZmluaXNoTm9kZShjdXIsIFwiU3dpdGNoQ2FzZVwiKTsgfVxuICAgICAgbm9kZS5jYXNlcy5wdXNoKGN1ciA9IHRoaXMuc3RhcnROb2RlKCkpO1xuICAgICAgY3VyLmNvbnNlcXVlbnQgPSBbXTtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgICAgaWYgKGlzQ2FzZSkge1xuICAgICAgICBjdXIudGVzdCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc2F3RGVmYXVsdCkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5sYXN0VG9rU3RhcnQsIFwiTXVsdGlwbGUgZGVmYXVsdCBjbGF1c2VzXCIpOyB9XG4gICAgICAgIHNhd0RlZmF1bHQgPSB0cnVlO1xuICAgICAgICBjdXIudGVzdCA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcy5jb2xvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghY3VyKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICBjdXIuY29uc2VxdWVudC5wdXNoKHRoaXMucGFyc2VTdGF0ZW1lbnQobnVsbCkpO1xuICAgIH1cbiAgfVxuICB0aGlzLmV4aXRTY29wZSgpO1xuICBpZiAoY3VyKSB7IHRoaXMuZmluaXNoTm9kZShjdXIsIFwiU3dpdGNoQ2FzZVwiKTsgfVxuICB0aGlzLm5leHQoKTsgLy8gQ2xvc2luZyBicmFjZVxuICB0aGlzLmxhYmVscy5wb3AoKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlN3aXRjaFN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZVRocm93U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgaWYgKGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSkpXG4gICAgeyB0aGlzLnJhaXNlKHRoaXMubGFzdFRva0VuZCwgXCJJbGxlZ2FsIG5ld2xpbmUgYWZ0ZXIgdGhyb3dcIik7IH1cbiAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gIHRoaXMuc2VtaWNvbG9uKCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUaHJvd1N0YXRlbWVudFwiKVxufTtcblxuLy8gUmV1c2VkIGVtcHR5IGFycmF5IGFkZGVkIGZvciBub2RlIGZpZWxkcyB0aGF0IGFyZSBhbHdheXMgZW1wdHkuXG5cbnZhciBlbXB0eSA9IFtdO1xuXG5wcCQxLnBhcnNlVHJ5U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgbm9kZS5ibG9jayA9IHRoaXMucGFyc2VCbG9jaygpO1xuICBub2RlLmhhbmRsZXIgPSBudWxsO1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5fY2F0Y2gpIHtcbiAgICB2YXIgY2xhdXNlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICBpZiAodGhpcy5lYXQodHlwZXMucGFyZW5MKSkge1xuICAgICAgY2xhdXNlLnBhcmFtID0gdGhpcy5wYXJzZUJpbmRpbmdBdG9tKCk7XG4gICAgICB2YXIgc2ltcGxlID0gY2xhdXNlLnBhcmFtLnR5cGUgPT09IFwiSWRlbnRpZmllclwiO1xuICAgICAgdGhpcy5lbnRlclNjb3BlKHNpbXBsZSA/IFNDT1BFX1NJTVBMRV9DQVRDSCA6IDApO1xuICAgICAgdGhpcy5jaGVja0xWYWwoY2xhdXNlLnBhcmFtLCBzaW1wbGUgPyBCSU5EX1NJTVBMRV9DQVRDSCA6IEJJTkRfTEVYSUNBTCk7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcy5wYXJlblIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgMTApIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICAgIGNsYXVzZS5wYXJhbSA9IG51bGw7XG4gICAgICB0aGlzLmVudGVyU2NvcGUoMCk7XG4gICAgfVxuICAgIGNsYXVzZS5ib2R5ID0gdGhpcy5wYXJzZUJsb2NrKGZhbHNlKTtcbiAgICB0aGlzLmV4aXRTY29wZSgpO1xuICAgIG5vZGUuaGFuZGxlciA9IHRoaXMuZmluaXNoTm9kZShjbGF1c2UsIFwiQ2F0Y2hDbGF1c2VcIik7XG4gIH1cbiAgbm9kZS5maW5hbGl6ZXIgPSB0aGlzLmVhdCh0eXBlcy5fZmluYWxseSkgPyB0aGlzLnBhcnNlQmxvY2soKSA6IG51bGw7XG4gIGlmICghbm9kZS5oYW5kbGVyICYmICFub2RlLmZpbmFsaXplcilcbiAgICB7IHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJNaXNzaW5nIGNhdGNoIG9yIGZpbmFsbHkgY2xhdXNlXCIpOyB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUcnlTdGF0ZW1lbnRcIilcbn07XG5cbnBwJDEucGFyc2VWYXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlLCBraW5kKSB7XG4gIHRoaXMubmV4dCgpO1xuICB0aGlzLnBhcnNlVmFyKG5vZGUsIGZhbHNlLCBraW5kKTtcbiAgdGhpcy5zZW1pY29sb24oKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIilcbn07XG5cbnBwJDEucGFyc2VXaGlsZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIG5vZGUudGVzdCA9IHRoaXMucGFyc2VQYXJlbkV4cHJlc3Npb24oKTtcbiAgdGhpcy5sYWJlbHMucHVzaChsb29wTGFiZWwpO1xuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KFwid2hpbGVcIik7XG4gIHRoaXMubGFiZWxzLnBvcCgpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiV2hpbGVTdGF0ZW1lbnRcIilcbn07XG5cbnBwJDEucGFyc2VXaXRoU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICBpZiAodGhpcy5zdHJpY3QpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIid3aXRoJyBpbiBzdHJpY3QgbW9kZVwiKTsgfVxuICB0aGlzLm5leHQoKTtcbiAgbm9kZS5vYmplY3QgPSB0aGlzLnBhcnNlUGFyZW5FeHByZXNzaW9uKCk7XG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJ3aXRoXCIpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiV2l0aFN0YXRlbWVudFwiKVxufTtcblxucHAkMS5wYXJzZUVtcHR5U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkVtcHR5U3RhdGVtZW50XCIpXG59O1xuXG5wcCQxLnBhcnNlTGFiZWxlZFN0YXRlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIG1heWJlTmFtZSwgZXhwciwgY29udGV4dCkge1xuICBmb3IgKHZhciBpJDEgPSAwLCBsaXN0ID0gdGhpcy5sYWJlbHM7IGkkMSA8IGxpc3QubGVuZ3RoOyBpJDEgKz0gMSlcbiAgICB7XG4gICAgdmFyIGxhYmVsID0gbGlzdFtpJDFdO1xuXG4gICAgaWYgKGxhYmVsLm5hbWUgPT09IG1heWJlTmFtZSlcbiAgICAgIHsgdGhpcy5yYWlzZShleHByLnN0YXJ0LCBcIkxhYmVsICdcIiArIG1heWJlTmFtZSArIFwiJyBpcyBhbHJlYWR5IGRlY2xhcmVkXCIpO1xuICB9IH1cbiAgdmFyIGtpbmQgPSB0aGlzLnR5cGUuaXNMb29wID8gXCJsb29wXCIgOiB0aGlzLnR5cGUgPT09IHR5cGVzLl9zd2l0Y2ggPyBcInN3aXRjaFwiIDogbnVsbDtcbiAgZm9yICh2YXIgaSA9IHRoaXMubGFiZWxzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgdmFyIGxhYmVsJDEgPSB0aGlzLmxhYmVsc1tpXTtcbiAgICBpZiAobGFiZWwkMS5zdGF0ZW1lbnRTdGFydCA9PT0gbm9kZS5zdGFydCkge1xuICAgICAgLy8gVXBkYXRlIGluZm9ybWF0aW9uIGFib3V0IHByZXZpb3VzIGxhYmVscyBvbiB0aGlzIG5vZGVcbiAgICAgIGxhYmVsJDEuc3RhdGVtZW50U3RhcnQgPSB0aGlzLnN0YXJ0O1xuICAgICAgbGFiZWwkMS5raW5kID0ga2luZDtcbiAgICB9IGVsc2UgeyBicmVhayB9XG4gIH1cbiAgdGhpcy5sYWJlbHMucHVzaCh7bmFtZTogbWF5YmVOYW1lLCBraW5kOiBraW5kLCBzdGF0ZW1lbnRTdGFydDogdGhpcy5zdGFydH0pO1xuICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlU3RhdGVtZW50KGNvbnRleHQgPyBjb250ZXh0LmluZGV4T2YoXCJsYWJlbFwiKSA9PT0gLTEgPyBjb250ZXh0ICsgXCJsYWJlbFwiIDogY29udGV4dCA6IFwibGFiZWxcIik7XG4gIHRoaXMubGFiZWxzLnBvcCgpO1xuICBub2RlLmxhYmVsID0gZXhwcjtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkxhYmVsZWRTdGF0ZW1lbnRcIilcbn07XG5cbnBwJDEucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSwgZXhwcikge1xuICBub2RlLmV4cHJlc3Npb24gPSBleHByO1xuICB0aGlzLnNlbWljb2xvbigpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKVxufTtcblxuLy8gUGFyc2UgYSBzZW1pY29sb24tZW5jbG9zZWQgYmxvY2sgb2Ygc3RhdGVtZW50cywgaGFuZGxpbmcgYFwidXNlXG4vLyBzdHJpY3RcImAgZGVjbGFyYXRpb25zIHdoZW4gYGFsbG93U3RyaWN0YCBpcyB0cnVlICh1c2VkIGZvclxuLy8gZnVuY3Rpb24gYm9kaWVzKS5cblxucHAkMS5wYXJzZUJsb2NrID0gZnVuY3Rpb24oY3JlYXRlTmV3TGV4aWNhbFNjb3BlLCBub2RlLCBleGl0U3RyaWN0KSB7XG4gIGlmICggY3JlYXRlTmV3TGV4aWNhbFNjb3BlID09PSB2b2lkIDAgKSBjcmVhdGVOZXdMZXhpY2FsU2NvcGUgPSB0cnVlO1xuICBpZiAoIG5vZGUgPT09IHZvaWQgMCApIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuXG4gIG5vZGUuYm9keSA9IFtdO1xuICB0aGlzLmV4cGVjdCh0eXBlcy5icmFjZUwpO1xuICBpZiAoY3JlYXRlTmV3TGV4aWNhbFNjb3BlKSB7IHRoaXMuZW50ZXJTY29wZSgwKTsgfVxuICB3aGlsZSAodGhpcy50eXBlICE9PSB0eXBlcy5icmFjZVIpIHtcbiAgICB2YXIgc3RtdCA9IHRoaXMucGFyc2VTdGF0ZW1lbnQobnVsbCk7XG4gICAgbm9kZS5ib2R5LnB1c2goc3RtdCk7XG4gIH1cbiAgaWYgKGV4aXRTdHJpY3QpIHsgdGhpcy5zdHJpY3QgPSBmYWxzZTsgfVxuICB0aGlzLm5leHQoKTtcbiAgaWYgKGNyZWF0ZU5ld0xleGljYWxTY29wZSkgeyB0aGlzLmV4aXRTY29wZSgpOyB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJCbG9ja1N0YXRlbWVudFwiKVxufTtcblxuLy8gUGFyc2UgYSByZWd1bGFyIGBmb3JgIGxvb3AuIFRoZSBkaXNhbWJpZ3VhdGlvbiBjb2RlIGluXG4vLyBgcGFyc2VTdGF0ZW1lbnRgIHdpbGwgYWxyZWFkeSBoYXZlIHBhcnNlZCB0aGUgaW5pdCBzdGF0ZW1lbnQgb3Jcbi8vIGV4cHJlc3Npb24uXG5cbnBwJDEucGFyc2VGb3IgPSBmdW5jdGlvbihub2RlLCBpbml0KSB7XG4gIG5vZGUuaW5pdCA9IGluaXQ7XG4gIHRoaXMuZXhwZWN0KHR5cGVzLnNlbWkpO1xuICBub2RlLnRlc3QgPSB0aGlzLnR5cGUgPT09IHR5cGVzLnNlbWkgPyBudWxsIDogdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgdGhpcy5leHBlY3QodHlwZXMuc2VtaSk7XG4gIG5vZGUudXBkYXRlID0gdGhpcy50eXBlID09PSB0eXBlcy5wYXJlblIgPyBudWxsIDogdGhpcy5wYXJzZUV4cHJlc3Npb24oKTtcbiAgdGhpcy5leHBlY3QodHlwZXMucGFyZW5SKTtcbiAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZVN0YXRlbWVudChcImZvclwiKTtcbiAgdGhpcy5leGl0U2NvcGUoKTtcbiAgdGhpcy5sYWJlbHMucG9wKCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJGb3JTdGF0ZW1lbnRcIilcbn07XG5cbi8vIFBhcnNlIGEgYGZvcmAvYGluYCBhbmQgYGZvcmAvYG9mYCBsb29wLCB3aGljaCBhcmUgYWxtb3N0XG4vLyBzYW1lIGZyb20gcGFyc2VyJ3MgcGVyc3BlY3RpdmUuXG5cbnBwJDEucGFyc2VGb3JJbiA9IGZ1bmN0aW9uKG5vZGUsIGluaXQpIHtcbiAgdmFyIGlzRm9ySW4gPSB0aGlzLnR5cGUgPT09IHR5cGVzLl9pbjtcbiAgdGhpcy5uZXh0KCk7XG5cbiAgaWYgKFxuICAgIGluaXQudHlwZSA9PT0gXCJWYXJpYWJsZURlY2xhcmF0aW9uXCIgJiZcbiAgICBpbml0LmRlY2xhcmF0aW9uc1swXS5pbml0ICE9IG51bGwgJiZcbiAgICAoXG4gICAgICAhaXNGb3JJbiB8fFxuICAgICAgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgOCB8fFxuICAgICAgdGhpcy5zdHJpY3QgfHxcbiAgICAgIGluaXQua2luZCAhPT0gXCJ2YXJcIiB8fFxuICAgICAgaW5pdC5kZWNsYXJhdGlvbnNbMF0uaWQudHlwZSAhPT0gXCJJZGVudGlmaWVyXCJcbiAgICApXG4gICkge1xuICAgIHRoaXMucmFpc2UoXG4gICAgICBpbml0LnN0YXJ0LFxuICAgICAgKChpc0ZvckluID8gXCJmb3ItaW5cIiA6IFwiZm9yLW9mXCIpICsgXCIgbG9vcCB2YXJpYWJsZSBkZWNsYXJhdGlvbiBtYXkgbm90IGhhdmUgYW4gaW5pdGlhbGl6ZXJcIilcbiAgICApO1xuICB9IGVsc2UgaWYgKGluaXQudHlwZSA9PT0gXCJBc3NpZ25tZW50UGF0dGVyblwiKSB7XG4gICAgdGhpcy5yYWlzZShpbml0LnN0YXJ0LCBcIkludmFsaWQgbGVmdC1oYW5kIHNpZGUgaW4gZm9yLWxvb3BcIik7XG4gIH1cbiAgbm9kZS5sZWZ0ID0gaW5pdDtcbiAgbm9kZS5yaWdodCA9IGlzRm9ySW4gPyB0aGlzLnBhcnNlRXhwcmVzc2lvbigpIDogdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG4gIHRoaXMuZXhwZWN0KHR5cGVzLnBhcmVuUik7XG4gIG5vZGUuYm9keSA9IHRoaXMucGFyc2VTdGF0ZW1lbnQoXCJmb3JcIik7XG4gIHRoaXMuZXhpdFNjb3BlKCk7XG4gIHRoaXMubGFiZWxzLnBvcCgpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzRm9ySW4gPyBcIkZvckluU3RhdGVtZW50XCIgOiBcIkZvck9mU3RhdGVtZW50XCIpXG59O1xuXG4vLyBQYXJzZSBhIGxpc3Qgb2YgdmFyaWFibGUgZGVjbGFyYXRpb25zLlxuXG5wcCQxLnBhcnNlVmFyID0gZnVuY3Rpb24obm9kZSwgaXNGb3IsIGtpbmQpIHtcbiAgbm9kZS5kZWNsYXJhdGlvbnMgPSBbXTtcbiAgbm9kZS5raW5kID0ga2luZDtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkZWNsID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLnBhcnNlVmFySWQoZGVjbCwga2luZCk7XG4gICAgaWYgKHRoaXMuZWF0KHR5cGVzLmVxKSkge1xuICAgICAgZGVjbC5pbml0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGlzRm9yKTtcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT09IFwiY29uc3RcIiAmJiAhKHRoaXMudHlwZSA9PT0gdHlwZXMuX2luIHx8ICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkpIHtcbiAgICAgIHRoaXMudW5leHBlY3RlZCgpO1xuICAgIH0gZWxzZSBpZiAoZGVjbC5pZC50eXBlICE9PSBcIklkZW50aWZpZXJcIiAmJiAhKGlzRm9yICYmICh0aGlzLnR5cGUgPT09IHR5cGVzLl9pbiB8fCB0aGlzLmlzQ29udGV4dHVhbChcIm9mXCIpKSkpIHtcbiAgICAgIHRoaXMucmFpc2UodGhpcy5sYXN0VG9rRW5kLCBcIkNvbXBsZXggYmluZGluZyBwYXR0ZXJucyByZXF1aXJlIGFuIGluaXRpYWxpemF0aW9uIHZhbHVlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNsLmluaXQgPSBudWxsO1xuICAgIH1cbiAgICBub2RlLmRlY2xhcmF0aW9ucy5wdXNoKHRoaXMuZmluaXNoTm9kZShkZWNsLCBcIlZhcmlhYmxlRGVjbGFyYXRvclwiKSk7XG4gICAgaWYgKCF0aGlzLmVhdCh0eXBlcy5jb21tYSkpIHsgYnJlYWsgfVxuICB9XG4gIHJldHVybiBub2RlXG59O1xuXG5wcCQxLnBhcnNlVmFySWQgPSBmdW5jdGlvbihkZWNsLCBraW5kKSB7XG4gIGRlY2wuaWQgPSB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcbiAgdGhpcy5jaGVja0xWYWwoZGVjbC5pZCwga2luZCA9PT0gXCJ2YXJcIiA/IEJJTkRfVkFSIDogQklORF9MRVhJQ0FMLCBmYWxzZSk7XG59O1xuXG52YXIgRlVOQ19TVEFURU1FTlQgPSAxLCBGVU5DX0hBTkdJTkdfU1RBVEVNRU5UID0gMiwgRlVOQ19OVUxMQUJMRV9JRCA9IDQ7XG5cbi8vIFBhcnNlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gb3IgbGl0ZXJhbCAoZGVwZW5kaW5nIG9uIHRoZVxuLy8gYHN0YXRlbWVudCAmIEZVTkNfU1RBVEVNRU5UYCkuXG5cbi8vIFJlbW92ZSBgYWxsb3dFeHByZXNzaW9uQm9keWAgZm9yIDcuMC4wLCBhcyBpdCBpcyBvbmx5IGNhbGxlZCB3aXRoIGZhbHNlXG5wcCQxLnBhcnNlRnVuY3Rpb24gPSBmdW5jdGlvbihub2RlLCBzdGF0ZW1lbnQsIGFsbG93RXhwcmVzc2lvbkJvZHksIGlzQXN5bmMpIHtcbiAgdGhpcy5pbml0RnVuY3Rpb24obm9kZSk7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSB8fCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiAhaXNBc3luYykge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLnN0YXIgJiYgKHN0YXRlbWVudCAmIEZVTkNfSEFOR0lOR19TVEFURU1FTlQpKVxuICAgICAgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIG5vZGUuZ2VuZXJhdG9yID0gdGhpcy5lYXQodHlwZXMuc3Rhcik7XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KVxuICAgIHsgbm9kZS5hc3luYyA9ICEhaXNBc3luYzsgfVxuXG4gIGlmIChzdGF0ZW1lbnQgJiBGVU5DX1NUQVRFTUVOVCkge1xuICAgIG5vZGUuaWQgPSAoc3RhdGVtZW50ICYgRlVOQ19OVUxMQUJMRV9JRCkgJiYgdGhpcy50eXBlICE9PSB0eXBlcy5uYW1lID8gbnVsbCA6IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIGlmIChub2RlLmlkICYmICEoc3RhdGVtZW50ICYgRlVOQ19IQU5HSU5HX1NUQVRFTUVOVCkpXG4gICAgICAvLyBJZiBpdCBpcyBhIHJlZ3VsYXIgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gc2xvcHB5IG1vZGUsIHRoZW4gaXQgaXNcbiAgICAgIC8vIHN1YmplY3QgdG8gQW5uZXggQiBzZW1hbnRpY3MgKEJJTkRfRlVOQ1RJT04pLiBPdGhlcndpc2UsIHRoZSBiaW5kaW5nXG4gICAgICAvLyBtb2RlIGRlcGVuZHMgb24gcHJvcGVydGllcyBvZiB0aGUgY3VycmVudCBzY29wZSAoc2VlXG4gICAgICAvLyB0cmVhdEZ1bmN0aW9uc0FzVmFyKS5cbiAgICAgIHsgdGhpcy5jaGVja0xWYWwobm9kZS5pZCwgKHRoaXMuc3RyaWN0IHx8IG5vZGUuZ2VuZXJhdG9yIHx8IG5vZGUuYXN5bmMpID8gdGhpcy50cmVhdEZ1bmN0aW9uc0FzVmFyID8gQklORF9WQVIgOiBCSU5EX0xFWElDQUwgOiBCSU5EX0ZVTkNUSU9OKTsgfVxuICB9XG5cbiAgdmFyIG9sZFlpZWxkUG9zID0gdGhpcy55aWVsZFBvcywgb2xkQXdhaXRQb3MgPSB0aGlzLmF3YWl0UG9zLCBvbGRBd2FpdElkZW50UG9zID0gdGhpcy5hd2FpdElkZW50UG9zO1xuICB0aGlzLnlpZWxkUG9zID0gMDtcbiAgdGhpcy5hd2FpdFBvcyA9IDA7XG4gIHRoaXMuYXdhaXRJZGVudFBvcyA9IDA7XG4gIHRoaXMuZW50ZXJTY29wZShmdW5jdGlvbkZsYWdzKG5vZGUuYXN5bmMsIG5vZGUuZ2VuZXJhdG9yKSk7XG5cbiAgaWYgKCEoc3RhdGVtZW50ICYgRlVOQ19TVEFURU1FTlQpKVxuICAgIHsgbm9kZS5pZCA9IHRoaXMudHlwZSA9PT0gdHlwZXMubmFtZSA/IHRoaXMucGFyc2VJZGVudCgpIDogbnVsbDsgfVxuXG4gIHRoaXMucGFyc2VGdW5jdGlvblBhcmFtcyhub2RlKTtcbiAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShub2RlLCBhbGxvd0V4cHJlc3Npb25Cb2R5LCBmYWxzZSk7XG5cbiAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zO1xuICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3M7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgKHN0YXRlbWVudCAmIEZVTkNfU1RBVEVNRU5UKSA/IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiIDogXCJGdW5jdGlvbkV4cHJlc3Npb25cIilcbn07XG5cbnBwJDEucGFyc2VGdW5jdGlvblBhcmFtcyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdGhpcy5leHBlY3QodHlwZXMucGFyZW5MKTtcbiAgbm9kZS5wYXJhbXMgPSB0aGlzLnBhcnNlQmluZGluZ0xpc3QodHlwZXMucGFyZW5SLCBmYWxzZSwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgpO1xuICB0aGlzLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcygpO1xufTtcblxuLy8gUGFyc2UgYSBjbGFzcyBkZWNsYXJhdGlvbiBvciBsaXRlcmFsIChkZXBlbmRpbmcgb24gdGhlXG4vLyBgaXNTdGF0ZW1lbnRgIHBhcmFtZXRlcikuXG5cbnBwJDEucGFyc2VDbGFzcyA9IGZ1bmN0aW9uKG5vZGUsIGlzU3RhdGVtZW50KSB7XG4gIHRoaXMubmV4dCgpO1xuXG4gIC8vIGVjbWEtMjYyIDE0LjYgQ2xhc3MgRGVmaW5pdGlvbnNcbiAgLy8gQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFsd2F5cyBzdHJpY3QgbW9kZSBjb2RlLlxuICB2YXIgb2xkU3RyaWN0ID0gdGhpcy5zdHJpY3Q7XG4gIHRoaXMuc3RyaWN0ID0gdHJ1ZTtcblxuICB0aGlzLnBhcnNlQ2xhc3NJZChub2RlLCBpc1N0YXRlbWVudCk7XG4gIHRoaXMucGFyc2VDbGFzc1N1cGVyKG5vZGUpO1xuICB2YXIgY2xhc3NCb2R5ID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgdmFyIGhhZENvbnN0cnVjdG9yID0gZmFsc2U7XG4gIGNsYXNzQm9keS5ib2R5ID0gW107XG4gIHRoaXMuZXhwZWN0KHR5cGVzLmJyYWNlTCk7XG4gIHdoaWxlICh0aGlzLnR5cGUgIT09IHR5cGVzLmJyYWNlUikge1xuICAgIHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZUNsYXNzRWxlbWVudChub2RlLnN1cGVyQ2xhc3MgIT09IG51bGwpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICBjbGFzc0JvZHkuYm9keS5wdXNoKGVsZW1lbnQpO1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJNZXRob2REZWZpbml0aW9uXCIgJiYgZWxlbWVudC5raW5kID09PSBcImNvbnN0cnVjdG9yXCIpIHtcbiAgICAgICAgaWYgKGhhZENvbnN0cnVjdG9yKSB7IHRoaXMucmFpc2UoZWxlbWVudC5zdGFydCwgXCJEdXBsaWNhdGUgY29uc3RydWN0b3IgaW4gdGhlIHNhbWUgY2xhc3NcIik7IH1cbiAgICAgICAgaGFkQ29uc3RydWN0b3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aGlzLnN0cmljdCA9IG9sZFN0cmljdDtcbiAgdGhpcy5uZXh0KCk7XG4gIG5vZGUuYm9keSA9IHRoaXMuZmluaXNoTm9kZShjbGFzc0JvZHksIFwiQ2xhc3NCb2R5XCIpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIGlzU3RhdGVtZW50ID8gXCJDbGFzc0RlY2xhcmF0aW9uXCIgOiBcIkNsYXNzRXhwcmVzc2lvblwiKVxufTtcblxucHAkMS5wYXJzZUNsYXNzRWxlbWVudCA9IGZ1bmN0aW9uKGNvbnN0cnVjdG9yQWxsb3dzU3VwZXIpIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHRoaXMuZWF0KHR5cGVzLnNlbWkpKSB7IHJldHVybiBudWxsIH1cblxuICB2YXIgbWV0aG9kID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgdmFyIHRyeUNvbnRleHR1YWwgPSBmdW5jdGlvbiAoaywgbm9MaW5lQnJlYWspIHtcbiAgICBpZiAoIG5vTGluZUJyZWFrID09PSB2b2lkIDAgKSBub0xpbmVCcmVhayA9IGZhbHNlO1xuXG4gICAgdmFyIHN0YXJ0ID0gdGhpcyQxLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMkMS5zdGFydExvYztcbiAgICBpZiAoIXRoaXMkMS5lYXRDb250ZXh0dWFsKGspKSB7IHJldHVybiBmYWxzZSB9XG4gICAgaWYgKHRoaXMkMS50eXBlICE9PSB0eXBlcy5wYXJlbkwgJiYgKCFub0xpbmVCcmVhayB8fCAhdGhpcyQxLmNhbkluc2VydFNlbWljb2xvbigpKSkgeyByZXR1cm4gdHJ1ZSB9XG4gICAgaWYgKG1ldGhvZC5rZXkpIHsgdGhpcyQxLnVuZXhwZWN0ZWQoKTsgfVxuICAgIG1ldGhvZC5jb21wdXRlZCA9IGZhbHNlO1xuICAgIG1ldGhvZC5rZXkgPSB0aGlzJDEuc3RhcnROb2RlQXQoc3RhcnQsIHN0YXJ0TG9jKTtcbiAgICBtZXRob2Qua2V5Lm5hbWUgPSBrO1xuICAgIHRoaXMkMS5maW5pc2hOb2RlKG1ldGhvZC5rZXksIFwiSWRlbnRpZmllclwiKTtcbiAgICByZXR1cm4gZmFsc2VcbiAgfTtcblxuICBtZXRob2Qua2luZCA9IFwibWV0aG9kXCI7XG4gIG1ldGhvZC5zdGF0aWMgPSB0cnlDb250ZXh0dWFsKFwic3RhdGljXCIpO1xuICB2YXIgaXNHZW5lcmF0b3IgPSB0aGlzLmVhdCh0eXBlcy5zdGFyKTtcbiAgdmFyIGlzQXN5bmMgPSBmYWxzZTtcbiAgaWYgKCFpc0dlbmVyYXRvcikge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiB0cnlDb250ZXh0dWFsKFwiYXN5bmNcIiwgdHJ1ZSkpIHtcbiAgICAgIGlzQXN5bmMgPSB0cnVlO1xuICAgICAgaXNHZW5lcmF0b3IgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSAmJiB0aGlzLmVhdCh0eXBlcy5zdGFyKTtcbiAgICB9IGVsc2UgaWYgKHRyeUNvbnRleHR1YWwoXCJnZXRcIikpIHtcbiAgICAgIG1ldGhvZC5raW5kID0gXCJnZXRcIjtcbiAgICB9IGVsc2UgaWYgKHRyeUNvbnRleHR1YWwoXCJzZXRcIikpIHtcbiAgICAgIG1ldGhvZC5raW5kID0gXCJzZXRcIjtcbiAgICB9XG4gIH1cbiAgaWYgKCFtZXRob2Qua2V5KSB7IHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUobWV0aG9kKTsgfVxuICB2YXIga2V5ID0gbWV0aG9kLmtleTtcbiAgdmFyIGFsbG93c0RpcmVjdFN1cGVyID0gZmFsc2U7XG4gIGlmICghbWV0aG9kLmNvbXB1dGVkICYmICFtZXRob2Quc3RhdGljICYmIChrZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYga2V5Lm5hbWUgPT09IFwiY29uc3RydWN0b3JcIiB8fFxuICAgICAga2V5LnR5cGUgPT09IFwiTGl0ZXJhbFwiICYmIGtleS52YWx1ZSA9PT0gXCJjb25zdHJ1Y3RvclwiKSkge1xuICAgIGlmIChtZXRob2Qua2luZCAhPT0gXCJtZXRob2RcIikgeyB0aGlzLnJhaXNlKGtleS5zdGFydCwgXCJDb25zdHJ1Y3RvciBjYW4ndCBoYXZlIGdldC9zZXQgbW9kaWZpZXJcIik7IH1cbiAgICBpZiAoaXNHZW5lcmF0b3IpIHsgdGhpcy5yYWlzZShrZXkuc3RhcnQsIFwiQ29uc3RydWN0b3IgY2FuJ3QgYmUgYSBnZW5lcmF0b3JcIik7IH1cbiAgICBpZiAoaXNBc3luYykgeyB0aGlzLnJhaXNlKGtleS5zdGFydCwgXCJDb25zdHJ1Y3RvciBjYW4ndCBiZSBhbiBhc3luYyBtZXRob2RcIik7IH1cbiAgICBtZXRob2Qua2luZCA9IFwiY29uc3RydWN0b3JcIjtcbiAgICBhbGxvd3NEaXJlY3RTdXBlciA9IGNvbnN0cnVjdG9yQWxsb3dzU3VwZXI7XG4gIH0gZWxzZSBpZiAobWV0aG9kLnN0YXRpYyAmJiBrZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYga2V5Lm5hbWUgPT09IFwicHJvdG90eXBlXCIpIHtcbiAgICB0aGlzLnJhaXNlKGtleS5zdGFydCwgXCJDbGFzc2VzIG1heSBub3QgaGF2ZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBwcm90b3R5cGVcIik7XG4gIH1cbiAgdGhpcy5wYXJzZUNsYXNzTWV0aG9kKG1ldGhvZCwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGFsbG93c0RpcmVjdFN1cGVyKTtcbiAgaWYgKG1ldGhvZC5raW5kID09PSBcImdldFwiICYmIG1ldGhvZC52YWx1ZS5wYXJhbXMubGVuZ3RoICE9PSAwKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG1ldGhvZC52YWx1ZS5zdGFydCwgXCJnZXR0ZXIgc2hvdWxkIGhhdmUgbm8gcGFyYW1zXCIpOyB9XG4gIGlmIChtZXRob2Qua2luZCA9PT0gXCJzZXRcIiAmJiBtZXRob2QudmFsdWUucGFyYW1zLmxlbmd0aCAhPT0gMSlcbiAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShtZXRob2QudmFsdWUuc3RhcnQsIFwic2V0dGVyIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIHBhcmFtXCIpOyB9XG4gIGlmIChtZXRob2Qua2luZCA9PT0gXCJzZXRcIiAmJiBtZXRob2QudmFsdWUucGFyYW1zWzBdLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIilcbiAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShtZXRob2QudmFsdWUucGFyYW1zWzBdLnN0YXJ0LCBcIlNldHRlciBjYW5ub3QgdXNlIHJlc3QgcGFyYW1zXCIpOyB9XG4gIHJldHVybiBtZXRob2Rcbn07XG5cbnBwJDEucGFyc2VDbGFzc01ldGhvZCA9IGZ1bmN0aW9uKG1ldGhvZCwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGFsbG93c0RpcmVjdFN1cGVyKSB7XG4gIG1ldGhvZC52YWx1ZSA9IHRoaXMucGFyc2VNZXRob2QoaXNHZW5lcmF0b3IsIGlzQXN5bmMsIGFsbG93c0RpcmVjdFN1cGVyKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShtZXRob2QsIFwiTWV0aG9kRGVmaW5pdGlvblwiKVxufTtcblxucHAkMS5wYXJzZUNsYXNzSWQgPSBmdW5jdGlvbihub2RlLCBpc1N0YXRlbWVudCkge1xuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5uYW1lKSB7XG4gICAgbm9kZS5pZCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIGlmIChpc1N0YXRlbWVudClcbiAgICAgIHsgdGhpcy5jaGVja0xWYWwobm9kZS5pZCwgQklORF9MRVhJQ0FMLCBmYWxzZSk7IH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNTdGF0ZW1lbnQgPT09IHRydWUpXG4gICAgICB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgbm9kZS5pZCA9IG51bGw7XG4gIH1cbn07XG5cbnBwJDEucGFyc2VDbGFzc1N1cGVyID0gZnVuY3Rpb24obm9kZSkge1xuICBub2RlLnN1cGVyQ2xhc3MgPSB0aGlzLmVhdCh0eXBlcy5fZXh0ZW5kcykgPyB0aGlzLnBhcnNlRXhwclN1YnNjcmlwdHMoKSA6IG51bGw7XG59O1xuXG4vLyBQYXJzZXMgbW9kdWxlIGV4cG9ydCBkZWNsYXJhdGlvbi5cblxucHAkMS5wYXJzZUV4cG9ydCA9IGZ1bmN0aW9uKG5vZGUsIGV4cG9ydHMpIHtcbiAgdGhpcy5uZXh0KCk7XG4gIC8vIGV4cG9ydCAqIGZyb20gJy4uLidcbiAgaWYgKHRoaXMuZWF0KHR5cGVzLnN0YXIpKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMSkge1xuICAgICAgaWYgKHRoaXMuZWF0Q29udGV4dHVhbChcImFzXCIpKSB7XG4gICAgICAgIG5vZGUuZXhwb3J0ZWQgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2hlY2tFeHBvcnQoZXhwb3J0cywgbm9kZS5leHBvcnRlZC5uYW1lLCB0aGlzLmxhc3RUb2tTdGFydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmV4cG9ydGVkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5leHBlY3RDb250ZXh0dWFsKFwiZnJvbVwiKTtcbiAgICBpZiAodGhpcy50eXBlICE9PSB0eXBlcy5zdHJpbmcpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICBub2RlLnNvdXJjZSA9IHRoaXMucGFyc2VFeHByQXRvbSgpO1xuICAgIHRoaXMuc2VtaWNvbG9uKCk7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkV4cG9ydEFsbERlY2xhcmF0aW9uXCIpXG4gIH1cbiAgaWYgKHRoaXMuZWF0KHR5cGVzLl9kZWZhdWx0KSkgeyAvLyBleHBvcnQgZGVmYXVsdCAuLi5cbiAgICB0aGlzLmNoZWNrRXhwb3J0KGV4cG9ydHMsIFwiZGVmYXVsdFwiLCB0aGlzLmxhc3RUb2tTdGFydCk7XG4gICAgdmFyIGlzQXN5bmM7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuX2Z1bmN0aW9uIHx8IChpc0FzeW5jID0gdGhpcy5pc0FzeW5jRnVuY3Rpb24oKSkpIHtcbiAgICAgIHZhciBmTm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIGlmIChpc0FzeW5jKSB7IHRoaXMubmV4dCgpOyB9XG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZUZ1bmN0aW9uKGZOb2RlLCBGVU5DX1NUQVRFTUVOVCB8IEZVTkNfTlVMTEFCTEVfSUQsIGZhbHNlLCBpc0FzeW5jKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuX2NsYXNzKSB7XG4gICAgICB2YXIgY05vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgbm9kZS5kZWNsYXJhdGlvbiA9IHRoaXMucGFyc2VDbGFzcyhjTm9kZSwgXCJudWxsYWJsZUlEXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG4gICAgICB0aGlzLnNlbWljb2xvbigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uXCIpXG4gIH1cbiAgLy8gZXhwb3J0IHZhcnxjb25zdHxsZXR8ZnVuY3Rpb258Y2xhc3MgLi4uXG4gIGlmICh0aGlzLnNob3VsZFBhcnNlRXhwb3J0U3RhdGVtZW50KCkpIHtcbiAgICBub2RlLmRlY2xhcmF0aW9uID0gdGhpcy5wYXJzZVN0YXRlbWVudChudWxsKTtcbiAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi50eXBlID09PSBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIilcbiAgICAgIHsgdGhpcy5jaGVja1ZhcmlhYmxlRXhwb3J0KGV4cG9ydHMsIG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zKTsgfVxuICAgIGVsc2VcbiAgICAgIHsgdGhpcy5jaGVja0V4cG9ydChleHBvcnRzLCBub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQuc3RhcnQpOyB9XG4gICAgbm9kZS5zcGVjaWZpZXJzID0gW107XG4gICAgbm9kZS5zb3VyY2UgPSBudWxsO1xuICB9IGVsc2UgeyAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgICBub2RlLmRlY2xhcmF0aW9uID0gbnVsbDtcbiAgICBub2RlLnNwZWNpZmllcnMgPSB0aGlzLnBhcnNlRXhwb3J0U3BlY2lmaWVycyhleHBvcnRzKTtcbiAgICBpZiAodGhpcy5lYXRDb250ZXh0dWFsKFwiZnJvbVwiKSkge1xuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gdHlwZXMuc3RyaW5nKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgICBub2RlLnNvdXJjZSA9IHRoaXMucGFyc2VFeHByQXRvbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IG5vZGUuc3BlY2lmaWVyczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleXdvcmRzIHVzZWQgYXMgbG9jYWwgbmFtZXNcbiAgICAgICAgdmFyIHNwZWMgPSBsaXN0W2ldO1xuXG4gICAgICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKHNwZWMubG9jYWwpO1xuICAgICAgICAvLyBjaGVjayBpZiBleHBvcnQgaXMgZGVmaW5lZFxuICAgICAgICB0aGlzLmNoZWNrTG9jYWxFeHBvcnQoc3BlYy5sb2NhbCk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc291cmNlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5zZW1pY29sb24oKTtcbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0TmFtZWREZWNsYXJhdGlvblwiKVxufTtcblxucHAkMS5jaGVja0V4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIHBvcykge1xuICBpZiAoIWV4cG9ydHMpIHsgcmV0dXJuIH1cbiAgaWYgKGhhcyhleHBvcnRzLCBuYW1lKSlcbiAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShwb3MsIFwiRHVwbGljYXRlIGV4cG9ydCAnXCIgKyBuYW1lICsgXCInXCIpOyB9XG4gIGV4cG9ydHNbbmFtZV0gPSB0cnVlO1xufTtcblxucHAkMS5jaGVja1BhdHRlcm5FeHBvcnQgPSBmdW5jdGlvbihleHBvcnRzLCBwYXQpIHtcbiAgdmFyIHR5cGUgPSBwYXQudHlwZTtcbiAgaWYgKHR5cGUgPT09IFwiSWRlbnRpZmllclwiKVxuICAgIHsgdGhpcy5jaGVja0V4cG9ydChleHBvcnRzLCBwYXQubmFtZSwgcGF0LnN0YXJ0KTsgfVxuICBlbHNlIGlmICh0eXBlID09PSBcIk9iamVjdFBhdHRlcm5cIilcbiAgICB7IGZvciAodmFyIGkgPSAwLCBsaXN0ID0gcGF0LnByb3BlcnRpZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgICAge1xuICAgICAgICB2YXIgcHJvcCA9IGxpc3RbaV07XG5cbiAgICAgICAgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcHJvcCk7XG4gICAgICB9IH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gXCJBcnJheVBhdHRlcm5cIilcbiAgICB7IGZvciAodmFyIGkkMSA9IDAsIGxpc3QkMSA9IHBhdC5lbGVtZW50czsgaSQxIDwgbGlzdCQxLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgIHZhciBlbHQgPSBsaXN0JDFbaSQxXTtcblxuICAgICAgICBpZiAoZWx0KSB7IHRoaXMuY2hlY2tQYXR0ZXJuRXhwb3J0KGV4cG9ydHMsIGVsdCk7IH1cbiAgICB9IH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gXCJQcm9wZXJ0eVwiKVxuICAgIHsgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcGF0LnZhbHVlKTsgfVxuICBlbHNlIGlmICh0eXBlID09PSBcIkFzc2lnbm1lbnRQYXR0ZXJuXCIpXG4gICAgeyB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQubGVmdCk7IH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gXCJSZXN0RWxlbWVudFwiKVxuICAgIHsgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgcGF0LmFyZ3VtZW50KTsgfVxuICBlbHNlIGlmICh0eXBlID09PSBcIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uXCIpXG4gICAgeyB0aGlzLmNoZWNrUGF0dGVybkV4cG9ydChleHBvcnRzLCBwYXQuZXhwcmVzc2lvbik7IH1cbn07XG5cbnBwJDEuY2hlY2tWYXJpYWJsZUV4cG9ydCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlY2xzKSB7XG4gIGlmICghZXhwb3J0cykgeyByZXR1cm4gfVxuICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IGRlY2xzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSlcbiAgICB7XG4gICAgdmFyIGRlY2wgPSBsaXN0W2ldO1xuXG4gICAgdGhpcy5jaGVja1BhdHRlcm5FeHBvcnQoZXhwb3J0cywgZGVjbC5pZCk7XG4gIH1cbn07XG5cbnBwJDEuc2hvdWxkUGFyc2VFeHBvcnRTdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudHlwZS5rZXl3b3JkID09PSBcInZhclwiIHx8XG4gICAgdGhpcy50eXBlLmtleXdvcmQgPT09IFwiY29uc3RcIiB8fFxuICAgIHRoaXMudHlwZS5rZXl3b3JkID09PSBcImNsYXNzXCIgfHxcbiAgICB0aGlzLnR5cGUua2V5d29yZCA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgdGhpcy5pc0xldCgpIHx8XG4gICAgdGhpcy5pc0FzeW5jRnVuY3Rpb24oKVxufTtcblxuLy8gUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbW9kdWxlIGV4cG9ydHMuXG5cbnBwJDEucGFyc2VFeHBvcnRTcGVjaWZpZXJzID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICB2YXIgbm9kZXMgPSBbXSwgZmlyc3QgPSB0cnVlO1xuICAvLyBleHBvcnQgeyB4LCB5IGFzIHogfSBbZnJvbSAnLi4uJ11cbiAgdGhpcy5leHBlY3QodHlwZXMuYnJhY2VMKTtcbiAgd2hpbGUgKCF0aGlzLmVhdCh0eXBlcy5icmFjZVIpKSB7XG4gICAgaWYgKCFmaXJzdCkge1xuICAgICAgdGhpcy5leHBlY3QodHlwZXMuY29tbWEpO1xuICAgICAgaWYgKHRoaXMuYWZ0ZXJUcmFpbGluZ0NvbW1hKHR5cGVzLmJyYWNlUikpIHsgYnJlYWsgfVxuICAgIH0gZWxzZSB7IGZpcnN0ID0gZmFsc2U7IH1cblxuICAgIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICBub2RlLmxvY2FsID0gdGhpcy5wYXJzZUlkZW50KHRydWUpO1xuICAgIG5vZGUuZXhwb3J0ZWQgPSB0aGlzLmVhdENvbnRleHR1YWwoXCJhc1wiKSA/IHRoaXMucGFyc2VJZGVudCh0cnVlKSA6IG5vZGUubG9jYWw7XG4gICAgdGhpcy5jaGVja0V4cG9ydChleHBvcnRzLCBub2RlLmV4cG9ydGVkLm5hbWUsIG5vZGUuZXhwb3J0ZWQuc3RhcnQpO1xuICAgIG5vZGVzLnB1c2godGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRXhwb3J0U3BlY2lmaWVyXCIpKTtcbiAgfVxuICByZXR1cm4gbm9kZXNcbn07XG5cbi8vIFBhcnNlcyBpbXBvcnQgZGVjbGFyYXRpb24uXG5cbnBwJDEucGFyc2VJbXBvcnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpO1xuICAvLyBpbXBvcnQgJy4uLidcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuc3RyaW5nKSB7XG4gICAgbm9kZS5zcGVjaWZpZXJzID0gZW1wdHk7XG4gICAgbm9kZS5zb3VyY2UgPSB0aGlzLnBhcnNlRXhwckF0b20oKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLnNwZWNpZmllcnMgPSB0aGlzLnBhcnNlSW1wb3J0U3BlY2lmaWVycygpO1xuICAgIHRoaXMuZXhwZWN0Q29udGV4dHVhbChcImZyb21cIik7XG4gICAgbm9kZS5zb3VyY2UgPSB0aGlzLnR5cGUgPT09IHR5cGVzLnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy51bmV4cGVjdGVkKCk7XG4gIH1cbiAgdGhpcy5zZW1pY29sb24oKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydERlY2xhcmF0aW9uXCIpXG59O1xuXG4vLyBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtb2R1bGUgaW1wb3J0cy5cblxucHAkMS5wYXJzZUltcG9ydFNwZWNpZmllcnMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gW10sIGZpcnN0ID0gdHJ1ZTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMubmFtZSkge1xuICAgIC8vIGltcG9ydCBkZWZhdWx0T2JqLCB7IHgsIHkgYXMgeiB9IGZyb20gJy4uLidcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgbm9kZS5sb2NhbCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIHRoaXMuY2hlY2tMVmFsKG5vZGUubG9jYWwsIEJJTkRfTEVYSUNBTCk7XG4gICAgbm9kZXMucHVzaCh0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJbXBvcnREZWZhdWx0U3BlY2lmaWVyXCIpKTtcbiAgICBpZiAoIXRoaXMuZWF0KHR5cGVzLmNvbW1hKSkgeyByZXR1cm4gbm9kZXMgfVxuICB9XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLnN0YXIpIHtcbiAgICB2YXIgbm9kZSQxID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICB0aGlzLmV4cGVjdENvbnRleHR1YWwoXCJhc1wiKTtcbiAgICBub2RlJDEubG9jYWwgPSB0aGlzLnBhcnNlSWRlbnQoKTtcbiAgICB0aGlzLmNoZWNrTFZhbChub2RlJDEubG9jYWwsIEJJTkRfTEVYSUNBTCk7XG4gICAgbm9kZXMucHVzaCh0aGlzLmZpbmlzaE5vZGUobm9kZSQxLCBcIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllclwiKSk7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbiAgdGhpcy5leHBlY3QodHlwZXMuYnJhY2VMKTtcbiAgd2hpbGUgKCF0aGlzLmVhdCh0eXBlcy5icmFjZVIpKSB7XG4gICAgaWYgKCFmaXJzdCkge1xuICAgICAgdGhpcy5leHBlY3QodHlwZXMuY29tbWEpO1xuICAgICAgaWYgKHRoaXMuYWZ0ZXJUcmFpbGluZ0NvbW1hKHR5cGVzLmJyYWNlUikpIHsgYnJlYWsgfVxuICAgIH0gZWxzZSB7IGZpcnN0ID0gZmFsc2U7IH1cblxuICAgIHZhciBub2RlJDIgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIG5vZGUkMi5pbXBvcnRlZCA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcbiAgICBpZiAodGhpcy5lYXRDb250ZXh0dWFsKFwiYXNcIikpIHtcbiAgICAgIG5vZGUkMi5sb2NhbCA9IHRoaXMucGFyc2VJZGVudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrVW5yZXNlcnZlZChub2RlJDIuaW1wb3J0ZWQpO1xuICAgICAgbm9kZSQyLmxvY2FsID0gbm9kZSQyLmltcG9ydGVkO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrTFZhbChub2RlJDIubG9jYWwsIEJJTkRfTEVYSUNBTCk7XG4gICAgbm9kZXMucHVzaCh0aGlzLmZpbmlzaE5vZGUobm9kZSQyLCBcIkltcG9ydFNwZWNpZmllclwiKSk7XG4gIH1cbiAgcmV0dXJuIG5vZGVzXG59O1xuXG4vLyBTZXQgYEV4cHJlc3Npb25TdGF0ZW1lbnQjZGlyZWN0aXZlYCBwcm9wZXJ0eSBmb3IgZGlyZWN0aXZlIHByb2xvZ3Vlcy5cbnBwJDEuYWRhcHREaXJlY3RpdmVQcm9sb2d1ZSA9IGZ1bmN0aW9uKHN0YXRlbWVudHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aCAmJiB0aGlzLmlzRGlyZWN0aXZlQ2FuZGlkYXRlKHN0YXRlbWVudHNbaV0pOyArK2kpIHtcbiAgICBzdGF0ZW1lbnRzW2ldLmRpcmVjdGl2ZSA9IHN0YXRlbWVudHNbaV0uZXhwcmVzc2lvbi5yYXcuc2xpY2UoMSwgLTEpO1xuICB9XG59O1xucHAkMS5pc0RpcmVjdGl2ZUNhbmRpZGF0ZSA9IGZ1bmN0aW9uKHN0YXRlbWVudCkge1xuICByZXR1cm4gKFxuICAgIHN0YXRlbWVudC50eXBlID09PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiAmJlxuICAgIHN0YXRlbWVudC5leHByZXNzaW9uLnR5cGUgPT09IFwiTGl0ZXJhbFwiICYmXG4gICAgdHlwZW9mIHN0YXRlbWVudC5leHByZXNzaW9uLnZhbHVlID09PSBcInN0cmluZ1wiICYmXG4gICAgLy8gUmVqZWN0IHBhcmVudGhlc2l6ZWQgc3RyaW5ncy5cbiAgICAodGhpcy5pbnB1dFtzdGF0ZW1lbnQuc3RhcnRdID09PSBcIlxcXCJcIiB8fCB0aGlzLmlucHV0W3N0YXRlbWVudC5zdGFydF0gPT09IFwiJ1wiKVxuICApXG59O1xuXG52YXIgcHAkMiA9IFBhcnNlci5wcm90b3R5cGU7XG5cbi8vIENvbnZlcnQgZXhpc3RpbmcgZXhwcmVzc2lvbiBhdG9tIHRvIGFzc2lnbmFibGUgcGF0dGVyblxuLy8gaWYgcG9zc2libGUuXG5cbnBwJDIudG9Bc3NpZ25hYmxlID0gZnVuY3Rpb24obm9kZSwgaXNCaW5kaW5nLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiBub2RlKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgICAgaWYgKHRoaXMuaW5Bc3luYyAmJiBub2RlLm5hbWUgPT09IFwiYXdhaXRcIilcbiAgICAgICAgeyB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsIFwiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGFuIGFzeW5jIGZ1bmN0aW9uXCIpOyB9XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIk9iamVjdFBhdHRlcm5cIjpcbiAgICBjYXNlIFwiQXJyYXlQYXR0ZXJuXCI6XG4gICAgY2FzZSBcIlJlc3RFbGVtZW50XCI6XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIk9iamVjdEV4cHJlc3Npb25cIjpcbiAgICAgIG5vZGUudHlwZSA9IFwiT2JqZWN0UGF0dGVyblwiO1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7IH1cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gbm9kZS5wcm9wZXJ0aWVzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICB2YXIgcHJvcCA9IGxpc3RbaV07XG5cbiAgICAgIHRoaXMudG9Bc3NpZ25hYmxlKHByb3AsIGlzQmluZGluZyk7XG4gICAgICAgIC8vIEVhcmx5IGVycm9yOlxuICAgICAgICAvLyAgIEFzc2lnbm1lbnRSZXN0UHJvcGVydHlbWWllbGQsIEF3YWl0XSA6XG4gICAgICAgIC8vICAgICBgLi4uYCBEZXN0cnVjdHVyaW5nQXNzaWdubWVudFRhcmdldFtZaWVsZCwgQXdhaXRdXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgSXQgaXMgYSBTeW50YXggRXJyb3IgaWYgfERlc3RydWN0dXJpbmdBc3NpZ25tZW50VGFyZ2V0fCBpcyBhbiB8QXJyYXlMaXRlcmFsfCBvciBhbiB8T2JqZWN0TGl0ZXJhbHwuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9wLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIiAmJlxuICAgICAgICAgIChwcm9wLmFyZ3VtZW50LnR5cGUgPT09IFwiQXJyYXlQYXR0ZXJuXCIgfHwgcHJvcC5hcmd1bWVudC50eXBlID09PSBcIk9iamVjdFBhdHRlcm5cIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yYWlzZShwcm9wLmFyZ3VtZW50LnN0YXJ0LCBcIlVuZXhwZWN0ZWQgdG9rZW5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiUHJvcGVydHlcIjpcbiAgICAgIC8vIEFzc2lnbm1lbnRQcm9wZXJ0eSBoYXMgdHlwZSA9PT0gXCJQcm9wZXJ0eVwiXG4gICAgICBpZiAobm9kZS5raW5kICE9PSBcImluaXRcIikgeyB0aGlzLnJhaXNlKG5vZGUua2V5LnN0YXJ0LCBcIk9iamVjdCBwYXR0ZXJuIGNhbid0IGNvbnRhaW4gZ2V0dGVyIG9yIHNldHRlclwiKTsgfVxuICAgICAgdGhpcy50b0Fzc2lnbmFibGUobm9kZS52YWx1ZSwgaXNCaW5kaW5nKTtcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiQXJyYXlFeHByZXNzaW9uXCI6XG4gICAgICBub2RlLnR5cGUgPSBcIkFycmF5UGF0dGVyblwiO1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7IH1cbiAgICAgIHRoaXMudG9Bc3NpZ25hYmxlTGlzdChub2RlLmVsZW1lbnRzLCBpc0JpbmRpbmcpO1xuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJTcHJlYWRFbGVtZW50XCI6XG4gICAgICBub2RlLnR5cGUgPSBcIlJlc3RFbGVtZW50XCI7XG4gICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLmFyZ3VtZW50LCBpc0JpbmRpbmcpO1xuICAgICAgaWYgKG5vZGUuYXJndW1lbnQudHlwZSA9PT0gXCJBc3NpZ25tZW50UGF0dGVyblwiKVxuICAgICAgICB7IHRoaXMucmFpc2Uobm9kZS5hcmd1bWVudC5zdGFydCwgXCJSZXN0IGVsZW1lbnRzIGNhbm5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZVwiKTsgfVxuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJBc3NpZ25tZW50RXhwcmVzc2lvblwiOlxuICAgICAgaWYgKG5vZGUub3BlcmF0b3IgIT09IFwiPVwiKSB7IHRoaXMucmFpc2Uobm9kZS5sZWZ0LmVuZCwgXCJPbmx5ICc9JyBvcGVyYXRvciBjYW4gYmUgdXNlZCBmb3Igc3BlY2lmeWluZyBkZWZhdWx0IHZhbHVlLlwiKTsgfVxuICAgICAgbm9kZS50eXBlID0gXCJBc3NpZ25tZW50UGF0dGVyblwiO1xuICAgICAgZGVsZXRlIG5vZGUub3BlcmF0b3I7XG4gICAgICB0aGlzLnRvQXNzaWduYWJsZShub2RlLmxlZnQsIGlzQmluZGluZyk7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoIHRvIEFzc2lnbm1lbnRQYXR0ZXJuXG5cbiAgICBjYXNlIFwiQXNzaWdubWVudFBhdHRlcm5cIjpcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIjpcbiAgICAgIHRoaXMudG9Bc3NpZ25hYmxlKG5vZGUuZXhwcmVzc2lvbiwgaXNCaW5kaW5nLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICAgIGJyZWFrXG5cbiAgICBjYXNlIFwiQ2hhaW5FeHByZXNzaW9uXCI6XG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJPcHRpb25hbCBjaGFpbmluZyBjYW5ub3QgYXBwZWFyIGluIGxlZnQtaGFuZCBzaWRlXCIpO1xuICAgICAgYnJlYWtcblxuICAgIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6XG4gICAgICBpZiAoIWlzQmluZGluZykgeyBicmVhayB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhpcy5yYWlzZShub2RlLnN0YXJ0LCBcIkFzc2lnbmluZyB0byBydmFsdWVcIik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgdGhpcy5jaGVja1BhdHRlcm5FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7IH1cbiAgcmV0dXJuIG5vZGVcbn07XG5cbi8vIENvbnZlcnQgbGlzdCBvZiBleHByZXNzaW9uIGF0b21zIHRvIGJpbmRpbmcgbGlzdC5cblxucHAkMi50b0Fzc2lnbmFibGVMaXN0ID0gZnVuY3Rpb24oZXhwckxpc3QsIGlzQmluZGluZykge1xuICB2YXIgZW5kID0gZXhwckxpc3QubGVuZ3RoO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgdmFyIGVsdCA9IGV4cHJMaXN0W2ldO1xuICAgIGlmIChlbHQpIHsgdGhpcy50b0Fzc2lnbmFibGUoZWx0LCBpc0JpbmRpbmcpOyB9XG4gIH1cbiAgaWYgKGVuZCkge1xuICAgIHZhciBsYXN0ID0gZXhwckxpc3RbZW5kIC0gMV07XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA9PT0gNiAmJiBpc0JpbmRpbmcgJiYgbGFzdCAmJiBsYXN0LnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIiAmJiBsYXN0LmFyZ3VtZW50LnR5cGUgIT09IFwiSWRlbnRpZmllclwiKVxuICAgICAgeyB0aGlzLnVuZXhwZWN0ZWQobGFzdC5hcmd1bWVudC5zdGFydCk7IH1cbiAgfVxuICByZXR1cm4gZXhwckxpc3Rcbn07XG5cbi8vIFBhcnNlcyBzcHJlYWQgZWxlbWVudC5cblxucHAkMi5wYXJzZVNwcmVhZCA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB0aGlzLm5leHQoKTtcbiAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJTcHJlYWRFbGVtZW50XCIpXG59O1xuXG5wcCQyLnBhcnNlUmVzdEJpbmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB0aGlzLm5leHQoKTtcblxuICAvLyBSZXN0RWxlbWVudCBpbnNpZGUgb2YgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBpZGVudGlmaWVyXG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPT09IDYgJiYgdGhpcy50eXBlICE9PSB0eXBlcy5uYW1lKVxuICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cblxuICBub2RlLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUJpbmRpbmdBdG9tKCk7XG5cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIlJlc3RFbGVtZW50XCIpXG59O1xuXG4vLyBQYXJzZXMgbHZhbHVlIChhc3NpZ25hYmxlKSBhdG9tLlxuXG5wcCQyLnBhcnNlQmluZGluZ0F0b20gPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7XG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICBjYXNlIHR5cGVzLmJyYWNrZXRMOlxuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBub2RlLmVsZW1lbnRzID0gdGhpcy5wYXJzZUJpbmRpbmdMaXN0KHR5cGVzLmJyYWNrZXRSLCB0cnVlLCB0cnVlKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBcnJheVBhdHRlcm5cIilcblxuICAgIGNhc2UgdHlwZXMuYnJhY2VMOlxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VPYmoodHJ1ZSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXMucGFyc2VJZGVudCgpXG59O1xuXG5wcCQyLnBhcnNlQmluZGluZ0xpc3QgPSBmdW5jdGlvbihjbG9zZSwgYWxsb3dFbXB0eSwgYWxsb3dUcmFpbGluZ0NvbW1hKSB7XG4gIHZhciBlbHRzID0gW10sIGZpcnN0ID0gdHJ1ZTtcbiAgd2hpbGUgKCF0aGlzLmVhdChjbG9zZSkpIHtcbiAgICBpZiAoZmlyc3QpIHsgZmlyc3QgPSBmYWxzZTsgfVxuICAgIGVsc2UgeyB0aGlzLmV4cGVjdCh0eXBlcy5jb21tYSk7IH1cbiAgICBpZiAoYWxsb3dFbXB0eSAmJiB0aGlzLnR5cGUgPT09IHR5cGVzLmNvbW1hKSB7XG4gICAgICBlbHRzLnB1c2gobnVsbCk7XG4gICAgfSBlbHNlIGlmIChhbGxvd1RyYWlsaW5nQ29tbWEgJiYgdGhpcy5hZnRlclRyYWlsaW5nQ29tbWEoY2xvc2UpKSB7XG4gICAgICBicmVha1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcy5lbGxpcHNpcykge1xuICAgICAgdmFyIHJlc3QgPSB0aGlzLnBhcnNlUmVzdEJpbmRpbmcoKTtcbiAgICAgIHRoaXMucGFyc2VCaW5kaW5nTGlzdEl0ZW0ocmVzdCk7XG4gICAgICBlbHRzLnB1c2gocmVzdCk7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5jb21tYSkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiQ29tbWEgaXMgbm90IHBlcm1pdHRlZCBhZnRlciB0aGUgcmVzdCBlbGVtZW50XCIpOyB9XG4gICAgICB0aGlzLmV4cGVjdChjbG9zZSk7XG4gICAgICBicmVha1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZWxlbSA9IHRoaXMucGFyc2VNYXliZURlZmF1bHQodGhpcy5zdGFydCwgdGhpcy5zdGFydExvYyk7XG4gICAgICB0aGlzLnBhcnNlQmluZGluZ0xpc3RJdGVtKGVsZW0pO1xuICAgICAgZWx0cy5wdXNoKGVsZW0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZWx0c1xufTtcblxucHAkMi5wYXJzZUJpbmRpbmdMaXN0SXRlbSA9IGZ1bmN0aW9uKHBhcmFtKSB7XG4gIHJldHVybiBwYXJhbVxufTtcblxuLy8gUGFyc2VzIGFzc2lnbm1lbnQgcGF0dGVybiBhcm91bmQgZ2l2ZW4gYXRvbSBpZiBwb3NzaWJsZS5cblxucHAkMi5wYXJzZU1heWJlRGVmYXVsdCA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgbGVmdCkge1xuICBsZWZ0ID0gbGVmdCB8fCB0aGlzLnBhcnNlQmluZGluZ0F0b20oKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYgfHwgIXRoaXMuZWF0KHR5cGVzLmVxKSkgeyByZXR1cm4gbGVmdCB9XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICBub2RlLmxlZnQgPSBsZWZ0O1xuICBub2RlLnJpZ2h0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBc3NpZ25tZW50UGF0dGVyblwiKVxufTtcblxuLy8gVmVyaWZ5IHRoYXQgYSBub2RlIGlzIGFuIGx2YWwg4oCUIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBhc3NpZ25lZFxuLy8gdG8uXG4vLyBiaW5kaW5nVHlwZSBjYW4gYmUgZWl0aGVyOlxuLy8gJ3ZhcicgaW5kaWNhdGluZyB0aGF0IHRoZSBsdmFsIGNyZWF0ZXMgYSAndmFyJyBiaW5kaW5nXG4vLyAnbGV0JyBpbmRpY2F0aW5nIHRoYXQgdGhlIGx2YWwgY3JlYXRlcyBhIGxleGljYWwgKCdsZXQnIG9yICdjb25zdCcpIGJpbmRpbmdcbi8vICdub25lJyBpbmRpY2F0aW5nIHRoYXQgdGhlIGJpbmRpbmcgc2hvdWxkIGJlIGNoZWNrZWQgZm9yIGlsbGVnYWwgaWRlbnRpZmllcnMsIGJ1dCBub3QgZm9yIGR1cGxpY2F0ZSByZWZlcmVuY2VzXG5cbnBwJDIuY2hlY2tMVmFsID0gZnVuY3Rpb24oZXhwciwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcykge1xuICBpZiAoIGJpbmRpbmdUeXBlID09PSB2b2lkIDAgKSBiaW5kaW5nVHlwZSA9IEJJTkRfTk9ORTtcblxuICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICBjYXNlIFwiSWRlbnRpZmllclwiOlxuICAgIGlmIChiaW5kaW5nVHlwZSA9PT0gQklORF9MRVhJQ0FMICYmIGV4cHIubmFtZSA9PT0gXCJsZXRcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIFwibGV0IGlzIGRpc2FsbG93ZWQgYXMgYSBsZXhpY2FsbHkgYm91bmQgbmFtZVwiKTsgfVxuICAgIGlmICh0aGlzLnN0cmljdCAmJiB0aGlzLnJlc2VydmVkV29yZHNTdHJpY3RCaW5kLnRlc3QoZXhwci5uYW1lKSlcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIChiaW5kaW5nVHlwZSA/IFwiQmluZGluZyBcIiA6IFwiQXNzaWduaW5nIHRvIFwiKSArIGV4cHIubmFtZSArIFwiIGluIHN0cmljdCBtb2RlXCIpOyB9XG4gICAgaWYgKGNoZWNrQ2xhc2hlcykge1xuICAgICAgaWYgKGhhcyhjaGVja0NsYXNoZXMsIGV4cHIubmFtZSkpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIFwiQXJndW1lbnQgbmFtZSBjbGFzaFwiKTsgfVxuICAgICAgY2hlY2tDbGFzaGVzW2V4cHIubmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoYmluZGluZ1R5cGUgIT09IEJJTkRfTk9ORSAmJiBiaW5kaW5nVHlwZSAhPT0gQklORF9PVVRTSURFKSB7IHRoaXMuZGVjbGFyZU5hbWUoZXhwci5uYW1lLCBiaW5kaW5nVHlwZSwgZXhwci5zdGFydCk7IH1cbiAgICBicmVha1xuXG4gIGNhc2UgXCJDaGFpbkV4cHJlc3Npb25cIjpcbiAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXhwci5zdGFydCwgXCJPcHRpb25hbCBjaGFpbmluZyBjYW5ub3QgYXBwZWFyIGluIGxlZnQtaGFuZCBzaWRlXCIpO1xuICAgIGJyZWFrXG5cbiAgY2FzZSBcIk1lbWJlckV4cHJlc3Npb25cIjpcbiAgICBpZiAoYmluZGluZ1R5cGUpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGV4cHIuc3RhcnQsIFwiQmluZGluZyBtZW1iZXIgZXhwcmVzc2lvblwiKTsgfVxuICAgIGJyZWFrXG5cbiAgY2FzZSBcIk9iamVjdFBhdHRlcm5cIjpcbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IGV4cHIucHJvcGVydGllczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAgICB7XG4gICAgdmFyIHByb3AgPSBsaXN0W2ldO1xuXG4gICAgdGhpcy5jaGVja0xWYWwocHJvcCwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gIH1cbiAgICBicmVha1xuXG4gIGNhc2UgXCJQcm9wZXJ0eVwiOlxuICAgIC8vIEFzc2lnbm1lbnRQcm9wZXJ0eSBoYXMgdHlwZSA9PT0gXCJQcm9wZXJ0eVwiXG4gICAgdGhpcy5jaGVja0xWYWwoZXhwci52YWx1ZSwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgYnJlYWtcblxuICBjYXNlIFwiQXJyYXlQYXR0ZXJuXCI6XG4gICAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gZXhwci5lbGVtZW50czsgaSQxIDwgbGlzdCQxLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgIHZhciBlbGVtID0gbGlzdCQxW2kkMV07XG5cbiAgICBpZiAoZWxlbSkgeyB0aGlzLmNoZWNrTFZhbChlbGVtLCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTsgfVxuICAgIH1cbiAgICBicmVha1xuXG4gIGNhc2UgXCJBc3NpZ25tZW50UGF0dGVyblwiOlxuICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIubGVmdCwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgYnJlYWtcblxuICBjYXNlIFwiUmVzdEVsZW1lbnRcIjpcbiAgICB0aGlzLmNoZWNrTFZhbChleHByLmFyZ3VtZW50LCBiaW5kaW5nVHlwZSwgY2hlY2tDbGFzaGVzKTtcbiAgICBicmVha1xuXG4gIGNhc2UgXCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvblwiOlxuICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIuZXhwcmVzc2lvbiwgYmluZGluZ1R5cGUsIGNoZWNrQ2xhc2hlcyk7XG4gICAgYnJlYWtcblxuICBkZWZhdWx0OlxuICAgIHRoaXMucmFpc2UoZXhwci5zdGFydCwgKGJpbmRpbmdUeXBlID8gXCJCaW5kaW5nXCIgOiBcIkFzc2lnbmluZyB0b1wiKSArIFwiIHJ2YWx1ZVwiKTtcbiAgfVxufTtcblxuLy8gQSByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIgb3BlcmF0ZXMgYnkgZGVmaW5pbmcgZnVuY3Rpb25zIGZvciBhbGxcblxudmFyIHBwJDMgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4vLyBDaGVjayBpZiBwcm9wZXJ0eSBuYW1lIGNsYXNoZXMgd2l0aCBhbHJlYWR5IGFkZGVkLlxuLy8gT2JqZWN0L2NsYXNzIGdldHRlcnMgYW5kIHNldHRlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGNsYXNoIOKAlFxuLy8gZWl0aGVyIHdpdGggZWFjaCBvdGhlciBvciB3aXRoIGFuIGluaXQgcHJvcGVydHkg4oCUIGFuZCBpblxuLy8gc3RyaWN0IG1vZGUsIGluaXQgcHJvcGVydGllcyBhcmUgYWxzbyBub3QgYWxsb3dlZCB0byBiZSByZXBlYXRlZC5cblxucHAkMy5jaGVja1Byb3BDbGFzaCA9IGZ1bmN0aW9uKHByb3AsIHByb3BIYXNoLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSAmJiBwcm9wLnR5cGUgPT09IFwiU3ByZWFkRWxlbWVudFwiKVxuICAgIHsgcmV0dXJuIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIChwcm9wLmNvbXB1dGVkIHx8IHByb3AubWV0aG9kIHx8IHByb3Auc2hvcnRoYW5kKSlcbiAgICB7IHJldHVybiB9XG4gIHZhciBrZXkgPSBwcm9wLmtleTtcbiAgdmFyIG5hbWU7XG4gIHN3aXRjaCAoa2V5LnR5cGUpIHtcbiAgY2FzZSBcIklkZW50aWZpZXJcIjogbmFtZSA9IGtleS5uYW1lOyBicmVha1xuICBjYXNlIFwiTGl0ZXJhbFwiOiBuYW1lID0gU3RyaW5nKGtleS52YWx1ZSk7IGJyZWFrXG4gIGRlZmF1bHQ6IHJldHVyblxuICB9XG4gIHZhciBraW5kID0gcHJvcC5raW5kO1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICBpZiAobmFtZSA9PT0gXCJfX3Byb3RvX19cIiAmJiBraW5kID09PSBcImluaXRcIikge1xuICAgICAgaWYgKHByb3BIYXNoLnByb3RvKSB7XG4gICAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuZG91YmxlUHJvdG8gPCAwKVxuICAgICAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLmRvdWJsZVByb3RvID0ga2V5LnN0YXJ0OyB9XG4gICAgICAgICAgLy8gQmFja3dhcmRzLWNvbXBhdCBrbHVkZ2UuIENhbiBiZSByZW1vdmVkIGluIHZlcnNpb24gNi4wXG4gICAgICAgIH0gZWxzZSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShrZXkuc3RhcnQsIFwiUmVkZWZpbml0aW9uIG9mIF9fcHJvdG9fXyBwcm9wZXJ0eVwiKTsgfVxuICAgICAgfVxuICAgICAgcHJvcEhhc2gucHJvdG8gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBuYW1lID0gXCIkXCIgKyBuYW1lO1xuICB2YXIgb3RoZXIgPSBwcm9wSGFzaFtuYW1lXTtcbiAgaWYgKG90aGVyKSB7XG4gICAgdmFyIHJlZGVmaW5pdGlvbjtcbiAgICBpZiAoa2luZCA9PT0gXCJpbml0XCIpIHtcbiAgICAgIHJlZGVmaW5pdGlvbiA9IHRoaXMuc3RyaWN0ICYmIG90aGVyLmluaXQgfHwgb3RoZXIuZ2V0IHx8IG90aGVyLnNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVkZWZpbml0aW9uID0gb3RoZXIuaW5pdCB8fCBvdGhlcltraW5kXTtcbiAgICB9XG4gICAgaWYgKHJlZGVmaW5pdGlvbilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKGtleS5zdGFydCwgXCJSZWRlZmluaXRpb24gb2YgcHJvcGVydHlcIik7IH1cbiAgfSBlbHNlIHtcbiAgICBvdGhlciA9IHByb3BIYXNoW25hbWVdID0ge1xuICAgICAgaW5pdDogZmFsc2UsXG4gICAgICBnZXQ6IGZhbHNlLFxuICAgICAgc2V0OiBmYWxzZVxuICAgIH07XG4gIH1cbiAgb3RoZXJba2luZF0gPSB0cnVlO1xufTtcblxuLy8gIyMjIEV4cHJlc3Npb24gcGFyc2luZ1xuXG4vLyBUaGVzZSBuZXN0LCBmcm9tIHRoZSBtb3N0IGdlbmVyYWwgZXhwcmVzc2lvbiB0eXBlIGF0IHRoZSB0b3AgdG9cbi8vICdhdG9taWMnLCBub25kaXZpc2libGUgZXhwcmVzc2lvbiB0eXBlcyBhdCB0aGUgYm90dG9tLiBNb3N0IG9mXG4vLyB0aGUgZnVuY3Rpb25zIHdpbGwgc2ltcGx5IGxldCB0aGUgZnVuY3Rpb24ocykgYmVsb3cgdGhlbSBwYXJzZSxcbi8vIGFuZCwgKmlmKiB0aGUgc3ludGFjdGljIGNvbnN0cnVjdCB0aGV5IGhhbmRsZSBpcyBwcmVzZW50LCB3cmFwXG4vLyB0aGUgQVNUIG5vZGUgdGhhdCB0aGUgaW5uZXIgcGFyc2VyIGdhdmUgdGhlbSBpbiBhbm90aGVyIG5vZGUuXG5cbi8vIFBhcnNlIGEgZnVsbCBleHByZXNzaW9uLiBUaGUgb3B0aW9uYWwgYXJndW1lbnRzIGFyZSB1c2VkIHRvXG4vLyBmb3JiaWQgdGhlIGBpbmAgb3BlcmF0b3IgKGluIGZvciBsb29wcyBpbml0YWxpemF0aW9uIGV4cHJlc3Npb25zKVxuLy8gYW5kIHByb3ZpZGUgcmVmZXJlbmNlIGZvciBzdG9yaW5nICc9JyBvcGVyYXRvciBpbnNpZGUgc2hvcnRoYW5kXG4vLyBwcm9wZXJ0eSBhc3NpZ25tZW50IGluIGNvbnRleHRzIHdoZXJlIGJvdGggb2JqZWN0IGV4cHJlc3Npb25cbi8vIGFuZCBvYmplY3QgcGF0dGVybiBtaWdodCBhcHBlYXIgKHNvIGl0J3MgcG9zc2libGUgdG8gcmFpc2Vcbi8vIGRlbGF5ZWQgc3ludGF4IGVycm9yIGF0IGNvcnJlY3QgcG9zaXRpb24pLlxuXG5wcCQzLnBhcnNlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICB2YXIgZXhwciA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuY29tbWEpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlLmV4cHJlc3Npb25zID0gW2V4cHJdO1xuICAgIHdoaWxlICh0aGlzLmVhdCh0eXBlcy5jb21tYSkpIHsgbm9kZS5leHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VNYXliZUFzc2lnbihub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSk7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU2VxdWVuY2VFeHByZXNzaW9uXCIpXG4gIH1cbiAgcmV0dXJuIGV4cHJcbn07XG5cbi8vIFBhcnNlIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbi4gVGhpcyBpbmNsdWRlcyBhcHBsaWNhdGlvbnMgb2Zcbi8vIG9wZXJhdG9ycyBsaWtlIGArPWAuXG5cbnBwJDMucGFyc2VNYXliZUFzc2lnbiA9IGZ1bmN0aW9uKG5vSW4sIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGFmdGVyTGVmdFBhcnNlKSB7XG4gIGlmICh0aGlzLmlzQ29udGV4dHVhbChcInlpZWxkXCIpKSB7XG4gICAgaWYgKHRoaXMuaW5HZW5lcmF0b3IpIHsgcmV0dXJuIHRoaXMucGFyc2VZaWVsZChub0luKSB9XG4gICAgLy8gVGhlIHRva2VuaXplciB3aWxsIGFzc3VtZSBhbiBleHByZXNzaW9uIGlzIGFsbG93ZWQgYWZ0ZXJcbiAgICAvLyBgeWllbGRgLCBidXQgdGhpcyBpc24ndCB0aGF0IGtpbmQgb2YgeWllbGRcbiAgICBlbHNlIHsgdGhpcy5leHByQWxsb3dlZCA9IGZhbHNlOyB9XG4gIH1cblxuICB2YXIgb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IGZhbHNlLCBvbGRQYXJlbkFzc2lnbiA9IC0xLCBvbGRUcmFpbGluZ0NvbW1hID0gLTE7XG4gIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gICAgb2xkUGFyZW5Bc3NpZ24gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ247XG4gICAgb2xkVHJhaWxpbmdDb21tYSA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYTtcbiAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPSAtMTtcbiAgfSBlbHNlIHtcbiAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzID0gbmV3IERlc3RydWN0dXJpbmdFcnJvcnM7XG4gICAgb3duRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IHRydWU7XG4gIH1cblxuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLnBhcmVuTCB8fCB0aGlzLnR5cGUgPT09IHR5cGVzLm5hbWUpXG4gICAgeyB0aGlzLnBvdGVudGlhbEFycm93QXQgPSB0aGlzLnN0YXJ0OyB9XG4gIHZhciBsZWZ0ID0gdGhpcy5wYXJzZU1heWJlQ29uZGl0aW9uYWwobm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gIGlmIChhZnRlckxlZnRQYXJzZSkgeyBsZWZ0ID0gYWZ0ZXJMZWZ0UGFyc2UuY2FsbCh0aGlzLCBsZWZ0LCBzdGFydFBvcywgc3RhcnRMb2MpOyB9XG4gIGlmICh0aGlzLnR5cGUuaXNBc3NpZ24pIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBub2RlLmxlZnQgPSB0aGlzLnR5cGUgPT09IHR5cGVzLmVxID8gdGhpcy50b0Fzc2lnbmFibGUobGVmdCwgZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIDogbGVmdDtcbiAgICBpZiAoIW93bkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuZG91YmxlUHJvdG8gPSAtMTtcbiAgICB9XG4gICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMuc2hvcnRoYW5kQXNzaWduID49IG5vZGUubGVmdC5zdGFydClcbiAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPSAtMTsgfSAvLyByZXNldCBiZWNhdXNlIHNob3J0aGFuZCBkZWZhdWx0IHdhcyB1c2VkIGNvcnJlY3RseVxuICAgIHRoaXMuY2hlY2tMVmFsKGxlZnQpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUucmlnaHQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24obm9Jbik7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkFzc2lnbm1lbnRFeHByZXNzaW9uXCIpXG4gIH0gZWxzZSB7XG4gICAgaWYgKG93bkRlc3RydWN0dXJpbmdFcnJvcnMpIHsgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7IH1cbiAgfVxuICBpZiAob2xkUGFyZW5Bc3NpZ24gPiAtMSkgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPSBvbGRQYXJlbkFzc2lnbjsgfVxuICBpZiAob2xkVHJhaWxpbmdDb21tYSA+IC0xKSB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IG9sZFRyYWlsaW5nQ29tbWE7IH1cbiAgcmV0dXJuIGxlZnRcbn07XG5cbi8vIFBhcnNlIGEgdGVybmFyeSBjb25kaXRpb25hbCAoYD86YCkgb3BlcmF0b3IuXG5cbnBwJDMucGFyc2VNYXliZUNvbmRpdGlvbmFsID0gZnVuY3Rpb24obm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gIHZhciBleHByID0gdGhpcy5wYXJzZUV4cHJPcHMobm9JbiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gIGlmICh0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSkgeyByZXR1cm4gZXhwciB9XG4gIGlmICh0aGlzLmVhdCh0eXBlcy5xdWVzdGlvbikpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlLnRlc3QgPSBleHByO1xuICAgIG5vZGUuY29uc2VxdWVudCA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzLmNvbG9uKTtcbiAgICBub2RlLmFsdGVybmF0ZSA9IHRoaXMucGFyc2VNYXliZUFzc2lnbihub0luKTtcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIpXG4gIH1cbiAgcmV0dXJuIGV4cHJcbn07XG5cbi8vIFN0YXJ0IHRoZSBwcmVjZWRlbmNlIHBhcnNlci5cblxucHAkMy5wYXJzZUV4cHJPcHMgPSBmdW5jdGlvbihub0luLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgdmFyIGV4cHIgPSB0aGlzLnBhcnNlTWF5YmVVbmFyeShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmYWxzZSk7XG4gIGlmICh0aGlzLmNoZWNrRXhwcmVzc2lvbkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSkgeyByZXR1cm4gZXhwciB9XG4gIHJldHVybiBleHByLnN0YXJ0ID09PSBzdGFydFBvcyAmJiBleHByLnR5cGUgPT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIiA/IGV4cHIgOiB0aGlzLnBhcnNlRXhwck9wKGV4cHIsIHN0YXJ0UG9zLCBzdGFydExvYywgLTEsIG5vSW4pXG59O1xuXG4vLyBQYXJzZSBiaW5hcnkgb3BlcmF0b3JzIHdpdGggdGhlIG9wZXJhdG9yIHByZWNlZGVuY2UgcGFyc2luZ1xuLy8gYWxnb3JpdGhtLiBgbGVmdGAgaXMgdGhlIGxlZnQtaGFuZCBzaWRlIG9mIHRoZSBvcGVyYXRvci5cbi8vIGBtaW5QcmVjYCBwcm92aWRlcyBjb250ZXh0IHRoYXQgYWxsb3dzIHRoZSBmdW5jdGlvbiB0byBzdG9wIGFuZFxuLy8gZGVmZXIgZnVydGhlciBwYXJzZXIgdG8gb25lIG9mIGl0cyBjYWxsZXJzIHdoZW4gaXQgZW5jb3VudGVycyBhblxuLy8gb3BlcmF0b3IgdGhhdCBoYXMgYSBsb3dlciBwcmVjZWRlbmNlIHRoYW4gdGhlIHNldCBpdCBpcyBwYXJzaW5nLlxuXG5wcCQzLnBhcnNlRXhwck9wID0gZnVuY3Rpb24obGVmdCwgbGVmdFN0YXJ0UG9zLCBsZWZ0U3RhcnRMb2MsIG1pblByZWMsIG5vSW4pIHtcbiAgdmFyIHByZWMgPSB0aGlzLnR5cGUuYmlub3A7XG4gIGlmIChwcmVjICE9IG51bGwgJiYgKCFub0luIHx8IHRoaXMudHlwZSAhPT0gdHlwZXMuX2luKSkge1xuICAgIGlmIChwcmVjID4gbWluUHJlYykge1xuICAgICAgdmFyIGxvZ2ljYWwgPSB0aGlzLnR5cGUgPT09IHR5cGVzLmxvZ2ljYWxPUiB8fCB0aGlzLnR5cGUgPT09IHR5cGVzLmxvZ2ljYWxBTkQ7XG4gICAgICB2YXIgY29hbGVzY2UgPSB0aGlzLnR5cGUgPT09IHR5cGVzLmNvYWxlc2NlO1xuICAgICAgaWYgKGNvYWxlc2NlKSB7XG4gICAgICAgIC8vIEhhbmRsZSB0aGUgcHJlY2VkZW5jZSBvZiBgdHQuY29hbGVzY2VgIGFzIGVxdWFsIHRvIHRoZSByYW5nZSBvZiBsb2dpY2FsIGV4cHJlc3Npb25zLlxuICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgYG5vZGUucmlnaHRgIHNob3VsZG4ndCBjb250YWluIGxvZ2ljYWwgZXhwcmVzc2lvbnMgaW4gb3JkZXIgdG8gY2hlY2sgdGhlIG1peGVkIGVycm9yLlxuICAgICAgICBwcmVjID0gdHlwZXMubG9naWNhbEFORC5iaW5vcDtcbiAgICAgIH1cbiAgICAgIHZhciBvcCA9IHRoaXMudmFsdWU7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICAgIHZhciByaWdodCA9IHRoaXMucGFyc2VFeHByT3AodGhpcy5wYXJzZU1heWJlVW5hcnkobnVsbCwgZmFsc2UpLCBzdGFydFBvcywgc3RhcnRMb2MsIHByZWMsIG5vSW4pO1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLmJ1aWxkQmluYXJ5KGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBsZWZ0LCByaWdodCwgb3AsIGxvZ2ljYWwgfHwgY29hbGVzY2UpO1xuICAgICAgaWYgKChsb2dpY2FsICYmIHRoaXMudHlwZSA9PT0gdHlwZXMuY29hbGVzY2UpIHx8IChjb2FsZXNjZSAmJiAodGhpcy50eXBlID09PSB0eXBlcy5sb2dpY2FsT1IgfHwgdGhpcy50eXBlID09PSB0eXBlcy5sb2dpY2FsQU5EKSkpIHtcbiAgICAgICAgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiTG9naWNhbCBleHByZXNzaW9ucyBhbmQgY29hbGVzY2UgZXhwcmVzc2lvbnMgY2Fubm90IGJlIG1peGVkLiBXcmFwIGVpdGhlciBieSBwYXJlbnRoZXNlc1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhcnNlRXhwck9wKG5vZGUsIGxlZnRTdGFydFBvcywgbGVmdFN0YXJ0TG9jLCBtaW5QcmVjLCBub0luKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbGVmdFxufTtcblxucHAkMy5idWlsZEJpbmFyeSA9IGZ1bmN0aW9uKHN0YXJ0UG9zLCBzdGFydExvYywgbGVmdCwgcmlnaHQsIG9wLCBsb2dpY2FsKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICBub2RlLmxlZnQgPSBsZWZ0O1xuICBub2RlLm9wZXJhdG9yID0gb3A7XG4gIG5vZGUucmlnaHQgPSByaWdodDtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBsb2dpY2FsID8gXCJMb2dpY2FsRXhwcmVzc2lvblwiIDogXCJCaW5hcnlFeHByZXNzaW9uXCIpXG59O1xuXG4vLyBQYXJzZSB1bmFyeSBvcGVyYXRvcnMsIGJvdGggcHJlZml4IGFuZCBwb3N0Zml4LlxuXG5wcCQzLnBhcnNlTWF5YmVVbmFyeSA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHNhd1VuYXJ5KSB7XG4gIHZhciBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYywgZXhwcjtcbiAgaWYgKHRoaXMuaXNDb250ZXh0dWFsKFwiYXdhaXRcIikgJiYgKHRoaXMuaW5Bc3luYyB8fCAoIXRoaXMuaW5GdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuYWxsb3dBd2FpdE91dHNpZGVGdW5jdGlvbikpKSB7XG4gICAgZXhwciA9IHRoaXMucGFyc2VBd2FpdCgpO1xuICAgIHNhd1VuYXJ5ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0aGlzLnR5cGUucHJlZml4KSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpLCB1cGRhdGUgPSB0aGlzLnR5cGUgPT09IHR5cGVzLmluY0RlYztcbiAgICBub2RlLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBub2RlLnByZWZpeCA9IHRydWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgbm9kZS5hcmd1bWVudCA9IHRoaXMucGFyc2VNYXliZVVuYXJ5KG51bGwsIHRydWUpO1xuICAgIHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRydWUpO1xuICAgIGlmICh1cGRhdGUpIHsgdGhpcy5jaGVja0xWYWwobm9kZS5hcmd1bWVudCk7IH1cbiAgICBlbHNlIGlmICh0aGlzLnN0cmljdCAmJiBub2RlLm9wZXJhdG9yID09PSBcImRlbGV0ZVwiICYmXG4gICAgICAgICAgICAgbm9kZS5hcmd1bWVudC50eXBlID09PSBcIklkZW50aWZpZXJcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiRGVsZXRpbmcgbG9jYWwgdmFyaWFibGUgaW4gc3RyaWN0IG1vZGVcIik7IH1cbiAgICBlbHNlIHsgc2F3VW5hcnkgPSB0cnVlOyB9XG4gICAgZXhwciA9IHRoaXMuZmluaXNoTm9kZShub2RlLCB1cGRhdGUgPyBcIlVwZGF0ZUV4cHJlc3Npb25cIiA6IFwiVW5hcnlFeHByZXNzaW9uXCIpO1xuICB9IGVsc2Uge1xuICAgIGV4cHIgPSB0aGlzLnBhcnNlRXhwclN1YnNjcmlwdHMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgaWYgKHRoaXMuY2hlY2tFeHByZXNzaW9uRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpKSB7IHJldHVybiBleHByIH1cbiAgICB3aGlsZSAodGhpcy50eXBlLnBvc3RmaXggJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkpIHtcbiAgICAgIHZhciBub2RlJDEgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBub2RlJDEub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICAgICAgbm9kZSQxLnByZWZpeCA9IGZhbHNlO1xuICAgICAgbm9kZSQxLmFyZ3VtZW50ID0gZXhwcjtcbiAgICAgIHRoaXMuY2hlY2tMVmFsKGV4cHIpO1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgICBleHByID0gdGhpcy5maW5pc2hOb2RlKG5vZGUkMSwgXCJVcGRhdGVFeHByZXNzaW9uXCIpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghc2F3VW5hcnkgJiYgdGhpcy5lYXQodHlwZXMuc3RhcnN0YXIpKVxuICAgIHsgcmV0dXJuIHRoaXMuYnVpbGRCaW5hcnkoc3RhcnRQb3MsIHN0YXJ0TG9jLCBleHByLCB0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCBmYWxzZSksIFwiKipcIiwgZmFsc2UpIH1cbiAgZWxzZVxuICAgIHsgcmV0dXJuIGV4cHIgfVxufTtcblxuLy8gUGFyc2UgY2FsbCwgZG90LCBhbmQgYFtdYC1zdWJzY3JpcHQgZXhwcmVzc2lvbnMuXG5cbnBwJDMucGFyc2VFeHByU3Vic2NyaXB0cyA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICB2YXIgZXhwciA9IHRoaXMucGFyc2VFeHByQXRvbShyZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgaWYgKGV4cHIudHlwZSA9PT0gXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiICYmIHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rU3RhcnQsIHRoaXMubGFzdFRva0VuZCkgIT09IFwiKVwiKVxuICAgIHsgcmV0dXJuIGV4cHIgfVxuICB2YXIgcmVzdWx0ID0gdGhpcy5wYXJzZVN1YnNjcmlwdHMoZXhwciwgc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgJiYgcmVzdWx0LnR5cGUgPT09IFwiTWVtYmVyRXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA+PSByZXN1bHQuc3RhcnQpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gLTE7IH1cbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA+PSByZXN1bHQuc3RhcnQpIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA9IC0xOyB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufTtcblxucHAkMy5wYXJzZVN1YnNjcmlwdHMgPSBmdW5jdGlvbihiYXNlLCBzdGFydFBvcywgc3RhcnRMb2MsIG5vQ2FsbHMpIHtcbiAgdmFyIG1heWJlQXN5bmNBcnJvdyA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4ICYmIGJhc2UudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIgJiYgYmFzZS5uYW1lID09PSBcImFzeW5jXCIgJiZcbiAgICAgIHRoaXMubGFzdFRva0VuZCA9PT0gYmFzZS5lbmQgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgYmFzZS5lbmQgLSBiYXNlLnN0YXJ0ID09PSA1ICYmXG4gICAgICB0aGlzLnBvdGVudGlhbEFycm93QXQgPT09IGJhc2Uuc3RhcnQ7XG4gIHZhciBvcHRpb25hbENoYWluZWQgPSBmYWxzZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBlbGVtZW50ID0gdGhpcy5wYXJzZVN1YnNjcmlwdChiYXNlLCBzdGFydFBvcywgc3RhcnRMb2MsIG5vQ2FsbHMsIG1heWJlQXN5bmNBcnJvdywgb3B0aW9uYWxDaGFpbmVkKTtcblxuICAgIGlmIChlbGVtZW50Lm9wdGlvbmFsKSB7IG9wdGlvbmFsQ2hhaW5lZCA9IHRydWU7IH1cbiAgICBpZiAoZWxlbWVudCA9PT0gYmFzZSB8fCBlbGVtZW50LnR5cGUgPT09IFwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb25cIikge1xuICAgICAgaWYgKG9wdGlvbmFsQ2hhaW5lZCkge1xuICAgICAgICB2YXIgY2hhaW5Ob2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgICBjaGFpbk5vZGUuZXhwcmVzc2lvbiA9IGVsZW1lbnQ7XG4gICAgICAgIGVsZW1lbnQgPSB0aGlzLmZpbmlzaE5vZGUoY2hhaW5Ob2RlLCBcIkNoYWluRXhwcmVzc2lvblwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50XG4gICAgfVxuXG4gICAgYmFzZSA9IGVsZW1lbnQ7XG4gIH1cbn07XG5cbnBwJDMucGFyc2VTdWJzY3JpcHQgPSBmdW5jdGlvbihiYXNlLCBzdGFydFBvcywgc3RhcnRMb2MsIG5vQ2FsbHMsIG1heWJlQXN5bmNBcnJvdywgb3B0aW9uYWxDaGFpbmVkKSB7XG4gIHZhciBvcHRpb25hbFN1cHBvcnRlZCA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMTtcbiAgdmFyIG9wdGlvbmFsID0gb3B0aW9uYWxTdXBwb3J0ZWQgJiYgdGhpcy5lYXQodHlwZXMucXVlc3Rpb25Eb3QpO1xuICBpZiAobm9DYWxscyAmJiBvcHRpb25hbCkgeyB0aGlzLnJhaXNlKHRoaXMubGFzdFRva1N0YXJ0LCBcIk9wdGlvbmFsIGNoYWluaW5nIGNhbm5vdCBhcHBlYXIgaW4gdGhlIGNhbGxlZSBvZiBuZXcgZXhwcmVzc2lvbnNcIik7IH1cblxuICB2YXIgY29tcHV0ZWQgPSB0aGlzLmVhdCh0eXBlcy5icmFja2V0TCk7XG4gIGlmIChjb21wdXRlZCB8fCAob3B0aW9uYWwgJiYgdGhpcy50eXBlICE9PSB0eXBlcy5wYXJlbkwgJiYgdGhpcy50eXBlICE9PSB0eXBlcy5iYWNrUXVvdGUpIHx8IHRoaXMuZWF0KHR5cGVzLmRvdCkpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlLm9iamVjdCA9IGJhc2U7XG4gICAgbm9kZS5wcm9wZXJ0eSA9IGNvbXB1dGVkID8gdGhpcy5wYXJzZUV4cHJlc3Npb24oKSA6IHRoaXMucGFyc2VJZGVudCh0aGlzLm9wdGlvbnMuYWxsb3dSZXNlcnZlZCAhPT0gXCJuZXZlclwiKTtcbiAgICBub2RlLmNvbXB1dGVkID0gISFjb21wdXRlZDtcbiAgICBpZiAoY29tcHV0ZWQpIHsgdGhpcy5leHBlY3QodHlwZXMuYnJhY2tldFIpOyB9XG4gICAgaWYgKG9wdGlvbmFsU3VwcG9ydGVkKSB7XG4gICAgICBub2RlLm9wdGlvbmFsID0gb3B0aW9uYWw7XG4gICAgfVxuICAgIGJhc2UgPSB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJNZW1iZXJFeHByZXNzaW9uXCIpO1xuICB9IGVsc2UgaWYgKCFub0NhbGxzICYmIHRoaXMuZWF0KHR5cGVzLnBhcmVuTCkpIHtcbiAgICB2YXIgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IG5ldyBEZXN0cnVjdHVyaW5nRXJyb3JzLCBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgb2xkQXdhaXRJZGVudFBvcyA9IHRoaXMuYXdhaXRJZGVudFBvcztcbiAgICB0aGlzLnlpZWxkUG9zID0gMDtcbiAgICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSAwO1xuICAgIHZhciBleHByTGlzdCA9IHRoaXMucGFyc2VFeHByTGlzdCh0eXBlcy5wYXJlblIsIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4LCBmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgaWYgKG1heWJlQXN5bmNBcnJvdyAmJiAhb3B0aW9uYWwgJiYgIXRoaXMuY2FuSW5zZXJ0U2VtaWNvbG9uKCkgJiYgdGhpcy5lYXQodHlwZXMuYXJyb3cpKSB7XG4gICAgICB0aGlzLmNoZWNrUGF0dGVybkVycm9ycyhyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBmYWxzZSk7XG4gICAgICB0aGlzLmNoZWNrWWllbGRBd2FpdEluRGVmYXVsdFBhcmFtcygpO1xuICAgICAgaWYgKHRoaXMuYXdhaXRJZGVudFBvcyA+IDApXG4gICAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLmF3YWl0SWRlbnRQb3MsIFwiQ2Fubm90IHVzZSAnYXdhaXQnIGFzIGlkZW50aWZpZXIgaW5zaWRlIGFuIGFzeW5jIGZ1bmN0aW9uXCIpOyB9XG4gICAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3M7XG4gICAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gICAgICB0aGlzLmF3YWl0SWRlbnRQb3MgPSBvbGRBd2FpdElkZW50UG9zO1xuICAgICAgcmV0dXJuIHRoaXMucGFyc2VBcnJvd0V4cHJlc3Npb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCBleHByTGlzdCwgdHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7XG4gICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zIHx8IHRoaXMueWllbGRQb3M7XG4gICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zIHx8IHRoaXMuYXdhaXRQb3M7XG4gICAgdGhpcy5hd2FpdElkZW50UG9zID0gb2xkQXdhaXRJZGVudFBvcyB8fCB0aGlzLmF3YWl0SWRlbnRQb3M7XG4gICAgdmFyIG5vZGUkMSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlJDEuY2FsbGVlID0gYmFzZTtcbiAgICBub2RlJDEuYXJndW1lbnRzID0gZXhwckxpc3Q7XG4gICAgaWYgKG9wdGlvbmFsU3VwcG9ydGVkKSB7XG4gICAgICBub2RlJDEub3B0aW9uYWwgPSBvcHRpb25hbDtcbiAgICB9XG4gICAgYmFzZSA9IHRoaXMuZmluaXNoTm9kZShub2RlJDEsIFwiQ2FsbEV4cHJlc3Npb25cIik7XG4gIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0eXBlcy5iYWNrUXVvdGUpIHtcbiAgICBpZiAob3B0aW9uYWwgfHwgb3B0aW9uYWxDaGFpbmVkKSB7XG4gICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiT3B0aW9uYWwgY2hhaW5pbmcgY2Fubm90IGFwcGVhciBpbiB0aGUgdGFnIG9mIHRhZ2dlZCB0ZW1wbGF0ZSBleHByZXNzaW9uc1wiKTtcbiAgICB9XG4gICAgdmFyIG5vZGUkMiA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICBub2RlJDIudGFnID0gYmFzZTtcbiAgICBub2RlJDIucXVhc2kgPSB0aGlzLnBhcnNlVGVtcGxhdGUoe2lzVGFnZ2VkOiB0cnVlfSk7XG4gICAgYmFzZSA9IHRoaXMuZmluaXNoTm9kZShub2RlJDIsIFwiVGFnZ2VkVGVtcGxhdGVFeHByZXNzaW9uXCIpO1xuICB9XG4gIHJldHVybiBiYXNlXG59O1xuXG4vLyBQYXJzZSBhbiBhdG9taWMgZXhwcmVzc2lvbiDigJQgZWl0aGVyIGEgc2luZ2xlIHRva2VuIHRoYXQgaXMgYW5cbi8vIGV4cHJlc3Npb24sIGFuIGV4cHJlc3Npb24gc3RhcnRlZCBieSBhIGtleXdvcmQgbGlrZSBgZnVuY3Rpb25gIG9yXG4vLyBgbmV3YCwgb3IgYW4gZXhwcmVzc2lvbiB3cmFwcGVkIGluIHB1bmN0dWF0aW9uIGxpa2UgYCgpYCwgYFtdYCxcbi8vIG9yIGB7fWAuXG5cbnBwJDMucGFyc2VFeHByQXRvbSA9IGZ1bmN0aW9uKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgLy8gSWYgYSBkaXZpc2lvbiBvcGVyYXRvciBhcHBlYXJzIGluIGFuIGV4cHJlc3Npb24gcG9zaXRpb24sIHRoZVxuICAvLyB0b2tlbml6ZXIgZ290IGNvbmZ1c2VkLCBhbmQgd2UgZm9yY2UgaXQgdG8gcmVhZCBhIHJlZ2V4cCBpbnN0ZWFkLlxuICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5zbGFzaCkgeyB0aGlzLnJlYWRSZWdleHAoKTsgfVxuXG4gIHZhciBub2RlLCBjYW5CZUFycm93ID0gdGhpcy5wb3RlbnRpYWxBcnJvd0F0ID09PSB0aGlzLnN0YXJ0O1xuICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICBjYXNlIHR5cGVzLl9zdXBlcjpcbiAgICBpZiAoIXRoaXMuYWxsb3dTdXBlcilcbiAgICAgIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIidzdXBlcicga2V5d29yZCBvdXRzaWRlIGEgbWV0aG9kXCIpOyB9XG4gICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgdGhpcy5uZXh0KCk7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMucGFyZW5MICYmICF0aGlzLmFsbG93RGlyZWN0U3VwZXIpXG4gICAgICB7IHRoaXMucmFpc2Uobm9kZS5zdGFydCwgXCJzdXBlcigpIGNhbGwgb3V0c2lkZSBjb25zdHJ1Y3RvciBvZiBhIHN1YmNsYXNzXCIpOyB9XG4gICAgLy8gVGhlIGBzdXBlcmAga2V5d29yZCBjYW4gYXBwZWFyIGF0IGJlbG93OlxuICAgIC8vIFN1cGVyUHJvcGVydHk6XG4gICAgLy8gICAgIHN1cGVyIFsgRXhwcmVzc2lvbiBdXG4gICAgLy8gICAgIHN1cGVyIC4gSWRlbnRpZmllck5hbWVcbiAgICAvLyBTdXBlckNhbGw6XG4gICAgLy8gICAgIHN1cGVyICggQXJndW1lbnRzIClcbiAgICBpZiAodGhpcy50eXBlICE9PSB0eXBlcy5kb3QgJiYgdGhpcy50eXBlICE9PSB0eXBlcy5icmFja2V0TCAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLnBhcmVuTClcbiAgICAgIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiU3VwZXJcIilcblxuICBjYXNlIHR5cGVzLl90aGlzOlxuICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUaGlzRXhwcmVzc2lvblwiKVxuXG4gIGNhc2UgdHlwZXMubmFtZTpcbiAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2MsIGNvbnRhaW5zRXNjID0gdGhpcy5jb250YWluc0VzYztcbiAgICB2YXIgaWQgPSB0aGlzLnBhcnNlSWRlbnQoZmFsc2UpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiAhY29udGFpbnNFc2MgJiYgaWQubmFtZSA9PT0gXCJhc3luY1wiICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpICYmIHRoaXMuZWF0KHR5cGVzLl9mdW5jdGlvbikpXG4gICAgICB7IHJldHVybiB0aGlzLnBhcnNlRnVuY3Rpb24odGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpLCAwLCBmYWxzZSwgdHJ1ZSkgfVxuICAgIGlmIChjYW5CZUFycm93ICYmICF0aGlzLmNhbkluc2VydFNlbWljb2xvbigpKSB7XG4gICAgICBpZiAodGhpcy5lYXQodHlwZXMuYXJyb3cpKVxuICAgICAgICB7IHJldHVybiB0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSwgW2lkXSwgZmFsc2UpIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCAmJiBpZC5uYW1lID09PSBcImFzeW5jXCIgJiYgdGhpcy50eXBlID09PSB0eXBlcy5uYW1lICYmICFjb250YWluc0VzYykge1xuICAgICAgICBpZCA9IHRoaXMucGFyc2VJZGVudChmYWxzZSk7XG4gICAgICAgIGlmICh0aGlzLmNhbkluc2VydFNlbWljb2xvbigpIHx8ICF0aGlzLmVhdCh0eXBlcy5hcnJvdykpXG4gICAgICAgICAgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFycm93RXhwcmVzc2lvbih0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyksIFtpZF0sIHRydWUpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZFxuXG4gIGNhc2UgdHlwZXMucmVnZXhwOlxuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgbm9kZSA9IHRoaXMucGFyc2VMaXRlcmFsKHZhbHVlLnZhbHVlKTtcbiAgICBub2RlLnJlZ2V4ID0ge3BhdHRlcm46IHZhbHVlLnBhdHRlcm4sIGZsYWdzOiB2YWx1ZS5mbGFnc307XG4gICAgcmV0dXJuIG5vZGVcblxuICBjYXNlIHR5cGVzLm51bTogY2FzZSB0eXBlcy5zdHJpbmc6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VMaXRlcmFsKHRoaXMudmFsdWUpXG5cbiAgY2FzZSB0eXBlcy5fbnVsbDogY2FzZSB0eXBlcy5fdHJ1ZTogY2FzZSB0eXBlcy5fZmFsc2U6XG4gICAgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgbm9kZS52YWx1ZSA9IHRoaXMudHlwZSA9PT0gdHlwZXMuX251bGwgPyBudWxsIDogdGhpcy50eXBlID09PSB0eXBlcy5fdHJ1ZTtcbiAgICBub2RlLnJhdyA9IHRoaXMudHlwZS5rZXl3b3JkO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJMaXRlcmFsXCIpXG5cbiAgY2FzZSB0eXBlcy5wYXJlbkw6XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydCwgZXhwciA9IHRoaXMucGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbihjYW5CZUFycm93KTtcbiAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA8IDAgJiYgIXRoaXMuaXNTaW1wbGVBc3NpZ25UYXJnZXQoZXhwcikpXG4gICAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQXNzaWduID0gc3RhcnQ7IH1cbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kIDwgMClcbiAgICAgICAgeyByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRCaW5kID0gc3RhcnQ7IH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHJcblxuICBjYXNlIHR5cGVzLmJyYWNrZXRMOlxuICAgIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICAgIHRoaXMubmV4dCgpO1xuICAgIG5vZGUuZWxlbWVudHMgPSB0aGlzLnBhcnNlRXhwckxpc3QodHlwZXMuYnJhY2tldFIsIHRydWUsIHRydWUsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBcnJheUV4cHJlc3Npb25cIilcblxuICBjYXNlIHR5cGVzLmJyYWNlTDpcbiAgICByZXR1cm4gdGhpcy5wYXJzZU9iaihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycylcblxuICBjYXNlIHR5cGVzLl9mdW5jdGlvbjpcbiAgICBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgICB0aGlzLm5leHQoKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUZ1bmN0aW9uKG5vZGUsIDApXG5cbiAgY2FzZSB0eXBlcy5fY2xhc3M6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VDbGFzcyh0aGlzLnN0YXJ0Tm9kZSgpLCBmYWxzZSlcblxuICBjYXNlIHR5cGVzLl9uZXc6XG4gICAgcmV0dXJuIHRoaXMucGFyc2VOZXcoKVxuXG4gIGNhc2UgdHlwZXMuYmFja1F1b3RlOlxuICAgIHJldHVybiB0aGlzLnBhcnNlVGVtcGxhdGUoKVxuXG4gIGNhc2UgdHlwZXMuX2ltcG9ydDpcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZUV4cHJJbXBvcnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy51bmV4cGVjdGVkKClcbiAgICB9XG5cbiAgZGVmYXVsdDpcbiAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgfVxufTtcblxucHAkMy5wYXJzZUV4cHJJbXBvcnQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuXG4gIC8vIENvbnN1bWUgYGltcG9ydGAgYXMgYW4gaWRlbnRpZmllciBmb3IgYGltcG9ydC5tZXRhYC5cbiAgLy8gQmVjYXVzZSBgdGhpcy5wYXJzZUlkZW50KHRydWUpYCBkb2Vzbid0IGNoZWNrIGVzY2FwZSBzZXF1ZW5jZXMsIGl0IG5lZWRzIHRoZSBjaGVjayBvZiBgdGhpcy5jb250YWluc0VzY2AuXG4gIGlmICh0aGlzLmNvbnRhaW5zRXNjKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkVzY2FwZSBzZXF1ZW5jZSBpbiBrZXl3b3JkIGltcG9ydFwiKTsgfVxuICB2YXIgbWV0YSA9IHRoaXMucGFyc2VJZGVudCh0cnVlKTtcblxuICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICBjYXNlIHR5cGVzLnBhcmVuTDpcbiAgICByZXR1cm4gdGhpcy5wYXJzZUR5bmFtaWNJbXBvcnQobm9kZSlcbiAgY2FzZSB0eXBlcy5kb3Q6XG4gICAgbm9kZS5tZXRhID0gbWV0YTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUltcG9ydE1ldGEobm9kZSlcbiAgZGVmYXVsdDpcbiAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgfVxufTtcblxucHAkMy5wYXJzZUR5bmFtaWNJbXBvcnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIHRoaXMubmV4dCgpOyAvLyBza2lwIGAoYFxuXG4gIC8vIFBhcnNlIG5vZGUuc291cmNlLlxuICBub2RlLnNvdXJjZSA9IHRoaXMucGFyc2VNYXliZUFzc2lnbigpO1xuXG4gIC8vIFZlcmlmeSBlbmRpbmcuXG4gIGlmICghdGhpcy5lYXQodHlwZXMucGFyZW5SKSkge1xuICAgIHZhciBlcnJvclBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgaWYgKHRoaXMuZWF0KHR5cGVzLmNvbW1hKSAmJiB0aGlzLmVhdCh0eXBlcy5wYXJlblIpKSB7XG4gICAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoZXJyb3JQb3MsIFwiVHJhaWxpbmcgY29tbWEgaXMgbm90IGFsbG93ZWQgaW4gaW1wb3J0KClcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5leHBlY3RlZChlcnJvclBvcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkltcG9ydEV4cHJlc3Npb25cIilcbn07XG5cbnBwJDMucGFyc2VJbXBvcnRNZXRhID0gZnVuY3Rpb24obm9kZSkge1xuICB0aGlzLm5leHQoKTsgLy8gc2tpcCBgLmBcblxuICB2YXIgY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zRXNjO1xuICBub2RlLnByb3BlcnR5ID0gdGhpcy5wYXJzZUlkZW50KHRydWUpO1xuXG4gIGlmIChub2RlLnByb3BlcnR5Lm5hbWUgIT09IFwibWV0YVwiKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUucHJvcGVydHkuc3RhcnQsIFwiVGhlIG9ubHkgdmFsaWQgbWV0YSBwcm9wZXJ0eSBmb3IgaW1wb3J0IGlzICdpbXBvcnQubWV0YSdcIik7IH1cbiAgaWYgKGNvbnRhaW5zRXNjKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiJ2ltcG9ydC5tZXRhJyBtdXN0IG5vdCBjb250YWluIGVzY2FwZWQgY2hhcmFjdGVyc1wiKTsgfVxuICBpZiAodGhpcy5vcHRpb25zLnNvdXJjZVR5cGUgIT09IFwibW9kdWxlXCIpXG4gICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCJDYW5ub3QgdXNlICdpbXBvcnQubWV0YScgb3V0c2lkZSBhIG1vZHVsZVwiKTsgfVxuXG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJNZXRhUHJvcGVydHlcIilcbn07XG5cbnBwJDMucGFyc2VMaXRlcmFsID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICBub2RlLnZhbHVlID0gdmFsdWU7XG4gIG5vZGUucmF3ID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XG4gIGlmIChub2RlLnJhdy5jaGFyQ29kZUF0KG5vZGUucmF3Lmxlbmd0aCAtIDEpID09PSAxMTApIHsgbm9kZS5iaWdpbnQgPSBub2RlLnJhdy5zbGljZSgwLCAtMSkucmVwbGFjZSgvXy9nLCBcIlwiKTsgfVxuICB0aGlzLm5leHQoKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIkxpdGVyYWxcIilcbn07XG5cbnBwJDMucGFyc2VQYXJlbkV4cHJlc3Npb24gPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5leHBlY3QodHlwZXMucGFyZW5MKTtcbiAgdmFyIHZhbCA9IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gIHRoaXMuZXhwZWN0KHR5cGVzLnBhcmVuUik7XG4gIHJldHVybiB2YWxcbn07XG5cbnBwJDMucGFyc2VQYXJlbkFuZERpc3Rpbmd1aXNoRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKGNhbkJlQXJyb3cpIHtcbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jLCB2YWwsIGFsbG93VHJhaWxpbmdDb21tYSA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4O1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICB0aGlzLm5leHQoKTtcblxuICAgIHZhciBpbm5lclN0YXJ0UG9zID0gdGhpcy5zdGFydCwgaW5uZXJTdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgdmFyIGV4cHJMaXN0ID0gW10sIGZpcnN0ID0gdHJ1ZSwgbGFzdElzQ29tbWEgPSBmYWxzZTtcbiAgICB2YXIgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyA9IG5ldyBEZXN0cnVjdHVyaW5nRXJyb3JzLCBvbGRZaWVsZFBvcyA9IHRoaXMueWllbGRQb3MsIG9sZEF3YWl0UG9zID0gdGhpcy5hd2FpdFBvcywgc3ByZWFkU3RhcnQ7XG4gICAgdGhpcy55aWVsZFBvcyA9IDA7XG4gICAgdGhpcy5hd2FpdFBvcyA9IDA7XG4gICAgLy8gRG8gbm90IHNhdmUgYXdhaXRJZGVudFBvcyB0byBhbGxvdyBjaGVja2luZyBhd2FpdHMgbmVzdGVkIGluIHBhcmFtZXRlcnNcbiAgICB3aGlsZSAodGhpcy50eXBlICE9PSB0eXBlcy5wYXJlblIpIHtcbiAgICAgIGZpcnN0ID8gZmlyc3QgPSBmYWxzZSA6IHRoaXMuZXhwZWN0KHR5cGVzLmNvbW1hKTtcbiAgICAgIGlmIChhbGxvd1RyYWlsaW5nQ29tbWEgJiYgdGhpcy5hZnRlclRyYWlsaW5nQ29tbWEodHlwZXMucGFyZW5SLCB0cnVlKSkge1xuICAgICAgICBsYXN0SXNDb21tYSA9IHRydWU7XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuZWxsaXBzaXMpIHtcbiAgICAgICAgc3ByZWFkU3RhcnQgPSB0aGlzLnN0YXJ0O1xuICAgICAgICBleHByTGlzdC5wdXNoKHRoaXMucGFyc2VQYXJlbkl0ZW0odGhpcy5wYXJzZVJlc3RCaW5kaW5nKCkpKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuY29tbWEpIHsgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIkNvbW1hIGlzIG5vdCBwZXJtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3QgZWxlbWVudFwiKTsgfVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwckxpc3QucHVzaCh0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIHRoaXMucGFyc2VQYXJlbkl0ZW0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGlubmVyRW5kUG9zID0gdGhpcy5zdGFydCwgaW5uZXJFbmRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzLnBhcmVuUik7XG5cbiAgICBpZiAoY2FuQmVBcnJvdyAmJiAhdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSAmJiB0aGlzLmVhdCh0eXBlcy5hcnJvdykpIHtcbiAgICAgIHRoaXMuY2hlY2tQYXR0ZXJuRXJyb3JzKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMsIGZhbHNlKTtcbiAgICAgIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG4gICAgICB0aGlzLnlpZWxkUG9zID0gb2xkWWllbGRQb3M7XG4gICAgICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZVBhcmVuQXJyb3dMaXN0KHN0YXJ0UG9zLCBzdGFydExvYywgZXhwckxpc3QpXG4gICAgfVxuXG4gICAgaWYgKCFleHByTGlzdC5sZW5ndGggfHwgbGFzdElzQ29tbWEpIHsgdGhpcy51bmV4cGVjdGVkKHRoaXMubGFzdFRva1N0YXJ0KTsgfVxuICAgIGlmIChzcHJlYWRTdGFydCkgeyB0aGlzLnVuZXhwZWN0ZWQoc3ByZWFkU3RhcnQpOyB9XG4gICAgdGhpcy5jaGVja0V4cHJlc3Npb25FcnJvcnMocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgdHJ1ZSk7XG4gICAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zIHx8IHRoaXMueWllbGRQb3M7XG4gICAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zIHx8IHRoaXMuYXdhaXRQb3M7XG5cbiAgICBpZiAoZXhwckxpc3QubGVuZ3RoID4gMSkge1xuICAgICAgdmFsID0gdGhpcy5zdGFydE5vZGVBdChpbm5lclN0YXJ0UG9zLCBpbm5lclN0YXJ0TG9jKTtcbiAgICAgIHZhbC5leHByZXNzaW9ucyA9IGV4cHJMaXN0O1xuICAgICAgdGhpcy5maW5pc2hOb2RlQXQodmFsLCBcIlNlcXVlbmNlRXhwcmVzc2lvblwiLCBpbm5lckVuZFBvcywgaW5uZXJFbmRMb2MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWwgPSBleHByTGlzdFswXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsID0gdGhpcy5wYXJzZVBhcmVuRXhwcmVzc2lvbigpO1xuICB9XG5cbiAgaWYgKHRoaXMub3B0aW9ucy5wcmVzZXJ2ZVBhcmVucykge1xuICAgIHZhciBwYXIgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgcGFyLmV4cHJlc3Npb24gPSB2YWw7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShwYXIsIFwiUGFyZW50aGVzaXplZEV4cHJlc3Npb25cIilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsXG4gIH1cbn07XG5cbnBwJDMucGFyc2VQYXJlbkl0ZW0gPSBmdW5jdGlvbihpdGVtKSB7XG4gIHJldHVybiBpdGVtXG59O1xuXG5wcCQzLnBhcnNlUGFyZW5BcnJvd0xpc3QgPSBmdW5jdGlvbihzdGFydFBvcywgc3RhcnRMb2MsIGV4cHJMaXN0KSB7XG4gIHJldHVybiB0aGlzLnBhcnNlQXJyb3dFeHByZXNzaW9uKHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSwgZXhwckxpc3QpXG59O1xuXG4vLyBOZXcncyBwcmVjZWRlbmNlIGlzIHNsaWdodGx5IHRyaWNreS4gSXQgbXVzdCBhbGxvdyBpdHMgYXJndW1lbnQgdG9cbi8vIGJlIGEgYFtdYCBvciBkb3Qgc3Vic2NyaXB0IGV4cHJlc3Npb24sIGJ1dCBub3QgYSBjYWxsIOKAlCBhdCBsZWFzdCxcbi8vIG5vdCB3aXRob3V0IHdyYXBwaW5nIGl0IGluIHBhcmVudGhlc2VzLiBUaHVzLCBpdCB1c2VzIHRoZSBub0NhbGxzXG4vLyBhcmd1bWVudCB0byBwYXJzZVN1YnNjcmlwdHMgdG8gcHJldmVudCBpdCBmcm9tIGNvbnN1bWluZyB0aGVcbi8vIGFyZ3VtZW50IGxpc3QuXG5cbnZhciBlbXB0eSQxID0gW107XG5cbnBwJDMucGFyc2VOZXcgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuY29udGFpbnNFc2MpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIFwiRXNjYXBlIHNlcXVlbmNlIGluIGtleXdvcmQgbmV3XCIpOyB9XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgdmFyIG1ldGEgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSk7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiB0aGlzLmVhdCh0eXBlcy5kb3QpKSB7XG4gICAgbm9kZS5tZXRhID0gbWV0YTtcbiAgICB2YXIgY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zRXNjO1xuICAgIG5vZGUucHJvcGVydHkgPSB0aGlzLnBhcnNlSWRlbnQodHJ1ZSk7XG4gICAgaWYgKG5vZGUucHJvcGVydHkubmFtZSAhPT0gXCJ0YXJnZXRcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUucHJvcGVydHkuc3RhcnQsIFwiVGhlIG9ubHkgdmFsaWQgbWV0YSBwcm9wZXJ0eSBmb3IgbmV3IGlzICduZXcudGFyZ2V0J1wiKTsgfVxuICAgIGlmIChjb250YWluc0VzYylcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiJ25ldy50YXJnZXQnIG11c3Qgbm90IGNvbnRhaW4gZXNjYXBlZCBjaGFyYWN0ZXJzXCIpOyB9XG4gICAgaWYgKCF0aGlzLmluTm9uQXJyb3dGdW5jdGlvbigpKVxuICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUobm9kZS5zdGFydCwgXCInbmV3LnRhcmdldCcgY2FuIG9ubHkgYmUgdXNlZCBpbiBmdW5jdGlvbnNcIik7IH1cbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiTWV0YVByb3BlcnR5XCIpXG4gIH1cbiAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zdGFydCwgc3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jLCBpc0ltcG9ydCA9IHRoaXMudHlwZSA9PT0gdHlwZXMuX2ltcG9ydDtcbiAgbm9kZS5jYWxsZWUgPSB0aGlzLnBhcnNlU3Vic2NyaXB0cyh0aGlzLnBhcnNlRXhwckF0b20oKSwgc3RhcnRQb3MsIHN0YXJ0TG9jLCB0cnVlKTtcbiAgaWYgKGlzSW1wb3J0ICYmIG5vZGUuY2FsbGVlLnR5cGUgPT09IFwiSW1wb3J0RXhwcmVzc2lvblwiKSB7XG4gICAgdGhpcy5yYWlzZShzdGFydFBvcywgXCJDYW5ub3QgdXNlIG5ldyB3aXRoIGltcG9ydCgpXCIpO1xuICB9XG4gIGlmICh0aGlzLmVhdCh0eXBlcy5wYXJlbkwpKSB7IG5vZGUuYXJndW1lbnRzID0gdGhpcy5wYXJzZUV4cHJMaXN0KHR5cGVzLnBhcmVuUiwgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDgsIGZhbHNlKTsgfVxuICBlbHNlIHsgbm9kZS5hcmd1bWVudHMgPSBlbXB0eSQxOyB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJOZXdFeHByZXNzaW9uXCIpXG59O1xuXG4vLyBQYXJzZSB0ZW1wbGF0ZSBleHByZXNzaW9uLlxuXG5wcCQzLnBhcnNlVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24ocmVmKSB7XG4gIHZhciBpc1RhZ2dlZCA9IHJlZi5pc1RhZ2dlZDtcblxuICB2YXIgZWxlbSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmludmFsaWRUZW1wbGF0ZSkge1xuICAgIGlmICghaXNUYWdnZWQpIHtcbiAgICAgIHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkJhZCBlc2NhcGUgc2VxdWVuY2UgaW4gdW50YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbFwiKTtcbiAgICB9XG4gICAgZWxlbS52YWx1ZSA9IHtcbiAgICAgIHJhdzogdGhpcy52YWx1ZSxcbiAgICAgIGNvb2tlZDogbnVsbFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZWxlbS52YWx1ZSA9IHtcbiAgICAgIHJhdzogdGhpcy5pbnB1dC5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCkucmVwbGFjZSgvXFxyXFxuPy9nLCBcIlxcblwiKSxcbiAgICAgIGNvb2tlZDogdGhpcy52YWx1ZVxuICAgIH07XG4gIH1cbiAgdGhpcy5uZXh0KCk7XG4gIGVsZW0udGFpbCA9IHRoaXMudHlwZSA9PT0gdHlwZXMuYmFja1F1b3RlO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKGVsZW0sIFwiVGVtcGxhdGVFbGVtZW50XCIpXG59O1xuXG5wcCQzLnBhcnNlVGVtcGxhdGUgPSBmdW5jdGlvbihyZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaXNUYWdnZWQgPSByZWYuaXNUYWdnZWQ7IGlmICggaXNUYWdnZWQgPT09IHZvaWQgMCApIGlzVGFnZ2VkID0gZmFsc2U7XG5cbiAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZSgpO1xuICB0aGlzLm5leHQoKTtcbiAgbm9kZS5leHByZXNzaW9ucyA9IFtdO1xuICB2YXIgY3VyRWx0ID0gdGhpcy5wYXJzZVRlbXBsYXRlRWxlbWVudCh7aXNUYWdnZWQ6IGlzVGFnZ2VkfSk7XG4gIG5vZGUucXVhc2lzID0gW2N1ckVsdF07XG4gIHdoaWxlICghY3VyRWx0LnRhaWwpIHtcbiAgICBpZiAodGhpcy50eXBlID09PSB0eXBlcy5lb2YpIHsgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGUgbGl0ZXJhbFwiKTsgfVxuICAgIHRoaXMuZXhwZWN0KHR5cGVzLmRvbGxhckJyYWNlTCk7XG4gICAgbm9kZS5leHByZXNzaW9ucy5wdXNoKHRoaXMucGFyc2VFeHByZXNzaW9uKCkpO1xuICAgIHRoaXMuZXhwZWN0KHR5cGVzLmJyYWNlUik7XG4gICAgbm9kZS5xdWFzaXMucHVzaChjdXJFbHQgPSB0aGlzLnBhcnNlVGVtcGxhdGVFbGVtZW50KHtpc1RhZ2dlZDogaXNUYWdnZWR9KSk7XG4gIH1cbiAgdGhpcy5uZXh0KCk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJUZW1wbGF0ZUxpdGVyYWxcIilcbn07XG5cbnBwJDMuaXNBc3luY1Byb3AgPSBmdW5jdGlvbihwcm9wKSB7XG4gIHJldHVybiAhcHJvcC5jb21wdXRlZCAmJiBwcm9wLmtleS50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJiBwcm9wLmtleS5uYW1lID09PSBcImFzeW5jXCIgJiZcbiAgICAodGhpcy50eXBlID09PSB0eXBlcy5uYW1lIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMubnVtIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMuc3RyaW5nIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMuYnJhY2tldEwgfHwgdGhpcy50eXBlLmtleXdvcmQgfHwgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHRoaXMudHlwZSA9PT0gdHlwZXMuc3RhcikpICYmXG4gICAgIWxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnN0YXJ0KSlcbn07XG5cbi8vIFBhcnNlIGFuIG9iamVjdCBsaXRlcmFsIG9yIGJpbmRpbmcgcGF0dGVybi5cblxucHAkMy5wYXJzZU9iaiA9IGZ1bmN0aW9uKGlzUGF0dGVybiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCksIGZpcnN0ID0gdHJ1ZSwgcHJvcEhhc2ggPSB7fTtcbiAgbm9kZS5wcm9wZXJ0aWVzID0gW107XG4gIHRoaXMubmV4dCgpO1xuICB3aGlsZSAoIXRoaXMuZWF0KHR5cGVzLmJyYWNlUikpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcy5jb21tYSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDUgJiYgdGhpcy5hZnRlclRyYWlsaW5nQ29tbWEodHlwZXMuYnJhY2VSKSkgeyBicmVhayB9XG4gICAgfSBlbHNlIHsgZmlyc3QgPSBmYWxzZTsgfVxuXG4gICAgdmFyIHByb3AgPSB0aGlzLnBhcnNlUHJvcGVydHkoaXNQYXR0ZXJuLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICBpZiAoIWlzUGF0dGVybikgeyB0aGlzLmNoZWNrUHJvcENsYXNoKHByb3AsIHByb3BIYXNoLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTsgfVxuICAgIG5vZGUucHJvcGVydGllcy5wdXNoKHByb3ApO1xuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgaXNQYXR0ZXJuID8gXCJPYmplY3RQYXR0ZXJuXCIgOiBcIk9iamVjdEV4cHJlc3Npb25cIilcbn07XG5cbnBwJDMucGFyc2VQcm9wZXJ0eSA9IGZ1bmN0aW9uKGlzUGF0dGVybiwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycykge1xuICB2YXIgcHJvcCA9IHRoaXMuc3RhcnROb2RlKCksIGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBzdGFydFBvcywgc3RhcnRMb2M7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSAmJiB0aGlzLmVhdCh0eXBlcy5lbGxpcHNpcykpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB7XG4gICAgICBwcm9wLmFyZ3VtZW50ID0gdGhpcy5wYXJzZUlkZW50KGZhbHNlKTtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmNvbW1hKSB7XG4gICAgICAgIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJDb21tYSBpcyBub3QgcGVybWl0dGVkIGFmdGVyIHRoZSByZXN0IGVsZW1lbnRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKHByb3AsIFwiUmVzdEVsZW1lbnRcIilcbiAgICB9XG4gICAgLy8gVG8gZGlzYWxsb3cgcGFyZW50aGVzaXplZCBpZGVudGlmaWVyIHZpYSBgdGhpcy50b0Fzc2lnbmFibGUoKWAuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMucGFyZW5MICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnBhcmVudGhlc2l6ZWRBc3NpZ24gPCAwKSB7XG4gICAgICAgIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMucGFyZW50aGVzaXplZEFzc2lnbiA9IHRoaXMuc3RhcnQ7XG4gICAgICB9XG4gICAgICBpZiAocmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA8IDApIHtcbiAgICAgICAgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5wYXJlbnRoZXNpemVkQmluZCA9IHRoaXMuc3RhcnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFBhcnNlIGFyZ3VtZW50LlxuICAgIHByb3AuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oZmFsc2UsIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgIC8vIFRvIGRpc2FsbG93IHRyYWlsaW5nIGNvbW1hIHZpYSBgdGhpcy50b0Fzc2lnbmFibGUoKWAuXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMuY29tbWEgJiYgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyAmJiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPCAwKSB7XG4gICAgICByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPSB0aGlzLnN0YXJ0O1xuICAgIH1cbiAgICAvLyBGaW5pc2hcbiAgICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKHByb3AsIFwiU3ByZWFkRWxlbWVudFwiKVxuICB9XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgIHByb3AubWV0aG9kID0gZmFsc2U7XG4gICAgcHJvcC5zaG9ydGhhbmQgPSBmYWxzZTtcbiAgICBpZiAoaXNQYXR0ZXJuIHx8IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgIHN0YXJ0UG9zID0gdGhpcy5zdGFydDtcbiAgICAgIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICB9XG4gICAgaWYgKCFpc1BhdHRlcm4pXG4gICAgICB7IGlzR2VuZXJhdG9yID0gdGhpcy5lYXQodHlwZXMuc3Rhcik7IH1cbiAgfVxuICB2YXIgY29udGFpbnNFc2MgPSB0aGlzLmNvbnRhaW5zRXNjO1xuICB0aGlzLnBhcnNlUHJvcGVydHlOYW1lKHByb3ApO1xuICBpZiAoIWlzUGF0dGVybiAmJiAhY29udGFpbnNFc2MgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDggJiYgIWlzR2VuZXJhdG9yICYmIHRoaXMuaXNBc3luY1Byb3AocHJvcCkpIHtcbiAgICBpc0FzeW5jID0gdHJ1ZTtcbiAgICBpc0dlbmVyYXRvciA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmIHRoaXMuZWF0KHR5cGVzLnN0YXIpO1xuICAgIHRoaXMucGFyc2VQcm9wZXJ0eU5hbWUocHJvcCwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gIH0gZWxzZSB7XG4gICAgaXNBc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMucGFyc2VQcm9wZXJ0eVZhbHVlKHByb3AsIGlzUGF0dGVybiwgaXNHZW5lcmF0b3IsIGlzQXN5bmMsIHN0YXJ0UG9zLCBzdGFydExvYywgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycywgY29udGFpbnNFc2MpO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKHByb3AsIFwiUHJvcGVydHlcIilcbn07XG5cbnBwJDMucGFyc2VQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24ocHJvcCwgaXNQYXR0ZXJuLCBpc0dlbmVyYXRvciwgaXNBc3luYywgc3RhcnRQb3MsIHN0YXJ0TG9jLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLCBjb250YWluc0VzYykge1xuICBpZiAoKGlzR2VuZXJhdG9yIHx8IGlzQXN5bmMpICYmIHRoaXMudHlwZSA9PT0gdHlwZXMuY29sb24pXG4gICAgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuXG4gIGlmICh0aGlzLmVhdCh0eXBlcy5jb2xvbikpIHtcbiAgICBwcm9wLnZhbHVlID0gaXNQYXR0ZXJuID8gdGhpcy5wYXJzZU1heWJlRGVmYXVsdCh0aGlzLnN0YXJ0LCB0aGlzLnN0YXJ0TG9jKSA6IHRoaXMucGFyc2VNYXliZUFzc2lnbihmYWxzZSwgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycyk7XG4gICAgcHJvcC5raW5kID0gXCJpbml0XCI7XG4gIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgdGhpcy50eXBlID09PSB0eXBlcy5wYXJlbkwpIHtcbiAgICBpZiAoaXNQYXR0ZXJuKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgcHJvcC5raW5kID0gXCJpbml0XCI7XG4gICAgcHJvcC5tZXRob2QgPSB0cnVlO1xuICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWV0aG9kKGlzR2VuZXJhdG9yLCBpc0FzeW5jKTtcbiAgfSBlbHNlIGlmICghaXNQYXR0ZXJuICYmICFjb250YWluc0VzYyAmJlxuICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA1ICYmICFwcm9wLmNvbXB1dGVkICYmIHByb3Aua2V5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgICAgICAgICAgKHByb3Aua2V5Lm5hbWUgPT09IFwiZ2V0XCIgfHwgcHJvcC5rZXkubmFtZSA9PT0gXCJzZXRcIikgJiZcbiAgICAgICAgICAgICAodGhpcy50eXBlICE9PSB0eXBlcy5jb21tYSAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLmJyYWNlUiAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLmVxKSkge1xuICAgIGlmIChpc0dlbmVyYXRvciB8fCBpc0FzeW5jKSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG4gICAgcHJvcC5raW5kID0gcHJvcC5rZXkubmFtZTtcbiAgICB0aGlzLnBhcnNlUHJvcGVydHlOYW1lKHByb3ApO1xuICAgIHByb3AudmFsdWUgPSB0aGlzLnBhcnNlTWV0aG9kKGZhbHNlKTtcbiAgICB2YXIgcGFyYW1Db3VudCA9IHByb3Aua2luZCA9PT0gXCJnZXRcIiA/IDAgOiAxO1xuICAgIGlmIChwcm9wLnZhbHVlLnBhcmFtcy5sZW5ndGggIT09IHBhcmFtQ291bnQpIHtcbiAgICAgIHZhciBzdGFydCA9IHByb3AudmFsdWUuc3RhcnQ7XG4gICAgICBpZiAocHJvcC5raW5kID09PSBcImdldFwiKVxuICAgICAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJnZXR0ZXIgc2hvdWxkIGhhdmUgbm8gcGFyYW1zXCIpOyB9XG4gICAgICBlbHNlXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcInNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbVwiKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcC5raW5kID09PSBcInNldFwiICYmIHByb3AudmFsdWUucGFyYW1zWzBdLnR5cGUgPT09IFwiUmVzdEVsZW1lbnRcIilcbiAgICAgICAgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUocHJvcC52YWx1ZS5wYXJhbXNbMF0uc3RhcnQsIFwiU2V0dGVyIGNhbm5vdCB1c2UgcmVzdCBwYXJhbXNcIik7IH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgJiYgIXByb3AuY29tcHV0ZWQgJiYgcHJvcC5rZXkudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcbiAgICBpZiAoaXNHZW5lcmF0b3IgfHwgaXNBc3luYykgeyB0aGlzLnVuZXhwZWN0ZWQoKTsgfVxuICAgIHRoaXMuY2hlY2tVbnJlc2VydmVkKHByb3Aua2V5KTtcbiAgICBpZiAocHJvcC5rZXkubmFtZSA9PT0gXCJhd2FpdFwiICYmICF0aGlzLmF3YWl0SWRlbnRQb3MpXG4gICAgICB7IHRoaXMuYXdhaXRJZGVudFBvcyA9IHN0YXJ0UG9zOyB9XG4gICAgcHJvcC5raW5kID0gXCJpbml0XCI7XG4gICAgaWYgKGlzUGF0dGVybikge1xuICAgICAgcHJvcC52YWx1ZSA9IHRoaXMucGFyc2VNYXliZURlZmF1bHQoc3RhcnRQb3MsIHN0YXJ0TG9jLCBwcm9wLmtleSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmVxICYmIHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpIHtcbiAgICAgIGlmIChyZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnNob3J0aGFuZEFzc2lnbiA8IDApXG4gICAgICAgIHsgcmVmRGVzdHJ1Y3R1cmluZ0Vycm9ycy5zaG9ydGhhbmRBc3NpZ24gPSB0aGlzLnN0YXJ0OyB9XG4gICAgICBwcm9wLnZhbHVlID0gdGhpcy5wYXJzZU1heWJlRGVmYXVsdChzdGFydFBvcywgc3RhcnRMb2MsIHByb3Aua2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcC52YWx1ZSA9IHByb3Aua2V5O1xuICAgIH1cbiAgICBwcm9wLnNob3J0aGFuZCA9IHRydWU7XG4gIH0gZWxzZSB7IHRoaXMudW5leHBlY3RlZCgpOyB9XG59O1xuXG5wcCQzLnBhcnNlUHJvcGVydHlOYW1lID0gZnVuY3Rpb24ocHJvcCkge1xuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYpIHtcbiAgICBpZiAodGhpcy5lYXQodHlwZXMuYnJhY2tldEwpKSB7XG4gICAgICBwcm9wLmNvbXB1dGVkID0gdHJ1ZTtcbiAgICAgIHByb3Aua2V5ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcy5icmFja2V0Uik7XG4gICAgICByZXR1cm4gcHJvcC5rZXlcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcC5jb21wdXRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvcC5rZXkgPSB0aGlzLnR5cGUgPT09IHR5cGVzLm51bSB8fCB0aGlzLnR5cGUgPT09IHR5cGVzLnN0cmluZyA/IHRoaXMucGFyc2VFeHByQXRvbSgpIDogdGhpcy5wYXJzZUlkZW50KHRoaXMub3B0aW9ucy5hbGxvd1Jlc2VydmVkICE9PSBcIm5ldmVyXCIpXG59O1xuXG4vLyBJbml0aWFsaXplIGVtcHR5IGZ1bmN0aW9uIG5vZGUuXG5cbnBwJDMuaW5pdEZ1bmN0aW9uID0gZnVuY3Rpb24obm9kZSkge1xuICBub2RlLmlkID0gbnVsbDtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7IG5vZGUuZ2VuZXJhdG9yID0gbm9kZS5leHByZXNzaW9uID0gZmFsc2U7IH1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KSB7IG5vZGUuYXN5bmMgPSBmYWxzZTsgfVxufTtcblxuLy8gUGFyc2Ugb2JqZWN0IG9yIGNsYXNzIG1ldGhvZC5cblxucHAkMy5wYXJzZU1ldGhvZCA9IGZ1bmN0aW9uKGlzR2VuZXJhdG9yLCBpc0FzeW5jLCBhbGxvd0RpcmVjdFN1cGVyKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKSwgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIG9sZEF3YWl0SWRlbnRQb3MgPSB0aGlzLmF3YWl0SWRlbnRQb3M7XG5cbiAgdGhpcy5pbml0RnVuY3Rpb24obm9kZSk7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNilcbiAgICB7IG5vZGUuZ2VuZXJhdG9yID0gaXNHZW5lcmF0b3I7IH1cbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KVxuICAgIHsgbm9kZS5hc3luYyA9ICEhaXNBc3luYzsgfVxuXG4gIHRoaXMueWllbGRQb3MgPSAwO1xuICB0aGlzLmF3YWl0UG9zID0gMDtcbiAgdGhpcy5hd2FpdElkZW50UG9zID0gMDtcbiAgdGhpcy5lbnRlclNjb3BlKGZ1bmN0aW9uRmxhZ3MoaXNBc3luYywgbm9kZS5nZW5lcmF0b3IpIHwgU0NPUEVfU1VQRVIgfCAoYWxsb3dEaXJlY3RTdXBlciA/IFNDT1BFX0RJUkVDVF9TVVBFUiA6IDApKTtcblxuICB0aGlzLmV4cGVjdCh0eXBlcy5wYXJlbkwpO1xuICBub2RlLnBhcmFtcyA9IHRoaXMucGFyc2VCaW5kaW5nTGlzdCh0eXBlcy5wYXJlblIsIGZhbHNlLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOCk7XG4gIHRoaXMuY2hlY2tZaWVsZEF3YWl0SW5EZWZhdWx0UGFyYW1zKCk7XG4gIHRoaXMucGFyc2VGdW5jdGlvbkJvZHkobm9kZSwgZmFsc2UsIHRydWUpO1xuXG4gIHRoaXMueWllbGRQb3MgPSBvbGRZaWVsZFBvcztcbiAgdGhpcy5hd2FpdFBvcyA9IG9sZEF3YWl0UG9zO1xuICB0aGlzLmF3YWl0SWRlbnRQb3MgPSBvbGRBd2FpdElkZW50UG9zO1xuICByZXR1cm4gdGhpcy5maW5pc2hOb2RlKG5vZGUsIFwiRnVuY3Rpb25FeHByZXNzaW9uXCIpXG59O1xuXG4vLyBQYXJzZSBhcnJvdyBmdW5jdGlvbiBleHByZXNzaW9uIHdpdGggZ2l2ZW4gcGFyYW1ldGVycy5cblxucHAkMy5wYXJzZUFycm93RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG5vZGUsIHBhcmFtcywgaXNBc3luYykge1xuICB2YXIgb2xkWWllbGRQb3MgPSB0aGlzLnlpZWxkUG9zLCBvbGRBd2FpdFBvcyA9IHRoaXMuYXdhaXRQb3MsIG9sZEF3YWl0SWRlbnRQb3MgPSB0aGlzLmF3YWl0SWRlbnRQb3M7XG5cbiAgdGhpcy5lbnRlclNjb3BlKGZ1bmN0aW9uRmxhZ3MoaXNBc3luYywgZmFsc2UpIHwgU0NPUEVfQVJST1cpO1xuICB0aGlzLmluaXRGdW5jdGlvbihub2RlKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA4KSB7IG5vZGUuYXN5bmMgPSAhIWlzQXN5bmM7IH1cblxuICB0aGlzLnlpZWxkUG9zID0gMDtcbiAgdGhpcy5hd2FpdFBvcyA9IDA7XG4gIHRoaXMuYXdhaXRJZGVudFBvcyA9IDA7XG5cbiAgbm9kZS5wYXJhbXMgPSB0aGlzLnRvQXNzaWduYWJsZUxpc3QocGFyYW1zLCB0cnVlKTtcbiAgdGhpcy5wYXJzZUZ1bmN0aW9uQm9keShub2RlLCB0cnVlLCBmYWxzZSk7XG5cbiAgdGhpcy55aWVsZFBvcyA9IG9sZFlpZWxkUG9zO1xuICB0aGlzLmF3YWl0UG9zID0gb2xkQXdhaXRQb3M7XG4gIHRoaXMuYXdhaXRJZGVudFBvcyA9IG9sZEF3YWl0SWRlbnRQb3M7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblwiKVxufTtcblxuLy8gUGFyc2UgZnVuY3Rpb24gYm9keSBhbmQgY2hlY2sgcGFyYW1ldGVycy5cblxucHAkMy5wYXJzZUZ1bmN0aW9uQm9keSA9IGZ1bmN0aW9uKG5vZGUsIGlzQXJyb3dGdW5jdGlvbiwgaXNNZXRob2QpIHtcbiAgdmFyIGlzRXhwcmVzc2lvbiA9IGlzQXJyb3dGdW5jdGlvbiAmJiB0aGlzLnR5cGUgIT09IHR5cGVzLmJyYWNlTDtcbiAgdmFyIG9sZFN0cmljdCA9IHRoaXMuc3RyaWN0LCB1c2VTdHJpY3QgPSBmYWxzZTtcblxuICBpZiAoaXNFeHByZXNzaW9uKSB7XG4gICAgbm9kZS5ib2R5ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKCk7XG4gICAgbm9kZS5leHByZXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrUGFyYW1zKG5vZGUsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9uU2ltcGxlID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDcgJiYgIXRoaXMuaXNTaW1wbGVQYXJhbUxpc3Qobm9kZS5wYXJhbXMpO1xuICAgIGlmICghb2xkU3RyaWN0IHx8IG5vblNpbXBsZSkge1xuICAgICAgdXNlU3RyaWN0ID0gdGhpcy5zdHJpY3REaXJlY3RpdmUodGhpcy5lbmQpO1xuICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0cmljdCBtb2RlIGZ1bmN0aW9uLCB2ZXJpZnkgdGhhdCBhcmd1bWVudCBuYW1lc1xuICAgICAgLy8gYXJlIG5vdCByZXBlYXRlZCwgYW5kIGl0IGRvZXMgbm90IHRyeSB0byBiaW5kIHRoZSB3b3JkcyBgZXZhbGBcbiAgICAgIC8vIG9yIGBhcmd1bWVudHNgLlxuICAgICAgaWYgKHVzZVN0cmljdCAmJiBub25TaW1wbGUpXG4gICAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKG5vZGUuc3RhcnQsIFwiSWxsZWdhbCAndXNlIHN0cmljdCcgZGlyZWN0aXZlIGluIGZ1bmN0aW9uIHdpdGggbm9uLXNpbXBsZSBwYXJhbWV0ZXIgbGlzdFwiKTsgfVxuICAgIH1cbiAgICAvLyBTdGFydCBhIG5ldyBzY29wZSB3aXRoIHJlZ2FyZCB0byBsYWJlbHMgYW5kIHRoZSBgaW5GdW5jdGlvbmBcbiAgICAvLyBmbGFnIChyZXN0b3JlIHRoZW0gdG8gdGhlaXIgb2xkIHZhbHVlIGFmdGVyd2FyZHMpLlxuICAgIHZhciBvbGRMYWJlbHMgPSB0aGlzLmxhYmVscztcbiAgICB0aGlzLmxhYmVscyA9IFtdO1xuICAgIGlmICh1c2VTdHJpY3QpIHsgdGhpcy5zdHJpY3QgPSB0cnVlOyB9XG5cbiAgICAvLyBBZGQgdGhlIHBhcmFtcyB0byB2YXJEZWNsYXJlZE5hbWVzIHRvIGVuc3VyZSB0aGF0IGFuIGVycm9yIGlzIHRocm93blxuICAgIC8vIGlmIGEgbGV0L2NvbnN0IGRlY2xhcmF0aW9uIGluIHRoZSBmdW5jdGlvbiBjbGFzaGVzIHdpdGggb25lIG9mIHRoZSBwYXJhbXMuXG4gICAgdGhpcy5jaGVja1BhcmFtcyhub2RlLCAhb2xkU3RyaWN0ICYmICF1c2VTdHJpY3QgJiYgIWlzQXJyb3dGdW5jdGlvbiAmJiAhaXNNZXRob2QgJiYgdGhpcy5pc1NpbXBsZVBhcmFtTGlzdChub2RlLnBhcmFtcykpO1xuICAgIC8vIEVuc3VyZSB0aGUgZnVuY3Rpb24gbmFtZSBpc24ndCBhIGZvcmJpZGRlbiBpZGVudGlmaWVyIGluIHN0cmljdCBtb2RlLCBlLmcuICdldmFsJ1xuICAgIGlmICh0aGlzLnN0cmljdCAmJiBub2RlLmlkKSB7IHRoaXMuY2hlY2tMVmFsKG5vZGUuaWQsIEJJTkRfT1VUU0lERSk7IH1cbiAgICBub2RlLmJvZHkgPSB0aGlzLnBhcnNlQmxvY2soZmFsc2UsIHVuZGVmaW5lZCwgdXNlU3RyaWN0ICYmICFvbGRTdHJpY3QpO1xuICAgIG5vZGUuZXhwcmVzc2lvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWRhcHREaXJlY3RpdmVQcm9sb2d1ZShub2RlLmJvZHkuYm9keSk7XG4gICAgdGhpcy5sYWJlbHMgPSBvbGRMYWJlbHM7XG4gIH1cbiAgdGhpcy5leGl0U2NvcGUoKTtcbn07XG5cbnBwJDMuaXNTaW1wbGVQYXJhbUxpc3QgPSBmdW5jdGlvbihwYXJhbXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBwYXJhbXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKVxuICAgIHtcbiAgICB2YXIgcGFyYW0gPSBsaXN0W2ldO1xuXG4gICAgaWYgKHBhcmFtLnR5cGUgIT09IFwiSWRlbnRpZmllclwiKSB7IHJldHVybiBmYWxzZVxuICB9IH1cbiAgcmV0dXJuIHRydWVcbn07XG5cbi8vIENoZWNrcyBmdW5jdGlvbiBwYXJhbXMgZm9yIHZhcmlvdXMgZGlzYWxsb3dlZCBwYXR0ZXJucyBzdWNoIGFzIHVzaW5nIFwiZXZhbFwiXG4vLyBvciBcImFyZ3VtZW50c1wiIGFuZCBkdXBsaWNhdGUgcGFyYW1ldGVycy5cblxucHAkMy5jaGVja1BhcmFtcyA9IGZ1bmN0aW9uKG5vZGUsIGFsbG93RHVwbGljYXRlcykge1xuICB2YXIgbmFtZUhhc2ggPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBub2RlLnBhcmFtczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpXG4gICAge1xuICAgIHZhciBwYXJhbSA9IGxpc3RbaV07XG5cbiAgICB0aGlzLmNoZWNrTFZhbChwYXJhbSwgQklORF9WQVIsIGFsbG93RHVwbGljYXRlcyA/IG51bGwgOiBuYW1lSGFzaCk7XG4gIH1cbn07XG5cbi8vIFBhcnNlcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zLCBhbmQgcmV0dXJucyB0aGVtIGFzXG4vLyBhbiBhcnJheS4gYGNsb3NlYCBpcyB0aGUgdG9rZW4gdHlwZSB0aGF0IGVuZHMgdGhlIGxpc3QsIGFuZFxuLy8gYGFsbG93RW1wdHlgIGNhbiBiZSB0dXJuZWQgb24gdG8gYWxsb3cgc3Vic2VxdWVudCBjb21tYXMgd2l0aFxuLy8gbm90aGluZyBpbiBiZXR3ZWVuIHRoZW0gdG8gYmUgcGFyc2VkIGFzIGBudWxsYCAod2hpY2ggaXMgbmVlZGVkXG4vLyBmb3IgYXJyYXkgbGl0ZXJhbHMpLlxuXG5wcCQzLnBhcnNlRXhwckxpc3QgPSBmdW5jdGlvbihjbG9zZSwgYWxsb3dUcmFpbGluZ0NvbW1hLCBhbGxvd0VtcHR5LCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKSB7XG4gIHZhciBlbHRzID0gW10sIGZpcnN0ID0gdHJ1ZTtcbiAgd2hpbGUgKCF0aGlzLmVhdChjbG9zZSkpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICB0aGlzLmV4cGVjdCh0eXBlcy5jb21tYSk7XG4gICAgICBpZiAoYWxsb3dUcmFpbGluZ0NvbW1hICYmIHRoaXMuYWZ0ZXJUcmFpbGluZ0NvbW1hKGNsb3NlKSkgeyBicmVhayB9XG4gICAgfSBlbHNlIHsgZmlyc3QgPSBmYWxzZTsgfVxuXG4gICAgdmFyIGVsdCA9ICh2b2lkIDApO1xuICAgIGlmIChhbGxvd0VtcHR5ICYmIHRoaXMudHlwZSA9PT0gdHlwZXMuY29tbWEpXG4gICAgICB7IGVsdCA9IG51bGw7IH1cbiAgICBlbHNlIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLmVsbGlwc2lzKSB7XG4gICAgICBlbHQgPSB0aGlzLnBhcnNlU3ByZWFkKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMpO1xuICAgICAgaWYgKHJlZkRlc3RydWN0dXJpbmdFcnJvcnMgJiYgdGhpcy50eXBlID09PSB0eXBlcy5jb21tYSAmJiByZWZEZXN0cnVjdHVyaW5nRXJyb3JzLnRyYWlsaW5nQ29tbWEgPCAwKVxuICAgICAgICB7IHJlZkRlc3RydWN0dXJpbmdFcnJvcnMudHJhaWxpbmdDb21tYSA9IHRoaXMuc3RhcnQ7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWx0ID0gdGhpcy5wYXJzZU1heWJlQXNzaWduKGZhbHNlLCByZWZEZXN0cnVjdHVyaW5nRXJyb3JzKTtcbiAgICB9XG4gICAgZWx0cy5wdXNoKGVsdCk7XG4gIH1cbiAgcmV0dXJuIGVsdHNcbn07XG5cbnBwJDMuY2hlY2tVbnJlc2VydmVkID0gZnVuY3Rpb24ocmVmKSB7XG4gIHZhciBzdGFydCA9IHJlZi5zdGFydDtcbiAgdmFyIGVuZCA9IHJlZi5lbmQ7XG4gIHZhciBuYW1lID0gcmVmLm5hbWU7XG5cbiAgaWYgKHRoaXMuaW5HZW5lcmF0b3IgJiYgbmFtZSA9PT0gXCJ5aWVsZFwiKVxuICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcIkNhbm5vdCB1c2UgJ3lpZWxkJyBhcyBpZGVudGlmaWVyIGluc2lkZSBhIGdlbmVyYXRvclwiKTsgfVxuICBpZiAodGhpcy5pbkFzeW5jICYmIG5hbWUgPT09IFwiYXdhaXRcIilcbiAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShzdGFydCwgXCJDYW5ub3QgdXNlICdhd2FpdCcgYXMgaWRlbnRpZmllciBpbnNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIik7IH1cbiAgaWYgKHRoaXMua2V5d29yZHMudGVzdChuYW1lKSlcbiAgICB7IHRoaXMucmFpc2Uoc3RhcnQsIChcIlVuZXhwZWN0ZWQga2V5d29yZCAnXCIgKyBuYW1lICsgXCInXCIpKTsgfVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNiAmJlxuICAgIHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIGVuZCkuaW5kZXhPZihcIlxcXFxcIikgIT09IC0xKSB7IHJldHVybiB9XG4gIHZhciByZSA9IHRoaXMuc3RyaWN0ID8gdGhpcy5yZXNlcnZlZFdvcmRzU3RyaWN0IDogdGhpcy5yZXNlcnZlZFdvcmRzO1xuICBpZiAocmUudGVzdChuYW1lKSkge1xuICAgIGlmICghdGhpcy5pbkFzeW5jICYmIG5hbWUgPT09IFwiYXdhaXRcIilcbiAgICAgIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHN0YXJ0LCBcIkNhbm5vdCB1c2Uga2V5d29yZCAnYXdhaXQnIG91dHNpZGUgYW4gYXN5bmMgZnVuY3Rpb25cIik7IH1cbiAgICB0aGlzLnJhaXNlUmVjb3ZlcmFibGUoc3RhcnQsIChcIlRoZSBrZXl3b3JkICdcIiArIG5hbWUgKyBcIicgaXMgcmVzZXJ2ZWRcIikpO1xuICB9XG59O1xuXG4vLyBQYXJzZSB0aGUgbmV4dCB0b2tlbiBhcyBhbiBpZGVudGlmaWVyLiBJZiBgbGliZXJhbGAgaXMgdHJ1ZSAodXNlZFxuLy8gd2hlbiBwYXJzaW5nIHByb3BlcnRpZXMpLCBpdCB3aWxsIGFsc28gY29udmVydCBrZXl3b3JkcyBpbnRvXG4vLyBpZGVudGlmaWVycy5cblxucHAkMy5wYXJzZUlkZW50ID0gZnVuY3Rpb24obGliZXJhbCwgaXNCaW5kaW5nKSB7XG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgaWYgKHRoaXMudHlwZSA9PT0gdHlwZXMubmFtZSkge1xuICAgIG5vZGUubmFtZSA9IHRoaXMudmFsdWU7XG4gIH0gZWxzZSBpZiAodGhpcy50eXBlLmtleXdvcmQpIHtcbiAgICBub2RlLm5hbWUgPSB0aGlzLnR5cGUua2V5d29yZDtcblxuICAgIC8vIFRvIGZpeCBodHRwczovL2dpdGh1Yi5jb20vYWNvcm5qcy9hY29ybi9pc3N1ZXMvNTc1XG4gICAgLy8gYGNsYXNzYCBhbmQgYGZ1bmN0aW9uYCBrZXl3b3JkcyBwdXNoIG5ldyBjb250ZXh0IGludG8gdGhpcy5jb250ZXh0LlxuICAgIC8vIEJ1dCB0aGVyZSBpcyBubyBjaGFuY2UgdG8gcG9wIHRoZSBjb250ZXh0IGlmIHRoZSBrZXl3b3JkIGlzIGNvbnN1bWVkIGFzIGFuIGlkZW50aWZpZXIgc3VjaCBhcyBhIHByb3BlcnR5IG5hbWUuXG4gICAgLy8gSWYgdGhlIHByZXZpb3VzIHRva2VuIGlzIGEgZG90LCB0aGlzIGRvZXMgbm90IGFwcGx5IGJlY2F1c2UgdGhlIGNvbnRleHQtbWFuYWdpbmcgY29kZSBhbHJlYWR5IGlnbm9yZWQgdGhlIGtleXdvcmRcbiAgICBpZiAoKG5vZGUubmFtZSA9PT0gXCJjbGFzc1wiIHx8IG5vZGUubmFtZSA9PT0gXCJmdW5jdGlvblwiKSAmJlxuICAgICAgICAodGhpcy5sYXN0VG9rRW5kICE9PSB0aGlzLmxhc3RUb2tTdGFydCArIDEgfHwgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMubGFzdFRva1N0YXJ0KSAhPT0gNDYpKSB7XG4gICAgICB0aGlzLmNvbnRleHQucG9wKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMudW5leHBlY3RlZCgpO1xuICB9XG4gIHRoaXMubmV4dCghIWxpYmVyYWwpO1xuICB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJJZGVudGlmaWVyXCIpO1xuICBpZiAoIWxpYmVyYWwpIHtcbiAgICB0aGlzLmNoZWNrVW5yZXNlcnZlZChub2RlKTtcbiAgICBpZiAobm9kZS5uYW1lID09PSBcImF3YWl0XCIgJiYgIXRoaXMuYXdhaXRJZGVudFBvcylcbiAgICAgIHsgdGhpcy5hd2FpdElkZW50UG9zID0gbm9kZS5zdGFydDsgfVxuICB9XG4gIHJldHVybiBub2RlXG59O1xuXG4vLyBQYXJzZXMgeWllbGQgZXhwcmVzc2lvbiBpbnNpZGUgZ2VuZXJhdG9yLlxuXG5wcCQzLnBhcnNlWWllbGQgPSBmdW5jdGlvbihub0luKSB7XG4gIGlmICghdGhpcy55aWVsZFBvcykgeyB0aGlzLnlpZWxkUG9zID0gdGhpcy5zdGFydDsgfVxuXG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgdGhpcy5uZXh0KCk7XG4gIGlmICh0aGlzLnR5cGUgPT09IHR5cGVzLnNlbWkgfHwgdGhpcy5jYW5JbnNlcnRTZW1pY29sb24oKSB8fCAodGhpcy50eXBlICE9PSB0eXBlcy5zdGFyICYmICF0aGlzLnR5cGUuc3RhcnRzRXhwcikpIHtcbiAgICBub2RlLmRlbGVnYXRlID0gZmFsc2U7XG4gICAgbm9kZS5hcmd1bWVudCA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5kZWxlZ2F0ZSA9IHRoaXMuZWF0KHR5cGVzLnN0YXIpO1xuICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24obm9Jbik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCBcIllpZWxkRXhwcmVzc2lvblwiKVxufTtcblxucHAkMy5wYXJzZUF3YWl0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5hd2FpdFBvcykgeyB0aGlzLmF3YWl0UG9zID0gdGhpcy5zdGFydDsgfVxuXG4gIHZhciBub2RlID0gdGhpcy5zdGFydE5vZGUoKTtcbiAgdGhpcy5uZXh0KCk7XG4gIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVVbmFyeShudWxsLCBmYWxzZSk7XG4gIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgXCJBd2FpdEV4cHJlc3Npb25cIilcbn07XG5cbnZhciBwcCQ0ID0gUGFyc2VyLnByb3RvdHlwZTtcblxuLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJhaXNlIGV4Y2VwdGlvbnMgb24gcGFyc2UgZXJyb3JzLiBJdFxuLy8gdGFrZXMgYW4gb2Zmc2V0IGludGVnZXIgKGludG8gdGhlIGN1cnJlbnQgYGlucHV0YCkgdG8gaW5kaWNhdGVcbi8vIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IsIGF0dGFjaGVzIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5kXG4vLyBvZiB0aGUgZXJyb3IgbWVzc2FnZSwgYW5kIHRoZW4gcmFpc2VzIGEgYFN5bnRheEVycm9yYCB3aXRoIHRoYXRcbi8vIG1lc3NhZ2UuXG5cbnBwJDQucmFpc2UgPSBmdW5jdGlvbihwb3MsIG1lc3NhZ2UpIHtcbiAgdmFyIGxvYyA9IGdldExpbmVJbmZvKHRoaXMuaW5wdXQsIHBvcyk7XG4gIG1lc3NhZ2UgKz0gXCIgKFwiICsgbG9jLmxpbmUgKyBcIjpcIiArIGxvYy5jb2x1bW4gKyBcIilcIjtcbiAgdmFyIGVyciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlKTtcbiAgZXJyLnBvcyA9IHBvczsgZXJyLmxvYyA9IGxvYzsgZXJyLnJhaXNlZEF0ID0gdGhpcy5wb3M7XG4gIHRocm93IGVyclxufTtcblxucHAkNC5yYWlzZVJlY292ZXJhYmxlID0gcHAkNC5yYWlzZTtcblxucHAkNC5jdXJQb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5vcHRpb25zLmxvY2F0aW9ucykge1xuICAgIHJldHVybiBuZXcgUG9zaXRpb24odGhpcy5jdXJMaW5lLCB0aGlzLnBvcyAtIHRoaXMubGluZVN0YXJ0KVxuICB9XG59O1xuXG52YXIgcHAkNSA9IFBhcnNlci5wcm90b3R5cGU7XG5cbnZhciBTY29wZSA9IGZ1bmN0aW9uIFNjb3BlKGZsYWdzKSB7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgLy8gQSBsaXN0IG9mIHZhci1kZWNsYXJlZCBuYW1lcyBpbiB0aGUgY3VycmVudCBsZXhpY2FsIHNjb3BlXG4gIHRoaXMudmFyID0gW107XG4gIC8vIEEgbGlzdCBvZiBsZXhpY2FsbHktZGVjbGFyZWQgbmFtZXMgaW4gdGhlIGN1cnJlbnQgbGV4aWNhbCBzY29wZVxuICB0aGlzLmxleGljYWwgPSBbXTtcbiAgLy8gQSBsaXN0IG9mIGxleGljYWxseS1kZWNsYXJlZCBGdW5jdGlvbkRlY2xhcmF0aW9uIG5hbWVzIGluIHRoZSBjdXJyZW50IGxleGljYWwgc2NvcGVcbiAgdGhpcy5mdW5jdGlvbnMgPSBbXTtcbn07XG5cbi8vIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUga2VlcCB0cmFjayBvZiBkZWNsYXJlZCB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgaW4gb3JkZXIgdG8gZGV0ZWN0IGR1cGxpY2F0ZSB2YXJpYWJsZSBuYW1lcy5cblxucHAkNS5lbnRlclNjb3BlID0gZnVuY3Rpb24oZmxhZ3MpIHtcbiAgdGhpcy5zY29wZVN0YWNrLnB1c2gobmV3IFNjb3BlKGZsYWdzKSk7XG59O1xuXG5wcCQ1LmV4aXRTY29wZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLnNjb3BlU3RhY2sucG9wKCk7XG59O1xuXG4vLyBUaGUgc3BlYyBzYXlzOlxuLy8gPiBBdCB0aGUgdG9wIGxldmVsIG9mIGEgZnVuY3Rpb24sIG9yIHNjcmlwdCwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGFyZVxuLy8gPiB0cmVhdGVkIGxpa2UgdmFyIGRlY2xhcmF0aW9ucyByYXRoZXIgdGhhbiBsaWtlIGxleGljYWwgZGVjbGFyYXRpb25zLlxucHAkNS50cmVhdEZ1bmN0aW9uc0FzVmFySW5TY29wZSA9IGZ1bmN0aW9uKHNjb3BlKSB7XG4gIHJldHVybiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9GVU5DVElPTikgfHwgIXRoaXMuaW5Nb2R1bGUgJiYgKHNjb3BlLmZsYWdzICYgU0NPUEVfVE9QKVxufTtcblxucHAkNS5kZWNsYXJlTmFtZSA9IGZ1bmN0aW9uKG5hbWUsIGJpbmRpbmdUeXBlLCBwb3MpIHtcbiAgdmFyIHJlZGVjbGFyZWQgPSBmYWxzZTtcbiAgaWYgKGJpbmRpbmdUeXBlID09PSBCSU5EX0xFWElDQUwpIHtcbiAgICB2YXIgc2NvcGUgPSB0aGlzLmN1cnJlbnRTY29wZSgpO1xuICAgIHJlZGVjbGFyZWQgPSBzY29wZS5sZXhpY2FsLmluZGV4T2YobmFtZSkgPiAtMSB8fCBzY29wZS5mdW5jdGlvbnMuaW5kZXhPZihuYW1lKSA+IC0xIHx8IHNjb3BlLnZhci5pbmRleE9mKG5hbWUpID4gLTE7XG4gICAgc2NvcGUubGV4aWNhbC5wdXNoKG5hbWUpO1xuICAgIGlmICh0aGlzLmluTW9kdWxlICYmIChzY29wZS5mbGFncyAmIFNDT1BFX1RPUCkpXG4gICAgICB7IGRlbGV0ZSB0aGlzLnVuZGVmaW5lZEV4cG9ydHNbbmFtZV07IH1cbiAgfSBlbHNlIGlmIChiaW5kaW5nVHlwZSA9PT0gQklORF9TSU1QTEVfQ0FUQ0gpIHtcbiAgICB2YXIgc2NvcGUkMSA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgc2NvcGUkMS5sZXhpY2FsLnB1c2gobmFtZSk7XG4gIH0gZWxzZSBpZiAoYmluZGluZ1R5cGUgPT09IEJJTkRfRlVOQ1RJT04pIHtcbiAgICB2YXIgc2NvcGUkMiA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgaWYgKHRoaXMudHJlYXRGdW5jdGlvbnNBc1ZhcilcbiAgICAgIHsgcmVkZWNsYXJlZCA9IHNjb3BlJDIubGV4aWNhbC5pbmRleE9mKG5hbWUpID4gLTE7IH1cbiAgICBlbHNlXG4gICAgICB7IHJlZGVjbGFyZWQgPSBzY29wZSQyLmxleGljYWwuaW5kZXhPZihuYW1lKSA+IC0xIHx8IHNjb3BlJDIudmFyLmluZGV4T2YobmFtZSkgPiAtMTsgfVxuICAgIHNjb3BlJDIuZnVuY3Rpb25zLnB1c2gobmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuc2NvcGVTdGFjay5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIHNjb3BlJDMgPSB0aGlzLnNjb3BlU3RhY2tbaV07XG4gICAgICBpZiAoc2NvcGUkMy5sZXhpY2FsLmluZGV4T2YobmFtZSkgPiAtMSAmJiAhKChzY29wZSQzLmZsYWdzICYgU0NPUEVfU0lNUExFX0NBVENIKSAmJiBzY29wZSQzLmxleGljYWxbMF0gPT09IG5hbWUpIHx8XG4gICAgICAgICAgIXRoaXMudHJlYXRGdW5jdGlvbnNBc1ZhckluU2NvcGUoc2NvcGUkMykgJiYgc2NvcGUkMy5mdW5jdGlvbnMuaW5kZXhPZihuYW1lKSA+IC0xKSB7XG4gICAgICAgIHJlZGVjbGFyZWQgPSB0cnVlO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgc2NvcGUkMy52YXIucHVzaChuYW1lKTtcbiAgICAgIGlmICh0aGlzLmluTW9kdWxlICYmIChzY29wZSQzLmZsYWdzICYgU0NPUEVfVE9QKSlcbiAgICAgICAgeyBkZWxldGUgdGhpcy51bmRlZmluZWRFeHBvcnRzW25hbWVdOyB9XG4gICAgICBpZiAoc2NvcGUkMy5mbGFncyAmIFNDT1BFX1ZBUikgeyBicmVhayB9XG4gICAgfVxuICB9XG4gIGlmIChyZWRlY2xhcmVkKSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZShwb3MsIChcIklkZW50aWZpZXIgJ1wiICsgbmFtZSArIFwiJyBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkXCIpKTsgfVxufTtcblxucHAkNS5jaGVja0xvY2FsRXhwb3J0ID0gZnVuY3Rpb24oaWQpIHtcbiAgLy8gc2NvcGUuZnVuY3Rpb25zIG11c3QgYmUgZW1wdHkgYXMgTW9kdWxlIGNvZGUgaXMgYWx3YXlzIHN0cmljdC5cbiAgaWYgKHRoaXMuc2NvcGVTdGFja1swXS5sZXhpY2FsLmluZGV4T2YoaWQubmFtZSkgPT09IC0xICYmXG4gICAgICB0aGlzLnNjb3BlU3RhY2tbMF0udmFyLmluZGV4T2YoaWQubmFtZSkgPT09IC0xKSB7XG4gICAgdGhpcy51bmRlZmluZWRFeHBvcnRzW2lkLm5hbWVdID0gaWQ7XG4gIH1cbn07XG5cbnBwJDUuY3VycmVudFNjb3BlID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNjb3BlU3RhY2tbdGhpcy5zY29wZVN0YWNrLmxlbmd0aCAtIDFdXG59O1xuXG5wcCQ1LmN1cnJlbnRWYXJTY29wZSA9IGZ1bmN0aW9uKCkge1xuICBmb3IgKHZhciBpID0gdGhpcy5zY29wZVN0YWNrLmxlbmd0aCAtIDE7OyBpLS0pIHtcbiAgICB2YXIgc2NvcGUgPSB0aGlzLnNjb3BlU3RhY2tbaV07XG4gICAgaWYgKHNjb3BlLmZsYWdzICYgU0NPUEVfVkFSKSB7IHJldHVybiBzY29wZSB9XG4gIH1cbn07XG5cbi8vIENvdWxkIGJlIHVzZWZ1bCBmb3IgYHRoaXNgLCBgbmV3LnRhcmdldGAsIGBzdXBlcigpYCwgYHN1cGVyLnByb3BlcnR5YCwgYW5kIGBzdXBlcltwcm9wZXJ0eV1gLlxucHAkNS5jdXJyZW50VGhpc1Njb3BlID0gZnVuY3Rpb24oKSB7XG4gIGZvciAodmFyIGkgPSB0aGlzLnNjb3BlU3RhY2subGVuZ3RoIC0gMTs7IGktLSkge1xuICAgIHZhciBzY29wZSA9IHRoaXMuc2NvcGVTdGFja1tpXTtcbiAgICBpZiAoc2NvcGUuZmxhZ3MgJiBTQ09QRV9WQVIgJiYgIShzY29wZS5mbGFncyAmIFNDT1BFX0FSUk9XKSkgeyByZXR1cm4gc2NvcGUgfVxuICB9XG59O1xuXG52YXIgTm9kZSA9IGZ1bmN0aW9uIE5vZGUocGFyc2VyLCBwb3MsIGxvYykge1xuICB0aGlzLnR5cGUgPSBcIlwiO1xuICB0aGlzLnN0YXJ0ID0gcG9zO1xuICB0aGlzLmVuZCA9IDA7XG4gIGlmIChwYXJzZXIub3B0aW9ucy5sb2NhdGlvbnMpXG4gICAgeyB0aGlzLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlvbihwYXJzZXIsIGxvYyk7IH1cbiAgaWYgKHBhcnNlci5vcHRpb25zLmRpcmVjdFNvdXJjZUZpbGUpXG4gICAgeyB0aGlzLnNvdXJjZUZpbGUgPSBwYXJzZXIub3B0aW9ucy5kaXJlY3RTb3VyY2VGaWxlOyB9XG4gIGlmIChwYXJzZXIub3B0aW9ucy5yYW5nZXMpXG4gICAgeyB0aGlzLnJhbmdlID0gW3BvcywgMF07IH1cbn07XG5cbi8vIFN0YXJ0IGFuIEFTVCBub2RlLCBhdHRhY2hpbmcgYSBzdGFydCBvZmZzZXQuXG5cbnZhciBwcCQ2ID0gUGFyc2VyLnByb3RvdHlwZTtcblxucHAkNi5zdGFydE5vZGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBOb2RlKHRoaXMsIHRoaXMuc3RhcnQsIHRoaXMuc3RhcnRMb2MpXG59O1xuXG5wcCQ2LnN0YXJ0Tm9kZUF0ID0gZnVuY3Rpb24ocG9zLCBsb2MpIHtcbiAgcmV0dXJuIG5ldyBOb2RlKHRoaXMsIHBvcywgbG9jKVxufTtcblxuLy8gRmluaXNoIGFuIEFTVCBub2RlLCBhZGRpbmcgYHR5cGVgIGFuZCBgZW5kYCBwcm9wZXJ0aWVzLlxuXG5mdW5jdGlvbiBmaW5pc2hOb2RlQXQobm9kZSwgdHlwZSwgcG9zLCBsb2MpIHtcbiAgbm9kZS50eXBlID0gdHlwZTtcbiAgbm9kZS5lbmQgPSBwb3M7XG4gIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKVxuICAgIHsgbm9kZS5sb2MuZW5kID0gbG9jOyB9XG4gIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKVxuICAgIHsgbm9kZS5yYW5nZVsxXSA9IHBvczsgfVxuICByZXR1cm4gbm9kZVxufVxuXG5wcCQ2LmZpbmlzaE5vZGUgPSBmdW5jdGlvbihub2RlLCB0eXBlKSB7XG4gIHJldHVybiBmaW5pc2hOb2RlQXQuY2FsbCh0aGlzLCBub2RlLCB0eXBlLCB0aGlzLmxhc3RUb2tFbmQsIHRoaXMubGFzdFRva0VuZExvYylcbn07XG5cbi8vIEZpbmlzaCBub2RlIGF0IGdpdmVuIHBvc2l0aW9uXG5cbnBwJDYuZmluaXNoTm9kZUF0ID0gZnVuY3Rpb24obm9kZSwgdHlwZSwgcG9zLCBsb2MpIHtcbiAgcmV0dXJuIGZpbmlzaE5vZGVBdC5jYWxsKHRoaXMsIG5vZGUsIHR5cGUsIHBvcywgbG9jKVxufTtcblxuLy8gVGhlIGFsZ29yaXRobSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGEgcmVnZXhwIGNhbiBhcHBlYXIgYXQgYVxuXG52YXIgVG9rQ29udGV4dCA9IGZ1bmN0aW9uIFRva0NvbnRleHQodG9rZW4sIGlzRXhwciwgcHJlc2VydmVTcGFjZSwgb3ZlcnJpZGUsIGdlbmVyYXRvcikge1xuICB0aGlzLnRva2VuID0gdG9rZW47XG4gIHRoaXMuaXNFeHByID0gISFpc0V4cHI7XG4gIHRoaXMucHJlc2VydmVTcGFjZSA9ICEhcHJlc2VydmVTcGFjZTtcbiAgdGhpcy5vdmVycmlkZSA9IG92ZXJyaWRlO1xuICB0aGlzLmdlbmVyYXRvciA9ICEhZ2VuZXJhdG9yO1xufTtcblxudmFyIHR5cGVzJDEgPSB7XG4gIGJfc3RhdDogbmV3IFRva0NvbnRleHQoXCJ7XCIsIGZhbHNlKSxcbiAgYl9leHByOiBuZXcgVG9rQ29udGV4dChcIntcIiwgdHJ1ZSksXG4gIGJfdG1wbDogbmV3IFRva0NvbnRleHQoXCIke1wiLCBmYWxzZSksXG4gIHBfc3RhdDogbmV3IFRva0NvbnRleHQoXCIoXCIsIGZhbHNlKSxcbiAgcF9leHByOiBuZXcgVG9rQ29udGV4dChcIihcIiwgdHJ1ZSksXG4gIHFfdG1wbDogbmV3IFRva0NvbnRleHQoXCJgXCIsIHRydWUsIHRydWUsIGZ1bmN0aW9uIChwKSB7IHJldHVybiBwLnRyeVJlYWRUZW1wbGF0ZVRva2VuKCk7IH0pLFxuICBmX3N0YXQ6IG5ldyBUb2tDb250ZXh0KFwiZnVuY3Rpb25cIiwgZmFsc2UpLFxuICBmX2V4cHI6IG5ldyBUb2tDb250ZXh0KFwiZnVuY3Rpb25cIiwgdHJ1ZSksXG4gIGZfZXhwcl9nZW46IG5ldyBUb2tDb250ZXh0KFwiZnVuY3Rpb25cIiwgdHJ1ZSwgZmFsc2UsIG51bGwsIHRydWUpLFxuICBmX2dlbjogbmV3IFRva0NvbnRleHQoXCJmdW5jdGlvblwiLCBmYWxzZSwgZmFsc2UsIG51bGwsIHRydWUpXG59O1xuXG52YXIgcHAkNyA9IFBhcnNlci5wcm90b3R5cGU7XG5cbnBwJDcuaW5pdGlhbENvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIFt0eXBlcyQxLmJfc3RhdF1cbn07XG5cbnBwJDcuYnJhY2VJc0Jsb2NrID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMuY3VyQ29udGV4dCgpO1xuICBpZiAocGFyZW50ID09PSB0eXBlcyQxLmZfZXhwciB8fCBwYXJlbnQgPT09IHR5cGVzJDEuZl9zdGF0KVxuICAgIHsgcmV0dXJuIHRydWUgfVxuICBpZiAocHJldlR5cGUgPT09IHR5cGVzLmNvbG9uICYmIChwYXJlbnQgPT09IHR5cGVzJDEuYl9zdGF0IHx8IHBhcmVudCA9PT0gdHlwZXMkMS5iX2V4cHIpKVxuICAgIHsgcmV0dXJuICFwYXJlbnQuaXNFeHByIH1cblxuICAvLyBUaGUgY2hlY2sgZm9yIGB0dC5uYW1lICYmIGV4cHJBbGxvd2VkYCBkZXRlY3RzIHdoZXRoZXIgd2UgYXJlXG4gIC8vIGFmdGVyIGEgYHlpZWxkYCBvciBgb2ZgIGNvbnN0cnVjdC4gU2VlIHRoZSBgdXBkYXRlQ29udGV4dGAgZm9yXG4gIC8vIGB0dC5uYW1lYC5cbiAgaWYgKHByZXZUeXBlID09PSB0eXBlcy5fcmV0dXJuIHx8IHByZXZUeXBlID09PSB0eXBlcy5uYW1lICYmIHRoaXMuZXhwckFsbG93ZWQpXG4gICAgeyByZXR1cm4gbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKSB9XG4gIGlmIChwcmV2VHlwZSA9PT0gdHlwZXMuX2Vsc2UgfHwgcHJldlR5cGUgPT09IHR5cGVzLnNlbWkgfHwgcHJldlR5cGUgPT09IHR5cGVzLmVvZiB8fCBwcmV2VHlwZSA9PT0gdHlwZXMucGFyZW5SIHx8IHByZXZUeXBlID09PSB0eXBlcy5hcnJvdylcbiAgICB7IHJldHVybiB0cnVlIH1cbiAgaWYgKHByZXZUeXBlID09PSB0eXBlcy5icmFjZUwpXG4gICAgeyByZXR1cm4gcGFyZW50ID09PSB0eXBlcyQxLmJfc3RhdCB9XG4gIGlmIChwcmV2VHlwZSA9PT0gdHlwZXMuX3ZhciB8fCBwcmV2VHlwZSA9PT0gdHlwZXMuX2NvbnN0IHx8IHByZXZUeXBlID09PSB0eXBlcy5uYW1lKVxuICAgIHsgcmV0dXJuIGZhbHNlIH1cbiAgcmV0dXJuICF0aGlzLmV4cHJBbGxvd2VkXG59O1xuXG5wcCQ3LmluR2VuZXJhdG9yQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICBmb3IgKHZhciBpID0gdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDE7IGkgPj0gMTsgaS0tKSB7XG4gICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHRbaV07XG4gICAgaWYgKGNvbnRleHQudG9rZW4gPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIHsgcmV0dXJuIGNvbnRleHQuZ2VuZXJhdG9yIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbnBwJDcudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIHZhciB1cGRhdGUsIHR5cGUgPSB0aGlzLnR5cGU7XG4gIGlmICh0eXBlLmtleXdvcmQgJiYgcHJldlR5cGUgPT09IHR5cGVzLmRvdClcbiAgICB7IHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTsgfVxuICBlbHNlIGlmICh1cGRhdGUgPSB0eXBlLnVwZGF0ZUNvbnRleHQpXG4gICAgeyB1cGRhdGUuY2FsbCh0aGlzLCBwcmV2VHlwZSk7IH1cbiAgZWxzZVxuICAgIHsgdGhpcy5leHByQWxsb3dlZCA9IHR5cGUuYmVmb3JlRXhwcjsgfVxufTtcblxuLy8gVG9rZW4tc3BlY2lmaWMgY29udGV4dCB1cGRhdGUgY29kZVxuXG50eXBlcy5wYXJlblIudXBkYXRlQ29udGV4dCA9IHR5cGVzLmJyYWNlUi51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLmNvbnRleHQubGVuZ3RoID09PSAxKSB7XG4gICAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG91dCA9IHRoaXMuY29udGV4dC5wb3AoKTtcbiAgaWYgKG91dCA9PT0gdHlwZXMkMS5iX3N0YXQgJiYgdGhpcy5jdXJDb250ZXh0KCkudG9rZW4gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG91dCA9IHRoaXMuY29udGV4dC5wb3AoKTtcbiAgfVxuICB0aGlzLmV4cHJBbGxvd2VkID0gIW91dC5pc0V4cHI7XG59O1xuXG50eXBlcy5icmFjZUwudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIHRoaXMuY29udGV4dC5wdXNoKHRoaXMuYnJhY2VJc0Jsb2NrKHByZXZUeXBlKSA/IHR5cGVzJDEuYl9zdGF0IDogdHlwZXMkMS5iX2V4cHIpO1xuICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbn07XG5cbnR5cGVzLmRvbGxhckJyYWNlTC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuY29udGV4dC5wdXNoKHR5cGVzJDEuYl90bXBsKTtcbiAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG59O1xuXG50eXBlcy5wYXJlbkwudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIHZhciBzdGF0ZW1lbnRQYXJlbnMgPSBwcmV2VHlwZSA9PT0gdHlwZXMuX2lmIHx8IHByZXZUeXBlID09PSB0eXBlcy5fZm9yIHx8IHByZXZUeXBlID09PSB0eXBlcy5fd2l0aCB8fCBwcmV2VHlwZSA9PT0gdHlwZXMuX3doaWxlO1xuICB0aGlzLmNvbnRleHQucHVzaChzdGF0ZW1lbnRQYXJlbnMgPyB0eXBlcyQxLnBfc3RhdCA6IHR5cGVzJDEucF9leHByKTtcbiAgdGhpcy5leHByQWxsb3dlZCA9IHRydWU7XG59O1xuXG50eXBlcy5pbmNEZWMudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAvLyB0b2tFeHByQWxsb3dlZCBzdGF5cyB1bmNoYW5nZWRcbn07XG5cbnR5cGVzLl9mdW5jdGlvbi51cGRhdGVDb250ZXh0ID0gdHlwZXMuX2NsYXNzLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICBpZiAocHJldlR5cGUuYmVmb3JlRXhwciAmJiBwcmV2VHlwZSAhPT0gdHlwZXMuc2VtaSAmJiBwcmV2VHlwZSAhPT0gdHlwZXMuX2Vsc2UgJiZcbiAgICAgICEocHJldlR5cGUgPT09IHR5cGVzLl9yZXR1cm4gJiYgbGluZUJyZWFrLnRlc3QodGhpcy5pbnB1dC5zbGljZSh0aGlzLmxhc3RUb2tFbmQsIHRoaXMuc3RhcnQpKSkgJiZcbiAgICAgICEoKHByZXZUeXBlID09PSB0eXBlcy5jb2xvbiB8fCBwcmV2VHlwZSA9PT0gdHlwZXMuYnJhY2VMKSAmJiB0aGlzLmN1ckNvbnRleHQoKSA9PT0gdHlwZXMkMS5iX3N0YXQpKVxuICAgIHsgdGhpcy5jb250ZXh0LnB1c2godHlwZXMkMS5mX2V4cHIpOyB9XG4gIGVsc2VcbiAgICB7IHRoaXMuY29udGV4dC5wdXNoKHR5cGVzJDEuZl9zdGF0KTsgfVxuICB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2U7XG59O1xuXG50eXBlcy5iYWNrUXVvdGUudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5jdXJDb250ZXh0KCkgPT09IHR5cGVzJDEucV90bXBsKVxuICAgIHsgdGhpcy5jb250ZXh0LnBvcCgpOyB9XG4gIGVsc2VcbiAgICB7IHRoaXMuY29udGV4dC5wdXNoKHR5cGVzJDEucV90bXBsKTsgfVxuICB0aGlzLmV4cHJBbGxvd2VkID0gZmFsc2U7XG59O1xuXG50eXBlcy5zdGFyLnVwZGF0ZUNvbnRleHQgPSBmdW5jdGlvbihwcmV2VHlwZSkge1xuICBpZiAocHJldlR5cGUgPT09IHR5cGVzLl9mdW5jdGlvbikge1xuICAgIHZhciBpbmRleCA9IHRoaXMuY29udGV4dC5sZW5ndGggLSAxO1xuICAgIGlmICh0aGlzLmNvbnRleHRbaW5kZXhdID09PSB0eXBlcyQxLmZfZXhwcilcbiAgICAgIHsgdGhpcy5jb250ZXh0W2luZGV4XSA9IHR5cGVzJDEuZl9leHByX2dlbjsgfVxuICAgIGVsc2VcbiAgICAgIHsgdGhpcy5jb250ZXh0W2luZGV4XSA9IHR5cGVzJDEuZl9nZW47IH1cbiAgfVxuICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbn07XG5cbnR5cGVzLm5hbWUudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKHByZXZUeXBlKSB7XG4gIHZhciBhbGxvd2VkID0gZmFsc2U7XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNiAmJiBwcmV2VHlwZSAhPT0gdHlwZXMuZG90KSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IFwib2ZcIiAmJiAhdGhpcy5leHByQWxsb3dlZCB8fFxuICAgICAgICB0aGlzLnZhbHVlID09PSBcInlpZWxkXCIgJiYgdGhpcy5pbkdlbmVyYXRvckNvbnRleHQoKSlcbiAgICAgIHsgYWxsb3dlZCA9IHRydWU7IH1cbiAgfVxuICB0aGlzLmV4cHJBbGxvd2VkID0gYWxsb3dlZDtcbn07XG5cbi8vIFRoaXMgZmlsZSBjb250YWlucyBVbmljb2RlIHByb3BlcnRpZXMgZXh0cmFjdGVkIGZyb20gdGhlIEVDTUFTY3JpcHRcbi8vIHNwZWNpZmljYXRpb24uIFRoZSBsaXN0cyBhcmUgZXh0cmFjdGVkIGxpa2Ugc286XG4vLyAkJCgnI3RhYmxlLWJpbmFyeS11bmljb2RlLXByb3BlcnRpZXMgPiBmaWd1cmUgPiB0YWJsZSA+IHRib2R5ID4gdHIgPiB0ZDpudGgtY2hpbGQoMSkgY29kZScpLm1hcChlbCA9PiBlbC5pbm5lclRleHQpXG5cbi8vICN0YWJsZS1iaW5hcnktdW5pY29kZS1wcm9wZXJ0aWVzXG52YXIgZWNtYTlCaW5hcnlQcm9wZXJ0aWVzID0gXCJBU0NJSSBBU0NJSV9IZXhfRGlnaXQgQUhleCBBbHBoYWJldGljIEFscGhhIEFueSBBc3NpZ25lZCBCaWRpX0NvbnRyb2wgQmlkaV9DIEJpZGlfTWlycm9yZWQgQmlkaV9NIENhc2VfSWdub3JhYmxlIENJIENhc2VkIENoYW5nZXNfV2hlbl9DYXNlZm9sZGVkIENXQ0YgQ2hhbmdlc19XaGVuX0Nhc2VtYXBwZWQgQ1dDTSBDaGFuZ2VzX1doZW5fTG93ZXJjYXNlZCBDV0wgQ2hhbmdlc19XaGVuX05GS0NfQ2FzZWZvbGRlZCBDV0tDRiBDaGFuZ2VzX1doZW5fVGl0bGVjYXNlZCBDV1QgQ2hhbmdlc19XaGVuX1VwcGVyY2FzZWQgQ1dVIERhc2ggRGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludCBESSBEZXByZWNhdGVkIERlcCBEaWFjcml0aWMgRGlhIEVtb2ppIEVtb2ppX0NvbXBvbmVudCBFbW9qaV9Nb2RpZmllciBFbW9qaV9Nb2RpZmllcl9CYXNlIEVtb2ppX1ByZXNlbnRhdGlvbiBFeHRlbmRlciBFeHQgR3JhcGhlbWVfQmFzZSBHcl9CYXNlIEdyYXBoZW1lX0V4dGVuZCBHcl9FeHQgSGV4X0RpZ2l0IEhleCBJRFNfQmluYXJ5X09wZXJhdG9yIElEU0IgSURTX1RyaW5hcnlfT3BlcmF0b3IgSURTVCBJRF9Db250aW51ZSBJREMgSURfU3RhcnQgSURTIElkZW9ncmFwaGljIElkZW8gSm9pbl9Db250cm9sIEpvaW5fQyBMb2dpY2FsX09yZGVyX0V4Y2VwdGlvbiBMT0UgTG93ZXJjYXNlIExvd2VyIE1hdGggTm9uY2hhcmFjdGVyX0NvZGVfUG9pbnQgTkNoYXIgUGF0dGVybl9TeW50YXggUGF0X1N5biBQYXR0ZXJuX1doaXRlX1NwYWNlIFBhdF9XUyBRdW90YXRpb25fTWFyayBRTWFyayBSYWRpY2FsIFJlZ2lvbmFsX0luZGljYXRvciBSSSBTZW50ZW5jZV9UZXJtaW5hbCBTVGVybSBTb2Z0X0RvdHRlZCBTRCBUZXJtaW5hbF9QdW5jdHVhdGlvbiBUZXJtIFVuaWZpZWRfSWRlb2dyYXBoIFVJZGVvIFVwcGVyY2FzZSBVcHBlciBWYXJpYXRpb25fU2VsZWN0b3IgVlMgV2hpdGVfU3BhY2Ugc3BhY2UgWElEX0NvbnRpbnVlIFhJREMgWElEX1N0YXJ0IFhJRFNcIjtcbnZhciBlY21hMTBCaW5hcnlQcm9wZXJ0aWVzID0gZWNtYTlCaW5hcnlQcm9wZXJ0aWVzICsgXCIgRXh0ZW5kZWRfUGljdG9ncmFwaGljXCI7XG52YXIgZWNtYTExQmluYXJ5UHJvcGVydGllcyA9IGVjbWExMEJpbmFyeVByb3BlcnRpZXM7XG52YXIgdW5pY29kZUJpbmFyeVByb3BlcnRpZXMgPSB7XG4gIDk6IGVjbWE5QmluYXJ5UHJvcGVydGllcyxcbiAgMTA6IGVjbWExMEJpbmFyeVByb3BlcnRpZXMsXG4gIDExOiBlY21hMTFCaW5hcnlQcm9wZXJ0aWVzXG59O1xuXG4vLyAjdGFibGUtdW5pY29kZS1nZW5lcmFsLWNhdGVnb3J5LXZhbHVlc1xudmFyIHVuaWNvZGVHZW5lcmFsQ2F0ZWdvcnlWYWx1ZXMgPSBcIkNhc2VkX0xldHRlciBMQyBDbG9zZV9QdW5jdHVhdGlvbiBQZSBDb25uZWN0b3JfUHVuY3R1YXRpb24gUGMgQ29udHJvbCBDYyBjbnRybCBDdXJyZW5jeV9TeW1ib2wgU2MgRGFzaF9QdW5jdHVhdGlvbiBQZCBEZWNpbWFsX051bWJlciBOZCBkaWdpdCBFbmNsb3NpbmdfTWFyayBNZSBGaW5hbF9QdW5jdHVhdGlvbiBQZiBGb3JtYXQgQ2YgSW5pdGlhbF9QdW5jdHVhdGlvbiBQaSBMZXR0ZXIgTCBMZXR0ZXJfTnVtYmVyIE5sIExpbmVfU2VwYXJhdG9yIFpsIExvd2VyY2FzZV9MZXR0ZXIgTGwgTWFyayBNIENvbWJpbmluZ19NYXJrIE1hdGhfU3ltYm9sIFNtIE1vZGlmaWVyX0xldHRlciBMbSBNb2RpZmllcl9TeW1ib2wgU2sgTm9uc3BhY2luZ19NYXJrIE1uIE51bWJlciBOIE9wZW5fUHVuY3R1YXRpb24gUHMgT3RoZXIgQyBPdGhlcl9MZXR0ZXIgTG8gT3RoZXJfTnVtYmVyIE5vIE90aGVyX1B1bmN0dWF0aW9uIFBvIE90aGVyX1N5bWJvbCBTbyBQYXJhZ3JhcGhfU2VwYXJhdG9yIFpwIFByaXZhdGVfVXNlIENvIFB1bmN0dWF0aW9uIFAgcHVuY3QgU2VwYXJhdG9yIFogU3BhY2VfU2VwYXJhdG9yIFpzIFNwYWNpbmdfTWFyayBNYyBTdXJyb2dhdGUgQ3MgU3ltYm9sIFMgVGl0bGVjYXNlX0xldHRlciBMdCBVbmFzc2lnbmVkIENuIFVwcGVyY2FzZV9MZXR0ZXIgTHVcIjtcblxuLy8gI3RhYmxlLXVuaWNvZGUtc2NyaXB0LXZhbHVlc1xudmFyIGVjbWE5U2NyaXB0VmFsdWVzID0gXCJBZGxhbSBBZGxtIEFob20gQWhvbSBBbmF0b2xpYW5fSGllcm9nbHlwaHMgSGx1dyBBcmFiaWMgQXJhYiBBcm1lbmlhbiBBcm1uIEF2ZXN0YW4gQXZzdCBCYWxpbmVzZSBCYWxpIEJhbXVtIEJhbXUgQmFzc2FfVmFoIEJhc3MgQmF0YWsgQmF0ayBCZW5nYWxpIEJlbmcgQmhhaWtzdWtpIEJoa3MgQm9wb21vZm8gQm9wbyBCcmFobWkgQnJhaCBCcmFpbGxlIEJyYWkgQnVnaW5lc2UgQnVnaSBCdWhpZCBCdWhkIENhbmFkaWFuX0Fib3JpZ2luYWwgQ2FucyBDYXJpYW4gQ2FyaSBDYXVjYXNpYW5fQWxiYW5pYW4gQWdoYiBDaGFrbWEgQ2FrbSBDaGFtIENoYW0gQ2hlcm9rZWUgQ2hlciBDb21tb24gWnl5eSBDb3B0aWMgQ29wdCBRYWFjIEN1bmVpZm9ybSBYc3V4IEN5cHJpb3QgQ3BydCBDeXJpbGxpYyBDeXJsIERlc2VyZXQgRHNydCBEZXZhbmFnYXJpIERldmEgRHVwbG95YW4gRHVwbCBFZ3lwdGlhbl9IaWVyb2dseXBocyBFZ3lwIEVsYmFzYW4gRWxiYSBFdGhpb3BpYyBFdGhpIEdlb3JnaWFuIEdlb3IgR2xhZ29saXRpYyBHbGFnIEdvdGhpYyBHb3RoIEdyYW50aGEgR3JhbiBHcmVlayBHcmVrIEd1amFyYXRpIEd1anIgR3VybXVraGkgR3VydSBIYW4gSGFuaSBIYW5ndWwgSGFuZyBIYW51bm9vIEhhbm8gSGF0cmFuIEhhdHIgSGVicmV3IEhlYnIgSGlyYWdhbmEgSGlyYSBJbXBlcmlhbF9BcmFtYWljIEFybWkgSW5oZXJpdGVkIFppbmggUWFhaSBJbnNjcmlwdGlvbmFsX1BhaGxhdmkgUGhsaSBJbnNjcmlwdGlvbmFsX1BhcnRoaWFuIFBydGkgSmF2YW5lc2UgSmF2YSBLYWl0aGkgS3RoaSBLYW5uYWRhIEtuZGEgS2F0YWthbmEgS2FuYSBLYXlhaF9MaSBLYWxpIEtoYXJvc2h0aGkgS2hhciBLaG1lciBLaG1yIEtob2praSBLaG9qIEtodWRhd2FkaSBTaW5kIExhbyBMYW9vIExhdGluIExhdG4gTGVwY2hhIExlcGMgTGltYnUgTGltYiBMaW5lYXJfQSBMaW5hIExpbmVhcl9CIExpbmIgTGlzdSBMaXN1IEx5Y2lhbiBMeWNpIEx5ZGlhbiBMeWRpIE1haGFqYW5pIE1haGogTWFsYXlhbGFtIE1seW0gTWFuZGFpYyBNYW5kIE1hbmljaGFlYW4gTWFuaSBNYXJjaGVuIE1hcmMgTWFzYXJhbV9Hb25kaSBHb25tIE1lZXRlaV9NYXllayBNdGVpIE1lbmRlX0tpa2FrdWkgTWVuZCBNZXJvaXRpY19DdXJzaXZlIE1lcmMgTWVyb2l0aWNfSGllcm9nbHlwaHMgTWVybyBNaWFvIFBscmQgTW9kaSBNb2RpIE1vbmdvbGlhbiBNb25nIE1ybyBNcm9vIE11bHRhbmkgTXVsdCBNeWFubWFyIE15bXIgTmFiYXRhZWFuIE5iYXQgTmV3X1RhaV9MdWUgVGFsdSBOZXdhIE5ld2EgTmtvIE5rb28gTnVzaHUgTnNodSBPZ2hhbSBPZ2FtIE9sX0NoaWtpIE9sY2sgT2xkX0h1bmdhcmlhbiBIdW5nIE9sZF9JdGFsaWMgSXRhbCBPbGRfTm9ydGhfQXJhYmlhbiBOYXJiIE9sZF9QZXJtaWMgUGVybSBPbGRfUGVyc2lhbiBYcGVvIE9sZF9Tb3V0aF9BcmFiaWFuIFNhcmIgT2xkX1R1cmtpYyBPcmtoIE9yaXlhIE9yeWEgT3NhZ2UgT3NnZSBPc21hbnlhIE9zbWEgUGFoYXdoX0htb25nIEhtbmcgUGFsbXlyZW5lIFBhbG0gUGF1X0Npbl9IYXUgUGF1YyBQaGFnc19QYSBQaGFnIFBob2VuaWNpYW4gUGhueCBQc2FsdGVyX1BhaGxhdmkgUGhscCBSZWphbmcgUmpuZyBSdW5pYyBSdW5yIFNhbWFyaXRhbiBTYW1yIFNhdXJhc2h0cmEgU2F1ciBTaGFyYWRhIFNocmQgU2hhdmlhbiBTaGF3IFNpZGRoYW0gU2lkZCBTaWduV3JpdGluZyBTZ253IFNpbmhhbGEgU2luaCBTb3JhX1NvbXBlbmcgU29yYSBTb3lvbWJvIFNveW8gU3VuZGFuZXNlIFN1bmQgU3lsb3RpX05hZ3JpIFN5bG8gU3lyaWFjIFN5cmMgVGFnYWxvZyBUZ2xnIFRhZ2JhbndhIFRhZ2IgVGFpX0xlIFRhbGUgVGFpX1RoYW0gTGFuYSBUYWlfVmlldCBUYXZ0IFRha3JpIFRha3IgVGFtaWwgVGFtbCBUYW5ndXQgVGFuZyBUZWx1Z3UgVGVsdSBUaGFhbmEgVGhhYSBUaGFpIFRoYWkgVGliZXRhbiBUaWJ0IFRpZmluYWdoIFRmbmcgVGlyaHV0YSBUaXJoIFVnYXJpdGljIFVnYXIgVmFpIFZhaWkgV2FyYW5nX0NpdGkgV2FyYSBZaSBZaWlpIFphbmFiYXphcl9TcXVhcmUgWmFuYlwiO1xudmFyIGVjbWExMFNjcmlwdFZhbHVlcyA9IGVjbWE5U2NyaXB0VmFsdWVzICsgXCIgRG9ncmEgRG9nciBHdW5qYWxhX0dvbmRpIEdvbmcgSGFuaWZpX1JvaGluZ3lhIFJvaGcgTWFrYXNhciBNYWthIE1lZGVmYWlkcmluIE1lZGYgT2xkX1NvZ2RpYW4gU29nbyBTb2dkaWFuIFNvZ2RcIjtcbnZhciBlY21hMTFTY3JpcHRWYWx1ZXMgPSBlY21hMTBTY3JpcHRWYWx1ZXMgKyBcIiBFbHltYWljIEVseW0gTmFuZGluYWdhcmkgTmFuZCBOeWlha2VuZ19QdWFjaHVlX0htb25nIEhtbnAgV2FuY2hvIFdjaG9cIjtcbnZhciB1bmljb2RlU2NyaXB0VmFsdWVzID0ge1xuICA5OiBlY21hOVNjcmlwdFZhbHVlcyxcbiAgMTA6IGVjbWExMFNjcmlwdFZhbHVlcyxcbiAgMTE6IGVjbWExMVNjcmlwdFZhbHVlc1xufTtcblxudmFyIGRhdGEgPSB7fTtcbmZ1bmN0aW9uIGJ1aWxkVW5pY29kZURhdGEoZWNtYVZlcnNpb24pIHtcbiAgdmFyIGQgPSBkYXRhW2VjbWFWZXJzaW9uXSA9IHtcbiAgICBiaW5hcnk6IHdvcmRzUmVnZXhwKHVuaWNvZGVCaW5hcnlQcm9wZXJ0aWVzW2VjbWFWZXJzaW9uXSArIFwiIFwiICsgdW5pY29kZUdlbmVyYWxDYXRlZ29yeVZhbHVlcyksXG4gICAgbm9uQmluYXJ5OiB7XG4gICAgICBHZW5lcmFsX0NhdGVnb3J5OiB3b3Jkc1JlZ2V4cCh1bmljb2RlR2VuZXJhbENhdGVnb3J5VmFsdWVzKSxcbiAgICAgIFNjcmlwdDogd29yZHNSZWdleHAodW5pY29kZVNjcmlwdFZhbHVlc1tlY21hVmVyc2lvbl0pXG4gICAgfVxuICB9O1xuICBkLm5vbkJpbmFyeS5TY3JpcHRfRXh0ZW5zaW9ucyA9IGQubm9uQmluYXJ5LlNjcmlwdDtcblxuICBkLm5vbkJpbmFyeS5nYyA9IGQubm9uQmluYXJ5LkdlbmVyYWxfQ2F0ZWdvcnk7XG4gIGQubm9uQmluYXJ5LnNjID0gZC5ub25CaW5hcnkuU2NyaXB0O1xuICBkLm5vbkJpbmFyeS5zY3ggPSBkLm5vbkJpbmFyeS5TY3JpcHRfRXh0ZW5zaW9ucztcbn1cbmJ1aWxkVW5pY29kZURhdGEoOSk7XG5idWlsZFVuaWNvZGVEYXRhKDEwKTtcbmJ1aWxkVW5pY29kZURhdGEoMTEpO1xuXG52YXIgcHAkOCA9IFBhcnNlci5wcm90b3R5cGU7XG5cbnZhciBSZWdFeHBWYWxpZGF0aW9uU3RhdGUgPSBmdW5jdGlvbiBSZWdFeHBWYWxpZGF0aW9uU3RhdGUocGFyc2VyKSB7XG4gIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICB0aGlzLnZhbGlkRmxhZ3MgPSBcImdpbVwiICsgKHBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uID49IDYgPyBcInV5XCIgOiBcIlwiKSArIChwYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ID8gXCJzXCIgOiBcIlwiKTtcbiAgdGhpcy51bmljb2RlUHJvcGVydGllcyA9IGRhdGFbcGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTEgPyAxMSA6IHBhcnNlci5vcHRpb25zLmVjbWFWZXJzaW9uXTtcbiAgdGhpcy5zb3VyY2UgPSBcIlwiO1xuICB0aGlzLmZsYWdzID0gXCJcIjtcbiAgdGhpcy5zdGFydCA9IDA7XG4gIHRoaXMuc3dpdGNoVSA9IGZhbHNlO1xuICB0aGlzLnN3aXRjaE4gPSBmYWxzZTtcbiAgdGhpcy5wb3MgPSAwO1xuICB0aGlzLmxhc3RJbnRWYWx1ZSA9IDA7XG4gIHRoaXMubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgdGhpcy5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgPSBmYWxzZTtcbiAgdGhpcy5udW1DYXB0dXJpbmdQYXJlbnMgPSAwO1xuICB0aGlzLm1heEJhY2tSZWZlcmVuY2UgPSAwO1xuICB0aGlzLmdyb3VwTmFtZXMgPSBbXTtcbiAgdGhpcy5iYWNrUmVmZXJlbmNlTmFtZXMgPSBbXTtcbn07XG5cblJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiByZXNldCAoc3RhcnQsIHBhdHRlcm4sIGZsYWdzKSB7XG4gIHZhciB1bmljb2RlID0gZmxhZ3MuaW5kZXhPZihcInVcIikgIT09IC0xO1xuICB0aGlzLnN0YXJ0ID0gc3RhcnQgfCAwO1xuICB0aGlzLnNvdXJjZSA9IHBhdHRlcm4gKyBcIlwiO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gIHRoaXMuc3dpdGNoVSA9IHVuaWNvZGUgJiYgdGhpcy5wYXJzZXIub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2O1xuICB0aGlzLnN3aXRjaE4gPSB1bmljb2RlICYmIHRoaXMucGFyc2VyLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOTtcbn07XG5cblJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUucmFpc2UgPSBmdW5jdGlvbiByYWlzZSAobWVzc2FnZSkge1xuICB0aGlzLnBhcnNlci5yYWlzZVJlY292ZXJhYmxlKHRoaXMuc3RhcnQsIChcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAvXCIgKyAodGhpcy5zb3VyY2UpICsgXCIvOiBcIiArIG1lc3NhZ2UpKTtcbn07XG5cbi8vIElmIHUgZmxhZyBpcyBnaXZlbiwgdGhpcyByZXR1cm5zIHRoZSBjb2RlIHBvaW50IGF0IHRoZSBpbmRleCAoaXQgY29tYmluZXMgYSBzdXJyb2dhdGUgcGFpcikuXG4vLyBPdGhlcndpc2UsIHRoaXMgcmV0dXJucyB0aGUgY29kZSB1bml0IG9mIHRoZSBpbmRleCAoY2FuIGJlIGEgcGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyKS5cblJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBhdCAoaSwgZm9yY2VVKSB7XG4gICAgaWYgKCBmb3JjZVUgPT09IHZvaWQgMCApIGZvcmNlVSA9IGZhbHNlO1xuXG4gIHZhciBzID0gdGhpcy5zb3VyY2U7XG4gIHZhciBsID0gcy5sZW5ndGg7XG4gIGlmIChpID49IGwpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICB2YXIgYyA9IHMuY2hhckNvZGVBdChpKTtcbiAgaWYgKCEoZm9yY2VVIHx8IHRoaXMuc3dpdGNoVSkgfHwgYyA8PSAweEQ3RkYgfHwgYyA+PSAweEUwMDAgfHwgaSArIDEgPj0gbCkge1xuICAgIHJldHVybiBjXG4gIH1cbiAgdmFyIG5leHQgPSBzLmNoYXJDb2RlQXQoaSArIDEpO1xuICByZXR1cm4gbmV4dCA+PSAweERDMDAgJiYgbmV4dCA8PSAweERGRkYgPyAoYyA8PCAxMCkgKyBuZXh0IC0gMHgzNUZEQzAwIDogY1xufTtcblxuUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5uZXh0SW5kZXggPSBmdW5jdGlvbiBuZXh0SW5kZXggKGksIGZvcmNlVSkge1xuICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICB2YXIgcyA9IHRoaXMuc291cmNlO1xuICB2YXIgbCA9IHMubGVuZ3RoO1xuICBpZiAoaSA+PSBsKSB7XG4gICAgcmV0dXJuIGxcbiAgfVxuICB2YXIgYyA9IHMuY2hhckNvZGVBdChpKSwgbmV4dDtcbiAgaWYgKCEoZm9yY2VVIHx8IHRoaXMuc3dpdGNoVSkgfHwgYyA8PSAweEQ3RkYgfHwgYyA+PSAweEUwMDAgfHwgaSArIDEgPj0gbCB8fFxuICAgICAgKG5leHQgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4REMwMCB8fCBuZXh0ID4gMHhERkZGKSB7XG4gICAgcmV0dXJuIGkgKyAxXG4gIH1cbiAgcmV0dXJuIGkgKyAyXG59O1xuXG5SZWdFeHBWYWxpZGF0aW9uU3RhdGUucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiBjdXJyZW50IChmb3JjZVUpIHtcbiAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgcmV0dXJuIHRoaXMuYXQodGhpcy5wb3MsIGZvcmNlVSlcbn07XG5cblJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUubG9va2FoZWFkID0gZnVuY3Rpb24gbG9va2FoZWFkIChmb3JjZVUpIHtcbiAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgcmV0dXJuIHRoaXMuYXQodGhpcy5uZXh0SW5kZXgodGhpcy5wb3MsIGZvcmNlVSksIGZvcmNlVSlcbn07XG5cblJlZ0V4cFZhbGlkYXRpb25TdGF0ZS5wcm90b3R5cGUuYWR2YW5jZSA9IGZ1bmN0aW9uIGFkdmFuY2UgKGZvcmNlVSkge1xuICAgIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICB0aGlzLnBvcyA9IHRoaXMubmV4dEluZGV4KHRoaXMucG9zLCBmb3JjZVUpO1xufTtcblxuUmVnRXhwVmFsaWRhdGlvblN0YXRlLnByb3RvdHlwZS5lYXQgPSBmdW5jdGlvbiBlYXQgKGNoLCBmb3JjZVUpIHtcbiAgICBpZiAoIGZvcmNlVSA9PT0gdm9pZCAwICkgZm9yY2VVID0gZmFsc2U7XG5cbiAgaWYgKHRoaXMuY3VycmVudChmb3JjZVUpID09PSBjaCkge1xuICAgIHRoaXMuYWR2YW5jZShmb3JjZVUpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG5mdW5jdGlvbiBjb2RlUG9pbnRUb1N0cmluZyhjaCkge1xuICBpZiAoY2ggPD0gMHhGRkZGKSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSB9XG4gIGNoIC09IDB4MTAwMDA7XG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKChjaCA+PiAxMCkgKyAweEQ4MDAsIChjaCAmIDB4MDNGRikgKyAweERDMDApXG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIGZsYWdzIHBhcnQgb2YgYSBnaXZlbiBSZWdFeHBMaXRlcmFsLlxuICpcbiAqIEBwYXJhbSB7UmVnRXhwVmFsaWRhdGlvblN0YXRlfSBzdGF0ZSBUaGUgc3RhdGUgdG8gdmFsaWRhdGUgUmVnRXhwLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbnBwJDgudmFsaWRhdGVSZWdFeHBGbGFncyA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciB2YWxpZEZsYWdzID0gc3RhdGUudmFsaWRGbGFncztcbiAgdmFyIGZsYWdzID0gc3RhdGUuZmxhZ3M7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbGFncy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBmbGFnID0gZmxhZ3MuY2hhckF0KGkpO1xuICAgIGlmICh2YWxpZEZsYWdzLmluZGV4T2YoZmxhZykgPT09IC0xKSB7XG4gICAgICB0aGlzLnJhaXNlKHN0YXRlLnN0YXJ0LCBcIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIGZsYWdcIik7XG4gICAgfVxuICAgIGlmIChmbGFncy5pbmRleE9mKGZsYWcsIGkgKyAxKSA+IC0xKSB7XG4gICAgICB0aGlzLnJhaXNlKHN0YXRlLnN0YXJ0LCBcIkR1cGxpY2F0ZSByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ1wiKTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIHBhdHRlcm4gcGFydCBvZiBhIGdpdmVuIFJlZ0V4cExpdGVyYWwuXG4gKlxuICogQHBhcmFtIHtSZWdFeHBWYWxpZGF0aW9uU3RhdGV9IHN0YXRlIFRoZSBzdGF0ZSB0byB2YWxpZGF0ZSBSZWdFeHAuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xucHAkOC52YWxpZGF0ZVJlZ0V4cFBhdHRlcm4gPSBmdW5jdGlvbihzdGF0ZSkge1xuICB0aGlzLnJlZ2V4cF9wYXR0ZXJuKHN0YXRlKTtcblxuICAvLyBUaGUgZ29hbCBzeW1ib2wgZm9yIHRoZSBwYXJzZSBpcyB8UGF0dGVyblt+VSwgfk5dfC4gSWYgdGhlIHJlc3VsdCBvZlxuICAvLyBwYXJzaW5nIGNvbnRhaW5zIGEgfEdyb3VwTmFtZXwsIHJlcGFyc2Ugd2l0aCB0aGUgZ29hbCBzeW1ib2xcbiAgLy8gfFBhdHRlcm5bflUsICtOXXwgYW5kIHVzZSB0aGlzIHJlc3VsdCBpbnN0ZWFkLiBUaHJvdyBhICpTeW50YXhFcnJvcipcbiAgLy8gZXhjZXB0aW9uIGlmIF9QXyBkaWQgbm90IGNvbmZvcm0gdG8gdGhlIGdyYW1tYXIsIGlmIGFueSBlbGVtZW50cyBvZiBfUF9cbiAgLy8gd2VyZSBub3QgbWF0Y2hlZCBieSB0aGUgcGFyc2UsIG9yIGlmIGFueSBFYXJseSBFcnJvciBjb25kaXRpb25zIGV4aXN0LlxuICBpZiAoIXN0YXRlLnN3aXRjaE4gJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkgJiYgc3RhdGUuZ3JvdXBOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgc3RhdGUuc3dpdGNoTiA9IHRydWU7XG4gICAgdGhpcy5yZWdleHBfcGF0dGVybihzdGF0ZSk7XG4gIH1cbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLVBhdHRlcm5cbnBwJDgucmVnZXhwX3BhdHRlcm4gPSBmdW5jdGlvbihzdGF0ZSkge1xuICBzdGF0ZS5wb3MgPSAwO1xuICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICBzdGF0ZS5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgPSBmYWxzZTtcbiAgc3RhdGUubnVtQ2FwdHVyaW5nUGFyZW5zID0gMDtcbiAgc3RhdGUubWF4QmFja1JlZmVyZW5jZSA9IDA7XG4gIHN0YXRlLmdyb3VwTmFtZXMubGVuZ3RoID0gMDtcbiAgc3RhdGUuYmFja1JlZmVyZW5jZU5hbWVzLmxlbmd0aCA9IDA7XG5cbiAgdGhpcy5yZWdleHBfZGlzanVuY3Rpb24oc3RhdGUpO1xuXG4gIGlmIChzdGF0ZS5wb3MgIT09IHN0YXRlLnNvdXJjZS5sZW5ndGgpIHtcbiAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2VzIGFzIFY4LlxuICAgIGlmIChzdGF0ZS5lYXQoMHgyOSAvKiApICovKSkge1xuICAgICAgc3RhdGUucmFpc2UoXCJVbm1hdGNoZWQgJyknXCIpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZWF0KDB4NUQgLyogXSAqLykgfHwgc3RhdGUuZWF0KDB4N0QgLyogfSAqLykpIHtcbiAgICAgIHN0YXRlLnJhaXNlKFwiTG9uZSBxdWFudGlmaWVyIGJyYWNrZXRzXCIpO1xuICAgIH1cbiAgfVxuICBpZiAoc3RhdGUubWF4QmFja1JlZmVyZW5jZSA+IHN0YXRlLm51bUNhcHR1cmluZ1BhcmVucykge1xuICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBlc2NhcGVcIik7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBzdGF0ZS5iYWNrUmVmZXJlbmNlTmFtZXM7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIG5hbWUgPSBsaXN0W2ldO1xuXG4gICAgaWYgKHN0YXRlLmdyb3VwTmFtZXMuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBuYW1lZCBjYXB0dXJlIHJlZmVyZW5jZWRcIik7XG4gICAgfVxuICB9XG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1EaXNqdW5jdGlvblxucHAkOC5yZWdleHBfZGlzanVuY3Rpb24gPSBmdW5jdGlvbihzdGF0ZSkge1xuICB0aGlzLnJlZ2V4cF9hbHRlcm5hdGl2ZShzdGF0ZSk7XG4gIHdoaWxlIChzdGF0ZS5lYXQoMHg3QyAvKiB8ICovKSkge1xuICAgIHRoaXMucmVnZXhwX2FsdGVybmF0aXZlKHN0YXRlKTtcbiAgfVxuXG4gIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZSBhcyBWOC5cbiAgaWYgKHRoaXMucmVnZXhwX2VhdFF1YW50aWZpZXIoc3RhdGUsIHRydWUpKSB7XG4gICAgc3RhdGUucmFpc2UoXCJOb3RoaW5nIHRvIHJlcGVhdFwiKTtcbiAgfVxuICBpZiAoc3RhdGUuZWF0KDB4N0IgLyogeyAqLykpIHtcbiAgICBzdGF0ZS5yYWlzZShcIkxvbmUgcXVhbnRpZmllciBicmFja2V0c1wiKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQWx0ZXJuYXRpdmVcbnBwJDgucmVnZXhwX2FsdGVybmF0aXZlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgd2hpbGUgKHN0YXRlLnBvcyA8IHN0YXRlLnNvdXJjZS5sZW5ndGggJiYgdGhpcy5yZWdleHBfZWF0VGVybShzdGF0ZSkpXG4gICAgeyB9XG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItVGVybVxucHAkOC5yZWdleHBfZWF0VGVybSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIGlmICh0aGlzLnJlZ2V4cF9lYXRBc3NlcnRpb24oc3RhdGUpKSB7XG4gICAgLy8gSGFuZGxlIGBRdWFudGlmaWFibGVBc3NlcnRpb24gUXVhbnRpZmllcmAgYWx0ZXJuYXRpdmUuXG4gICAgLy8gYHN0YXRlLmxhc3RBc3NlcnRpb25Jc1F1YW50aWZpYWJsZWAgaXMgdHJ1ZSBpZiB0aGUgbGFzdCBlYXRlbiBBc3NlcnRpb25cbiAgICAvLyBpcyBhIFF1YW50aWZpYWJsZUFzc2VydGlvbi5cbiAgICBpZiAoc3RhdGUubGFzdEFzc2VydGlvbklzUXVhbnRpZmlhYmxlICYmIHRoaXMucmVnZXhwX2VhdFF1YW50aWZpZXIoc3RhdGUpKSB7XG4gICAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2UgYXMgVjguXG4gICAgICBpZiAoc3RhdGUuc3dpdGNoVSkge1xuICAgICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgcXVhbnRpZmllclwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdGF0ZS5zd2l0Y2hVID8gdGhpcy5yZWdleHBfZWF0QXRvbShzdGF0ZSkgOiB0aGlzLnJlZ2V4cF9lYXRFeHRlbmRlZEF0b20oc3RhdGUpKSB7XG4gICAgdGhpcy5yZWdleHBfZWF0UXVhbnRpZmllcihzdGF0ZSk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUFzc2VydGlvblxucHAkOC5yZWdleHBfZWF0QXNzZXJ0aW9uID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICBzdGF0ZS5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgPSBmYWxzZTtcblxuICAvLyBeLCAkXG4gIGlmIChzdGF0ZS5lYXQoMHg1RSAvKiBeICovKSB8fCBzdGF0ZS5lYXQoMHgyNCAvKiAkICovKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBcXGIgXFxCXG4gIGlmIChzdGF0ZS5lYXQoMHg1QyAvKiBcXCAqLykpIHtcbiAgICBpZiAoc3RhdGUuZWF0KDB4NDIgLyogQiAqLykgfHwgc3RhdGUuZWF0KDB4NjIgLyogYiAqLykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG5cbiAgLy8gTG9va2FoZWFkIC8gTG9va2JlaGluZFxuICBpZiAoc3RhdGUuZWF0KDB4MjggLyogKCAqLykgJiYgc3RhdGUuZWF0KDB4M0YgLyogPyAqLykpIHtcbiAgICB2YXIgbG9va2JlaGluZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gOSkge1xuICAgICAgbG9va2JlaGluZCA9IHN0YXRlLmVhdCgweDNDIC8qIDwgKi8pO1xuICAgIH1cbiAgICBpZiAoc3RhdGUuZWF0KDB4M0QgLyogPSAqLykgfHwgc3RhdGUuZWF0KDB4MjEgLyogISAqLykpIHtcbiAgICAgIHRoaXMucmVnZXhwX2Rpc2p1bmN0aW9uKHN0YXRlKTtcbiAgICAgIGlmICghc3RhdGUuZWF0KDB4MjkgLyogKSAqLykpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJVbnRlcm1pbmF0ZWQgZ3JvdXBcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5sYXN0QXNzZXJ0aW9uSXNRdWFudGlmaWFibGUgPSAhbG9va2JlaGluZDtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgc3RhdGUucG9zID0gc3RhcnQ7XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtUXVhbnRpZmllclxucHAkOC5yZWdleHBfZWF0UXVhbnRpZmllciA9IGZ1bmN0aW9uKHN0YXRlLCBub0Vycm9yKSB7XG4gIGlmICggbm9FcnJvciA9PT0gdm9pZCAwICkgbm9FcnJvciA9IGZhbHNlO1xuXG4gIGlmICh0aGlzLnJlZ2V4cF9lYXRRdWFudGlmaWVyUHJlZml4KHN0YXRlLCBub0Vycm9yKSkge1xuICAgIHN0YXRlLmVhdCgweDNGIC8qID8gKi8pO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1RdWFudGlmaWVyUHJlZml4XG5wcCQ4LnJlZ2V4cF9lYXRRdWFudGlmaWVyUHJlZml4ID0gZnVuY3Rpb24oc3RhdGUsIG5vRXJyb3IpIHtcbiAgcmV0dXJuIChcbiAgICBzdGF0ZS5lYXQoMHgyQSAvKiAqICovKSB8fFxuICAgIHN0YXRlLmVhdCgweDJCIC8qICsgKi8pIHx8XG4gICAgc3RhdGUuZWF0KDB4M0YgLyogPyAqLykgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRCcmFjZWRRdWFudGlmaWVyKHN0YXRlLCBub0Vycm9yKVxuICApXG59O1xucHAkOC5yZWdleHBfZWF0QnJhY2VkUXVhbnRpZmllciA9IGZ1bmN0aW9uKHN0YXRlLCBub0Vycm9yKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgaWYgKHN0YXRlLmVhdCgweDdCIC8qIHsgKi8pKSB7XG4gICAgdmFyIG1pbiA9IDAsIG1heCA9IC0xO1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXREZWNpbWFsRGlnaXRzKHN0YXRlKSkge1xuICAgICAgbWluID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgaWYgKHN0YXRlLmVhdCgweDJDIC8qICwgKi8pICYmIHRoaXMucmVnZXhwX2VhdERlY2ltYWxEaWdpdHMoc3RhdGUpKSB7XG4gICAgICAgIG1heCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5lYXQoMHg3RCAvKiB9ICovKSkge1xuICAgICAgICAvLyBTeW50YXhFcnJvciBpbiBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jc2VjLXRlcm1cbiAgICAgICAgaWYgKG1heCAhPT0gLTEgJiYgbWF4IDwgbWluICYmICFub0Vycm9yKSB7XG4gICAgICAgICAgc3RhdGUucmFpc2UoXCJudW1iZXJzIG91dCBvZiBvcmRlciBpbiB7fSBxdWFudGlmaWVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGF0ZS5zd2l0Y2hVICYmICFub0Vycm9yKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIkluY29tcGxldGUgcXVhbnRpZmllclwiKTtcbiAgICB9XG4gICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1BdG9tXG5wcCQ4LnJlZ2V4cF9lYXRBdG9tID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgcmV0dXJuIChcbiAgICB0aGlzLnJlZ2V4cF9lYXRQYXR0ZXJuQ2hhcmFjdGVycyhzdGF0ZSkgfHxcbiAgICBzdGF0ZS5lYXQoMHgyRSAvKiAuICovKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdFJldmVyc2VTb2xpZHVzQXRvbUVzY2FwZShzdGF0ZSkgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzcyhzdGF0ZSkgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRVbmNhcHR1cmluZ0dyb3VwKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENhcHR1cmluZ0dyb3VwKHN0YXRlKVxuICApXG59O1xucHAkOC5yZWdleHBfZWF0UmV2ZXJzZVNvbGlkdXNBdG9tRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICBpZiAoc3RhdGUuZWF0KDB4NUMgLyogXFwgKi8pKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdEF0b21Fc2NhcGUoc3RhdGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5wcCQ4LnJlZ2V4cF9lYXRVbmNhcHR1cmluZ0dyb3VwID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICBpZiAoc3RhdGUuZWF0KDB4MjggLyogKCAqLykpIHtcbiAgICBpZiAoc3RhdGUuZWF0KDB4M0YgLyogPyAqLykgJiYgc3RhdGUuZWF0KDB4M0EgLyogOiAqLykpIHtcbiAgICAgIHRoaXMucmVnZXhwX2Rpc2p1bmN0aW9uKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5lYXQoMHgyOSAvKiApICovKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgc3RhdGUucmFpc2UoXCJVbnRlcm1pbmF0ZWQgZ3JvdXBcIik7XG4gICAgfVxuICAgIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcbnBwJDgucmVnZXhwX2VhdENhcHR1cmluZ0dyb3VwID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVhdCgweDI4IC8qICggKi8pKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5KSB7XG4gICAgICB0aGlzLnJlZ2V4cF9ncm91cFNwZWNpZmllcihzdGF0ZSk7XG4gICAgfSBlbHNlIGlmIChzdGF0ZS5jdXJyZW50KCkgPT09IDB4M0YgLyogPyAqLykge1xuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGdyb3VwXCIpO1xuICAgIH1cbiAgICB0aGlzLnJlZ2V4cF9kaXNqdW5jdGlvbihzdGF0ZSk7XG4gICAgaWYgKHN0YXRlLmVhdCgweDI5IC8qICkgKi8pKSB7XG4gICAgICBzdGF0ZS5udW1DYXB0dXJpbmdQYXJlbnMgKz0gMTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLnJhaXNlKFwiVW50ZXJtaW5hdGVkIGdyb3VwXCIpO1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUV4dGVuZGVkQXRvbVxucHAkOC5yZWdleHBfZWF0RXh0ZW5kZWRBdG9tID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgcmV0dXJuIChcbiAgICBzdGF0ZS5lYXQoMHgyRSAvKiAuICovKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdFJldmVyc2VTb2xpZHVzQXRvbUVzY2FwZShzdGF0ZSkgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRDaGFyYWN0ZXJDbGFzcyhzdGF0ZSkgfHxcbiAgICB0aGlzLnJlZ2V4cF9lYXRVbmNhcHR1cmluZ0dyb3VwKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENhcHR1cmluZ0dyb3VwKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdEludmFsaWRCcmFjZWRRdWFudGlmaWVyKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdEV4dGVuZGVkUGF0dGVybkNoYXJhY3RlcihzdGF0ZSlcbiAgKVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUludmFsaWRCcmFjZWRRdWFudGlmaWVyXG5wcCQ4LnJlZ2V4cF9lYXRJbnZhbGlkQnJhY2VkUXVhbnRpZmllciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIGlmICh0aGlzLnJlZ2V4cF9lYXRCcmFjZWRRdWFudGlmaWVyKHN0YXRlLCB0cnVlKSkge1xuICAgIHN0YXRlLnJhaXNlKFwiTm90aGluZyB0byByZXBlYXRcIik7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1TeW50YXhDaGFyYWN0ZXJcbnBwJDgucmVnZXhwX2VhdFN5bnRheENoYXJhY3RlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgaWYgKGlzU3ludGF4Q2hhcmFjdGVyKGNoKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IGNoO1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcbmZ1bmN0aW9uIGlzU3ludGF4Q2hhcmFjdGVyKGNoKSB7XG4gIHJldHVybiAoXG4gICAgY2ggPT09IDB4MjQgLyogJCAqLyB8fFxuICAgIGNoID49IDB4MjggLyogKCAqLyAmJiBjaCA8PSAweDJCIC8qICsgKi8gfHxcbiAgICBjaCA9PT0gMHgyRSAvKiAuICovIHx8XG4gICAgY2ggPT09IDB4M0YgLyogPyAqLyB8fFxuICAgIGNoID49IDB4NUIgLyogWyAqLyAmJiBjaCA8PSAweDVFIC8qIF4gKi8gfHxcbiAgICBjaCA+PSAweDdCIC8qIHsgKi8gJiYgY2ggPD0gMHg3RCAvKiB9ICovXG4gIClcbn1cblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtUGF0dGVybkNoYXJhY3RlclxuLy8gQnV0IGVhdCBlYWdlci5cbnBwJDgucmVnZXhwX2VhdFBhdHRlcm5DaGFyYWN0ZXJzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICB2YXIgY2ggPSAwO1xuICB3aGlsZSAoKGNoID0gc3RhdGUuY3VycmVudCgpKSAhPT0gLTEgJiYgIWlzU3ludGF4Q2hhcmFjdGVyKGNoKSkge1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgfVxuICByZXR1cm4gc3RhdGUucG9zICE9PSBzdGFydFxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUV4dGVuZGVkUGF0dGVybkNoYXJhY3RlclxucHAkOC5yZWdleHBfZWF0RXh0ZW5kZWRQYXR0ZXJuQ2hhcmFjdGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoXG4gICAgY2ggIT09IC0xICYmXG4gICAgY2ggIT09IDB4MjQgLyogJCAqLyAmJlxuICAgICEoY2ggPj0gMHgyOCAvKiAoICovICYmIGNoIDw9IDB4MkIgLyogKyAqLykgJiZcbiAgICBjaCAhPT0gMHgyRSAvKiAuICovICYmXG4gICAgY2ggIT09IDB4M0YgLyogPyAqLyAmJlxuICAgIGNoICE9PSAweDVCIC8qIFsgKi8gJiZcbiAgICBjaCAhPT0gMHg1RSAvKiBeICovICYmXG4gICAgY2ggIT09IDB4N0MgLyogfCAqL1xuICApIHtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIEdyb3VwU3BlY2lmaWVyIDo6XG4vLyAgIFtlbXB0eV1cbi8vICAgYD9gIEdyb3VwTmFtZVxucHAkOC5yZWdleHBfZ3JvdXBTcGVjaWZpZXIgPSBmdW5jdGlvbihzdGF0ZSkge1xuICBpZiAoc3RhdGUuZWF0KDB4M0YgLyogPyAqLykpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0R3JvdXBOYW1lKHN0YXRlKSkge1xuICAgICAgaWYgKHN0YXRlLmdyb3VwTmFtZXMuaW5kZXhPZihzdGF0ZS5sYXN0U3RyaW5nVmFsdWUpICE9PSAtMSkge1xuICAgICAgICBzdGF0ZS5yYWlzZShcIkR1cGxpY2F0ZSBjYXB0dXJlIGdyb3VwIG5hbWVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5ncm91cE5hbWVzLnB1c2goc3RhdGUubGFzdFN0cmluZ1ZhbHVlKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZ3JvdXBcIik7XG4gIH1cbn07XG5cbi8vIEdyb3VwTmFtZSA6OlxuLy8gICBgPGAgUmVnRXhwSWRlbnRpZmllck5hbWUgYD5gXG4vLyBOb3RlOiB0aGlzIHVwZGF0ZXMgYHN0YXRlLmxhc3RTdHJpbmdWYWx1ZWAgcHJvcGVydHkgd2l0aCB0aGUgZWF0ZW4gbmFtZS5cbnBwJDgucmVnZXhwX2VhdEdyb3VwTmFtZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSA9IFwiXCI7XG4gIGlmIChzdGF0ZS5lYXQoMHgzQyAvKiA8ICovKSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyTmFtZShzdGF0ZSkgJiYgc3RhdGUuZWF0KDB4M0UgLyogPiAqLykpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBjYXB0dXJlIGdyb3VwIG5hbWVcIik7XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBSZWdFeHBJZGVudGlmaWVyTmFtZSA6OlxuLy8gICBSZWdFeHBJZGVudGlmaWVyU3RhcnRcbi8vICAgUmVnRXhwSWRlbnRpZmllck5hbWUgUmVnRXhwSWRlbnRpZmllclBhcnRcbi8vIE5vdGU6IHRoaXMgdXBkYXRlcyBgc3RhdGUubGFzdFN0cmluZ1ZhbHVlYCBwcm9wZXJ0eSB3aXRoIHRoZSBlYXRlbiBuYW1lLlxucHAkOC5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllck5hbWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgPSBcIlwiO1xuICBpZiAodGhpcy5yZWdleHBfZWF0UmVnRXhwSWRlbnRpZmllclN0YXJ0KHN0YXRlKSkge1xuICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSArPSBjb2RlUG9pbnRUb1N0cmluZyhzdGF0ZS5sYXN0SW50VmFsdWUpO1xuICAgIHdoaWxlICh0aGlzLnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyUGFydChzdGF0ZSkpIHtcbiAgICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSArPSBjb2RlUG9pbnRUb1N0cmluZyhzdGF0ZS5sYXN0SW50VmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gUmVnRXhwSWRlbnRpZmllclN0YXJ0IDo6XG4vLyAgIFVuaWNvZGVJRFN0YXJ0XG4vLyAgIGAkYFxuLy8gICBgX2Bcbi8vICAgYFxcYCBSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2VbK1VdXG5wcCQ4LnJlZ2V4cF9lYXRSZWdFeHBJZGVudGlmaWVyU3RhcnQgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHZhciBmb3JjZVUgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTE7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoZm9yY2VVKTtcbiAgc3RhdGUuYWR2YW5jZShmb3JjZVUpO1xuXG4gIGlmIChjaCA9PT0gMHg1QyAvKiBcXCAqLyAmJiB0aGlzLnJlZ2V4cF9lYXRSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2Uoc3RhdGUsIGZvcmNlVSkpIHtcbiAgICBjaCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgfVxuICBpZiAoaXNSZWdFeHBJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICByZXR1cm4gZmFsc2Vcbn07XG5mdW5jdGlvbiBpc1JlZ0V4cElkZW50aWZpZXJTdGFydChjaCkge1xuICByZXR1cm4gaXNJZGVudGlmaWVyU3RhcnQoY2gsIHRydWUpIHx8IGNoID09PSAweDI0IC8qICQgKi8gfHwgY2ggPT09IDB4NUYgLyogXyAqL1xufVxuXG4vLyBSZWdFeHBJZGVudGlmaWVyUGFydCA6OlxuLy8gICBVbmljb2RlSURDb250aW51ZVxuLy8gICBgJGBcbi8vICAgYF9gXG4vLyAgIGBcXGAgUmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlWytVXVxuLy8gICA8WldOSj5cbi8vICAgPFpXSj5cbnBwJDgucmVnZXhwX2VhdFJlZ0V4cElkZW50aWZpZXJQYXJ0ID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICB2YXIgZm9yY2VVID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExO1xuICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KGZvcmNlVSk7XG4gIHN0YXRlLmFkdmFuY2UoZm9yY2VVKTtcblxuICBpZiAoY2ggPT09IDB4NUMgLyogXFwgKi8gJiYgdGhpcy5yZWdleHBfZWF0UmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlKHN0YXRlLCBmb3JjZVUpKSB7XG4gICAgY2ggPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gIH1cbiAgaWYgKGlzUmVnRXhwSWRlbnRpZmllclBhcnQoY2gpKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gY2g7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHN0YXRlLnBvcyA9IHN0YXJ0O1xuICByZXR1cm4gZmFsc2Vcbn07XG5mdW5jdGlvbiBpc1JlZ0V4cElkZW50aWZpZXJQYXJ0KGNoKSB7XG4gIHJldHVybiBpc0lkZW50aWZpZXJDaGFyKGNoLCB0cnVlKSB8fCBjaCA9PT0gMHgyNCAvKiAkICovIHx8IGNoID09PSAweDVGIC8qIF8gKi8gfHwgY2ggPT09IDB4MjAwQyAvKiA8WldOSj4gKi8gfHwgY2ggPT09IDB4MjAwRCAvKiA8WldKPiAqL1xufVxuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1hbm5leEItQXRvbUVzY2FwZVxucHAkOC5yZWdleHBfZWF0QXRvbUVzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIGlmIChcbiAgICB0aGlzLnJlZ2V4cF9lYXRCYWNrUmVmZXJlbmNlKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckNsYXNzRXNjYXBlKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckVzY2FwZShzdGF0ZSkgfHxcbiAgICAoc3RhdGUuc3dpdGNoTiAmJiB0aGlzLnJlZ2V4cF9lYXRLR3JvdXBOYW1lKHN0YXRlKSlcbiAgKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoc3RhdGUuc3dpdGNoVSkge1xuICAgIC8vIE1ha2UgdGhlIHNhbWUgbWVzc2FnZSBhcyBWOC5cbiAgICBpZiAoc3RhdGUuY3VycmVudCgpID09PSAweDYzIC8qIGMgKi8pIHtcbiAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCB1bmljb2RlIGVzY2FwZVwiKTtcbiAgICB9XG4gICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGVzY2FwZVwiKTtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5wcCQ4LnJlZ2V4cF9lYXRCYWNrUmVmZXJlbmNlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuICBpZiAodGhpcy5yZWdleHBfZWF0RGVjaW1hbEVzY2FwZShzdGF0ZSkpIHtcbiAgICB2YXIgbiA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICBpZiAoc3RhdGUuc3dpdGNoVSkge1xuICAgICAgLy8gRm9yIFN5bnRheEVycm9yIGluIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNzZWMtYXRvbWVzY2FwZVxuICAgICAgaWYgKG4gPiBzdGF0ZS5tYXhCYWNrUmVmZXJlbmNlKSB7XG4gICAgICAgIHN0YXRlLm1heEJhY2tSZWZlcmVuY2UgPSBuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKG4gPD0gc3RhdGUubnVtQ2FwdHVyaW5nUGFyZW5zKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5wcCQ4LnJlZ2V4cF9lYXRLR3JvdXBOYW1lID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmVhdCgweDZCIC8qIGsgKi8pKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdEdyb3VwTmFtZShzdGF0ZSkpIHtcbiAgICAgIHN0YXRlLmJhY2tSZWZlcmVuY2VOYW1lcy5wdXNoKHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgbmFtZWQgcmVmZXJlbmNlXCIpO1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUNoYXJhY3RlckVzY2FwZVxucHAkOC5yZWdleHBfZWF0Q2hhcmFjdGVyRXNjYXBlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgcmV0dXJuIChcbiAgICB0aGlzLnJlZ2V4cF9lYXRDb250cm9sRXNjYXBlKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENDb250cm9sTGV0dGVyKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdFplcm8oc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0SGV4RXNjYXBlU2VxdWVuY2Uoc3RhdGUpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0UmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlKHN0YXRlLCBmYWxzZSkgfHxcbiAgICAoIXN0YXRlLnN3aXRjaFUgJiYgdGhpcy5yZWdleHBfZWF0TGVnYWN5T2N0YWxFc2NhcGVTZXF1ZW5jZShzdGF0ZSkpIHx8XG4gICAgdGhpcy5yZWdleHBfZWF0SWRlbnRpdHlFc2NhcGUoc3RhdGUpXG4gIClcbn07XG5wcCQ4LnJlZ2V4cF9lYXRDQ29udHJvbExldHRlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgaWYgKHN0YXRlLmVhdCgweDYzIC8qIGMgKi8pKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdENvbnRyb2xMZXR0ZXIoc3RhdGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5wcCQ4LnJlZ2V4cF9lYXRaZXJvID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmN1cnJlbnQoKSA9PT0gMHgzMCAvKiAwICovICYmICFpc0RlY2ltYWxEaWdpdChzdGF0ZS5sb29rYWhlYWQoKSkpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ29udHJvbEVzY2FwZVxucHAkOC5yZWdleHBfZWF0Q29udHJvbEVzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgaWYgKGNoID09PSAweDc0IC8qIHQgKi8pIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDA5OyAvKiBcXHQgKi9cbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoY2ggPT09IDB4NkUgLyogbiAqLykge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MEE7IC8qIFxcbiAqL1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmIChjaCA9PT0gMHg3NiAvKiB2ICovKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgwQjsgLyogXFx2ICovXG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGNoID09PSAweDY2IC8qIGYgKi8pIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDBDOyAvKiBcXGYgKi9cbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoY2ggPT09IDB4NzIgLyogciAqLykge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MEQ7IC8qIFxcciAqL1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ29udHJvbExldHRlclxucHAkOC5yZWdleHBfZWF0Q29udHJvbExldHRlciA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgaWYgKGlzQ29udHJvbExldHRlcihjaCkpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaCAlIDB4MjA7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuZnVuY3Rpb24gaXNDb250cm9sTGV0dGVyKGNoKSB7XG4gIHJldHVybiAoXG4gICAgKGNoID49IDB4NDEgLyogQSAqLyAmJiBjaCA8PSAweDVBIC8qIFogKi8pIHx8XG4gICAgKGNoID49IDB4NjEgLyogYSAqLyAmJiBjaCA8PSAweDdBIC8qIHogKi8pXG4gIClcbn1cblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtUmVnRXhwVW5pY29kZUVzY2FwZVNlcXVlbmNlXG5wcCQ4LnJlZ2V4cF9lYXRSZWdFeHBVbmljb2RlRXNjYXBlU2VxdWVuY2UgPSBmdW5jdGlvbihzdGF0ZSwgZm9yY2VVKSB7XG4gIGlmICggZm9yY2VVID09PSB2b2lkIDAgKSBmb3JjZVUgPSBmYWxzZTtcblxuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHZhciBzd2l0Y2hVID0gZm9yY2VVIHx8IHN0YXRlLnN3aXRjaFU7XG5cbiAgaWYgKHN0YXRlLmVhdCgweDc1IC8qIHUgKi8pKSB7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdEZpeGVkSGV4RGlnaXRzKHN0YXRlLCA0KSkge1xuICAgICAgdmFyIGxlYWQgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICBpZiAoc3dpdGNoVSAmJiBsZWFkID49IDB4RDgwMCAmJiBsZWFkIDw9IDB4REJGRikge1xuICAgICAgICB2YXIgbGVhZFN1cnJvZ2F0ZUVuZCA9IHN0YXRlLnBvcztcbiAgICAgICAgaWYgKHN0YXRlLmVhdCgweDVDIC8qIFxcICovKSAmJiBzdGF0ZS5lYXQoMHg3NSAvKiB1ICovKSAmJiB0aGlzLnJlZ2V4cF9lYXRGaXhlZEhleERpZ2l0cyhzdGF0ZSwgNCkpIHtcbiAgICAgICAgICB2YXIgdHJhaWwgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICAgICAgaWYgKHRyYWlsID49IDB4REMwMCAmJiB0cmFpbCA8PSAweERGRkYpIHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IChsZWFkIC0gMHhEODAwKSAqIDB4NDAwICsgKHRyYWlsIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5wb3MgPSBsZWFkU3Vycm9nYXRlRW5kO1xuICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBsZWFkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc3dpdGNoVSAmJlxuICAgICAgc3RhdGUuZWF0KDB4N0IgLyogeyAqLykgJiZcbiAgICAgIHRoaXMucmVnZXhwX2VhdEhleERpZ2l0cyhzdGF0ZSkgJiZcbiAgICAgIHN0YXRlLmVhdCgweDdEIC8qIH0gKi8pICYmXG4gICAgICBpc1ZhbGlkVW5pY29kZShzdGF0ZS5sYXN0SW50VmFsdWUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoc3dpdGNoVSkge1xuICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHVuaWNvZGUgZXNjYXBlXCIpO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufTtcbmZ1bmN0aW9uIGlzVmFsaWRVbmljb2RlKGNoKSB7XG4gIHJldHVybiBjaCA+PSAwICYmIGNoIDw9IDB4MTBGRkZGXG59XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1JZGVudGl0eUVzY2FwZVxucHAkOC5yZWdleHBfZWF0SWRlbnRpdHlFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICBpZiAoc3RhdGUuc3dpdGNoVSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRTeW50YXhDaGFyYWN0ZXIoc3RhdGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoc3RhdGUuZWF0KDB4MkYgLyogLyAqLykpIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDB4MkY7IC8qIC8gKi9cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoY2ggIT09IDB4NjMgLyogYyAqLyAmJiAoIXN0YXRlLnN3aXRjaE4gfHwgY2ggIT09IDB4NkIgLyogayAqLykpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaDtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtRGVjaW1hbEVzY2FwZVxucHAkOC5yZWdleHBfZWF0RGVjaW1hbEVzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgaWYgKGNoID49IDB4MzEgLyogMSAqLyAmJiBjaCA8PSAweDM5IC8qIDkgKi8pIHtcbiAgICBkbyB7XG4gICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAxMCAqIHN0YXRlLmxhc3RJbnRWYWx1ZSArIChjaCAtIDB4MzAgLyogMCAqLyk7XG4gICAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgfSB3aGlsZSAoKGNoID0gc3RhdGUuY3VycmVudCgpKSA+PSAweDMwIC8qIDAgKi8gJiYgY2ggPD0gMHgzOSAvKiA5ICovKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DaGFyYWN0ZXJDbGFzc0VzY2FwZVxucHAkOC5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3NFc2NhcGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgY2ggPSBzdGF0ZS5jdXJyZW50KCk7XG5cbiAgaWYgKGlzQ2hhcmFjdGVyQ2xhc3NFc2NhcGUoY2gpKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gLTE7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoXG4gICAgc3RhdGUuc3dpdGNoVSAmJlxuICAgIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA5ICYmXG4gICAgKGNoID09PSAweDUwIC8qIFAgKi8gfHwgY2ggPT09IDB4NzAgLyogcCAqLylcbiAgKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gLTE7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIGlmIChcbiAgICAgIHN0YXRlLmVhdCgweDdCIC8qIHsgKi8pICYmXG4gICAgICB0aGlzLnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlWYWx1ZUV4cHJlc3Npb24oc3RhdGUpICYmXG4gICAgICBzdGF0ZS5lYXQoMHg3RCAvKiB9ICovKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IG5hbWVcIik7XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn07XG5mdW5jdGlvbiBpc0NoYXJhY3RlckNsYXNzRXNjYXBlKGNoKSB7XG4gIHJldHVybiAoXG4gICAgY2ggPT09IDB4NjQgLyogZCAqLyB8fFxuICAgIGNoID09PSAweDQ0IC8qIEQgKi8gfHxcbiAgICBjaCA9PT0gMHg3MyAvKiBzICovIHx8XG4gICAgY2ggPT09IDB4NTMgLyogUyAqLyB8fFxuICAgIGNoID09PSAweDc3IC8qIHcgKi8gfHxcbiAgICBjaCA9PT0gMHg1NyAvKiBXICovXG4gIClcbn1cblxuLy8gVW5pY29kZVByb3BlcnR5VmFsdWVFeHByZXNzaW9uIDo6XG4vLyAgIFVuaWNvZGVQcm9wZXJ0eU5hbWUgYD1gIFVuaWNvZGVQcm9wZXJ0eVZhbHVlXG4vLyAgIExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZVxucHAkOC5yZWdleHBfZWF0VW5pY29kZVByb3BlcnR5VmFsdWVFeHByZXNzaW9uID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUucG9zO1xuXG4gIC8vIFVuaWNvZGVQcm9wZXJ0eU5hbWUgYD1gIFVuaWNvZGVQcm9wZXJ0eVZhbHVlXG4gIGlmICh0aGlzLnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlOYW1lKHN0YXRlKSAmJiBzdGF0ZS5lYXQoMHgzRCAvKiA9ICovKSkge1xuICAgIHZhciBuYW1lID0gc3RhdGUubGFzdFN0cmluZ1ZhbHVlO1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlWYWx1ZShzdGF0ZSkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHN0YXRlLmxhc3RTdHJpbmdWYWx1ZTtcbiAgICAgIHRoaXMucmVnZXhwX3ZhbGlkYXRlVW5pY29kZVByb3BlcnR5TmFtZUFuZFZhbHVlKHN0YXRlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICBzdGF0ZS5wb3MgPSBzdGFydDtcblxuICAvLyBMb25lVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWVcbiAgaWYgKHRoaXMucmVnZXhwX2VhdExvbmVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZShzdGF0ZSkpIHtcbiAgICB2YXIgbmFtZU9yVmFsdWUgPSBzdGF0ZS5sYXN0U3RyaW5nVmFsdWU7XG4gICAgdGhpcy5yZWdleHBfdmFsaWRhdGVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZShzdGF0ZSwgbmFtZU9yVmFsdWUpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xucHAkOC5yZWdleHBfdmFsaWRhdGVVbmljb2RlUHJvcGVydHlOYW1lQW5kVmFsdWUgPSBmdW5jdGlvbihzdGF0ZSwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKCFoYXMoc3RhdGUudW5pY29kZVByb3BlcnRpZXMubm9uQmluYXJ5LCBuYW1lKSlcbiAgICB7IHN0YXRlLnJhaXNlKFwiSW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpOyB9XG4gIGlmICghc3RhdGUudW5pY29kZVByb3BlcnRpZXMubm9uQmluYXJ5W25hbWVdLnRlc3QodmFsdWUpKVxuICAgIHsgc3RhdGUucmFpc2UoXCJJbnZhbGlkIHByb3BlcnR5IHZhbHVlXCIpOyB9XG59O1xucHAkOC5yZWdleHBfdmFsaWRhdGVVbmljb2RlUHJvcGVydHlOYW1lT3JWYWx1ZSA9IGZ1bmN0aW9uKHN0YXRlLCBuYW1lT3JWYWx1ZSkge1xuICBpZiAoIXN0YXRlLnVuaWNvZGVQcm9wZXJ0aWVzLmJpbmFyeS50ZXN0KG5hbWVPclZhbHVlKSlcbiAgICB7IHN0YXRlLnJhaXNlKFwiSW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpOyB9XG59O1xuXG4vLyBVbmljb2RlUHJvcGVydHlOYW1lIDo6XG4vLyAgIFVuaWNvZGVQcm9wZXJ0eU5hbWVDaGFyYWN0ZXJzXG5wcCQ4LnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlOYW1lID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gMDtcbiAgc3RhdGUubGFzdFN0cmluZ1ZhbHVlID0gXCJcIjtcbiAgd2hpbGUgKGlzVW5pY29kZVByb3BlcnR5TmFtZUNoYXJhY3RlcihjaCA9IHN0YXRlLmN1cnJlbnQoKSkpIHtcbiAgICBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgKz0gY29kZVBvaW50VG9TdHJpbmcoY2gpO1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgfVxuICByZXR1cm4gc3RhdGUubGFzdFN0cmluZ1ZhbHVlICE9PSBcIlwiXG59O1xuZnVuY3Rpb24gaXNVbmljb2RlUHJvcGVydHlOYW1lQ2hhcmFjdGVyKGNoKSB7XG4gIHJldHVybiBpc0NvbnRyb2xMZXR0ZXIoY2gpIHx8IGNoID09PSAweDVGIC8qIF8gKi9cbn1cblxuLy8gVW5pY29kZVByb3BlcnR5VmFsdWUgOjpcbi8vICAgVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXJzXG5wcCQ4LnJlZ2V4cF9lYXRVbmljb2RlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBjaCA9IDA7XG4gIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSA9IFwiXCI7XG4gIHdoaWxlIChpc1VuaWNvZGVQcm9wZXJ0eVZhbHVlQ2hhcmFjdGVyKGNoID0gc3RhdGUuY3VycmVudCgpKSkge1xuICAgIHN0YXRlLmxhc3RTdHJpbmdWYWx1ZSArPSBjb2RlUG9pbnRUb1N0cmluZyhjaCk7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICB9XG4gIHJldHVybiBzdGF0ZS5sYXN0U3RyaW5nVmFsdWUgIT09IFwiXCJcbn07XG5mdW5jdGlvbiBpc1VuaWNvZGVQcm9wZXJ0eVZhbHVlQ2hhcmFjdGVyKGNoKSB7XG4gIHJldHVybiBpc1VuaWNvZGVQcm9wZXJ0eU5hbWVDaGFyYWN0ZXIoY2gpIHx8IGlzRGVjaW1hbERpZ2l0KGNoKVxufVxuXG4vLyBMb25lVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWUgOjpcbi8vICAgVW5pY29kZVByb3BlcnR5VmFsdWVDaGFyYWN0ZXJzXG5wcCQ4LnJlZ2V4cF9lYXRMb25lVW5pY29kZVByb3BlcnR5TmFtZU9yVmFsdWUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICByZXR1cm4gdGhpcy5yZWdleHBfZWF0VW5pY29kZVByb3BlcnR5VmFsdWUoc3RhdGUpXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1DaGFyYWN0ZXJDbGFzc1xucHAkOC5yZWdleHBfZWF0Q2hhcmFjdGVyQ2xhc3MgPSBmdW5jdGlvbihzdGF0ZSkge1xuICBpZiAoc3RhdGUuZWF0KDB4NUIgLyogWyAqLykpIHtcbiAgICBzdGF0ZS5lYXQoMHg1RSAvKiBeICovKTtcbiAgICB0aGlzLnJlZ2V4cF9jbGFzc1JhbmdlcyhzdGF0ZSk7XG4gICAgaWYgKHN0YXRlLmVhdCgweDVEIC8qIF0gKi8pKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBVbnJlYWNoYWJsZSBzaW5jZSBpdCB0aHJldyBcInVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb25cIiBlcnJvciBiZWZvcmUuXG4gICAgc3RhdGUucmFpc2UoXCJVbnRlcm1pbmF0ZWQgY2hhcmFjdGVyIGNsYXNzXCIpO1xuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ2xhc3NSYW5nZXNcbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLU5vbmVtcHR5Q2xhc3NSYW5nZXNcbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLU5vbmVtcHR5Q2xhc3NSYW5nZXNOb0Rhc2hcbnBwJDgucmVnZXhwX2NsYXNzUmFuZ2VzID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgd2hpbGUgKHRoaXMucmVnZXhwX2VhdENsYXNzQXRvbShzdGF0ZSkpIHtcbiAgICB2YXIgbGVmdCA9IHN0YXRlLmxhc3RJbnRWYWx1ZTtcbiAgICBpZiAoc3RhdGUuZWF0KDB4MkQgLyogLSAqLykgJiYgdGhpcy5yZWdleHBfZWF0Q2xhc3NBdG9tKHN0YXRlKSkge1xuICAgICAgdmFyIHJpZ2h0ID0gc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgaWYgKHN0YXRlLnN3aXRjaFUgJiYgKGxlZnQgPT09IC0xIHx8IHJpZ2h0ID09PSAtMSkpIHtcbiAgICAgICAgc3RhdGUucmFpc2UoXCJJbnZhbGlkIGNoYXJhY3RlciBjbGFzc1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChsZWZ0ICE9PSAtMSAmJiByaWdodCAhPT0gLTEgJiYgbGVmdCA+IHJpZ2h0KSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiUmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzc1wiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLUNsYXNzQXRvbVxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtQ2xhc3NBdG9tTm9EYXNoXG5wcCQ4LnJlZ2V4cF9lYXRDbGFzc0F0b20gPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG5cbiAgaWYgKHN0YXRlLmVhdCgweDVDIC8qIFxcICovKSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRDbGFzc0VzY2FwZShzdGF0ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICAvLyBNYWtlIHRoZSBzYW1lIG1lc3NhZ2UgYXMgVjguXG4gICAgICB2YXIgY2gkMSA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICAgIGlmIChjaCQxID09PSAweDYzIC8qIGMgKi8gfHwgaXNPY3RhbERpZ2l0KGNoJDEpKSB7XG4gICAgICAgIHN0YXRlLnJhaXNlKFwiSW52YWxpZCBjbGFzcyBlc2NhcGVcIik7XG4gICAgICB9XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZXNjYXBlXCIpO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuXG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgaWYgKGNoICE9PSAweDVEIC8qIF0gKi8pIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaDtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUNsYXNzRXNjYXBlXG5wcCQ4LnJlZ2V4cF9lYXRDbGFzc0VzY2FwZSA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcblxuICBpZiAoc3RhdGUuZWF0KDB4NjIgLyogYiAqLykpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAweDA4OyAvKiA8QlM+ICovXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChzdGF0ZS5zd2l0Y2hVICYmIHN0YXRlLmVhdCgweDJEIC8qIC0gKi8pKSB7XG4gICAgc3RhdGUubGFzdEludFZhbHVlID0gMHgyRDsgLyogLSAqL1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoIXN0YXRlLnN3aXRjaFUgJiYgc3RhdGUuZWF0KDB4NjMgLyogYyAqLykpIHtcbiAgICBpZiAodGhpcy5yZWdleHBfZWF0Q2xhc3NDb250cm9sTGV0dGVyKHN0YXRlKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgc3RhdGUucG9zID0gc3RhcnQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckNsYXNzRXNjYXBlKHN0YXRlKSB8fFxuICAgIHRoaXMucmVnZXhwX2VhdENoYXJhY3RlckVzY2FwZShzdGF0ZSlcbiAgKVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtYW5uZXhCLUNsYXNzQ29udHJvbExldHRlclxucHAkOC5yZWdleHBfZWF0Q2xhc3NDb250cm9sTGV0dGVyID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgdmFyIGNoID0gc3RhdGUuY3VycmVudCgpO1xuICBpZiAoaXNEZWNpbWFsRGlnaXQoY2gpIHx8IGNoID09PSAweDVGIC8qIF8gKi8pIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaCAlIDB4MjA7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59O1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhFc2NhcGVTZXF1ZW5jZVxucHAkOC5yZWdleHBfZWF0SGV4RXNjYXBlU2VxdWVuY2UgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIGlmIChzdGF0ZS5lYXQoMHg3OCAvKiB4ICovKSkge1xuICAgIGlmICh0aGlzLnJlZ2V4cF9lYXRGaXhlZEhleERpZ2l0cyhzdGF0ZSwgMikpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChzdGF0ZS5zd2l0Y2hVKSB7XG4gICAgICBzdGF0ZS5yYWlzZShcIkludmFsaWQgZXNjYXBlXCIpO1xuICAgIH1cbiAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLURlY2ltYWxEaWdpdHNcbnBwJDgucmVnZXhwX2VhdERlY2ltYWxEaWdpdHMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHZhciBjaCA9IDA7XG4gIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gIHdoaWxlIChpc0RlY2ltYWxEaWdpdChjaCA9IHN0YXRlLmN1cnJlbnQoKSkpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAxMCAqIHN0YXRlLmxhc3RJbnRWYWx1ZSArIChjaCAtIDB4MzAgLyogMCAqLyk7XG4gICAgc3RhdGUuYWR2YW5jZSgpO1xuICB9XG4gIHJldHVybiBzdGF0ZS5wb3MgIT09IHN0YXJ0XG59O1xuZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gpIHtcbiAgcmV0dXJuIGNoID49IDB4MzAgLyogMCAqLyAmJiBjaCA8PSAweDM5IC8qIDkgKi9cbn1cblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtSGV4RGlnaXRzXG5wcCQ4LnJlZ2V4cF9lYXRIZXhEaWdpdHMgPSBmdW5jdGlvbihzdGF0ZSkge1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5wb3M7XG4gIHZhciBjaCA9IDA7XG4gIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDA7XG4gIHdoaWxlIChpc0hleERpZ2l0KGNoID0gc3RhdGUuY3VycmVudCgpKSkge1xuICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IDE2ICogc3RhdGUubGFzdEludFZhbHVlICsgaGV4VG9JbnQoY2gpO1xuICAgIHN0YXRlLmFkdmFuY2UoKTtcbiAgfVxuICByZXR1cm4gc3RhdGUucG9zICE9PSBzdGFydFxufTtcbmZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHtcbiAgcmV0dXJuIChcbiAgICAoY2ggPj0gMHgzMCAvKiAwICovICYmIGNoIDw9IDB4MzkgLyogOSAqLykgfHxcbiAgICAoY2ggPj0gMHg0MSAvKiBBICovICYmIGNoIDw9IDB4NDYgLyogRiAqLykgfHxcbiAgICAoY2ggPj0gMHg2MSAvKiBhICovICYmIGNoIDw9IDB4NjYgLyogZiAqLylcbiAgKVxufVxuZnVuY3Rpb24gaGV4VG9JbnQoY2gpIHtcbiAgaWYgKGNoID49IDB4NDEgLyogQSAqLyAmJiBjaCA8PSAweDQ2IC8qIEYgKi8pIHtcbiAgICByZXR1cm4gMTAgKyAoY2ggLSAweDQxIC8qIEEgKi8pXG4gIH1cbiAgaWYgKGNoID49IDB4NjEgLyogYSAqLyAmJiBjaCA8PSAweDY2IC8qIGYgKi8pIHtcbiAgICByZXR1cm4gMTAgKyAoY2ggLSAweDYxIC8qIGEgKi8pXG4gIH1cbiAgcmV0dXJuIGNoIC0gMHgzMCAvKiAwICovXG59XG5cbi8vIGh0dHBzOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvOC4wLyNwcm9kLWFubmV4Qi1MZWdhY3lPY3RhbEVzY2FwZVNlcXVlbmNlXG4vLyBBbGxvd3Mgb25seSAwLTM3NyhvY3RhbCkgaS5lLiAwLTI1NShkZWNpbWFsKS5cbnBwJDgucmVnZXhwX2VhdExlZ2FjeU9jdGFsRXNjYXBlU2VxdWVuY2UgPSBmdW5jdGlvbihzdGF0ZSkge1xuICBpZiAodGhpcy5yZWdleHBfZWF0T2N0YWxEaWdpdChzdGF0ZSkpIHtcbiAgICB2YXIgbjEgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgaWYgKHRoaXMucmVnZXhwX2VhdE9jdGFsRGlnaXQoc3RhdGUpKSB7XG4gICAgICB2YXIgbjIgPSBzdGF0ZS5sYXN0SW50VmFsdWU7XG4gICAgICBpZiAobjEgPD0gMyAmJiB0aGlzLnJlZ2V4cF9lYXRPY3RhbERpZ2l0KHN0YXRlKSkge1xuICAgICAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBuMSAqIDY0ICsgbjIgKiA4ICsgc3RhdGUubGFzdEludFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUubGFzdEludFZhbHVlID0gbjEgKiA4ICsgbjI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmxhc3RJbnRWYWx1ZSA9IG4xO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtT2N0YWxEaWdpdFxucHAkOC5yZWdleHBfZWF0T2N0YWxEaWdpdCA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgaWYgKGlzT2N0YWxEaWdpdChjaCkpIHtcbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSBjaCAtIDB4MzA7IC8qIDAgKi9cbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAwO1xuICByZXR1cm4gZmFsc2Vcbn07XG5mdW5jdGlvbiBpc09jdGFsRGlnaXQoY2gpIHtcbiAgcmV0dXJuIGNoID49IDB4MzAgLyogMCAqLyAmJiBjaCA8PSAweDM3IC8qIDcgKi9cbn1cblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtSGV4NERpZ2l0c1xuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi84LjAvI3Byb2QtSGV4RGlnaXRcbi8vIEFuZCBIZXhEaWdpdCBIZXhEaWdpdCBpbiBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzguMC8jcHJvZC1IZXhFc2NhcGVTZXF1ZW5jZVxucHAkOC5yZWdleHBfZWF0Rml4ZWRIZXhEaWdpdHMgPSBmdW5jdGlvbihzdGF0ZSwgbGVuZ3RoKSB7XG4gIHZhciBzdGFydCA9IHN0YXRlLnBvcztcbiAgc3RhdGUubGFzdEludFZhbHVlID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBjaCA9IHN0YXRlLmN1cnJlbnQoKTtcbiAgICBpZiAoIWlzSGV4RGlnaXQoY2gpKSB7XG4gICAgICBzdGF0ZS5wb3MgPSBzdGFydDtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBzdGF0ZS5sYXN0SW50VmFsdWUgPSAxNiAqIHN0YXRlLmxhc3RJbnRWYWx1ZSArIGhleFRvSW50KGNoKTtcbiAgICBzdGF0ZS5hZHZhbmNlKCk7XG4gIH1cbiAgcmV0dXJuIHRydWVcbn07XG5cbi8vIE9iamVjdCB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IHRva2Vucy4gTm90ZSB0aGF0IG5vcm1hbGx5LCB0b2tlbnNcbi8vIHNpbXBseSBleGlzdCBhcyBwcm9wZXJ0aWVzIG9uIHRoZSBwYXJzZXIgb2JqZWN0LiBUaGlzIGlzIG9ubHlcbi8vIHVzZWQgZm9yIHRoZSBvblRva2VuIGNhbGxiYWNrIGFuZCB0aGUgZXh0ZXJuYWwgdG9rZW5pemVyLlxuXG52YXIgVG9rZW4gPSBmdW5jdGlvbiBUb2tlbihwKSB7XG4gIHRoaXMudHlwZSA9IHAudHlwZTtcbiAgdGhpcy52YWx1ZSA9IHAudmFsdWU7XG4gIHRoaXMuc3RhcnQgPSBwLnN0YXJ0O1xuICB0aGlzLmVuZCA9IHAuZW5kO1xuICBpZiAocC5vcHRpb25zLmxvY2F0aW9ucylcbiAgICB7IHRoaXMubG9jID0gbmV3IFNvdXJjZUxvY2F0aW9uKHAsIHAuc3RhcnRMb2MsIHAuZW5kTG9jKTsgfVxuICBpZiAocC5vcHRpb25zLnJhbmdlcylcbiAgICB7IHRoaXMucmFuZ2UgPSBbcC5zdGFydCwgcC5lbmRdOyB9XG59O1xuXG4vLyAjIyBUb2tlbml6ZXJcblxudmFyIHBwJDkgPSBQYXJzZXIucHJvdG90eXBlO1xuXG4vLyBNb3ZlIHRvIHRoZSBuZXh0IHRva2VuXG5cbnBwJDkubmV4dCA9IGZ1bmN0aW9uKGlnbm9yZUVzY2FwZVNlcXVlbmNlSW5LZXl3b3JkKSB7XG4gIGlmICghaWdub3JlRXNjYXBlU2VxdWVuY2VJbktleXdvcmQgJiYgdGhpcy50eXBlLmtleXdvcmQgJiYgdGhpcy5jb250YWluc0VzYylcbiAgICB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnN0YXJ0LCBcIkVzY2FwZSBzZXF1ZW5jZSBpbiBrZXl3b3JkIFwiICsgdGhpcy50eXBlLmtleXdvcmQpOyB9XG4gIGlmICh0aGlzLm9wdGlvbnMub25Ub2tlbilcbiAgICB7IHRoaXMub3B0aW9ucy5vblRva2VuKG5ldyBUb2tlbih0aGlzKSk7IH1cblxuICB0aGlzLmxhc3RUb2tFbmQgPSB0aGlzLmVuZDtcbiAgdGhpcy5sYXN0VG9rU3RhcnQgPSB0aGlzLnN0YXJ0O1xuICB0aGlzLmxhc3RUb2tFbmRMb2MgPSB0aGlzLmVuZExvYztcbiAgdGhpcy5sYXN0VG9rU3RhcnRMb2MgPSB0aGlzLnN0YXJ0TG9jO1xuICB0aGlzLm5leHRUb2tlbigpO1xufTtcblxucHAkOS5nZXRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5leHQoKTtcbiAgcmV0dXJuIG5ldyBUb2tlbih0aGlzKVxufTtcblxuLy8gSWYgd2UncmUgaW4gYW4gRVM2IGVudmlyb25tZW50LCBtYWtlIHBhcnNlcnMgaXRlcmFibGVcbmlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiKVxuICB7IHBwJDlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHRva2VuID0gdGhpcyQxLmdldFRva2VuKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZG9uZTogdG9rZW4udHlwZSA9PT0gdHlwZXMuZW9mLFxuICAgICAgICAgIHZhbHVlOiB0b2tlblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9OyB9XG5cbi8vIFRvZ2dsZSBzdHJpY3QgbW9kZS4gUmUtcmVhZHMgdGhlIG5leHQgbnVtYmVyIG9yIHN0cmluZyB0byBwbGVhc2Vcbi8vIHBlZGFudGljIHRlc3RzIChgXCJ1c2Ugc3RyaWN0XCI7IDAxMDtgIHNob3VsZCBmYWlsKS5cblxucHAkOS5jdXJDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHRbdGhpcy5jb250ZXh0Lmxlbmd0aCAtIDFdXG59O1xuXG4vLyBSZWFkIGEgc2luZ2xlIHRva2VuLCB1cGRhdGluZyB0aGUgcGFyc2VyIG9iamVjdCdzIHRva2VuLXJlbGF0ZWRcbi8vIHByb3BlcnRpZXMuXG5cbnBwJDkubmV4dFRva2VuID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjdXJDb250ZXh0ID0gdGhpcy5jdXJDb250ZXh0KCk7XG4gIGlmICghY3VyQ29udGV4dCB8fCAhY3VyQ29udGV4dC5wcmVzZXJ2ZVNwYWNlKSB7IHRoaXMuc2tpcFNwYWNlKCk7IH1cblxuICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3M7XG4gIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7IHRoaXMuc3RhcnRMb2MgPSB0aGlzLmN1clBvc2l0aW9uKCk7IH1cbiAgaWYgKHRoaXMucG9zID49IHRoaXMuaW5wdXQubGVuZ3RoKSB7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmVvZikgfVxuXG4gIGlmIChjdXJDb250ZXh0Lm92ZXJyaWRlKSB7IHJldHVybiBjdXJDb250ZXh0Lm92ZXJyaWRlKHRoaXMpIH1cbiAgZWxzZSB7IHRoaXMucmVhZFRva2VuKHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKSk7IH1cbn07XG5cbnBwJDkucmVhZFRva2VuID0gZnVuY3Rpb24oY29kZSkge1xuICAvLyBJZGVudGlmaWVyIG9yIGtleXdvcmQuICdcXHVYWFhYJyBzZXF1ZW5jZXMgYXJlIGFsbG93ZWQgaW5cbiAgLy8gaWRlbnRpZmllcnMsIHNvICdcXCcgYWxzbyBkaXNwYXRjaGVzIHRvIHRoYXQuXG4gIGlmIChpc0lkZW50aWZpZXJTdGFydChjb2RlLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikgfHwgY29kZSA9PT0gOTIgLyogJ1xcJyAqLylcbiAgICB7IHJldHVybiB0aGlzLnJlYWRXb3JkKCkgfVxuXG4gIHJldHVybiB0aGlzLmdldFRva2VuRnJvbUNvZGUoY29kZSlcbn07XG5cbnBwJDkuZnVsbENoYXJDb2RlQXRQb3MgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvZGUgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICBpZiAoY29kZSA8PSAweGQ3ZmYgfHwgY29kZSA+PSAweGUwMDApIHsgcmV0dXJuIGNvZGUgfVxuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICByZXR1cm4gKGNvZGUgPDwgMTApICsgbmV4dCAtIDB4MzVmZGMwMFxufTtcblxucHAkOS5za2lwQmxvY2tDb21tZW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdGFydExvYyA9IHRoaXMub3B0aW9ucy5vbkNvbW1lbnQgJiYgdGhpcy5jdXJQb3NpdGlvbigpO1xuICB2YXIgc3RhcnQgPSB0aGlzLnBvcywgZW5kID0gdGhpcy5pbnB1dC5pbmRleE9mKFwiKi9cIiwgdGhpcy5wb3MgKz0gMik7XG4gIGlmIChlbmQgPT09IC0xKSB7IHRoaXMucmFpc2UodGhpcy5wb3MgLSAyLCBcIlVudGVybWluYXRlZCBjb21tZW50XCIpOyB9XG4gIHRoaXMucG9zID0gZW5kICsgMjtcbiAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICBsaW5lQnJlYWtHLmxhc3RJbmRleCA9IHN0YXJ0O1xuICAgIHZhciBtYXRjaDtcbiAgICB3aGlsZSAoKG1hdGNoID0gbGluZUJyZWFrRy5leGVjKHRoaXMuaW5wdXQpKSAmJiBtYXRjaC5pbmRleCA8IHRoaXMucG9zKSB7XG4gICAgICArK3RoaXMuY3VyTGluZTtcbiAgICAgIHRoaXMubGluZVN0YXJ0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgfVxuICB9XG4gIGlmICh0aGlzLm9wdGlvbnMub25Db21tZW50KVxuICAgIHsgdGhpcy5vcHRpb25zLm9uQ29tbWVudCh0cnVlLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0ICsgMiwgZW5kKSwgc3RhcnQsIHRoaXMucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMb2MsIHRoaXMuY3VyUG9zaXRpb24oKSk7IH1cbn07XG5cbnBwJDkuc2tpcExpbmVDb21tZW50ID0gZnVuY3Rpb24oc3RhcnRTa2lwKSB7XG4gIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICB2YXIgc3RhcnRMb2MgPSB0aGlzLm9wdGlvbnMub25Db21tZW50ICYmIHRoaXMuY3VyUG9zaXRpb24oKTtcbiAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICs9IHN0YXJ0U2tpcCk7XG4gIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmICFpc05ld0xpbmUoY2gpKSB7XG4gICAgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcyk7XG4gIH1cbiAgaWYgKHRoaXMub3B0aW9ucy5vbkNvbW1lbnQpXG4gICAgeyB0aGlzLm9wdGlvbnMub25Db21tZW50KGZhbHNlLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0ICsgc3RhcnRTa2lwLCB0aGlzLnBvcyksIHN0YXJ0LCB0aGlzLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0TG9jLCB0aGlzLmN1clBvc2l0aW9uKCkpOyB9XG59O1xuXG4vLyBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXJzZSBhbmQgYWZ0ZXIgZXZlcnkgdG9rZW4uIFNraXBzXG4vLyB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cywgYW5kLlxuXG5wcCQ5LnNraXBTcGFjZSA9IGZ1bmN0aW9uKCkge1xuICBsb29wOiB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgc3dpdGNoIChjaCkge1xuICAgIGNhc2UgMzI6IGNhc2UgMTYwOiAvLyAnICdcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICBicmVha1xuICAgIGNhc2UgMTM6XG4gICAgICBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSkgPT09IDEwKSB7XG4gICAgICAgICsrdGhpcy5wb3M7XG4gICAgICB9XG4gICAgY2FzZSAxMDogY2FzZSA4MjMyOiBjYXNlIDgyMzM6XG4gICAgICArK3RoaXMucG9zO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHtcbiAgICAgICAgKyt0aGlzLmN1ckxpbmU7XG4gICAgICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICB9XG4gICAgICBicmVha1xuICAgIGNhc2UgNDc6IC8vICcvJ1xuICAgICAgc3dpdGNoICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKSkge1xuICAgICAgY2FzZSA0MjogLy8gJyonXG4gICAgICAgIHRoaXMuc2tpcEJsb2NrQ29tbWVudCgpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSA0NzpcbiAgICAgICAgdGhpcy5za2lwTGluZUNvbW1lbnQoMik7XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhayBsb29wXG4gICAgICB9XG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoY2ggPiA4ICYmIGNoIDwgMTQgfHwgY2ggPj0gNTc2MCAmJiBub25BU0NJSXdoaXRlc3BhY2UudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSkpIHtcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrIGxvb3BcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHRva2VuLiBTZXRzIGBlbmRgLCBgdmFsYCwgYW5kXG4vLyBtYWludGFpbnMgYGNvbnRleHRgIGFuZCBgZXhwckFsbG93ZWRgLCBhbmQgc2tpcHMgdGhlIHNwYWNlIGFmdGVyXG4vLyB0aGUgdG9rZW4sIHNvIHRoYXQgdGhlIG5leHQgb25lJ3MgYHN0YXJ0YCB3aWxsIHBvaW50IGF0IHRoZVxuLy8gcmlnaHQgcG9zaXRpb24uXG5cbnBwJDkuZmluaXNoVG9rZW4gPSBmdW5jdGlvbih0eXBlLCB2YWwpIHtcbiAgdGhpcy5lbmQgPSB0aGlzLnBvcztcbiAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHsgdGhpcy5lbmRMb2MgPSB0aGlzLmN1clBvc2l0aW9uKCk7IH1cbiAgdmFyIHByZXZUeXBlID0gdGhpcy50eXBlO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xuICB0aGlzLnZhbHVlID0gdmFsO1xuXG4gIHRoaXMudXBkYXRlQ29udGV4dChwcmV2VHlwZSk7XG59O1xuXG4vLyAjIyMgVG9rZW4gcmVhZGluZ1xuXG4vLyBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB0byBmZXRjaCB0aGUgbmV4dCB0b2tlbi4gSXRcbi8vIGlzIHNvbWV3aGF0IG9ic2N1cmUsIGJlY2F1c2UgaXQgd29ya3MgaW4gY2hhcmFjdGVyIGNvZGVzIHJhdGhlclxuLy8gdGhhbiBjaGFyYWN0ZXJzLCBhbmQgYmVjYXVzZSBvcGVyYXRvciBwYXJzaW5nIGhhcyBiZWVuIGlubGluZWRcbi8vIGludG8gaXQuXG4vL1xuLy8gQWxsIGluIHRoZSBuYW1lIG9mIHNwZWVkLlxuLy9cbnBwJDkucmVhZFRva2VuX2RvdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICBpZiAobmV4dCA+PSA0OCAmJiBuZXh0IDw9IDU3KSB7IHJldHVybiB0aGlzLnJlYWROdW1iZXIodHJ1ZSkgfVxuICB2YXIgbmV4dDIgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2ICYmIG5leHQgPT09IDQ2ICYmIG5leHQyID09PSA0NikgeyAvLyA0NiA9IGRvdCAnLidcbiAgICB0aGlzLnBvcyArPSAzO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmVsbGlwc2lzKVxuICB9IGVsc2Uge1xuICAgICsrdGhpcy5wb3M7XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuZG90KVxuICB9XG59O1xuXG5wcCQ5LnJlYWRUb2tlbl9zbGFzaCA9IGZ1bmN0aW9uKCkgeyAvLyAnLydcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgaWYgKHRoaXMuZXhwckFsbG93ZWQpIHsgKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMucmVhZFJlZ2V4cCgpIH1cbiAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmFzc2lnbiwgMikgfVxuICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5zbGFzaCwgMSlcbn07XG5cbnBwJDkucmVhZFRva2VuX211bHRfbW9kdWxvX2V4cCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJyUqJ1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICB2YXIgc2l6ZSA9IDE7XG4gIHZhciB0b2tlbnR5cGUgPSBjb2RlID09PSA0MiA/IHR5cGVzLnN0YXIgOiB0eXBlcy5tb2R1bG87XG5cbiAgLy8gZXhwb25lbnRpYXRpb24gb3BlcmF0b3IgKiogYW5kICoqPVxuICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDcgJiYgY29kZSA9PT0gNDIgJiYgbmV4dCA9PT0gNDIpIHtcbiAgICArK3NpemU7XG4gICAgdG9rZW50eXBlID0gdHlwZXMuc3RhcnN0YXI7XG4gICAgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpO1xuICB9XG5cbiAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmFzc2lnbiwgc2l6ZSArIDEpIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AodG9rZW50eXBlLCBzaXplKVxufTtcblxucHAkOS5yZWFkVG9rZW5fcGlwZV9hbXAgPSBmdW5jdGlvbihjb2RlKSB7IC8vICd8JidcbiAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgaWYgKG5leHQgPT09IGNvZGUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDEyKSB7XG4gICAgICB2YXIgbmV4dDIgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKTtcbiAgICAgIGlmIChuZXh0MiA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYXNzaWduLCAzKSB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKGNvZGUgPT09IDEyNCA/IHR5cGVzLmxvZ2ljYWxPUiA6IHR5cGVzLmxvZ2ljYWxBTkQsIDIpXG4gIH1cbiAgaWYgKG5leHQgPT09IDYxKSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmFzc2lnbiwgMikgfVxuICByZXR1cm4gdGhpcy5maW5pc2hPcChjb2RlID09PSAxMjQgPyB0eXBlcy5iaXR3aXNlT1IgOiB0eXBlcy5iaXR3aXNlQU5ELCAxKVxufTtcblxucHAkOS5yZWFkVG9rZW5fY2FyZXQgPSBmdW5jdGlvbigpIHsgLy8gJ14nXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gIGlmIChuZXh0ID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5hc3NpZ24sIDIpIH1cbiAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYml0d2lzZVhPUiwgMSlcbn07XG5cbnBwJDkucmVhZFRva2VuX3BsdXNfbWluID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnKy0nXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gIGlmIChuZXh0ID09PSBjb2RlKSB7XG4gICAgaWYgKG5leHQgPT09IDQ1ICYmICF0aGlzLmluTW9kdWxlICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09PSA2MiAmJlxuICAgICAgICAodGhpcy5sYXN0VG9rRW5kID09PSAwIHx8IGxpbmVCcmVhay50ZXN0KHRoaXMuaW5wdXQuc2xpY2UodGhpcy5sYXN0VG9rRW5kLCB0aGlzLnBvcykpKSkge1xuICAgICAgLy8gQSBgLS0+YCBsaW5lIGNvbW1lbnRcbiAgICAgIHRoaXMuc2tpcExpbmVDb21tZW50KDMpO1xuICAgICAgdGhpcy5za2lwU3BhY2UoKTtcbiAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbigpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmluY0RlYywgMilcbiAgfVxuICBpZiAobmV4dCA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYXNzaWduLCAyKSB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLnBsdXNNaW4sIDEpXG59O1xuXG5wcCQ5LnJlYWRUb2tlbl9sdF9ndCA9IGZ1bmN0aW9uKGNvZGUpIHsgLy8gJzw+J1xuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGlmIChuZXh0ID09PSBjb2RlKSB7XG4gICAgc2l6ZSA9IGNvZGUgPT09IDYyICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDIpID09PSA2MiA/IDMgOiAyO1xuICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyBzaXplKSA9PT0gNjEpIHsgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMuYXNzaWduLCBzaXplICsgMSkgfVxuICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmJpdFNoaWZ0LCBzaXplKVxuICB9XG4gIGlmIChuZXh0ID09PSAzMyAmJiBjb2RlID09PSA2MCAmJiAhdGhpcy5pbk1vZHVsZSAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAyKSA9PT0gNDUgJiZcbiAgICAgIHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDMpID09PSA0NSkge1xuICAgIC8vIGA8IS0tYCwgYW4gWE1MLXN0eWxlIGNvbW1lbnQgdGhhdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYSBsaW5lIGNvbW1lbnRcbiAgICB0aGlzLnNraXBMaW5lQ29tbWVudCg0KTtcbiAgICB0aGlzLnNraXBTcGFjZSgpO1xuICAgIHJldHVybiB0aGlzLm5leHRUb2tlbigpXG4gIH1cbiAgaWYgKG5leHQgPT09IDYxKSB7IHNpemUgPSAyOyB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLnJlbGF0aW9uYWwsIHNpemUpXG59O1xuXG5wcCQ5LnJlYWRUb2tlbl9lcV9leGNsID0gZnVuY3Rpb24oY29kZSkgeyAvLyAnPSEnXG4gIHZhciBuZXh0ID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gIGlmIChuZXh0ID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5lcXVhbGl0eSwgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMikgPT09IDYxID8gMyA6IDIpIH1cbiAgaWYgKGNvZGUgPT09IDYxICYmIG5leHQgPT09IDYyICYmIHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSA2KSB7IC8vICc9PidcbiAgICB0aGlzLnBvcyArPSAyO1xuICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmFycm93KVxuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaE9wKGNvZGUgPT09IDYxID8gdHlwZXMuZXEgOiB0eXBlcy5wcmVmaXgsIDEpXG59O1xuXG5wcCQ5LnJlYWRUb2tlbl9xdWVzdGlvbiA9IGZ1bmN0aW9uKCkgeyAvLyAnPydcbiAgdmFyIGVjbWFWZXJzaW9uID0gdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uO1xuICBpZiAoZWNtYVZlcnNpb24gPj0gMTEpIHtcbiAgICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyArIDEpO1xuICAgIGlmIChuZXh0ID09PSA0Nikge1xuICAgICAgdmFyIG5leHQyID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMik7XG4gICAgICBpZiAobmV4dDIgPCA0OCB8fCBuZXh0MiA+IDU3KSB7IHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLnF1ZXN0aW9uRG90LCAyKSB9XG4gICAgfVxuICAgIGlmIChuZXh0ID09PSA2Mykge1xuICAgICAgaWYgKGVjbWFWZXJzaW9uID49IDEyKSB7XG4gICAgICAgIHZhciBuZXh0MiQxID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMik7XG4gICAgICAgIGlmIChuZXh0MiQxID09PSA2MSkgeyByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5hc3NpZ24sIDMpIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE9wKHR5cGVzLmNvYWxlc2NlLCAyKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcy5maW5pc2hPcCh0eXBlcy5xdWVzdGlvbiwgMSlcbn07XG5cbnBwJDkuZ2V0VG9rZW5Gcm9tQ29kZSA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgc3dpdGNoIChjb2RlKSB7XG4gIC8vIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBhIGRvdCBkZXBlbmRzIG9uIHdoZXRoZXIgaXQgaXMgZm9sbG93ZWRcbiAgLy8gYnkgYSBkaWdpdCBvciBhbm90aGVyIHR3byBkb3RzLlxuICBjYXNlIDQ2OiAvLyAnLidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fZG90KClcblxuICAvLyBQdW5jdHVhdGlvbiB0b2tlbnMuXG4gIGNhc2UgNDA6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLnBhcmVuTClcbiAgY2FzZSA0MTogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMucGFyZW5SKVxuICBjYXNlIDU5OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5zZW1pKVxuICBjYXNlIDQ0OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5jb21tYSlcbiAgY2FzZSA5MTogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuYnJhY2tldEwpXG4gIGNhc2UgOTM6ICsrdGhpcy5wb3M7IHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmJyYWNrZXRSKVxuICBjYXNlIDEyMzogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuYnJhY2VMKVxuICBjYXNlIDEyNTogKyt0aGlzLnBvczsgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuYnJhY2VSKVxuICBjYXNlIDU4OiArK3RoaXMucG9zOyByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5jb2xvbilcblxuICBjYXNlIDk2OiAvLyAnYCdcbiAgICBpZiAodGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uIDwgNikgeyBicmVhayB9XG4gICAgKyt0aGlzLnBvcztcbiAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5iYWNrUXVvdGUpXG5cbiAgY2FzZSA0ODogLy8gJzAnXG4gICAgdmFyIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICBpZiAobmV4dCA9PT0gMTIwIHx8IG5leHQgPT09IDg4KSB7IHJldHVybiB0aGlzLnJlYWRSYWRpeE51bWJlcigxNikgfSAvLyAnMHgnLCAnMFgnIC0gaGV4IG51bWJlclxuICAgIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNikge1xuICAgICAgaWYgKG5leHQgPT09IDExMSB8fCBuZXh0ID09PSA3OSkgeyByZXR1cm4gdGhpcy5yZWFkUmFkaXhOdW1iZXIoOCkgfSAvLyAnMG8nLCAnME8nIC0gb2N0YWwgbnVtYmVyXG4gICAgICBpZiAobmV4dCA9PT0gOTggfHwgbmV4dCA9PT0gNjYpIHsgcmV0dXJuIHRoaXMucmVhZFJhZGl4TnVtYmVyKDIpIH0gLy8gJzBiJywgJzBCJyAtIGJpbmFyeSBudW1iZXJcbiAgICB9XG5cbiAgLy8gQW55dGhpbmcgZWxzZSBiZWdpbm5pbmcgd2l0aCBhIGRpZ2l0IGlzIGFuIGludGVnZXIsIG9jdGFsXG4gIC8vIG51bWJlciwgb3IgZmxvYXQuXG4gIGNhc2UgNDk6IGNhc2UgNTA6IGNhc2UgNTE6IGNhc2UgNTI6IGNhc2UgNTM6IGNhc2UgNTQ6IGNhc2UgNTU6IGNhc2UgNTY6IGNhc2UgNTc6IC8vIDEtOVxuICAgIHJldHVybiB0aGlzLnJlYWROdW1iZXIoZmFsc2UpXG5cbiAgLy8gUXVvdGVzIHByb2R1Y2Ugc3RyaW5ncy5cbiAgY2FzZSAzNDogY2FzZSAzOTogLy8gJ1wiJywgXCInXCJcbiAgICByZXR1cm4gdGhpcy5yZWFkU3RyaW5nKGNvZGUpXG5cbiAgLy8gT3BlcmF0b3JzIGFyZSBwYXJzZWQgaW5saW5lIGluIHRpbnkgc3RhdGUgbWFjaGluZXMuICc9JyAoNjEpIGlzXG4gIC8vIG9mdGVuIHJlZmVycmVkIHRvLiBgZmluaXNoT3BgIHNpbXBseSBza2lwcyB0aGUgYW1vdW50IG9mXG4gIC8vIGNoYXJhY3RlcnMgaXQgaXMgZ2l2ZW4gYXMgc2Vjb25kIGFyZ3VtZW50LCBhbmQgcmV0dXJucyBhIHRva2VuXG4gIC8vIG9mIHRoZSB0eXBlIGdpdmVuIGJ5IGl0cyBmaXJzdCBhcmd1bWVudC5cblxuICBjYXNlIDQ3OiAvLyAnLydcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fc2xhc2goKVxuXG4gIGNhc2UgMzc6IGNhc2UgNDI6IC8vICclKidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fbXVsdF9tb2R1bG9fZXhwKGNvZGUpXG5cbiAgY2FzZSAxMjQ6IGNhc2UgMzg6IC8vICd8JidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcGlwZV9hbXAoY29kZSlcblxuICBjYXNlIDk0OiAvLyAnXidcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fY2FyZXQoKVxuXG4gIGNhc2UgNDM6IGNhc2UgNDU6IC8vICcrLSdcbiAgICByZXR1cm4gdGhpcy5yZWFkVG9rZW5fcGx1c19taW4oY29kZSlcblxuICBjYXNlIDYwOiBjYXNlIDYyOiAvLyAnPD4nXG4gICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX2x0X2d0KGNvZGUpXG5cbiAgY2FzZSA2MTogY2FzZSAzMzogLy8gJz0hJ1xuICAgIHJldHVybiB0aGlzLnJlYWRUb2tlbl9lcV9leGNsKGNvZGUpXG5cbiAgY2FzZSA2MzogLy8gJz8nXG4gICAgcmV0dXJuIHRoaXMucmVhZFRva2VuX3F1ZXN0aW9uKClcblxuICBjYXNlIDEyNjogLy8gJ34nXG4gICAgcmV0dXJuIHRoaXMuZmluaXNoT3AodHlwZXMucHJlZml4LCAxKVxuICB9XG5cbiAgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJVbmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgKyBjb2RlUG9pbnRUb1N0cmluZyQxKGNvZGUpICsgXCInXCIpO1xufTtcblxucHAkOS5maW5pc2hPcCA9IGZ1bmN0aW9uKHR5cGUsIHNpemUpIHtcbiAgdmFyIHN0ciA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5wb3MsIHRoaXMucG9zICsgc2l6ZSk7XG4gIHRoaXMucG9zICs9IHNpemU7XG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGUsIHN0cilcbn07XG5cbnBwJDkucmVhZFJlZ2V4cCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZXNjYXBlZCwgaW5DbGFzcywgc3RhcnQgPSB0aGlzLnBvcztcbiAgZm9yICg7Oykge1xuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkgeyB0aGlzLnJhaXNlKHN0YXJ0LCBcIlVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb25cIik7IH1cbiAgICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJBdCh0aGlzLnBvcyk7XG4gICAgaWYgKGxpbmVCcmVhay50ZXN0KGNoKSkgeyB0aGlzLnJhaXNlKHN0YXJ0LCBcIlVudGVybWluYXRlZCByZWd1bGFyIGV4cHJlc3Npb25cIik7IH1cbiAgICBpZiAoIWVzY2FwZWQpIHtcbiAgICAgIGlmIChjaCA9PT0gXCJbXCIpIHsgaW5DbGFzcyA9IHRydWU7IH1cbiAgICAgIGVsc2UgaWYgKGNoID09PSBcIl1cIiAmJiBpbkNsYXNzKSB7IGluQ2xhc3MgPSBmYWxzZTsgfVxuICAgICAgZWxzZSBpZiAoY2ggPT09IFwiL1wiICYmICFpbkNsYXNzKSB7IGJyZWFrIH1cbiAgICAgIGVzY2FwZWQgPSBjaCA9PT0gXCJcXFxcXCI7XG4gICAgfSBlbHNlIHsgZXNjYXBlZCA9IGZhbHNlOyB9XG4gICAgKyt0aGlzLnBvcztcbiAgfVxuICB2YXIgcGF0dGVybiA9IHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKTtcbiAgKyt0aGlzLnBvcztcbiAgdmFyIGZsYWdzU3RhcnQgPSB0aGlzLnBvcztcbiAgdmFyIGZsYWdzID0gdGhpcy5yZWFkV29yZDEoKTtcbiAgaWYgKHRoaXMuY29udGFpbnNFc2MpIHsgdGhpcy51bmV4cGVjdGVkKGZsYWdzU3RhcnQpOyB9XG5cbiAgLy8gVmFsaWRhdGUgcGF0dGVyblxuICB2YXIgc3RhdGUgPSB0aGlzLnJlZ2V4cFN0YXRlIHx8ICh0aGlzLnJlZ2V4cFN0YXRlID0gbmV3IFJlZ0V4cFZhbGlkYXRpb25TdGF0ZSh0aGlzKSk7XG4gIHN0YXRlLnJlc2V0KHN0YXJ0LCBwYXR0ZXJuLCBmbGFncyk7XG4gIHRoaXMudmFsaWRhdGVSZWdFeHBGbGFncyhzdGF0ZSk7XG4gIHRoaXMudmFsaWRhdGVSZWdFeHBQYXR0ZXJuKHN0YXRlKTtcblxuICAvLyBDcmVhdGUgTGl0ZXJhbCN2YWx1ZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgdmFyIHZhbHVlID0gbnVsbDtcbiAgdHJ5IHtcbiAgICB2YWx1ZSA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gRVNUcmVlIHJlcXVpcmVzIG51bGwgaWYgaXQgZmFpbGVkIHRvIGluc3RhbnRpYXRlIFJlZ0V4cCBvYmplY3QuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzdHJlZS9lc3RyZWUvYmxvYi9hMjcwMDNhZGY0ZmQ3YmZhZDQ0ZGU5Y2VmMzcyYTJlYWNkNTI3YjFjL2VzNS5tZCNyZWdleHBsaXRlcmFsXG4gIH1cblxuICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5yZWdleHAsIHtwYXR0ZXJuOiBwYXR0ZXJuLCBmbGFnczogZmxhZ3MsIHZhbHVlOiB2YWx1ZX0pXG59O1xuXG4vLyBSZWFkIGFuIGludGVnZXIgaW4gdGhlIGdpdmVuIHJhZGl4LiBSZXR1cm4gbnVsbCBpZiB6ZXJvIGRpZ2l0c1xuLy8gd2VyZSByZWFkLCB0aGUgaW50ZWdlciB2YWx1ZSBvdGhlcndpc2UuIFdoZW4gYGxlbmAgaXMgZ2l2ZW4sIHRoaXNcbi8vIHdpbGwgcmV0dXJuIGBudWxsYCB1bmxlc3MgdGhlIGludGVnZXIgaGFzIGV4YWN0bHkgYGxlbmAgZGlnaXRzLlxuXG5wcCQ5LnJlYWRJbnQgPSBmdW5jdGlvbihyYWRpeCwgbGVuLCBtYXliZUxlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwpIHtcbiAgLy8gYGxlbmAgaXMgdXNlZCBmb3IgY2hhcmFjdGVyIGVzY2FwZSBzZXF1ZW5jZXMuIEluIHRoYXQgY2FzZSwgZGlzYWxsb3cgc2VwYXJhdG9ycy5cbiAgdmFyIGFsbG93U2VwYXJhdG9ycyA9IHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA+PSAxMiAmJiBsZW4gPT09IHVuZGVmaW5lZDtcblxuICAvLyBgbWF5YmVMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsYCBpcyB0cnVlIGlmIGl0IGRvZXNuJ3QgaGF2ZSBwcmVmaXggKDB4LDBvLDBiKVxuICAvLyBhbmQgaXNuJ3QgZnJhY3Rpb24gcGFydCBub3IgZXhwb25lbnQgcGFydC4gSW4gdGhhdCBjYXNlLCBpZiB0aGUgZmlyc3QgZGlnaXRcbiAgLy8gaXMgemVybyB0aGVuIGRpc2FsbG93IHNlcGFyYXRvcnMuXG4gIHZhciBpc0xlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwgPSBtYXliZUxlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gNDg7XG5cbiAgdmFyIHN0YXJ0ID0gdGhpcy5wb3MsIHRvdGFsID0gMCwgbGFzdENvZGUgPSAwO1xuICBmb3IgKHZhciBpID0gMCwgZSA9IGxlbiA9PSBudWxsID8gSW5maW5pdHkgOiBsZW47IGkgPCBlOyArK2ksICsrdGhpcy5wb3MpIHtcbiAgICB2YXIgY29kZSA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyksIHZhbCA9ICh2b2lkIDApO1xuXG4gICAgaWYgKGFsbG93U2VwYXJhdG9ycyAmJiBjb2RlID09PSA5NSkge1xuICAgICAgaWYgKGlzTGVnYWN5T2N0YWxOdW1lcmljTGl0ZXJhbCkgeyB0aGlzLnJhaXNlUmVjb3ZlcmFibGUodGhpcy5wb3MsIFwiTnVtZXJpYyBzZXBhcmF0b3IgaXMgbm90IGFsbG93ZWQgaW4gbGVnYWN5IG9jdGFsIG51bWVyaWMgbGl0ZXJhbHNcIik7IH1cbiAgICAgIGlmIChsYXN0Q29kZSA9PT0gOTUpIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMucG9zLCBcIk51bWVyaWMgc2VwYXJhdG9yIG11c3QgYmUgZXhhY3RseSBvbmUgdW5kZXJzY29yZVwiKTsgfVxuICAgICAgaWYgKGkgPT09IDApIHsgdGhpcy5yYWlzZVJlY292ZXJhYmxlKHRoaXMucG9zLCBcIk51bWVyaWMgc2VwYXJhdG9yIGlzIG5vdCBhbGxvd2VkIGF0IHRoZSBmaXJzdCBvZiBkaWdpdHNcIik7IH1cbiAgICAgIGxhc3RDb2RlID0gY29kZTtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPj0gOTcpIHsgdmFsID0gY29kZSAtIDk3ICsgMTA7IH0gLy8gYVxuICAgIGVsc2UgaWYgKGNvZGUgPj0gNjUpIHsgdmFsID0gY29kZSAtIDY1ICsgMTA7IH0gLy8gQVxuICAgIGVsc2UgaWYgKGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NykgeyB2YWwgPSBjb2RlIC0gNDg7IH0gLy8gMC05XG4gICAgZWxzZSB7IHZhbCA9IEluZmluaXR5OyB9XG4gICAgaWYgKHZhbCA+PSByYWRpeCkgeyBicmVhayB9XG4gICAgbGFzdENvZGUgPSBjb2RlO1xuICAgIHRvdGFsID0gdG90YWwgKiByYWRpeCArIHZhbDtcbiAgfVxuXG4gIGlmIChhbGxvd1NlcGFyYXRvcnMgJiYgbGFzdENvZGUgPT09IDk1KSB7IHRoaXMucmFpc2VSZWNvdmVyYWJsZSh0aGlzLnBvcyAtIDEsIFwiTnVtZXJpYyBzZXBhcmF0b3IgaXMgbm90IGFsbG93ZWQgYXQgdGhlIGxhc3Qgb2YgZGlnaXRzXCIpOyB9XG4gIGlmICh0aGlzLnBvcyA9PT0gc3RhcnQgfHwgbGVuICE9IG51bGwgJiYgdGhpcy5wb3MgLSBzdGFydCAhPT0gbGVuKSB7IHJldHVybiBudWxsIH1cblxuICByZXR1cm4gdG90YWxcbn07XG5cbmZ1bmN0aW9uIHN0cmluZ1RvTnVtYmVyKHN0ciwgaXNMZWdhY3lPY3RhbE51bWVyaWNMaXRlcmFsKSB7XG4gIGlmIChpc0xlZ2FjeU9jdGFsTnVtZXJpY0xpdGVyYWwpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyLCA4KVxuICB9XG5cbiAgLy8gYHBhcnNlRmxvYXQodmFsdWUpYCBzdG9wcyBwYXJzaW5nIGF0IHRoZSBmaXJzdCBudW1lcmljIHNlcGFyYXRvciB0aGVuIHJldHVybnMgYSB3cm9uZyB2YWx1ZS5cbiAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyLnJlcGxhY2UoL18vZywgXCJcIikpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQmlnSW50KHN0cikge1xuICBpZiAodHlwZW9mIEJpZ0ludCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIGBCaWdJbnQodmFsdWUpYCB0aHJvd3Mgc3ludGF4IGVycm9yIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgbnVtZXJpYyBzZXBhcmF0b3JzLlxuICByZXR1cm4gQmlnSW50KHN0ci5yZXBsYWNlKC9fL2csIFwiXCIpKVxufVxuXG5wcCQ5LnJlYWRSYWRpeE51bWJlciA9IGZ1bmN0aW9uKHJhZGl4KSB7XG4gIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICB0aGlzLnBvcyArPSAyOyAvLyAweFxuICB2YXIgdmFsID0gdGhpcy5yZWFkSW50KHJhZGl4KTtcbiAgaWYgKHZhbCA9PSBudWxsKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCArIDIsIFwiRXhwZWN0ZWQgbnVtYmVyIGluIHJhZGl4IFwiICsgcmFkaXgpOyB9XG4gIGlmICh0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTEgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gMTEwKSB7XG4gICAgdmFsID0gc3RyaW5nVG9CaWdJbnQodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpKTtcbiAgICArK3RoaXMucG9zO1xuICB9IGVsc2UgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHRoaXMuZnVsbENoYXJDb2RlQXRQb3MoKSkpIHsgdGhpcy5yYWlzZSh0aGlzLnBvcywgXCJJZGVudGlmaWVyIGRpcmVjdGx5IGFmdGVyIG51bWJlclwiKTsgfVxuICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5udW0sIHZhbClcbn07XG5cbi8vIFJlYWQgYW4gaW50ZWdlciwgb2N0YWwgaW50ZWdlciwgb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVyLlxuXG5wcCQ5LnJlYWROdW1iZXIgPSBmdW5jdGlvbihzdGFydHNXaXRoRG90KSB7XG4gIHZhciBzdGFydCA9IHRoaXMucG9zO1xuICBpZiAoIXN0YXJ0c1dpdGhEb3QgJiYgdGhpcy5yZWFkSW50KDEwLCB1bmRlZmluZWQsIHRydWUpID09PSBudWxsKSB7IHRoaXMucmFpc2Uoc3RhcnQsIFwiSW52YWxpZCBudW1iZXJcIik7IH1cbiAgdmFyIG9jdGFsID0gdGhpcy5wb3MgLSBzdGFydCA+PSAyICYmIHRoaXMuaW5wdXQuY2hhckNvZGVBdChzdGFydCkgPT09IDQ4O1xuICBpZiAob2N0YWwgJiYgdGhpcy5zdHJpY3QpIHsgdGhpcy5yYWlzZShzdGFydCwgXCJJbnZhbGlkIG51bWJlclwiKTsgfVxuICB2YXIgbmV4dCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gIGlmICghb2N0YWwgJiYgIXN0YXJ0c1dpdGhEb3QgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDExICYmIG5leHQgPT09IDExMCkge1xuICAgIHZhciB2YWwkMSA9IHN0cmluZ1RvQmlnSW50KHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKSk7XG4gICAgKyt0aGlzLnBvcztcbiAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQodGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKSkgeyB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpOyB9XG4gICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMubnVtLCB2YWwkMSlcbiAgfVxuICBpZiAob2N0YWwgJiYgL1s4OV0vLnRlc3QodGhpcy5pbnB1dC5zbGljZShzdGFydCwgdGhpcy5wb3MpKSkgeyBvY3RhbCA9IGZhbHNlOyB9XG4gIGlmIChuZXh0ID09PSA0NiAmJiAhb2N0YWwpIHsgLy8gJy4nXG4gICAgKyt0aGlzLnBvcztcbiAgICB0aGlzLnJlYWRJbnQoMTApO1xuICAgIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICB9XG4gIGlmICgobmV4dCA9PT0gNjkgfHwgbmV4dCA9PT0gMTAxKSAmJiAhb2N0YWwpIHsgLy8gJ2VFJ1xuICAgIG5leHQgPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcyk7XG4gICAgaWYgKG5leHQgPT09IDQzIHx8IG5leHQgPT09IDQ1KSB7ICsrdGhpcy5wb3M7IH0gLy8gJystJ1xuICAgIGlmICh0aGlzLnJlYWRJbnQoMTApID09PSBudWxsKSB7IHRoaXMucmFpc2Uoc3RhcnQsIFwiSW52YWxpZCBudW1iZXJcIik7IH1cbiAgfVxuICBpZiAoaXNJZGVudGlmaWVyU3RhcnQodGhpcy5mdWxsQ2hhckNvZGVBdFBvcygpKSkgeyB0aGlzLnJhaXNlKHRoaXMucG9zLCBcIklkZW50aWZpZXIgZGlyZWN0bHkgYWZ0ZXIgbnVtYmVyXCIpOyB9XG5cbiAgdmFyIHZhbCA9IHN0cmluZ1RvTnVtYmVyKHRoaXMuaW5wdXQuc2xpY2Uoc3RhcnQsIHRoaXMucG9zKSwgb2N0YWwpO1xuICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5udW0sIHZhbClcbn07XG5cbi8vIFJlYWQgYSBzdHJpbmcgdmFsdWUsIGludGVycHJldGluZyBiYWNrc2xhc2gtZXNjYXBlcy5cblxucHAkOS5yZWFkQ29kZVBvaW50ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyksIGNvZGU7XG5cbiAgaWYgKGNoID09PSAxMjMpIHsgLy8gJ3snXG4gICAgaWYgKHRoaXMub3B0aW9ucy5lY21hVmVyc2lvbiA8IDYpIHsgdGhpcy51bmV4cGVjdGVkKCk7IH1cbiAgICB2YXIgY29kZVBvcyA9ICsrdGhpcy5wb3M7XG4gICAgY29kZSA9IHRoaXMucmVhZEhleENoYXIodGhpcy5pbnB1dC5pbmRleE9mKFwifVwiLCB0aGlzLnBvcykgLSB0aGlzLnBvcyk7XG4gICAgKyt0aGlzLnBvcztcbiAgICBpZiAoY29kZSA+IDB4MTBGRkZGKSB7IHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKGNvZGVQb3MsIFwiQ29kZSBwb2ludCBvdXQgb2YgYm91bmRzXCIpOyB9XG4gIH0gZWxzZSB7XG4gICAgY29kZSA9IHRoaXMucmVhZEhleENoYXIoNCk7XG4gIH1cbiAgcmV0dXJuIGNvZGVcbn07XG5cbmZ1bmN0aW9uIGNvZGVQb2ludFRvU3RyaW5nJDEoY29kZSkge1xuICAvLyBVVEYtMTYgRGVjb2RpbmdcbiAgaWYgKGNvZGUgPD0gMHhGRkZGKSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpIH1cbiAgY29kZSAtPSAweDEwMDAwO1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgoY29kZSA+PiAxMCkgKyAweEQ4MDAsIChjb2RlICYgMTAyMykgKyAweERDMDApXG59XG5cbnBwJDkucmVhZFN0cmluZyA9IGZ1bmN0aW9uKHF1b3RlKSB7XG4gIHZhciBvdXQgPSBcIlwiLCBjaHVua1N0YXJ0ID0gKyt0aGlzLnBvcztcbiAgZm9yICg7Oykge1xuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudFwiKTsgfVxuICAgIHZhciBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgaWYgKGNoID09PSBxdW90ZSkgeyBicmVhayB9XG4gICAgaWYgKGNoID09PSA5MikgeyAvLyAnXFwnXG4gICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICBvdXQgKz0gdGhpcy5yZWFkRXNjYXBlZENoYXIoZmFsc2UpO1xuICAgICAgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNOZXdMaW5lKGNoLCB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gMTApKSB7IHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50XCIpOyB9XG4gICAgICArK3RoaXMucG9zO1xuICAgIH1cbiAgfVxuICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcysrKTtcbiAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odHlwZXMuc3RyaW5nLCBvdXQpXG59O1xuXG4vLyBSZWFkcyB0ZW1wbGF0ZSBzdHJpbmcgdG9rZW5zLlxuXG52YXIgSU5WQUxJRF9URU1QTEFURV9FU0NBUEVfRVJST1IgPSB7fTtcblxucHAkOS50cnlSZWFkVGVtcGxhdGVUb2tlbiA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmluVGVtcGxhdGVFbGVtZW50ID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICB0aGlzLnJlYWRUbXBsVG9rZW4oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciA9PT0gSU5WQUxJRF9URU1QTEFURV9FU0NBUEVfRVJST1IpIHtcbiAgICAgIHRoaXMucmVhZEludmFsaWRUZW1wbGF0ZVRva2VuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIHRoaXMuaW5UZW1wbGF0ZUVsZW1lbnQgPSBmYWxzZTtcbn07XG5cbnBwJDkuaW52YWxpZFN0cmluZ1Rva2VuID0gZnVuY3Rpb24ocG9zaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKHRoaXMuaW5UZW1wbGF0ZUVsZW1lbnQgJiYgdGhpcy5vcHRpb25zLmVjbWFWZXJzaW9uID49IDkpIHtcbiAgICB0aHJvdyBJTlZBTElEX1RFTVBMQVRFX0VTQ0FQRV9FUlJPUlxuICB9IGVsc2Uge1xuICAgIHRoaXMucmFpc2UocG9zaXRpb24sIG1lc3NhZ2UpO1xuICB9XG59O1xuXG5wcCQ5LnJlYWRUbXBsVG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgdmFyIG91dCA9IFwiXCIsIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgZm9yICg7Oykge1xuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkgeyB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsIFwiVW50ZXJtaW5hdGVkIHRlbXBsYXRlXCIpOyB9XG4gICAgdmFyIGNoID0gdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKTtcbiAgICBpZiAoY2ggPT09IDk2IHx8IGNoID09PSAzNiAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKSA9PT0gMTIzKSB7IC8vICdgJywgJyR7J1xuICAgICAgaWYgKHRoaXMucG9zID09PSB0aGlzLnN0YXJ0ICYmICh0aGlzLnR5cGUgPT09IHR5cGVzLnRlbXBsYXRlIHx8IHRoaXMudHlwZSA9PT0gdHlwZXMuaW52YWxpZFRlbXBsYXRlKSkge1xuICAgICAgICBpZiAoY2ggPT09IDM2KSB7XG4gICAgICAgICAgdGhpcy5wb3MgKz0gMjtcbiAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5kb2xsYXJCcmFjZUwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0eXBlcy5iYWNrUXVvdGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLnRlbXBsYXRlLCBvdXQpXG4gICAgfVxuICAgIGlmIChjaCA9PT0gOTIpIHsgLy8gJ1xcJ1xuICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgb3V0ICs9IHRoaXMucmVhZEVzY2FwZWRDaGFyKHRydWUpO1xuICAgICAgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICAgIH0gZWxzZSBpZiAoaXNOZXdMaW5lKGNoKSkge1xuICAgICAgb3V0ICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgIGNhc2UgMTM6XG4gICAgICAgIGlmICh0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpID09PSAxMCkgeyArK3RoaXMucG9zOyB9XG4gICAgICBjYXNlIDEwOlxuICAgICAgICBvdXQgKz0gXCJcXG5cIjtcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgICAgICsrdGhpcy5jdXJMaW5lO1xuICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zO1xuICAgICAgfVxuICAgICAgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICAgIH0gZWxzZSB7XG4gICAgICArK3RoaXMucG9zO1xuICAgIH1cbiAgfVxufTtcblxuLy8gUmVhZHMgYSB0ZW1wbGF0ZSB0b2tlbiB0byBzZWFyY2ggZm9yIHRoZSBlbmQsIHdpdGhvdXQgdmFsaWRhdGluZyBhbnkgZXNjYXBlIHNlcXVlbmNlc1xucHAkOS5yZWFkSW52YWxpZFRlbXBsYXRlVG9rZW4gPSBmdW5jdGlvbigpIHtcbiAgZm9yICg7IHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGg7IHRoaXMucG9zKyspIHtcbiAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgY2FzZSBcIlxcXFxcIjpcbiAgICAgICsrdGhpcy5wb3M7XG4gICAgICBicmVha1xuXG4gICAgY2FzZSBcIiRcIjpcbiAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zICsgMV0gIT09IFwie1wiKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgY2FzZSBcImBcIjpcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGVzLmludmFsaWRUZW1wbGF0ZSwgdGhpcy5pbnB1dC5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcykpXG5cbiAgICAvLyBubyBkZWZhdWx0XG4gICAgfVxuICB9XG4gIHRoaXMucmFpc2UodGhpcy5zdGFydCwgXCJVbnRlcm1pbmF0ZWQgdGVtcGxhdGVcIik7XG59O1xuXG4vLyBVc2VkIHRvIHJlYWQgZXNjYXBlZCBjaGFyYWN0ZXJzXG5cbnBwJDkucmVhZEVzY2FwZWRDaGFyID0gZnVuY3Rpb24oaW5UZW1wbGF0ZSkge1xuICB2YXIgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcyk7XG4gICsrdGhpcy5wb3M7XG4gIHN3aXRjaCAoY2gpIHtcbiAgY2FzZSAxMTA6IHJldHVybiBcIlxcblwiIC8vICduJyAtPiAnXFxuJ1xuICBjYXNlIDExNDogcmV0dXJuIFwiXFxyXCIgLy8gJ3InIC0+ICdcXHInXG4gIGNhc2UgMTIwOiByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWRIZXhDaGFyKDIpKSAvLyAneCdcbiAgY2FzZSAxMTc6IHJldHVybiBjb2RlUG9pbnRUb1N0cmluZyQxKHRoaXMucmVhZENvZGVQb2ludCgpKSAvLyAndSdcbiAgY2FzZSAxMTY6IHJldHVybiBcIlxcdFwiIC8vICd0JyAtPiAnXFx0J1xuICBjYXNlIDk4OiByZXR1cm4gXCJcXGJcIiAvLyAnYicgLT4gJ1xcYidcbiAgY2FzZSAxMTg6IHJldHVybiBcIlxcdTAwMGJcIiAvLyAndicgLT4gJ1xcdTAwMGInXG4gIGNhc2UgMTAyOiByZXR1cm4gXCJcXGZcIiAvLyAnZicgLT4gJ1xcZidcbiAgY2FzZSAxMzogaWYgKHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcykgPT09IDEwKSB7ICsrdGhpcy5wb3M7IH0gLy8gJ1xcclxcbidcbiAgY2FzZSAxMDogLy8gJyBcXG4nXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sb2NhdGlvbnMpIHsgdGhpcy5saW5lU3RhcnQgPSB0aGlzLnBvczsgKyt0aGlzLmN1ckxpbmU7IH1cbiAgICByZXR1cm4gXCJcIlxuICBjYXNlIDU2OlxuICBjYXNlIDU3OlxuICAgIGlmIChpblRlbXBsYXRlKSB7XG4gICAgICB2YXIgY29kZVBvcyA9IHRoaXMucG9zIC0gMTtcblxuICAgICAgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oXG4gICAgICAgIGNvZGVQb3MsXG4gICAgICAgIFwiSW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgaW4gdGVtcGxhdGUgc3RyaW5nXCJcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICBkZWZhdWx0OlxuICAgIGlmIChjaCA+PSA0OCAmJiBjaCA8PSA1NSkge1xuICAgICAgdmFyIG9jdGFsU3RyID0gdGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MgLSAxLCAzKS5tYXRjaCgvXlswLTddKy8pWzBdO1xuICAgICAgdmFyIG9jdGFsID0gcGFyc2VJbnQob2N0YWxTdHIsIDgpO1xuICAgICAgaWYgKG9jdGFsID4gMjU1KSB7XG4gICAgICAgIG9jdGFsU3RyID0gb2N0YWxTdHIuc2xpY2UoMCwgLTEpO1xuICAgICAgICBvY3RhbCA9IHBhcnNlSW50KG9jdGFsU3RyLCA4KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9zICs9IG9jdGFsU3RyLmxlbmd0aCAtIDE7XG4gICAgICBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgICBpZiAoKG9jdGFsU3RyICE9PSBcIjBcIiB8fCBjaCA9PT0gNTYgfHwgY2ggPT09IDU3KSAmJiAodGhpcy5zdHJpY3QgfHwgaW5UZW1wbGF0ZSkpIHtcbiAgICAgICAgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oXG4gICAgICAgICAgdGhpcy5wb3MgLSAxIC0gb2N0YWxTdHIubGVuZ3RoLFxuICAgICAgICAgIGluVGVtcGxhdGVcbiAgICAgICAgICAgID8gXCJPY3RhbCBsaXRlcmFsIGluIHRlbXBsYXRlIHN0cmluZ1wiXG4gICAgICAgICAgICA6IFwiT2N0YWwgbGl0ZXJhbCBpbiBzdHJpY3QgbW9kZVwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvY3RhbClcbiAgICB9XG4gICAgaWYgKGlzTmV3TGluZShjaCkpIHtcbiAgICAgIC8vIFVuaWNvZGUgbmV3IGxpbmUgY2hhcmFjdGVycyBhZnRlciBcXCBnZXQgcmVtb3ZlZCBmcm9tIG91dHB1dCBpbiBib3RoXG4gICAgICAvLyB0ZW1wbGF0ZSBsaXRlcmFscyBhbmQgc3RyaW5nc1xuICAgICAgcmV0dXJuIFwiXCJcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpXG4gIH1cbn07XG5cbi8vIFVzZWQgdG8gcmVhZCBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlcyAoJ1xceCcsICdcXHUnLCAnXFxVJykuXG5cbnBwJDkucmVhZEhleENoYXIgPSBmdW5jdGlvbihsZW4pIHtcbiAgdmFyIGNvZGVQb3MgPSB0aGlzLnBvcztcbiAgdmFyIG4gPSB0aGlzLnJlYWRJbnQoMTYsIGxlbik7XG4gIGlmIChuID09PSBudWxsKSB7IHRoaXMuaW52YWxpZFN0cmluZ1Rva2VuKGNvZGVQb3MsIFwiQmFkIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2VcIik7IH1cbiAgcmV0dXJuIG5cbn07XG5cbi8vIFJlYWQgYW4gaWRlbnRpZmllciwgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZy4gU2V0cyBgdGhpcy5jb250YWluc0VzY2Bcbi8vIHRvIHdoZXRoZXIgdGhlIHdvcmQgY29udGFpbmVkIGEgJ1xcdScgZXNjYXBlLlxuLy9cbi8vIEluY3JlbWVudGFsbHkgYWRkcyBvbmx5IGVzY2FwZWQgY2hhcnMsIGFkZGluZyBvdGhlciBjaHVua3MgYXMtaXNcbi8vIGFzIGEgbWljcm8tb3B0aW1pemF0aW9uLlxuXG5wcCQ5LnJlYWRXb3JkMSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmNvbnRhaW5zRXNjID0gZmFsc2U7XG4gIHZhciB3b3JkID0gXCJcIiwgZmlyc3QgPSB0cnVlLCBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gIHZhciBhc3RyYWwgPSB0aGlzLm9wdGlvbnMuZWNtYVZlcnNpb24gPj0gNjtcbiAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGgpIHtcbiAgICB2YXIgY2ggPSB0aGlzLmZ1bGxDaGFyQ29kZUF0UG9zKCk7XG4gICAgaWYgKGlzSWRlbnRpZmllckNoYXIoY2gsIGFzdHJhbCkpIHtcbiAgICAgIHRoaXMucG9zICs9IGNoIDw9IDB4ZmZmZiA/IDEgOiAyO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09IDkyKSB7IC8vIFwiXFxcIlxuICAgICAgdGhpcy5jb250YWluc0VzYyA9IHRydWU7XG4gICAgICB3b3JkICs9IHRoaXMuaW5wdXQuc2xpY2UoY2h1bmtTdGFydCwgdGhpcy5wb3MpO1xuICAgICAgdmFyIGVzY1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICBpZiAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KCsrdGhpcy5wb3MpICE9PSAxMTcpIC8vIFwidVwiXG4gICAgICAgIHsgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4odGhpcy5wb3MsIFwiRXhwZWN0aW5nIFVuaWNvZGUgZXNjYXBlIHNlcXVlbmNlIFxcXFx1WFhYWFwiKTsgfVxuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIHZhciBlc2MgPSB0aGlzLnJlYWRDb2RlUG9pbnQoKTtcbiAgICAgIGlmICghKGZpcnN0ID8gaXNJZGVudGlmaWVyU3RhcnQgOiBpc0lkZW50aWZpZXJDaGFyKShlc2MsIGFzdHJhbCkpXG4gICAgICAgIHsgdGhpcy5pbnZhbGlkU3RyaW5nVG9rZW4oZXNjU3RhcnQsIFwiSW52YWxpZCBVbmljb2RlIGVzY2FwZVwiKTsgfVxuICAgICAgd29yZCArPSBjb2RlUG9pbnRUb1N0cmluZyQxKGVzYyk7XG4gICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGZpcnN0ID0gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHdvcmQgKyB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKVxufTtcblxuLy8gUmVhZCBhbiBpZGVudGlmaWVyIG9yIGtleXdvcmQgdG9rZW4uIFdpbGwgY2hlY2sgZm9yIHJlc2VydmVkXG4vLyB3b3JkcyB3aGVuIG5lY2Vzc2FyeS5cblxucHAkOS5yZWFkV29yZCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgd29yZCA9IHRoaXMucmVhZFdvcmQxKCk7XG4gIHZhciB0eXBlID0gdHlwZXMubmFtZTtcbiAgaWYgKHRoaXMua2V5d29yZHMudGVzdCh3b3JkKSkge1xuICAgIHR5cGUgPSBrZXl3b3JkcyQxW3dvcmRdO1xuICB9XG4gIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR5cGUsIHdvcmQpXG59O1xuXG4vLyBBY29ybiBpcyBhIHRpbnksIGZhc3QgSmF2YVNjcmlwdCBwYXJzZXIgd3JpdHRlbiBpbiBKYXZhU2NyaXB0LlxuXG52YXIgdmVyc2lvbiA9IFwiNy40LjFcIjtcblxuUGFyc2VyLmFjb3JuID0ge1xuICBQYXJzZXI6IFBhcnNlcixcbiAgdmVyc2lvbjogdmVyc2lvbixcbiAgZGVmYXVsdE9wdGlvbnM6IGRlZmF1bHRPcHRpb25zLFxuICBQb3NpdGlvbjogUG9zaXRpb24sXG4gIFNvdXJjZUxvY2F0aW9uOiBTb3VyY2VMb2NhdGlvbixcbiAgZ2V0TGluZUluZm86IGdldExpbmVJbmZvLFxuICBOb2RlOiBOb2RlLFxuICBUb2tlblR5cGU6IFRva2VuVHlwZSxcbiAgdG9rVHlwZXM6IHR5cGVzLFxuICBrZXl3b3JkVHlwZXM6IGtleXdvcmRzJDEsXG4gIFRva0NvbnRleHQ6IFRva0NvbnRleHQsXG4gIHRva0NvbnRleHRzOiB0eXBlcyQxLFxuICBpc0lkZW50aWZpZXJDaGFyOiBpc0lkZW50aWZpZXJDaGFyLFxuICBpc0lkZW50aWZpZXJTdGFydDogaXNJZGVudGlmaWVyU3RhcnQsXG4gIFRva2VuOiBUb2tlbixcbiAgaXNOZXdMaW5lOiBpc05ld0xpbmUsXG4gIGxpbmVCcmVhazogbGluZUJyZWFrLFxuICBsaW5lQnJlYWtHOiBsaW5lQnJlYWtHLFxuICBub25BU0NJSXdoaXRlc3BhY2U6IG5vbkFTQ0lJd2hpdGVzcGFjZVxufTtcblxuLy8gVGhlIG1haW4gZXhwb3J0ZWQgaW50ZXJmYWNlICh1bmRlciBgc2VsZi5hY29ybmAgd2hlbiBpbiB0aGVcbi8vIGJyb3dzZXIpIGlzIGEgYHBhcnNlYCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY29kZSBzdHJpbmcgYW5kXG4vLyByZXR1cm5zIGFuIGFic3RyYWN0IHN5bnRheCB0cmVlIGFzIHNwZWNpZmllZCBieSBbTW96aWxsYSBwYXJzZXJcbi8vIEFQSV1bYXBpXS5cbi8vXG4vLyBbYXBpXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9TcGlkZXJNb25rZXkvUGFyc2VyX0FQSVxuXG5mdW5jdGlvbiBwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gUGFyc2VyLnBhcnNlKGlucHV0LCBvcHRpb25zKVxufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHBhcnNlIGEgc2luZ2xlIGV4cHJlc3Npb24gYXQgYSBnaXZlblxuLy8gb2Zmc2V0IGluIGEgc3RyaW5nLiBVc2VmdWwgZm9yIHBhcnNpbmcgbWl4ZWQtbGFuZ3VhZ2UgZm9ybWF0c1xuLy8gdGhhdCBlbWJlZCBKYXZhU2NyaXB0IGV4cHJlc3Npb25zLlxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25BdChpbnB1dCwgcG9zLCBvcHRpb25zKSB7XG4gIHJldHVybiBQYXJzZXIucGFyc2VFeHByZXNzaW9uQXQoaW5wdXQsIHBvcywgb3B0aW9ucylcbn1cblxuLy8gQWNvcm4gaXMgb3JnYW5pemVkIGFzIGEgdG9rZW5pemVyIGFuZCBhIHJlY3Vyc2l2ZS1kZXNjZW50IHBhcnNlci5cbi8vIFRoZSBgdG9rZW5pemVyYCBleHBvcnQgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSB0b2tlbml6ZXIuXG5cbmZ1bmN0aW9uIHRva2VuaXplcihpbnB1dCwgb3B0aW9ucykge1xuICByZXR1cm4gUGFyc2VyLnRva2VuaXplcihpbnB1dCwgb3B0aW9ucylcbn1cblxuZXhwb3J0IHsgTm9kZSwgUGFyc2VyLCBQb3NpdGlvbiwgU291cmNlTG9jYXRpb24sIFRva0NvbnRleHQsIFRva2VuLCBUb2tlblR5cGUsIGRlZmF1bHRPcHRpb25zLCBnZXRMaW5lSW5mbywgaXNJZGVudGlmaWVyQ2hhciwgaXNJZGVudGlmaWVyU3RhcnQsIGlzTmV3TGluZSwga2V5d29yZHMkMSBhcyBrZXl3b3JkVHlwZXMsIGxpbmVCcmVhaywgbGluZUJyZWFrRywgbm9uQVNDSUl3aGl0ZXNwYWNlLCBwYXJzZSwgcGFyc2VFeHByZXNzaW9uQXQsIHR5cGVzJDEgYXMgdG9rQ29udGV4dHMsIHR5cGVzIGFzIHRva1R5cGVzLCB0b2tlbml6ZXIsIHZlcnNpb24gfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///271\n')},274: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanM/ZDM3YSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiMjc0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///274\n')},275: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vbWVtb2l6ZS9kaXN0L21lbW9pemUuYnJvd3Nlci5lc20uanM/YTUyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZSxnRUFBTyxFQUFDIiwiZmlsZSI6IjI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIG1lbW9pemUoZm4pIHtcbiAgdmFyIGNhY2hlID0ge307XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///275\n')},276: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2hlZXQvZGlzdC9zaGVldC5icm93c2VyLmVzbS5qcz80MjhhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxRQUFRLGFBQWE7O0FBRXJCLGlDQUFpQyxvQ0FBb0M7O0FBRXJFLHlCQUF5Qix1QkFBdUIsRUFBRTtBQUNsRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7OztBQUdBLGlCQUFpQixpQ0FBaUM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELFlBQW9CO0FBQ3ZFO0FBQ0E7QUFDQSwrQkFBK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRjtBQUNuRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxZQUFZLEtBQXFDLEVBQUUsRUFFMUM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFcUIiLCJmaWxlIjoiMjc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCDinaTvuI9cblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cbi8vICRGbG93Rml4TWVcbmZ1bmN0aW9uIHNoZWV0Rm9yVGFnKHRhZykge1xuICBpZiAodGFnLnNoZWV0KSB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nLCBvcHRpb25zLmtleSk7XG5cbiAgaWYgKG9wdGlvbnMubm9uY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgb3B0aW9ucy5ub25jZSk7XG4gIH1cblxuICB0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPVxuLyojX19QVVJFX18qL1xuZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHlsZVNoZWV0KG9wdGlvbnMpIHtcbiAgICB0aGlzLmlzU3BlZWR5ID0gb3B0aW9ucy5zcGVlZHkgPT09IHVuZGVmaW5lZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgIC8vIHRoZSBtYXggbGVuZ3RoIGlzIGhvdyBtYW55IHJ1bGVzIHdlIGhhdmUgcGVyIHN0eWxlIHRhZywgaXQncyA2NTAwMCBpbiBzcGVlZHkgbW9kZVxuICAgIC8vIGl0J3MgMSBpbiBkZXYgYmVjYXVzZSB3ZSBpbnNlcnQgc291cmNlIG1hcHMgdGhhdCBtYXAgYSBzaW5nbGUgcnVsZSB0byBhIGxvY2F0aW9uXG4gICAgLy8gYW5kIHlvdSBjYW4gb25seSBoYXZlIG9uZSBzb3VyY2UgbWFwIHBlciBzdHlsZSB0YWdcbiAgICBpZiAodGhpcy5jdHIgJSAodGhpcy5pc1NwZWVkeSA/IDY1MDAwIDogMSkgPT09IDApIHtcbiAgICAgIHZhciBfdGFnID0gY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpO1xuXG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAodGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBiZWZvcmUgPSB0aGlzLmJlZm9yZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJlZm9yZSA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGFpbmVyLmluc2VydEJlZm9yZShfdGFnLCBiZWZvcmUpO1xuICAgICAgdGhpcy50YWdzLnB1c2goX3RhZyk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIHJlYWxseSBob3QgcGF0aFxuICAgICAgICAvLyB3ZSBjaGVjayB0aGUgc2Vjb25kIGNoYXJhY3RlciBmaXJzdCBiZWNhdXNlIGhhdmluZyBcImlcIlxuICAgICAgICAvLyBhcyB0aGUgc2Vjb25kIGNoYXJhY3RlciB3aWxsIGhhcHBlbiBsZXNzIG9mdGVuIHRoYW5cbiAgICAgICAgLy8gaGF2aW5nIFwiQFwiIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXJcbiAgICAgICAgdmFyIGlzSW1wb3J0UnVsZSA9IHJ1bGUuY2hhckNvZGVBdCgxKSA9PT0gMTA1ICYmIHJ1bGUuY2hhckNvZGVBdCgwKSA9PT0gNjQ7IC8vIHRoaXMgaXMgdGhlIHVsdHJhZmFzdCB2ZXJzaW9uLCB3b3JrcyBhY3Jvc3MgYnJvd3NlcnNcbiAgICAgICAgLy8gdGhlIGJpZyBkcmF3YmFjayBpcyB0aGF0IHRoZSBjc3Mgd29uJ3QgYmUgZWRpdGFibGUgaW4gZGV2dG9vbHNcblxuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIC8vIHdlIG5lZWQgdG8gaW5zZXJ0IEBpbXBvcnQgcnVsZXMgYmVmb3JlIGFueXRoaW5nIGVsc2VcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRoZXJlIHdpbGwgYmUgYW4gZXJyb3JcbiAgICAgICAgLy8gdGVjaG5pY2FsbHkgdGhpcyBtZWFucyB0aGF0IHRoZSBAaW1wb3J0IHJ1bGVzIHdpbGxcbiAgICAgICAgLy8gX3VzdWFsbHlfKG5vdCBhbHdheXMgc2luY2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgc3R5bGUgdGFncylcbiAgICAgICAgLy8gYmUgdGhlIGZpcnN0IG9uZXMgaW4gcHJvZCBhbmQgZ2VuZXJhbGx5IGxhdGVyIGluIGRldlxuICAgICAgICAvLyB0aGlzIHNob3VsZG4ndCByZWFsbHkgbWF0dGVyIGluIHRoZSByZWFsIHdvcmxkIHRob3VnaFxuICAgICAgICAvLyBAaW1wb3J0IGlzIGdlbmVyYWxseSBvbmx5IHVzZWQgZm9yIGZvbnQgZmFjZXMgZnJvbSBnb29nbGUgZm9udHMgYW5kIGV0Yy5cbiAgICAgICAgLy8gc28gd2hpbGUgdGhpcyBjb3VsZCBiZSB0ZWNobmljYWxseSBjb3JyZWN0IHRoZW4gaXQgd291bGQgYmUgc2xvd2VyIGFuZCBsYXJnZXJcbiAgICAgICAgLy8gZm9yIGEgdGlueSBiaXQgb2YgY29ycmVjdG5lc3MgdGhhdCB3b24ndCBtYXR0ZXIgaW4gdGhlIHJlYWwgd29ybGRcbiAgICAgICAgaXNJbXBvcnRSdWxlID8gMCA6IHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiVGhlcmUgd2FzIGEgcHJvYmxlbSBpbnNlcnRpbmcgdGhlIGZvbGxvd2luZyBydWxlOiBcXFwiXCIgKyBydWxlICsgXCJcXFwiXCIsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy50YWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgcmV0dXJuIHRhZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///276\n")},277: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vd2Vhay1tZW1vaXplL2Rpc3Qvd2Vhay1tZW1vaXplLmJyb3dzZXIuZXNtLmpzPzNhZDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVlLG9FQUFXLEVBQUMiLCJmaWxlIjoiMjc3LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIHdlYWtNZW1vaXplID0gZnVuY3Rpb24gd2Vha01lbW9pemUoZnVuYykge1xuICAvLyAkRmxvd0ZpeE1lIGZsb3cgZG9lc24ndCBpbmNsdWRlIGFsbCBub24tcHJpbWl0aXZlIHR5cGVzIGFzIGFsbG93ZWQgZm9yIHdlYWttYXBzXG4gIHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlLmhhcyhhcmcpKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGFyZyk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IGZ1bmMoYXJnKTtcbiAgICBjYWNoZS5zZXQoYXJnLCByZXQpO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3ZWFrTWVtb2l6ZTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///277\n')},278: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdW5pdGxlc3MvZGlzdC91bml0bGVzcy5icm93c2VyLmVzbS5qcz8xYTlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFZSxxRUFBWSxFQUFDIiwiZmlsZSI6IjI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBib3JkZXJJbWFnZU91dHNldDogMSxcbiAgYm9yZGVySW1hZ2VTbGljZTogMSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogMSxcbiAgYm94RmxleDogMSxcbiAgYm94RmxleEdyb3VwOiAxLFxuICBib3hPcmRpbmFsR3JvdXA6IDEsXG4gIGNvbHVtbkNvdW50OiAxLFxuICBjb2x1bW5zOiAxLFxuICBmbGV4OiAxLFxuICBmbGV4R3JvdzogMSxcbiAgZmxleFBvc2l0aXZlOiAxLFxuICBmbGV4U2hyaW5rOiAxLFxuICBmbGV4TmVnYXRpdmU6IDEsXG4gIGZsZXhPcmRlcjogMSxcbiAgZ3JpZFJvdzogMSxcbiAgZ3JpZFJvd0VuZDogMSxcbiAgZ3JpZFJvd1NwYW46IDEsXG4gIGdyaWRSb3dTdGFydDogMSxcbiAgZ3JpZENvbHVtbjogMSxcbiAgZ3JpZENvbHVtbkVuZDogMSxcbiAgZ3JpZENvbHVtblNwYW46IDEsXG4gIGdyaWRDb2x1bW5TdGFydDogMSxcbiAgbXNHcmlkUm93OiAxLFxuICBtc0dyaWRSb3dTcGFuOiAxLFxuICBtc0dyaWRDb2x1bW46IDEsXG4gIG1zR3JpZENvbHVtblNwYW46IDEsXG4gIGZvbnRXZWlnaHQ6IDEsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG9wYWNpdHk6IDEsXG4gIG9yZGVyOiAxLFxuICBvcnBoYW5zOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCB1bml0bGVzc0tleXM7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///278\n')},31: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__, "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__, "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__, "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__, "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; });\nvar events; // Enables: `import Events from ...`\n\n(function (events) {\n events["CHANNEL_CREATED"] = "channelCreated";\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["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["UPDATE_STORY_ARGS"] = "updateStoryArgs";\n events["STORY_ARGS_UPDATED"] = "storyArgsUpdated";\n events["RESET_STORY_ARGS"] = "resetStoryArgs";\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 || (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 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 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 UPDATE_STORY_ARGS = events.UPDATE_STORY_ARGS,\n STORY_ARGS_UPDATED = events.STORY_ARGS_UPDATED,\n RESET_STORY_ARGS = events.RESET_STORY_ARGS,\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//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jb3JlLWV2ZW50cy9kaXN0L2VzbS9pbmRleC5qcz83NWFkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFdBQVc7O0FBRVg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyx3QkFBd0I7O0FBRVYscUVBQU0sRUFBQyx1REFBdUQsa0JBQWtCO0FBQy9GOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZXZlbnRzOyAvLyBFbmFibGVzOiBgaW1wb3J0IEV2ZW50cyBmcm9tIC4uLmBcblxuKGZ1bmN0aW9uIChldmVudHMpIHtcbiAgZXZlbnRzW1wiQ0hBTk5FTF9DUkVBVEVEXCJdID0gXCJjaGFubmVsQ3JlYXRlZFwiO1xuICBldmVudHNbXCJTVE9SWV9TUEVDSUZJRURcIl0gPSBcInN0b3J5U3BlY2lmaWVkXCI7XG4gIGV2ZW50c1tcIlNFVF9TVE9SSUVTXCJdID0gXCJzZXRTdG9yaWVzXCI7XG4gIGV2ZW50c1tcIlNFVF9DVVJSRU5UX1NUT1JZXCJdID0gXCJzZXRDdXJyZW50U3RvcnlcIjtcbiAgZXZlbnRzW1wiQ1VSUkVOVF9TVE9SWV9XQVNfU0VUXCJdID0gXCJjdXJyZW50U3RvcnlXYXNTZXRcIjtcbiAgZXZlbnRzW1wiRk9SQ0VfUkVfUkVOREVSXCJdID0gXCJmb3JjZVJlUmVuZGVyXCI7XG4gIGV2ZW50c1tcIlNUT1JZX0NIQU5HRURcIl0gPSBcInN0b3J5Q2hhbmdlZFwiO1xuICBldmVudHNbXCJTVE9SWV9VTkNIQU5HRURcIl0gPSBcInN0b3J5VW5jaGFuZ2VkXCI7XG4gIGV2ZW50c1tcIlNUT1JZX1JFTkRFUkVEXCJdID0gXCJzdG9yeVJlbmRlcmVkXCI7XG4gIGV2ZW50c1tcIlNUT1JZX01JU1NJTkdcIl0gPSBcInN0b3J5TWlzc2luZ1wiO1xuICBldmVudHNbXCJTVE9SWV9FUlJPUkVEXCJdID0gXCJzdG9yeUVycm9yZWRcIjtcbiAgZXZlbnRzW1wiU1RPUllfVEhSRVdfRVhDRVBUSU9OXCJdID0gXCJzdG9yeVRocmV3RXhjZXB0aW9uXCI7XG4gIGV2ZW50c1tcIlVQREFURV9TVE9SWV9BUkdTXCJdID0gXCJ1cGRhdGVTdG9yeUFyZ3NcIjtcbiAgZXZlbnRzW1wiU1RPUllfQVJHU19VUERBVEVEXCJdID0gXCJzdG9yeUFyZ3NVcGRhdGVkXCI7XG4gIGV2ZW50c1tcIlJFU0VUX1NUT1JZX0FSR1NcIl0gPSBcInJlc2V0U3RvcnlBcmdzXCI7XG4gIGV2ZW50c1tcIlVQREFURV9HTE9CQUxTXCJdID0gXCJ1cGRhdGVHbG9iYWxzXCI7XG4gIGV2ZW50c1tcIkdMT0JBTFNfVVBEQVRFRFwiXSA9IFwiZ2xvYmFsc1VwZGF0ZWRcIjtcbiAgZXZlbnRzW1wiUkVHSVNURVJfU1VCU0NSSVBUSU9OXCJdID0gXCJyZWdpc3RlclN1YnNjcmlwdGlvblwiO1xuICBldmVudHNbXCJQUkVWSUVXX0tFWURPV05cIl0gPSBcInByZXZpZXdLZXlkb3duXCI7XG4gIGV2ZW50c1tcIlNFTEVDVF9TVE9SWVwiXSA9IFwic2VsZWN0U3RvcnlcIjtcbiAgZXZlbnRzW1wiU1RPUklFU19DT0xMQVBTRV9BTExcIl0gPSBcInN0b3JpZXNDb2xsYXBzZUFsbFwiO1xuICBldmVudHNbXCJTVE9SSUVTX0VYUEFORF9BTExcIl0gPSBcInN0b3JpZXNFeHBhbmRBbGxcIjtcbiAgZXZlbnRzW1wiRE9DU19SRU5ERVJFRFwiXSA9IFwiZG9jc1JlbmRlcmVkXCI7XG4gIGV2ZW50c1tcIlNIQVJFRF9TVEFURV9DSEFOR0VEXCJdID0gXCJzaGFyZWRTdGF0ZUNoYW5nZWRcIjtcbiAgZXZlbnRzW1wiU0hBUkVEX1NUQVRFX1NFVFwiXSA9IFwic2hhcmVkU3RhdGVTZXRcIjtcbiAgZXZlbnRzW1wiTkFWSUdBVEVfVVJMXCJdID0gXCJuYXZpZ2F0ZVVybFwiO1xufSkoZXZlbnRzIHx8IChldmVudHMgPSB7fSkpO1xuXG5leHBvcnQgZGVmYXVsdCBldmVudHM7IC8vIEVuYWJsZXM6IGBpbXBvcnQgKiBhcyBFdmVudHMgZnJvbSAuLi5gIG9yIGBpbXBvcnQgeyBDSEFOTkVMX0NSRUFURUQgfSBhcyBFdmVudHMgZnJvbSAuLi5gXG4vLyBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kXG5cbnZhciBDSEFOTkVMX0NSRUFURUQgPSBldmVudHMuQ0hBTk5FTF9DUkVBVEVELFxuICAgIFNUT1JZX1NQRUNJRklFRCA9IGV2ZW50cy5TVE9SWV9TUEVDSUZJRUQsXG4gICAgU0VUX1NUT1JJRVMgPSBldmVudHMuU0VUX1NUT1JJRVMsXG4gICAgU0VUX0NVUlJFTlRfU1RPUlkgPSBldmVudHMuU0VUX0NVUlJFTlRfU1RPUlksXG4gICAgQ1VSUkVOVF9TVE9SWV9XQVNfU0VUID0gZXZlbnRzLkNVUlJFTlRfU1RPUllfV0FTX1NFVCxcbiAgICBGT1JDRV9SRV9SRU5ERVIgPSBldmVudHMuRk9SQ0VfUkVfUkVOREVSLFxuICAgIFNUT1JZX0NIQU5HRUQgPSBldmVudHMuU1RPUllfQ0hBTkdFRCxcbiAgICBTVE9SWV9VTkNIQU5HRUQgPSBldmVudHMuU1RPUllfVU5DSEFOR0VELFxuICAgIFNUT1JZX1JFTkRFUkVEID0gZXZlbnRzLlNUT1JZX1JFTkRFUkVELFxuICAgIFNUT1JZX01JU1NJTkcgPSBldmVudHMuU1RPUllfTUlTU0lORyxcbiAgICBTVE9SWV9FUlJPUkVEID0gZXZlbnRzLlNUT1JZX0VSUk9SRUQsXG4gICAgU1RPUllfVEhSRVdfRVhDRVBUSU9OID0gZXZlbnRzLlNUT1JZX1RIUkVXX0VYQ0VQVElPTixcbiAgICBVUERBVEVfU1RPUllfQVJHUyA9IGV2ZW50cy5VUERBVEVfU1RPUllfQVJHUyxcbiAgICBTVE9SWV9BUkdTX1VQREFURUQgPSBldmVudHMuU1RPUllfQVJHU19VUERBVEVELFxuICAgIFJFU0VUX1NUT1JZX0FSR1MgPSBldmVudHMuUkVTRVRfU1RPUllfQVJHUyxcbiAgICBVUERBVEVfR0xPQkFMUyA9IGV2ZW50cy5VUERBVEVfR0xPQkFMUyxcbiAgICBHTE9CQUxTX1VQREFURUQgPSBldmVudHMuR0xPQkFMU19VUERBVEVELFxuICAgIFJFR0lTVEVSX1NVQlNDUklQVElPTiA9IGV2ZW50cy5SRUdJU1RFUl9TVUJTQ1JJUFRJT04sXG4gICAgUFJFVklFV19LRVlET1dOID0gZXZlbnRzLlBSRVZJRVdfS0VZRE9XTixcbiAgICBTRUxFQ1RfU1RPUlkgPSBldmVudHMuU0VMRUNUX1NUT1JZLFxuICAgIFNUT1JJRVNfQ09MTEFQU0VfQUxMID0gZXZlbnRzLlNUT1JJRVNfQ09MTEFQU0VfQUxMLFxuICAgIFNUT1JJRVNfRVhQQU5EX0FMTCA9IGV2ZW50cy5TVE9SSUVTX0VYUEFORF9BTEwsXG4gICAgRE9DU19SRU5ERVJFRCA9IGV2ZW50cy5ET0NTX1JFTkRFUkVELFxuICAgIFNIQVJFRF9TVEFURV9DSEFOR0VEID0gZXZlbnRzLlNIQVJFRF9TVEFURV9DSEFOR0VELFxuICAgIFNIQVJFRF9TVEFURV9TRVQgPSBldmVudHMuU0hBUkVEX1NUQVRFX1NFVCxcbiAgICBOQVZJR0FURV9VUkwgPSBldmVudHMuTkFWSUdBVEVfVVJMO1xuZXhwb3J0IHsgQ0hBTk5FTF9DUkVBVEVELCBTVE9SWV9TUEVDSUZJRUQsIFNFVF9TVE9SSUVTLCBTRVRfQ1VSUkVOVF9TVE9SWSwgQ1VSUkVOVF9TVE9SWV9XQVNfU0VULCBGT1JDRV9SRV9SRU5ERVIsIFNUT1JZX0NIQU5HRUQsIFNUT1JZX1VOQ0hBTkdFRCwgU1RPUllfUkVOREVSRUQsIFNUT1JZX01JU1NJTkcsIFNUT1JZX0VSUk9SRUQsIFNUT1JZX1RIUkVXX0VYQ0VQVElPTiwgVVBEQVRFX1NUT1JZX0FSR1MsIFNUT1JZX0FSR1NfVVBEQVRFRCwgUkVTRVRfU1RPUllfQVJHUywgVVBEQVRFX0dMT0JBTFMsIEdMT0JBTFNfVVBEQVRFRCwgUkVHSVNURVJfU1VCU0NSSVBUSU9OLCBQUkVWSUVXX0tFWURPV04sIFNFTEVDVF9TVE9SWSwgU1RPUklFU19DT0xMQVBTRV9BTEwsIFNUT1JJRVNfRVhQQU5EX0FMTCwgRE9DU19SRU5ERVJFRCwgU0hBUkVEX1NUQVRFX0NIQU5HRUQsIFNIQVJFRF9TVEFURV9TRVQsIE5BVklHQVRFX1VSTCB9OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n')},369:function(module,__webpack_exports__,__webpack_require__){"use strict";eval("\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/@emotion/sheet/dist/sheet.browser.esm.js\nvar sheet_browser_esm = __webpack_require__(276);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js\nvar weak_memoize_browser_esm = __webpack_require__(277);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc3R5bGlzL2Rpc3Qvc3R5bGlzLmJyb3dzZXIuZXNtLmpzPzQ0ZGEiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BlbW90aW9uL2NhY2hlL2Rpc3QvY2FjaGUuYnJvd3Nlci5lc20uanM/ZThiZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQSx5S0FBeUssT0FBTztBQUNoTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5QixPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLE9BQU87QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCLGtDQUFrQztBQUMxRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixVQUFVO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQSw4QkFBOEIsVUFBVTtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixVQUFVOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQyxPQUFPO0FB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TTs7QUFFekIsTUFBTSxLQUFxQyxFQUFFLEVBSzFDOztBQUVILG9CQUFvQjs7QUFFcEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQXFFLEVBQUUsWUFPMUU7O0FBRVA7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLEtBQXFDLEVBQUUsaUNBOEMxQzs7QUFFSDtBQUNBO0FBQ0EsZUFBZSx1Q0FBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVlLDhHQUFXLEVBQUMiLCJmaWxlIjoiMzY5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gc3R5bGlzX21pbiAoVykge1xuICBmdW5jdGlvbiBNKGQsIGMsIGUsIGgsIGEpIHtcbiAgICBmb3IgKHZhciBtID0gMCwgYiA9IDAsIHYgPSAwLCBuID0gMCwgcSwgZywgeCA9IDAsIEsgPSAwLCBrLCB1ID0gayA9IHEgPSAwLCBsID0gMCwgciA9IDAsIEkgPSAwLCB0ID0gMCwgQiA9IGUubGVuZ3RoLCBKID0gQiAtIDEsIHksIGYgPSAnJywgcCA9ICcnLCBGID0gJycsIEcgPSAnJywgQzsgbCA8IEI7KSB7XG4gICAgICBnID0gZS5jaGFyQ29kZUF0KGwpO1xuICAgICAgbCA9PT0gSiAmJiAwICE9PSBiICsgbiArIHYgKyBtICYmICgwICE9PSBiICYmIChnID0gNDcgPT09IGIgPyAxMCA6IDQ3KSwgbiA9IHYgPSBtID0gMCwgQisrLCBKKyspO1xuXG4gICAgICBpZiAoMCA9PT0gYiArIG4gKyB2ICsgbSkge1xuICAgICAgICBpZiAobCA9PT0gSiAmJiAoMCA8IHIgJiYgKGYgPSBmLnJlcGxhY2UoTiwgJycpKSwgMCA8IGYudHJpbSgpLmxlbmd0aCkpIHtcbiAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICBjYXNlIDU5OlxuICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBmICs9IGUuY2hhckF0KGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGcgPSA1OTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoZykge1xuICAgICAgICAgIGNhc2UgMTIzOlxuICAgICAgICAgICAgZiA9IGYudHJpbSgpO1xuICAgICAgICAgICAgcSA9IGYuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgIGsgPSAxO1xuXG4gICAgICAgICAgICBmb3IgKHQgPSArK2w7IGwgPCBCOykge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGcgPSBlLmNoYXJDb2RlQXQobCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDEyMzpcbiAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgICAgICAgICBrLS07XG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICBzd2l0Y2ggKGcgPSBlLmNoYXJDb2RlQXQobCArIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDc6XG4gICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gbCArIDE7IHUgPCBKOyArK3UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLmNoYXJDb2RlQXQodSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDQyID09PSBnICYmIDQyID09PSBlLmNoYXJDb2RlQXQodSAtIDEpICYmIGwgKyAyICE9PSB1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDQ3ID09PSBnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSB1O1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgOTE6XG4gICAgICAgICAgICAgICAgICBnKys7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgZysrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgZm9yICg7IGwrKyA8IEogJiYgZS5jaGFyQ29kZUF0KGwpICE9PSBnOykge1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoMCA9PT0gaykgYnJlYWs7XG4gICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgayA9IGUuc3Vic3RyaW5nKHQsIGwpO1xuICAgICAgICAgICAgMCA9PT0gcSAmJiAocSA9IChmID0gZi5yZXBsYWNlKGNhLCAnJykudHJpbSgpKS5jaGFyQ29kZUF0KDApKTtcblxuICAgICAgICAgICAgc3dpdGNoIChxKSB7XG4gICAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgICAgMCA8IHIgJiYgKGYgPSBmLnJlcGxhY2UoTiwgJycpKTtcbiAgICAgICAgICAgICAgICBnID0gZi5jaGFyQ29kZUF0KDEpO1xuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA5OlxuICAgICAgICAgICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgICAgICAgICByID0gYztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHIgPSBPO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGsgPSBNKGMsIHIsIGssIGcsIGEgKyAxKTtcbiAgICAgICAgICAgICAgICB0ID0gay5sZW5ndGg7XG4gICAgICAgICAgICAgICAgMCA8IEEgJiYgKHIgPSBYKE8sIGYsIEkpLCBDID0gSCgzLCBrLCByLCBjLCBELCB6LCB0LCBnLCBhLCBoKSwgZiA9IHIuam9pbignJyksIHZvaWQgMCAhPT0gQyAmJiAwID09PSAodCA9IChrID0gQy50cmltKCkpLmxlbmd0aCkgJiYgKGcgPSAwLCBrID0gJycpKTtcbiAgICAgICAgICAgICAgICBpZiAoMCA8IHQpIHN3aXRjaCAoZykge1xuICAgICAgICAgICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICAgICAgICAgIGYgPSBmLnJlcGxhY2UoZGEsIGVhKTtcblxuICAgICAgICAgICAgICAgICAgY2FzZSAxMDA6XG4gICAgICAgICAgICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAgICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgJ3snICsgayArICd9JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgICAgICAgICAgICBmID0gZi5yZXBsYWNlKGZhLCAnJDEgJDInKTtcbiAgICAgICAgICAgICAgICAgICAgayA9IGYgKyAneycgKyBrICsgJ30nO1xuICAgICAgICAgICAgICAgICAgICBrID0gMSA9PT0gdyB8fCAyID09PSB3ICYmIEwoJ0AnICsgaywgMykgPyAnQC13ZWJraXQtJyArIGsgKyAnQCcgKyBrIDogJ0AnICsgaztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGsgPSBmICsgaywgMTEyID09PSBoICYmIChrID0gKHAgKz0gaywgJycpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgayA9ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgayA9IE0oYywgWChjLCBmLCBJKSwgaywgaCwgYSArIDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBGICs9IGs7XG4gICAgICAgICAgICBrID0gSSA9IHIgPSB1ID0gcSA9IDA7XG4gICAgICAgICAgICBmID0gJyc7XG4gICAgICAgICAgICBnID0gZS5jaGFyQ29kZUF0KCsrbCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTI1OlxuICAgICAgICAgIGNhc2UgNTk6XG4gICAgICAgICAgICBmID0gKDAgPCByID8gZi5yZXBsYWNlKE4sICcnKSA6IGYpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICgxIDwgKHQgPSBmLmxlbmd0aCkpIHN3aXRjaCAoMCA9PT0gdSAmJiAocSA9IGYuY2hhckNvZGVBdCgwKSwgNDUgPT09IHEgfHwgOTYgPCBxICYmIDEyMyA+IHEpICYmICh0ID0gKGYgPSBmLnJlcGxhY2UoJyAnLCAnOicpKS5sZW5ndGgpLCAwIDwgQSAmJiB2b2lkIDAgIT09IChDID0gSCgxLCBmLCBjLCBkLCBELCB6LCBwLmxlbmd0aCwgaCwgYSwgaCkpICYmIDAgPT09ICh0ID0gKGYgPSBDLnRyaW0oKSkubGVuZ3RoKSAmJiAoZiA9ICdcXHgwMFxceDAwJyksIHEgPSBmLmNoYXJDb2RlQXQoMCksIGcgPSBmLmNoYXJDb2RlQXQoMSksIHEpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgICAgaWYgKDEwNSA9PT0gZyB8fCA5OSA9PT0gZykge1xuICAgICAgICAgICAgICAgICAgRyArPSBmICsgZS5jaGFyQXQobCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICA1OCAhPT0gZi5jaGFyQ29kZUF0KHQgLSAxKSAmJiAocCArPSBQKGYsIHEsIGcsIGYuY2hhckNvZGVBdCgyKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSSA9IHIgPSB1ID0gcSA9IDA7XG4gICAgICAgICAgICBmID0gJyc7XG4gICAgICAgICAgICBnID0gZS5jaGFyQ29kZUF0KCsrbCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChnKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgNDcgPT09IGIgPyBiID0gMCA6IDAgPT09IDEgKyBxICYmIDEwNyAhPT0gaCAmJiAwIDwgZi5sZW5ndGggJiYgKHIgPSAxLCBmICs9ICdcXHgwMCcpO1xuICAgICAgICAgIDAgPCBBICogWSAmJiBIKDAsIGYsIGMsIGQsIEQsIHosIHAubGVuZ3RoLCBoLCBhLCBoKTtcbiAgICAgICAgICB6ID0gMTtcbiAgICAgICAgICBEKys7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgY2FzZSAxMjU6XG4gICAgICAgICAgaWYgKDAgPT09IGIgKyBuICsgdiArIG0pIHtcbiAgICAgICAgICAgIHorKztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHorKztcbiAgICAgICAgICB5ID0gZS5jaGFyQXQobCk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGcpIHtcbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICAgIGlmICgwID09PSBuICsgbSArIGIpIHN3aXRjaCAoeCkge1xuICAgICAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1ODpcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgICAgICAgIHkgPSAnJztcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIDMyICE9PSBnICYmICh5ID0gJyAnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICB5ID0gJ1xcXFwwJztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgIHkgPSAnXFxcXGYnO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgeSA9ICdcXFxcdic7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgKHIgPSBJID0gMSwgeSA9ICdcXGYnICsgeSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBiICsgbSArIEUgJiYgMCA8IHUpIHN3aXRjaCAobCAtIHUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAxMTIgPT09IHggJiYgNTggPT09IGUuY2hhckNvZGVBdChsIC0gMykgJiYgKEUgPSB4KTtcblxuICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgIDExMSA9PT0gSyAmJiAoRSA9IEspO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgKHUgPSBsKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgIDAgPT09IGIgKyB2ICsgbiArIG0gJiYgKHIgPSAxLCB5ICs9ICdcXHInKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAwID09PSBiICYmIChuID0gbiA9PT0gZyA/IDAgOiAwID09PSBuID8gZyA6IG4pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgMCA9PT0gbiArIGIgKyB2ICYmIG0rKztcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTM6XG4gICAgICAgICAgICAgIDAgPT09IG4gKyBiICsgdiAmJiBtLS07XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDQxOlxuICAgICAgICAgICAgICAwID09PSBuICsgYiArIG0gJiYgdi0tO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgICAgaWYgKDAgPT09IG4gKyBiICsgbSkge1xuICAgICAgICAgICAgICAgIGlmICgwID09PSBxKSBzd2l0Y2ggKDIgKiB4ICsgMyAqIEspIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgNTMzOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHYrKztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgICAwID09PSBiICsgdiArIG4gKyBtICsgdSArIGsgJiYgKGsgPSAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICBjYXNlIDQ3OlxuICAgICAgICAgICAgICBpZiAoISgwIDwgbiArIG0gKyB2KSkgc3dpdGNoIChiKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgc3dpdGNoICgyICogZyArIDMgKiBlLmNoYXJDb2RlQXQobCArIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjM1OlxuICAgICAgICAgICAgICAgICAgICAgIGIgPSA0NztcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDIyMDpcbiAgICAgICAgICAgICAgICAgICAgICB0ID0gbCwgYiA9IDQyO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgNDI6XG4gICAgICAgICAgICAgICAgICA0NyA9PT0gZyAmJiA0MiA9PT0geCAmJiB0ICsgMiAhPT0gbCAmJiAoMzMgPT09IGUuY2hhckNvZGVBdCh0ICsgMikgJiYgKHAgKz0gZS5zdWJzdHJpbmcodCwgbCArIDEpKSwgeSA9ICcnLCBiID0gMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAwID09PSBiICYmIChmICs9IHkpO1xuICAgICAgfVxuXG4gICAgICBLID0geDtcbiAgICAgIHggPSBnO1xuICAgICAgbCsrO1xuICAgIH1cblxuICAgIHQgPSBwLmxlbmd0aDtcblxuICAgIGlmICgwIDwgdCkge1xuICAgICAgciA9IGM7XG4gICAgICBpZiAoMCA8IEEgJiYgKEMgPSBIKDIsIHAsIHIsIGQsIEQsIHosIHQsIGgsIGEsIGgpLCB2b2lkIDAgIT09IEMgJiYgMCA9PT0gKHAgPSBDKS5sZW5ndGgpKSByZXR1cm4gRyArIHAgKyBGO1xuICAgICAgcCA9IHIuam9pbignLCcpICsgJ3snICsgcCArICd9JztcblxuICAgICAgaWYgKDAgIT09IHcgKiBFKSB7XG4gICAgICAgIDIgIT09IHcgfHwgTChwLCAyKSB8fCAoRSA9IDApO1xuXG4gICAgICAgIHN3aXRjaCAoRSkge1xuICAgICAgICAgIGNhc2UgMTExOlxuICAgICAgICAgICAgcCA9IHAucmVwbGFjZShoYSwgJzotbW96LSQxJykgKyBwO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoUSwgJzo6LXdlYmtpdC1pbnB1dC0kMScpICsgcC5yZXBsYWNlKFEsICc6Oi1tb3otJDEnKSArIHAucmVwbGFjZShRLCAnOi1tcy1pbnB1dC0kMScpICsgcDtcbiAgICAgICAgfVxuXG4gICAgICAgIEUgPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBHICsgcCArIEY7XG4gIH1cblxuICBmdW5jdGlvbiBYKGQsIGMsIGUpIHtcbiAgICB2YXIgaCA9IGMudHJpbSgpLnNwbGl0KGlhKTtcbiAgICBjID0gaDtcbiAgICB2YXIgYSA9IGgubGVuZ3RoLFxuICAgICAgICBtID0gZC5sZW5ndGg7XG5cbiAgICBzd2l0Y2ggKG0pIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdmFyIGIgPSAwO1xuXG4gICAgICAgIGZvciAoZCA9IDAgPT09IG0gPyAnJyA6IGRbMF0gKyAnICc7IGIgPCBhOyArK2IpIHtcbiAgICAgICAgICBjW2JdID0gWihkLCBjW2JdLCBlKS50cmltKCk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHYgPSBiID0gMDtcblxuICAgICAgICBmb3IgKGMgPSBbXTsgYiA8IGE7ICsrYikge1xuICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbTsgKytuKSB7XG4gICAgICAgICAgICBjW3YrK10gPSBaKGRbbl0gKyAnICcsIGhbYl0sIGUpLnRyaW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgZnVuY3Rpb24gWihkLCBjLCBlKSB7XG4gICAgdmFyIGggPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgMzMgPiBoICYmIChoID0gKGMgPSBjLnRyaW0oKSkuY2hhckNvZGVBdCgwKSk7XG5cbiAgICBzd2l0Y2ggKGgpIHtcbiAgICAgIGNhc2UgMzg6XG4gICAgICAgIHJldHVybiBjLnJlcGxhY2UoRiwgJyQxJyArIGQudHJpbSgpKTtcblxuICAgICAgY2FzZSA1ODpcbiAgICAgICAgcmV0dXJuIGQudHJpbSgpICsgYy5yZXBsYWNlKEYsICckMScgKyBkLnRyaW0oKSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgwIDwgMSAqIGUgJiYgMCA8IGMuaW5kZXhPZignXFxmJykpIHJldHVybiBjLnJlcGxhY2UoRiwgKDU4ID09PSBkLmNoYXJDb2RlQXQoMCkgPyAnJyA6ICckMScpICsgZC50cmltKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBkICsgYztcbiAgfVxuXG4gIGZ1bmN0aW9uIFAoZCwgYywgZSwgaCkge1xuICAgIHZhciBhID0gZCArICc7JyxcbiAgICAgICAgbSA9IDIgKiBjICsgMyAqIGUgKyA0ICogaDtcblxuICAgIGlmICg5NDQgPT09IG0pIHtcbiAgICAgIGQgPSBhLmluZGV4T2YoJzonLCA5KSArIDE7XG4gICAgICB2YXIgYiA9IGEuc3Vic3RyaW5nKGQsIGEubGVuZ3RoIC0gMSkudHJpbSgpO1xuICAgICAgYiA9IGEuc3Vic3RyaW5nKDAsIGQpLnRyaW0oKSArIGIgKyAnOyc7XG4gICAgICByZXR1cm4gMSA9PT0gdyB8fCAyID09PSB3ICYmIEwoYiwgMSkgPyAnLXdlYmtpdC0nICsgYiArIGIgOiBiO1xuICAgIH1cblxuICAgIGlmICgwID09PSB3IHx8IDIgPT09IHcgJiYgIUwoYSwgMSkpIHJldHVybiBhO1xuXG4gICAgc3dpdGNoIChtKSB7XG4gICAgICBjYXNlIDEwMTU6XG4gICAgICAgIHJldHVybiA5NyA9PT0gYS5jaGFyQ29kZUF0KDEwKSA/ICctd2Via2l0LScgKyBhICsgYSA6IGE7XG5cbiAgICAgIGNhc2UgOTUxOlxuICAgICAgICByZXR1cm4gMTE2ID09PSBhLmNoYXJDb2RlQXQoMykgPyAnLXdlYmtpdC0nICsgYSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDk2MzpcbiAgICAgICAgcmV0dXJuIDExMCA9PT0gYS5jaGFyQ29kZUF0KDUpID8gJy13ZWJraXQtJyArIGEgKyBhIDogYTtcblxuICAgICAgY2FzZSAxMDA5OlxuICAgICAgICBpZiAoMTAwICE9PSBhLmNoYXJDb2RlQXQoNCkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk2OTpcbiAgICAgIGNhc2UgOTQyOlxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDk3ODpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tb3otJyArIGEgKyBhO1xuXG4gICAgICBjYXNlIDEwMTk6XG4gICAgICBjYXNlIDk4MzpcbiAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tb3otJyArIGEgKyAnLW1zLScgKyBhICsgYTtcblxuICAgICAgY2FzZSA4ODM6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDgpKSByZXR1cm4gJy13ZWJraXQtJyArIGEgKyBhO1xuICAgICAgICBpZiAoMCA8IGEuaW5kZXhPZignaW1hZ2Utc2V0KCcsIDExKSkgcmV0dXJuIGEucmVwbGFjZShqYSwgJyQxLXdlYmtpdC0kMicpICsgYTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTMyOlxuICAgICAgICBpZiAoNDUgPT09IGEuY2hhckNvZGVBdCg0KSkgc3dpdGNoIChhLmNoYXJDb2RlQXQoNSkpIHtcbiAgICAgICAgICBjYXNlIDEwMzpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC1ib3gtJyArIGEucmVwbGFjZSgnLWdyb3cnLCAnJykgKyAnLXdlYmtpdC0nICsgYSArICctbXMtJyArIGEucmVwbGFjZSgnZ3JvdycsICdwb3NpdGl2ZScpICsgYTtcblxuICAgICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIGE7XG5cbiAgICAgICAgICBjYXNlIDk4OlxuICAgICAgICAgICAgcmV0dXJuICctd2Via2l0LScgKyBhICsgJy1tcy0nICsgYS5yZXBsYWNlKCdiYXNpcycsICdwcmVmZXJyZWQtc2l6ZScpICsgYTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBhICsgYTtcblxuICAgICAgY2FzZSA5NjQ6XG4gICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC0nICsgYSArIGE7XG5cbiAgICAgIGNhc2UgMTAyMzpcbiAgICAgICAgaWYgKDk5ICE9PSBhLmNoYXJDb2RlQXQoOCkpIGJyZWFrO1xuICAgICAgICBiID0gYS5zdWJzdHJpbmcoYS5pbmRleE9mKCc6JywgMTUpKS5yZXBsYWNlKCdmbGV4LScsICcnKS5yZXBsYWNlKCdzcGFjZS1iZXR3ZWVuJywgJ2p1c3RpZnknKTtcbiAgICAgICAgcmV0dXJuICctd2Via2l0LWJveC1wYWNrJyArIGIgKyAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1wYWNrJyArIGIgKyBhO1xuXG4gICAgICBjYXNlIDEwMDU6XG4gICAgICAgIHJldHVybiBrYS50ZXN0KGEpID8gYS5yZXBsYWNlKGFhLCAnOi13ZWJraXQtJykgKyBhLnJlcGxhY2UoYWEsICc6LW1vei0nKSArIGEgOiBhO1xuXG4gICAgICBjYXNlIDFlMzpcbiAgICAgICAgYiA9IGEuc3Vic3RyaW5nKDEzKS50cmltKCk7XG4gICAgICAgIGMgPSBiLmluZGV4T2YoJy0nKSArIDE7XG5cbiAgICAgICAgc3dpdGNoIChiLmNoYXJDb2RlQXQoMCkgKyBiLmNoYXJDb2RlQXQoYykpIHtcbiAgICAgICAgICBjYXNlIDIyNjpcbiAgICAgICAgICAgIGIgPSBhLnJlcGxhY2UoRywgJ3RiJyk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjMyOlxuICAgICAgICAgICAgYiA9IGEucmVwbGFjZShHLCAndGItcmwnKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMjA6XG4gICAgICAgICAgICBiID0gYS5yZXBsYWNlKEcsICdscicpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLScgKyBiICsgYTtcblxuICAgICAgY2FzZSAxMDE3OlxuICAgICAgICBpZiAoLTEgPT09IGEuaW5kZXhPZignc3RpY2t5JywgOSkpIGJyZWFrO1xuXG4gICAgICBjYXNlIDk3NTpcbiAgICAgICAgYyA9IChhID0gZCkubGVuZ3RoIC0gMTA7XG4gICAgICAgIGIgPSAoMzMgPT09IGEuY2hhckNvZGVBdChjKSA/IGEuc3Vic3RyaW5nKDAsIGMpIDogYSkuc3Vic3RyaW5nKGQuaW5kZXhPZignOicsIDcpICsgMSkudHJpbSgpO1xuXG4gICAgICAgIHN3aXRjaCAobSA9IGIuY2hhckNvZGVBdCgwKSArIChiLmNoYXJDb2RlQXQoNykgfCAwKSkge1xuICAgICAgICAgIGNhc2UgMjAzOlxuICAgICAgICAgICAgaWYgKDExMSA+IGIuY2hhckNvZGVBdCg4KSkgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDExNTpcbiAgICAgICAgICAgIGEgPSBhLnJlcGxhY2UoYiwgJy13ZWJraXQtJyArIGIpICsgJzsnICsgYTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyMDc6XG4gICAgICAgICAgY2FzZSAxMDI6XG4gICAgICAgICAgICBhID0gYS5yZXBsYWNlKGIsICctd2Via2l0LScgKyAoMTAyIDwgbSA/ICdpbmxpbmUtJyA6ICcnKSArICdib3gnKSArICc7JyArIGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyAnOycgKyBhLnJlcGxhY2UoYiwgJy1tcy0nICsgYiArICdib3gnKSArICc7JyArIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYSArICc7JztcblxuICAgICAgY2FzZSA5Mzg6XG4gICAgICAgIGlmICg0NSA9PT0gYS5jaGFyQ29kZUF0KDUpKSBzd2l0Y2ggKGEuY2hhckNvZGVBdCg2KSkge1xuICAgICAgICAgIGNhc2UgMTA1OlxuICAgICAgICAgICAgcmV0dXJuIGIgPSBhLnJlcGxhY2UoJy1pdGVtcycsICcnKSwgJy13ZWJraXQtJyArIGEgKyAnLXdlYmtpdC1ib3gtJyArIGIgKyAnLW1zLWZsZXgtJyArIGIgKyBhO1xuXG4gICAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgICByZXR1cm4gJy13ZWJraXQtJyArIGEgKyAnLW1zLWZsZXgtaXRlbS0nICsgYS5yZXBsYWNlKGJhLCAnJykgKyBhO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiAnLXdlYmtpdC0nICsgYSArICctbXMtZmxleC1saW5lLXBhY2snICsgYS5yZXBsYWNlKCdhbGlnbi1jb250ZW50JywgJycpLnJlcGxhY2UoYmEsICcnKSArIGE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTczOlxuICAgICAgY2FzZSA5ODk6XG4gICAgICAgIGlmICg0NSAhPT0gYS5jaGFyQ29kZUF0KDMpIHx8IDEyMiA9PT0gYS5jaGFyQ29kZUF0KDQpKSBicmVhaztcblxuICAgICAgY2FzZSA5MzE6XG4gICAgICBjYXNlIDk1MzpcbiAgICAgICAgaWYgKCEwID09PSBsYS50ZXN0KGQpKSByZXR1cm4gMTE1ID09PSAoYiA9IGQuc3Vic3RyaW5nKGQuaW5kZXhPZignOicpICsgMSkpLmNoYXJDb2RlQXQoMCkgPyBQKGQucmVwbGFjZSgnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBjLCBlLCBoKS5yZXBsYWNlKCc6ZmlsbC1hdmFpbGFibGUnLCAnOnN0cmV0Y2gnKSA6IGEucmVwbGFjZShiLCAnLXdlYmtpdC0nICsgYikgKyBhLnJlcGxhY2UoYiwgJy1tb3otJyArIGIucmVwbGFjZSgnZmlsbC0nLCAnJykpICsgYTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTYyOlxuICAgICAgICBpZiAoYSA9ICctd2Via2l0LScgKyBhICsgKDEwMiA9PT0gYS5jaGFyQ29kZUF0KDUpID8gJy1tcy0nICsgYSA6ICcnKSArIGEsIDIxMSA9PT0gZSArIGggJiYgMTA1ID09PSBhLmNoYXJDb2RlQXQoMTMpICYmIDAgPCBhLmluZGV4T2YoJ3RyYW5zZm9ybScsIDEwKSkgcmV0dXJuIGEuc3Vic3RyaW5nKDAsIGEuaW5kZXhPZignOycsIDI3KSArIDEpLnJlcGxhY2UobWEsICckMS13ZWJraXQtJDInKSArIGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiBMKGQsIGMpIHtcbiAgICB2YXIgZSA9IGQuaW5kZXhPZigxID09PSBjID8gJzonIDogJ3snKSxcbiAgICAgICAgaCA9IGQuc3Vic3RyaW5nKDAsIDMgIT09IGMgPyBlIDogMTApO1xuICAgIGUgPSBkLnN1YnN0cmluZyhlICsgMSwgZC5sZW5ndGggLSAxKTtcbiAgICByZXR1cm4gUigyICE9PSBjID8gaCA6IGgucmVwbGFjZShuYSwgJyQxJyksIGUsIGMpO1xuICB9XG5cbiAgZnVuY3Rpb24gZWEoZCwgYykge1xuICAgIHZhciBlID0gUChjLCBjLmNoYXJDb2RlQXQoMCksIGMuY2hhckNvZGVBdCgxKSwgYy5jaGFyQ29kZUF0KDIpKTtcbiAgICByZXR1cm4gZSAhPT0gYyArICc7JyA/IGUucmVwbGFjZShvYSwgJyBvciAoJDEpJykuc3Vic3RyaW5nKDQpIDogJygnICsgYyArICcpJztcbiAgfVxuXG4gIGZ1bmN0aW9uIEgoZCwgYywgZSwgaCwgYSwgbSwgYiwgdiwgbiwgcSkge1xuICAgIGZvciAodmFyIGcgPSAwLCB4ID0gYywgdzsgZyA8IEE7ICsrZykge1xuICAgICAgc3dpdGNoICh3ID0gU1tnXS5jYWxsKEIsIGQsIHgsIGUsIGgsIGEsIG0sIGIsIHYsIG4sIHEpKSB7XG4gICAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgICBjYXNlICExOlxuICAgICAgICBjYXNlICEwOlxuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB4ID0gdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoeCAhPT0gYykgcmV0dXJuIHg7XG4gIH1cblxuICBmdW5jdGlvbiBUKGQpIHtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICAgIGNhc2Ugdm9pZCAwOlxuICAgICAgY2FzZSBudWxsOlxuICAgICAgICBBID0gUy5sZW5ndGggPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBkKSBTW0ErK10gPSBkO2Vsc2UgaWYgKCdvYmplY3QnID09PSB0eXBlb2YgZCkgZm9yICh2YXIgYyA9IDAsIGUgPSBkLmxlbmd0aDsgYyA8IGU7ICsrYykge1xuICAgICAgICAgIFQoZFtjXSk7XG4gICAgICAgIH0gZWxzZSBZID0gISFkIHwgMDtcbiAgICB9XG5cbiAgICByZXR1cm4gVDtcbiAgfVxuXG4gIGZ1bmN0aW9uIFUoZCkge1xuICAgIGQgPSBkLnByZWZpeDtcbiAgICB2b2lkIDAgIT09IGQgJiYgKFIgPSBudWxsLCBkID8gJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIGQgPyB3ID0gMSA6ICh3ID0gMiwgUiA9IGQpIDogdyA9IDApO1xuICAgIHJldHVybiBVO1xuICB9XG5cbiAgZnVuY3Rpb24gQihkLCBjKSB7XG4gICAgdmFyIGUgPSBkO1xuICAgIDMzID4gZS5jaGFyQ29kZUF0KDApICYmIChlID0gZS50cmltKCkpO1xuICAgIFYgPSBlO1xuICAgIGUgPSBbVl07XG5cbiAgICBpZiAoMCA8IEEpIHtcbiAgICAgIHZhciBoID0gSCgtMSwgYywgZSwgZSwgRCwgeiwgMCwgMCwgMCwgMCk7XG4gICAgICB2b2lkIDAgIT09IGggJiYgJ3N0cmluZycgPT09IHR5cGVvZiBoICYmIChjID0gaCk7XG4gICAgfVxuXG4gICAgdmFyIGEgPSBNKE8sIGUsIGMsIDAsIDApO1xuICAgIDAgPCBBICYmIChoID0gSCgtMiwgYSwgZSwgZSwgRCwgeiwgYS5sZW5ndGgsIDAsIDAsIDApLCB2b2lkIDAgIT09IGggJiYgKGEgPSBoKSk7XG4gICAgViA9ICcnO1xuICAgIEUgPSAwO1xuICAgIHogPSBEID0gMTtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBjYSA9IC9eXFwwKy9nLFxuICAgICAgTiA9IC9bXFwwXFxyXFxmXS9nLFxuICAgICAgYWEgPSAvOiAqL2csXG4gICAgICBrYSA9IC96b298Z3JhLyxcbiAgICAgIG1hID0gLyhbLDogXSkodHJhbnNmb3JtKS9nLFxuICAgICAgaWEgPSAvLFxccis/L2csXG4gICAgICBGID0gLyhbXFx0XFxyXFxuIF0pKlxcZj8mL2csXG4gICAgICBmYSA9IC9AKGtcXHcrKVxccyooXFxTKilcXHMqLyxcbiAgICAgIFEgPSAvOjoocGxhY2UpL2csXG4gICAgICBoYSA9IC86KHJlYWQtb25seSkvZyxcbiAgICAgIEcgPSAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sXG4gICAgICBkYSA9IC9cXChcXHMqKC4qKVxccypcXCkvZyxcbiAgICAgIG9hID0gLyhbXFxzXFxTXSo/KTsvZyxcbiAgICAgIGJhID0gLy1zZWxmfGZsZXgtL2csXG4gICAgICBuYSA9IC9bXl0qPyg6W3JwXVtlbF1hW1xcdy1dKylbXl0qLyxcbiAgICAgIGxhID0gL3N0cmV0Y2h8OlxccypcXHcrXFwtKD86Y29udGV8YXZhaWwpLyxcbiAgICAgIGphID0gLyhbXi1dKShpbWFnZS1zZXRcXCgpLyxcbiAgICAgIHogPSAxLFxuICAgICAgRCA9IDEsXG4gICAgICBFID0gMCxcbiAgICAgIHcgPSAxLFxuICAgICAgTyA9IFtdLFxuICAgICAgUyA9IFtdLFxuICAgICAgQSA9IDAsXG4gICAgICBSID0gbnVsbCxcbiAgICAgIFkgPSAwLFxuICAgICAgViA9ICcnO1xuICBCLnVzZSA9IFQ7XG4gIEIuc2V0ID0gVTtcbiAgdm9pZCAwICE9PSBXICYmIFUoVyk7XG4gIHJldHVybiBCO1xufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsaXNfbWluO1xuIiwiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCBTdHlsaXMgZnJvbSAnQGVtb3Rpb24vc3R5bGlzJztcbmltcG9ydCAnQGVtb3Rpb24vd2Vhay1tZW1vaXplJztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RoeXN1bHRhbi9zdHlsaXMuanMvdHJlZS9tYXN0ZXIvcGx1Z2lucy9ydWxlLXNoZWV0XG4vLyBpbmxpbmVkIHRvIGF2b2lkIHVtZCB3cmFwcGVyIGFuZCBwZWVyRGVwIHdhcm5pbmdzL2luc3RhbGxpbmcgc3R5bGlzXG4vLyBzaW5jZSB3ZSB1c2Ugc3R5bGlzIGFmdGVyIGNsb3N1cmUgY29tcGlsZXJcbnZhciBkZWxpbWl0ZXIgPSAnLyp8Ki8nO1xudmFyIG5lZWRsZSA9IGRlbGltaXRlciArICd9JztcblxuZnVuY3Rpb24gdG9TaGVldChibG9jaykge1xuICBpZiAoYmxvY2spIHtcbiAgICBTaGVldC5jdXJyZW50Lmluc2VydChibG9jayArICd9Jyk7XG4gIH1cbn1cblxudmFyIFNoZWV0ID0ge1xuICBjdXJyZW50OiBudWxsXG59O1xudmFyIHJ1bGVTaGVldCA9IGZ1bmN0aW9uIHJ1bGVTaGVldChjb250ZXh0LCBjb250ZW50LCBzZWxlY3RvcnMsIHBhcmVudHMsIGxpbmUsIGNvbHVtbiwgbGVuZ3RoLCBucywgZGVwdGgsIGF0KSB7XG4gIHN3aXRjaCAoY29udGV4dCkge1xuICAgIC8vIHByb3BlcnR5XG4gICAgY2FzZSAxOlxuICAgICAge1xuICAgICAgICBzd2l0Y2ggKGNvbnRlbnQuY2hhckNvZGVBdCgwKSkge1xuICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIEBpbXBvcnRcbiAgICAgICAgICAgICAgU2hlZXQuY3VycmVudC5pbnNlcnQoY29udGVudCArICc7Jyk7XG4gICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjaGFyY29kZSBmb3IgbFxuXG4gICAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC8vIGNoYXJjb2RlIGZvciBiXG4gICAgICAgICAgICAgIC8vIHRoaXMgaWdub3JlcyBsYWJlbFxuICAgICAgICAgICAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gc2VsZWN0b3JcblxuICAgIGNhc2UgMjpcbiAgICAgIHtcbiAgICAgICAgaWYgKG5zID09PSAwKSByZXR1cm4gY29udGVudCArIGRlbGltaXRlcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgLy8gYXQtcnVsZVxuXG4gICAgY2FzZSAzOlxuICAgICAge1xuICAgICAgICBzd2l0Y2ggKG5zKSB7XG4gICAgICAgICAgLy8gQGZvbnQtZmFjZSwgQHBhZ2VcbiAgICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2hlZXQuY3VycmVudC5pbnNlcnQoc2VsZWN0b3JzWzBdICsgY29udGVudCk7XG4gICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50ICsgKGF0ID09PSAwID8gZGVsaW1pdGVyIDogJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBjYXNlIC0yOlxuICAgICAge1xuICAgICAgICBjb250ZW50LnNwbGl0KG5lZWRsZSkuZm9yRWFjaCh0b1NoZWV0KTtcbiAgICAgIH1cbiAgfVxufTtcblxudmFyIGNyZWF0ZUNhY2hlID0gZnVuY3Rpb24gY3JlYXRlQ2FjaGUob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSBvcHRpb25zID0ge307XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleSB8fCAnY3NzJztcbiAgdmFyIHN0eWxpc09wdGlvbnM7XG5cbiAgaWYgKG9wdGlvbnMucHJlZml4ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsaXNPcHRpb25zID0ge1xuICAgICAgcHJlZml4OiBvcHRpb25zLnByZWZpeFxuICAgIH07XG4gIH1cblxuICB2YXIgc3R5bGlzID0gbmV3IFN0eWxpcyhzdHlsaXNPcHRpb25zKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBpZiAoL1teYS16LV0vLnRlc3Qoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1vdGlvbiBrZXkgbXVzdCBvbmx5IGNvbnRhaW4gbG93ZXIgY2FzZSBhbHBoYWJldGljYWwgY2hhcmFjdGVycyBhbmQgLSBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwYXNzZWRcIik7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluc2VydGVkID0ge307IC8vICRGbG93Rml4TWVcblxuICB2YXIgY29udGFpbmVyO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIHZhciBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb24tXCIgKyBrZXkgKyBcIl1cIik7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHZhciBhdHRyaWIgPSBub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtZW1vdGlvbi1cIiArIGtleSk7IC8vICRGbG93Rml4TWVcblxuICAgICAgYXR0cmliLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgaW5zZXJ0ZWRbaWRdID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobm9kZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAge1xuICAgIHN0eWxpcy51c2Uob3B0aW9ucy5zdHlsaXNQbHVnaW5zKShydWxlU2hlZXQpO1xuXG4gICAgX2luc2VydCA9IGZ1bmN0aW9uIGluc2VydChzZWxlY3Rvciwgc2VyaWFsaXplZCwgc2hlZXQsIHNob3VsZENhY2hlKSB7XG4gICAgICB2YXIgbmFtZSA9IHNlcmlhbGl6ZWQubmFtZTtcbiAgICAgIFNoZWV0LmN1cnJlbnQgPSBzaGVldDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgc2VyaWFsaXplZC5tYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgbWFwID0gc2VyaWFsaXplZC5tYXA7XG4gICAgICAgIFNoZWV0LmN1cnJlbnQgPSB7XG4gICAgICAgICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQocnVsZSkge1xuICAgICAgICAgICAgc2hlZXQuaW5zZXJ0KHJ1bGUgKyBtYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc3R5bGlzKHNlbGVjdG9yLCBzZXJpYWxpemVkLnN0eWxlcyk7XG5cbiAgICAgIGlmIChzaG91bGRDYWNoZSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtuYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YmY3MzcxYTRjZDdlNjAwOWVmNjFkMGFcbiAgICB2YXIgY29tbWVudFN0YXJ0ID0gL1xcL1xcKi9nO1xuICAgIHZhciBjb21tZW50RW5kID0gL1xcKlxcLy9nO1xuICAgIHN0eWxpcy51c2UoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRlbnQpIHtcbiAgICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdoaWxlIChjb21tZW50U3RhcnQudGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICBjb21tZW50RW5kLmxhc3RJbmRleCA9IGNvbW1lbnRTdGFydC5sYXN0SW5kZXg7XG5cbiAgICAgICAgICAgICAgaWYgKGNvbW1lbnRFbmQudGVzdChjb250ZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbW1lbnRTdGFydC5sYXN0SW5kZXggPSBjb21tZW50RW5kLmxhc3RJbmRleDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91ciBzdHlsZXMgaGF2ZSBhbiB1bnRlcm1pbmF0ZWQgY29tbWVudCAoXCIvKlwiIHdpdGhvdXQgY29ycmVzcG9uZGluZyBcIiovXCIpLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb21tZW50U3RhcnQubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBzdHlsaXMudXNlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250ZW50LCBzZWxlY3RvcnMpIHtcbiAgICAgIHN3aXRjaCAoY29udGV4dCkge1xuICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBmbGFnID0gJ2Vtb3Rpb24tZGlzYWJsZS1zZXJ2ZXItcmVuZGVyaW5nLXVuc2FmZS1zZWxlY3Rvci13YXJuaW5nLXBsZWFzZS1kby1ub3QtdXNlLXRoaXMtdGhlLXdhcm5pbmctZXhpc3RzLWZvci1hLXJlYXNvbic7XG4gICAgICAgICAgICB2YXIgdW5zYWZlUHNldWRvQ2xhc3NlcyA9IGNvbnRlbnQubWF0Y2goLyg6Zmlyc3R8Om50aHw6bnRoLWxhc3QpLWNoaWxkL2cpO1xuXG4gICAgICAgICAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3NlcyAmJiBjYWNoZS5jb21wYXQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdW5zYWZlUHNldWRvQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uICh1bnNhZmVQc2V1ZG9DbGFzcykge1xuICAgICAgICAgICAgICAgIHZhciBpZ25vcmVSZWdFeHAgPSBuZXcgUmVnRXhwKHVuc2FmZVBzZXVkb0NsYXNzICsgXCIuKlxcXFwvXFxcXCogXCIgKyBmbGFnICsgXCIgXFxcXCpcXFxcL1wiKTtcbiAgICAgICAgICAgICAgICB2YXIgaWdub3JlID0gaWdub3JlUmVnRXhwLnRlc3QoY29udGVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodW5zYWZlUHNldWRvQ2xhc3MgJiYgIWlnbm9yZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBwc2V1ZG8gY2xhc3MgXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3MgKyBcIlxcXCIgaXMgcG90ZW50aWFsbHkgdW5zYWZlIHdoZW4gZG9pbmcgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBUcnkgY2hhbmdpbmcgaXQgdG8gXFxcIlwiICsgdW5zYWZlUHNldWRvQ2xhc3Muc3BsaXQoJy1jaGlsZCcpWzBdICsgXCItb2YtdHlwZVxcXCIuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeVxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ2FjaGU7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///369\n")},371: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2UuanM/YmZkYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsTG9vc2Uoc3RyaW5ncywgcmF3KSB7XG4gIGlmICghcmF3KSB7XG4gICAgcmF3ID0gc3RyaW5ncy5zbGljZSgwKTtcbiAgfVxuXG4gIHN0cmluZ3MucmF3ID0gcmF3O1xuICByZXR1cm4gc3RyaW5ncztcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///371\n')},40:function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.isExportStory = isExportStory;\nexports.parseKind = exports.storyNameFromExport = exports.toId = exports.sanitize = void 0;\n\nvar _startCase = _interopRequireDefault(__webpack_require__(751));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { 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(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jc2YvZGlzdC9pbmRleC5qcz84ZWYxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQSx3Q0FBd0MsbUJBQU8sQ0FBQyxHQUFrQjs7QUFFbEUsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGlDQUFpQyxvRkFBb0Y7O0FBRXJILDZCQUE2Qiw2RUFBNkU7O0FBRTFHLHdDQUF3Qyx5R0FBeUcsUUFBUSxFQUFFLGVBQWUsZUFBZSxnQkFBZ0Isb0JBQW9CLE1BQU0sMENBQTBDLCtCQUErQixhQUFhLHFCQUFxQixtQ0FBbUMsRUFBRSxFQUFFLGNBQWMsV0FBVyxVQUFVLEVBQUUsVUFBVSxNQUFNLGlEQUFpRCxFQUFFLFVBQVUsa0JBQWtCLEVBQUUsRUFBRSxhQUFhOztBQUUxZ0IsK0JBQStCLG9DQUFvQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsU0FBUyxFQUFFO0FBQ3BEOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRyxFQUFFOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNFeHBvcnRTdG9yeSA9IGlzRXhwb3J0U3Rvcnk7XG5leHBvcnRzLnBhcnNlS2luZCA9IGV4cG9ydHMuc3RvcnlOYW1lRnJvbUV4cG9ydCA9IGV4cG9ydHMudG9JZCA9IGV4cG9ydHMuc2FuaXRpemUgPSB2b2lkIDA7XG5cbnZhciBfc3RhcnRDYXNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibG9kYXNoL3N0YXJ0Q2FzZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IGlmICghKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PT0gXCJbb2JqZWN0IEFyZ3VtZW50c11cIikpIHsgcmV0dXJuOyB9IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuLyoqXG4gKiBSZW1vdmUgcHVuY3R1YXRpb24gYW5kIGlsbGVnYWwgY2hhcmFjdGVycyBmcm9tIGEgc3RvcnkgSUQuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RhdmlkanJpY2UvOWQyYWY1MTEwMGU0MWM2YzRiNGFcbiAqL1xudmFyIHNhbml0aXplID0gZnVuY3Rpb24gc2FuaXRpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgLnJlcGxhY2UoL1sg4oCZ4oCT4oCU4oCV4oCywr8nYH4hQCMkJV4mKigpX3wrXFwtPT87OidcIiwuPD5cXHtcXH1cXFtcXF1cXFxcXFwvXS9naSwgJy0nKS5yZXBsYWNlKC8tKy9nLCAnLScpLnJlcGxhY2UoL14tKy8sICcnKS5yZXBsYWNlKC8tKyQvLCAnJyk7XG59O1xuXG5leHBvcnRzLnNhbml0aXplID0gc2FuaXRpemU7XG5cbnZhciBzYW5pdGl6ZVNhZmUgPSBmdW5jdGlvbiBzYW5pdGl6ZVNhZmUoc3RyaW5nLCBwYXJ0KSB7XG4gIHZhciBzYW5pdGl6ZWQgPSBzYW5pdGl6ZShzdHJpbmcpO1xuXG4gIGlmIChzYW5pdGl6ZWQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBcIi5jb25jYXQocGFydCwgXCIgJ1wiKS5jb25jYXQoc3RyaW5nLCBcIicsIG11c3QgaW5jbHVkZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVyc1wiKSk7XG4gIH1cblxuICByZXR1cm4gc2FuaXRpemVkO1xufTtcbi8qKlxuICogR2VuZXJhdGUgYSBzdG9yeWJvb2sgSUQgZnJvbSBhIGNvbXBvbmVudC9raW5kIGFuZCBzdG9yeSBuYW1lLlxuICovXG5cblxudmFyIHRvSWQgPSBmdW5jdGlvbiB0b0lkKGtpbmQsIG5hbWUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KHNhbml0aXplU2FmZShraW5kLCAna2luZCcpLCBcIi0tXCIpLmNvbmNhdChzYW5pdGl6ZVNhZmUobmFtZSwgJ25hbWUnKSk7XG59O1xuLyoqXG4gKiBUcmFuc2Zvcm0gYSBDU0YgbmFtZWQgZXhwb3J0IGludG8gYSByZWFkYWJsZSBzdG9yeSBuYW1lXG4gKi9cblxuXG5leHBvcnRzLnRvSWQgPSB0b0lkO1xuXG52YXIgc3RvcnlOYW1lRnJvbUV4cG9ydCA9IGZ1bmN0aW9uIHN0b3J5TmFtZUZyb21FeHBvcnQoa2V5KSB7XG4gIHJldHVybiAoMCwgX3N0YXJ0Q2FzZVtcImRlZmF1bHRcIl0pKGtleSk7XG59O1xuXG5leHBvcnRzLnN0b3J5TmFtZUZyb21FeHBvcnQgPSBzdG9yeU5hbWVGcm9tRXhwb3J0O1xuXG5mdW5jdGlvbiBtYXRjaGVzKHN0b3J5S2V5LCBhcnJheU9yUmVnZXgpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXlPclJlZ2V4KSkge1xuICAgIHJldHVybiBhcnJheU9yUmVnZXguaW5jbHVkZXMoc3RvcnlLZXkpO1xuICB9XG5cbiAgcmV0dXJuIHN0b3J5S2V5Lm1hdGNoKGFycmF5T3JSZWdleCk7XG59XG4vKipcbiAqIERvZXMgYSBuYW1lZCBleHBvcnQgbWF0Y2ggQ1NGIGluY2x1c2lvbi9leGNsdXNpb24gb3B0aW9ucz9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRXhwb3J0U3Rvcnkoa2V5LCBfcmVmKSB7XG4gIHZhciBpbmNsdWRlU3RvcmllcyA9IF9yZWYuaW5jbHVkZVN0b3JpZXMsXG4gICAgICBleGNsdWRlU3RvcmllcyA9IF9yZWYuZXhjbHVkZVN0b3JpZXM7XG4gIHJldHVybiAoLy8gaHR0cHM6Ly9iYWJlbGpzLmlvL2RvY3MvZW4vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWNvbW1vbmpzXG4gICAga2V5ICE9PSAnX19lc01vZHVsZScgJiYgKCFpbmNsdWRlU3RvcmllcyB8fCBtYXRjaGVzKGtleSwgaW5jbHVkZVN0b3JpZXMpKSAmJiAoIWV4Y2x1ZGVTdG9yaWVzIHx8ICFtYXRjaGVzKGtleSwgZXhjbHVkZVN0b3JpZXMpKVxuICApO1xufVxuXG4vKipcbiAqIFBhcnNlIG91dCB0aGUgY29tcG9uZW50L2tpbmQgbmFtZSBmcm9tIGEgcGF0aCwgdXNpbmcgdGhlIGdpdmVuIHNlcGFyYXRvciBjb25maWcuXG4gKi9cbnZhciBwYXJzZUtpbmQgPSBmdW5jdGlvbiBwYXJzZUtpbmQoa2luZCwgX3JlZjIpIHtcbiAgdmFyIHJvb3RTZXBhcmF0b3IgPSBfcmVmMi5yb290U2VwYXJhdG9yLFxuICAgICAgZ3JvdXBTZXBhcmF0b3IgPSBfcmVmMi5ncm91cFNlcGFyYXRvcjtcblxuICB2YXIgX2tpbmQkc3BsaXQgPSBraW5kLnNwbGl0KHJvb3RTZXBhcmF0b3IsIDIpLFxuICAgICAgX2tpbmQkc3BsaXQyID0gX3NsaWNlZFRvQXJyYXkoX2tpbmQkc3BsaXQsIDIpLFxuICAgICAgcm9vdCA9IF9raW5kJHNwbGl0MlswXSxcbiAgICAgIHJlbWFpbmRlciA9IF9raW5kJHNwbGl0MlsxXTtcblxuICB2YXIgZ3JvdXBzID0gKHJlbWFpbmRlciB8fCBraW5kKS5zcGxpdChncm91cFNlcGFyYXRvcikuZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuICEhaTtcbiAgfSk7IC8vIHdoZW4gdGhlcmUncyBubyByZW1haW5kZXIsIGl0IG1lYW5zIHRoZSByb290IHdhc24ndCBmb3VuZC9zcGxpdFxuXG4gIHJldHVybiB7XG4gICAgcm9vdDogcmVtYWluZGVyID8gcm9vdCA6IG51bGwsXG4gICAgZ3JvdXBzOiBncm91cHNcbiAgfTtcbn07XG5cbmV4cG9ydHMucGFyc2VLaW5kID0gcGFyc2VLaW5kOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n')},415:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar ArraySpeciesCreate = __webpack_require__(306);\nvar Call = __webpack_require__(139);\nvar CreateDataPropertyOrThrow = __webpack_require__(308);\nvar Get = __webpack_require__(92);\nvar HasProperty = __webpack_require__(403);\nvar IsCallable = __webpack_require__(119);\nvar ToUint32 = __webpack_require__(714);\nvar ToObject = __webpack_require__(170);\nvar ToString = __webpack_require__(138);\n\nvar callBound = __webpack_require__(52);\n\nvar isString = __webpack_require__(299);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLm1hcC9pbXBsZW1lbnRhdGlvbi5qcz81NmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLHlCQUF5QixtQkFBTyxDQUFDLEdBQXFDO0FBQ3RFLFdBQVcsbUJBQU8sQ0FBQyxHQUF1QjtBQUMxQyxnQ0FBZ0MsbUJBQU8sQ0FBQyxHQUE0QztBQUNwRixVQUFVLG1CQUFPLENBQUMsRUFBc0I7QUFDeEMsa0JBQWtCLG1CQUFPLENBQUMsR0FBOEI7QUFDeEQsaUJBQWlCLG1CQUFPLENBQUMsR0FBNkI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLEdBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjtBQUNsRCxlQUFlLG1CQUFPLENBQUMsR0FBMkI7O0FBRWxELGdCQUFnQixtQkFBTyxDQUFDLEVBQXFCOztBQUU3QyxlQUFlLG1CQUFPLENBQUMsR0FBVzs7QUFFbEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjQxNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQXJyYXlTcGVjaWVzQ3JlYXRlJyk7XG52YXIgQ2FsbCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQ2FsbCcpO1xudmFyIENyZWF0ZURhdGFQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0NyZWF0ZURhdGFQcm9wZXJ0eU9yVGhyb3cnKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIEhhc1Byb3BlcnR5ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9IYXNQcm9wZXJ0eScpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcbnZhciBUb1VpbnQzMiA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9VaW50MzInKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QnKTtcbnZhciBUb1N0cmluZyA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9TdHJpbmcnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyIGlzU3RyaW5nID0gcmVxdWlyZSgnaXMtc3RyaW5nJyk7XG5cbi8vIENoZWNrIGZhaWx1cmUgb2YgYnktaW5kZXggYWNjZXNzIG9mIHN0cmluZyBjaGFyYWN0ZXJzIChJRSA8IDkpIGFuZCBmYWlsdXJlIG9mIGAwIGluIGJveGVkU3RyaW5nYCAoUmhpbm8pXG52YXIgYm94ZWRTdHJpbmcgPSBPYmplY3QoJ2EnKTtcbnZhciBzcGxpdFN0cmluZyA9IGJveGVkU3RyaW5nWzBdICE9PSAnYScgfHwgISgwIGluIGJveGVkU3RyaW5nKTtcblxudmFyIHN0clNwbGl0ID0gY2FsbEJvdW5kKCdTdHJpbmcucHJvdG90eXBlLnNwbGl0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4pIHtcblx0dmFyIE8gPSBUb09iamVjdCh0aGlzKTtcblx0dmFyIHNlbGYgPSBzcGxpdFN0cmluZyAmJiBpc1N0cmluZyhPKSA/IHN0clNwbGl0KE8sICcnKSA6IE87XG5cdHZhciBsZW4gPSBUb1VpbnQzMihzZWxmLmxlbmd0aCk7XG5cblx0Ly8gSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb24gb3IgaWYgY2FsbGJhY2sgaXMgbm90IGEgY2FsbGFibGUgZnVuY3Rpb25cblx0aWYgKCFJc0NhbGxhYmxlKGNhbGxiYWNrZm4pKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLm1hcCBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0fVxuXG5cdHZhciBUO1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRUID0gYXJndW1lbnRzWzFdO1xuXHR9XG5cblx0dmFyIEEgPSBBcnJheVNwZWNpZXNDcmVhdGUoTywgbGVuKTtcblx0dmFyIGsgPSAwO1xuXHR3aGlsZSAoayA8IGxlbikge1xuXHRcdHZhciBQayA9IFRvU3RyaW5nKGspO1xuXHRcdHZhciBrUHJlc2VudCA9IEhhc1Byb3BlcnR5KE8sIFBrKTtcblx0XHRpZiAoa1ByZXNlbnQpIHtcblx0XHRcdHZhciBrVmFsdWUgPSBHZXQoTywgUGspO1xuXHRcdFx0dmFyIG1hcHBlZFZhbHVlID0gQ2FsbChjYWxsYmFja2ZuLCBULCBba1ZhbHVlLCBrLCBPXSk7XG5cdFx0XHRDcmVhdGVEYXRhUHJvcGVydHlPclRocm93KEEsIFBrLCBtYXBwZWRWYWx1ZSk7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXG5cdHJldHVybiBBO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///415\n")},416:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar arrayMethodBoxesProperly = __webpack_require__(715);\n\nvar implementation = __webpack_require__(415);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLm1hcC9wb2x5ZmlsbC5qcz9jZmY0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLCtCQUErQixtQkFBTyxDQUFDLEdBQWdDOztBQUV2RSxxQkFBcUIsbUJBQU8sQ0FBQyxHQUFrQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDE2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYXJyYXlNZXRob2RCb3hlc1Byb3Blcmx5ID0gcmVxdWlyZSgnZXMtYXJyYXktbWV0aG9kLWJveGVzLXByb3Blcmx5Jyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0dmFyIG1ldGhvZCA9IEFycmF5LnByb3RvdHlwZS5tYXA7XG5cdHJldHVybiBhcnJheU1ldGhvZEJveGVzUHJvcGVybHkobWV0aG9kKSA/IG1ldGhvZCA6IGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///416\n")},45: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcz8yYjc5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDZjtBQUNBLG1CQUFtQixzQkFBc0I7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///45\n')},491: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcz9hMjFjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLHVCQUF1QjtBQUNwQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjQ5MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///491\n')},52:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar GetIntrinsic = __webpack_require__(27);\n\nvar callBind = __webpack_require__(198);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcz8xMTk2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEVBQWU7O0FBRTFDLGVBQWUsbUJBQU8sQ0FBQyxHQUFJOztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///52\n")},522: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__(59);\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__(7);\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__(8);\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__(24);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3R5cGVzY3JpcHQvY29udmVydC5qcz8yMDJiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF5RDtBQUNaO0FBQ0E7QUFDSjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSIsImZpbGUiOiI1MjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzXCI7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG52YXIgY29udmVydFNpZyA9IGZ1bmN0aW9uIGNvbnZlcnRTaWcodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUudHlwZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdmdW5jdGlvbidcbiAgICAgIH07XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgICAgdHlwZS5zaWduYXR1cmUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHZhbHVlc1twcm9wLmtleV0gPSBjb252ZXJ0KHByb3AudmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnb2JqZWN0JyxcbiAgICAgICAgdmFsdWU6IHZhbHVlc1xuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duOiBcIi5jb25jYXQodHlwZSkpO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGNvbnZlcnQgPSBmdW5jdGlvbiBjb252ZXJ0KHR5cGUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlLm5hbWUsXG4gICAgICByYXcgPSB0eXBlLnJhdztcbiAgdmFyIGJhc2UgPSB7fTtcbiAgaWYgKHR5cGVvZiByYXcgIT09ICd1bmRlZmluZWQnKSBiYXNlLnJhdyA9IHJhdztcblxuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICBjYXNlICdzeW1ib2wnOlxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdBcnJheSc6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgICAgbmFtZTogJ2FycmF5JyxcbiAgICAgICAgICB2YWx1ZTogdHlwZS5lbGVtZW50cy5tYXAoY29udmVydClcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdzaWduYXR1cmUnOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIGNvbnZlcnRTaWcodHlwZSkpO1xuXG4gICAgY2FzZSAndW5pb24nOlxuICAgIGNhc2UgJ2ludGVyc2VjdGlvbic6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdHlwZS5lbGVtZW50cy5tYXAoY29udmVydClcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6ICdvdGhlcicsXG4gICAgICAgIHZhbHVlOiBuYW1lXG4gICAgICB9KTtcbiAgfVxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///522\n")},523:function(module,exports){eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiI1MjMuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///523\n")},524: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__(7);\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__(47);\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__(30);\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__(59);\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__(8);\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__(24);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L2Zsb3cvY29udmVydC5qcz9jYWU1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTZDO0FBQ0M7QUFDSDtBQUNjO0FBQ1o7QUFDSjs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQSw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBIiwiZmlsZSI6IjUyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzXCI7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG52YXIgaXNMaXRlcmFsID0gZnVuY3Rpb24gaXNMaXRlcmFsKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUubmFtZSA9PT0gJ2xpdGVyYWwnO1xufTtcblxudmFyIHRvRW51bU9wdGlvbiA9IGZ1bmN0aW9uIHRvRW51bU9wdGlvbihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnZhbHVlLnJlcGxhY2UoL1snfFwiXS9nLCAnJyk7XG59O1xuXG52YXIgY29udmVydFNpZyA9IGZ1bmN0aW9uIGNvbnZlcnRTaWcodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUudHlwZSkge1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdmdW5jdGlvbidcbiAgICAgIH07XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgICAgdHlwZS5zaWduYXR1cmUucHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHZhbHVlc1twcm9wLmtleV0gPSBjb252ZXJ0KHByb3AudmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAnb2JqZWN0JyxcbiAgICAgICAgdmFsdWU6IHZhbHVlc1xuICAgICAgfTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duOiBcIi5jb25jYXQodHlwZSkpO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGNvbnZlcnQgPSBmdW5jdGlvbiBjb252ZXJ0KHR5cGUpIHtcbiAgdmFyIG5hbWUgPSB0eXBlLm5hbWUsXG4gICAgICByYXcgPSB0eXBlLnJhdztcbiAgdmFyIGJhc2UgPSB7fTtcbiAgaWYgKHR5cGVvZiByYXcgIT09ICd1bmRlZmluZWQnKSBiYXNlLnJhdyA9IHJhdztcblxuICBzd2l0Y2ggKHR5cGUubmFtZSkge1xuICAgIGNhc2UgJ2xpdGVyYWwnOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogJ290aGVyJyxcbiAgICAgICAgdmFsdWU6IHR5cGUudmFsdWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ3N5bWJvbCc6XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgICBuYW1lOiAnYXJyYXknLFxuICAgICAgICAgIHZhbHVlOiB0eXBlLmVsZW1lbnRzLm1hcChjb252ZXJ0KVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3NpZ25hdHVyZSc6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwgY29udmVydFNpZyh0eXBlKSk7XG5cbiAgICBjYXNlICd1bmlvbic6XG4gICAgICBpZiAodHlwZS5lbGVtZW50cy5ldmVyeShpc0xpdGVyYWwpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgICAgbmFtZTogJ2VudW0nLFxuICAgICAgICAgIHZhbHVlOiB0eXBlLmVsZW1lbnRzLm1hcCh0b0VudW1PcHRpb24pXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogdHlwZS5lbGVtZW50cy5tYXAoY29udmVydClcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnaW50ZXJzZWN0aW9uJzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiB0eXBlLmVsZW1lbnRzLm1hcChjb252ZXJ0KVxuICAgICAgfSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogJ290aGVyJyxcbiAgICAgICAgdmFsdWU6IG5hbWVcbiAgICAgIH0pO1xuICB9XG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///524\n")},525:function(module,exports){eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiI1MjUuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///525\n")},526:function(module,exports){eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiI1MjYuanMiLCJzb3VyY2VzQ29udGVudCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///526\n")},532: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_PR-13/node_modules/core-js/modules/es.function.name.js\nvar es_function_name = __webpack_require__(7);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.map.js\nvar es_array_map = __webpack_require__(24);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.object.assign.js\nvar es_object_assign = __webpack_require__(8);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.split.js\nvar es_string_split = __webpack_require__(67);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.regexp.exec.js\nvar es_regexp_exec = __webpack_require__(30);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.array.concat.js\nvar es_array_concat = __webpack_require__(21);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/lodash/mapValues.js\nvar mapValues = __webpack_require__(55);\nvar mapValues_default = /*#__PURE__*/__webpack_require__.n(mapValues);\n\n// EXTERNAL MODULE: /home/jenkins/workspace/design-system_PR-13/node_modules/core-js/modules/es.string.replace.js\nvar es_string_replace = __webpack_require__(47);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3V0aWxzLmpzP2VlODIiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BzdG9yeWJvb2svYWRkb24tZG9jcy9kaXN0L2VzbS9saWIvY29udmVydC9wcm9wdHlwZXMvY29udmVydC5qcz9hOWVhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUE4QztBQUNIO0FBQzNDO0FBQ087QUFDUDtBQUNBLEU7O0FDTDZDO0FBQ0o7QUFDSTtBQUNEO0FBQ0Q7QUFDQzs7QUFFNUM7QUFDeUM7QUFDSDtBQUN0QztBQUNPLElBQUksZUFBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsVUFBVTtBQUMzQixTQUFTOztBQUVULCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLE9BQU87O0FBRVA7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSxPQUFPOztBQUVQO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQVM7QUFDNUI7QUFDQSxPQUFPO0FBQ1AsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXLGNBQWM7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0JBQStCO0FBQy9CO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBIiwiZmlsZSI6IjUzMi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG52YXIgUVVPVEVfUkVHRVggPSAvXlsnXCJdfFsnXCJdJC9nO1xuZXhwb3J0IHZhciB0cmltUXVvdGVzID0gZnVuY3Rpb24gdHJpbVF1b3RlcyhzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKFFVT1RFX1JFR0VYLCAnJyk7XG59OyIsImltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzXCI7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG5pbXBvcnQgbWFwVmFsdWVzIGZyb20gJ2xvZGFzaC9tYXBWYWx1ZXMnO1xuaW1wb3J0IHsgdHJpbVF1b3RlcyB9IGZyb20gJy4uL3V0aWxzJztcbnZhciBTSUdOQVRVUkVfUkVHRVhQID0gL15cXCguKlxcKSA9PiAvO1xuZXhwb3J0IHZhciBjb252ZXJ0ID0gZnVuY3Rpb24gY29udmVydCh0eXBlKSB7XG4gIHZhciBuYW1lID0gdHlwZS5uYW1lLFxuICAgICAgcmF3ID0gdHlwZS5yYXcsXG4gICAgICBjb21wdXRlZCA9IHR5cGUuY29tcHV0ZWQsXG4gICAgICB2YWx1ZSA9IHR5cGUudmFsdWU7XG4gIHZhciBiYXNlID0ge307XG4gIGlmICh0eXBlb2YgcmF3ICE9PSAndW5kZWZpbmVkJykgYmFzZS5yYXcgPSByYXc7XG5cbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnZW51bSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfdmFsdWVzID0gY29tcHV0ZWQgPyB2YWx1ZSA6IHZhbHVlLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB0cmltUXVvdGVzKHYudmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgdmFsdWU6IF92YWx1ZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6IG5hbWVcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnZnVuYyc6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiAnZnVuY3Rpb24nXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2Jvb2wnOlxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogJ2Jvb2xlYW4nXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ2FycmF5T2YnOlxuICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6ICdhcnJheScsXG4gICAgICAgIHZhbHVlOiB2YWx1ZSAmJiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSk7XG5cbiAgICBjYXNlICdvYmplY3RPZic6XG4gICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgYmFzZSwge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogY29udmVydCh2YWx1ZSlcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnc2hhcGUnOlxuICAgIGNhc2UgJ2V4YWN0JzpcbiAgICAgIHZhciB2YWx1ZXMgPSBtYXBWYWx1ZXModmFsdWUsIGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICByZXR1cm4gY29udmVydChmaWVsZCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6ICdvYmplY3QnLFxuICAgICAgICB2YWx1ZTogdmFsdWVzXG4gICAgICB9KTtcblxuICAgIGNhc2UgJ3VuaW9uJzpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgIG5hbWU6ICd1bmlvbicsXG4gICAgICAgIHZhbHVlOiB2YWx1ZS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICByZXR1cm4gY29udmVydCh2KTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuXG4gICAgY2FzZSAnaW5zdGFuY2VPZic6XG4gICAgY2FzZSAnZWxlbWVudCc6XG4gICAgY2FzZSAnZWxlbWVudFR5cGUnOlxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIGlmICgobmFtZSA9PT0gbnVsbCB8fCBuYW1lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuYW1lLmluZGV4T2YoJ3wnKSkgPiAwKSB7XG4gICAgICAgICAgLy8gcmVhY3QtZG9jZ2VuLXR5cGVzY3JpcHQtcGx1Z2luIGRvZXNuJ3QgYWx3YXlzIHByb2R1Y2UgZW51bS1saWtlIHVuaW9uc1xuICAgICAgICAgIC8vIChsaWtlIGlmIGEgdXNlciBoYXMgdHVybmVkIG9mZiBzaG91bGRFeHRyYWN0VmFsdWVzRnJvbVVuaW9uKSBzbyBoZXJlIHdlXG4gICAgICAgICAgLy8gdHJ5IHRvIHJlY292ZXIgYW5kIGNvbnN0cnVjdCBvbmUuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBsaXRlcmFsVmFsdWVzID0gbmFtZS5zcGxpdCgnfCcpLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGJhc2UsIHtcbiAgICAgICAgICAgICAgbmFtZTogJ2VudW0nLFxuICAgICAgICAgICAgICB2YWx1ZTogbGl0ZXJhbFZhbHVlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7Ly8gZmFsbCB0aHJvdWdoXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG90aGVyVmFsID0gdmFsdWUgPyBcIlwiLmNvbmNhdChuYW1lLCBcIihcIikuY29uY2F0KHZhbHVlLCBcIilcIikgOiBuYW1lO1xuICAgICAgICB2YXIgb3RoZXJOYW1lID0gU0lHTkFUVVJFX1JFR0VYUC50ZXN0KG5hbWUpID8gJ2Z1bmN0aW9uJyA6ICdvdGhlcic7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBiYXNlLCB7XG4gICAgICAgICAgbmFtZTogb3RoZXJOYW1lLFxuICAgICAgICAgIHZhbHVlOiBvdGhlclZhbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgfVxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///532\n")},534: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__(789);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYW5zaS10by1odG1sL3NyYy9hbnNpX3RvX2h0bWwuanM/NjExMSJdLCJuYW1lcyI6WyJlbnRpdGllcyIsInJlcXVpcmUiLCJkZWZhdWx0cyIsImZnIiwiYmciLCJuZXdsaW5lIiwiZXNjYXBlWE1MIiwic3RyZWFtIiwiY29sb3JzIiwiZ2V0RGVmYXVsdENvbG9ycyIsInJhbmdlIiwiZm9yRWFjaCIsInJlZCIsImdyZWVuIiwiYmx1ZSIsInNldFN0eWxlQ29sb3IiLCJncmF5IiwiYyIsImwiLCJ0b0hleFN0cmluZyIsInIiLCJnIiwiYiIsInRvQ29sb3JIZXhTdHJpbmciLCJudW0iLCJzdHIiLCJ0b1N0cmluZyIsImxlbmd0aCIsInJlZiIsInJlc3VsdHMiLCJwdXNoIiwiam9pbiIsImdlbmVyYXRlT3V0cHV0Iiwic3RhY2siLCJ0b2tlbiIsImRhdGEiLCJvcHRpb25zIiwicmVzdWx0IiwicHVzaFRleHQiLCJoYW5kbGVEaXNwbGF5IiwicHVzaEZvcmVncm91bmRDb2xvciIsImhhbmRsZVJnYiIsInN1YnN0cmluZyIsInNsaWNlIiwib3BlcmF0aW9uIiwic3Vic3RyIiwiY29sb3IiLCJzcGxpdCIsInJnYiIsIm1hcCIsInZhbHVlIiwiTnVtYmVyIiwicHVzaFN0eWxlIiwiY29kZSIsInBhcnNlSW50IiwiY29kZU1hcCIsInJlc2V0U3R5bGVzIiwicHVzaFRhZyIsImNsb3NlVGFnIiwicHVzaEJhY2tncm91bmRDb2xvciIsInN0YWNrQ2xvbmUiLCJyZXZlcnNlIiwidGFnIiwibG93IiwiaGlnaCIsImoiLCJub3RDYXRlZ29yeSIsImNhdGVnb3J5IiwiZSIsImNhdGVnb3J5Rm9yQ29kZSIsInRleHQiLCJlbmNvZGVYTUwiLCJzdHlsZSIsImxhc3QiLCJwb3AiLCJ0b2tlbml6ZSIsImNhbGxiYWNrIiwiYW5zaU1hdGNoIiwiYW5zaUhhbmRsZXIiLCJyZW1vdmUiLCJyZW1vdmVYdGVybTI1NiIsIm0iLCJnMSIsImFuc2lNZXNzIiwidHJpbSIsInRyaW1SaWdodCIsInJlYWxUZXh0IiwidG9rZW5zIiwicGF0dGVybiIsInN1YiIsInByb2Nlc3MiLCJoYW5kbGVyIiwiaSIsInJlcGxhY2UiLCJyZXN1bHRzMSIsIm91dGVyIiwibyIsImxlbiIsInVwZGF0ZVN0aWNreVN0YWNrIiwic3RpY2t5U3RhY2siLCJmaWx0ZXIiLCJGaWx0ZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpbnB1dCIsImJ1ZiIsImVsZW1lbnQiLCJvdXRwdXQiLCJtb2R1bGUiLCJleHBvcnRzIl0sIm1hcHBpbmdzIjoiQUFBYTs7Ozs7Ozs7Ozs7Ozs7QUFDYixJQUFNQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMsR0FBRCxDQUF4Qjs7QUFDQSxJQUFNQyxRQUFRLEdBQUc7QUFDYkMsSUFBRSxFQUFFLE1BRFM7QUFFYkMsSUFBRSxFQUFFLE1BRlM7QUFHYkMsU0FBTyxFQUFFLEtBSEk7QUFJYkMsV0FBUyxFQUFFLEtBSkU7QUFLYkMsUUFBTSxFQUFFLEtBTEs7QUFNYkMsUUFBTSxFQUFFQyxnQkFBZ0I7QUFOWCxDQUFqQjs7QUFTQSxTQUFTQSxnQkFBVCxHQUE0QjtBQUN4QixNQUFNRCxNQUFNLEdBQUc7QUFDWCxPQUFHLE1BRFE7QUFFWCxPQUFHLE1BRlE7QUFHWCxPQUFHLE1BSFE7QUFJWCxPQUFHLE1BSlE7QUFLWCxPQUFHLE1BTFE7QUFNWCxPQUFHLE1BTlE7QUFPWCxPQUFHLE1BUFE7QUFRWCxPQUFHLE1BUlE7QUFTWCxPQUFHLE1BVFE7QUFVWCxPQUFHLE1BVlE7QUFXWCxRQUFJLE1BWE87QUFZWCxRQUFJLE1BWk87QUFhWCxRQUFJLE1BYk87QUFjWCxRQUFJLE1BZE87QUFlWCxRQUFJLE1BZk87QUFnQlgsUUFBSTtBQWhCTyxHQUFmO0FBbUJBRSxPQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBTCxDQUFZQyxPQUFaLENBQW9CLFVBQUFDLEdBQUcsRUFBSTtBQUN2QkYsU0FB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T0FBTyxDQUFDdkUsSUFBL0IsRUFBcUNDLE9BQXJDLENBQTdCOztBQUVBLFlBQUl1RSxNQUFKLEVBQVk7QUFDUkYsYUFBRyxDQUFDM0UsSUFBSixDQUFTNkUsTUFBVDtBQUNIO0FBQ0osT0FORDtBQVFBaEMsY0FBUSxDQUFDNkIsS0FBSyxDQUFDekUsSUFBTixDQUFXLEVBQVgsQ0FBRCxFQUFpQkssT0FBakIsRUFBMEIsVUFBQ0YsS0FBRCxFQUFRQyxJQUFSLEVBQWlCO0FBQy9DLFlBQU13RSxNQUFNLEdBQUczRSxjQUFjLENBQUNDLEtBQUQsRUFBUUMsS0FBUixFQUFlQyxJQUFmLEVBQXFCQyxPQUFyQixDQUE3Qjs7QUFFQSxZQUFJdUUsTUFBSixFQUFZO0FBQ1JGLGFBQUcsQ0FBQzNFLElBQUosQ0FBUzZFLE1BQVQ7QUFDSDs7QUFFRCxZQUFJdkUsT0FBTyxDQUFDN0IsTUFBWixFQUFvQjtBQUNoQixlQUFJLENBQUM0RixXQUFMLEdBQW1CRCxpQkFBaUIsQ0FBQyxLQUFJLENBQUNDLFdBQU4sRUFBbUJqRSxLQUFuQixFQUEwQkMsSUFBMUIsQ0FBcEM7QUFDSDtBQUNKLE9BVk8sQ0FBUjs7QUFZQSxVQUFJRixLQUFLLENBQUNOLE1BQVYsRUFBa0I7QUFDZDhFLFdBQUcsQ0FBQzNFLElBQUosQ0FBUzBCLFdBQVcsQ0FBQ3ZCLEtBQUQsQ0FBcEI7QUFDSDs7QUFFRCxhQUFPd0UsR0FBRyxDQUFDMUUsSUFBSixDQUFTLEVBQVQsQ0FBUDtBQUNIOzs7Ozs7QUFHTDZFLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQlIsTUFBakIiLCJmaWxlIjoiNTM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuY29uc3QgZW50aXRpZXMgPSByZXF1aXJlKCdlbnRpdGllcycpO1xuY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgZmc6ICcjRkZGJyxcbiAgICBiZzogJyMwMDAnLFxuICAgIG5ld2xpbmU6IGZhbHNlLFxuICAgIGVzY2FwZVhNTDogZmFsc2UsXG4gICAgc3RyZWFtOiBmYWxzZSxcbiAgICBjb2xvcnM6IGdldERlZmF1bHRDb2xvcnMoKVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbG9ycygpIHtcbiAgICBjb25zdCBjb2xvcnMgPSB7XG4gICAgICAgIDA6ICcjMDAwJyxcbiAgICAgICAgMTogJyNBMDAnLFxuICAgICAgICAyOiAnIzBBMCcsXG4gICAgICAgIDM6ICcjQTUwJyxcbiAgICAgICAgNDogJyMwMEEnLFxuICAgICAgICA1OiAnI0EwQScsXG4gICAgICAgIDY6ICcjMEFBJyxcbiAgICAgICAgNzogJyNBQUEnLFxuICAgICAgICA4OiAnIzU1NScsXG4gICAgICAgIDk6ICcjRjU1JyxcbiAgICAgICAgMTA6ICcjNUY1JyxcbiAgICAgICAgMTE6ICcjRkY1JyxcbiAgICAgICAgMTI6ICcjNTVGJyxcbiAgICAgICAgMTM6ICcjRjVGJyxcbiAgICAgICAgMTQ6ICcjNUZGJyxcbiAgICAgICAgMTU6ICcjRkZGJ1xuICAgIH07XG5cbiAgICByYW5nZSgwLCA1KS5mb3JFYWNoKHJlZCA9PiB7XG4gICAgICAgIHJhbmdlKDAsIDUpLmZvckVhY2goZ3JlZW4gPT4ge1xuICAgICAgICAgICAgcmFuZ2UoMCwgNSkuZm9yRWFjaChibHVlID0+IHNldFN0eWxlQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgY29sb3JzKSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmFuZ2UoMCwgMjMpLmZvckVhY2goZnVuY3Rpb24gKGdyYXkpIHtcbiAgICAgICAgY29uc3QgYyA9IGdyYXkgKyAyMzI7XG4gICAgICAgIGNvbnN0IGwgPSB0b0hleFN0cmluZyhncmF5ICogMTAgKyA4KTtcblxuICAgICAgICBjb2xvcnNbY10gPSAnIycgKyBsICsgbCArIGw7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29sb3JzO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSByZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBncmVlblxuICogQHBhcmFtIHtudW1iZXJ9IGJsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2xvcnNcbiAqL1xuZnVuY3Rpb24gc2V0U3R5bGVDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBjb2xvcnMpIHtcbiAgICBjb25zdCBjID0gMTYgKyAocmVkICogMzYpICsgKGdyZWVuICogNikgKyBibHVlO1xuICAgIGNvbnN0IHIgPSByZWQgPiAwID8gcmVkICogNDAgKyA1NSA6IDA7XG4gICAgY29uc3QgZyA9IGdyZWVuID4gMCA/IGdyZWVuICogNDAgKyA1NSA6IDA7XG4gICAgY29uc3QgYiA9IGJsdWUgPiAwID8gYmx1ZSAqIDQwICsgNTUgOiAwO1xuXG4gICAgY29sb3JzW2NdID0gdG9Db2xvckhleFN0cmluZyhbciwgZywgYl0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYSBudW1iZXIgbGlrZSAxNSB0byBhIGhleCBzdHJpbmcgbGlrZSAnRidcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRvSGV4U3RyaW5nKG51bSkge1xuICAgIGxldCBzdHIgPSBudW0udG9TdHJpbmcoMTYpO1xuXG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSB7XG4gICAgICAgIHN0ciA9ICcwJyArIHN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGZyb20gYW4gYXJyYXkgb2YgbnVtYmVycyBsaWtlIFsxNSwgMTUsIDE1XSB0byBhIGhleCBzdHJpbmcgbGlrZSAnRkZGJ1xuICogQHBhcmFtIHtbcmVkLCBncmVlbiwgYmx1ZV19IHJlZlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9Db2xvckhleFN0cmluZyhyZWYpIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHIgb2YgcmVmKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh0b0hleFN0cmluZyhyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcjJyArIHJlc3VsdHMuam9pbignJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBnZW5lcmF0ZU91dHB1dChzdGFjaywgdG9rZW4sIGRhdGEsIG9wdGlvbnMpIHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKHRva2VuID09PSAndGV4dCcpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaFRleHQoZGF0YSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ2Rpc3BsYXknKSB7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZURpc3BsYXkoc3RhY2ssIGRhdGEsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICd4dGVybTI1NicpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEZvcmVncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbZGF0YV0pO1xuICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICdyZ2InKSB7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZVJnYihzdGFjaywgZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGRhdGFcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBoYW5kbGVSZ2Ioc3RhY2ssIGRhdGEpIHtcbiAgICBkYXRhID0gZGF0YS5zdWJzdHJpbmcoMikuc2xpY2UoMCwgLTEpO1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9ICtkYXRhLnN1YnN0cigwLDIpO1xuXG4gICAgY29uc3QgY29sb3IgPSBkYXRhLnN1YnN0cmluZyg1KS5zcGxpdCgnOycpO1xuICAgIGNvbnN0IHJnYiA9IGNvbG9yLm1hcChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKCcwJyArIE51bWJlcih2YWx1ZSkudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTIpO1xuICAgIH0pLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIHB1c2hTdHlsZShzdGFjaywgKG9wZXJhdGlvbiA9PT0gMzggPyAnY29sb3I6IycgOiAnYmFja2dyb3VuZC1jb2xvcjojJykgKyByZ2IpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBoYW5kbGVEaXNwbGF5KHN0YWNrLCBjb2RlLCBvcHRpb25zKSB7XG4gICAgY29kZSA9IHBhcnNlSW50KGNvZGUsIDEwKTtcblxuICAgIGNvbnN0IGNvZGVNYXAgPSB7XG4gICAgICAgICctMSc6ICgpID0+ICc8YnIvPicsXG4gICAgICAgIDA6ICgpID0+IHN0YWNrLmxlbmd0aCAmJiByZXNldFN0eWxlcyhzdGFjayksXG4gICAgICAgIDE6ICgpID0+IHB1c2hUYWcoc3RhY2ssICdiJyksXG4gICAgICAgIDM6ICgpID0+IHB1c2hUYWcoc3RhY2ssICdpJyksXG4gICAgICAgIDQ6ICgpID0+IHB1c2hUYWcoc3RhY2ssICd1JyksXG4gICAgICAgIDg6ICgpID0+IHB1c2hTdHlsZShzdGFjaywgJ2Rpc3BsYXk6bm9uZScpLFxuICAgICAgICA5OiAoKSA9PiBwdXNoVGFnKHN0YWNrLCAnc3RyaWtlJyksXG4gICAgICAgIDIyOiAoKSA9PiBwdXNoU3R5bGUoc3RhY2ssICdmb250LXdlaWdodDpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zdHlsZTpub3JtYWwnKSxcbiAgICAgICAgMjM6ICgpID0+IGNsb3NlVGFnKHN0YWNrLCAnaScpLFxuICAgICAgICAyNDogKCkgPT4gY2xvc2VUYWcoc3RhY2ssICd1JyksXG4gICAgICAgIDM5OiAoKSA9PiBwdXNoRm9yZWdyb3VuZENvbG9yKHN0YWNrLCBvcHRpb25zLmZnKSxcbiAgICAgICAgNDk6ICgpID0+IHB1c2hCYWNrZ3JvdW5kQ29sb3Ioc3RhY2ssIG9wdGlvbnMuYmcpLFxuICAgICAgICA1MzogKCkgPT4gcHVzaFN0eWxlKHN0YWNrLCAndGV4dC1kZWNvcmF0aW9uOm92ZXJsaW5lJylcbiAgICB9O1xuXG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoY29kZU1hcFtjb2RlXSkge1xuICAgICAgICByZXN1bHQgPSBjb2RlTWFwW2NvZGVdKCk7XG4gICAgfSBlbHNlIGlmICg0IDwgY29kZSAmJiBjb2RlIDwgNykge1xuICAgICAgICByZXN1bHQgPSBwdXNoVGFnKHN0YWNrLCAnYmxpbmsnKTtcbiAgICB9IGVsc2UgaWYgKDI5IDwgY29kZSAmJiBjb2RlIDwgMzgpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEZvcmVncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbY29kZSAtIDMwXSk7XG4gICAgfSBlbHNlIGlmICgoMzkgPCBjb2RlICYmIGNvZGUgPCA0OCkpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEJhY2tncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbY29kZSAtIDQwXSk7XG4gICAgfSBlbHNlIGlmICgoODkgPCBjb2RlICYmIGNvZGUgPCA5OCkpIHtcbiAgICAgICAgcmVzdWx0ID0gcHVzaEZvcmVncm91bmRDb2xvcihzdGFjaywgb3B0aW9ucy5jb2xvcnNbOCArIChjb2RlIC0gOTApXSk7XG4gICAgfSBlbHNlIGlmICgoOTkgPCBjb2RlICYmIGNvZGUgPCAxMDgpKSB7XG4gICAgICAgIHJlc3VsdCA9IHB1c2hCYWNrZ3JvdW5kQ29sb3Ioc3RhY2ssIG9wdGlvbnMuY29sb3JzWzggKyAoY29kZSAtIDEwMCldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENsZWFyIGFsbCB0aGUgc3R5bGVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiByZXNldFN0eWxlcyhzdGFjaykge1xuICAgIGNvbnN0IHN0YWNrQ2xvbmUgPSBzdGFjay5zbGljZSgwKTtcblxuICAgIHN0YWNrLmxlbmd0aCA9IDA7XG5cbiAgICByZXR1cm4gc3RhY2tDbG9uZS5yZXZlcnNlKCkubWFwKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgICAgcmV0dXJuICc8LycgKyB0YWcgKyAnPic7XG4gICAgfSkuam9pbignJyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIHJhbmdpbmcgZnJvbSBsb3cgdG8gaGlnaFxuICogQHBhcmFtIHtudW1iZXJ9IGxvd1xuICogQHBhcmFtIHtudW1iZXJ9IGhpZ2hcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBleGFtcGxlIHJhbmdlKDMsIDcpOyAvLyBjcmVhdGVzIFszLCA0LCA1LCA2LCA3XVxuICovXG5mdW5jdGlvbiByYW5nZShsb3csIGhpZ2gpIHtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICBmb3IgKGxldCBqID0gbG93OyBqIDw9IGhpZ2g7IGorKykge1xuICAgICAgICByZXN1bHRzLnB1c2goaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cblxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgZnVuY3Rpb24gdGhhdCBpcyB0cnVlIGlmIHZhbHVlIGlzIE5PVCB0aGUgc2FtZSBjYXRlZ29yeVxuICogQHBhcmFtIHtzdHJpbmd9IGNhdGVnb3J5XG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIG5vdENhdGVnb3J5KGNhdGVnb3J5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiAoY2F0ZWdvcnkgPT09IG51bGwgfHwgZS5jYXRlZ29yeSAhPT0gY2F0ZWdvcnkpICYmIGNhdGVnb3J5ICE9PSAnYWxsJztcbiAgICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29kZSBpbnRvIGFuIGFuc2kgdG9rZW4gdHlwZVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhdGVnb3J5Rm9yQ29kZShjb2RlKSB7XG4gICAgY29kZSA9IHBhcnNlSW50KGNvZGUsIDEwKTtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHJlc3VsdCA9ICdhbGwnO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMSkge1xuICAgICAgICByZXN1bHQgPSAnYm9sZCc7XG4gICAgfSBlbHNlIGlmICgoMiA8IGNvZGUgJiYgY29kZSA8IDUpKSB7XG4gICAgICAgIHJlc3VsdCA9ICd1bmRlcmxpbmUnO1xuICAgIH0gZWxzZSBpZiAoKDQgPCBjb2RlICYmIGNvZGUgPCA3KSkge1xuICAgICAgICByZXN1bHQgPSAnYmxpbmsnO1xuICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gOCkge1xuICAgICAgICByZXN1bHQgPSAnaGlkZSc7XG4gICAgfSBlbHNlIGlmIChjb2RlID09PSA5KSB7XG4gICAgICAgIHJlc3VsdCA9ICdzdHJpa2UnO1xuICAgIH0gZWxzZSBpZiAoKDI5IDwgY29kZSAmJiBjb2RlIDwgMzgpIHx8IGNvZGUgPT09IDM5IHx8ICg4OSA8IGNvZGUgJiYgY29kZSA8IDk4KSkge1xuICAgICAgICByZXN1bHQgPSAnZm9yZWdyb3VuZC1jb2xvcic7XG4gICAgfSBlbHNlIGlmICgoMzkgPCBjb2RlICYmIGNvZGUgPCA0OCkgfHwgY29kZSA9PT0gNDkgfHwgKDk5IDwgY29kZSAmJiBjb2RlIDwgMTA4KSkge1xuICAgICAgICByZXN1bHQgPSAnYmFja2dyb3VuZC1jb2xvcic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHB1c2hUZXh0KHRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5lc2NhcGVYTUwpIHtcbiAgICAgICAgcmV0dXJuIGVudGl0aWVzLmVuY29kZVhNTCh0ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHlsZT0nJ11cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHB1c2hUYWcoc3RhY2ssIHRhZywgc3R5bGUpIHtcbiAgICBpZiAoIXN0eWxlKSB7XG4gICAgICAgIHN0eWxlID0gJyc7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh0YWcpO1xuXG4gICAgcmV0dXJuIGA8JHt0YWd9JHtzdHlsZSA/IGAgc3R5bGU9XCIke3N0eWxlfVwiYCA6ICcnfT5gO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHB1c2hTdHlsZSAoc3RhY2ssIHN0eWxlKSB7XG4gICAgcmV0dXJuIHB1c2hUYWcoc3RhY2ssICdzcGFuJywgc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRm9yZWdyb3VuZENvbG9yKHN0YWNrLCBjb2xvcikge1xuICAgIHJldHVybiBwdXNoVGFnKHN0YWNrLCAnc3BhbicsICdjb2xvcjonICsgY29sb3IpO1xufVxuXG5mdW5jdGlvbiBwdXNoQmFja2dyb3VuZENvbG9yKHN0YWNrLCBjb2xvcikge1xuICAgIHJldHVybiBwdXNoVGFnKHN0YWNrLCAnc3BhbicsICdiYWNrZ3JvdW5kLWNvbG9yOicgKyBjb2xvcik7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gc3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHlsZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2xvc2VUYWcoc3RhY2ssIHN0eWxlKSB7XG4gICAgbGV0IGxhc3Q7XG5cbiAgICBpZiAoc3RhY2suc2xpY2UoLTEpWzBdID09PSBzdHlsZSkge1xuICAgICAgICBsYXN0ID0gc3RhY2sucG9wKCk7XG4gICAgfVxuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgICAgcmV0dXJuICc8LycgKyBzdHlsZSArICc+JztcbiAgICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZSh0ZXh0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGxldCBhbnNpTWF0Y2ggPSBmYWxzZTtcbiAgICBjb25zdCBhbnNpSGFuZGxlciA9IDM7XG5cbiAgICBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVYdGVybTI1NihtLCBnMSkge1xuICAgICAgICBjYWxsYmFjaygneHRlcm0yNTYnLCBnMSk7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdsaW5lKG0pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMubmV3bGluZSkge1xuICAgICAgICAgICAgY2FsbGJhY2soJ2Rpc3BsYXknLCAtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygndGV4dCcsIG0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFuc2lNZXNzKG0sIGcxKSB7XG4gICAgICAgIGFuc2lNYXRjaCA9IHRydWU7XG4gICAgICAgIGlmIChnMS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBnMSA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIGcxID0gZzEudHJpbVJpZ2h0KCc7Jykuc3BsaXQoJzsnKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGcgb2YgZzEpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCdkaXNwbGF5JywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhbFRleHQobSkge1xuICAgICAgICBjYWxsYmFjaygndGV4dCcsIG0pO1xuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZ2IobSkge1xuICAgICAgICBjYWxsYmFjaygncmdiJywgbSk7XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qIGVzbGludCBuby1jb250cm9sLXJlZ2V4OjAgKi9cbiAgICBjb25zdCB0b2tlbnMgPSBbe1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDA4Ky8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDFiXFxbWzAxMl0/Sy8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDFiXFxbXFwoQi8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICBwYXR0ZXJuOiAvXlxceDFiXFxbWzM0XTg7MjtcXGQrO1xcZCs7XFxkK20vLFxuICAgICAgICBzdWI6IHJnYlxuICAgIH0sIHtcbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcWzM4OzU7KFxcZCspbS8sXG4gICAgICAgIHN1YjogcmVtb3ZlWHRlcm0yNTZcbiAgICB9LCB7XG4gICAgICAgIHBhdHRlcm46IC9eXFxuLyxcbiAgICAgICAgc3ViOiBuZXdsaW5lXG4gICAgfSx7XG4gICAgICAgIHBhdHRlcm46IC9eXFxyK1xcbi8sXG4gICAgICAgIHN1YjogbmV3bGluZVxuICAgIH0sIHtcbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcWygoPzpcXGR7MSwzfTs/KSt8KW0vLFxuICAgICAgICBzdWI6IGFuc2lNZXNzXG4gICAgfSwge1xuICAgICAgICAvLyBDU0kgbiBKXG4gICAgICAgIC8vIEVEIC0gRXJhc2UgaW4gRGlzcGxheSBDbGVhcnMgcGFydCBvZiB0aGUgc2NyZWVuLlxuICAgICAgICAvLyBJZiBuIGlzIDAgKG9yIG1pc3NpbmcpLCBjbGVhciBmcm9tIGN1cnNvciB0byBlbmQgb2Ygc2NyZWVuLlxuICAgICAgICAvLyBJZiBuIGlzIDEsIGNsZWFyIGZyb20gY3Vyc29yIHRvIGJlZ2lubmluZyBvZiB0aGUgc2NyZWVuLlxuICAgICAgICAvLyBJZiBuIGlzIDIsIGNsZWFyIGVudGlyZSBzY3JlZW4gKGFuZCBtb3ZlcyBjdXJzb3IgdG8gdXBwZXIgbGVmdCBvbiBET1MgQU5TSS5TWVMpLlxuICAgICAgICAvLyBJZiBuIGlzIDMsIGNsZWFyIGVudGlyZSBzY3JlZW4gYW5kIGRlbGV0ZSBhbGwgbGluZXMgc2F2ZWQgaW4gdGhlIHNjcm9sbGJhY2sgYnVmZmVyXG4gICAgICAgIC8vICAgKHRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgZm9yIHh0ZXJtIGFuZCBpcyBzdXBwb3J0ZWQgYnkgb3RoZXIgdGVybWluYWwgYXBwbGljYXRpb25zKS5cbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcW1xcZD9KLyxcbiAgICAgICAgc3ViOiByZW1vdmVcbiAgICB9LCB7XG4gICAgICAgIC8vIENTSSBuIDsgbSBmXG4gICAgICAgIC8vIEhWUCAtIEhvcml6b250YWwgVmVydGljYWwgUG9zaXRpb24gU2FtZSBhcyBDVVBcbiAgICAgICAgcGF0dGVybjogL15cXHgxYlxcW1xcZHswLDN9O1xcZHswLDN9Zi8sXG4gICAgICAgIHN1YjogcmVtb3ZlXG4gICAgfSwge1xuICAgICAgICAvLyBjYXRjaC1hbGwgZm9yIENTSSBzZXF1ZW5jZXM/XG4gICAgICAgIHBhdHRlcm46IC9eXFx4MWJcXFs/W1xcZDtdezAsM30vLFxuICAgICAgICBzdWI6IHJlbW92ZVxuICAgIH0sIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGV4dHJhY3RzIHJlYWwgdGV4dCAtIG5vdCBjb250YWluaW5nOlxuICAgICAgICAgKiAtIGBcXHgxYicgLSBFU0MgLSBlc2NhcGUgKEFzY2lpIDI3KVxuICAgICAgICAgKiAtICdcXHgwOCcgLSBCUyAtIGJhY2tzcGFjZSAoQXNjaWkgOClcbiAgICAgICAgICogLSBgXFxuYCAtIE5ld2xpbmUgLSBsaW5lZmVlZCAoTEYpIChhc2NpaSAxMClcbiAgICAgICAgICogLSBgXFxyYCAtIFdpbmRvd3MgQ2FycmlhZ2UgUmV0dXJuIChDUilcbiAgICAgICAgICovXG4gICAgICAgIHBhdHRlcm46IC9eKChbXlxceDFiXFx4MDhcXHJcXG5dKSspLyxcbiAgICAgICAgc3ViOiByZWFsVGV4dFxuICAgIH1dO1xuXG4gICAgZnVuY3Rpb24gcHJvY2VzcyhoYW5kbGVyLCBpKSB7XG4gICAgICAgIGlmIChpID4gYW5zaUhhbmRsZXIgJiYgYW5zaU1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhbnNpTWF0Y2ggPSBmYWxzZTtcblxuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGhhbmRsZXIucGF0dGVybiwgaGFuZGxlci5zdWIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdHMxID0gW107XG4gICAgbGV0IHtsZW5ndGh9ID0gdGV4dDtcblxuICAgIG91dGVyOlxuICAgIHdoaWxlIChsZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBvID0gMCwgbGVuID0gdG9rZW5zLmxlbmd0aDsgbyA8IGxlbjsgaSA9ICsrbykge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHByb2Nlc3MoaGFuZGxlciwgaSk7XG5cbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF0Y2hlZCBhIHRva2VuIGFuZCByZW1vdmVkIGl0IGZyb20gdGhlIHRleHQuIFdlIG5lZWQgdG9cbiAgICAgICAgICAgICAgICAvLyBzdGFydCBtYXRjaGluZyAqYWxsKiB0b2tlbnMgYWdhaW5zdCB0aGUgbmV3IHRleHQuXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dC5sZW5ndGggPT09IGxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0czEucHVzaCgwKTtcblxuICAgICAgICBsZW5ndGggPSB0ZXh0Lmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0czE7XG59XG5cbi8qKlxuICogSWYgc3RyZWFtaW5nLCB0aGVuIHRoZSBzdGFjayBpcyBcInN0aWNreVwiXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc3RpY2t5U3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHBhcmFtIHsqfSBkYXRhXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVN0aWNreVN0YWNrKHN0aWNreVN0YWNrLCB0b2tlbiwgZGF0YSkge1xuICAgIGlmICh0b2tlbiAhPT0gJ3RleHQnKSB7XG4gICAgICAgIHN0aWNreVN0YWNrID0gc3RpY2t5U3RhY2suZmlsdGVyKG5vdENhdGVnb3J5KGNhdGVnb3J5Rm9yQ29kZShkYXRhKSkpO1xuICAgICAgICBzdGlja3lTdGFjay5wdXNoKHt0b2tlbiwgZGF0YSwgY2F0ZWdvcnk6IGNhdGVnb3J5Rm9yQ29kZShkYXRhKX0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdGlja3lTdGFjaztcbn1cblxuY2xhc3MgRmlsdGVyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0aW9ucy5mZyBUaGUgZGVmYXVsdCBmb3JlZ3JvdW5kIGNvbG9yIHVzZWQgd2hlbiByZXNldCBjb2xvciBjb2RlcyBhcmUgZW5jb3VudGVyZWQuXG4gICAgICogQHBhcmFtIHtzdHJpbmc9fSBvcHRpb25zLmJnIFRoZSBkZWZhdWx0IGJhY2tncm91bmQgY29sb3IgdXNlZCB3aGVuIHJlc2V0IGNvbG9yIGNvZGVzIGFyZSBlbmNvdW50ZXJlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRpb25zLm5ld2xpbmUgQ29udmVydCBuZXdsaW5lIGNoYXJhY3RlcnMgdG8gYDxici8+YC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRpb25zLmVzY2FwZVhNTCBHZW5lcmF0ZSBIVE1ML1hNTCBlbnRpdGllcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRpb25zLnN0cmVhbSBTYXZlIHN0eWxlIHN0YXRlIGFjcm9zcyBpbnZvY2F0aW9ucyBvZiBgdG9IdG1sKClgLlxuICAgICAqIEBwYXJhbSB7KHN0cmluZ1tdIHwge1tjb2RlOiBudW1iZXJdOiBzdHJpbmd9KT19IG9wdGlvbnMuY29sb3JzIENhbiBvdmVycmlkZSBzcGVjaWZpYyBjb2xvcnMgb3IgdGhlIGVudGlyZSBBTlNJIHBhbGV0dGUuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IgKG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29sb3JzKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNvbG9ycyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLmNvbG9ycywgb3B0aW9ucy5jb2xvcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdHMsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgIHRoaXMuc3RpY2t5U3RhY2sgPSBbXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRvSHRtbCAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQgPSB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnID8gW2lucHV0XSA6IGlucHV0O1xuICAgICAgICBjb25zdCB7c3RhY2ssIG9wdGlvbnN9ID0gdGhpcztcbiAgICAgICAgY29uc3QgYnVmID0gW107XG5cbiAgICAgICAgdGhpcy5zdGlja3lTdGFjay5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZ2VuZXJhdGVPdXRwdXQoc3RhY2ssIGVsZW1lbnQudG9rZW4sIGVsZW1lbnQuZGF0YSwgb3B0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmIChvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICBidWYucHVzaChvdXRwdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0b2tlbml6ZShpbnB1dC5qb2luKCcnKSwgb3B0aW9ucywgKHRva2VuLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBnZW5lcmF0ZU91dHB1dChzdGFjaywgdG9rZW4sIGRhdGEsIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAob3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgYnVmLnB1c2gob3V0cHV0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGlja3lTdGFjayA9IHVwZGF0ZVN0aWNreVN0YWNrKHRoaXMuc3RpY2t5U3RhY2ssIHRva2VuLCBkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgYnVmLnB1c2gocmVzZXRTdHlsZXMoc3RhY2spKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBidWYuam9pbignJyk7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlcjtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///534\n")},535: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_number_is_integer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(793);\n/* harmony import */ var core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_is_integer_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(153);\n/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(328);\n/* harmony import */ var core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_search_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(30);\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(85);\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(12);\n/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(59);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(24);\n/* harmony import */ var core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map_js__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(51);\n/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(76);\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(79);\n/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(129);\n/* harmony import */ var core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_values_js__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(21);\n/* harmony import */ var core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_concat_js__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(180);\n/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(15);\n/* harmony import */ var core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_iterator_js__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(13);\n/* harmony import */ var core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_iterator_js__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(14);\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(9);\n/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_17__);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(4);\n/* harmony import */ var core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_js__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(11);\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(19);\n/* harmony import */ var core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_iterator_js__WEBPACK_IMPORTED_MODULE_20__);\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(22);\n/* harmony import */ var core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_from_js__WEBPACK_IMPORTED_MODULE_21__);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(7);\n/* harmony import */ var core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name_js__WEBPACK_IMPORTED_MODULE_22__);\n/* harmony import */ var global__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(20);\n/* harmony import */ var global__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(global__WEBPACK_IMPORTED_MODULE_23__);\n/* harmony import */ var _storybook_core_events__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(31);\n/* harmony import */ var _storybook_channels__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(264);\n/* harmony import */ var _storybook_client_logger__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(16);\n/* harmony import */ var telejson__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(288);\n/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(103);\n/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(qs__WEBPACK_IMPORTED_MODULE_28__);\nfunction _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _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 _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\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 _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 _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 _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\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_23___default.a.window,\n document = global__WEBPACK_IMPORTED_MODULE_23___default.a.document,\n location = global__WEBPACK_IMPORTED_MODULE_23___default.a.location;\nvar KEY = \'storybook-channel\'; // 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 depth = 25;\n var allowFunction = true;\n var target;\n\n if (options && typeof options.allowFunction === \'boolean\') {\n allowFunction = options.allowFunction;\n }\n\n if (options && Number.isInteger(options.depth)) {\n depth = options.depth;\n }\n\n if (options && typeof options.target === \'string\') {\n target = options.target;\n }\n\n var frames = this.getFrames(target);\n var query = qs__WEBPACK_IMPORTED_MODULE_28___default.a.parse(location.search, {\n ignoreQueryPrefix: true\n });\n var data = Object(telejson__WEBPACK_IMPORTED_MODULE_27__[/* stringify */ "c"])({\n key: KEY,\n event: event,\n refId: query.refId\n }, {\n maxDepth: depth,\n allowFunction: allowFunction\n });\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 _ref = typeof data === \'string\' && Object(telejson__WEBPACK_IMPORTED_MODULE_27__[/* isJSON */ "a"])(data) ? Object(telejson__WEBPACK_IMPORTED_MODULE_27__[/* parse */ "b"])(data) : data,\n key = _ref.key,\n event = _ref.event,\n refId = _ref.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_24__).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_26__[/* 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_26__[/* pretty */ "c"].debug.apply(_storybook_client_logger__WEBPACK_IMPORTED_MODULE_26__[/* 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_26__[/* 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_26__[/* 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(_ref2) {\n var page = _ref2.page;\n var transport = new PostmsgTransport({\n page: page\n });\n return new _storybook_channels__WEBPACK_IMPORTED_MODULE_25__[/* default */ "a"]({\n transport: transport\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9jaGFubmVsLXBvc3RtZXNzYWdlL2Rpc3QvZXNtL2luZGV4LmpzPzIyNDUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsd0JBQXdCLGdIQUFnSDs7QUFFeEksNkJBQTZCLGtLQUFrSzs7QUFFL0wsK0JBQStCLG9DQUFvQzs7QUFFbkUsa0NBQWtDLHFIQUFxSDs7QUFFdkosK0JBQStCLDZKQUE2Sjs7QUFFNUwsaURBQWlELGdCQUFnQixnRUFBZ0Usd0RBQXdELDZEQUE2RCxzREFBc0Qsa0hBQWtIOztBQUU5WixpQ0FBaUMsK0ZBQStGOztBQUVoSSxrQ0FBa0MsdURBQXVEOztBQUV6RixzQ0FBc0MsdURBQXVELHVDQUF1QyxTQUFTLE9BQU8sa0JBQWtCLEVBQUUsYUFBYTs7QUFFcEk7QUFDQztBQUNMO0FBQ0Y7QUFDSjtBQUNTO0FBQ1M7QUFDaEI7QUFDRztBQUNFO0FBQ0M7QUFDRjtBQUNEO0FBQ1I7QUFDVztBQUNEO0FBQ1c7QUFDZDtBQUNMO0FBQ1k7QUFDSDtBQUNMO0FBQ0c7O0FBRTdDLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKLDJDQUEyQyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVELDJEQUEyRCxFQUFFOztBQUUzVCw2REFBNkQsc0VBQXNFLDhEQUE4RCxvQkFBb0I7O0FBRXpMO0FBQ3FCO0FBQ1A7QUFDZ0I7QUFDTjtBQUNoQztBQUNwQixtQkFBbUIsOENBQU07QUFDekIsZUFBZSw4Q0FBTTtBQUNyQixlQUFlLDhDQUFNO0FBQ2QsOEJBQThCO0FBQ3JDO0FBQ0E7O0FBRU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRjs7QUFFakY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyRUFBMkUsYUFBYTtBQUN4RjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLDBDQUFFO0FBQ3BCO0FBQ0EsT0FBTztBQUNQLGlCQUFpQixtRUFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDLGdFQUFNLFNBQVMsK0RBQUs7QUFDbkU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEZBQTBGLHVFQUF1RTtBQUNqSywwQ0FBMEMsb0RBQU07O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFlBQVksd0VBQU07QUFDbEI7QUFDQTs7QUFFQTtBQUNBLFVBQVUsd0VBQU0sYUFBYSx3RUFBTTtBQUNuQztBQUNBO0FBQ0EsT0FBTztBQUNQLFFBQVEsd0VBQU07QUFDZDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7O0FBRUQ7QUFDQSwwRkFBMEY7QUFDMUY7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLEtBQUssY0FBYztBQUNuQjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJLHdFQUFNO0FBQ1YsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR2U7QUFDZjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsYUFBYSxvRUFBTztBQUNwQjtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiI1MzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfdG9BcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmlzLWludGVnZXIuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC52YWx1ZXMuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIudXJsLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanNcIjtcbmltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzXCI7XG5pbXBvcnQgXCJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qc1wiO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmltcG9ydCBnbG9iYWwgZnJvbSAnZ2xvYmFsJztcbmltcG9ydCAqIGFzIEVWRU5UUyBmcm9tICdAc3Rvcnlib29rL2NvcmUtZXZlbnRzJztcbmltcG9ydCBDaGFubmVsIGZyb20gJ0BzdG9yeWJvb2svY2hhbm5lbHMnO1xuaW1wb3J0IHsgbG9nZ2VyLCBwcmV0dHkgfSBmcm9tICdAc3Rvcnlib29rL2NsaWVudC1sb2dnZXInO1xuaW1wb3J0IHsgaXNKU09OLCBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAndGVsZWpzb24nO1xuaW1wb3J0IHFzIGZyb20gJ3FzJztcbnZhciBnbG9iYWxXaW5kb3cgPSBnbG9iYWwud2luZG93LFxuICAgIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50LFxuICAgIGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xuZXhwb3J0IHZhciBLRVkgPSAnc3Rvcnlib29rLWNoYW5uZWwnOyAvLyBUT0RPOiB3ZSBzaG91bGQgZXhwb3J0IGEgbWV0aG9kIGZvciBvcGVuaW5nIGNoaWxkIHdpbmRvd3MgaGVyZSBhbmQga2VlcCB0cmFjayBvZiBlbS5cbi8vIHRoYXQgd2F5IHdlIGNhbiBzZW5kIHBvc3RNZXNzYWdlIHRvIGNoaWxkIHdpbmRvd3MgYXMgd2VsbCwgbm90IGp1c3QgaWZyYW1lXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MzQwMTYwL2hvdy10by1nZXQtdGhlLXJlZmVyZW5jZXMtb2YtYWxsLWFscmVhZHktb3BlbmVkLWNoaWxkLXdpbmRvd3NcblxuZXhwb3J0IHZhciBQb3N0bXNnVHJhbnNwb3J0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUG9zdG1zZ1RyYW5zcG9ydChjb25maWcpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9zdG1zZ1RyYW5zcG9ydCk7XG5cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmJ1ZmZlciA9IHZvaWQgMDtcbiAgICB0aGlzLmhhbmRsZXIgPSB2b2lkIDA7XG4gICAgdGhpcy5jb25uZWN0ZWQgPSB2b2lkIDA7XG4gICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICB0aGlzLmhhbmRsZXIgPSBudWxsO1xuICAgIGdsb2JhbFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMpLCBmYWxzZSk7IC8vIENoZWNrIHdoZXRoZXIgdGhlIGNvbmZpZy5wYWdlIHBhcmFtZXRlciBoYXMgYSB2YWxpZCB2YWx1ZVxuXG4gICAgaWYgKGNvbmZpZy5wYWdlICE9PSAnbWFuYWdlcicgJiYgY29uZmlnLnBhZ2UgIT09ICdwcmV2aWV3Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicG9zdG1zZy1jaGFubmVsOiBcXFwiY29uZmlnLnBhZ2VcXFwiIGNhbm5vdCBiZSBcXFwiXCIuY29uY2F0KGNvbmZpZy5wYWdlLCBcIlxcXCJcIikpO1xuICAgIH1cbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhQb3N0bXNnVHJhbnNwb3J0LCBbe1xuICAgIGtleTogXCJzZXRIYW5kbGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldEhhbmRsZXIoaGFuZGxlcikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy5oYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlci5hcHBseShfdGhpcywgYXJncyk7XG5cbiAgICAgICAgaWYgKCFfdGhpcy5jb25uZWN0ZWQgJiYgX3RoaXMuZ2V0TG9jYWxGcmFtZSgpLmxlbmd0aCkge1xuICAgICAgICAgIF90aGlzLmZsdXNoKCk7XG5cbiAgICAgICAgICBfdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBgZXZlbnRgIHRvIHRoZSBhc3NvY2lhdGVkIHdpbmRvdy4gSWYgdGhlIHdpbmRvdyBkb2VzIG5vdCB5ZXQgZXhpc3RcbiAgICAgKiB0aGUgZXZlbnQgd2lsbCBiZSBzdG9yZWQgaW4gYSBidWZmZXIgYW5kIHNlbnQgd2hlbiB0aGUgd2luZG93IGV4aXN0cy5cbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcInNlbmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2VuZChldmVudCwgb3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBkZXB0aCA9IDI1O1xuICAgICAgdmFyIGFsbG93RnVuY3Rpb24gPSB0cnVlO1xuICAgICAgdmFyIHRhcmdldDtcblxuICAgICAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMuYWxsb3dGdW5jdGlvbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGFsbG93RnVuY3Rpb24gPSBvcHRpb25zLmFsbG93RnVuY3Rpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zICYmIE51bWJlci5pc0ludGVnZXIob3B0aW9ucy5kZXB0aCkpIHtcbiAgICAgICAgZGVwdGggPSBvcHRpb25zLmRlcHRoO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy50YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0O1xuICAgICAgfVxuXG4gICAgICB2YXIgZnJhbWVzID0gdGhpcy5nZXRGcmFtZXModGFyZ2V0KTtcbiAgICAgIHZhciBxdWVyeSA9IHFzLnBhcnNlKGxvY2F0aW9uLnNlYXJjaCwge1xuICAgICAgICBpZ25vcmVRdWVyeVByZWZpeDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICB2YXIgZGF0YSA9IHN0cmluZ2lmeSh7XG4gICAgICAgIGtleTogS0VZLFxuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIHJlZklkOiBxdWVyeS5yZWZJZFxuICAgICAgfSwge1xuICAgICAgICBtYXhEZXB0aDogZGVwdGgsXG4gICAgICAgIGFsbG93RnVuY3Rpb246IGFsbG93RnVuY3Rpb25cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWZyYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBfdGhpczIuYnVmZmVyLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdDogcmVqZWN0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgIH1cblxuICAgICAgZnJhbWVzLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmLnBvc3RNZXNzYWdlKGRhdGEsICcqJyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdzZW5kaW5nIG92ZXIgcG9zdG1lc3NhZ2UgZmFpbCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZsdXNoXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgICBidWZmZXIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBfdGhpczMuc2VuZChpdGVtLmV2ZW50KS50aGVuKGl0ZW0ucmVzb2x2ZSkuY2F0Y2goaXRlbS5yZWplY3QpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZyYW1lc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGcmFtZXModGFyZ2V0KSB7XG4gICAgICBpZiAodGhpcy5jb25maWcucGFnZSA9PT0gJ21hbmFnZXInKSB7XG4gICAgICAgIHZhciBub2RlcyA9IF90b0NvbnN1bWFibGVBcnJheShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWVbZGF0YS1pcy1zdG9yeWJvb2tdW2RhdGEtaXMtbG9hZGVkXScpKTtcblxuICAgICAgICB2YXIgbGlzdCA9IG5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gISFlLmNvbnRlbnRXaW5kb3cgJiYgZS5kYXRhc2V0LmlzU3Rvcnlib29rICE9PSB1bmRlZmluZWQgJiYgZS5pZCA9PT0gdGFyZ2V0O1xuICAgICAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICByZXR1cm4gZS5jb250ZW50V2luZG93O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpc3QubGVuZ3RoID8gbGlzdCA6IHRoaXMuZ2V0Q3VycmVudEZyYW1lcygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsV2luZG93ICYmIGdsb2JhbFdpbmRvdy5wYXJlbnQgJiYgZ2xvYmFsV2luZG93LnBhcmVudCAhPT0gZ2xvYmFsV2luZG93KSB7XG4gICAgICAgIHJldHVybiBbZ2xvYmFsV2luZG93LnBhcmVudF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Q3VycmVudEZyYW1lc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDdXJyZW50RnJhbWVzKCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLnBhZ2UgPT09ICdtYW5hZ2VyJykge1xuICAgICAgICB2YXIgbGlzdCA9IF90b0NvbnN1bWFibGVBcnJheShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1pcy1zdG9yeWJvb2s9XCJ0cnVlXCJdJykpO1xuXG4gICAgICAgIHJldHVybiBsaXN0Lm1hcChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHJldHVybiBlLmNvbnRlbnRXaW5kb3c7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsV2luZG93ICYmIGdsb2JhbFdpbmRvdy5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIFtnbG9iYWxXaW5kb3cucGFyZW50XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRMb2NhbEZyYW1lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldExvY2FsRnJhbWUoKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcucGFnZSA9PT0gJ21hbmFnZXInKSB7XG4gICAgICAgIHZhciBsaXN0ID0gX3RvQ29uc3VtYWJsZUFycmF5KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNzdG9yeWJvb2stcHJldmlldy1pZnJhbWUnKSk7XG5cbiAgICAgICAgcmV0dXJuIGxpc3QubWFwKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgcmV0dXJuIGUuY29udGVudFdpbmRvdztcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWxXaW5kb3cgJiYgZ2xvYmFsV2luZG93LnBhcmVudCkge1xuICAgICAgICByZXR1cm4gW2dsb2JhbFdpbmRvdy5wYXJlbnRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhbmRsZUV2ZW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50KHJhd0V2ZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgZGF0YSA9IHJhd0V2ZW50LmRhdGE7XG5cbiAgICAgICAgdmFyIF9yZWYgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgaXNKU09OKGRhdGEpID8gcGFyc2UoZGF0YSkgOiBkYXRhLFxuICAgICAgICAgICAga2V5ID0gX3JlZi5rZXksXG4gICAgICAgICAgICBldmVudCA9IF9yZWYuZXZlbnQsXG4gICAgICAgICAgICByZWZJZCA9IF9yZWYucmVmSWQ7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gS0VZKSB7XG4gICAgICAgICAgdmFyIHBhZ2VTdHJpbmcgPSB0aGlzLmNvbmZpZy5wYWdlID09PSAnbWFuYWdlcicgPyBcIjxzcGFuIHN0eWxlPVxcXCJjb2xvcjogIzM3RDVEMzsgYmFja2dyb3VuZDogYmxhY2tcXFwiPiBtYW5hZ2VyIDwvc3Bhbj5cIiA6IFwiPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjMUVBN0ZEOyBiYWNrZ3JvdW5kOiBibGFja1xcXCI+IHByZXZpZXcgPC9zcGFuPlwiO1xuICAgICAgICAgIHZhciBldmVudFN0cmluZyA9IE9iamVjdC52YWx1ZXMoRVZFTlRTKS5pbmNsdWRlcyhldmVudC50eXBlKSA/IFwiPHNwYW4gc3R5bGU9XFxcImNvbG9yOiAjRkY0Nzg1XFxcIj5cIi5jb25jYXQoZXZlbnQudHlwZSwgXCI8L3NwYW4+XCIpIDogXCI8c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRkFFMDBcXFwiPlwiLmNvbmNhdChldmVudC50eXBlLCBcIjwvc3Bhbj5cIik7XG5cbiAgICAgICAgICBpZiAocmVmSWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnJlZklkID0gcmVmSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnQuc291cmNlID0gdGhpcy5jb25maWcucGFnZSA9PT0gJ3ByZXZpZXcnID8gcmF3RXZlbnQub3JpZ2luIDogZ2V0RXZlbnRTb3VyY2VVcmwocmF3RXZlbnQpO1xuXG4gICAgICAgICAgaWYgKCFldmVudC5zb3VyY2UpIHtcbiAgICAgICAgICAgIHByZXR0eS5lcnJvcihcIlwiLmNvbmNhdChwYWdlU3RyaW5nLCBcIiByZWNlaXZlZCBcIikuY29uY2F0KGV2ZW50U3RyaW5nLCBcIiBidXQgd2FzIHVuYWJsZSB0byBkZXRlcm1pbmUgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnRcIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBtZXNzYWdlID0gXCJcIi5jb25jYXQocGFnZVN0cmluZywgXCIgcmVjZWl2ZWQgXCIpLmNvbmNhdChldmVudFN0cmluZywgXCIgKFwiKS5jb25jYXQoZGF0YS5sZW5ndGgsIFwiKVwiKTtcbiAgICAgICAgICBwcmV0dHkuZGVidWcuYXBwbHkocHJldHR5LCBbbG9jYXRpb24ub3JpZ2luICE9PSBldmVudC5zb3VyY2UgPyBtZXNzYWdlIDogXCJcIi5jb25jYXQobWVzc2FnZSwgXCIgPHNwYW4gc3R5bGU9XFxcImNvbG9yOiBncmF5XFxcIj4ob24gXCIpLmNvbmNhdChsb2NhdGlvbi5vcmlnaW4sIFwiIGZyb20gXCIpLmNvbmNhdChldmVudC5zb3VyY2UsIFwiKTwvc3Bhbj5cIildLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZXZlbnQuYXJncykpKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQb3N0bXNnVHJhbnNwb3J0O1xufSgpO1xuXG52YXIgZ2V0RXZlbnRTb3VyY2VVcmwgPSBmdW5jdGlvbiBnZXRFdmVudFNvdXJjZVVybChldmVudCkge1xuICB2YXIgZnJhbWVzID0gX3RvQ29uc3VtYWJsZUFycmF5KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZVtkYXRhLWlzLXN0b3J5Ym9va10nKSk7IC8vIHRyeSB0byBmaW5kIHRoZSBvcmlnaW5hdGluZyBpZnJhbWUgYnkgbWF0Y2hpbmcgaXQncyBjb250ZW50V2luZG93XG4gIC8vIFRoaXMgbWlnaHQgbm90IGJlIGNyb3NzLW9yaWdpbiBzYWZlXG5cblxuICB2YXIgX2ZyYW1lcyRmaWx0ZXIgPSBmcmFtZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50LmNvbnRlbnRXaW5kb3cgPT09IGV2ZW50LnNvdXJjZTtcbiAgICB9IGNhdGNoIChlcnIpIHsvLyBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBzcmMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3JjJyk7XG4gICAgdmFyIG9yaWdpbjtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgX1VSTCA9IG5ldyBVUkwoc3JjLCBkb2N1bWVudC5sb2NhdGlvbik7XG5cbiAgICAgIG9yaWdpbiA9IF9VUkwub3JpZ2luO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBvcmlnaW4gPT09IGV2ZW50Lm9yaWdpbjtcbiAgfSksXG4gICAgICBfZnJhbWVzJGZpbHRlcjIgPSBfdG9BcnJheShfZnJhbWVzJGZpbHRlciksXG4gICAgICBmcmFtZSA9IF9mcmFtZXMkZmlsdGVyMlswXSxcbiAgICAgIHJlbWFpbmRlciA9IF9mcmFtZXMkZmlsdGVyMi5zbGljZSgxKTtcblxuICBpZiAoZnJhbWUgJiYgcmVtYWluZGVyLmxlbmd0aCA9PT0gMCkge1xuICAgIHZhciBzcmMgPSBmcmFtZS5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuXG4gICAgdmFyIF9VUkwyID0gbmV3IFVSTChzcmMsIGRvY3VtZW50LmxvY2F0aW9uKSxcbiAgICAgICAgcHJvdG9jb2wgPSBfVVJMMi5wcm90b2NvbCxcbiAgICAgICAgaG9zdCA9IF9VUkwyLmhvc3QsXG4gICAgICAgIHBhdGhuYW1lID0gX1VSTDIucGF0aG5hbWU7XG5cbiAgICByZXR1cm4gXCJcIi5jb25jYXQocHJvdG9jb2wsIFwiLy9cIikuY29uY2F0KGhvc3QpLmNvbmNhdChwYXRobmFtZSk7XG4gIH1cblxuICBpZiAocmVtYWluZGVyLmxlbmd0aCA+IDApIHtcbiAgICAvLyBJZiB3ZSBmb3VuZCBtdWx0aXBsZSBtYXRjaGVzLCB0aGVyZSdzIGdvaW5nIHRvIGJlIHRyb3VibGVcbiAgICBsb2dnZXIuZXJyb3IoJ2ZvdW5kIG11bHRpcGxlIGNhbmRpZGF0ZXMgZm9yIGV2ZW50IHNvdXJjZScpO1xuICB9IC8vIElmIHdlIGZvdW5kIG5vIGZyYW1lcyBvZiBtYXRjaGVzXG5cblxuICByZXR1cm4gbnVsbDtcbn07XG4vKipcbiAqIENyZWF0ZXMgYSBjaGFubmVsIHdoaWNoIGNvbW11bmljYXRlcyB3aXRoIGFuIGlmcmFtZSBvciBjaGlsZCB3aW5kb3cuXG4gKi9cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDaGFubmVsKF9yZWYyKSB7XG4gIHZhciBwYWdlID0gX3JlZjIucGFnZTtcbiAgdmFyIHRyYW5zcG9ydCA9IG5ldyBQb3N0bXNnVHJhbnNwb3J0KHtcbiAgICBwYWdlOiBwYWdlXG4gIH0pO1xuICByZXR1cm4gbmV3IENoYW5uZWwoe1xuICAgIHRyYW5zcG9ydDogdHJhbnNwb3J0XG4gIH0pO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///535\n')},541: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzPzk4MGQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjU0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///541\n')},551:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(4);\n\n__webpack_require__(11);\n\n__webpack_require__(12);\n\n__webpack_require__(19);\n\n__webpack_require__(15);\n\n__webpack_require__(13);\n\n__webpack_require__(14);\n\n__webpack_require__(146);\n\n__webpack_require__(934);\n\n__webpack_require__(513);\n\n__webpack_require__(936);\n\n__webpack_require__(937);\n\n__webpack_require__(101);\n\n__webpack_require__(95);\n\n__webpack_require__(485);\n\n__webpack_require__(7);\n\n__webpack_require__(9);\n\n__webpack_require__(938);\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__(940);\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__(271)).tokTypes;\n },\n configurable: true,\n enumerable: true\n});\n\nfunction plugin(options, Parser) {\n var acorn = Parser.acorn || __webpack_require__(271);\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 ? \"&gt;\" : \"&rbrace;\") + \"` 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWNvcm4tanN4L2luZGV4LmpzPzFjZDYiXSwibmFtZXMiOlsiWEhUTUxFbnRpdGllcyIsInJlcXVpcmUiLCJoZXhOdW1iZXIiLCJkZWNpbWFsTnVtYmVyIiwiYWNvcm5Kc3hNYXAiLCJhY29ybiIsImFjb3JuSnN4IiwidHQiLCJUb2tDb250ZXh0IiwiVG9rZW5UeXBlIiwidGNfb1RhZyIsInRjX2NUYWciLCJ0Y19leHByIiwidG9rQ29udGV4dHMiLCJ0b2tUeXBlcyIsImpzeE5hbWUiLCJqc3hUZXh0IiwiYmVmb3JlRXhwciIsImpzeFRhZ1N0YXJ0Iiwic3RhcnRzRXhwciIsImpzeFRhZ0VuZCIsIm91dCIsInByZXZUeXBlIiwib2JqZWN0IiwiZ2V0UXVhbGlmaWVkSlNYTmFtZSIsIm1vZHVsZSIsIm9wdGlvbnMiLCJwbHVnaW4iLCJhbGxvd05hbWVzcGFjZXMiLCJhbGxvd05hbWVzcGFjZWRPYmplY3RzIiwiT2JqZWN0IiwiZ2V0IiwiZ2V0SnN4VG9rZW5zIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIlBhcnNlciIsInRvayIsImlzTmV3TGluZSIsImlzSWRlbnRpZmllclN0YXJ0IiwiaXNJZGVudGlmaWVyQ2hhciIsImNodW5rU3RhcnQiLCJjaCIsIm5vcm1hbGl6ZUNSTEYiLCJTdHJpbmciLCJzdHIiLCJjb3VudCIsInN0YXJ0UG9zIiwiZW50aXR5IiwicGFyc2VJbnQiLCJzdGFydCIsIm5vZGUiLCJzdGFydExvYyIsIm5hbWUiLCJuZXdOb2RlIiwibm9kZU5hbWUiLCJjaGlsZHJlbiIsIm9wZW5pbmdFbGVtZW50IiwiY2xvc2luZ0VsZW1lbnQiLCJjb250ZW50cyIsImZyYWdtZW50T3JFbGVtZW50IiwiY29udGV4dCIsImNvZGUiLCJjdXJDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBYTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFFLEtBQUY7QUFDQSxtQkFBTyxpQkFBaUJ6QixHQUFHLENBQTNCLFNBQU8sQ0FBUDtBQUNEOztBQUVELGNBQUksQ0FBQ3lCLElBQUksS0FBSkEsTUFBZUEsSUFBSSxLQUFwQixPQUFnQ0QsT0FBTyxJQUEzQyxTQUNFLE9BQU8sb0JBQVAsSUFBTyxDQUFQO0FBQ0g7O0FBRUQsWUFBSUMsSUFBSSxLQUFKQSxNQUFlLEtBQWZBLGVBQW1DLHNCQUFzQixXQUF0QixPQUF2QyxJQUFtRjtBQUNqRixZQUFFLEtBQUY7QUFDQSxpQkFBTyxpQkFBaUJ6QixHQUFHLENBQTNCLFdBQU8sQ0FBUDtBQUNEOztBQUNEO0FBQ0Q7QUE1V0g7QUFBQTtBQUFBLGFBOFdFLGlDQUF3QjtBQUN0QixZQUFJLGFBQWE3QixFQUFFLENBQW5CLFFBQTRCO0FBQzFCLGNBQUl1RCxVQUFVLEdBQUcsS0FBakIsVUFBaUIsRUFBakI7QUFDQSxjQUFJQSxVQUFVLElBQWQsU0FBMkIsa0JBQWtCakQsV0FBVyxDQUF4RCxNQUEyQixFQUEzQixLQUNLLElBQUlpRCxVQUFVLElBQWQsU0FBMkIsa0JBQWtCakQsV0FBVyxDQUF4RCxNQUEyQixFQUEzQixLQUNBO0FBQ0w7QUFMRixlQU1PLElBQUksY0FBY04sRUFBRSxDQUFoQixTQUEwQmUsUUFBUSxLQUFLYyxHQUFHLENBQTlDLGFBQTREO0FBQ2pFLGlDQURpRSxDQUNqRSxDQURpRSxDQUN2Qzs7QUFDMUIsNEJBRmlFLE9BRWpFLEVBRmlFLENBRXJDOztBQUM1QjtBQUhLLGVBSUE7QUFDTDtBQUNEO0FBQ0Y7QUE1WEg7QUFBQTtBQUFBLFdBQ0U7QUFDQSxxQkFBc0I7QUFDcEI7QUFDRDtBQUpIOztBQUFBO0FBQUE7QUE4WEQiLCJmaWxlIjoiNTUxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBYSFRNTEVudGl0aWVzID0gcmVxdWlyZSgnLi94aHRtbCcpO1xuXG5jb25zdCBoZXhOdW1iZXIgPSAvXltcXGRhLWZBLUZdKyQvO1xuY29uc3QgZGVjaW1hbE51bWJlciA9IC9eXFxkKyQvO1xuXG4vLyBUaGUgbWFwIHRvIGBhY29ybi1qc3hgIHRva2VucyBmcm9tIGBhY29ybmAgbmFtZXNwYWNlIG9iamVjdHMuXG5jb25zdCBhY29ybkpzeE1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbi8vIEdldCB0aGUgb3JpZ2luYWwgdG9rZW5zIGZvciB0aGUgZ2l2ZW4gYGFjb3JuYCBuYW1lc3BhY2Ugb2JqZWN0LlxuZnVuY3Rpb24gZ2V0SnN4VG9rZW5zKGFjb3JuKSB7XG4gIGFjb3JuID0gYWNvcm4uUGFyc2VyLmFjb3JuIHx8IGFjb3JuO1xuICBsZXQgYWNvcm5Kc3ggPSBhY29ybkpzeE1hcC5nZXQoYWNvcm4pO1xuICBpZiAoIWFjb3JuSnN4KSB7XG4gICAgY29uc3QgdHQgPSBhY29ybi50b2tUeXBlcztcbiAgICBjb25zdCBUb2tDb250ZXh0ID0gYWNvcm4uVG9rQ29udGV4dDtcbiAgICBjb25zdCBUb2tlblR5cGUgPSBhY29ybi5Ub2tlblR5cGU7XG4gICAgY29uc3QgdGNfb1RhZyA9IG5ldyBUb2tDb250ZXh0KCc8dGFnJywgZmFsc2UpO1xuICAgIGNvbnN0IHRjX2NUYWcgPSBuZXcgVG9rQ29udGV4dCgnPC90YWcnLCBmYWxzZSk7XG4gICAgY29uc3QgdGNfZXhwciA9IG5ldyBUb2tDb250ZXh0KCc8dGFnPi4uLjwvdGFnPicsIHRydWUsIHRydWUpO1xuICAgIGNvbnN0IHRva0NvbnRleHRzID0ge1xuICAgICAgdGNfb1RhZzogdGNfb1RhZyxcbiAgICAgIHRjX2NUYWc6IHRjX2NUYWcsXG4gICAgICB0Y19leHByOiB0Y19leHByXG4gICAgfTtcbiAgICBjb25zdCB0b2tUeXBlcyA9IHtcbiAgICAgIGpzeE5hbWU6IG5ldyBUb2tlblR5cGUoJ2pzeE5hbWUnKSxcbiAgICAgIGpzeFRleHQ6IG5ldyBUb2tlblR5cGUoJ2pzeFRleHQnLCB7YmVmb3JlRXhwcjogdHJ1ZX0pLFxuICAgICAganN4VGFnU3RhcnQ6IG5ldyBUb2tlblR5cGUoJ2pzeFRhZ1N0YXJ0Jywge3N0YXJ0c0V4cHI6IHRydWV9KSxcbiAgICAgIGpzeFRhZ0VuZDogbmV3IFRva2VuVHlwZSgnanN4VGFnRW5kJylcbiAgICB9O1xuXG4gICAgdG9rVHlwZXMuanN4VGFnU3RhcnQudXBkYXRlQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5jb250ZXh0LnB1c2godGNfZXhwcik7IC8vIHRyZWF0IGFzIGJlZ2lubmluZyBvZiBKU1ggZXhwcmVzc2lvblxuICAgICAgdGhpcy5jb250ZXh0LnB1c2godGNfb1RhZyk7IC8vIHN0YXJ0IG9wZW5pbmcgdGFnIGNvbnRleHRcbiAgICAgIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbiAgICB9O1xuICAgIHRva1R5cGVzLmpzeFRhZ0VuZC51cGRhdGVDb250ZXh0ID0gZnVuY3Rpb24ocHJldlR5cGUpIHtcbiAgICAgIGxldCBvdXQgPSB0aGlzLmNvbnRleHQucG9wKCk7XG4gICAgICBpZiAob3V0ID09PSB0Y19vVGFnICYmIHByZXZUeXBlID09PSB0dC5zbGFzaCB8fCBvdXQgPT09IHRjX2NUYWcpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBvcCgpO1xuICAgICAgICB0aGlzLmV4cHJBbGxvd2VkID0gdGhpcy5jdXJDb250ZXh0KCkgPT09IHRjX2V4cHI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYWNvcm5Kc3ggPSB7IHRva0NvbnRleHRzOiB0b2tDb250ZXh0cywgdG9rVHlwZXM6IHRva1R5cGVzIH07XG4gICAgYWNvcm5Kc3hNYXAuc2V0KGFjb3JuLCBhY29ybkpzeCk7XG4gIH1cblxuICByZXR1cm4gYWNvcm5Kc3g7XG59XG5cbi8vIFRyYW5zZm9ybXMgSlNYIGVsZW1lbnQgbmFtZSB0byBzdHJpbmcuXG5cbmZ1bmN0aW9uIGdldFF1YWxpZmllZEpTWE5hbWUob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KVxuICAgIHJldHVybiBvYmplY3Q7XG5cbiAgaWYgKG9iamVjdC50eXBlID09PSAnSlNYSWRlbnRpZmllcicpXG4gICAgcmV0dXJuIG9iamVjdC5uYW1lO1xuXG4gIGlmIChvYmplY3QudHlwZSA9PT0gJ0pTWE5hbWVzcGFjZWROYW1lJylcbiAgICByZXR1cm4gb2JqZWN0Lm5hbWVzcGFjZS5uYW1lICsgJzonICsgb2JqZWN0Lm5hbWUubmFtZTtcblxuICBpZiAob2JqZWN0LnR5cGUgPT09ICdKU1hNZW1iZXJFeHByZXNzaW9uJylcbiAgICByZXR1cm4gZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3Qub2JqZWN0KSArICcuJyArXG4gICAgZ2V0UXVhbGlmaWVkSlNYTmFtZShvYmplY3QucHJvcGVydHkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHJldHVybiBmdW5jdGlvbihQYXJzZXIpIHtcbiAgICByZXR1cm4gcGx1Z2luKHtcbiAgICAgIGFsbG93TmFtZXNwYWNlczogb3B0aW9ucy5hbGxvd05hbWVzcGFjZXMgIT09IGZhbHNlLFxuICAgICAgYWxsb3dOYW1lc3BhY2VkT2JqZWN0czogISFvcHRpb25zLmFsbG93TmFtZXNwYWNlZE9iamVjdHNcbiAgICB9LCBQYXJzZXIpO1xuICB9O1xufTtcblxuLy8gVGhpcyBpcyBgdG9rVHlwZXNgIG9mIHRoZSBwZWVyIGRlcC5cbi8vIFRoaXMgY2FuIGJlIGRpZmZlcmVudCBpbnN0YW5jZXMgZnJvbSB0aGUgYWN0dWFsIGB0b2tUeXBlc2AgdGhpcyBwbHVnaW4gdXNlcy5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgXCJ0b2tUeXBlc1wiLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0X3Rva1R5cGVzKCkge1xuICAgIHJldHVybiBnZXRKc3hUb2tlbnMocmVxdWlyZShcImFjb3JuXCIpKS50b2tUeXBlcztcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuZnVuY3Rpb24gcGx1Z2luKG9wdGlvbnMsIFBhcnNlcikge1xuICBjb25zdCBhY29ybiA9IFBhcnNlci5hY29ybiB8fCByZXF1aXJlKFwiYWNvcm5cIik7XG4gIGNvbnN0IGFjb3JuSnN4ID0gZ2V0SnN4VG9rZW5zKGFjb3JuKTtcbiAgY29uc3QgdHQgPSBhY29ybi50b2tUeXBlcztcbiAgY29uc3QgdG9rID0gYWNvcm5Kc3gudG9rVHlwZXM7XG4gIGNvbnN0IHRva0NvbnRleHRzID0gYWNvcm4udG9rQ29udGV4dHM7XG4gIGNvbnN0IHRjX29UYWcgPSBhY29ybkpzeC50b2tDb250ZXh0cy50Y19vVGFnO1xuICBjb25zdCB0Y19jVGFnID0gYWNvcm5Kc3gudG9rQ29udGV4dHMudGNfY1RhZztcbiAgY29uc3QgdGNfZXhwciA9IGFjb3JuSnN4LnRva0NvbnRleHRzLnRjX2V4cHI7XG4gIGNvbnN0IGlzTmV3TGluZSA9IGFjb3JuLmlzTmV3TGluZTtcbiAgY29uc3QgaXNJZGVudGlmaWVyU3RhcnQgPSBhY29ybi5pc0lkZW50aWZpZXJTdGFydDtcbiAgY29uc3QgaXNJZGVudGlmaWVyQ2hhciA9IGFjb3JuLmlzSWRlbnRpZmllckNoYXI7XG5cbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgUGFyc2VyIHtcbiAgICAvLyBFeHBvc2UgYWN0dWFsIGB0b2tUeXBlc2AgYW5kIGB0b2tDb250ZXh0c2AgdG8gb3RoZXIgcGx1Z2lucy5cbiAgICBzdGF0aWMgZ2V0IGFjb3JuSnN4KCkge1xuICAgICAgcmV0dXJuIGFjb3JuSnN4O1xuICAgIH1cblxuICAgIC8vIFJlYWRzIGlubGluZSBKU1ggY29udGVudHMgdG9rZW4uXG4gICAganN4X3JlYWRUb2tlbigpIHtcbiAgICAgIGxldCBvdXQgPSAnJywgY2h1bmtTdGFydCA9IHRoaXMucG9zO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpXG4gICAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCAnVW50ZXJtaW5hdGVkIEpTWCBjb250ZW50cycpO1xuICAgICAgICBsZXQgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSA2MDogLy8gJzwnXG4gICAgICAgIGNhc2UgMTIzOiAvLyAneydcbiAgICAgICAgICBpZiAodGhpcy5wb3MgPT09IHRoaXMuc3RhcnQpIHtcbiAgICAgICAgICAgIGlmIChjaCA9PT0gNjAgJiYgdGhpcy5leHByQWxsb3dlZCkge1xuICAgICAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0b2suanN4VGFnU3RhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5Gcm9tQ29kZShjaCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5maW5pc2hUb2tlbih0b2suanN4VGV4dCwgb3V0KTtcblxuICAgICAgICBjYXNlIDM4OiAvLyAnJidcbiAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgICAgb3V0ICs9IHRoaXMuanN4X3JlYWRFbnRpdHkoKTtcbiAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA2MjogLy8gJz4nXG4gICAgICAgIGNhc2UgMTI1OiAvLyAnfSdcbiAgICAgICAgICB0aGlzLnJhaXNlKFxuICAgICAgICAgICAgdGhpcy5wb3MsXG4gICAgICAgICAgICBcIlVuZXhwZWN0ZWQgdG9rZW4gYFwiICsgdGhpcy5pbnB1dFt0aGlzLnBvc10gKyBcImAuIERpZCB5b3UgbWVhbiBgXCIgK1xuICAgICAgICAgICAgICAoY2ggPT09IDYyID8gXCImZ3Q7XCIgOiBcIiZyYnJhY2U7XCIpICsgXCJgIG9yIFwiICsgXCJge1xcXCJcIiArIHRoaXMuaW5wdXRbdGhpcy5wb3NdICsgXCJcXFwifVwiICsgXCJgP1wiXG4gICAgICAgICAgKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChpc05ld0xpbmUoY2gpKSB7XG4gICAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgICAgICBvdXQgKz0gdGhpcy5qc3hfcmVhZE5ld0xpbmUodHJ1ZSk7XG4gICAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICsrdGhpcy5wb3M7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAganN4X3JlYWROZXdMaW5lKG5vcm1hbGl6ZUNSTEYpIHtcbiAgICAgIGxldCBjaCA9IHRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgICBsZXQgb3V0O1xuICAgICAgKyt0aGlzLnBvcztcbiAgICAgIGlmIChjaCA9PT0gMTMgJiYgdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMucG9zKSA9PT0gMTApIHtcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgb3V0ID0gbm9ybWFsaXplQ1JMRiA/ICdcXG4nIDogJ1xcclxcbic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9jYXRpb25zKSB7XG4gICAgICAgICsrdGhpcy5jdXJMaW5lO1xuICAgICAgICB0aGlzLmxpbmVTdGFydCA9IHRoaXMucG9zO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGpzeF9yZWFkU3RyaW5nKHF1b3RlKSB7XG4gICAgICBsZXQgb3V0ID0gJycsIGNodW5rU3RhcnQgPSArK3RoaXMucG9zO1xuICAgICAgZm9yICg7Oykge1xuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpXG4gICAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCAnVW50ZXJtaW5hdGVkIHN0cmluZyBjb25zdGFudCcpO1xuICAgICAgICBsZXQgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgICBpZiAoY2ggPT09IHF1b3RlKSBicmVhaztcbiAgICAgICAgaWYgKGNoID09PSAzOCkgeyAvLyAnJidcbiAgICAgICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcyk7XG4gICAgICAgICAgb3V0ICs9IHRoaXMuanN4X3JlYWRFbnRpdHkoKTtcbiAgICAgICAgICBjaHVua1N0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOZXdMaW5lKGNoKSkge1xuICAgICAgICAgIG91dCArPSB0aGlzLmlucHV0LnNsaWNlKGNodW5rU3RhcnQsIHRoaXMucG9zKTtcbiAgICAgICAgICBvdXQgKz0gdGhpcy5qc3hfcmVhZE5ld0xpbmUoZmFsc2UpO1xuICAgICAgICAgIGNodW5rU3RhcnQgPSB0aGlzLnBvcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gdGhpcy5pbnB1dC5zbGljZShjaHVua1N0YXJ0LCB0aGlzLnBvcysrKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHR0LnN0cmluZywgb3V0KTtcbiAgICB9XG5cbiAgICBqc3hfcmVhZEVudGl0eSgpIHtcbiAgICAgIGxldCBzdHIgPSAnJywgY291bnQgPSAwLCBlbnRpdHk7XG4gICAgICBsZXQgY2ggPSB0aGlzLmlucHV0W3RoaXMucG9zXTtcbiAgICAgIGlmIChjaCAhPT0gJyYnKVxuICAgICAgICB0aGlzLnJhaXNlKHRoaXMucG9zLCAnRW50aXR5IG11c3Qgc3RhcnQgd2l0aCBhbiBhbXBlcnNhbmQnKTtcbiAgICAgIGxldCBzdGFydFBvcyA9ICsrdGhpcy5wb3M7XG4gICAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCAmJiBjb3VudCsrIDwgMTApIHtcbiAgICAgICAgY2ggPSB0aGlzLmlucHV0W3RoaXMucG9zKytdO1xuICAgICAgICBpZiAoY2ggPT09ICc7Jykge1xuICAgICAgICAgIGlmIChzdHJbMF0gPT09ICcjJykge1xuICAgICAgICAgICAgaWYgKHN0clsxXSA9PT0gJ3gnKSB7XG4gICAgICAgICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMik7XG4gICAgICAgICAgICAgIGlmIChoZXhOdW1iZXIudGVzdChzdHIpKVxuICAgICAgICAgICAgICAgIGVudGl0eSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc3RyLCAxNikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyID0gc3RyLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgaWYgKGRlY2ltYWxOdW1iZXIudGVzdChzdHIpKVxuICAgICAgICAgICAgICAgIGVudGl0eSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc3RyLCAxMCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbnRpdHkgPSBYSFRNTEVudGl0aWVzW3N0cl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBjaDtcbiAgICAgIH1cbiAgICAgIGlmICghZW50aXR5KSB7XG4gICAgICAgIHRoaXMucG9zID0gc3RhcnRQb3M7XG4gICAgICAgIHJldHVybiAnJic7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50aXR5O1xuICAgIH1cblxuICAgIC8vIFJlYWQgYSBKU1ggaWRlbnRpZmllciAodmFsaWQgdGFnIG9yIGF0dHJpYnV0ZSBuYW1lKS5cbiAgICAvL1xuICAgIC8vIE9wdGltaXplZCB2ZXJzaW9uIHNpbmNlIEpTWCBpZGVudGlmaWVycyBjYW4ndCBjb250YWluXG4gICAgLy8gZXNjYXBlIGNoYXJhY3RlcnMgYW5kIHNvIGNhbiBiZSByZWFkIGFzIHNpbmdsZSBzbGljZS5cbiAgICAvLyBBbHNvIGFzc3VtZXMgdGhhdCBmaXJzdCBjaGFyYWN0ZXIgd2FzIGFscmVhZHkgY2hlY2tlZFxuICAgIC8vIGJ5IGlzSWRlbnRpZmllclN0YXJ0IGluIHJlYWRUb2tlbi5cblxuICAgIGpzeF9yZWFkV29yZCgpIHtcbiAgICAgIGxldCBjaCwgc3RhcnQgPSB0aGlzLnBvcztcbiAgICAgIGRvIHtcbiAgICAgICAgY2ggPSB0aGlzLmlucHV0LmNoYXJDb2RlQXQoKyt0aGlzLnBvcyk7XG4gICAgICB9IHdoaWxlIChpc0lkZW50aWZpZXJDaGFyKGNoKSB8fCBjaCA9PT0gNDUpOyAvLyAnLSdcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHRvay5qc3hOYW1lLCB0aGlzLmlucHV0LnNsaWNlKHN0YXJ0LCB0aGlzLnBvcykpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIG5leHQgdG9rZW4gYXMgSlNYIGlkZW50aWZpZXJcblxuICAgIGpzeF9wYXJzZUlkZW50aWZpZXIoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0b2suanN4TmFtZSlcbiAgICAgICAgbm9kZS5uYW1lID0gdGhpcy52YWx1ZTtcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZS5rZXl3b3JkKVxuICAgICAgICBub2RlLm5hbWUgPSB0aGlzLnR5cGUua2V5d29yZDtcbiAgICAgIGVsc2VcbiAgICAgICAgdGhpcy51bmV4cGVjdGVkKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWElkZW50aWZpZXInKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZSBuYW1lc3BhY2VkIGlkZW50aWZpZXIuXG5cbiAgICBqc3hfcGFyc2VOYW1lc3BhY2VkTmFtZSgpIHtcbiAgICAgIGxldCBzdGFydFBvcyA9IHRoaXMuc3RhcnQsIHN0YXJ0TG9jID0gdGhpcy5zdGFydExvYztcbiAgICAgIGxldCBuYW1lID0gdGhpcy5qc3hfcGFyc2VJZGVudGlmaWVyKCk7XG4gICAgICBpZiAoIW9wdGlvbnMuYWxsb3dOYW1lc3BhY2VzIHx8ICF0aGlzLmVhdCh0dC5jb2xvbikpIHJldHVybiBuYW1lO1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0YXJ0Tm9kZUF0KHN0YXJ0UG9zLCBzdGFydExvYyk7XG4gICAgICBub2RlLm5hbWVzcGFjZSA9IG5hbWU7XG4gICAgICBub2RlLm5hbWUgPSB0aGlzLmpzeF9wYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWE5hbWVzcGFjZWROYW1lJyk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2VzIGVsZW1lbnQgbmFtZSBpbiBhbnkgZm9ybSAtIG5hbWVzcGFjZWQsIG1lbWJlclxuICAgIC8vIG9yIHNpbmdsZSBpZGVudGlmaWVyLlxuXG4gICAganN4X3BhcnNlRWxlbWVudE5hbWUoKSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSB0b2suanN4VGFnRW5kKSByZXR1cm4gJyc7XG4gICAgICBsZXQgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuanN4X3BhcnNlTmFtZXNwYWNlZE5hbWUoKTtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR0LmRvdCAmJiBub2RlLnR5cGUgPT09ICdKU1hOYW1lc3BhY2VkTmFtZScgJiYgIW9wdGlvbnMuYWxsb3dOYW1lc3BhY2VkT2JqZWN0cykge1xuICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICh0aGlzLmVhdCh0dC5kb3QpKSB7XG4gICAgICAgIGxldCBuZXdOb2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgICBuZXdOb2RlLm9iamVjdCA9IG5vZGU7XG4gICAgICAgIG5ld05vZGUucHJvcGVydHkgPSB0aGlzLmpzeF9wYXJzZUlkZW50aWZpZXIoKTtcbiAgICAgICAgbm9kZSA9IHRoaXMuZmluaXNoTm9kZShuZXdOb2RlLCAnSlNYTWVtYmVyRXhwcmVzc2lvbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgLy8gUGFyc2VzIGFueSB0eXBlIG9mIEpTWCBhdHRyaWJ1dGUgdmFsdWUuXG5cbiAgICBqc3hfcGFyc2VBdHRyaWJ1dGVWYWx1ZSgpIHtcbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlIHR0LmJyYWNlTDpcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmpzeF9wYXJzZUV4cHJlc3Npb25Db250YWluZXIoKTtcbiAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbi50eXBlID09PSAnSlNYRW1wdHlFeHByZXNzaW9uJylcbiAgICAgICAgICB0aGlzLnJhaXNlKG5vZGUuc3RhcnQsICdKU1ggYXR0cmlidXRlcyBtdXN0IG9ubHkgYmUgYXNzaWduZWQgYSBub24tZW1wdHkgZXhwcmVzc2lvbicpO1xuICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgY2FzZSB0b2suanN4VGFnU3RhcnQ6XG4gICAgICBjYXNlIHR0LnN0cmluZzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFeHByQXRvbSgpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnJhaXNlKHRoaXMuc3RhcnQsICdKU1ggdmFsdWUgc2hvdWxkIGJlIGVpdGhlciBhbiBleHByZXNzaW9uIG9yIGEgcXVvdGVkIEpTWCB0ZXh0Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSlNYRW1wdHlFeHByZXNzaW9uIGlzIHVuaXF1ZSB0eXBlIHNpbmNlIGl0IGRvZXNuJ3QgYWN0dWFsbHkgcGFyc2UgYW55dGhpbmcsXG4gICAgLy8gYW5kIHNvIGl0IHNob3VsZCBzdGFydCBhdCB0aGUgZW5kIG9mIGxhc3QgcmVhZCB0b2tlbiAobGVmdCBicmFjZSkgYW5kIGZpbmlzaFxuICAgIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgb25lIChyaWdodCBicmFjZSkuXG5cbiAgICBqc3hfcGFyc2VFbXB0eUV4cHJlc3Npb24oKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQodGhpcy5sYXN0VG9rRW5kLCB0aGlzLmxhc3RUb2tFbmRMb2MpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZUF0KG5vZGUsICdKU1hFbXB0eUV4cHJlc3Npb24nLCB0aGlzLnN0YXJ0LCB0aGlzLnN0YXJ0TG9jKTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZXMgSlNYIGV4cHJlc3Npb24gZW5jbG9zZWQgaW50byBjdXJseSBicmFja2V0cy5cblxuICAgIGpzeF9wYXJzZUV4cHJlc3Npb25Db250YWluZXIoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIG5vZGUuZXhwcmVzc2lvbiA9IHRoaXMudHlwZSA9PT0gdHQuYnJhY2VSXG4gICAgICAgID8gdGhpcy5qc3hfcGFyc2VFbXB0eUV4cHJlc3Npb24oKVxuICAgICAgICA6IHRoaXMucGFyc2VFeHByZXNzaW9uKCk7XG4gICAgICB0aGlzLmV4cGVjdCh0dC5icmFjZVIpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAnSlNYRXhwcmVzc2lvbkNvbnRhaW5lcicpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBmb2xsb3dpbmcgSlNYIGF0dHJpYnV0ZSBuYW1lLXZhbHVlIHBhaXIuXG5cbiAgICBqc3hfcGFyc2VBdHRyaWJ1dGUoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlKCk7XG4gICAgICBpZiAodGhpcy5lYXQodHQuYnJhY2VMKSkge1xuICAgICAgICB0aGlzLmV4cGVjdCh0dC5lbGxpcHNpcyk7XG4gICAgICAgIG5vZGUuYXJndW1lbnQgPSB0aGlzLnBhcnNlTWF5YmVBc3NpZ24oKTtcbiAgICAgICAgdGhpcy5leHBlY3QodHQuYnJhY2VSKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoTm9kZShub2RlLCAnSlNYU3ByZWFkQXR0cmlidXRlJyk7XG4gICAgICB9XG4gICAgICBub2RlLm5hbWUgPSB0aGlzLmpzeF9wYXJzZU5hbWVzcGFjZWROYW1lKCk7XG4gICAgICBub2RlLnZhbHVlID0gdGhpcy5lYXQodHQuZXEpID8gdGhpcy5qc3hfcGFyc2VBdHRyaWJ1dGVWYWx1ZSgpIDogbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWEF0dHJpYnV0ZScpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBKU1ggb3BlbmluZyB0YWcgc3RhcnRpbmcgYWZ0ZXIgJzwnLlxuXG4gICAganN4X3BhcnNlT3BlbmluZ0VsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpIHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzID0gW107XG4gICAgICBsZXQgbm9kZU5hbWUgPSB0aGlzLmpzeF9wYXJzZUVsZW1lbnROYW1lKCk7XG4gICAgICBpZiAobm9kZU5hbWUpIG5vZGUubmFtZSA9IG5vZGVOYW1lO1xuICAgICAgd2hpbGUgKHRoaXMudHlwZSAhPT0gdHQuc2xhc2ggJiYgdGhpcy50eXBlICE9PSB0b2suanN4VGFnRW5kKVxuICAgICAgICBub2RlLmF0dHJpYnV0ZXMucHVzaCh0aGlzLmpzeF9wYXJzZUF0dHJpYnV0ZSgpKTtcbiAgICAgIG5vZGUuc2VsZkNsb3NpbmcgPSB0aGlzLmVhdCh0dC5zbGFzaCk7XG4gICAgICB0aGlzLmV4cGVjdCh0b2suanN4VGFnRW5kKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgbm9kZU5hbWUgPyAnSlNYT3BlbmluZ0VsZW1lbnQnIDogJ0pTWE9wZW5pbmdGcmFnbWVudCcpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBKU1ggY2xvc2luZyB0YWcgc3RhcnRpbmcgYWZ0ZXIgJzwvJy5cblxuICAgIGpzeF9wYXJzZUNsb3NpbmdFbGVtZW50QXQoc3RhcnRQb3MsIHN0YXJ0TG9jKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMuc3RhcnROb2RlQXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgIGxldCBub2RlTmFtZSA9IHRoaXMuanN4X3BhcnNlRWxlbWVudE5hbWUoKTtcbiAgICAgIGlmIChub2RlTmFtZSkgbm9kZS5uYW1lID0gbm9kZU5hbWU7XG4gICAgICB0aGlzLmV4cGVjdCh0b2suanN4VGFnRW5kKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgbm9kZU5hbWUgPyAnSlNYQ2xvc2luZ0VsZW1lbnQnIDogJ0pTWENsb3NpbmdGcmFnbWVudCcpO1xuICAgIH1cblxuICAgIC8vIFBhcnNlcyBlbnRpcmUgSlNYIGVsZW1lbnQsIGluY2x1ZGluZyBpdCdzIG9wZW5pbmcgdGFnXG4gICAgLy8gKHN0YXJ0aW5nIGFmdGVyICc8JyksIGF0dHJpYnV0ZXMsIGNvbnRlbnRzIGFuZCBjbG9zaW5nIHRhZy5cblxuICAgIGpzeF9wYXJzZUVsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpIHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5zdGFydE5vZGVBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICBsZXQgb3BlbmluZ0VsZW1lbnQgPSB0aGlzLmpzeF9wYXJzZU9wZW5pbmdFbGVtZW50QXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgIGxldCBjbG9zaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIGlmICghb3BlbmluZ0VsZW1lbnQuc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgY29udGVudHM6IGZvciAoOzspIHtcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICAgIGNhc2UgdG9rLmpzeFRhZ1N0YXJ0OlxuICAgICAgICAgICAgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0OyBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICAgICAgICB0aGlzLm5leHQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVhdCh0dC5zbGFzaCkpIHtcbiAgICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQgPSB0aGlzLmpzeF9wYXJzZUNsb3NpbmdFbGVtZW50QXQoc3RhcnRQb3MsIHN0YXJ0TG9jKTtcbiAgICAgICAgICAgICAgYnJlYWsgY29udGVudHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHRoaXMuanN4X3BhcnNlRWxlbWVudEF0KHN0YXJ0UG9zLCBzdGFydExvYykpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIHRvay5qc3hUZXh0OlxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh0aGlzLnBhcnNlRXhwckF0b20oKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgdHQuYnJhY2VMOlxuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCh0aGlzLmpzeF9wYXJzZUV4cHJlc3Npb25Db250YWluZXIoKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLnVuZXhwZWN0ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldFF1YWxpZmllZEpTWE5hbWUoY2xvc2luZ0VsZW1lbnQubmFtZSkgIT09IGdldFF1YWxpZmllZEpTWE5hbWUob3BlbmluZ0VsZW1lbnQubmFtZSkpIHtcbiAgICAgICAgICB0aGlzLnJhaXNlKFxuICAgICAgICAgICAgY2xvc2luZ0VsZW1lbnQuc3RhcnQsXG4gICAgICAgICAgICAnRXhwZWN0ZWQgY29ycmVzcG9uZGluZyBKU1ggY2xvc2luZyB0YWcgZm9yIDwnICsgZ2V0UXVhbGlmaWVkSlNYTmFtZShvcGVuaW5nRWxlbWVudC5uYW1lKSArICc+Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBmcmFnbWVudE9yRWxlbWVudCA9IG9wZW5pbmdFbGVtZW50Lm5hbWUgPyAnRWxlbWVudCcgOiAnRnJhZ21lbnQnO1xuXG4gICAgICBub2RlWydvcGVuaW5nJyArIGZyYWdtZW50T3JFbGVtZW50XSA9IG9wZW5pbmdFbGVtZW50O1xuICAgICAgbm9kZVsnY2xvc2luZycgKyBmcmFnbWVudE9yRWxlbWVudF0gPSBjbG9zaW5nRWxlbWVudDtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIGlmICh0aGlzLnR5cGUgPT09IHR0LnJlbGF0aW9uYWwgJiYgdGhpcy52YWx1ZSA9PT0gXCI8XCIpIHtcbiAgICAgICAgdGhpcy5yYWlzZSh0aGlzLnN0YXJ0LCBcIkFkamFjZW50IEpTWCBlbGVtZW50cyBtdXN0IGJlIHdyYXBwZWQgaW4gYW4gZW5jbG9zaW5nIHRhZ1wiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZpbmlzaE5vZGUobm9kZSwgJ0pTWCcgKyBmcmFnbWVudE9yRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgSlNYIHRleHRcblxuICAgIGpzeF9wYXJzZVRleHQoKSB7XG4gICAgICBsZXQgbm9kZSA9IHRoaXMucGFyc2VMaXRlcmFsKHRoaXMudmFsdWUpO1xuICAgICAgbm9kZS50eXBlID0gXCJKU1hUZXh0XCI7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICAvLyBQYXJzZXMgZW50aXJlIEpTWCBlbGVtZW50IGZyb20gY3VycmVudCBwb3NpdGlvbi5cblxuICAgIGpzeF9wYXJzZUVsZW1lbnQoKSB7XG4gICAgICBsZXQgc3RhcnRQb3MgPSB0aGlzLnN0YXJ0LCBzdGFydExvYyA9IHRoaXMuc3RhcnRMb2M7XG4gICAgICB0aGlzLm5leHQoKTtcbiAgICAgIHJldHVybiB0aGlzLmpzeF9wYXJzZUVsZW1lbnRBdChzdGFydFBvcywgc3RhcnRMb2MpO1xuICAgIH1cblxuICAgIHBhcnNlRXhwckF0b20ocmVmU2hvcnRIYW5kRGVmYXVsdFBvcykge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gdG9rLmpzeFRleHQpXG4gICAgICAgIHJldHVybiB0aGlzLmpzeF9wYXJzZVRleHQoKTtcbiAgICAgIGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gdG9rLmpzeFRhZ1N0YXJ0KVxuICAgICAgICByZXR1cm4gdGhpcy5qc3hfcGFyc2VFbGVtZW50KCk7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBzdXBlci5wYXJzZUV4cHJBdG9tKHJlZlNob3J0SGFuZERlZmF1bHRQb3MpO1xuICAgIH1cblxuICAgIHJlYWRUb2tlbihjb2RlKSB7XG4gICAgICBsZXQgY29udGV4dCA9IHRoaXMuY3VyQ29udGV4dCgpO1xuXG4gICAgICBpZiAoY29udGV4dCA9PT0gdGNfZXhwcikgcmV0dXJuIHRoaXMuanN4X3JlYWRUb2tlbigpO1xuXG4gICAgICBpZiAoY29udGV4dCA9PT0gdGNfb1RhZyB8fCBjb250ZXh0ID09PSB0Y19jVGFnKSB7XG4gICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChjb2RlKSkgcmV0dXJuIHRoaXMuanN4X3JlYWRXb3JkKCk7XG5cbiAgICAgICAgaWYgKGNvZGUgPT0gNjIpIHtcbiAgICAgICAgICArK3RoaXMucG9zO1xuICAgICAgICAgIHJldHVybiB0aGlzLmZpbmlzaFRva2VuKHRvay5qc3hUYWdFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChjb2RlID09PSAzNCB8fCBjb2RlID09PSAzOSkgJiYgY29udGV4dCA9PSB0Y19vVGFnKVxuICAgICAgICAgIHJldHVybiB0aGlzLmpzeF9yZWFkU3RyaW5nKGNvZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29kZSA9PT0gNjAgJiYgdGhpcy5leHByQWxsb3dlZCAmJiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKSAhPT0gMzMpIHtcbiAgICAgICAgKyt0aGlzLnBvcztcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluaXNoVG9rZW4odG9rLmpzeFRhZ1N0YXJ0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdXBlci5yZWFkVG9rZW4oY29kZSk7XG4gICAgfVxuXG4gICAgdXBkYXRlQ29udGV4dChwcmV2VHlwZSkge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PSB0dC5icmFjZUwpIHtcbiAgICAgICAgdmFyIGN1ckNvbnRleHQgPSB0aGlzLmN1ckNvbnRleHQoKTtcbiAgICAgICAgaWYgKGN1ckNvbnRleHQgPT0gdGNfb1RhZykgdGhpcy5jb250ZXh0LnB1c2godG9rQ29udGV4dHMuYl9leHByKTtcbiAgICAgICAgZWxzZSBpZiAoY3VyQ29udGV4dCA9PSB0Y19leHByKSB0aGlzLmNvbnRleHQucHVzaCh0b2tDb250ZXh0cy5iX3RtcGwpO1xuICAgICAgICBlbHNlIHN1cGVyLnVwZGF0ZUNvbnRleHQocHJldlR5cGUpO1xuICAgICAgICB0aGlzLmV4cHJBbGxvd2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSB0dC5zbGFzaCAmJiBwcmV2VHlwZSA9PT0gdG9rLmpzeFRhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5sZW5ndGggLT0gMjsgLy8gZG8gbm90IGNvbnNpZGVyIEpTWCBleHByIC0+IEpTWCBvcGVuIHRhZyAtPiAuLi4gYW55bW9yZVxuICAgICAgICB0aGlzLmNvbnRleHQucHVzaCh0Y19jVGFnKTsgLy8gcmVjb25zaWRlciBhcyBjbG9zaW5nIHRhZyBjb250ZXh0XG4gICAgICAgIHRoaXMuZXhwckFsbG93ZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdXBlci51cGRhdGVDb250ZXh0KHByZXZUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///551\n")},555:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(522);\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__(523);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3R5cGVzY3JpcHQvaW5kZXguanM/ODYwZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTBCIiwiZmlsZSI6IjU1NS5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udmVydCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///555\n')},556:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(524);\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__(525);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L2Zsb3cvaW5kZXguanM/MTdkOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTBCIiwiZmlsZSI6IjU1Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udmVydCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJzsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///556\n')},557:function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var _convert__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(532);\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__(526);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQHN0b3J5Ym9vay9hZGRvbi1kb2NzL2Rpc3QvZXNtL2xpYi9jb252ZXJ0L3Byb3B0eXBlcy9pbmRleC5qcz82Y2M3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMEIiLCJmaWxlIjoiNTU3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb252ZXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMnOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///557\n')},561: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_PR-13/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_PR-13/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\nvar setPrototypeOf = __webpack_require__(184);\n\n// CONCATENATED MODULE: /home/jenkins/workspace/design-system_PR-13/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_PR-13/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_PR-13/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_PR-13/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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanM/MzIyMCIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXNOYXRpdmVGdW5jdGlvbi5qcz80MjFlIiwid2VicGFjazovLy8vaG9tZS9qZW5raW5zL3dvcmtzcGFjZS9kZXNpZ24tc3lzdGVtX1BSLTEzL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QuanM/Yzg3YSIsIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY29uc3RydWN0LmpzPzNlZjMiLCJ3ZWJwYWNrOi8vLy9ob21lL2plbmtpbnMvd29ya3NwYWNlL2Rlc2lnbi1zeXN0ZW1fUFItMTMvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3dyYXBOYXRpdmVTdXBlci5qcz8wODFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEM7Ozs7O0FDTGU7QUFDZjtBQUNBLEM7O0FDRmU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnRkFBZ0Y7QUFDaEY7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEM7O0FDWGlEO0FBQ29CO0FBQ3RELFNBQVMsbUJBQVU7QUFDbEMsTUFBTSx5QkFBd0I7QUFDOUIsSUFBSSxtQkFBVTtBQUNkLEdBQUc7QUFDSCxJQUFJLG1CQUFVO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIseUNBQWM7QUFDL0I7QUFDQTtBQUNBOztBQUVBLFNBQVMsbUJBQVU7QUFDbkIsQzs7QUNqQmlEO0FBQ0E7QUFDSTtBQUNkO0FBQ3hCLFNBQVMsK0JBQWdCO0FBQ3hDOztBQUVBLEVBQUUsK0JBQWdCO0FBQ2xCLDJCQUEyQixpQkFBZ0I7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhLG1CQUFTLG1CQUFtQixlQUFjO0FBQ3ZEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLFdBQVcseUNBQWM7QUFDekI7O0FBRUEsU0FBUywrQkFBZ0I7QUFDekIiLCJmaWxlIjoiNTYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pc05hdGl2ZUZ1bmN0aW9uKGZuKSB7XG4gIHJldHVybiBGdW5jdGlvbi50b1N0cmluZy5jYWxsKGZuKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKSAhPT0gLTE7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59IiwiaW1wb3J0IHNldFByb3RvdHlwZU9mIGZyb20gXCIuL3NldFByb3RvdHlwZU9mLmpzXCI7XG5pbXBvcnQgaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IGZyb20gXCIuL2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gIGlmIChpc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgIF9jb25zdHJ1Y3QgPSBSZWZsZWN0LmNvbnN0cnVjdDtcbiAgfSBlbHNlIHtcbiAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICB2YXIgYSA9IFtudWxsXTtcbiAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgICAgaWYgKENsYXNzKSBzZXRQcm90b3R5cGVPZihpbnN0YW5jZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn0iLCJpbXBvcnQgZ2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vZ2V0UHJvdG90eXBlT2YuanNcIjtcbmltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuaW1wb3J0IGlzTmF0aXZlRnVuY3Rpb24gZnJvbSBcIi4vaXNOYXRpdmVGdW5jdGlvbi5qc1wiO1xuaW1wb3J0IGNvbnN0cnVjdCBmcm9tIFwiLi9jb25zdHJ1Y3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgdmFyIF9jYWNoZSA9IHR5cGVvZiBNYXAgPT09IFwiZnVuY3Rpb25cIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDtcblxuICBfd3JhcE5hdGl2ZVN1cGVyID0gZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykge1xuICAgIGlmIChDbGFzcyA9PT0gbnVsbCB8fCAhaXNOYXRpdmVGdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzcztcblxuICAgIGlmICh0eXBlb2YgQ2xhc3MgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBpZiAoX2NhY2hlLmhhcyhDbGFzcykpIHJldHVybiBfY2FjaGUuZ2V0KENsYXNzKTtcblxuICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gV3JhcHBlcigpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgZ2V0UHJvdG90eXBlT2YodGhpcykuY29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHtcbiAgICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICAgIHZhbHVlOiBXcmFwcGVyLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZXRQcm90b3R5cGVPZihXcmFwcGVyLCBDbGFzcyk7XG4gIH07XG5cbiAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///561\n')},592:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(593);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL2luZGV4LmpzPzViMGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsbUJBQU8sQ0FBQyxHQUFjIiwiZmlsZSI6IjU5Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxucmVxdWlyZSgnLi90YXJnZXQvZXM1Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///592\n")},593:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(594);\n__webpack_require__(595);\n\n__webpack_require__(596);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL3RhcmdldC9lczUuanM/NTJkOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBTyxDQUFDLEdBQVU7QUFDbEIsbUJBQU8sQ0FBQyxHQUFtQjs7QUFFM0IsbUJBQU8sQ0FBQyxHQUFVIiwiZmlsZSI6IjU5My5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxucmVxdWlyZSgnZXM1LXNoaW0nKTtcbnJlcXVpcmUoJ2VzNS1zaGltL2VzNS1zaGFtJyk7XG5cbnJlcXVpcmUoJy4vZXMyMDE1Jyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///593\n")},596:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(597);\n\n__webpack_require__(598)();\n\n__webpack_require__(604);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL3RhcmdldC9lczIwMTUuanM/NzU1YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBTyxDQUFDLEdBQVU7O0FBRWxCLG1CQUFPLENBQUMsR0FBOEI7O0FBRXRDLG1CQUFPLENBQUMsR0FBVSIsImZpbGUiOiI1OTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJ2VzNi1zaGltJyk7XG5cbnJlcXVpcmUoJ2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL3NoaW0nKSgpO1xuXG5yZXF1aXJlKCcuL2VzMjAxNicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///596\n")},604:function(module,exports,__webpack_require__){"use strict";eval("\n\n// Array#includes is stage 4, in ES7/ES2016\n__webpack_require__(605)();\n\n__webpack_require__(620);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL3RhcmdldC9lczIwMTYuanM/ZDdiNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG1CQUFPLENBQUMsR0FBcUI7O0FBRTdCLG1CQUFPLENBQUMsR0FBVSIsImZpbGUiOiI2MDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbi8vIEFycmF5I2luY2x1ZGVzIGlzIHN0YWdlIDQsIGluIEVTNy9FUzIwMTZcbnJlcXVpcmUoJ2FycmF5LWluY2x1ZGVzL3NoaW0nKSgpO1xuXG5yZXF1aXJlKCcuL2VzMjAxNycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///604\n")},605:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(68);\nvar getPolyfill = __webpack_require__(606);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXktaW5jbHVkZXMvc2hpbS5qcz9hNDlmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxFQUFtQjtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFZOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcscUJBQXFCO0FBQ3hCLEdBQUcsd0JBQXdCLDhDQUE4QyxFQUFFO0FBQzNFO0FBQ0E7QUFDQSIsImZpbGUiOiI2MDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1BcnJheVByb3RvdHlwZUluY2x1ZGVzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0QXJyYXkucHJvdG90eXBlLFxuXHRcdHsgaW5jbHVkZXM6IHBvbHlmaWxsIH0sXG5cdFx0eyBpbmNsdWRlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///605\n")},606:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(607);\n\nmodule.exports = function getPolyfill() {\n\treturn Array.prototype.includes || implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXktaW5jbHVkZXMvcG9seWZpbGwuanM/MDFiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxHQUFrQjs7QUFFL0M7QUFDQTtBQUNBIiwiZmlsZSI6IjYwNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzIHx8IGltcGxlbWVudGF0aW9uO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///606\n")},607:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar ToIntegerOrInfinity = __webpack_require__(296);\nvar ToLength = __webpack_require__(137);\nvar ToObject = __webpack_require__(170);\nvar SameValueZero = __webpack_require__(619);\nvar $isNaN = __webpack_require__(199);\nvar $isFinite = __webpack_require__(297);\nvar GetIntrinsic = __webpack_require__(27);\nvar callBound = __webpack_require__(52);\nvar isString = __webpack_require__(299);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXktaW5jbHVkZXMvaW1wbGVtZW50YXRpb24uanM/NDE4OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYiwwQkFBMEIsbUJBQU8sQ0FBQyxHQUFzQztBQUN4RSxlQUFlLG1CQUFPLENBQUMsR0FBMkI7QUFDbEQsZUFBZSxtQkFBTyxDQUFDLEdBQTJCO0FBQ2xELG9CQUFvQixtQkFBTyxDQUFDLEdBQWdDO0FBQzVELGFBQWEsbUJBQU8sQ0FBQyxHQUEyQjtBQUNoRCxnQkFBZ0IsbUJBQU8sQ0FBQyxHQUE4QjtBQUN0RCxtQkFBbUIsbUJBQU8sQ0FBQyxFQUFlO0FBQzFDLGdCQUFnQixtQkFBTyxDQUFDLEVBQXFCO0FBQzdDLGVBQWUsbUJBQU8sQ0FBQyxHQUFXOztBQUVsQztBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNjA3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eScpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aCcpO1xudmFyIFRvT2JqZWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdCcpO1xudmFyIFNhbWVWYWx1ZVplcm8gPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1NhbWVWYWx1ZVplcm8nKTtcbnZhciAkaXNOYU4gPSByZXF1aXJlKCdlcy1hYnN0cmFjdC9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZScpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaXNTdHJpbmcgPSByZXF1aXJlKCdpcy1zdHJpbmcnKTtcblxudmFyICRjaGFyQXQgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuY2hhckF0Jyk7XG52YXIgJGluZGV4T2YgPSBHZXRJbnRyaW5zaWMoJyVBcnJheS5wcm90b3R5cGUuaW5kZXhPZiUnKTsgLy8gVE9ETzogdXNlIGNhbGxCaW5kLmFwcGx5IHdpdGhvdXQgYnJlYWtpbmcgSUUgOFxudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50KSB7XG5cdHZhciBmcm9tSW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnRzWzFdKSA6IDA7XG5cdGlmICgkaW5kZXhPZiAmJiAhJGlzTmFOKHNlYXJjaEVsZW1lbnQpICYmICRpc0Zpbml0ZShmcm9tSW5kZXgpICYmIHR5cGVvZiBzZWFyY2hFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiAkaW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpID4gLTE7XG5cdH1cblxuXHR2YXIgTyA9IFRvT2JqZWN0KHRoaXMpO1xuXHR2YXIgbGVuZ3RoID0gVG9MZW5ndGgoTy5sZW5ndGgpO1xuXHRpZiAobGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHZhciBrID0gZnJvbUluZGV4ID49IDAgPyBmcm9tSW5kZXggOiAkbWF4KDAsIGxlbmd0aCArIGZyb21JbmRleCk7XG5cdHdoaWxlIChrIDwgbGVuZ3RoKSB7XG5cdFx0aWYgKFNhbWVWYWx1ZVplcm8oc2VhcmNoRWxlbWVudCwgaXNTdHJpbmcoTykgPyAkY2hhckF0KE8sIGspIDogT1trXSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRrICs9IDE7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///607\n")},620:function(module,exports,__webpack_require__){"use strict";eval("\n\n// Object.values/Object.entries are stage 4, in ES2017\n__webpack_require__(621)();\n__webpack_require__(624)();\n\n// String#padStart/String#padEnd are stage 4, in ES2017\n__webpack_require__(627)();\n__webpack_require__(630)();\n\n// Object.getOwnPropertyDescriptors is stage 4, in ES2017\n__webpack_require__(633)();\n\n__webpack_require__(640);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL3RhcmdldC9lczIwMTcuanM/NWY1NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLG1CQUFPLENBQUMsR0FBb0I7QUFDNUIsbUJBQU8sQ0FBQyxHQUFxQjs7QUFFN0I7QUFDQSxtQkFBTyxDQUFDLEdBQWdDO0FBQ3hDLG1CQUFPLENBQUMsR0FBOEI7O0FBRXRDO0FBQ0EsbUJBQU8sQ0FBQyxHQUF1Qzs7QUFFL0MsbUJBQU8sQ0FBQyxHQUFVIiwiZmlsZSI6IjYyMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuLy8gT2JqZWN0LnZhbHVlcy9PYmplY3QuZW50cmllcyBhcmUgc3RhZ2UgNCwgaW4gRVMyMDE3XG5yZXF1aXJlKCdvYmplY3QudmFsdWVzL3NoaW0nKSgpO1xucmVxdWlyZSgnb2JqZWN0LmVudHJpZXMvc2hpbScpKCk7XG5cbi8vIFN0cmluZyNwYWRTdGFydC9TdHJpbmcjcGFkRW5kIGFyZSBzdGFnZSA0LCBpbiBFUzIwMTdcbnJlcXVpcmUoJ3N0cmluZy5wcm90b3R5cGUucGFkc3RhcnQvc2hpbScpKCk7XG5yZXF1aXJlKCdzdHJpbmcucHJvdG90eXBlLnBhZGVuZC9zaGltJykoKTtcblxuLy8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgaXMgc3RhZ2UgNCwgaW4gRVMyMDE3XG5yZXF1aXJlKCdvYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9ycy9zaGltJykoKTtcblxucmVxdWlyZSgnLi9lczIwMTgnKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///620\n")},640:function(module,exports,__webpack_require__){"use strict";eval("\n\nif (typeof Promise === 'function') {\n __webpack_require__(641); // eslint-disable-line global-require\n}\n\n__webpack_require__(649);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL3RhcmdldC9lczIwMTguanM/ZDE3NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYjtBQUNBLEVBQUUsbUJBQU8sQ0FBQyxHQUFnQyxFQUFFO0FBQzVDOztBQUVBLG1CQUFPLENBQUMsR0FBVSIsImZpbGUiOiI2NDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICByZXF1aXJlKCdwcm9taXNlLnByb3RvdHlwZS5maW5hbGx5L2F1dG8nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxufVxuXG5yZXF1aXJlKCcuL2VzMjAxOScpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///640\n")},649:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(650);\n__webpack_require__(659);\n\n__webpack_require__(663);\n\n__webpack_require__(668);\n\n__webpack_require__(684);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL3RhcmdldC9lczIwMTkuanM/ZjdjOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBTyxDQUFDLEdBQTJCO0FBQ25DLG1CQUFPLENBQUMsR0FBOEI7O0FBRXRDLG1CQUFPLENBQUMsR0FBbUM7O0FBRTNDLG1CQUFPLENBQUMsR0FBeUI7O0FBRWpDLG1CQUFPLENBQUMsR0FBVSIsImZpbGUiOiI2NDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJ2FycmF5LnByb3RvdHlwZS5mbGF0L2F1dG8nKTtcbnJlcXVpcmUoJ2FycmF5LnByb3RvdHlwZS5mbGF0bWFwL2F1dG8nKTtcblxucmVxdWlyZSgnc3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbi9hdXRvJyk7XG5cbnJlcXVpcmUoJ29iamVjdC5mcm9tZW50cmllcy9hdXRvJyk7XG5cbnJlcXVpcmUoJy4vZXMyMDIwJyk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///649\n")},650:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(651)();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXQvYXV0by5qcz9lMzE4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFPLENBQUMsR0FBUSIsImZpbGUiOiI2NTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJy4vc2hpbScpKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///650\n")},651:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(68);\nvar getPolyfill = __webpack_require__(652);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXQvc2hpbS5qcz9mYzgxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxFQUFtQjtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFZOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsaUJBQWlCO0FBQ3BCLEdBQUcsb0JBQW9CLDBDQUEwQyxFQUFFO0FBQ25FO0FBQ0E7QUFDQSIsImZpbGUiOiI2NTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1GbGF0KCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0QXJyYXkucHJvdG90eXBlLFxuXHRcdHsgZmxhdDogcG9seWZpbGwgfSxcblx0XHR7IGZsYXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5mbGF0ICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///651\n")},652:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(653);\n\nmodule.exports = function getPolyfill() {\n\treturn Array.prototype.flat || implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXQvcG9seWZpbGwuanM/NGY0OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxHQUFrQjs7QUFFL0M7QUFDQTtBQUNBIiwiZmlsZSI6IjY1Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZsYXQgfHwgaW1wbGVtZW50YXRpb247XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///652\n")},653:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar ArraySpeciesCreate = __webpack_require__(306);\nvar FlattenIntoArray = __webpack_require__(402);\nvar Get = __webpack_require__(92);\nvar ToIntegerOrInfinity = __webpack_require__(296);\nvar ToLength = __webpack_require__(137);\nvar ToObject = __webpack_require__(170);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXQvaW1wbGVtZW50YXRpb24uanM/YmRkOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix5QkFBeUIsbUJBQU8sQ0FBQyxHQUFxQztBQUN0RSx1QkFBdUIsbUJBQU8sQ0FBQyxHQUFtQztBQUNsRSxVQUFVLG1CQUFPLENBQUMsRUFBc0I7QUFDeEMsMEJBQTBCLG1CQUFPLENBQUMsR0FBc0M7QUFDeEUsZUFBZSxtQkFBTyxDQUFDLEdBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjY1My5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIEFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvQXJyYXlTcGVjaWVzQ3JlYXRlJyk7XG52YXIgRmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvRmxhdHRlbkludG9BcnJheScpO1xudmFyIEdldCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvR2V0Jyk7XG52YXIgVG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9JbnRlZ2VyT3JJbmZpbml0eScpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aCcpO1xudmFyIFRvT2JqZWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsYXQoKSB7XG5cdHZhciBPID0gVG9PYmplY3QodGhpcyk7XG5cdHZhciBzb3VyY2VMZW4gPSBUb0xlbmd0aChHZXQoTywgJ2xlbmd0aCcpKTtcblxuXHR2YXIgZGVwdGhOdW0gPSAxO1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIGFyZ3VtZW50c1swXSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRkZXB0aE51bSA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnRzWzBdKTtcblx0fVxuXG5cdHZhciBBID0gQXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuXHRGbGF0dGVuSW50b0FycmF5KEEsIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhOdW0pO1xuXHRyZXR1cm4gQTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///653\n")},659:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(660)();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXRtYXAvYXV0by5qcz8xNjI2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLG1CQUFPLENBQUMsR0FBUSIsImZpbGUiOiI2NTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnJlcXVpcmUoJy4vc2hpbScpKCk7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///659\n")},660:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(68);\nvar getPolyfill = __webpack_require__(661);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXRtYXAvc2hpbS5qcz9lNWE3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxFQUFtQjtBQUN4QyxrQkFBa0IsbUJBQU8sQ0FBQyxHQUFZOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsb0JBQW9CO0FBQ3ZCLEdBQUcsdUJBQXVCLDZDQUE2QyxFQUFFO0FBQ3pFO0FBQ0E7QUFDQSIsImZpbGUiOiI2NjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1GbGF0TWFwKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0QXJyYXkucHJvdG90eXBlLFxuXHRcdHsgZmxhdE1hcDogcG9seWZpbGwgfSxcblx0XHR7IGZsYXRNYXA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5mbGF0TWFwICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///660\n")},661:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar implementation = __webpack_require__(662);\n\nmodule.exports = function getPolyfill() {\n\treturn Array.prototype.flatMap || implementation;\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXRtYXAvcG9seWZpbGwuanM/MDJhNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxHQUFrQjs7QUFFL0M7QUFDQTtBQUNBIiwiZmlsZSI6IjY2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZsYXRNYXAgfHwgaW1wbGVtZW50YXRpb247XG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///661\n")},662:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar ArraySpeciesCreate = __webpack_require__(306);\nvar FlattenIntoArray = __webpack_require__(402);\nvar Get = __webpack_require__(92);\nvar IsCallable = __webpack_require__(119);\nvar ToLength = __webpack_require__(137);\nvar ToObject = __webpack_require__(170);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXRtYXAvaW1wbGVtZW50YXRpb24uanM/NjgxNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYix5QkFBeUIsbUJBQU8sQ0FBQyxHQUFxQztBQUN0RSx1QkFBdUIsbUJBQU8sQ0FBQyxHQUFtQztBQUNsRSxVQUFVLG1CQUFPLENBQUMsRUFBc0I7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsR0FBNkI7QUFDdEQsZUFBZSxtQkFBTyxDQUFDLEdBQTJCO0FBQ2xELGVBQWUsbUJBQU8sQ0FBQyxHQUEyQjs7QUFFbEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI2NjIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBBcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0FycmF5U3BlY2llc0NyZWF0ZScpO1xudmFyIEZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0ZsYXR0ZW5JbnRvQXJyYXknKTtcbnZhciBHZXQgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0dldCcpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmbGF0TWFwKG1hcHBlckZ1bmN0aW9uKSB7XG5cdHZhciBPID0gVG9PYmplY3QodGhpcyk7XG5cdHZhciBzb3VyY2VMZW4gPSBUb0xlbmd0aChHZXQoTywgJ2xlbmd0aCcpKTtcblxuXHRpZiAoIUlzQ2FsbGFibGUobWFwcGVyRnVuY3Rpb24pKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignbWFwcGVyRnVuY3Rpb24gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdH1cblxuXHR2YXIgVDtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0VCA9IGFyZ3VtZW50c1sxXTtcblx0fVxuXG5cdHZhciBBID0gQXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuXHRGbGF0dGVuSW50b0FycmF5KEEsIE8sIHNvdXJjZUxlbiwgMCwgMSwgbWFwcGVyRnVuY3Rpb24sIFQpO1xuXHRyZXR1cm4gQTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///662\n")},684:function(module,exports,__webpack_require__){"use strict";eval("\n\n__webpack_require__(685);\n\n__webpack_require__(697);\n\n__webpack_require__(701);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWlyYm5iLWpzLXNoaW1zL3RhcmdldC9lczIwMjAuanM/ZDFiMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBYTs7QUFFYixtQkFBTyxDQUFDLEdBQWdDOztBQUV4QyxtQkFBTyxDQUFDLEdBQWlCOztBQUV6QixtQkFBTyxDQUFDLEdBQXlCIiwiZmlsZSI6IjY4NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxucmVxdWlyZSgnc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC9hdXRvJyk7XG5cbnJlcXVpcmUoJ2dsb2JhbHRoaXMvYXV0bycpO1xuXG5yZXF1aXJlKCdwcm9taXNlLmFsbHNldHRsZWQvYXV0bycpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///684\n")},713:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(68);\nvar RequireObjectCoercible = __webpack_require__(130);\nvar callBound = __webpack_require__(52);\n\nvar implementation = __webpack_require__(415);\nvar getPolyfill = __webpack_require__(416);\nvar polyfill = getPolyfill();\nvar shim = __webpack_require__(716);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLm1hcC9pbmRleC5qcz80NzJlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxFQUFtQjtBQUN4Qyw2QkFBNkIsbUJBQU8sQ0FBQyxHQUF5QztBQUM5RSxnQkFBZ0IsbUJBQU8sQ0FBQyxFQUFxQjs7QUFFN0MscUJBQXFCLG1CQUFPLENBQUMsR0FBa0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsR0FBWTtBQUN0QztBQUNBLFdBQVcsbUJBQU8sQ0FBQyxHQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEIiwiZmlsZSI6IjcxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcbnZhciBzaGltID0gcmVxdWlyZSgnLi9zaGltJyk7XG5cbnZhciAkc2xpY2UgPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5zbGljZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbnZhciBib3VuZE1hcFNoaW0gPSBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxiYWNrZm4pIHtcblx0UmVxdWlyZU9iamVjdENvZXJjaWJsZShhcnJheSk7XG5cdHJldHVybiBwb2x5ZmlsbC5hcHBseShhcnJheSwgJHNsaWNlKGFyZ3VtZW50cywgMSkpO1xufTtcbmRlZmluZShib3VuZE1hcFNoaW0sIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJvdW5kTWFwU2hpbTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///713\n")},716:function(module,exports,__webpack_require__){"use strict";eval("\n\nvar define = __webpack_require__(68);\nvar getPolyfill = __webpack_require__(416);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLm1hcC9zaGltLmpzPzBkM2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLEVBQW1CO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLEdBQVk7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxnQkFBZ0I7QUFDbkIsR0FBRyxtQkFBbUIseUNBQXlDLEVBQUU7QUFDakU7QUFDQTtBQUNBIiwiZmlsZSI6IjcxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUFycmF5UHJvdG90eXBlTWFwKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0QXJyYXkucHJvdG90eXBlLFxuXHRcdHsgbWFwOiBwb2x5ZmlsbCB9LFxuXHRcdHsgbWFwOiBmdW5jdGlvbiAoKSB7IHJldHVybiBBcnJheS5wcm90b3R5cGUubWFwICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///716\n")},875:function(module,exports,__webpack_require__){eval('var setPrototypeOf = __webpack_require__(876);\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0c0xvb3NlLmpzP2U2OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCLG1CQUFPLENBQUMsR0FBcUI7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI4NzUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiKTtcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2luaGVyaXRzTG9vc2U7XG5tb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///875\n')},876: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9zZXRQcm90b3R5cGVPZi5qcz84YjU3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiODc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZjtcbm1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///876\n')},918:function(module,exports,__webpack_require__){"use strict";eval("/* WEBPACK VAR INJECTION */(function(global) {\n\nvar objectAssign = __webpack_require__(323);\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__(919);\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__(106)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYXNzZXJ0L2Fzc2VydC5qcz9jNjc1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhDQUFhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLEdBQWU7O0FBRTFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxXQUFXLG1CQUFPLENBQUMsR0FBTztBQUMxQjtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBLG1EQUFtRDs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCLGdEQUFnRDs7QUFFaEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixRQUFRO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsUUFBUTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0Msb0JBQW9COztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiOTE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb2JqZWN0QXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBjb21wYXJlIGFuZCBpc0J1ZmZlciB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2Jsb2IvNjgwZTllNWU0ODhmMjJhYWMyNzU5OWE1N2RjODQ0YTYzMTU5MjhkZC9pbmRleC5qc1xuLy8gb3JpZ2luYWwgbm90aWNlOlxuXG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5mdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHZhciB4ID0gYS5sZW5ndGg7XG4gIHZhciB5ID0gYi5sZW5ndGg7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV07XG4gICAgICB5ID0gYltpXTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoeSA8IHgpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbmZ1bmN0aW9uIGlzQnVmZmVyKGIpIHtcbiAgaWYgKGdsb2JhbC5CdWZmZXIgJiYgdHlwZW9mIGdsb2JhbC5CdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsLkJ1ZmZlci5pc0J1ZmZlcihiKTtcbiAgfVxuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKTtcbn1cblxuLy8gYmFzZWQgb24gbm9kZSBhc3NlcnQsIG9yaWdpbmFsIG5vdGljZTpcbi8vIE5COiBUaGUgVVJMIHRvIHRoZSBDb21tb25KUyBzcGVjIGlzIGtlcHQganVzdCBmb3IgdHJhZGl0aW9uLlxuLy8gICAgIG5vZGUtYXNzZXJ0IGhhcyBldm9sdmVkIGEgbG90IHNpbmNlIHRoZW4sIGJvdGggaW4gQVBJIGFuZCBiZWhhdmlvci5cblxuLy8gaHR0cDovL3dpa2kuY29tbW9uanMub3JnL3dpa2kvVW5pdF9UZXN0aW5nLzEuMFxuLy9cbi8vIFRISVMgSVMgTk9UIFRFU1RFRCBOT1IgTElLRUxZIFRPIFdPUksgT1VUU0lERSBWOCFcbi8vXG4vLyBPcmlnaW5hbGx5IGZyb20gbmFyd2hhbC5qcyAoaHR0cDovL25hcndoYWxqcy5vcmcpXG4vLyBDb3B5cmlnaHQgKGMpIDIwMDkgVGhvbWFzIFJvYmluc29uIDwyODBub3J0aC5jb20+XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgJ1NvZnR3YXJlJyksIHRvXG4vLyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuLy8gcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTlxuLy8gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTlxuLy8gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciB1dGlsID0gcmVxdWlyZSgndXRpbC8nKTtcbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSAoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9vKCkge30ubmFtZSA9PT0gJ2Zvbyc7XG59KCkpO1xuZnVuY3Rpb24gcFRvU3RyaW5nIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xufVxuZnVuY3Rpb24gaXNWaWV3KGFycmJ1Zikge1xuICBpZiAoaXNCdWZmZXIoYXJyYnVmKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIGdsb2JhbC5BcnJheUJ1ZmZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJyYnVmKTtcbiAgfVxuICBpZiAoIWFycmJ1Zikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoYXJyYnVmIGluc3RhbmNlb2YgRGF0YVZpZXcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXJyYnVmLmJ1ZmZlciAmJiBhcnJidWYuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4vLyAxLiBUaGUgYXNzZXJ0IG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCB0aHJvd1xuLy8gQXNzZXJ0aW9uRXJyb3IncyB3aGVuIHBhcnRpY3VsYXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldC4gVGhlXG4vLyBhc3NlcnQgbW9kdWxlIG11c3QgY29uZm9ybSB0byB0aGUgZm9sbG93aW5nIGludGVyZmFjZS5cblxudmFyIGFzc2VydCA9IG1vZHVsZS5leHBvcnRzID0gb2s7XG5cbi8vIDIuIFRoZSBBc3NlcnRpb25FcnJvciBpcyBkZWZpbmVkIGluIGFzc2VydC5cbi8vIG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiBtZXNzYWdlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCB9KVxuXG52YXIgcmVnZXggPSAvXFxzKmZ1bmN0aW9uXFxzKyhbXlxcKFxcc10qKVxccyovO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9ibG9iL2FkZWVlZWM4YmZjYzYwNjhiMTg3ZDdkOWZiM2Q1YmIxZDNhMzA4OTkvaW1wbGVtZW50YXRpb24uanNcbmZ1bmN0aW9uIGdldE5hbWUoZnVuYykge1xuICBpZiAoIXV0aWwuaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmMubmFtZTtcbiAgfVxuICB2YXIgc3RyID0gZnVuYy50b1N0cmluZygpO1xuICB2YXIgbWF0Y2ggPSBzdHIubWF0Y2gocmVnZXgpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV07XG59XG5hc3NlcnQuQXNzZXJ0aW9uRXJyb3IgPSBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihvcHRpb25zKSB7XG4gIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICB0aGlzLm9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvcjtcbiAgaWYgKG9wdGlvbnMubWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG9wdGlvbnMubWVzc2FnZTtcbiAgICB0aGlzLmdlbmVyYXRlZE1lc3NhZ2UgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBnZXRNZXNzYWdlKHRoaXMpO1xuICAgIHRoaXMuZ2VuZXJhdGVkTWVzc2FnZSA9IHRydWU7XG4gIH1cbiAgdmFyIHN0YWNrU3RhcnRGdW5jdGlvbiA9IG9wdGlvbnMuc3RhY2tTdGFydEZ1bmN0aW9uIHx8IGZhaWw7XG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHN0YWNrU3RhcnRGdW5jdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gbm9uIHY4IGJyb3dzZXJzIHNvIHdlIGNhbiBoYXZlIGEgc3RhY2t0cmFjZVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoKTtcbiAgICBpZiAoZXJyLnN0YWNrKSB7XG4gICAgICB2YXIgb3V0ID0gZXJyLnN0YWNrO1xuXG4gICAgICAvLyB0cnkgdG8gc3RyaXAgdXNlbGVzcyBmcmFtZXNcbiAgICAgIHZhciBmbl9uYW1lID0gZ2V0TmFtZShzdGFja1N0YXJ0RnVuY3Rpb24pO1xuICAgICAgdmFyIGlkeCA9IG91dC5pbmRleE9mKCdcXG4nICsgZm5fbmFtZSk7XG4gICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgLy8gb25jZSB3ZSBoYXZlIGxvY2F0ZWQgdGhlIGZ1bmN0aW9uIGZyYW1lXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gc3RyaXAgb3V0IGV2ZXJ5dGhpbmcgYmVmb3JlIGl0IChhbmQgaXRzIGxpbmUpXG4gICAgICAgIHZhciBuZXh0X2xpbmUgPSBvdXQuaW5kZXhPZignXFxuJywgaWR4ICsgMSk7XG4gICAgICAgIG91dCA9IG91dC5zdWJzdHJpbmcobmV4dF9saW5lICsgMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhY2sgPSBvdXQ7XG4gICAgfVxuICB9XG59O1xuXG4vLyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3IgaW5zdGFuY2VvZiBFcnJvclxudXRpbC5pbmhlcml0cyhhc3NlcnQuQXNzZXJ0aW9uRXJyb3IsIEVycm9yKTtcblxuZnVuY3Rpb24gdHJ1bmNhdGUocywgbikge1xuICBpZiAodHlwZW9mIHMgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoIDwgbiA/IHMgOiBzLnNsaWNlKDAsIG4pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzO1xuICB9XG59XG5mdW5jdGlvbiBpbnNwZWN0KHNvbWV0aGluZykge1xuICBpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzIHx8ICF1dGlsLmlzRnVuY3Rpb24oc29tZXRoaW5nKSkge1xuICAgIHJldHVybiB1dGlsLmluc3BlY3Qoc29tZXRoaW5nKTtcbiAgfVxuICB2YXIgcmF3bmFtZSA9IGdldE5hbWUoc29tZXRoaW5nKTtcbiAgdmFyIG5hbWUgPSByYXduYW1lID8gJzogJyArIHJhd25hbWUgOiAnJztcbiAgcmV0dXJuICdbRnVuY3Rpb24nICsgIG5hbWUgKyAnXSc7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlKHNlbGYpIHtcbiAgcmV0dXJuIHRydW5jYXRlKGluc3BlY3Qoc2VsZi5hY3R1YWwpLCAxMjgpICsgJyAnICtcbiAgICAgICAgIHNlbGYub3BlcmF0b3IgKyAnICcgK1xuICAgICAgICAgdHJ1bmNhdGUoaW5zcGVjdChzZWxmLmV4cGVjdGVkKSwgMTI4KTtcbn1cblxuLy8gQXQgcHJlc2VudCBvbmx5IHRoZSB0aHJlZSBrZXlzIG1lbnRpb25lZCBhYm92ZSBhcmUgdXNlZCBhbmRcbi8vIHVuZGVyc3Rvb2QgYnkgdGhlIHNwZWMuIEltcGxlbWVudGF0aW9ucyBvciBzdWIgbW9kdWxlcyBjYW4gcGFzc1xuLy8gb3RoZXIga2V5cyB0byB0aGUgQXNzZXJ0aW9uRXJyb3IncyBjb25zdHJ1Y3RvciAtIHRoZXkgd2lsbCBiZVxuLy8gaWdub3JlZC5cblxuLy8gMy4gQWxsIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG11c3QgdGhyb3cgYW4gQXNzZXJ0aW9uRXJyb3Jcbi8vIHdoZW4gYSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbiBpcyBub3QgbWV0LCB3aXRoIGEgbWVzc2FnZSB0aGF0XG4vLyBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZC4gIEFsbCBhc3NlcnRpb24gbWV0aG9kcyBwcm92aWRlXG4vLyBib3RoIHRoZSBhY3R1YWwgYW5kIGV4cGVjdGVkIHZhbHVlcyB0byB0aGUgYXNzZXJ0aW9uIGVycm9yIGZvclxuLy8gZGlzcGxheSBwdXJwb3Nlcy5cblxuZnVuY3Rpb24gZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCBvcGVyYXRvciwgc3RhY2tTdGFydEZ1bmN0aW9uKSB7XG4gIHRocm93IG5ldyBhc3NlcnQuQXNzZXJ0aW9uRXJyb3Ioe1xuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgYWN0dWFsOiBhY3R1YWwsXG4gICAgZXhwZWN0ZWQ6IGV4cGVjdGVkLFxuICAgIG9wZXJhdG9yOiBvcGVyYXRvcixcbiAgICBzdGFja1N0YXJ0RnVuY3Rpb246IHN0YWNrU3RhcnRGdW5jdGlvblxuICB9KTtcbn1cblxuLy8gRVhURU5TSU9OISBhbGxvd3MgZm9yIHdlbGwgYmVoYXZlZCBlcnJvcnMgZGVmaW5lZCBlbHNld2hlcmUuXG5hc3NlcnQuZmFpbCA9IGZhaWw7XG5cbi8vIDQuIFB1cmUgYXNzZXJ0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YWx1ZSBpcyB0cnV0aHksIGFzIGRldGVybWluZWRcbi8vIGJ5ICEhZ3VhcmQuXG4vLyBhc3NlcnQub2soZ3VhcmQsIG1lc3NhZ2Vfb3B0KTtcbi8vIFRoaXMgc3RhdGVtZW50IGlzIGVxdWl2YWxlbnQgdG8gYXNzZXJ0LmVxdWFsKHRydWUsICEhZ3VhcmQsXG4vLyBtZXNzYWdlX29wdCk7LiBUbyB0ZXN0IHN0cmljdGx5IGZvciB0aGUgdmFsdWUgdHJ1ZSwgdXNlXG4vLyBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgZ3VhcmQsIG1lc3NhZ2Vfb3B0KTsuXG5cbmZ1bmN0aW9uIG9rKHZhbHVlLCBtZXNzYWdlKSB7XG4gIGlmICghdmFsdWUpIGZhaWwodmFsdWUsIHRydWUsIG1lc3NhZ2UsICc9PScsIGFzc2VydC5vayk7XG59XG5hc3NlcnQub2sgPSBvaztcblxuLy8gNS4gVGhlIGVxdWFsaXR5IGFzc2VydGlvbiB0ZXN0cyBzaGFsbG93LCBjb2VyY2l2ZSBlcXVhbGl0eSB3aXRoXG4vLyA9PS5cbi8vIGFzc2VydC5lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uIGVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnPT0nLCBhc3NlcnQuZXF1YWwpO1xufTtcblxuLy8gNi4gVGhlIG5vbi1lcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgZm9yIHdoZXRoZXIgdHdvIG9iamVjdHMgYXJlIG5vdCBlcXVhbFxuLy8gd2l0aCAhPSBhc3NlcnQubm90RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZV9vcHQpO1xuXG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbiBub3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChhY3R1YWwgPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICchPScsIGFzc2VydC5ub3RFcXVhbCk7XG4gIH1cbn07XG5cbi8vIDcuIFRoZSBlcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgYSBkZWVwIGVxdWFsaXR5IHJlbGF0aW9uLlxuLy8gYXNzZXJ0LmRlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5kZWVwRXF1YWwgPSBmdW5jdGlvbiBkZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZmFsc2UpKSB7XG4gICAgZmFpbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlLCAnZGVlcEVxdWFsJywgYXNzZXJ0LmRlZXBFcXVhbCk7XG4gIH1cbn07XG5cbmFzc2VydC5kZWVwU3RyaWN0RXF1YWwgPSBmdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoIV9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdkZWVwU3RyaWN0RXF1YWwnLCBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX2RlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBzdHJpY3QsIG1lbW9zKSB7XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgJiYgaXNCdWZmZXIoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGNvbXBhcmUoYWN0dWFsLCBleHBlY3RlZCkgPT09IDA7XG5cbiAgLy8gNy4yLiBJZiB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMgYSBEYXRlIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBEYXRlIG9iamVjdCB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0aW1lLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNEYXRlKGFjdHVhbCkgJiYgdXRpbC5pc0RhdGUoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMgSWYgdGhlIGV4cGVjdGVkIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdCwgdGhlIGFjdHVhbCB2YWx1ZSBpc1xuICAvLyBlcXVpdmFsZW50IGlmIGl0IGlzIGFsc28gYSBSZWdFeHAgb2JqZWN0IHdpdGggdGhlIHNhbWUgc291cmNlIGFuZFxuICAvLyBwcm9wZXJ0aWVzIChgZ2xvYmFsYCwgYG11bHRpbGluZWAsIGBsYXN0SW5kZXhgLCBgaWdub3JlQ2FzZWApLlxuICB9IGVsc2UgaWYgKHV0aWwuaXNSZWdFeHAoYWN0dWFsKSAmJiB1dGlsLmlzUmVnRXhwKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBhY3R1YWwuc291cmNlID09PSBleHBlY3RlZC5zb3VyY2UgJiZcbiAgICAgICAgICAgYWN0dWFsLmdsb2JhbCA9PT0gZXhwZWN0ZWQuZ2xvYmFsICYmXG4gICAgICAgICAgIGFjdHVhbC5tdWx0aWxpbmUgPT09IGV4cGVjdGVkLm11bHRpbGluZSAmJlxuICAgICAgICAgICBhY3R1YWwubGFzdEluZGV4ID09PSBleHBlY3RlZC5sYXN0SW5kZXggJiZcbiAgICAgICAgICAgYWN0dWFsLmlnbm9yZUNhc2UgPT09IGV4cGVjdGVkLmlnbm9yZUNhc2U7XG5cbiAgLy8gNy40LiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKChhY3R1YWwgPT09IG51bGwgfHwgdHlwZW9mIGFjdHVhbCAhPT0gJ29iamVjdCcpICYmXG4gICAgICAgICAgICAgKGV4cGVjdGVkID09PSBudWxsIHx8IHR5cGVvZiBleHBlY3RlZCAhPT0gJ29iamVjdCcpKSB7XG4gICAgcmV0dXJuIHN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gSWYgYm90aCB2YWx1ZXMgYXJlIGluc3RhbmNlcyBvZiB0eXBlZCBhcnJheXMsIHdyYXAgdGhlaXIgdW5kZXJseWluZ1xuICAvLyBBcnJheUJ1ZmZlcnMgaW4gYSBCdWZmZXIgZWFjaCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZVxuICAvLyBUaGlzIG9wdGltaXphdGlvbiByZXF1aXJlcyB0aGUgYXJyYXlzIHRvIGhhdmUgdGhlIHNhbWUgdHlwZSBhcyBjaGVja2VkIGJ5XG4gIC8vIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgKGFrYSBwVG9TdHJpbmcpLiBOZXZlciBwZXJmb3JtIGJpbmFyeVxuICAvLyBjb21wYXJpc29ucyBmb3IgRmxvYXQqQXJyYXlzLCB0aG91Z2gsIHNpbmNlIGUuZy4gKzAgPT09IC0wIGJ1dCB0aGVpclxuICAvLyBiaXQgcGF0dGVybnMgYXJlIG5vdCBpZGVudGljYWwuXG4gIH0gZWxzZSBpZiAoaXNWaWV3KGFjdHVhbCkgJiYgaXNWaWV3KGV4cGVjdGVkKSAmJlxuICAgICAgICAgICAgIHBUb1N0cmluZyhhY3R1YWwpID09PSBwVG9TdHJpbmcoZXhwZWN0ZWQpICYmXG4gICAgICAgICAgICAgIShhY3R1YWwgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkgfHxcbiAgICAgICAgICAgICAgIGFjdHVhbCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpIHtcbiAgICByZXR1cm4gY29tcGFyZShuZXcgVWludDhBcnJheShhY3R1YWwuYnVmZmVyKSxcbiAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShleHBlY3RlZC5idWZmZXIpKSA9PT0gMDtcblxuICAvLyA3LjUgRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGFjdHVhbCkgIT09IGlzQnVmZmVyKGV4cGVjdGVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBtZW1vcyA9IG1lbW9zIHx8IHthY3R1YWw6IFtdLCBleHBlY3RlZDogW119O1xuXG4gICAgdmFyIGFjdHVhbEluZGV4ID0gbWVtb3MuYWN0dWFsLmluZGV4T2YoYWN0dWFsKTtcbiAgICBpZiAoYWN0dWFsSW5kZXggIT09IC0xKSB7XG4gICAgICBpZiAoYWN0dWFsSW5kZXggPT09IG1lbW9zLmV4cGVjdGVkLmluZGV4T2YoZXhwZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG1lbW9zLmFjdHVhbC5wdXNoKGFjdHVhbCk7XG4gICAgbWVtb3MuZXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG5cbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgc3RyaWN0LCBtZW1vcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNBcmd1bWVudHMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgc3RyaWN0LCBhY3R1YWxWaXNpdGVkT2JqZWN0cykge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBhID09PSB1bmRlZmluZWQgfHwgYiA9PT0gbnVsbCB8fCBiID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBpZiBvbmUgaXMgYSBwcmltaXRpdmUsIHRoZSBvdGhlciBtdXN0IGJlIHNhbWVcbiAgaWYgKHV0aWwuaXNQcmltaXRpdmUoYSkgfHwgdXRpbC5pc1ByaW1pdGl2ZShiKSlcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgaWYgKHN0cmljdCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkgIT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIHZhciBhSXNBcmdzID0gaXNBcmd1bWVudHMoYSk7XG4gIHZhciBiSXNBcmdzID0gaXNBcmd1bWVudHMoYik7XG4gIGlmICgoYUlzQXJncyAmJiAhYklzQXJncykgfHwgKCFhSXNBcmdzICYmIGJJc0FyZ3MpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKGFJc0FyZ3MpIHtcbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBfZGVlcEVxdWFsKGEsIGIsIHN0cmljdCk7XG4gIH1cbiAgdmFyIGthID0gb2JqZWN0S2V5cyhhKTtcbiAgdmFyIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgdmFyIGtleSwgaTtcbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT09IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFfZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBzdHJpY3QsIGFjdHVhbFZpc2l0ZWRPYmplY3RzKSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gOC4gVGhlIG5vbi1lcXVpdmFsZW5jZSBhc3NlcnRpb24gdGVzdHMgZm9yIGFueSBkZWVwIGluZXF1YWxpdHkuXG4vLyBhc3NlcnQubm90RGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdERlZXBFcXVhbCA9IGZ1bmN0aW9uIG5vdERlZXBFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKSB7XG4gIGlmIChfZGVlcEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGZhbHNlKSkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJ25vdERlZXBFcXVhbCcsIGFzc2VydC5ub3REZWVwRXF1YWwpO1xuICB9XG59O1xuXG5hc3NlcnQubm90RGVlcFN0cmljdEVxdWFsID0gbm90RGVlcFN0cmljdEVxdWFsO1xuZnVuY3Rpb24gbm90RGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKF9kZWVwRXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgdHJ1ZSkpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICdub3REZWVwU3RyaWN0RXF1YWwnLCBub3REZWVwU3RyaWN0RXF1YWwpO1xuICB9XG59XG5cblxuLy8gOS4gVGhlIHN0cmljdCBlcXVhbGl0eSBhc3NlcnRpb24gdGVzdHMgc3RyaWN0IGVxdWFsaXR5LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbi8vIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC5zdHJpY3RFcXVhbCA9IGZ1bmN0aW9uIHN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpIHtcbiAgICBmYWlsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsICc9PT0nLCBhc3NlcnQuc3RyaWN0RXF1YWwpO1xuICB9XG59O1xuXG4vLyAxMC4gVGhlIHN0cmljdCBub24tZXF1YWxpdHkgYXNzZXJ0aW9uIHRlc3RzIGZvciBzdHJpY3QgaW5lcXVhbGl0eSwgYXNcbi8vIGRldGVybWluZWQgYnkgIT09LiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2Vfb3B0KTtcblxuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24gbm90U3RyaWN0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgJyE9PScsIGFzc2VydC5ub3RTdHJpY3RFcXVhbCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpIHtcbiAgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChleHBlY3RlZCkgPT0gJ1tvYmplY3QgUmVnRXhwXScpIHtcbiAgICByZXR1cm4gZXhwZWN0ZWQudGVzdChhY3R1YWwpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoYWN0dWFsIGluc3RhbmNlb2YgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElnbm9yZS4gIFRoZSBpbnN0YW5jZW9mIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgYXJyb3cgZnVuY3Rpb25zLlxuICB9XG5cbiAgaWYgKEVycm9yLmlzUHJvdG90eXBlT2YoZXhwZWN0ZWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGV4cGVjdGVkLmNhbGwoe30sIGFjdHVhbCkgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIF90cnlCbG9jayhibG9jaykge1xuICB2YXIgZXJyb3I7XG4gIHRyeSB7XG4gICAgYmxvY2soKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yID0gZTtcbiAgfVxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIF90aHJvd3Moc2hvdWxkVGhyb3csIGJsb2NrLCBleHBlY3RlZCwgbWVzc2FnZSkge1xuICB2YXIgYWN0dWFsO1xuXG4gIGlmICh0eXBlb2YgYmxvY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJykge1xuICAgIG1lc3NhZ2UgPSBleHBlY3RlZDtcbiAgICBleHBlY3RlZCA9IG51bGw7XG4gIH1cblxuICBhY3R1YWwgPSBfdHJ5QmxvY2soYmxvY2spO1xuXG4gIG1lc3NhZ2UgPSAoZXhwZWN0ZWQgJiYgZXhwZWN0ZWQubmFtZSA/ICcgKCcgKyBleHBlY3RlZC5uYW1lICsgJykuJyA6ICcuJykgK1xuICAgICAgICAgICAgKG1lc3NhZ2UgPyAnICcgKyBtZXNzYWdlIDogJy4nKTtcblxuICBpZiAoc2hvdWxkVGhyb3cgJiYgIWFjdHVhbCkge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ01pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uJyArIG1lc3NhZ2UpO1xuICB9XG5cbiAgdmFyIHVzZXJQcm92aWRlZE1lc3NhZ2UgPSB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBpc1Vud2FudGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIHV0aWwuaXNFcnJvcihhY3R1YWwpO1xuICB2YXIgaXNVbmV4cGVjdGVkRXhjZXB0aW9uID0gIXNob3VsZFRocm93ICYmIGFjdHVhbCAmJiAhZXhwZWN0ZWQ7XG5cbiAgaWYgKChpc1Vud2FudGVkRXhjZXB0aW9uICYmXG4gICAgICB1c2VyUHJvdmlkZWRNZXNzYWdlICYmXG4gICAgICBleHBlY3RlZEV4Y2VwdGlvbihhY3R1YWwsIGV4cGVjdGVkKSkgfHxcbiAgICAgIGlzVW5leHBlY3RlZEV4Y2VwdGlvbikge1xuICAgIGZhaWwoYWN0dWFsLCBleHBlY3RlZCwgJ0dvdCB1bndhbnRlZCBleGNlcHRpb24nICsgbWVzc2FnZSk7XG4gIH1cblxuICBpZiAoKHNob3VsZFRocm93ICYmIGFjdHVhbCAmJiBleHBlY3RlZCAmJlxuICAgICAgIWV4cGVjdGVkRXhjZXB0aW9uKGFjdHVhbCwgZXhwZWN0ZWQpKSB8fCAoIXNob3VsZFRocm93ICYmIGFjdHVhbCkpIHtcbiAgICB0aHJvdyBhY3R1YWw7XG4gIH1cbn1cblxuLy8gMTEuIEV4cGVjdGVkIHRvIHRocm93IGFuIGVycm9yOlxuLy8gYXNzZXJ0LnRocm93cyhibG9jaywgRXJyb3Jfb3B0LCBtZXNzYWdlX29wdCk7XG5cbmFzc2VydC50aHJvd3MgPSBmdW5jdGlvbihibG9jaywgLypvcHRpb25hbCovZXJyb3IsIC8qb3B0aW9uYWwqL21lc3NhZ2UpIHtcbiAgX3Rocm93cyh0cnVlLCBibG9jaywgZXJyb3IsIG1lc3NhZ2UpO1xufTtcblxuLy8gRVhURU5TSU9OISBUaGlzIGlzIGFubm95aW5nIHRvIHdyaXRlIG91dHNpZGUgdGhpcyBtb2R1bGUuXG5hc3NlcnQuZG9lc05vdFRocm93ID0gZnVuY3Rpb24oYmxvY2ssIC8qb3B0aW9uYWwqL2Vycm9yLCAvKm9wdGlvbmFsKi9tZXNzYWdlKSB7XG4gIF90aHJvd3MoZmFsc2UsIGJsb2NrLCBlcnJvciwgbWVzc2FnZSk7XG59O1xuXG5hc3NlcnQuaWZFcnJvciA9IGZ1bmN0aW9uKGVycikgeyBpZiAoZXJyKSB0aHJvdyBlcnI7IH07XG5cbi8vIEV4cG9zZSBhIHN0cmljdCBvbmx5IHZhcmlhbnQgb2YgYXNzZXJ0XG5mdW5jdGlvbiBzdHJpY3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgaWYgKCF2YWx1ZSkgZmFpbCh2YWx1ZSwgdHJ1ZSwgbWVzc2FnZSwgJz09Jywgc3RyaWN0KTtcbn1cbmFzc2VydC5zdHJpY3QgPSBvYmplY3RBc3NpZ24oc3RyaWN0LCBhc3NlcnQsIHtcbiAgZXF1YWw6IGFzc2VydC5zdHJpY3RFcXVhbCxcbiAgZGVlcEVxdWFsOiBhc3NlcnQuZGVlcFN0cmljdEVxdWFsLFxuICBub3RFcXVhbDogYXNzZXJ0Lm5vdFN0cmljdEVxdWFsLFxuICBub3REZWVwRXF1YWw6IGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWxcbn0pO1xuYXNzZXJ0LnN0cmljdC5zdHJpY3QgPSBhc3NlcnQuc3RyaWN0O1xuXG52YXIgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///918\n")},940: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvYWNvcm4tanN4L3hodG1sLmpzPzgwNjAiXSwibmFtZXMiOlsibW9kdWxlIiwicXVvdCIsImFtcCIsImFwb3MiLCJsdCIsImd0IiwibmJzcCIsImlleGNsIiwiY2VudCIsInBvdW5kIiwiY3VycmVuIiwieWVuIiwiYnJ2YmFyIiwic2VjdCIsInVtbCIsImNvcHkiLCJvcmRmIiwibGFxdW8iLCJub3QiLCJzaHkiLCJyZWciLCJtYWNyIiwiZGVnIiwicGx1c21uIiwic3VwMiIsInN1cDMiLCJhY3V0ZSIsIm1pY3JvIiwicGFyYSIsIm1pZGRvdCIsImNlZGlsIiwic3VwMSIsIm9yZG0iLCJyYXF1byIsImZyYWMxNCIsImZyYWMxMiIsImZyYWMzNCIsImlxdWVzdCIsIkFncmF2ZSIsIkFhY3V0ZSIsIkFjaXJjIiwiQXRpbGRlIiwiQXVtbCIsIkFyaW5nIiwiQUVsaWciLCJDY2VkaWwiLCJFZ3JhdmUiLCJFYWN1dGUiLCJFY2lyYyIsIkV1bWwiLCJJZ3JhdmUiLCJJYWN1dGUiLCJJY2lyYyIsIkl1bWwiLCJFVEgiLCJOdGlsZGUiLCJPZ3JhdmUiLCJPYWN1dGUiLCJPY2lyYyIsIk90aWxkZSIsIk91bWwiLCJ0aW1lcyIsIk9zbGFzaCIsIlVncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjIiwiVXVtbCIsIllhY3V0ZSIsIlRIT1JOIiwic3psaWciLCJhZ3JhdmUiLCJhYWN1dGUiLCJhY2lyYyIsImF0aWxkZSIsImF1bWwiLCJhcmluZyIsImFlbGlnIiwiY2NlZGlsIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmMiLCJldW1sIiwiaWdyYXZlIiwiaWFjdXRlIiwiaWNpcmMiLCJpdW1sIiwiZXRoIiwibnRpbGRlIiwib2dyYXZlIiwib2FjdXRlIiwib2NpcmMiLCJvdGlsZGUiLCJvdW1sIiwiZGl2aWRlIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmMiLCJ1dW1sIiwieWFjdXRlIiwidGhvcm4iLCJ5dW1sIiwiT0VsaWciLCJvZWxpZyIsIlNjYXJvbiIsInNjYXJvbiIsIll1bWwiLCJmbm9mIiwiY2lyYyIsInRpbGRlIiwiQWxwaGEiLCJCZXRhIiwiR2FtbWEiLCJEZWx0YSIsIkVwc2lsb24iLCJaZXRhIiwiRXRhIiwiVGhldGEiLCJJb3RhIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiWGkiLCJPbWljcm9uIiwiUGkiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJQaGkiLCJDaGkiLCJQc2kiLCJPbWVnYSIsImFscGhhIiwiYmV0YSIsImdhbW1hIiwiZGVsdGEiLCJlcHNpbG9uIiwiemV0YSIsImV0YSIsInRoZXRhIiwiaW90YSIsImthcHBhIiwibGFtYmRhIiwibXUiLCJudSIsInhpIiwib21pY3JvbiIsInBpIiwicmhvIiwic2lnbWFmIiwic2lnbWEiLCJ0YXUiLCJ1cHNpbG9uIiwicGhpIiwiY2hpIiwicHNpIiwib21lZ2EiLCJ0aGV0YXN5bSIsInVwc2loIiwicGl2IiwiZW5zcCIsImVtc3AiLCJ0aGluc3AiLCJ6d25qIiwiendqIiwibHJtIiwicmxtIiwibmRhc2giLCJtZGFzaCIsImxzcXVvIiwicnNxdW8iLCJzYnF1byIsImxkcXVvIiwicmRxdW8iLCJiZHF1byIsImRhZ2dlciIsIkRhZ2dlciIsImJ1bGwiLCJoZWxsaXAiLCJwZXJtaWwiLCJwcmltZSIsIlByaW1lIiwibHNhcXVvIiwicnNhcXVvIiwib2xpbmUiLCJmcmFzbCIsImV1cm8iLCJpbWFnZSIsIndlaWVycCIsInJlYWwiLCJ0cmFkZSIsImFsZWZzeW0iLCJsYXJyIiwidWFyciIsInJhcnIiLCJkYXJyIiwiaGFyciIsImNyYXJyIiwibEFyciIsInVBcnIiLCJyQXJyIiwiZEFyciIsImhBcnIiLCJmb3JhbGwiLCJwYXJ0IiwiZXhpc3QiLCJlbXB0eSIsIm5hYmxhIiwiaXNpbiIsIm5vdGluIiwibmkiLCJwcm9kIiwic3VtIiwibWludXMiLCJsb3dhc3QiLCJyYWRpYyIsInByb3AiLCJpbmZpbiIsImFuZyIsImFuZCIsIm9yIiwiY2FwIiwiY3VwIiwidGhlcmU0Iiwic2ltIiwiY29uZyIsImFzeW1wIiwibmUiLCJlcXVpdiIsImxlIiwiZ2UiLCJzdWIiLCJzdXAiLCJuc3ViIiwic3ViZSIsInN1cGUiLCJvcGx1cyIsIm90aW1lcyIsInBlcnAiLCJzZG90IiwibGNlaWwiLCJyY2VpbCIsImxmbG9vciIsInJmbG9vciIsImxhbmciLCJyYW5nIiwibG96Iiwic3BhZGVzIiwiY2x1YnMiLCJoZWFydHMiLCJkaWFtcyJdLCJtYXBwaW5ncyI6Ijs7QUFBQUEsTUFBTSxDQUFOQSxVQUFpQjtBQUNmQyxNQUFJLEVBRFc7QUFFZkMsS0FBRyxFQUZZO0FBR2ZDLE1BQUksRUFIVztBQUlmQyxJQUFFLEVBSmE7QUFLZkMsSUFBRSxFQUxhO0FBTWZDLE1BQUksRUFOVztBQU9mQyxPQUFLLEVBUFU7QUFRZkMsTUFBSSxFQVJXO0FBU2ZDLE9BQUssRUFUVTtBQVVmQyxRQUFNLEVBVlM7QUFXZkMsS0FBRyxFQVhZO0FBWWZDLFFBQU0sRUFaUztBQWFmQyxNQUFJLEVBYlc7QUFjZkMsS0FBRyxFQWRZO0FBZWZDLE1BQUksRUFmVztBQWdCZkMsTUFBSSxFQWhCVztBQWlCZkMsT0FBSyxFQWpCVTtBQWtCZkMsS0FBRyxFQWxCWTtBQW1CZkMsS0FBRyxFQW5CWTtBQW9CZkMsS0FBRyxFQXBCWTtBQXFCZkMsTUFBSSxFQXJCVztBQXNCZkMsS0FBRyxFQXRCWTtBQXVCZkMsUUFBTSxFQXZCUztBQXdCZkMsTUFBSSxFQXhCVztBQXlCZkMsTUFBSSxFQXpCVztBQTBCZkMsT0FBSyxFQTFCVTtBQTJCZkMsT0FBSyxFQTNCVTtBQTRCZkMsTUFBSSxFQTVCVztBQTZCZkMsUUFBTSxFQTdCUztBQThCZkMsT0FBSyxFQTlCVTtBQStCZkMsTUFBSSxFQS9CVztBQWdDZkMsTUFBSSxFQWhDVztBQWlDZkMsT0FBSyxFQWpDVTtBQWtDZkMsUUFBTSxFQWxDUztBQW1DZkMsUUFBTSxFQW5DUztBQW9DZkMsUUFBTSxFQXBDUztBQXFDZkMsUUFBTSxFQXJDUztBQXNDZkMsUUFBTSxFQXRDUztBQXVDZkMsUUFBTSxFQXZDUztBQXdDZkMsT0FBSyxFQXhDVTtBQXlDZkMsUUFBTSxFQXpDUztBQTBDZkMsTUFBSSxFQTFDVztBQTJDZkMsT0FBSyxFQTNDVTtBQTRDZkMsT0FBSyxFQTVDVTtBQTZDZkMsUUFBTSxFQTdDUztBQThDZkMsUUFBTSxFQTlDUztBQStDZkMsUUFBTSxFQS9DUztBQWdEZkMsT0FBSyxFQWhEVTtBQWlEZkMsTUFBSSxFQWpEVztBQWtEZkMsUUFBTSxFQWxEUztBQW1EZkMsUUFBTSxFQW5EUztBQW9EZkMsT0FBSyxFQXBEVTtBQXFEZkMsTUFBSSxFQXJEVztBQXNEZkMsS0FBRyxFQXREWTtBQXVEZkMsUUFBTSxFQXZEUztBQXdEZkMsUUFBTSxFQXhEUztBQXlEZkMsUUFBTSxFQXpEUztBQTBEZkMsT0FBSyxFQTFEVTtBQTJEZkMsUUFBTSxFQTNEUztBQTREZkMsTUFBSSxFQTVEVztBQTZEZkMsT0FBSyxFQTdEVTtBQThEZkMsUUFBTSxFQTlEUztBQStEZkMsUUFBTSxFQS9EUztBQWdFZkMsUUFBTSxFQWhFUztBQWlFZkMsT0FBSyxFQWpFVTtBQWtFZkMsTUFBSSxFQWxFVztBQW1FZkMsUUFBTSxFQW5FUztBQW9FZkMsT0FBSyxFQXBFVTtBQXFFZkMsT0FBSyxFQXJFVTtBQXNFZkMsUUFBTSxFQXRFUztBQXVFZkMsUUFBTSxFQXZFUztBQXdFZkMsT0FBSyxFQXhFVTtBQXlFZkMsUUFBTSxFQXpFUztBQTBFZkMsTUFBSSxFQTFFVztBQTJFZkMsT0FBSyxFQTNFVTtBQTRFZkMsT0FBSyxFQTVFVTtBQTZFZkMsUUFBTSxFQTdFUztBQThFZkMsUUFBTSxFQTlFUztBQStFZkMsUUFBTSxFQS9FUztBQWdGZkMsT0FBSyxFQWhGVTtBQWlGZkMsTUFBSSxFQWpGVztBQWtGZkMsUUFBTSxFQWxGUztBQW1GZkMsUUFBTSxFQW5GUztBQW9GZkMsT0FBSyxFQXBGVTtBQXFGZkMsTUFBSSxFQXJGVztBQXNGZkMsS0FBRyxFQXRGWTtBQXVGZkMsUUFBTSxFQXZGUztBQXdGZkMsUUFBTSxFQXhGUztBQXlGZkMsUUFBTSxFQXpGUztBQTBGZkMsT0FBSyxFQTFGVTtBQTJGZkMsUUFBTSxFQTNGUztBQTRGZkMsTUFBSSxFQTVGVztBQTZGZkMsUUFBTSxFQTdGUztBQThGZkMsUUFBTSxFQTlGUztBQStGZkMsUUFBTSxFQS9GUztBQWdHZkMsUUFBTSxFQWhHUztBQWlHZkMsT0FBSyxFQWpHVTtBQWtHZkMsTUFBSSxFQWxHVztBQW1HZkMsUUFBTSxFQW5HUztBQW9HZkMsT0FBSyxFQXBHVTtBQXFHZkMsTUFBSSxFQXJHVztBQXNHZkMsT0FBSyxFQXRHVTtBQXVHZkMsT0FBSyxFQXZHVTtBQXdHZkMsUUFBTSxFQXhHUztBQXlHZkMsUUFBTSxFQXpHUztBQTBHZkMsTUFBSSxFQTFHVztBQTJHZkMsTUFBSSxFQTNHVztBQTRHZkMsTUFBSSxFQTVHVztBQTZHZkMsT0FBSyxFQTdHVTtBQThHZkMsT0FBSyxFQTlHVTtBQStHZkMsTUFBSSxFQS9HVztBQWdIZkMsT0FBSyxFQWhIVTtBQWlIZkMsT0FBSyxFQWpIVTtBQWtIZkMsU0FBTyxFQWxIUTtBQW1IZkMsTUFBSSxFQW5IVztBQW9IZkMsS0FBRyxFQXBIWTtBQXFIZkMsT0FBSyxFQXJIVTtBQXNIZkMsTUFBSSxFQXRIVztBQXVIZkMsT0FBSyxFQXZIVTtBQXdIZkMsUUFBTSxFQXhIUztBQXlIZkMsSUFBRSxFQXpIYTtBQTBIZkMsSUFBRSxFQTFIYTtBQTJIZkMsSUFBRSxFQTNIYTtBQTRIZkMsU0FBTyxFQTVIUTtBQTZIZkMsSUFBRSxFQTdIYTtBQThIZkMsS0FBRyxFQTlIWTtBQStIZkMsT0FBSyxFQS9IVTtBQWdJZkMsS0FBRyxFQWhJWTtBQWlJZkMsU0FBTyxFQWpJUTtBQWtJZkMsS0FBRyxFQWxJWTtBQW1JZkMsS0FBRyxFQW5JWTtBQW9JZkMsS0FBRyxFQXBJWTtBQXFJZkMsT0FBSyxFQXJJVTtBQXNJZkMsT0FBSyxFQXRJVTtBQXVJZkMsTUFBSSxFQXZJVztBQXdJZkMsT0FBSyxFQXhJVTtBQXlJZkMsT0FBSyxFQXpJVTtBQTBJZkMsU0FBTyxFQTFJUTtBQTJJZkMsTUFBSSxFQTNJVztBQTRJZkMsS0FBRyxFQTVJWTtBQTZJZkMsT0FBSyxFQTdJVTtBQThJZkMsTUFBSSxFQTlJVztBQStJZkMsT0FBSyxFQS9JVTtBQWdKZkMsUUFBTSxFQWhKUztBQWlKZkMsSUFBRSxFQWpKYTtBQWtKZkMsSUFBRSxFQWxKYTtBQW1KZkMsSUFBRSxFQW5KYTtBQW9KZkMsU0FBTyxFQXBKUTtBQXFKZkMsSUFBRSxFQXJKYTtBQXNKZkMsS0FBRyxFQXRKWTtBQXVKZkMsUUFBTSxFQXZKUztBQXdKZkMsT0FBSyxFQXhKVTtBQXlKZkMsS0FBRyxFQXpKWTtBQTBKZkMsU0FBTyxFQTFKUTtBQTJKZkMsS0FBRyxFQTNKWTtBQTRKZkMsS0FBRyxFQTVKWTtBQTZKZkMsS0FBRyxFQTdKWTtBQThKZkMsT0FBSyxFQTlKVTtBQStKZkMsVUFBUSxFQS9KTztBQWdLZkMsT0FBSyxFQWhLVTtBQWlLZkMsS0FBRyxFQWpLWTtBQWtLZkMsTUFBSSxFQWxLVztBQW1LZkMsTUFBSSxFQW5LVztBQW9LZkMsUUFBTSxFQXBLUztBQXFLZkMsTUFBSSxFQXJLVztBQXNLZkMsS0FBRyxFQXRLWTtBQXVLZkMsS0FBRyxFQXZLWTtBQXdLZkMsS0FBRyxFQXhLWTtBQXlLZkMsT0FBSyxFQXpLVTtBQTBLZkMsT0FBSyxFQTFLVTtBQTJLZkMsT0FBSyxFQTNLVTtBQTRLZkMsT0FBSyxFQTVLVTtBQTZLZkMsT0FBSyxFQTdLVTtBQThLZkMsT0FBSyxFQTlLVTtBQStLZkMsT0FBSyxFQS9LVTtBQWdMZkMsT0FBSyxFQWhMVTtBQWlMZkMsUUFBTSxFQWpMUztBQWtMZkMsUUFBTSxFQWxMUztBQW1MZkMsTUFBSSxFQW5MVztBQW9MZkMsUUFBTSxFQXBMUztBQXFMZkMsUUFBTSxFQXJMUztBQXNMZkMsT0FBSyxFQXRMVTtBQXVMZkMsT0FBSyxFQXZMVTtBQXdMZkMsUUFBTSxFQXhMUztBQXlMZkMsUUFBTSxFQXpMUztBQTBMZkMsT0FBSyxFQTFMVTtBQTJMZkMsT0FBSyxFQTNMVTtBQTRMZkMsTUFBSSxFQTVMVztBQTZMZkMsT0FBSyxFQTdMVTtBQThMZkMsUUFBTSxFQTlMUztBQStMZkMsTUFBSSxFQS9MVztBQWdNZkMsT0FBSyxFQWhNVTtBQWlNZkMsU0FBTyxFQWpNUTtBQWtNZkMsTUFBSSxFQWxNVztBQW1NZkMsTUFBSSxFQW5NVztBQW9NZkMsTUFBSSxFQXBNVztBQXFNZkMsTUFBSSxFQXJNVztBQXNNZkMsTUFBSSxFQXRNVztBQXVNZkMsT0FBSyxFQXZNVTtBQXdNZkMsTUFBSSxFQXhNVztBQXlNZkMsTUFBSSxFQXpNVztBQTBNZkMsTUFBSSxFQTFNVztBQTJNZkMsTUFBSSxFQTNNVztBQTRNZkMsTUFBSSxFQTVNVztBQTZNZkMsUUFBTSxFQTdNUztBQThNZkMsTUFBSSxFQTlNVztBQStNZkMsT0FBSyxFQS9NVTtBQWdOZkMsT0FBSyxFQWhOVTtBQWlOZkMsT0FBSyxFQWpOVTtBQWtOZkMsTUFBSSxFQWxOVztBQW1OZkMsT0FBSyxFQW5OVTtBQW9OZkMsSUFBRSxFQXBOYTtBQXFOZkMsTUFBSSxFQXJOVztBQXNOZkMsS0FBRyxFQXROWTtBQXVOZkMsT0FBSyxFQXZOVTtBQXdOZkMsUUFBTSxFQXhOUztBQXlOZkMsT0FBSyxFQXpOVTtBQTBOZkMsTUFBSSxFQTFOVztBQTJOZkMsT0FBSyxFQTNOVTtBQTROZkMsS0FBRyxFQTVOWTtBQTZOZkMsS0FBRyxFQTdOWTtBQThOZkMsSUFBRSxFQTlOYTtBQStOZkMsS0FBRyxFQS9OWTtBQWdPZkMsS0FBRyxFQWhPWTtBQWlPZixTQWpPZTtBQWtPZkMsUUFBTSxFQWxPUztBQW1PZkMsS0FBRyxFQW5PWTtBQW9PZkMsTUFBSSxFQXBPVztBQXFPZkMsT0FBSyxFQXJPVTtBQXNPZkMsSUFBRSxFQXRPYTtBQXVPZkMsT0FBSyxFQXZPVTtBQXdPZkMsSUFBRSxFQXhPYTtBQXlPZkMsSUFBRSxFQXpPYTtBQTBPZkMsS0FBRyxFQTFPWTtBQTJPZkMsS0FBRyxFQTNPWTtBQTRPZkMsTUFBSSxFQTVPVztBQTZPZkMsTUFBSSxFQTdPVztBQThPZkMsTUFBSSxFQTlPVztBQStPZkMsT0FBSyxFQS9PVTtBQWdQZkMsUUFBTSxFQWhQUztBQWlQZkMsTUFBSSxFQWpQVztBQWtQZkMsTUFBSSxFQWxQVztBQW1QZkMsT0FBSyxFQW5QVTtBQW9QZkMsT0FBSyxFQXBQVTtBQXFQZkMsUUFBTSxFQXJQUztBQXNQZkMsUUFBTSxFQXRQUztBQXVQZkMsTUFBSSxFQXZQVztBQXdQZkMsTUFBSSxFQXhQVztBQXlQZkMsS0FBRyxFQXpQWTtBQTBQZkMsUUFBTSxFQTFQUztBQTJQZkMsT0FBSyxFQTNQVTtBQTRQZkMsUUFBTSxFQTVQUztBQTZQZkMsT0FBSyxFQUFFO0FBN1BRLENBQWpCNVAiLCJmaWxlIjoiOTQwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIHF1b3Q6ICdcXHUwMDIyJyxcbiAgYW1wOiAnJicsXG4gIGFwb3M6ICdcXHUwMDI3JyxcbiAgbHQ6ICc8JyxcbiAgZ3Q6ICc+JyxcbiAgbmJzcDogJ1xcdTAwQTAnLFxuICBpZXhjbDogJ1xcdTAwQTEnLFxuICBjZW50OiAnXFx1MDBBMicsXG4gIHBvdW5kOiAnXFx1MDBBMycsXG4gIGN1cnJlbjogJ1xcdTAwQTQnLFxuICB5ZW46ICdcXHUwMEE1JyxcbiAgYnJ2YmFyOiAnXFx1MDBBNicsXG4gIHNlY3Q6ICdcXHUwMEE3JyxcbiAgdW1sOiAnXFx1MDBBOCcsXG4gIGNvcHk6ICdcXHUwMEE5JyxcbiAgb3JkZjogJ1xcdTAwQUEnLFxuICBsYXF1bzogJ1xcdTAwQUInLFxuICBub3Q6ICdcXHUwMEFDJyxcbiAgc2h5OiAnXFx1MDBBRCcsXG4gIHJlZzogJ1xcdTAwQUUnLFxuICBtYWNyOiAnXFx1MDBBRicsXG4gIGRlZzogJ1xcdTAwQjAnLFxuICBwbHVzbW46ICdcXHUwMEIxJyxcbiAgc3VwMjogJ1xcdTAwQjInLFxuICBzdXAzOiAnXFx1MDBCMycsXG4gIGFjdXRlOiAnXFx1MDBCNCcsXG4gIG1pY3JvOiAnXFx1MDBCNScsXG4gIHBhcmE6ICdcXHUwMEI2JyxcbiAgbWlkZG90OiAnXFx1MDBCNycsXG4gIGNlZGlsOiAnXFx1MDBCOCcsXG4gIHN1cDE6ICdcXHUwMEI5JyxcbiAgb3JkbTogJ1xcdTAwQkEnLFxuICByYXF1bzogJ1xcdTAwQkInLFxuICBmcmFjMTQ6ICdcXHUwMEJDJyxcbiAgZnJhYzEyOiAnXFx1MDBCRCcsXG4gIGZyYWMzNDogJ1xcdTAwQkUnLFxuICBpcXVlc3Q6ICdcXHUwMEJGJyxcbiAgQWdyYXZlOiAnXFx1MDBDMCcsXG4gIEFhY3V0ZTogJ1xcdTAwQzEnLFxuICBBY2lyYzogJ1xcdTAwQzInLFxuICBBdGlsZGU6ICdcXHUwMEMzJyxcbiAgQXVtbDogJ1xcdTAwQzQnLFxuICBBcmluZzogJ1xcdTAwQzUnLFxuICBBRWxpZzogJ1xcdTAwQzYnLFxuICBDY2VkaWw6ICdcXHUwMEM3JyxcbiAgRWdyYXZlOiAnXFx1MDBDOCcsXG4gIEVhY3V0ZTogJ1xcdTAwQzknLFxuICBFY2lyYzogJ1xcdTAwQ0EnLFxuICBFdW1sOiAnXFx1MDBDQicsXG4gIElncmF2ZTogJ1xcdTAwQ0MnLFxuICBJYWN1dGU6ICdcXHUwMENEJyxcbiAgSWNpcmM6ICdcXHUwMENFJyxcbiAgSXVtbDogJ1xcdTAwQ0YnLFxuICBFVEg6ICdcXHUwMEQwJyxcbiAgTnRpbGRlOiAnXFx1MDBEMScsXG4gIE9ncmF2ZTogJ1xcdTAwRDInLFxuICBPYWN1dGU6ICdcXHUwMEQzJyxcbiAgT2NpcmM6ICdcXHUwMEQ0JyxcbiAgT3RpbGRlOiAnXFx1MDBENScsXG4gIE91bWw6ICdcXHUwMEQ2JyxcbiAgdGltZXM6ICdcXHUwMEQ3JyxcbiAgT3NsYXNoOiAnXFx1MDBEOCcsXG4gIFVncmF2ZTogJ1xcdTAwRDknLFxuICBVYWN1dGU6ICdcXHUwMERBJyxcbiAgVWNpcmM6ICdcXHUwMERCJyxcbiAgVXVtbDogJ1xcdTAwREMnLFxuICBZYWN1dGU6ICdcXHUwMEREJyxcbiAgVEhPUk46ICdcXHUwMERFJyxcbiAgc3psaWc6ICdcXHUwMERGJyxcbiAgYWdyYXZlOiAnXFx1MDBFMCcsXG4gIGFhY3V0ZTogJ1xcdTAwRTEnLFxuICBhY2lyYzogJ1xcdTAwRTInLFxuICBhdGlsZGU6ICdcXHUwMEUzJyxcbiAgYXVtbDogJ1xcdTAwRTQnLFxuICBhcmluZzogJ1xcdTAwRTUnLFxuICBhZWxpZzogJ1xcdTAwRTYnLFxuICBjY2VkaWw6ICdcXHUwMEU3JyxcbiAgZWdyYXZlOiAnXFx1MDBFOCcsXG4gIGVhY3V0ZTogJ1xcdTAwRTknLFxuICBlY2lyYzogJ1xcdTAwRUEnLFxuICBldW1sOiAnXFx1MDBFQicsXG4gIGlncmF2ZTogJ1xcdTAwRUMnLFxuICBpYWN1dGU6ICdcXHUwMEVEJyxcbiAgaWNpcmM6ICdcXHUwMEVFJyxcbiAgaXVtbDogJ1xcdTAwRUYnLFxuICBldGg6ICdcXHUwMEYwJyxcbiAgbnRpbGRlOiAnXFx1MDBGMScsXG4gIG9ncmF2ZTogJ1xcdTAwRjInLFxuICBvYWN1dGU6ICdcXHUwMEYzJyxcbiAgb2NpcmM6ICdcXHUwMEY0JyxcbiAgb3RpbGRlOiAnXFx1MDBGNScsXG4gIG91bWw6ICdcXHUwMEY2JyxcbiAgZGl2aWRlOiAnXFx1MDBGNycsXG4gIG9zbGFzaDogJ1xcdTAwRjgnLFxuICB1Z3JhdmU6ICdcXHUwMEY5JyxcbiAgdWFjdXRlOiAnXFx1MDBGQScsXG4gIHVjaXJjOiAnXFx1MDBGQicsXG4gIHV1bWw6ICdcXHUwMEZDJyxcbiAgeWFjdXRlOiAnXFx1MDBGRCcsXG4gIHRob3JuOiAnXFx1MDBGRScsXG4gIHl1bWw6ICdcXHUwMEZGJyxcbiAgT0VsaWc6ICdcXHUwMTUyJyxcbiAgb2VsaWc6ICdcXHUwMTUzJyxcbiAgU2Nhcm9uOiAnXFx1MDE2MCcsXG4gIHNjYXJvbjogJ1xcdTAxNjEnLFxuICBZdW1sOiAnXFx1MDE3OCcsXG4gIGZub2Y6ICdcXHUwMTkyJyxcbiAgY2lyYzogJ1xcdTAyQzYnLFxuICB0aWxkZTogJ1xcdTAyREMnLFxuICBBbHBoYTogJ1xcdTAzOTEnLFxuICBCZXRhOiAnXFx1MDM5MicsXG4gIEdhbW1hOiAnXFx1MDM5MycsXG4gIERlbHRhOiAnXFx1MDM5NCcsXG4gIEVwc2lsb246ICdcXHUwMzk1JyxcbiAgWmV0YTogJ1xcdTAzOTYnLFxuICBFdGE6ICdcXHUwMzk3JyxcbiAgVGhldGE6ICdcXHUwMzk4JyxcbiAgSW90YTogJ1xcdTAzOTknLFxuICBLYXBwYTogJ1xcdTAzOUEnLFxuICBMYW1iZGE6ICdcXHUwMzlCJyxcbiAgTXU6ICdcXHUwMzlDJyxcbiAgTnU6ICdcXHUwMzlEJyxcbiAgWGk6ICdcXHUwMzlFJyxcbiAgT21pY3JvbjogJ1xcdTAzOUYnLFxuICBQaTogJ1xcdTAzQTAnLFxuICBSaG86ICdcXHUwM0ExJyxcbiAgU2lnbWE6ICdcXHUwM0EzJyxcbiAgVGF1OiAnXFx1MDNBNCcsXG4gIFVwc2lsb246ICdcXHUwM0E1JyxcbiAgUGhpOiAnXFx1MDNBNicsXG4gIENoaTogJ1xcdTAzQTcnLFxuICBQc2k6ICdcXHUwM0E4JyxcbiAgT21lZ2E6ICdcXHUwM0E5JyxcbiAgYWxwaGE6ICdcXHUwM0IxJyxcbiAgYmV0YTogJ1xcdTAzQjInLFxuICBnYW1tYTogJ1xcdTAzQjMnLFxuICBkZWx0YTogJ1xcdTAzQjQnLFxuICBlcHNpbG9uOiAnXFx1MDNCNScsXG4gIHpldGE6ICdcXHUwM0I2JyxcbiAgZXRhOiAnXFx1MDNCNycsXG4gIHRoZXRhOiAnXFx1MDNCOCcsXG4gIGlvdGE6ICdcXHUwM0I5JyxcbiAga2FwcGE6ICdcXHUwM0JBJyxcbiAgbGFtYmRhOiAnXFx1MDNCQicsXG4gIG11OiAnXFx1MDNCQycsXG4gIG51OiAnXFx1MDNCRCcsXG4gIHhpOiAnXFx1MDNCRScsXG4gIG9taWNyb246ICdcXHUwM0JGJyxcbiAgcGk6ICdcXHUwM0MwJyxcbiAgcmhvOiAnXFx1MDNDMScsXG4gIHNpZ21hZjogJ1xcdTAzQzInLFxuICBzaWdtYTogJ1xcdTAzQzMnLFxuICB0YXU6ICdcXHUwM0M0JyxcbiAgdXBzaWxvbjogJ1xcdTAzQzUnLFxuICBwaGk6ICdcXHUwM0M2JyxcbiAgY2hpOiAnXFx1MDNDNycsXG4gIHBzaTogJ1xcdTAzQzgnLFxuICBvbWVnYTogJ1xcdTAzQzknLFxuICB0aGV0YXN5bTogJ1xcdTAzRDEnLFxuICB1cHNpaDogJ1xcdTAzRDInLFxuICBwaXY6ICdcXHUwM0Q2JyxcbiAgZW5zcDogJ1xcdTIwMDInLFxuICBlbXNwOiAnXFx1MjAwMycsXG4gIHRoaW5zcDogJ1xcdTIwMDknLFxuICB6d25qOiAnXFx1MjAwQycsXG4gIHp3ajogJ1xcdTIwMEQnLFxuICBscm06ICdcXHUyMDBFJyxcbiAgcmxtOiAnXFx1MjAwRicsXG4gIG5kYXNoOiAnXFx1MjAxMycsXG4gIG1kYXNoOiAnXFx1MjAxNCcsXG4gIGxzcXVvOiAnXFx1MjAxOCcsXG4gIHJzcXVvOiAnXFx1MjAxOScsXG4gIHNicXVvOiAnXFx1MjAxQScsXG4gIGxkcXVvOiAnXFx1MjAxQycsXG4gIHJkcXVvOiAnXFx1MjAxRCcsXG4gIGJkcXVvOiAnXFx1MjAxRScsXG4gIGRhZ2dlcjogJ1xcdTIwMjAnLFxuICBEYWdnZXI6ICdcXHUyMDIxJyxcbiAgYnVsbDogJ1xcdTIwMjInLFxuICBoZWxsaXA6ICdcXHUyMDI2JyxcbiAgcGVybWlsOiAnXFx1MjAzMCcsXG4gIHByaW1lOiAnXFx1MjAzMicsXG4gIFByaW1lOiAnXFx1MjAzMycsXG4gIGxzYXF1bzogJ1xcdTIwMzknLFxuICByc2FxdW86ICdcXHUyMDNBJyxcbiAgb2xpbmU6ICdcXHUyMDNFJyxcbiAgZnJhc2w6ICdcXHUyMDQ0JyxcbiAgZXVybzogJ1xcdTIwQUMnLFxuICBpbWFnZTogJ1xcdTIxMTEnLFxuICB3ZWllcnA6ICdcXHUyMTE4JyxcbiAgcmVhbDogJ1xcdTIxMUMnLFxuICB0cmFkZTogJ1xcdTIxMjInLFxuICBhbGVmc3ltOiAnXFx1MjEzNScsXG4gIGxhcnI6ICdcXHUyMTkwJyxcbiAgdWFycjogJ1xcdTIxOTEnLFxuICByYXJyOiAnXFx1MjE5MicsXG4gIGRhcnI6ICdcXHUyMTkzJyxcbiAgaGFycjogJ1xcdTIxOTQnLFxuICBjcmFycjogJ1xcdTIxQjUnLFxuICBsQXJyOiAnXFx1MjFEMCcsXG4gIHVBcnI6ICdcXHUyMUQxJyxcbiAgckFycjogJ1xcdTIxRDInLFxuICBkQXJyOiAnXFx1MjFEMycsXG4gIGhBcnI6ICdcXHUyMUQ0JyxcbiAgZm9yYWxsOiAnXFx1MjIwMCcsXG4gIHBhcnQ6ICdcXHUyMjAyJyxcbiAgZXhpc3Q6ICdcXHUyMjAzJyxcbiAgZW1wdHk6ICdcXHUyMjA1JyxcbiAgbmFibGE6ICdcXHUyMjA3JyxcbiAgaXNpbjogJ1xcdTIyMDgnLFxuICBub3RpbjogJ1xcdTIyMDknLFxuICBuaTogJ1xcdTIyMEInLFxuICBwcm9kOiAnXFx1MjIwRicsXG4gIHN1bTogJ1xcdTIyMTEnLFxuICBtaW51czogJ1xcdTIyMTInLFxuICBsb3dhc3Q6ICdcXHUyMjE3JyxcbiAgcmFkaWM6ICdcXHUyMjFBJyxcbiAgcHJvcDogJ1xcdTIyMUQnLFxuICBpbmZpbjogJ1xcdTIyMUUnLFxuICBhbmc6ICdcXHUyMjIwJyxcbiAgYW5kOiAnXFx1MjIyNycsXG4gIG9yOiAnXFx1MjIyOCcsXG4gIGNhcDogJ1xcdTIyMjknLFxuICBjdXA6ICdcXHUyMjJBJyxcbiAgJ2ludCc6ICdcXHUyMjJCJyxcbiAgdGhlcmU0OiAnXFx1MjIzNCcsXG4gIHNpbTogJ1xcdTIyM0MnLFxuICBjb25nOiAnXFx1MjI0NScsXG4gIGFzeW1wOiAnXFx1MjI0OCcsXG4gIG5lOiAnXFx1MjI2MCcsXG4gIGVxdWl2OiAnXFx1MjI2MScsXG4gIGxlOiAnXFx1MjI2NCcsXG4gIGdlOiAnXFx1MjI2NScsXG4gIHN1YjogJ1xcdTIyODInLFxuICBzdXA6ICdcXHUyMjgzJyxcbiAgbnN1YjogJ1xcdTIyODQnLFxuICBzdWJlOiAnXFx1MjI4NicsXG4gIHN1cGU6ICdcXHUyMjg3JyxcbiAgb3BsdXM6ICdcXHUyMjk1JyxcbiAgb3RpbWVzOiAnXFx1MjI5NycsXG4gIHBlcnA6ICdcXHUyMkE1JyxcbiAgc2RvdDogJ1xcdTIyQzUnLFxuICBsY2VpbDogJ1xcdTIzMDgnLFxuICByY2VpbDogJ1xcdTIzMDknLFxuICBsZmxvb3I6ICdcXHUyMzBBJyxcbiAgcmZsb29yOiAnXFx1MjMwQicsXG4gIGxhbmc6ICdcXHUyMzI5JyxcbiAgcmFuZzogJ1xcdTIzMkEnLFxuICBsb3o6ICdcXHUyNUNBJyxcbiAgc3BhZGVzOiAnXFx1MjY2MCcsXG4gIGNsdWJzOiAnXFx1MjY2MycsXG4gIGhlYXJ0czogJ1xcdTI2NjUnLFxuICBkaWFtczogJ1xcdTI2NjYnXG59O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///940\n')},942: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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vL2hvbWUvamVua2lucy93b3Jrc3BhY2UvZGVzaWduLXN5c3RlbV9QUi0xMy9ub2RlX21vZHVsZXMvQGJhc2UyL3ByZXR0eS1wcmludC1vYmplY3QvZGlzdC9pbmRleC5qcz81YzViIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQTtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxRQUFRO0FBQ3pELHdDQUF3QyxRQUFRO0FBQ2hELHdEQUF3RCxRQUFRO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxjQUFjO0FBQzVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2RUFBNkUsc0VBQXNFLEVBQUU7QUFDcko7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELG9FQUFvRSxFQUFFO0FBQzlIO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDRCQUE0QjtBQUNyQztBQUNBO0FBQ0E7QUFDQSwyREFBMkQsbUNBQW1DLEVBQUU7QUFDaEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI5NDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19zcHJlYWRBcnJheXMgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXlzKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xuICAgIHJldHVybiByO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciBzZWVuID0gW107XG4vKipcbiAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24uIEtlZXAgaW4gbWluZCB0aGF0IGFycmF5LCBmdW5jdGlvbiwgcmVnZXhwLCBldGMsIGFyZSBvYmplY3RzIGluIEphdmFTY3JpcHQuXG4gKlxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBpc09iaih2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG4vKipcbiAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc1JlZ2V4cCh2YWx1ZSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cbi8qKlxuICogR2V0IGFuIGFycmF5IG9mIGFsbCBvZiB0aGUgZW51bWVyYWJsZSBzeW1ib2xzIGZvciBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIG9iamVjdCB0aGUgb2JqZWN0IHRvIGdldCB0aGUgZW51bWVyYWJsZSBzeW1ib2xzIGZvclxuICovXG5mdW5jdGlvbiBnZXRPd25FbnVtUHJvcFN5bWJvbHMob2JqZWN0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KS5maWx0ZXIoZnVuY3Rpb24gKGtleVN5bWJvbCkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwga2V5U3ltYm9sKTsgfSk7XG59XG4vKipcbiAqIHByZXR0eSBwcmludCBhbiBvYmplY3RcbiAqXG4gKiBAcGFyYW0gaW5wdXQgdGhlIG9iamVjdCB0byBwcmV0dHkgcHJpbnRcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMsIHRyYW5zZm9ybXMsIGFuZCBmaWx0ZXJzXG4gKiBAcGFyYW0gcGFkIHRoZSBwYWRkaW5nIHN0cmluZ1xuICovXG5mdW5jdGlvbiBwcmV0dHlQcmludChpbnB1dCwgb3B0aW9ucywgcGFkKSB7XG4gICAgaWYgKHBhZCA9PT0gdm9pZCAwKSB7IHBhZCA9ICcnOyB9XG4gICAgLy8gc2Vuc2libGUgb3B0aW9uIGRlZmF1bHRzXG4gICAgdmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICBpbmRlbnQ6ICdcXHQnLFxuICAgICAgICBzaW5nbGVRdW90ZXM6IHRydWVcbiAgICB9O1xuICAgIHZhciBjb21iaW5lZE9wdGlvbnMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbiAgICB2YXIgdG9rZW5zO1xuICAgIGlmIChjb21iaW5lZE9wdGlvbnMuaW5saW5lQ2hhcmFjdGVyTGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0b2tlbnMgPSB7XG4gICAgICAgICAgICBuZXdMaW5lOiAnXFxuJyxcbiAgICAgICAgICAgIG5ld0xpbmVPclNwYWNlOiAnXFxuJyxcbiAgICAgICAgICAgIHBhZDogcGFkLFxuICAgICAgICAgICAgaW5kZW50OiBwYWQgKyBjb21iaW5lZE9wdGlvbnMuaW5kZW50XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbnMgPSB7XG4gICAgICAgICAgICBuZXdMaW5lOiAnQEBfX1BSRVRUWV9QUklOVF9ORVdfTElORV9fQEAnLFxuICAgICAgICAgICAgbmV3TGluZU9yU3BhY2U6ICdAQF9fUFJFVFRZX1BSSU5UX05FV19MSU5FX09SX1NQQUNFX19AQCcsXG4gICAgICAgICAgICBwYWQ6ICdAQF9fUFJFVFRZX1BSSU5UX1BBRF9fQEAnLFxuICAgICAgICAgICAgaW5kZW50OiAnQEBfX1BSRVRUWV9QUklOVF9JTkRFTlRfX0BAJ1xuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgZXhwYW5kV2hpdGVTcGFjZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgaWYgKGNvbWJpbmVkT3B0aW9ucy5pbmxpbmVDaGFyYWN0ZXJMaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvbmVMaW5lZCA9IHN0cmluZ1xuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCh0b2tlbnMubmV3TGluZSwgJ2cnKSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKHRva2Vucy5uZXdMaW5lT3JTcGFjZSwgJ2cnKSwgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCh0b2tlbnMucGFkICsgJ3wnICsgdG9rZW5zLmluZGVudCwgJ2cnKSwgJycpO1xuICAgICAgICBpZiAob25lTGluZWQubGVuZ3RoIDw9IGNvbWJpbmVkT3B0aW9ucy5pbmxpbmVDaGFyYWN0ZXJMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuIG9uZUxpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAodG9rZW5zLm5ld0xpbmUgKyAnfCcgKyB0b2tlbnMubmV3TGluZU9yU3BhY2UsICdnJyksICdcXG4nKVxuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cCh0b2tlbnMucGFkLCAnZycpLCBwYWQpXG4gICAgICAgICAgICAucmVwbGFjZShuZXcgUmVnRXhwKHRva2Vucy5pbmRlbnQsICdnJyksIHBhZCArIGNvbWJpbmVkT3B0aW9ucy5pbmRlbnQpO1xuICAgIH07XG4gICAgaWYgKHNlZW4uaW5kZXhPZihpbnB1dCkgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiAnXCJbQ2lyY3VsYXJdXCInO1xuICAgIH1cbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdzeW1ib2wnIHx8XG4gICAgICAgIGlzUmVnZXhwKGlucHV0KSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0KTtcbiAgICB9XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gXCJuZXcgRGF0ZSgnXCIgKyBpbnB1dC50b0lTT1N0cmluZygpICsgXCInKVwiO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICdbXSc7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5wdXNoKGlucHV0KTtcbiAgICAgICAgdmFyIHJldCA9ICdbJyArIHRva2Vucy5uZXdMaW5lICsgaW5wdXQubWFwKGZ1bmN0aW9uIChlbCwgaSkge1xuICAgICAgICAgICAgdmFyIGVvbCA9IGlucHV0Lmxlbmd0aCAtIDEgPT09IGkgPyB0b2tlbnMubmV3TGluZSA6ICcsJyArIHRva2Vucy5uZXdMaW5lT3JTcGFjZTtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByZXR0eVByaW50KGVsLCBjb21iaW5lZE9wdGlvbnMsIHBhZCArIGNvbWJpbmVkT3B0aW9ucy5pbmRlbnQpO1xuICAgICAgICAgICAgaWYgKGNvbWJpbmVkT3B0aW9ucy50cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbWJpbmVkT3B0aW9ucy50cmFuc2Zvcm0oaW5wdXQsIGksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b2tlbnMuaW5kZW50ICsgdmFsdWUgKyBlb2w7XG4gICAgICAgIH0pLmpvaW4oJycpICsgdG9rZW5zLnBhZCArICddJztcbiAgICAgICAgc2Vlbi5wb3AoKTtcbiAgICAgICAgcmV0dXJuIGV4cGFuZFdoaXRlU3BhY2UocmV0KTtcbiAgICB9XG4gICAgaWYgKGlzT2JqKGlucHV0KSkge1xuICAgICAgICB2YXIgb2JqS2V5c18xID0gX19zcHJlYWRBcnJheXMoT2JqZWN0LmtleXMoaW5wdXQpLCAoZ2V0T3duRW51bVByb3BTeW1ib2xzKGlucHV0KSkpO1xuICAgICAgICBpZiAoY29tYmluZWRPcHRpb25zLmZpbHRlcikge1xuICAgICAgICAgICAgb2JqS2V5c18xID0gb2JqS2V5c18xLmZpbHRlcihmdW5jdGlvbiAoZWwpIHsgcmV0dXJuIGNvbWJpbmVkT3B0aW9ucy5maWx0ZXIgJiYgY29tYmluZWRPcHRpb25zLmZpbHRlcihpbnB1dCwgZWwpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JqS2V5c18xLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICd7fSc7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5wdXNoKGlucHV0KTtcbiAgICAgICAgdmFyIHJldCA9ICd7JyArIHRva2Vucy5uZXdMaW5lICsgb2JqS2V5c18xLm1hcChmdW5jdGlvbiAoZWwsIGkpIHtcbiAgICAgICAgICAgIHZhciBlb2wgPSBvYmpLZXlzXzEubGVuZ3RoIC0gMSA9PT0gaSA/IHRva2Vucy5uZXdMaW5lIDogJywnICsgdG9rZW5zLm5ld0xpbmVPclNwYWNlO1xuICAgICAgICAgICAgdmFyIGlzU3ltYm9sID0gdHlwZW9mIGVsID09PSAnc3ltYm9sJztcbiAgICAgICAgICAgIHZhciBpc0NsYXNzaWMgPSAhaXNTeW1ib2wgJiYgL15bYS16JF9dW2EteiRfMC05XSokL2kudGVzdChlbC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHZhciBrZXkgPSBpc1N5bWJvbCB8fCBpc0NsYXNzaWMgPyBlbCA6IHByZXR0eVByaW50KGVsLCBjb21iaW5lZE9wdGlvbnMpO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJldHR5UHJpbnQoaW5wdXRbZWxdLCBjb21iaW5lZE9wdGlvbnMsIHBhZCArIGNvbWJpbmVkT3B0aW9ucy5pbmRlbnQpO1xuICAgICAgICAgICAgaWYgKGNvbWJpbmVkT3B0aW9ucy50cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbWJpbmVkT3B0aW9ucy50cmFuc2Zvcm0oaW5wdXQsIGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG9rZW5zLmluZGVudCArIFN0cmluZyhrZXkpICsgJzogJyArIHZhbHVlICsgZW9sO1xuICAgICAgICB9KS5qb2luKCcnKSArIHRva2Vucy5wYWQgKyAnfSc7XG4gICAgICAgIHNlZW4ucG9wKCk7XG4gICAgICAgIHJldHVybiBleHBhbmRXaGl0ZVNwYWNlKHJldCk7XG4gICAgfVxuICAgIGlucHV0ID0gU3RyaW5nKGlucHV0KS5yZXBsYWNlKC9bXFxyXFxuXS9nLCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCA9PT0gJ1xcbicgPyAnXFxcXG4nIDogJ1xcXFxyJzsgfSk7XG4gICAgaWYgKCFjb21iaW5lZE9wdGlvbnMuc2luZ2xlUXVvdGVzKSB7XG4gICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpO1xuICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBpbnB1dCArIFwiXFxcIlwiO1xuICAgIH1cbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL1xcXFw/Jy9nLCAnXFxcXFxcJycpO1xuICAgIHJldHVybiBcIidcIiArIGlucHV0ICsgXCInXCI7XG59XG5leHBvcnRzLnByZXR0eVByaW50ID0gcHJldHR5UHJpbnQ7XG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///942\n")}}]);