/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else { var a = factory(); for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; } })(self, function() { return /******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./js/menu.js": /*!********************!*\ !*** ./js/menu.js ***! \********************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Menu\": function() { return /* binding */ Menu; }\n/* harmony export */ });\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\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.\"); }\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); }\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\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, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar TRANSITION_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'];\n// const TRANSITION_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition']\nvar DELTA = 5;\nvar Menu = /*#__PURE__*/function () {\n function Menu(el) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _PS = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n _classCallCheck(this, Menu);\n this._el = el;\n this._horizontal = config.orientation === 'horizontal';\n this._animate = config.animate !== false;\n this._accordion = config.accordion !== false;\n this._showDropdownOnHover = Boolean(config.showDropdownOnHover);\n this._closeChildren = Boolean(config.closeChildren);\n this._rtl = document.documentElement.getAttribute('dir') === 'rtl' || document.body.getAttribute('dir') === 'rtl';\n this._onOpen = config.onOpen || function () {};\n this._onOpened = config.onOpened || function () {};\n this._onClose = config.onClose || function () {};\n this._onClosed = config.onClosed || function () {};\n this._psScroll = null;\n this._topParent = null;\n this._menuBgClass = null;\n el.classList.add('menu');\n el.classList[this._animate ? 'remove' : 'add']('menu-no-animation');\n if (!this._horizontal) {\n el.classList.add('menu-vertical');\n el.classList.remove('menu-horizontal');\n var PerfectScrollbarLib = _PS || window.PerfectScrollbar;\n if (PerfectScrollbarLib) {\n this._scrollbar = new PerfectScrollbarLib(el.querySelector('.menu-inner'), {\n suppressScrollX: true,\n wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas')\n });\n window.Helpers.menuPsScroll = this._scrollbar;\n } else {\n el.querySelector('.menu-inner').classList.add('overflow-auto');\n }\n } else {\n el.classList.add('menu-horizontal');\n el.classList.remove('menu-vertical');\n this._inner = el.querySelector('.menu-inner');\n var container = this._inner.parentNode;\n this._prevBtn = el.querySelector('.menu-horizontal-prev');\n if (!this._prevBtn) {\n this._prevBtn = document.createElement('a');\n this._prevBtn.href = '#';\n this._prevBtn.className = 'menu-horizontal-prev';\n container.appendChild(this._prevBtn);\n }\n this._wrapper = el.querySelector('.menu-horizontal-wrapper');\n if (!this._wrapper) {\n this._wrapper = document.createElement('div');\n this._wrapper.className = 'menu-horizontal-wrapper';\n this._wrapper.appendChild(this._inner);\n container.appendChild(this._wrapper);\n }\n this._nextBtn = el.querySelector('.menu-horizontal-next');\n if (!this._nextBtn) {\n this._nextBtn = document.createElement('a');\n this._nextBtn.href = '#';\n this._nextBtn.className = 'menu-horizontal-next';\n container.appendChild(this._nextBtn);\n }\n this._innerPosition = 0;\n this.update();\n }\n\n // Add data attribute for bg color class of menu\n var menuClassList = el.classList;\n for (var i = 0; i < menuClassList.length; i++) {\n if (menuClassList[i].startsWith('bg-')) {\n this._menuBgClass = menuClassList[i];\n }\n }\n el.setAttribute('data-bg-class', this._menuBgClass);\n\n // Switch to vertical menu on small screen for horizontal menu layout on page load\n if (this._horizontal && window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) this.switchMenu('vertical');\n this._bindEvents();\n\n // Link menu instance to element\n el.menuInstance = this;\n }\n _createClass(Menu, [{\n key: \"_bindEvents\",\n value: function _bindEvents() {\n var _this = this;\n // Click Event\n this._evntElClick = function (e) {\n // Find top parent element\n if (e.target.closest('ul') && e.target.closest('ul').classList.contains('menu-inner')) {\n var menuItem = Menu._findParent(e.target, 'menu-item', false);\n\n // eslint-disable-next-line prefer-destructuring\n if (menuItem) _this._topParent = menuItem.childNodes[0];\n }\n var toggleLink = e.target.classList.contains('menu-toggle') ? e.target : Menu._findParent(e.target, 'menu-toggle', false);\n if (toggleLink) {\n e.preventDefault();\n if (toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(toggleLink);\n }\n }\n };\n if (!this._showDropdownOnHover && this._horizontal || !this._horizontal || window.Helpers.isMobileDevice) this._el.addEventListener('click', this._evntElClick);\n this._evntWindowResize = function () {\n _this.update();\n if (_this._lastWidth !== window.innerWidth) {\n _this._lastWidth = window.innerWidth;\n _this.update();\n }\n var horizontalMenuTemplate = document.querySelector(\"[data-template^='horizontal-menu']\");\n if (!_this._horizontal && !horizontalMenuTemplate) _this.manageScroll();\n };\n window.addEventListener('resize', this._evntWindowResize);\n if (this._horizontal) {\n this._evntPrevBtnClick = function (e) {\n e.preventDefault();\n if (_this._prevBtn.classList.contains('disabled')) return;\n _this._slide('prev');\n };\n this._prevBtn.addEventListener('click', this._evntPrevBtnClick);\n this._evntNextBtnClick = function (e) {\n e.preventDefault();\n if (_this._nextBtn.classList.contains('disabled')) return;\n _this._slide('next');\n };\n this._nextBtn.addEventListener('click', this._evntNextBtnClick);\n this._evntBodyClick = function (e) {\n if (!_this._inner.contains(e.target) && _this._el.querySelectorAll('.menu-inner > .menu-item.open').length) _this.closeAll();\n };\n document.body.addEventListener('click', this._evntBodyClick);\n if (this._showDropdownOnHover) {\n /** ***********************************************\n * Horizontal Menu Mouse Over Event\n * ? e.target !== e.currentTarget condition to disable mouseover event on whole menu navbar\n * ? !e.target.parentNode.classList.contains('open') to disable mouseover events on icon, text and dropdown arrow\n */\n this._evntElMouseOver = function (e) {\n if (e.target !== e.currentTarget && !e.target.parentNode.classList.contains('open')) {\n var toggleLink = e.target.classList.contains('menu-toggle') ? e.target : null;\n if (toggleLink) {\n e.preventDefault();\n if (toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(toggleLink);\n }\n }\n }\n e.stopPropagation();\n };\n if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) {\n this._el.addEventListener('mouseover', this._evntElMouseOver);\n }\n\n /** ***********************************************\n * Horizontal Menu Mouse Out Event\n * ? e.target !== e.currentTarget condition to disable mouseout event on whole menu navbar\n * ? mouseOutEl.parentNode.classList.contains('open') to check if the mouseout element has open class or not\n * ? !mouseOutEl.classList.contains('menu-toggle') to check if mouseout was from single menu item and not from the one which has submenu\n * ? !mouseOverEl.parentNode.classList.contains('menu-link') to disable mouseout event for icon, text and dropdown arrow\n */\n this._evntElMouseOut = function (e) {\n var mainEl = e.currentTarget;\n var mouseOutEl = e.target;\n var mouseOverEl = e.toElement || e.relatedTarget;\n\n // Find absolute parent of any menu item from which mouseout event triggered\n if (mouseOutEl.closest('ul') && mouseOutEl.closest('ul').classList.contains('menu-inner')) {\n _this._topParent = mouseOutEl;\n }\n if (mouseOutEl !== mainEl && (mouseOutEl.parentNode.classList.contains('open') || !mouseOutEl.classList.contains('menu-toggle')) && mouseOverEl && mouseOverEl.parentNode && !mouseOverEl.parentNode.classList.contains('menu-link')) {\n // When mouse goes totally out of menu items, check mouse over element to confirm it's not the child of menu, once confirmed close the menu\n if (_this._topParent && !Menu.childOf(mouseOverEl, _this._topParent.parentNode)) {\n var _toggleLink = _this._topParent.classList.contains('menu-toggle') ? _this._topParent : null;\n if (_toggleLink) {\n e.preventDefault();\n if (_toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(_toggleLink);\n _this._topParent = null;\n }\n }\n }\n\n // When mouse enter the sub menu, check if it's child of the initially mouse overed menu item(Actual Parent),\n // if it's the parent do not close the sub menu else close the sub menu\n if (Menu.childOf(mouseOverEl, mouseOutEl.parentNode)) {\n return;\n }\n var toggleLink = mouseOutEl.classList.contains('menu-toggle') ? mouseOutEl : null;\n if (toggleLink) {\n e.preventDefault();\n if (toggleLink.getAttribute('data-hover') !== 'true') {\n _this.toggle(toggleLink);\n }\n }\n }\n e.stopPropagation();\n };\n if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) {\n this._el.addEventListener('mouseout', this._evntElMouseOut);\n }\n }\n }\n }\n }, {\n key: \"_unbindEvents\",\n value: function _unbindEvents() {\n if (this._evntElClick) {\n this._el.removeEventListener('click', this._evntElClick);\n this._evntElClick = null;\n }\n if (this._evntElMouseOver) {\n this._el.removeEventListener('mouseover', this._evntElMouseOver);\n this._evntElMouseOver = null;\n }\n if (this._evntElMouseOut) {\n this._el.removeEventListener('mouseout', this._evntElMouseOut);\n this._evntElMouseOut = null;\n }\n if (this._evntWindowResize) {\n window.removeEventListener('resize', this._evntWindowResize);\n this._evntWindowResize = null;\n }\n if (this._evntBodyClick) {\n document.body.removeEventListener('click', this._evntBodyClick);\n this._evntBodyClick = null;\n }\n if (this._evntInnerMousemove) {\n this._inner.removeEventListener('mousemove', this._evntInnerMousemove);\n this._evntInnerMousemove = null;\n }\n if (this._evntInnerMouseleave) {\n this._inner.removeEventListener('mouseleave', this._evntInnerMouseleave);\n this._evntInnerMouseleave = null;\n }\n }\n }, {\n key: \"open\",\n value: function open(el) {\n var _this2 = this;\n var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\n var item = this._findUnopenedParent(Menu._getItem(el, true), closeChildren);\n if (!item) return;\n var toggleLink = Menu._getLink(item, true);\n Menu._promisify(this._onOpen, this, item, toggleLink, Menu._findMenu(item)).then(function () {\n if (!_this2._horizontal || !Menu._isRoot(item)) {\n if (_this2._animate && !_this2._horizontal) {\n window.requestAnimationFrame(function () {\n return _this2._toggleAnimation(true, item, false);\n });\n if (_this2._accordion) _this2._closeOther(item, closeChildren);\n } else if (_this2._animate) {\n _this2._toggleDropdown(true, item, closeChildren);\n // eslint-disable-next-line no-unused-expressions\n _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\n } else {\n item.classList.add('open');\n // eslint-disable-next-line no-unused-expressions\n _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\n if (_this2._accordion) _this2._closeOther(item, closeChildren);\n }\n } else {\n _this2._toggleDropdown(true, item, closeChildren);\n // eslint-disable-next-line no-unused-expressions\n _this2._onOpened && _this2._onOpened(_this2, item, toggleLink, Menu._findMenu(item));\n }\n }).catch(function () {});\n }\n }, {\n key: \"close\",\n value: function close(el) {\n var _this3 = this;\n var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\n var _autoClose = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var item = Menu._getItem(el, true);\n var toggleLink = Menu._getLink(el, true);\n if (!item.classList.contains('open') || item.classList.contains('disabled')) return;\n Menu._promisify(this._onClose, this, item, toggleLink, Menu._findMenu(item), _autoClose).then(function () {\n if (!_this3._horizontal || !Menu._isRoot(item)) {\n if (_this3._animate && !_this3._horizontal) {\n window.requestAnimationFrame(function () {\n return _this3._toggleAnimation(false, item, closeChildren);\n });\n } else {\n item.classList.remove('open');\n if (closeChildren) {\n var opened = item.querySelectorAll('.menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\n }\n\n // eslint-disable-next-line no-unused-expressions\n _this3._onClosed && _this3._onClosed(_this3, item, toggleLink, Menu._findMenu(item));\n }\n } else {\n _this3._toggleDropdown(false, item, closeChildren);\n // eslint-disable-next-line no-unused-expressions\n _this3._onClosed && _this3._onClosed(_this3, item, toggleLink, Menu._findMenu(item));\n }\n }).catch(function () {});\n }\n }, {\n key: \"_closeOther\",\n value: function _closeOther(item, closeChildren) {\n var opened = Menu._findChild(item.parentNode, ['menu-item', 'open']);\n for (var i = 0, l = opened.length; i < l; i++) {\n if (opened[i] !== item) this.close(opened[i], closeChildren);\n }\n }\n }, {\n key: \"toggle\",\n value: function toggle(el) {\n var closeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this._closeChildren;\n var item = Menu._getItem(el, true);\n // const toggleLink = Menu._getLink(el, true)\n\n if (item.classList.contains('open')) this.close(item, closeChildren);else this.open(item, closeChildren);\n }\n }, {\n key: \"_toggleDropdown\",\n value: function _toggleDropdown(show, item, closeChildren) {\n var menu = Menu._findMenu(item);\n var actualItem = item;\n var subMenuItem = false;\n if (show) {\n if (Menu._findParent(item, 'menu-sub', false)) {\n subMenuItem = true;\n item = this._topParent ? this._topParent.parentNode : item;\n }\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var position = this._innerPosition;\n var itemOffset = this._getItemOffset(item);\n var itemWidth = Math.round(item.getBoundingClientRect().width);\n if (itemOffset - DELTA <= -1 * position) {\n this._innerPosition = -1 * itemOffset;\n } else if (itemOffset + position + itemWidth + DELTA >= wrapperWidth) {\n if (itemWidth > wrapperWidth) {\n this._innerPosition = -1 * itemOffset;\n } else {\n this._innerPosition = -1 * (itemOffset + itemWidth - wrapperWidth);\n }\n }\n actualItem.classList.add('open');\n var menuWidth = Math.round(menu.getBoundingClientRect().width);\n if (subMenuItem) {\n if (itemOffset + this._innerPosition + menuWidth * 2 > wrapperWidth && menuWidth < wrapperWidth && menuWidth >= itemWidth) {\n menu.style.left = [this._rtl ? '100%' : '-100%'];\n }\n } else if (itemOffset + this._innerPosition + menuWidth > wrapperWidth && menuWidth < wrapperWidth && menuWidth > itemWidth) {\n menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = \"-\".concat(menuWidth - itemWidth, \"px\");\n }\n this._closeOther(actualItem, closeChildren);\n this._updateSlider();\n } else {\n var toggle = Menu._findChild(item, ['menu-toggle']);\n\n // eslint-disable-next-line no-unused-expressions\n toggle.length && toggle[0].removeAttribute('data-hover', 'true');\n item.classList.remove('open');\n menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = null;\n if (closeChildren) {\n var opened = menu.querySelectorAll('.menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\n }\n }\n }\n }, {\n key: \"_slide\",\n value: function _slide(direction) {\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var innerWidth = this._innerWidth;\n var newPosition;\n if (direction === 'next') {\n newPosition = this._getSlideNextPos();\n if (innerWidth + newPosition < wrapperWidth) {\n newPosition = wrapperWidth - innerWidth;\n }\n } else {\n newPosition = this._getSlidePrevPos();\n if (newPosition > 0) newPosition = 0;\n }\n this._innerPosition = newPosition;\n this.update();\n }\n }, {\n key: \"_getSlideNextPos\",\n value: function _getSlideNextPos() {\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var position = this._innerPosition;\n var curItem = this._inner.childNodes[0];\n var left = 0;\n while (curItem) {\n if (curItem.tagName) {\n var curItemWidth = Math.round(curItem.getBoundingClientRect().width);\n if (left + position - DELTA <= wrapperWidth && left + position + curItemWidth + DELTA >= wrapperWidth) {\n if (curItemWidth > wrapperWidth && left === -1 * position) left += curItemWidth;\n break;\n }\n left += curItemWidth;\n }\n curItem = curItem.nextSibling;\n }\n return -1 * left;\n }\n }, {\n key: \"_getSlidePrevPos\",\n value: function _getSlidePrevPos() {\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var position = this._innerPosition;\n var curItem = this._inner.childNodes[0];\n var left = 0;\n while (curItem) {\n if (curItem.tagName) {\n var curItemWidth = Math.round(curItem.getBoundingClientRect().width);\n if (left - DELTA <= -1 * position && left + curItemWidth + DELTA >= -1 * position) {\n if (curItemWidth <= wrapperWidth) left = left + curItemWidth - wrapperWidth;\n break;\n }\n left += curItemWidth;\n }\n curItem = curItem.nextSibling;\n }\n return -1 * left;\n }\n }, {\n key: \"_findUnopenedParent\",\n value: function _findUnopenedParent(item, closeChildren) {\n var tree = [];\n var parentItem = null;\n while (item) {\n if (item.classList.contains('disabled')) {\n parentItem = null;\n tree = [];\n } else {\n if (!item.classList.contains('open')) parentItem = item;\n tree.push(item);\n }\n item = Menu._findParent(item, 'menu-item', false);\n }\n if (!parentItem) return null;\n if (tree.length === 1) return parentItem;\n tree = tree.slice(0, tree.indexOf(parentItem));\n for (var i = 0, l = tree.length; i < l; i++) {\n tree[i].classList.add('open');\n if (this._accordion) {\n var openedItems = Menu._findChild(tree[i].parentNode, ['menu-item', 'open']);\n for (var j = 0, k = openedItems.length; j < k; j++) {\n if (openedItems[j] !== tree[i]) {\n openedItems[j].classList.remove('open');\n if (closeChildren) {\n var openedChildren = openedItems[j].querySelectorAll('.menu-item.open');\n for (var x = 0, z = openedChildren.length; x < z; x++) {\n openedChildren[x].classList.remove('open');\n }\n }\n }\n }\n }\n }\n return parentItem;\n }\n }, {\n key: \"_toggleAnimation\",\n value: function _toggleAnimation(open, item, closeChildren) {\n var _this4 = this;\n var toggleLink = Menu._getLink(item, true);\n var menu = Menu._findMenu(item);\n Menu._unbindAnimationEndEvent(item);\n var linkHeight = Math.round(toggleLink.getBoundingClientRect().height);\n item.style.overflow = 'hidden';\n var clearItemStyle = function clearItemStyle() {\n item.classList.remove('menu-item-animating');\n item.classList.remove('menu-item-closing');\n item.style.overflow = null;\n item.style.height = null;\n if (!_this4._horizontal) _this4.update();\n };\n if (open) {\n item.style.height = \"\".concat(linkHeight, \"px\");\n item.classList.add('menu-item-animating');\n item.classList.add('open');\n Menu._bindAnimationEndEvent(item, function () {\n clearItemStyle();\n _this4._onOpened(_this4, item, toggleLink, menu);\n });\n setTimeout(function () {\n item.style.height = \"\".concat(linkHeight + Math.round(menu.getBoundingClientRect().height), \"px\");\n }, 50);\n } else {\n item.style.height = \"\".concat(linkHeight + Math.round(menu.getBoundingClientRect().height), \"px\");\n item.classList.add('menu-item-animating');\n item.classList.add('menu-item-closing');\n Menu._bindAnimationEndEvent(item, function () {\n item.classList.remove('open');\n clearItemStyle();\n if (closeChildren) {\n var opened = item.querySelectorAll('.menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open');\n }\n _this4._onClosed(_this4, item, toggleLink, menu);\n });\n setTimeout(function () {\n item.style.height = \"\".concat(linkHeight, \"px\");\n }, 50);\n }\n }\n }, {\n key: \"_getItemOffset\",\n value: function _getItemOffset(item) {\n var curItem = this._inner.childNodes[0];\n var left = 0;\n while (curItem !== item) {\n if (curItem.tagName) {\n left += Math.round(curItem.getBoundingClientRect().width);\n }\n curItem = curItem.nextSibling;\n }\n return left;\n }\n }, {\n key: \"_updateSlider\",\n value: function _updateSlider() {\n var wrapperWidth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var innerWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var _wrapperWidth = wrapperWidth !== null ? wrapperWidth : Math.round(this._wrapper.getBoundingClientRect().width);\n var _innerWidth = innerWidth !== null ? innerWidth : this._innerWidth;\n var _position = position !== null ? position : this._innerPosition;\n if (_innerWidth < _wrapperWidth || window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) {\n this._prevBtn.classList.add('d-none');\n this._nextBtn.classList.add('d-none');\n } else {\n this._prevBtn.classList.remove('d-none');\n this._nextBtn.classList.remove('d-none');\n }\n if (_innerWidth > _wrapperWidth && window.innerWidth > window.Helpers.LAYOUT_BREAKPOINT) {\n if (_position === 0) this._prevBtn.classList.add('disabled');else this._prevBtn.classList.remove('disabled');\n if (_innerWidth + _position <= _wrapperWidth) this._nextBtn.classList.add('disabled');else this._nextBtn.classList.remove('disabled');\n }\n }\n }, {\n key: \"_innerWidth\",\n get: function get() {\n var items = this._inner.childNodes;\n var width = 0;\n for (var i = 0, l = items.length; i < l; i++) {\n if (items[i].tagName) {\n width += Math.round(items[i].getBoundingClientRect().width);\n }\n }\n return width;\n }\n }, {\n key: \"_innerPosition\",\n get: function get() {\n return parseInt(this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] || '0px', 10);\n },\n set: function set(value) {\n this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] = \"\".concat(value, \"px\");\n return value;\n }\n }, {\n key: \"closeAll\",\n value: function closeAll() {\n var closeChildren = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._closeChildren;\n var opened = this._el.querySelectorAll('.menu-inner > .menu-item.open');\n for (var i = 0, l = opened.length; i < l; i++) this.close(opened[i], closeChildren);\n }\n }, {\n key: \"update\",\n value: function update() {\n if (!this._horizontal) {\n if (this._scrollbar) {\n this._scrollbar.update();\n }\n } else {\n this.closeAll();\n var wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width);\n var innerWidth = this._innerWidth;\n var position = this._innerPosition;\n if (wrapperWidth - position > innerWidth) {\n position = wrapperWidth - innerWidth;\n if (position > 0) position = 0;\n this._innerPosition = position;\n }\n this._updateSlider(wrapperWidth, innerWidth, position);\n }\n }\n }, {\n key: \"manageScroll\",\n value: function manageScroll() {\n var _window = window,\n PerfectScrollbar = _window.PerfectScrollbar;\n var menuInner = document.querySelector('.menu-inner');\n if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) {\n if (this._scrollbar !== null) {\n // window.Helpers.menuPsScroll.destroy()\n this._scrollbar.destroy();\n this._scrollbar = null;\n }\n menuInner.classList.add('overflow-auto');\n } else {\n if (this._scrollbar === null) {\n var menuScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), {\n suppressScrollX: true,\n wheelPropagation: false\n });\n // window.Helpers.menuPsScroll = menuScroll\n this._scrollbar = menuScroll;\n }\n menuInner.classList.remove('overflow-auto');\n }\n }\n }, {\n key: \"switchMenu\",\n value: function switchMenu(menu) {\n // Unbind Events\n this._unbindEvents();\n\n // const html = document.documentElement\n var navbar = document.querySelector('nav.layout-navbar');\n var navbarCollapse = document.querySelector('#navbar-collapse');\n /* const fullNavbar = document.querySelector('.layout-navbar-full')\n const contentNavbar = document.querySelector('.layout-content-navbar')\n const contentWrapper = document.querySelector('.content-wrapper') */\n var asideMenuWrapper = document.querySelector('#layout-menu div');\n var asideMenu = document.querySelector('#layout-menu');\n var horzMenuClasses = ['layout-menu-horizontal', 'menu', 'menu-horizontal', 'container-fluid', 'flex-grow-0'];\n var vertMenuClasses = ['layout-menu', 'menu', 'menu-vertical'];\n var horzMenuWrapper = document.querySelector('.menu-horizontal-wrapper');\n var menuInner = document.querySelector('.menu-inner');\n var brand = document.querySelector('.app-brand');\n var menuToggler = document.querySelector('.layout-menu-toggle');\n var activeMenuItems = document.querySelectorAll('.menu-inner .active');\n /* const layoutPage = document.querySelector('.layout-page')\n const layoutContainer = document.querySelector('.layout-container')\n const content = document.querySelector('.container-fluid') */\n\n // const { PerfectScrollbar } = window\n\n if (menu === 'vertical') {\n var _asideMenu$classList, _asideMenu$classList2;\n this._horizontal = false;\n asideMenuWrapper.insertBefore(brand, horzMenuWrapper);\n asideMenuWrapper.insertBefore(menuInner, horzMenuWrapper);\n asideMenuWrapper.classList.add('flex-column', 'p-0');\n (_asideMenu$classList = asideMenu.classList).remove.apply(_asideMenu$classList, _toConsumableArray(asideMenu.classList));\n (_asideMenu$classList2 = asideMenu.classList).add.apply(_asideMenu$classList2, vertMenuClasses.concat([this._menuBgClass]));\n brand.classList.remove('d-none', 'd-lg-flex');\n menuToggler.classList.remove('d-none');\n // if (PerfectScrollbar !== undefined) {\n // this._psScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), {\n // suppressScrollX: true,\n // wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas')\n // })\n // }\n\n menuInner.classList.add('overflow-auto');\n\n // Add open class to active items\n for (var i = 0; i < activeMenuItems.length - 1; ++i) {\n activeMenuItems[i].classList.add('open');\n }\n } else {\n var _asideMenu$classList3, _asideMenu$classList4;\n this._horizontal = true;\n navbar.children[0].insertBefore(brand, navbarCollapse);\n brand.classList.add('d-none', 'd-lg-flex');\n horzMenuWrapper.appendChild(menuInner);\n asideMenuWrapper.classList.remove('flex-column', 'p-0');\n (_asideMenu$classList3 = asideMenu.classList).remove.apply(_asideMenu$classList3, _toConsumableArray(asideMenu.classList));\n (_asideMenu$classList4 = asideMenu.classList).add.apply(_asideMenu$classList4, horzMenuClasses.concat([this._menuBgClass]));\n menuToggler.classList.add('d-none');\n menuInner.classList.remove('overflow-auto');\n\n // if (PerfectScrollbar !== undefined && this._psScroll !== null) {\n // this._psScroll.destroy()\n // this._psScroll = null\n // }\n\n // Remove open class from active items\n for (var _i = 0; _i < activeMenuItems.length; ++_i) {\n activeMenuItems[_i].classList.remove('open');\n }\n }\n this._bindEvents();\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n if (!this._el) return;\n this._unbindEvents();\n var items = this._el.querySelectorAll('.menu-item');\n for (var i = 0, l = items.length; i < l; i++) {\n Menu._unbindAnimationEndEvent(items[i]);\n items[i].classList.remove('menu-item-animating');\n items[i].classList.remove('open');\n items[i].style.overflow = null;\n items[i].style.height = null;\n }\n var menus = this._el.querySelectorAll('.menu-menu');\n for (var i2 = 0, l2 = menus.length; i2 < l2; i2++) {\n menus[i2].style.marginRight = null;\n menus[i2].style.marginLeft = null;\n }\n this._el.classList.remove('menu-no-animation');\n if (this._wrapper) {\n this._prevBtn.parentNode.removeChild(this._prevBtn);\n this._nextBtn.parentNode.removeChild(this._nextBtn);\n this._wrapper.parentNode.insertBefore(this._inner, this._wrapper);\n this._wrapper.parentNode.removeChild(this._wrapper);\n this._inner.style.marginLeft = null;\n this._inner.style.marginRight = null;\n }\n this._el.menuInstance = null;\n delete this._el.menuInstance;\n this._el = null;\n this._horizontal = null;\n this._animate = null;\n this._accordion = null;\n this._showDropdownOnHover = null;\n this._closeChildren = null;\n this._rtl = null;\n this._onOpen = null;\n this._onOpened = null;\n this._onClose = null;\n this._onClosed = null;\n if (this._scrollbar) {\n this._scrollbar.destroy();\n this._scrollbar = null;\n }\n this._inner = null;\n this._prevBtn = null;\n this._wrapper = null;\n this._nextBtn = null;\n }\n }], [{\n key: \"childOf\",\n value: function childOf( /* child node */c, /* parent node */p) {\n // returns boolean\n if (c.parentNode) {\n while ((c = c.parentNode) && c !== p);\n return !!c;\n }\n return false;\n }\n }, {\n key: \"_isRoot\",\n value: function _isRoot(item) {\n return !Menu._findParent(item, 'menu-item', false);\n }\n }, {\n key: \"_findParent\",\n value: function _findParent(el, cls) {\n var throwError = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (el.tagName.toUpperCase() === 'BODY') return null;\n el = el.parentNode;\n while (el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) {\n el = el.parentNode;\n }\n el = el.tagName.toUpperCase() !== 'BODY' ? el : null;\n if (!el && throwError) throw new Error(\"Cannot find `.\".concat(cls, \"` parent element\"));\n return el;\n }\n }, {\n key: \"_findChild\",\n value: function _findChild(el, cls) {\n var items = el.childNodes;\n var found = [];\n for (var i = 0, l = items.length; i < l; i++) {\n if (items[i].classList) {\n var passed = 0;\n for (var j = 0; j < cls.length; j++) {\n if (items[i].classList.contains(cls[j])) passed += 1;\n }\n if (cls.length === passed) found.push(items[i]);\n }\n }\n return found;\n }\n }, {\n key: \"_findMenu\",\n value: function _findMenu(item) {\n var curEl = item.childNodes[0];\n var menu = null;\n while (curEl && !menu) {\n if (curEl.classList && curEl.classList.contains('menu-sub')) menu = curEl;\n curEl = curEl.nextSibling;\n }\n if (!menu) throw new Error('Cannot find `.menu-sub` element for the current `.menu-toggle`');\n return menu;\n }\n\n // Has class\n }, {\n key: \"_hasClass\",\n value: function _hasClass(cls) {\n var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.Helpers.ROOT_EL;\n var result = false;\n cls.split(' ').forEach(function (c) {\n if (el.classList.contains(c)) result = true;\n });\n return result;\n }\n }, {\n key: \"_getItem\",\n value: function _getItem(el, toggle) {\n var item = null;\n var selector = toggle ? 'menu-toggle' : 'menu-link';\n if (el.classList.contains('menu-item')) {\n if (Menu._findChild(el, [selector]).length) item = el;\n } else if (el.classList.contains(selector)) {\n item = el.parentNode.classList.contains('menu-item') ? el.parentNode : null;\n }\n if (!item) {\n throw new Error(\"\".concat(toggle ? 'Toggable ' : '', \"`.menu-item` element not found.\"));\n }\n return item;\n }\n }, {\n key: \"_getLink\",\n value: function _getLink(el, toggle) {\n var found = [];\n var selector = toggle ? 'menu-toggle' : 'menu-link';\n if (el.classList.contains(selector)) found = [el];else if (el.classList.contains('menu-item')) found = Menu._findChild(el, [selector]);\n if (!found.length) throw new Error(\"`\".concat(selector, \"` element not found.\"));\n return found[0];\n }\n }, {\n key: \"_bindAnimationEndEvent\",\n value: function _bindAnimationEndEvent(el, handler) {\n var cb = function cb(e) {\n if (e.target !== el) return;\n Menu._unbindAnimationEndEvent(el);\n handler(e);\n };\n var duration = window.getComputedStyle(el).transitionDuration;\n duration = parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000);\n el._menuAnimationEndEventCb = cb;\n TRANSITION_EVENTS.forEach(function (ev) {\n return el.addEventListener(ev, el._menuAnimationEndEventCb, false);\n });\n el._menuAnimationEndEventTimeout = setTimeout(function () {\n cb({\n target: el\n });\n }, duration + 50);\n }\n }, {\n key: \"_promisify\",\n value: function _promisify(fn) {\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 var result = fn.apply(void 0, args);\n if (result instanceof Promise) {\n return result;\n }\n if (result === false) {\n return Promise.reject();\n }\n return Promise.resolve();\n }\n }, {\n key: \"_unbindAnimationEndEvent\",\n value: function _unbindAnimationEndEvent(el) {\n var cb = el._menuAnimationEndEventCb;\n if (el._menuAnimationEndEventTimeout) {\n clearTimeout(el._menuAnimationEndEventTimeout);\n el._menuAnimationEndEventTimeout = null;\n }\n if (!cb) return;\n TRANSITION_EVENTS.forEach(function (ev) {\n return el.removeEventListener(ev, cb, false);\n });\n el._menuAnimationEndEventCb = null;\n }\n }, {\n key: \"setDisabled\",\n value: function setDisabled(el, disabled) {\n Menu._getItem(el, false).classList[disabled ? 'add' : 'remove']('disabled');\n }\n }, {\n key: \"isActive\",\n value: function isActive(el) {\n return Menu._getItem(el, false).classList.contains('active');\n }\n }, {\n key: \"isOpened\",\n value: function isOpened(el) {\n return Menu._getItem(el, false).classList.contains('open');\n }\n }, {\n key: \"isDisabled\",\n value: function isDisabled(el) {\n return Menu._getItem(el, false).classList.contains('disabled');\n }\n }]);\n return Menu;\n}();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFLEtBQUssQ0FBQztNQUFBLEVBQUM7TUFDdEVwTyxFQUFFLENBQUN5Tyx3QkFBd0IsR0FBRyxJQUFJO0lBQ3BDO0VBQUM7SUFBQW5LLEdBQUE7SUFBQUMsS0FBQSxFQVFELFNBQUE4SyxZQUFtQnJQLEVBQUUsRUFBRXNQLFFBQVEsRUFBRTtNQUMvQnZQLElBQUksQ0FBQ3FILFFBQVEsQ0FBQ3BILEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQ21DLFNBQVMsQ0FBQ21OLFFBQVEsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzdFO0VBQUM7SUFBQWhMLEdBQUE7SUFBQUMsS0FBQSxFQUVELFNBQUFnTCxTQUFnQnZQLEVBQUUsRUFBRTtNQUNsQixPQUFPRCxJQUFJLENBQUNxSCxRQUFRLENBQUNwSCxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUNtQyxTQUFTLENBQUMwQyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQzlEO0VBQUM7SUFBQVAsR0FBQTtJQUFBQyxLQUFBLEVBRUQsU0FBQWlMLFNBQWdCeFAsRUFBRSxFQUFFO01BQ2xCLE9BQU9ELElBQUksQ0FBQ3FILFFBQVEsQ0FBQ3BILEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQ21DLFNBQVMsQ0FBQzBDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDNUQ7RUFBQztJQUFBUCxHQUFBO0lBQUFDLEtBQUEsRUFFRCxTQUFBa0wsV0FBa0J6UCxFQUFFLEVBQUU7TUFDcEIsT0FBT0QsSUFBSSxDQUFDcUgsUUFBUSxDQUFDcEgsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDbUMsU0FBUyxDQUFDMEMsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNoRTtFQUFDO0VBQUEsT0FBQTlFLElBQUE7QUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL1Z1ZXh5Ly4vanMvbWVudS5qcz84NzdlIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFRSQU5TSVRJT05fRVZFTlRTID0gWyd0cmFuc2l0aW9uZW5kJywgJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAnb1RyYW5zaXRpb25FbmQnXVxuLy8gY29uc3QgVFJBTlNJVElPTl9QUk9QRVJUSUVTID0gWyd0cmFuc2l0aW9uJywgJ01velRyYW5zaXRpb24nLCAnd2Via2l0VHJhbnNpdGlvbicsICdXZWJraXRUcmFuc2l0aW9uJywgJ09UcmFuc2l0aW9uJ11cbmNvbnN0IERFTFRBID0gNVxuXG5jbGFzcyBNZW51IHtcbiAgY29uc3RydWN0b3IoZWwsIGNvbmZpZyA9IHt9LCBfUFMgPSBudWxsKSB7XG4gICAgdGhpcy5fZWwgPSBlbFxuICAgIHRoaXMuX2hvcml6b250YWwgPSBjb25maWcub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJ1xuICAgIHRoaXMuX2FuaW1hdGUgPSBjb25maWcuYW5pbWF0ZSAhPT0gZmFsc2VcbiAgICB0aGlzLl9hY2NvcmRpb24gPSBjb25maWcuYWNjb3JkaW9uICE9PSBmYWxzZVxuICAgIHRoaXMuX3Nob3dEcm9wZG93bk9uSG92ZXIgPSBCb29sZWFuKGNvbmZpZy5zaG93RHJvcGRvd25PbkhvdmVyKVxuICAgIHRoaXMuX2Nsb3NlQ2hpbGRyZW4gPSBCb29sZWFuKGNvbmZpZy5jbG9zZUNoaWxkcmVuKVxuICAgIHRoaXMuX3J0bCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RpcicpID09PSAncnRsJyB8fCBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGlyJykgPT09ICdydGwnXG5cbiAgICB0aGlzLl9vbk9wZW4gPSBjb25maWcub25PcGVuIHx8ICgoKSA9PiB7fSlcbiAgICB0aGlzLl9vbk9wZW5lZCA9IGNvbmZpZy5vbk9wZW5lZCB8fCAoKCkgPT4ge30pXG4gICAgdGhpcy5fb25DbG9zZSA9IGNvbmZpZy5vbkNsb3NlIHx8ICgoKSA9PiB7fSlcbiAgICB0aGlzLl9vbkNsb3NlZCA9IGNvbmZpZy5vbkNsb3NlZCB8fCAoKCkgPT4ge30pXG5cbiAgICB0aGlzLl9wc1Njcm9sbCA9IG51bGxcbiAgICB0aGlzLl90b3BQYXJlbnQgPSBudWxsXG4gICAgdGhpcy5fbWVudUJnQ2xhc3MgPSBudWxsXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdtZW51JylcbiAgICBlbC5jbGFzc0xpc3RbdGhpcy5fYW5pbWF0ZSA/ICdyZW1vdmUnIDogJ2FkZCddKCdtZW51LW5vLWFuaW1hdGlvbicpXG5cbiAgICBpZiAoIXRoaXMuX2hvcml6b250YWwpIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ21lbnUtdmVydGljYWwnKVxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1ob3Jpem9udGFsJylcblxuICAgICAgY29uc3QgUGVyZmVjdFNjcm9sbGJhckxpYiA9IF9QUyB8fCB3aW5kb3cuUGVyZmVjdFNjcm9sbGJhclxuXG4gICAgICBpZiAoUGVyZmVjdFNjcm9sbGJhckxpYikge1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXIgPSBuZXcgUGVyZmVjdFNjcm9sbGJhckxpYihlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpLCB7XG4gICAgICAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLFxuICAgICAgICAgIHdoZWVsUHJvcGFnYXRpb246ICFNZW51Ll9oYXNDbGFzcygnbGF5b3V0LW1lbnUtZml4ZWQgbGF5b3V0LW1lbnUtZml4ZWQtb2ZmY2FudmFzJylcbiAgICAgICAgfSlcblxuICAgICAgICB3aW5kb3cuSGVscGVycy5tZW51UHNTY3JvbGwgPSB0aGlzLl9zY3JvbGxiYXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJykuY2xhc3NMaXN0LmFkZCgnb3ZlcmZsb3ctYXV0bycpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ21lbnUtaG9yaXpvbnRhbCcpXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdtZW51LXZlcnRpY2FsJylcblxuICAgICAgdGhpcy5faW5uZXIgPSBlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpXG4gICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9pbm5lci5wYXJlbnROb2RlXG5cbiAgICAgIHRoaXMuX3ByZXZCdG4gPSBlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1ob3Jpem9udGFsLXByZXYnKVxuICAgICAgaWYgKCF0aGlzLl9wcmV2QnRuKSB7XG4gICAgICAgIHRoaXMuX3ByZXZCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgICAgdGhpcy5fcHJldkJ0bi5ocmVmID0gJyMnXG4gICAgICAgIHRoaXMuX3ByZXZCdG4uY2xhc3NOYW1lID0gJ21lbnUtaG9yaXpvbnRhbC1wcmV2J1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcHJldkJ0bilcbiAgICAgIH1cblxuICAgICAgdGhpcy5fd3JhcHBlciA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWhvcml6b250YWwtd3JhcHBlcicpXG4gICAgICBpZiAoIXRoaXMuX3dyYXBwZXIpIHtcbiAgICAgICAgdGhpcy5fd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICAgIHRoaXMuX3dyYXBwZXIuY2xhc3NOYW1lID0gJ21lbnUtaG9yaXpvbnRhbC13cmFwcGVyJ1xuICAgICAgICB0aGlzLl93cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuX2lubmVyKVxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fd3JhcHBlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbmV4dEJ0biA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWhvcml6b250YWwtbmV4dCcpXG4gICAgICBpZiAoIXRoaXMuX25leHRCdG4pIHtcbiAgICAgICAgdGhpcy5fbmV4dEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgICB0aGlzLl9uZXh0QnRuLmhyZWYgPSAnIydcbiAgICAgICAgdGhpcy5fbmV4dEJ0bi5jbGFzc05hbWUgPSAnbWVudS1ob3Jpem9udGFsLW5leHQnXG4gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9uZXh0QnRuKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbm5lclBvc2l0aW9uID0gMFxuICAgICAgdGhpcy51cGRhdGUoKVxuICAgIH1cblxuICAgIC8vIEFkZCBkYXRhIGF0dHJpYnV0ZSBmb3IgYmcgY29sb3IgY2xhc3Mgb2YgbWVudVxuICAgIGNvbnN0IG1lbnVDbGFzc0xpc3QgPSBlbC5jbGFzc0xpc3RcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVudUNsYXNzTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG1lbnVDbGFzc0xpc3RbaV0uc3RhcnRzV2l0aCgnYmctJykpIHtcbiAgICAgICAgdGhpcy5fbWVudUJnQ2xhc3MgPSBtZW51Q2xhc3NMaXN0W2ldXG4gICAgICB9XG4gICAgfVxuICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1iZy1jbGFzcycsIHRoaXMuX21lbnVCZ0NsYXNzKVxuXG4gICAgLy8gU3dpdGNoIHRvIHZlcnRpY2FsIG1lbnUgb24gc21hbGwgc2NyZWVuIGZvciBob3Jpem9udGFsIG1lbnUgbGF5b3V0IG9uIHBhZ2UgbG9hZFxuICAgIGlmICh0aGlzLl9ob3Jpem9udGFsICYmIHdpbmRvdy5pbm5lcldpZHRoIDwgd2luZG93LkhlbHBlcnMuTEFZT1VUX0JSRUFLUE9JTlQpIHRoaXMuc3dpdGNoTWVudSgndmVydGljYWwnKVxuXG4gICAgdGhpcy5fYmluZEV2ZW50cygpXG5cbiAgICAvLyBMaW5rIG1lbnUgaW5zdGFuY2UgdG8gZWxlbWVudFxuICAgIGVsLm1lbnVJbnN0YW5jZSA9IHRoaXNcbiAgfVxuXG4gIF9iaW5kRXZlbnRzKCkge1xuICAgIC8vIENsaWNrIEV2ZW50XG4gICAgdGhpcy5fZXZudEVsQ2xpY2sgPSBlID0+IHtcbiAgICAgIC8vIEZpbmQgdG9wIHBhcmVudCBlbGVtZW50XG4gICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgndWwnKSAmJiBlLnRhcmdldC5jbG9zZXN0KCd1bCcpLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pbm5lcicpKSB7XG4gICAgICAgIGNvbnN0IG1lbnVJdGVtID0gTWVudS5fZmluZFBhcmVudChlLnRhcmdldCwgJ21lbnUtaXRlbScsIGZhbHNlKVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICBpZiAobWVudUl0ZW0pIHRoaXMuX3RvcFBhcmVudCA9IG1lbnVJdGVtLmNoaWxkTm9kZXNbMF1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9nZ2xlTGluayA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKVxuICAgICAgICA/IGUudGFyZ2V0XG4gICAgICAgIDogTWVudS5fZmluZFBhcmVudChlLnRhcmdldCwgJ21lbnUtdG9nZ2xlJywgZmFsc2UpXG5cbiAgICAgIGlmICh0b2dnbGVMaW5rKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgIGlmICh0b2dnbGVMaW5rLmdldEF0dHJpYnV0ZSgnZGF0YS1ob3ZlcicpICE9PSAndHJ1ZScpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZSh0b2dnbGVMaW5rKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgoIXRoaXMuX3Nob3dEcm9wZG93bk9uSG92ZXIgJiYgdGhpcy5faG9yaXpvbnRhbCkgfHwgIXRoaXMuX2hvcml6b250YWwgfHwgd2luZG93LkhlbHBlcnMuaXNNb2JpbGVEZXZpY2UpXG4gICAgICB0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2V2bnRFbENsaWNrKVxuXG4gICAgdGhpcy5fZXZudFdpbmRvd1Jlc2l6ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgIGlmICh0aGlzLl9sYXN0V2lkdGggIT09IHdpbmRvdy5pbm5lcldpZHRoKSB7XG4gICAgICAgIHRoaXMuX2xhc3RXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIHRoaXMudXBkYXRlKClcbiAgICAgIH1cblxuICAgICAgY29uc3QgaG9yaXpvbnRhbE1lbnVUZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS10ZW1wbGF0ZV49J2hvcml6b250YWwtbWVudSddXCIpXG4gICAgICBpZiAoIXRoaXMuX2hvcml6b250YWwgJiYgIWhvcml6b250YWxNZW51VGVtcGxhdGUpIHRoaXMubWFuYWdlU2Nyb2xsKClcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX2V2bnRXaW5kb3dSZXNpemUpXG5cbiAgICBpZiAodGhpcy5faG9yaXpvbnRhbCkge1xuICAgICAgdGhpcy5fZXZudFByZXZCdG5DbGljayA9IGUgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgaWYgKHRoaXMuX3ByZXZCdG4uY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSByZXR1cm5cbiAgICAgICAgdGhpcy5fc2xpZGUoJ3ByZXYnKVxuICAgICAgfVxuICAgICAgdGhpcy5fcHJldkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2V2bnRQcmV2QnRuQ2xpY2spXG5cbiAgICAgIHRoaXMuX2V2bnROZXh0QnRuQ2xpY2sgPSBlID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGlmICh0aGlzLl9uZXh0QnRuLmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkgcmV0dXJuXG4gICAgICAgIHRoaXMuX3NsaWRlKCduZXh0JylcbiAgICAgIH1cbiAgICAgIHRoaXMuX25leHRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9ldm50TmV4dEJ0bkNsaWNrKVxuXG4gICAgICB0aGlzLl9ldm50Qm9keUNsaWNrID0gZSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faW5uZXIuY29udGFpbnMoZS50YXJnZXQpICYmIHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWlubmVyID4gLm1lbnUtaXRlbS5vcGVuJykubGVuZ3RoKVxuICAgICAgICAgIHRoaXMuY2xvc2VBbGwoKVxuICAgICAgfVxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2V2bnRCb2R5Q2xpY2spXG5cbiAgICAgIGlmICh0aGlzLl9zaG93RHJvcGRvd25PbkhvdmVyKSB7XG4gICAgICAgIC8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAgICAgKiBIb3Jpem9udGFsIE1lbnUgTW91c2UgT3ZlciBFdmVudFxuICAgICAgICAgKiA/IGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQgY29uZGl0aW9uIHRvIGRpc2FibGUgbW91c2VvdmVyIGV2ZW50IG9uIHdob2xlIG1lbnUgbmF2YmFyXG4gICAgICAgICAqID8gIWUudGFyZ2V0LnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykgdG8gZGlzYWJsZSBtb3VzZW92ZXIgZXZlbnRzIG9uIGljb24sIHRleHQgYW5kIGRyb3Bkb3duIGFycm93XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9ldm50RWxNb3VzZU92ZXIgPSBlID0+IHtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCAmJiAhZS50YXJnZXQucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSkge1xuICAgICAgICAgICAgY29uc3QgdG9nZ2xlTGluayA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSA/IGUudGFyZ2V0IDogbnVsbFxuXG4gICAgICAgICAgICBpZiAodG9nZ2xlTGluaykge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICAgICAgICBpZiAodG9nZ2xlTGluay5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG92ZXInKSAhPT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGUodG9nZ2xlTGluaylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWwgJiYgd2luZG93LnNjcmVlbi53aWR0aCA+IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XG4gICAgICAgICAgdGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgdGhpcy5fZXZudEVsTW91c2VPdmVyKVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAqIEhvcml6b250YWwgTWVudSBNb3VzZSBPdXQgRXZlbnRcbiAgICAgICAgICogPyBlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0IGNvbmRpdGlvbiB0byBkaXNhYmxlIG1vdXNlb3V0IGV2ZW50IG9uIHdob2xlIG1lbnUgbmF2YmFyXG4gICAgICAgICAqID8gbW91c2VPdXRFbC5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpIHRvIGNoZWNrIGlmIHRoZSBtb3VzZW91dCBlbGVtZW50IGhhcyBvcGVuIGNsYXNzIG9yIG5vdFxuICAgICAgICAgKiA/ICFtb3VzZU91dEVsLmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSB0byBjaGVjayBpZiBtb3VzZW91dCB3YXMgZnJvbSBzaW5nbGUgbWVudSBpdGVtIGFuZCBub3QgZnJvbSB0aGUgb25lIHdoaWNoIGhhcyBzdWJtZW51XG4gICAgICAgICAqID8gIW1vdXNlT3ZlckVsLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LWxpbmsnKSB0byBkaXNhYmxlIG1vdXNlb3V0IGV2ZW50IGZvciBpY29uLCB0ZXh0IGFuZCBkcm9wZG93biBhcnJvd1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZXZudEVsTW91c2VPdXQgPSBlID0+IHtcbiAgICAgICAgICBjb25zdCBtYWluRWwgPSBlLmN1cnJlbnRUYXJnZXRcbiAgICAgICAgICBjb25zdCBtb3VzZU91dEVsID0gZS50YXJnZXRcbiAgICAgICAgICBjb25zdCBtb3VzZU92ZXJFbCA9IGUudG9FbGVtZW50IHx8IGUucmVsYXRlZFRhcmdldFxuXG4gICAgICAgICAgLy8gRmluZCBhYnNvbHV0ZSBwYXJlbnQgb2YgYW55IG1lbnUgaXRlbSBmcm9tIHdoaWNoIG1vdXNlb3V0IGV2ZW50IHRyaWdnZXJlZFxuICAgICAgICAgIGlmIChtb3VzZU91dEVsLmNsb3Nlc3QoJ3VsJykgJiYgbW91c2VPdXRFbC5jbG9zZXN0KCd1bCcpLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pbm5lcicpKSB7XG4gICAgICAgICAgICB0aGlzLl90b3BQYXJlbnQgPSBtb3VzZU91dEVsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbW91c2VPdXRFbCAhPT0gbWFpbkVsICYmXG4gICAgICAgICAgICAobW91c2VPdXRFbC5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpIHx8ICFtb3VzZU91dEVsLmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSkgJiZcbiAgICAgICAgICAgIG1vdXNlT3ZlckVsICYmXG4gICAgICAgICAgICBtb3VzZU92ZXJFbC5wYXJlbnROb2RlICYmXG4gICAgICAgICAgICAhbW91c2VPdmVyRWwucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtbGluaycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBXaGVuIG1vdXNlIGdvZXMgdG90YWxseSBvdXQgb2YgbWVudSBpdGVtcywgY2hlY2sgbW91c2Ugb3ZlciBlbGVtZW50IHRvIGNvbmZpcm0gaXQncyBub3QgdGhlIGNoaWxkIG9mIG1lbnUsIG9uY2UgY29uZmlybWVkIGNsb3NlIHRoZSBtZW51XG4gICAgICAgICAgICBpZiAodGhpcy5fdG9wUGFyZW50ICYmICFNZW51LmNoaWxkT2YobW91c2VPdmVyRWwsIHRoaXMuX3RvcFBhcmVudC5wYXJlbnROb2RlKSkge1xuICAgICAgICAgICAgICBjb25zdCB0b2dnbGVMaW5rID0gdGhpcy5fdG9wUGFyZW50LmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSA/IHRoaXMuX3RvcFBhcmVudCA6IG51bGxcblxuICAgICAgICAgICAgICBpZiAodG9nZ2xlTGluaykge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgICAgICAgICAgICAgaWYgKHRvZ2dsZUxpbmsuZ2V0QXR0cmlidXRlKCdkYXRhLWhvdmVyJykgIT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUodG9nZ2xlTGluaylcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3RvcFBhcmVudCA9IG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gV2hlbiBtb3VzZSBlbnRlciB0aGUgc3ViIG1lbnUsIGNoZWNrIGlmIGl0J3MgY2hpbGQgb2YgdGhlIGluaXRpYWxseSBtb3VzZSBvdmVyZWQgbWVudSBpdGVtKEFjdHVhbCBQYXJlbnQpLFxuICAgICAgICAgICAgLy8gaWYgaXQncyB0aGUgcGFyZW50IGRvIG5vdCBjbG9zZSB0aGUgc3ViIG1lbnUgZWxzZSBjbG9zZSB0aGUgc3ViIG1lbnVcbiAgICAgICAgICAgIGlmIChNZW51LmNoaWxkT2YobW91c2VPdmVyRWwsIG1vdXNlT3V0RWwucGFyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b2dnbGVMaW5rID0gbW91c2VPdXRFbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtdG9nZ2xlJykgPyBtb3VzZU91dEVsIDogbnVsbFxuXG4gICAgICAgICAgICBpZiAodG9nZ2xlTGluaykge1xuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgICAgICAgICAgICBpZiAodG9nZ2xlTGluay5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG92ZXInKSAhPT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGUodG9nZ2xlTGluaylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWwgJiYgd2luZG93LnNjcmVlbi53aWR0aCA+IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XG4gICAgICAgICAgdGhpcy5fZWwuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCB0aGlzLl9ldm50RWxNb3VzZU91dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGlsZE9mKC8qIGNoaWxkIG5vZGUgKi8gYywgLyogcGFyZW50IG5vZGUgKi8gcCkge1xuICAgIC8vIHJldHVybnMgYm9vbGVhblxuICAgIGlmIChjLnBhcmVudE5vZGUpIHtcbiAgICAgIHdoaWxlICgoYyA9IGMucGFyZW50Tm9kZSkgJiYgYyAhPT0gcCk7XG4gICAgICByZXR1cm4gISFjXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgX3VuYmluZEV2ZW50cygpIHtcbiAgICBpZiAodGhpcy5fZXZudEVsQ2xpY2spIHtcbiAgICAgIHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZXZudEVsQ2xpY2spXG4gICAgICB0aGlzLl9ldm50RWxDbGljayA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZudEVsTW91c2VPdmVyKSB7XG4gICAgICB0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLl9ldm50RWxNb3VzZU92ZXIpXG4gICAgICB0aGlzLl9ldm50RWxNb3VzZU92ZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2bnRFbE1vdXNlT3V0KSB7XG4gICAgICB0aGlzLl9lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIHRoaXMuX2V2bnRFbE1vdXNlT3V0KVxuICAgICAgdGhpcy5fZXZudEVsTW91c2VPdXQgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2bnRXaW5kb3dSZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9ldm50V2luZG93UmVzaXplKVxuICAgICAgdGhpcy5fZXZudFdpbmRvd1Jlc2l6ZSA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZudEJvZHlDbGljaykge1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2V2bnRCb2R5Q2xpY2spXG4gICAgICB0aGlzLl9ldm50Qm9keUNsaWNrID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ldm50SW5uZXJNb3VzZW1vdmUpIHtcbiAgICAgIHRoaXMuX2lubmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuX2V2bnRJbm5lck1vdXNlbW92ZSlcbiAgICAgIHRoaXMuX2V2bnRJbm5lck1vdXNlbW92ZSA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZudElubmVyTW91c2VsZWF2ZSkge1xuICAgICAgdGhpcy5faW5uZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuX2V2bnRJbm5lck1vdXNlbGVhdmUpXG4gICAgICB0aGlzLl9ldm50SW5uZXJNb3VzZWxlYXZlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBfaXNSb290KGl0ZW0pIHtcbiAgICByZXR1cm4gIU1lbnUuX2ZpbmRQYXJlbnQoaXRlbSwgJ21lbnUtaXRlbScsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIF9maW5kUGFyZW50KGVsLCBjbHMsIHRocm93RXJyb3IgPSB0cnVlKSB7XG4gICAgaWYgKGVsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSByZXR1cm4gbnVsbFxuICAgIGVsID0gZWwucGFyZW50Tm9kZVxuICAgIHdoaWxlIChlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJyAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNscykpIHtcbiAgICAgIGVsID0gZWwucGFyZW50Tm9kZVxuICAgIH1cblxuICAgIGVsID0gZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnQk9EWScgPyBlbCA6IG51bGxcblxuICAgIGlmICghZWwgJiYgdGhyb3dFcnJvcikgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBcXGAuJHtjbHN9XFxgIHBhcmVudCBlbGVtZW50YClcblxuICAgIHJldHVybiBlbFxuICB9XG5cbiAgc3RhdGljIF9maW5kQ2hpbGQoZWwsIGNscykge1xuICAgIGNvbnN0IGl0ZW1zID0gZWwuY2hpbGROb2Rlc1xuICAgIGNvbnN0IGZvdW5kID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0uY2xhc3NMaXN0KSB7XG4gICAgICAgIGxldCBwYXNzZWQgPSAwXG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAoaXRlbXNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKGNsc1tqXSkpIHBhc3NlZCArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xzLmxlbmd0aCA9PT0gcGFzc2VkKSBmb3VuZC5wdXNoKGl0ZW1zW2ldKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmb3VuZFxuICB9XG5cbiAgc3RhdGljIF9maW5kTWVudShpdGVtKSB7XG4gICAgbGV0IGN1ckVsID0gaXRlbS5jaGlsZE5vZGVzWzBdXG4gICAgbGV0IG1lbnUgPSBudWxsXG5cbiAgICB3aGlsZSAoY3VyRWwgJiYgIW1lbnUpIHtcbiAgICAgIGlmIChjdXJFbC5jbGFzc0xpc3QgJiYgY3VyRWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LXN1YicpKSBtZW51ID0gY3VyRWxcbiAgICAgIGN1ckVsID0gY3VyRWwubmV4dFNpYmxpbmdcbiAgICB9XG5cbiAgICBpZiAoIW1lbnUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgYC5tZW51LXN1YmAgZWxlbWVudCBmb3IgdGhlIGN1cnJlbnQgYC5tZW51LXRvZ2dsZWAnKVxuXG4gICAgcmV0dXJuIG1lbnVcbiAgfVxuXG4gIC8vIEhhcyBjbGFzc1xuICBzdGF0aWMgX2hhc0NsYXNzKGNscywgZWwgPSB3aW5kb3cuSGVscGVycy5ST09UX0VMKSB7XG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlXG5cbiAgICBjbHMuc3BsaXQoJyAnKS5mb3JFYWNoKGMgPT4ge1xuICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhjKSkgcmVzdWx0ID0gdHJ1ZVxuICAgIH0pXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBvcGVuKGVsLCBjbG9zZUNoaWxkcmVuID0gdGhpcy5fY2xvc2VDaGlsZHJlbikge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9maW5kVW5vcGVuZWRQYXJlbnQoTWVudS5fZ2V0SXRlbShlbCwgdHJ1ZSksIGNsb3NlQ2hpbGRyZW4pXG5cbiAgICBpZiAoIWl0ZW0pIHJldHVyblxuXG4gICAgY29uc3QgdG9nZ2xlTGluayA9IE1lbnUuX2dldExpbmsoaXRlbSwgdHJ1ZSlcblxuICAgIE1lbnUuX3Byb21pc2lmeSh0aGlzLl9vbk9wZW4sIHRoaXMsIGl0ZW0sIHRvZ2dsZUxpbmssIE1lbnUuX2ZpbmRNZW51KGl0ZW0pKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2hvcml6b250YWwgfHwgIU1lbnUuX2lzUm9vdChpdGVtKSkge1xuICAgICAgICAgIGlmICh0aGlzLl9hbmltYXRlICYmICF0aGlzLl9ob3Jpem9udGFsKSB7XG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuX3RvZ2dsZUFuaW1hdGlvbih0cnVlLCBpdGVtLCBmYWxzZSkpXG4gICAgICAgICAgICBpZiAodGhpcy5fYWNjb3JkaW9uKSB0aGlzLl9jbG9zZU90aGVyKGl0ZW0sIGNsb3NlQ2hpbGRyZW4pXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9hbmltYXRlKSB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVEcm9wZG93bih0cnVlLCBpdGVtLCBjbG9zZUNoaWxkcmVuKVxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgICAgdGhpcy5fb25PcGVuZWQgJiYgdGhpcy5fb25PcGVuZWQodGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnb3BlbicpXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgICB0aGlzLl9vbk9wZW5lZCAmJiB0aGlzLl9vbk9wZW5lZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBNZW51Ll9maW5kTWVudShpdGVtKSlcbiAgICAgICAgICAgIGlmICh0aGlzLl9hY2NvcmRpb24pIHRoaXMuX2Nsb3NlT3RoZXIoaXRlbSwgY2xvc2VDaGlsZHJlbilcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdG9nZ2xlRHJvcGRvd24odHJ1ZSwgaXRlbSwgY2xvc2VDaGlsZHJlbilcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgdGhpcy5fb25PcGVuZWQgJiYgdGhpcy5fb25PcGVuZWQodGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge30pXG4gIH1cblxuICBjbG9zZShlbCwgY2xvc2VDaGlsZHJlbiA9IHRoaXMuX2Nsb3NlQ2hpbGRyZW4sIF9hdXRvQ2xvc2UgPSBmYWxzZSkge1xuICAgIGNvbnN0IGl0ZW0gPSBNZW51Ll9nZXRJdGVtKGVsLCB0cnVlKVxuICAgIGNvbnN0IHRvZ2dsZUxpbmsgPSBNZW51Ll9nZXRMaW5rKGVsLCB0cnVlKVxuXG4gICAgaWYgKCFpdGVtLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpIHx8IGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSByZXR1cm5cblxuICAgIE1lbnUuX3Byb21pc2lmeSh0aGlzLl9vbkNsb3NlLCB0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBNZW51Ll9maW5kTWVudShpdGVtKSwgX2F1dG9DbG9zZSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9ob3Jpem9udGFsIHx8ICFNZW51Ll9pc1Jvb3QoaXRlbSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5fYW5pbWF0ZSAmJiAhdGhpcy5faG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLl90b2dnbGVBbmltYXRpb24oZmFsc2UsIGl0ZW0sIGNsb3NlQ2hpbGRyZW4pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxuXG4gICAgICAgICAgICBpZiAoY2xvc2VDaGlsZHJlbikge1xuICAgICAgICAgICAgICBjb25zdCBvcGVuZWQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0ub3BlbicpXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3BlbmVkLmxlbmd0aDsgaSA8IGw7IGkrKykgb3BlbmVkW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgICAgICAgICB0aGlzLl9vbkNsb3NlZCAmJiB0aGlzLl9vbkNsb3NlZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBNZW51Ll9maW5kTWVudShpdGVtKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fdG9nZ2xlRHJvcGRvd24oZmFsc2UsIGl0ZW0sIGNsb3NlQ2hpbGRyZW4pXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgICAgIHRoaXMuX29uQ2xvc2VkICYmIHRoaXMuX29uQ2xvc2VkKHRoaXMsIGl0ZW0sIHRvZ2dsZUxpbmssIE1lbnUuX2ZpbmRNZW51KGl0ZW0pKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHt9KVxuICB9XG5cbiAgX2Nsb3NlT3RoZXIoaXRlbSwgY2xvc2VDaGlsZHJlbikge1xuICAgIGNvbnN0IG9wZW5lZCA9IE1lbnUuX2ZpbmRDaGlsZChpdGVtLnBhcmVudE5vZGUsIFsnbWVudS1pdGVtJywgJ29wZW4nXSlcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3BlbmVkLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKG9wZW5lZFtpXSAhPT0gaXRlbSkgdGhpcy5jbG9zZShvcGVuZWRbaV0sIGNsb3NlQ2hpbGRyZW4pXG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlKGVsLCBjbG9zZUNoaWxkcmVuID0gdGhpcy5fY2xvc2VDaGlsZHJlbikge1xuICAgIGNvbnN0IGl0ZW0gPSBNZW51Ll9nZXRJdGVtKGVsLCB0cnVlKVxuICAgIC8vIGNvbnN0IHRvZ2dsZUxpbmsgPSBNZW51Ll9nZXRMaW5rKGVsLCB0cnVlKVxuXG4gICAgaWYgKGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykpIHRoaXMuY2xvc2UoaXRlbSwgY2xvc2VDaGlsZHJlbilcbiAgICBlbHNlIHRoaXMub3BlbihpdGVtLCBjbG9zZUNoaWxkcmVuKVxuICB9XG5cbiAgX3RvZ2dsZURyb3Bkb3duKHNob3csIGl0ZW0sIGNsb3NlQ2hpbGRyZW4pIHtcbiAgICBjb25zdCBtZW51ID0gTWVudS5fZmluZE1lbnUoaXRlbSlcbiAgICBjb25zdCBhY3R1YWxJdGVtID0gaXRlbVxuICAgIGxldCBzdWJNZW51SXRlbSA9IGZhbHNlXG5cbiAgICBpZiAoc2hvdykge1xuICAgICAgaWYgKE1lbnUuX2ZpbmRQYXJlbnQoaXRlbSwgJ21lbnUtc3ViJywgZmFsc2UpKSB7XG4gICAgICAgIHN1Yk1lbnVJdGVtID0gdHJ1ZVxuICAgICAgICBpdGVtID0gdGhpcy5fdG9wUGFyZW50ID8gdGhpcy5fdG9wUGFyZW50LnBhcmVudE5vZGUgOiBpdGVtXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdyYXBwZXJXaWR0aCA9IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5faW5uZXJQb3NpdGlvblxuICAgICAgY29uc3QgaXRlbU9mZnNldCA9IHRoaXMuX2dldEl0ZW1PZmZzZXQoaXRlbSlcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IE1hdGgucm91bmQoaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcblxuICAgICAgaWYgKGl0ZW1PZmZzZXQgLSBERUxUQSA8PSAtMSAqIHBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuX2lubmVyUG9zaXRpb24gPSAtMSAqIGl0ZW1PZmZzZXRcbiAgICAgIH0gZWxzZSBpZiAoaXRlbU9mZnNldCArIHBvc2l0aW9uICsgaXRlbVdpZHRoICsgREVMVEEgPj0gd3JhcHBlcldpZHRoKSB7XG4gICAgICAgIGlmIChpdGVtV2lkdGggPiB3cmFwcGVyV2lkdGgpIHtcbiAgICAgICAgICB0aGlzLl9pbm5lclBvc2l0aW9uID0gLTEgKiBpdGVtT2Zmc2V0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5faW5uZXJQb3NpdGlvbiA9IC0xICogKGl0ZW1PZmZzZXQgKyBpdGVtV2lkdGggLSB3cmFwcGVyV2lkdGgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWN0dWFsSXRlbS5jbGFzc0xpc3QuYWRkKCdvcGVuJylcblxuICAgICAgY29uc3QgbWVudVdpZHRoID0gTWF0aC5yb3VuZChtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxuXG4gICAgICBpZiAoc3ViTWVudUl0ZW0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGl0ZW1PZmZzZXQgKyB0aGlzLl9pbm5lclBvc2l0aW9uICsgbWVudVdpZHRoICogMiA+IHdyYXBwZXJXaWR0aCAmJlxuICAgICAgICAgIG1lbnVXaWR0aCA8IHdyYXBwZXJXaWR0aCAmJlxuICAgICAgICAgIG1lbnVXaWR0aCA+PSBpdGVtV2lkdGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gW3RoaXMuX3J0bCA/ICcxMDAlJyA6ICctMTAwJSddXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGl0ZW1PZmZzZXQgKyB0aGlzLl9pbm5lclBvc2l0aW9uICsgbWVudVdpZHRoID4gd3JhcHBlcldpZHRoICYmXG4gICAgICAgIG1lbnVXaWR0aCA8IHdyYXBwZXJXaWR0aCAmJlxuICAgICAgICBtZW51V2lkdGggPiBpdGVtV2lkdGhcbiAgICAgICkge1xuICAgICAgICBtZW51LnN0eWxlW3RoaXMuX3J0bCA/ICdtYXJnaW5SaWdodCcgOiAnbWFyZ2luTGVmdCddID0gYC0ke21lbnVXaWR0aCAtIGl0ZW1XaWR0aH1weGBcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2xvc2VPdGhlcihhY3R1YWxJdGVtLCBjbG9zZUNoaWxkcmVuKVxuICAgICAgdGhpcy5fdXBkYXRlU2xpZGVyKClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG9nZ2xlID0gTWVudS5fZmluZENoaWxkKGl0ZW0sIFsnbWVudS10b2dnbGUnXSlcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgdG9nZ2xlLmxlbmd0aCAmJiB0b2dnbGVbMF0ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWhvdmVyJywgJ3RydWUnKVxuICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJylcbiAgICAgIG1lbnUuc3R5bGVbdGhpcy5fcnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0J10gPSBudWxsXG5cbiAgICAgIGlmIChjbG9zZUNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IG9wZW5lZCA9IG1lbnUucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbS5vcGVuJylcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IG9wZW5lZC5sZW5ndGg7IGkgPCBsOyBpKyspIG9wZW5lZFtpXS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfc2xpZGUoZGlyZWN0aW9uKSB7XG4gICAgY29uc3Qgd3JhcHBlcldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl93cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxuICAgIGNvbnN0IGlubmVyV2lkdGggPSB0aGlzLl9pbm5lcldpZHRoXG4gICAgbGV0IG5ld1Bvc2l0aW9uXG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgIG5ld1Bvc2l0aW9uID0gdGhpcy5fZ2V0U2xpZGVOZXh0UG9zKClcblxuICAgICAgaWYgKGlubmVyV2lkdGggKyBuZXdQb3NpdGlvbiA8IHdyYXBwZXJXaWR0aCkge1xuICAgICAgICBuZXdQb3NpdGlvbiA9IHdyYXBwZXJXaWR0aCAtIGlubmVyV2lkdGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3UG9zaXRpb24gPSB0aGlzLl9nZXRTbGlkZVByZXZQb3MoKVxuXG4gICAgICBpZiAobmV3UG9zaXRpb24gPiAwKSBuZXdQb3NpdGlvbiA9IDBcbiAgICB9XG5cbiAgICB0aGlzLl9pbm5lclBvc2l0aW9uID0gbmV3UG9zaXRpb25cbiAgICB0aGlzLnVwZGF0ZSgpXG4gIH1cblxuICBfZ2V0U2xpZGVOZXh0UG9zKCkge1xuICAgIGNvbnN0IHdyYXBwZXJXaWR0aCA9IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2lubmVyUG9zaXRpb25cbiAgICBsZXQgY3VySXRlbSA9IHRoaXMuX2lubmVyLmNoaWxkTm9kZXNbMF1cbiAgICBsZXQgbGVmdCA9IDBcblxuICAgIHdoaWxlIChjdXJJdGVtKSB7XG4gICAgICBpZiAoY3VySXRlbS50YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGN1ckl0ZW1XaWR0aCA9IE1hdGgucm91bmQoY3VySXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcblxuICAgICAgICBpZiAobGVmdCArIHBvc2l0aW9uIC0gREVMVEEgPD0gd3JhcHBlcldpZHRoICYmIGxlZnQgKyBwb3NpdGlvbiArIGN1ckl0ZW1XaWR0aCArIERFTFRBID49IHdyYXBwZXJXaWR0aCkge1xuICAgICAgICAgIGlmIChjdXJJdGVtV2lkdGggPiB3cmFwcGVyV2lkdGggJiYgbGVmdCA9PT0gLTEgKiBwb3NpdGlvbikgbGVmdCArPSBjdXJJdGVtV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgbGVmdCArPSBjdXJJdGVtV2lkdGhcbiAgICAgIH1cblxuICAgICAgY3VySXRlbSA9IGN1ckl0ZW0ubmV4dFNpYmxpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gLTEgKiBsZWZ0XG4gIH1cblxuICBfZ2V0U2xpZGVQcmV2UG9zKCkge1xuICAgIGNvbnN0IHdyYXBwZXJXaWR0aCA9IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2lubmVyUG9zaXRpb25cbiAgICBsZXQgY3VySXRlbSA9IHRoaXMuX2lubmVyLmNoaWxkTm9kZXNbMF1cbiAgICBsZXQgbGVmdCA9IDBcblxuICAgIHdoaWxlIChjdXJJdGVtKSB7XG4gICAgICBpZiAoY3VySXRlbS50YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGN1ckl0ZW1XaWR0aCA9IE1hdGgucm91bmQoY3VySXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcblxuICAgICAgICBpZiAobGVmdCAtIERFTFRBIDw9IC0xICogcG9zaXRpb24gJiYgbGVmdCArIGN1ckl0ZW1XaWR0aCArIERFTFRBID49IC0xICogcG9zaXRpb24pIHtcbiAgICAgICAgICBpZiAoY3VySXRlbVdpZHRoIDw9IHdyYXBwZXJXaWR0aCkgbGVmdCA9IGxlZnQgKyBjdXJJdGVtV2lkdGggLSB3cmFwcGVyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgbGVmdCArPSBjdXJJdGVtV2lkdGhcbiAgICAgIH1cblxuICAgICAgY3VySXRlbSA9IGN1ckl0ZW0ubmV4dFNpYmxpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gLTEgKiBsZWZ0XG4gIH1cblxuICBzdGF0aWMgX2dldEl0ZW0oZWwsIHRvZ2dsZSkge1xuICAgIGxldCBpdGVtID0gbnVsbFxuICAgIGNvbnN0IHNlbGVjdG9yID0gdG9nZ2xlID8gJ21lbnUtdG9nZ2xlJyA6ICdtZW51LWxpbmsnXG5cbiAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LWl0ZW0nKSkge1xuICAgICAgaWYgKE1lbnUuX2ZpbmRDaGlsZChlbCwgW3NlbGVjdG9yXSkubGVuZ3RoKSBpdGVtID0gZWxcbiAgICB9IGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhzZWxlY3RvcikpIHtcbiAgICAgIGl0ZW0gPSBlbC5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pdGVtJykgPyBlbC5wYXJlbnROb2RlIDogbnVsbFxuICAgIH1cblxuICAgIGlmICghaXRlbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3RvZ2dsZSA/ICdUb2dnYWJsZSAnIDogJyd9XFxgLm1lbnUtaXRlbVxcYCBlbGVtZW50IG5vdCBmb3VuZC5gKVxuICAgIH1cblxuICAgIHJldHVybiBpdGVtXG4gIH1cblxuICBzdGF0aWMgX2dldExpbmsoZWwsIHRvZ2dsZSkge1xuICAgIGxldCBmb3VuZCA9IFtdXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0b2dnbGUgPyAnbWVudS10b2dnbGUnIDogJ21lbnUtbGluaydcblxuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoc2VsZWN0b3IpKSBmb3VuZCA9IFtlbF1cbiAgICBlbHNlIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtaXRlbScpKSBmb3VuZCA9IE1lbnUuX2ZpbmRDaGlsZChlbCwgW3NlbGVjdG9yXSlcblxuICAgIGlmICghZm91bmQubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoYFxcYCR7c2VsZWN0b3J9XFxgIGVsZW1lbnQgbm90IGZvdW5kLmApXG5cbiAgICByZXR1cm4gZm91bmRbMF1cbiAgfVxuXG4gIF9maW5kVW5vcGVuZWRQYXJlbnQoaXRlbSwgY2xvc2VDaGlsZHJlbikge1xuICAgIGxldCB0cmVlID0gW11cbiAgICBsZXQgcGFyZW50SXRlbSA9IG51bGxcblxuICAgIHdoaWxlIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgcGFyZW50SXRlbSA9IG51bGxcbiAgICAgICAgdHJlZSA9IFtdXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykpIHBhcmVudEl0ZW0gPSBpdGVtXG4gICAgICAgIHRyZWUucHVzaChpdGVtKVxuICAgICAgfVxuXG4gICAgICBpdGVtID0gTWVudS5fZmluZFBhcmVudChpdGVtLCAnbWVudS1pdGVtJywgZmFsc2UpXG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnRJdGVtKSByZXR1cm4gbnVsbFxuICAgIGlmICh0cmVlLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHBhcmVudEl0ZW1cblxuICAgIHRyZWUgPSB0cmVlLnNsaWNlKDAsIHRyZWUuaW5kZXhPZihwYXJlbnRJdGVtKSlcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gdHJlZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRyZWVbaV0uY2xhc3NMaXN0LmFkZCgnb3BlbicpXG5cbiAgICAgIGlmICh0aGlzLl9hY2NvcmRpb24pIHtcbiAgICAgICAgY29uc3Qgb3BlbmVkSXRlbXMgPSBNZW51Ll9maW5kQ2hpbGQodHJlZVtpXS5wYXJlbnROb2RlLCBbJ21lbnUtaXRlbScsICdvcGVuJ10pXG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGsgPSBvcGVuZWRJdGVtcy5sZW5ndGg7IGogPCBrOyBqKyspIHtcbiAgICAgICAgICBpZiAob3BlbmVkSXRlbXNbal0gIT09IHRyZWVbaV0pIHtcbiAgICAgICAgICAgIG9wZW5lZEl0ZW1zW2pdLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxuXG4gICAgICAgICAgICBpZiAoY2xvc2VDaGlsZHJlbikge1xuICAgICAgICAgICAgICBjb25zdCBvcGVuZWRDaGlsZHJlbiA9IG9wZW5lZEl0ZW1zW2pdLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0ub3BlbicpXG4gICAgICAgICAgICAgIGZvciAobGV0IHggPSAwLCB6ID0gb3BlbmVkQ2hpbGRyZW4ubGVuZ3RoOyB4IDwgejsgeCsrKSB7XG4gICAgICAgICAgICAgICAgb3BlbmVkQ2hpbGRyZW5beF0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50SXRlbVxuICB9XG5cbiAgX3RvZ2dsZUFuaW1hdGlvbihvcGVuLCBpdGVtLCBjbG9zZUNoaWxkcmVuKSB7XG4gICAgY29uc3QgdG9nZ2xlTGluayA9IE1lbnUuX2dldExpbmsoaXRlbSwgdHJ1ZSlcbiAgICBjb25zdCBtZW51ID0gTWVudS5fZmluZE1lbnUoaXRlbSlcblxuICAgIE1lbnUuX3VuYmluZEFuaW1hdGlvbkVuZEV2ZW50KGl0ZW0pXG5cbiAgICBjb25zdCBsaW5rSGVpZ2h0ID0gTWF0aC5yb3VuZCh0b2dnbGVMaW5rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodClcblxuICAgIGl0ZW0uc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgY29uc3QgY2xlYXJJdGVtU3R5bGUgPSAoKSA9PiB7XG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtaXRlbS1hbmltYXRpbmcnKVxuICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdtZW51LWl0ZW0tY2xvc2luZycpXG4gICAgICBpdGVtLnN0eWxlLm92ZXJmbG93ID0gbnVsbFxuICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBudWxsXG5cbiAgICAgIGlmICghdGhpcy5faG9yaXpvbnRhbCkgdGhpcy51cGRhdGUoKVxuICAgIH1cblxuICAgIGlmIChvcGVuKSB7XG4gICAgICBpdGVtLnN0eWxlLmhlaWdodCA9IGAke2xpbmtIZWlnaHR9cHhgXG4gICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ21lbnUtaXRlbS1hbmltYXRpbmcnKVxuICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdvcGVuJylcblxuICAgICAgTWVudS5fYmluZEFuaW1hdGlvbkVuZEV2ZW50KGl0ZW0sICgpID0+IHtcbiAgICAgICAgY2xlYXJJdGVtU3R5bGUoKVxuICAgICAgICB0aGlzLl9vbk9wZW5lZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBtZW51KVxuICAgICAgfSlcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGl0ZW0uc3R5bGUuaGVpZ2h0ID0gYCR7bGlua0hlaWdodCArIE1hdGgucm91bmQobWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpfXB4YFxuICAgICAgfSwgNTApXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uc3R5bGUuaGVpZ2h0ID0gYCR7bGlua0hlaWdodCArIE1hdGgucm91bmQobWVudS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpfXB4YFxuICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdtZW51LWl0ZW0tYW5pbWF0aW5nJylcbiAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnbWVudS1pdGVtLWNsb3NpbmcnKVxuXG4gICAgICBNZW51Ll9iaW5kQW5pbWF0aW9uRW5kRXZlbnQoaXRlbSwgKCkgPT4ge1xuICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxuICAgICAgICBjbGVhckl0ZW1TdHlsZSgpXG5cbiAgICAgICAgaWYgKGNsb3NlQ2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBvcGVuZWQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0ub3BlbicpXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBvcGVuZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSBvcGVuZWRbaV0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vbkNsb3NlZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBtZW51KVxuICAgICAgfSlcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGl0ZW0uc3R5bGUuaGVpZ2h0ID0gYCR7bGlua0hlaWdodH1weGBcbiAgICAgIH0sIDUwKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBfYmluZEFuaW1hdGlvbkVuZEV2ZW50KGVsLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgY2IgPSBlID0+IHtcbiAgICAgIGlmIChlLnRhcmdldCAhPT0gZWwpIHJldHVyblxuICAgICAgTWVudS5fdW5iaW5kQW5pbWF0aW9uRW5kRXZlbnQoZWwpXG4gICAgICBoYW5kbGVyKGUpXG4gICAgfVxuXG4gICAgbGV0IGR1cmF0aW9uID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLnRyYW5zaXRpb25EdXJhdGlvblxuICAgIGR1cmF0aW9uID0gcGFyc2VGbG9hdChkdXJhdGlvbikgKiAoZHVyYXRpb24uaW5kZXhPZignbXMnKSAhPT0gLTEgPyAxIDogMTAwMClcblxuICAgIGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRDYiA9IGNiXG4gICAgVFJBTlNJVElPTl9FVkVOVFMuZm9yRWFjaChldiA9PiBlbC5hZGRFdmVudExpc3RlbmVyKGV2LCBlbC5fbWVudUFuaW1hdGlvbkVuZEV2ZW50Q2IsIGZhbHNlKSlcblxuICAgIGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjYih7IHRhcmdldDogZWwgfSlcbiAgICB9LCBkdXJhdGlvbiArIDUwKVxuICB9XG5cbiAgX2dldEl0ZW1PZmZzZXQoaXRlbSkge1xuICAgIGxldCBjdXJJdGVtID0gdGhpcy5faW5uZXIuY2hpbGROb2Rlc1swXVxuICAgIGxldCBsZWZ0ID0gMFxuXG4gICAgd2hpbGUgKGN1ckl0ZW0gIT09IGl0ZW0pIHtcbiAgICAgIGlmIChjdXJJdGVtLnRhZ05hbWUpIHtcbiAgICAgICAgbGVmdCArPSBNYXRoLnJvdW5kKGN1ckl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXG4gICAgICB9XG5cbiAgICAgIGN1ckl0ZW0gPSBjdXJJdGVtLm5leHRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIGxlZnRcbiAgfVxuXG4gIF91cGRhdGVTbGlkZXIod3JhcHBlcldpZHRoID0gbnVsbCwgaW5uZXJXaWR0aCA9IG51bGwsIHBvc2l0aW9uID0gbnVsbCkge1xuICAgIGNvbnN0IF93cmFwcGVyV2lkdGggPSB3cmFwcGVyV2lkdGggIT09IG51bGwgPyB3cmFwcGVyV2lkdGggOiBNYXRoLnJvdW5kKHRoaXMuX3dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXG4gICAgY29uc3QgX2lubmVyV2lkdGggPSBpbm5lcldpZHRoICE9PSBudWxsID8gaW5uZXJXaWR0aCA6IHRoaXMuX2lubmVyV2lkdGhcbiAgICBjb25zdCBfcG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gbnVsbCA/IHBvc2l0aW9uIDogdGhpcy5faW5uZXJQb3NpdGlvblxuXG4gICAgaWYgKF9pbm5lcldpZHRoIDwgX3dyYXBwZXJXaWR0aCB8fCB3aW5kb3cuaW5uZXJXaWR0aCA8IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XG4gICAgICB0aGlzLl9wcmV2QnRuLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpXG4gICAgICB0aGlzLl9uZXh0QnRuLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ByZXZCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJylcbiAgICAgIHRoaXMuX25leHRCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJylcbiAgICB9XG4gICAgaWYgKF9pbm5lcldpZHRoID4gX3dyYXBwZXJXaWR0aCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XG4gICAgICBpZiAoX3Bvc2l0aW9uID09PSAwKSB0aGlzLl9wcmV2QnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJylcbiAgICAgIGVsc2UgdGhpcy5fcHJldkJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpXG5cbiAgICAgIGlmIChfaW5uZXJXaWR0aCArIF9wb3NpdGlvbiA8PSBfd3JhcHBlcldpZHRoKSB0aGlzLl9uZXh0QnRuLmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJylcbiAgICAgIGVsc2UgdGhpcy5fbmV4dEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIF9wcm9taXNpZnkoZm4sIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKVxuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxuXG4gIGdldCBfaW5uZXJXaWR0aCgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2lubmVyLmNoaWxkTm9kZXNcbiAgICBsZXQgd2lkdGggPSAwXG5cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGl0ZW1zW2ldLnRhZ05hbWUpIHtcbiAgICAgICAgd2lkdGggKz0gTWF0aC5yb3VuZChpdGVtc1tpXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGhcbiAgfVxuXG4gIGdldCBfaW5uZXJQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5faW5uZXIuc3R5bGVbdGhpcy5fcnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0J10gfHwgJzBweCcsIDEwKVxuICB9XG5cbiAgc2V0IF9pbm5lclBvc2l0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5faW5uZXIuc3R5bGVbdGhpcy5fcnRsID8gJ21hcmdpblJpZ2h0JyA6ICdtYXJnaW5MZWZ0J10gPSBgJHt2YWx1ZX1weGBcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHN0YXRpYyBfdW5iaW5kQW5pbWF0aW9uRW5kRXZlbnQoZWwpIHtcbiAgICBjb25zdCBjYiA9IGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRDYlxuXG4gICAgaWYgKGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoZWwuX21lbnVBbmltYXRpb25FbmRFdmVudFRpbWVvdXQpXG4gICAgICBlbC5fbWVudUFuaW1hdGlvbkVuZEV2ZW50VGltZW91dCA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIWNiKSByZXR1cm5cblxuICAgIFRSQU5TSVRJT05fRVZFTlRTLmZvckVhY2goZXYgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldiwgY2IsIGZhbHNlKSlcbiAgICBlbC5fbWVudUFuaW1hdGlvbkVuZEV2ZW50Q2IgPSBudWxsXG4gIH1cblxuICBjbG9zZUFsbChjbG9zZUNoaWxkcmVuID0gdGhpcy5fY2xvc2VDaGlsZHJlbikge1xuICAgIGNvbnN0IG9wZW5lZCA9IHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWlubmVyID4gLm1lbnUtaXRlbS5vcGVuJylcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3BlbmVkLmxlbmd0aDsgaSA8IGw7IGkrKykgdGhpcy5jbG9zZShvcGVuZWRbaV0sIGNsb3NlQ2hpbGRyZW4pXG4gIH1cblxuICBzdGF0aWMgc2V0RGlzYWJsZWQoZWwsIGRpc2FibGVkKSB7XG4gICAgTWVudS5fZ2V0SXRlbShlbCwgZmFsc2UpLmNsYXNzTGlzdFtkaXNhYmxlZCA/ICdhZGQnIDogJ3JlbW92ZSddKCdkaXNhYmxlZCcpXG4gIH1cblxuICBzdGF0aWMgaXNBY3RpdmUoZWwpIHtcbiAgICByZXR1cm4gTWVudS5fZ2V0SXRlbShlbCwgZmFsc2UpLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJylcbiAgfVxuXG4gIHN0YXRpYyBpc09wZW5lZChlbCkge1xuICAgIHJldHVybiBNZW51Ll9nZXRJdGVtKGVsLCBmYWxzZSkuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJylcbiAgfVxuXG4gIHN0YXRpYyBpc0Rpc2FibGVkKGVsKSB7XG4gICAgcmV0dXJuIE1lbnUuX2dldEl0ZW0oZWwsIGZhbHNlKS5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJylcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2hvcml6b250YWwpIHtcbiAgICAgIGlmICh0aGlzLl9zY3JvbGxiYXIpIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyLnVwZGF0ZSgpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2VBbGwoKVxuXG4gICAgICBjb25zdCB3cmFwcGVyV2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuX3dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXG4gICAgICBjb25zdCBpbm5lcldpZHRoID0gdGhpcy5faW5uZXJXaWR0aFxuICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5faW5uZXJQb3NpdGlvblxuXG4gICAgICBpZiAod3JhcHBlcldpZHRoIC0gcG9zaXRpb24gPiBpbm5lcldpZHRoKSB7XG4gICAgICAgIHBvc2l0aW9uID0gd3JhcHBlcldpZHRoIC0gaW5uZXJXaWR0aFxuICAgICAgICBpZiAocG9zaXRpb24gPiAwKSBwb3NpdGlvbiA9IDBcbiAgICAgICAgdGhpcy5faW5uZXJQb3NpdGlvbiA9IHBvc2l0aW9uXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3VwZGF0ZVNsaWRlcih3cmFwcGVyV2lkdGgsIGlubmVyV2lkdGgsIHBvc2l0aW9uKVxuICAgIH1cbiAgfVxuXG4gIG1hbmFnZVNjcm9sbCgpIHtcbiAgICBjb25zdCB7IFBlcmZlY3RTY3JvbGxiYXIgfSA9IHdpbmRvd1xuICAgIGNvbnN0IG1lbnVJbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJylcblxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XG4gICAgICBpZiAodGhpcy5fc2Nyb2xsYmFyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIHdpbmRvdy5IZWxwZXJzLm1lbnVQc1Njcm9sbC5kZXN0cm95KClcbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyLmRlc3Ryb3koKVxuICAgICAgICB0aGlzLl9zY3JvbGxiYXIgPSBudWxsXG4gICAgICB9XG4gICAgICBtZW51SW5uZXIuY2xhc3NMaXN0LmFkZCgnb3ZlcmZsb3ctYXV0bycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9zY3JvbGxiYXIgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgbWVudVNjcm9sbCA9IG5ldyBQZXJmZWN0U2Nyb2xsYmFyKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJyksIHtcbiAgICAgICAgICBzdXBwcmVzc1Njcm9sbFg6IHRydWUsXG4gICAgICAgICAgd2hlZWxQcm9wYWdhdGlvbjogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICAgLy8gd2luZG93LkhlbHBlcnMubWVudVBzU2Nyb2xsID0gbWVudVNjcm9sbFxuICAgICAgICB0aGlzLl9zY3JvbGxiYXIgPSBtZW51U2Nyb2xsXG4gICAgICB9XG4gICAgICBtZW51SW5uZXIuY2xhc3NMaXN0LnJlbW92ZSgnb3ZlcmZsb3ctYXV0bycpXG4gICAgfVxuICB9XG5cbiAgc3dpdGNoTWVudShtZW51KSB7XG4gICAgLy8gVW5iaW5kIEV2ZW50c1xuICAgIHRoaXMuX3VuYmluZEV2ZW50cygpXG5cbiAgICAvLyBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG4gICAgY29uc3QgbmF2YmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbmF2LmxheW91dC1uYXZiYXInKVxuICAgIGNvbnN0IG5hdmJhckNvbGxhcHNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI25hdmJhci1jb2xsYXBzZScpXG4gICAgLyogY29uc3QgZnVsbE5hdmJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtbmF2YmFyLWZ1bGwnKVxuICAgIGNvbnN0IGNvbnRlbnROYXZiYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LWNvbnRlbnQtbmF2YmFyJylcbiAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZW50LXdyYXBwZXInKSAqL1xuICAgIGNvbnN0IGFzaWRlTWVudVdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbGF5b3V0LW1lbnUgZGl2JylcbiAgICBjb25zdCBhc2lkZU1lbnUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbGF5b3V0LW1lbnUnKVxuICAgIGNvbnN0IGhvcnpNZW51Q2xhc3NlcyA9IFsnbGF5b3V0LW1lbnUtaG9yaXpvbnRhbCcsICdtZW51JywgJ21lbnUtaG9yaXpvbnRhbCcsICdjb250YWluZXItZmx1aWQnLCAnZmxleC1ncm93LTAnXVxuICAgIGNvbnN0IHZlcnRNZW51Q2xhc3NlcyA9IFsnbGF5b3V0LW1lbnUnLCAnbWVudScsICdtZW51LXZlcnRpY2FsJ11cbiAgICBjb25zdCBob3J6TWVudVdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudS1ob3Jpem9udGFsLXdyYXBwZXInKVxuICAgIGNvbnN0IG1lbnVJbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJylcbiAgICBjb25zdCBicmFuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hcHAtYnJhbmQnKVxuICAgIGNvbnN0IG1lbnVUb2dnbGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1tZW51LXRvZ2dsZScpXG4gICAgY29uc3QgYWN0aXZlTWVudUl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaW5uZXIgLmFjdGl2ZScpXG4gICAgLyogY29uc3QgbGF5b3V0UGFnZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYXlvdXQtcGFnZScpXG4gICAgY29uc3QgbGF5b3V0Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1jb250YWluZXInKVxuICAgIGNvbnN0IGNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY29udGFpbmVyLWZsdWlkJykgKi9cblxuICAgIC8vIGNvbnN0IHsgUGVyZmVjdFNjcm9sbGJhciB9ID0gd2luZG93XG5cbiAgICBpZiAobWVudSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgdGhpcy5faG9yaXpvbnRhbCA9IGZhbHNlXG4gICAgICBhc2lkZU1lbnVXcmFwcGVyLmluc2VydEJlZm9yZShicmFuZCwgaG9yek1lbnVXcmFwcGVyKVxuICAgICAgYXNpZGVNZW51V3JhcHBlci5pbnNlcnRCZWZvcmUobWVudUlubmVyLCBob3J6TWVudVdyYXBwZXIpXG4gICAgICBhc2lkZU1lbnVXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ZsZXgtY29sdW1uJywgJ3AtMCcpXG4gICAgICBhc2lkZU1lbnUuY2xhc3NMaXN0LnJlbW92ZSguLi5hc2lkZU1lbnUuY2xhc3NMaXN0KVxuICAgICAgYXNpZGVNZW51LmNsYXNzTGlzdC5hZGQoLi4udmVydE1lbnVDbGFzc2VzLCB0aGlzLl9tZW51QmdDbGFzcylcbiAgICAgIGJyYW5kLmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScsICdkLWxnLWZsZXgnKVxuICAgICAgbWVudVRvZ2dsZXIuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJylcbiAgICAgIC8vIGlmIChQZXJmZWN0U2Nyb2xsYmFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICAgdGhpcy5fcHNTY3JvbGwgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpLCB7XG4gICAgICAvLyAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLFxuICAgICAgLy8gICAgIHdoZWVsUHJvcGFnYXRpb246ICFNZW51Ll9oYXNDbGFzcygnbGF5b3V0LW1lbnUtZml4ZWQgbGF5b3V0LW1lbnUtZml4ZWQtb2ZmY2FudmFzJylcbiAgICAgIC8vICAgfSlcbiAgICAgIC8vIH1cblxuICAgICAgbWVudUlubmVyLmNsYXNzTGlzdC5hZGQoJ292ZXJmbG93LWF1dG8nKVxuXG4gICAgICAvLyBBZGQgb3BlbiBjbGFzcyB0byBhY3RpdmUgaXRlbXNcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlTWVudUl0ZW1zLmxlbmd0aCAtIDE7ICsraSkge1xuICAgICAgICBhY3RpdmVNZW51SXRlbXNbaV0uY2xhc3NMaXN0LmFkZCgnb3BlbicpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hvcml6b250YWwgPSB0cnVlXG4gICAgICBuYXZiYXIuY2hpbGRyZW5bMF0uaW5zZXJ0QmVmb3JlKGJyYW5kLCBuYXZiYXJDb2xsYXBzZSlcbiAgICAgIGJyYW5kLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScsICdkLWxnLWZsZXgnKVxuICAgICAgaG9yek1lbnVXcmFwcGVyLmFwcGVuZENoaWxkKG1lbnVJbm5lcilcbiAgICAgIGFzaWRlTWVudVdyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZSgnZmxleC1jb2x1bW4nLCAncC0wJylcbiAgICAgIGFzaWRlTWVudS5jbGFzc0xpc3QucmVtb3ZlKC4uLmFzaWRlTWVudS5jbGFzc0xpc3QpXG4gICAgICBhc2lkZU1lbnUuY2xhc3NMaXN0LmFkZCguLi5ob3J6TWVudUNsYXNzZXMsIHRoaXMuX21lbnVCZ0NsYXNzKVxuICAgICAgbWVudVRvZ2dsZXIuY2xhc3NMaXN0LmFkZCgnZC1ub25lJylcbiAgICAgIG1lbnVJbm5lci5jbGFzc0xpc3QucmVtb3ZlKCdvdmVyZmxvdy1hdXRvJylcblxuICAgICAgLy8gaWYgKFBlcmZlY3RTY3JvbGxiYXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9wc1Njcm9sbCAhPT0gbnVsbCkge1xuICAgICAgLy8gICB0aGlzLl9wc1Njcm9sbC5kZXN0cm95KClcbiAgICAgIC8vICAgdGhpcy5fcHNTY3JvbGwgPSBudWxsXG4gICAgICAvLyB9XG5cbiAgICAgIC8vIFJlbW92ZSBvcGVuIGNsYXNzIGZyb20gYWN0aXZlIGl0ZW1zXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZU1lbnVJdGVtcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBhY3RpdmVNZW51SXRlbXNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYmluZEV2ZW50cygpXG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGlmICghdGhpcy5fZWwpIHJldHVyblxuXG4gICAgdGhpcy5fdW5iaW5kRXZlbnRzKClcblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZWwucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbScpXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIE1lbnUuX3VuYmluZEFuaW1hdGlvbkVuZEV2ZW50KGl0ZW1zW2ldKVxuICAgICAgaXRlbXNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1pdGVtLWFuaW1hdGluZycpXG4gICAgICBpdGVtc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJylcbiAgICAgIGl0ZW1zW2ldLnN0eWxlLm92ZXJmbG93ID0gbnVsbFxuICAgICAgaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IG1lbnVzID0gdGhpcy5fZWwucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtbWVudScpXG4gICAgZm9yIChsZXQgaTIgPSAwLCBsMiA9IG1lbnVzLmxlbmd0aDsgaTIgPCBsMjsgaTIrKykge1xuICAgICAgbWVudXNbaTJdLnN0eWxlLm1hcmdpblJpZ2h0ID0gbnVsbFxuICAgICAgbWVudXNbaTJdLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1uby1hbmltYXRpb24nKVxuXG4gICAgaWYgKHRoaXMuX3dyYXBwZXIpIHtcbiAgICAgIHRoaXMuX3ByZXZCdG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9wcmV2QnRuKVxuICAgICAgdGhpcy5fbmV4dEJ0bi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX25leHRCdG4pXG4gICAgICB0aGlzLl93cmFwcGVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2lubmVyLCB0aGlzLl93cmFwcGVyKVxuICAgICAgdGhpcy5fd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3dyYXBwZXIpXG4gICAgICB0aGlzLl9pbm5lci5zdHlsZS5tYXJnaW5MZWZ0ID0gbnVsbFxuICAgICAgdGhpcy5faW5uZXIuc3R5bGUubWFyZ2luUmlnaHQgPSBudWxsXG4gICAgfVxuXG4gICAgdGhpcy5fZWwubWVudUluc3RhbmNlID0gbnVsbFxuICAgIGRlbGV0ZSB0aGlzLl9lbC5tZW51SW5zdGFuY2VcblxuICAgIHRoaXMuX2VsID0gbnVsbFxuICAgIHRoaXMuX2hvcml6b250YWwgPSBudWxsXG4gICAgdGhpcy5fYW5pbWF0ZSA9IG51bGxcbiAgICB0aGlzLl9hY2NvcmRpb24gPSBudWxsXG4gICAgdGhpcy5fc2hvd0Ryb3Bkb3duT25Ib3ZlciA9IG51bGxcbiAgICB0aGlzLl9jbG9zZUNoaWxkcmVuID0gbnVsbFxuICAgIHRoaXMuX3J0bCA9IG51bGxcbiAgICB0aGlzLl9vbk9wZW4gPSBudWxsXG4gICAgdGhpcy5fb25PcGVuZWQgPSBudWxsXG4gICAgdGhpcy5fb25DbG9zZSA9IG51bGxcbiAgICB0aGlzLl9vbkNsb3NlZCA9IG51bGxcbiAgICBpZiAodGhpcy5fc2Nyb2xsYmFyKSB7XG4gICAgICB0aGlzLl9zY3JvbGxiYXIuZGVzdHJveSgpXG4gICAgICB0aGlzLl9zY3JvbGxiYXIgPSBudWxsXG4gICAgfVxuICAgIHRoaXMuX2lubmVyID0gbnVsbFxuICAgIHRoaXMuX3ByZXZCdG4gPSBudWxsXG4gICAgdGhpcy5fd3JhcHBlciA9IG51bGxcbiAgICB0aGlzLl9uZXh0QnRuID0gbnVsbFxuICB9XG59XG5cbmV4cG9ydCB7IE1lbnUgfVxuIl0sIm5hbWVzIjpbIlRSQU5TSVRJT05fRVZFTlRTIiwiREVMVEEiLCJNZW51IiwiZWwiLCJjb25maWciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJfUFMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZWwiLCJfaG9yaXpvbnRhbCIsIm9yaWVudGF0aW9uIiwiX2FuaW1hdGUiLCJhbmltYXRlIiwiX2FjY29yZGlvbiIsImFjY29yZGlvbiIsIl9zaG93RHJvcGRvd25PbkhvdmVyIiwiQm9vbGVhbiIsInNob3dEcm9wZG93bk9uSG92ZXIiLCJfY2xvc2VDaGlsZHJlbiIsImNsb3NlQ2hpbGRyZW4iLCJfcnRsIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJnZXRBdHRyaWJ1dGUiLCJib2R5IiwiX29uT3BlbiIsIm9uT3BlbiIsIl9vbk9wZW5lZCIsIm9uT3BlbmVkIiwiX29uQ2xvc2UiLCJvbkNsb3NlIiwiX29uQ2xvc2VkIiwib25DbG9zZWQiLCJfcHNTY3JvbGwiLCJfdG9wUGFyZW50IiwiX21lbnVCZ0NsYXNzIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiUGVyZmVjdFNjcm9sbGJhckxpYiIsIndpbmRvdyIsIlBlcmZlY3RTY3JvbGxiYXIiLCJfc2Nyb2xsYmFyIiwicXVlcnlTZWxlY3RvciIsInN1cHByZXNzU2Nyb2xsWCIsIndoZWVsUHJvcGFnYXRpb24iLCJfaGFzQ2xhc3MiLCJIZWxwZXJzIiwibWVudVBzU2Nyb2xsIiwiX2lubmVyIiwiY29udGFpbmVyIiwicGFyZW50Tm9kZSIsIl9wcmV2QnRuIiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJjbGFzc05hbWUiLCJhcHBlbmRDaGlsZCIsIl93cmFwcGVyIiwiX25leHRCdG4iLCJfaW5uZXJQb3NpdGlvbiIsInVwZGF0ZSIsIm1lbnVDbGFzc0xpc3QiLCJpIiwic3RhcnRzV2l0aCIsInNldEF0dHJpYnV0ZSIsImlubmVyV2lkdGgiLCJMQVlPVVRfQlJFQUtQT0lOVCIsInN3aXRjaE1lbnUiLCJfYmluZEV2ZW50cyIsIm1lbnVJbnN0YW5jZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiX3RoaXMiLCJfZXZudEVsQ2xpY2siLCJlIiwidGFyZ2V0IiwiY2xvc2VzdCIsImNvbnRhaW5zIiwibWVudUl0ZW0iLCJfZmluZFBhcmVudCIsImNoaWxkTm9kZXMiLCJ0b2dnbGVMaW5rIiwicHJldmVudERlZmF1bHQiLCJ0b2dnbGUiLCJpc01vYmlsZURldmljZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJfZXZudFdpbmRvd1Jlc2l6ZSIsIl9sYXN0V2lkdGgiLCJob3Jpem9udGFsTWVudVRlbXBsYXRlIiwibWFuYWdlU2Nyb2xsIiwiX2V2bnRQcmV2QnRuQ2xpY2siLCJfc2xpZGUiLCJfZXZudE5leHRCdG5DbGljayIsIl9ldm50Qm9keUNsaWNrIiwicXVlcnlTZWxlY3RvckFsbCIsImNsb3NlQWxsIiwiX2V2bnRFbE1vdXNlT3ZlciIsImN1cnJlbnRUYXJnZXQiLCJzdG9wUHJvcGFnYXRpb24iLCJzY3JlZW4iLCJ3aWR0aCIsIl9ldm50RWxNb3VzZU91dCIsIm1haW5FbCIsIm1vdXNlT3V0RWwiLCJtb3VzZU92ZXJFbCIsInRvRWxlbWVudCIsInJlbGF0ZWRUYXJnZXQiLCJjaGlsZE9mIiwiX3VuYmluZEV2ZW50cyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfZXZudElubmVyTW91c2Vtb3ZlIiwiX2V2bnRJbm5lck1vdXNlbGVhdmUiLCJvcGVuIiwiX3RoaXMyIiwiaXRlbSIsIl9maW5kVW5vcGVuZWRQYXJlbnQiLCJfZ2V0SXRlbSIsIl9nZXRMaW5rIiwiX3Byb21pc2lmeSIsIl9maW5kTWVudSIsInRoZW4iLCJfaXNSb290IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX3RvZ2dsZUFuaW1hdGlvbiIsIl9jbG9zZU90aGVyIiwiX3RvZ2dsZURyb3Bkb3duIiwiY2F0Y2giLCJjbG9zZSIsIl90aGlzMyIsIl9hdXRvQ2xvc2UiLCJvcGVuZWQiLCJsIiwiX2ZpbmRDaGlsZCIsInNob3ciLCJtZW51IiwiYWN0dWFsSXRlbSIsInN1Yk1lbnVJdGVtIiwid3JhcHBlcldpZHRoIiwiTWF0aCIsInJvdW5kIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicG9zaXRpb24iLCJpdGVtT2Zmc2V0IiwiX2dldEl0ZW1PZmZzZXQiLCJpdGVtV2lkdGgiLCJtZW51V2lkdGgiLCJzdHlsZSIsImxlZnQiLCJjb25jYXQiLCJfdXBkYXRlU2xpZGVyIiwicmVtb3ZlQXR0cmlidXRlIiwiZGlyZWN0aW9uIiwiX2lubmVyV2lkdGgiLCJuZXdQb3NpdGlvbiIsIl9nZXRTbGlkZU5leHRQb3MiLCJfZ2V0U2xpZGVQcmV2UG9zIiwiY3VySXRlbSIsInRhZ05hbWUiLCJjdXJJdGVtV2lkdGgiLCJuZXh0U2libGluZyIsInRyZWUiLCJwYXJlbnRJdGVtIiwicHVzaCIsInNsaWNlIiwiaW5kZXhPZiIsIm9wZW5lZEl0ZW1zIiwiaiIsImsiLCJvcGVuZWRDaGlsZHJlbiIsIngiLCJ6IiwiX3RoaXM0IiwiX3VuYmluZEFuaW1hdGlvbkVuZEV2ZW50IiwibGlua0hlaWdodCIsImhlaWdodCIsIm92ZXJmbG93IiwiY2xlYXJJdGVtU3R5bGUiLCJfYmluZEFuaW1hdGlvbkVuZEV2ZW50Iiwic2V0VGltZW91dCIsIl93cmFwcGVyV2lkdGgiLCJfcG9zaXRpb24iLCJnZXQiLCJpdGVtcyIsInBhcnNlSW50Iiwic2V0IiwiX3dpbmRvdyIsIm1lbnVJbm5lciIsImRlc3Ryb3kiLCJtZW51U2Nyb2xsIiwibmF2YmFyIiwibmF2YmFyQ29sbGFwc2UiLCJhc2lkZU1lbnVXcmFwcGVyIiwiYXNpZGVNZW51IiwiaG9yek1lbnVDbGFzc2VzIiwidmVydE1lbnVDbGFzc2VzIiwiaG9yek1lbnVXcmFwcGVyIiwiYnJhbmQiLCJtZW51VG9nZ2xlciIsImFjdGl2ZU1lbnVJdGVtcyIsIl9hc2lkZU1lbnUkY2xhc3NMaXN0IiwiX2FzaWRlTWVudSRjbGFzc0xpc3QyIiwiaW5zZXJ0QmVmb3JlIiwiYXBwbHkiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJfYXNpZGVNZW51JGNsYXNzTGlzdDMiLCJfYXNpZGVNZW51JGNsYXNzTGlzdDQiLCJjaGlsZHJlbiIsIm1lbnVzIiwiaTIiLCJsMiIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsInJlbW92ZUNoaWxkIiwiYyIsInAiLCJjbHMiLCJ0aHJvd0Vycm9yIiwidG9VcHBlckNhc2UiLCJFcnJvciIsImZvdW5kIiwicGFzc2VkIiwiY3VyRWwiLCJST09UX0VMIiwicmVzdWx0Iiwic3BsaXQiLCJmb3JFYWNoIiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiY2IiLCJkdXJhdGlvbiIsImdldENvbXB1dGVkU3R5bGUiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJwYXJzZUZsb2F0IiwiX21lbnVBbmltYXRpb25FbmRFdmVudENiIiwiZXYiLCJfbWVudUFuaW1hdGlvbkVuZEV2ZW50VGltZW91dCIsImZuIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJQcm9taXNlIiwicmVqZWN0IiwicmVzb2x2ZSIsImNsZWFyVGltZW91dCIsInNldERpc2FibGVkIiwiZGlzYWJsZWQiLCJpc0FjdGl2ZSIsImlzT3BlbmVkIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./js/menu.js\n"); /***/ }) /******/ }); /************************************************************************/ /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ /******/ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module can't be inlined because the eval-source-map devtool is used. /******/ var __webpack_exports__ = {}; /******/ __webpack_modules__["./js/menu.js"](0, __webpack_exports__, __webpack_require__); /******/ /******/ return __webpack_exports__; /******/ })() ; });