PATH: /home/hwyuvbry/www/kerbau/assets/vendor/js
FILE_BARU
CREATE
FOLDER_BARU
MKDIR
UPLOAD_FILE
GO
[ .. KEMBALI ]
📄 bootstrap.js
↓
X
📄 bootstrap.js.LICENSE.txt
↓
X
📄 dropdown-hover.js
↓
X
📄 helpers.js
↓
X
📄 mega-dropdown.js
↓
X
📄 menu.js
↓
X
📄 template-customizer.js
↓
X
SAVING...
BERHASIL DIUBAH!
EDITING: menu.js
/* * 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() { // 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 _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, 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; }\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 /** ***********************************************\r\n * Horizontal Menu Mouse Over Event\r\n * ? e.target !== e.currentTarget condition to disable mouseover event on whole menu navbar\r\n * ? !e.target.parentNode.classList.contains('open') to disable mouseover events on icon, text and dropdown arrow\r\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 /** ***********************************************\r\n * Horizontal Menu Mouse Out Event\r\n * ? e.target !== e.currentTarget condition to disable mouseout event on whole menu navbar\r\n * ? mouseOutEl.parentNode.classList.contains('open') to check if the mouseout element has open class or not\r\n * ? !mouseOutEl.classList.contains('menu-toggle') to check if mouseout was from single menu item and not from the one which has submenu\r\n * ? !mouseOverEl.parentNode.classList.contains('menu-link') to disable mouseout event for icon, text and dropdown arrow\r\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++) {\n opened[i].classList.remove('open');\n }\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++) {\n opened[i].classList.remove('open');\n }\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++) {\n opened[i].classList.remove('open');\n }\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++) {\n this.close(opened[i], closeChildren);\n }\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')\r\n const contentNavbar = document.querySelector('.layout-content-navbar')\r\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')\r\n const layoutContainer = document.querySelector('.layout-container')\r\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 ;\n }\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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NUQ7RUFBQztJQUFBO0lBQUEsT0FFRCxvQkFBa0J0RSxFQUFFLEVBQUU7TUFDcEIsT0FBT0QsSUFBSSxDQUFDMkcsUUFBUSxDQUFDMUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDK0IsU0FBUyxDQUFDdUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNoRTtFQUFDO0VBQUE7QUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL1Z1ZXh5Ly4vanMvbWVudS5qcz84NzdlIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFRSQU5TSVRJT05fRVZFTlRTID0gWyd0cmFuc2l0aW9uZW5kJywgJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCAnb1RyYW5zaXRpb25FbmQnXVxyXG4vLyBjb25zdCBUUkFOU0lUSU9OX1BST1BFUlRJRVMgPSBbJ3RyYW5zaXRpb24nLCAnTW96VHJhbnNpdGlvbicsICd3ZWJraXRUcmFuc2l0aW9uJywgJ1dlYmtpdFRyYW5zaXRpb24nLCAnT1RyYW5zaXRpb24nXVxyXG5jb25zdCBERUxUQSA9IDVcclxuXHJcbmNsYXNzIE1lbnUge1xyXG4gIGNvbnN0cnVjdG9yKGVsLCBjb25maWcgPSB7fSwgX1BTID0gbnVsbCkge1xyXG4gICAgdGhpcy5fZWwgPSBlbFxyXG4gICAgdGhpcy5faG9yaXpvbnRhbCA9IGNvbmZpZy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXHJcbiAgICB0aGlzLl9hbmltYXRlID0gY29uZmlnLmFuaW1hdGUgIT09IGZhbHNlXHJcbiAgICB0aGlzLl9hY2NvcmRpb24gPSBjb25maWcuYWNjb3JkaW9uICE9PSBmYWxzZVxyXG4gICAgdGhpcy5fc2hvd0Ryb3Bkb3duT25Ib3ZlciA9IEJvb2xlYW4oY29uZmlnLnNob3dEcm9wZG93bk9uSG92ZXIpXHJcbiAgICB0aGlzLl9jbG9zZUNoaWxkcmVuID0gQm9vbGVhbihjb25maWcuY2xvc2VDaGlsZHJlbilcclxuICAgIHRoaXMuX3J0bCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RpcicpID09PSAncnRsJyB8fCBkb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgnZGlyJykgPT09ICdydGwnXHJcblxyXG4gICAgdGhpcy5fb25PcGVuID0gY29uZmlnLm9uT3BlbiB8fCAoKCkgPT4ge30pXHJcbiAgICB0aGlzLl9vbk9wZW5lZCA9IGNvbmZpZy5vbk9wZW5lZCB8fCAoKCkgPT4ge30pXHJcbiAgICB0aGlzLl9vbkNsb3NlID0gY29uZmlnLm9uQ2xvc2UgfHwgKCgpID0+IHt9KVxyXG4gICAgdGhpcy5fb25DbG9zZWQgPSBjb25maWcub25DbG9zZWQgfHwgKCgpID0+IHt9KVxyXG5cclxuICAgIHRoaXMuX3BzU2Nyb2xsID0gbnVsbFxyXG4gICAgdGhpcy5fdG9wUGFyZW50ID0gbnVsbFxyXG4gICAgdGhpcy5fbWVudUJnQ2xhc3MgPSBudWxsXHJcblxyXG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnbWVudScpXHJcbiAgICBlbC5jbGFzc0xpc3RbdGhpcy5fYW5pbWF0ZSA/ICdyZW1vdmUnIDogJ2FkZCddKCdtZW51LW5vLWFuaW1hdGlvbicpXHJcblxyXG4gICAgaWYgKCF0aGlzLl9ob3Jpem9udGFsKSB7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ21lbnUtdmVydGljYWwnKVxyXG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdtZW51LWhvcml6b250YWwnKVxyXG5cclxuICAgICAgY29uc3QgUGVyZmVjdFNjcm9sbGJhckxpYiA9IF9QUyB8fCB3aW5kb3cuUGVyZmVjdFNjcm9sbGJhclxyXG5cclxuICAgICAgaWYgKFBlcmZlY3RTY3JvbGxiYXJMaWIpIHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxiYXIgPSBuZXcgUGVyZmVjdFNjcm9sbGJhckxpYihlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpLCB7XHJcbiAgICAgICAgICBzdXBwcmVzc1Njcm9sbFg6IHRydWUsXHJcbiAgICAgICAgICB3aGVlbFByb3BhZ2F0aW9uOiAhTWVudS5faGFzQ2xhc3MoJ2xheW91dC1tZW51LWZpeGVkIGxheW91dC1tZW51LWZpeGVkLW9mZmNhbnZhcycpXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgd2luZG93LkhlbHBlcnMubWVudVBzU2Nyb2xsID0gdGhpcy5fc2Nyb2xsYmFyXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWwucXVlcnlTZWxlY3RvcignLm1lbnUtaW5uZXInKS5jbGFzc0xpc3QuYWRkKCdvdmVyZmxvdy1hdXRvJylcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnbWVudS1ob3Jpem9udGFsJylcclxuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWVudS12ZXJ0aWNhbCcpXHJcblxyXG4gICAgICB0aGlzLl9pbm5lciA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJylcclxuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5faW5uZXIucGFyZW50Tm9kZVxyXG5cclxuICAgICAgdGhpcy5fcHJldkJ0biA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWhvcml6b250YWwtcHJldicpXHJcbiAgICAgIGlmICghdGhpcy5fcHJldkJ0bikge1xyXG4gICAgICAgIHRoaXMuX3ByZXZCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcclxuICAgICAgICB0aGlzLl9wcmV2QnRuLmhyZWYgPSAnIydcclxuICAgICAgICB0aGlzLl9wcmV2QnRuLmNsYXNzTmFtZSA9ICdtZW51LWhvcml6b250YWwtcHJldidcclxuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcHJldkJ0bilcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fd3JhcHBlciA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWhvcml6b250YWwtd3JhcHBlcicpXHJcbiAgICAgIGlmICghdGhpcy5fd3JhcHBlcikge1xyXG4gICAgICAgIHRoaXMuX3dyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgICAgIHRoaXMuX3dyYXBwZXIuY2xhc3NOYW1lID0gJ21lbnUtaG9yaXpvbnRhbC13cmFwcGVyJ1xyXG4gICAgICAgIHRoaXMuX3dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5faW5uZXIpXHJcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3dyYXBwZXIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX25leHRCdG4gPSBlbC5xdWVyeVNlbGVjdG9yKCcubWVudS1ob3Jpem9udGFsLW5leHQnKVxyXG4gICAgICBpZiAoIXRoaXMuX25leHRCdG4pIHtcclxuICAgICAgICB0aGlzLl9uZXh0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXHJcbiAgICAgICAgdGhpcy5fbmV4dEJ0bi5ocmVmID0gJyMnXHJcbiAgICAgICAgdGhpcy5fbmV4dEJ0bi5jbGFzc05hbWUgPSAnbWVudS1ob3Jpem9udGFsLW5leHQnXHJcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX25leHRCdG4pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2lubmVyUG9zaXRpb24gPSAwXHJcbiAgICAgIHRoaXMudXBkYXRlKClcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZGQgZGF0YSBhdHRyaWJ1dGUgZm9yIGJnIGNvbG9yIGNsYXNzIG9mIG1lbnVcclxuICAgIGNvbnN0IG1lbnVDbGFzc0xpc3QgPSBlbC5jbGFzc0xpc3RcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVDbGFzc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKG1lbnVDbGFzc0xpc3RbaV0uc3RhcnRzV2l0aCgnYmctJykpIHtcclxuICAgICAgICB0aGlzLl9tZW51QmdDbGFzcyA9IG1lbnVDbGFzc0xpc3RbaV1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLWJnLWNsYXNzJywgdGhpcy5fbWVudUJnQ2xhc3MpXHJcblxyXG4gICAgLy8gU3dpdGNoIHRvIHZlcnRpY2FsIG1lbnUgb24gc21hbGwgc2NyZWVuIGZvciBob3Jpem9udGFsIG1lbnUgbGF5b3V0IG9uIHBhZ2UgbG9hZFxyXG4gICAgaWYgKHRoaXMuX2hvcml6b250YWwgJiYgd2luZG93LmlubmVyV2lkdGggPCB3aW5kb3cuSGVscGVycy5MQVlPVVRfQlJFQUtQT0lOVCkgdGhpcy5zd2l0Y2hNZW51KCd2ZXJ0aWNhbCcpXHJcblxyXG4gICAgdGhpcy5fYmluZEV2ZW50cygpXHJcblxyXG4gICAgLy8gTGluayBtZW51IGluc3RhbmNlIHRvIGVsZW1lbnRcclxuICAgIGVsLm1lbnVJbnN0YW5jZSA9IHRoaXNcclxuICB9XHJcblxyXG4gIF9iaW5kRXZlbnRzKCkge1xyXG4gICAgLy8gQ2xpY2sgRXZlbnRcclxuICAgIHRoaXMuX2V2bnRFbENsaWNrID0gZSA9PiB7XHJcbiAgICAgIC8vIEZpbmQgdG9wIHBhcmVudCBlbGVtZW50XHJcbiAgICAgIGlmIChlLnRhcmdldC5jbG9zZXN0KCd1bCcpICYmIGUudGFyZ2V0LmNsb3Nlc3QoJ3VsJykuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LWlubmVyJykpIHtcclxuICAgICAgICBjb25zdCBtZW51SXRlbSA9IE1lbnUuX2ZpbmRQYXJlbnQoZS50YXJnZXQsICdtZW51LWl0ZW0nLCBmYWxzZSlcclxuXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXHJcbiAgICAgICAgaWYgKG1lbnVJdGVtKSB0aGlzLl90b3BQYXJlbnQgPSBtZW51SXRlbS5jaGlsZE5vZGVzWzBdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRvZ2dsZUxpbmsgPSBlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtdG9nZ2xlJylcclxuICAgICAgICA/IGUudGFyZ2V0XHJcbiAgICAgICAgOiBNZW51Ll9maW5kUGFyZW50KGUudGFyZ2V0LCAnbWVudS10b2dnbGUnLCBmYWxzZSlcclxuXHJcbiAgICAgIGlmICh0b2dnbGVMaW5rKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgICAgIGlmICh0b2dnbGVMaW5rLmdldEF0dHJpYnV0ZSgnZGF0YS1ob3ZlcicpICE9PSAndHJ1ZScpIHtcclxuICAgICAgICAgIHRoaXMudG9nZ2xlKHRvZ2dsZUxpbmspXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoKCF0aGlzLl9zaG93RHJvcGRvd25PbkhvdmVyICYmIHRoaXMuX2hvcml6b250YWwpIHx8ICF0aGlzLl9ob3Jpem9udGFsIHx8IHdpbmRvdy5IZWxwZXJzLmlzTW9iaWxlRGV2aWNlKVxyXG4gICAgICB0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2V2bnRFbENsaWNrKVxyXG5cclxuICAgIHRoaXMuX2V2bnRXaW5kb3dSZXNpemUgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlKClcclxuICAgICAgaWYgKHRoaXMuX2xhc3RXaWR0aCAhPT0gd2luZG93LmlubmVyV2lkdGgpIHtcclxuICAgICAgICB0aGlzLl9sYXN0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxyXG4gICAgICAgIHRoaXMudXBkYXRlKClcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaG9yaXpvbnRhbE1lbnVUZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS10ZW1wbGF0ZV49J2hvcml6b250YWwtbWVudSddXCIpXHJcbiAgICAgIGlmICghdGhpcy5faG9yaXpvbnRhbCAmJiAhaG9yaXpvbnRhbE1lbnVUZW1wbGF0ZSkgdGhpcy5tYW5hZ2VTY3JvbGwoKVxyXG4gICAgfVxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX2V2bnRXaW5kb3dSZXNpemUpXHJcblxyXG4gICAgaWYgKHRoaXMuX2hvcml6b250YWwpIHtcclxuICAgICAgdGhpcy5fZXZudFByZXZCdG5DbGljayA9IGUgPT4ge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgIGlmICh0aGlzLl9wcmV2QnRuLmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5fc2xpZGUoJ3ByZXYnKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX3ByZXZCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9ldm50UHJldkJ0bkNsaWNrKVxyXG5cclxuICAgICAgdGhpcy5fZXZudE5leHRCdG5DbGljayA9IGUgPT4ge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgIGlmICh0aGlzLl9uZXh0QnRuLmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5fc2xpZGUoJ25leHQnKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX25leHRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9ldm50TmV4dEJ0bkNsaWNrKVxyXG5cclxuICAgICAgdGhpcy5fZXZudEJvZHlDbGljayA9IGUgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5faW5uZXIuY29udGFpbnMoZS50YXJnZXQpICYmIHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWlubmVyID4gLm1lbnUtaXRlbS5vcGVuJykubGVuZ3RoKVxyXG4gICAgICAgICAgdGhpcy5jbG9zZUFsbCgpXHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuX2V2bnRCb2R5Q2xpY2spXHJcblxyXG4gICAgICBpZiAodGhpcy5fc2hvd0Ryb3Bkb3duT25Ib3Zlcikge1xyXG4gICAgICAgIC8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgICAqIEhvcml6b250YWwgTWVudSBNb3VzZSBPdmVyIEV2ZW50XHJcbiAgICAgICAgICogPyBlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0IGNvbmRpdGlvbiB0byBkaXNhYmxlIG1vdXNlb3ZlciBldmVudCBvbiB3aG9sZSBtZW51IG5hdmJhclxyXG4gICAgICAgICAqID8gIWUudGFyZ2V0LnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykgdG8gZGlzYWJsZSBtb3VzZW92ZXIgZXZlbnRzIG9uIGljb24sIHRleHQgYW5kIGRyb3Bkb3duIGFycm93XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZXZudEVsTW91c2VPdmVyID0gZSA9PiB7XHJcbiAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCAmJiAhZS50YXJnZXQucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSkge1xyXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVMaW5rID0gZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LXRvZ2dsZScpID8gZS50YXJnZXQgOiBudWxsXHJcblxyXG4gICAgICAgICAgICBpZiAodG9nZ2xlTGluaykge1xyXG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG5cclxuICAgICAgICAgICAgICBpZiAodG9nZ2xlTGluay5nZXRBdHRyaWJ1dGUoJ2RhdGEtaG92ZXInKSAhPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSh0b2dnbGVMaW5rKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5faG9yaXpvbnRhbCAmJiB3aW5kb3cuc2NyZWVuLndpZHRoID4gd2luZG93LkhlbHBlcnMuTEFZT1VUX0JSRUFLUE9JTlQpIHtcclxuICAgICAgICAgIHRoaXMuX2VsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHRoaXMuX2V2bnRFbE1vdXNlT3ZlcilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgICAqIEhvcml6b250YWwgTWVudSBNb3VzZSBPdXQgRXZlbnRcclxuICAgICAgICAgKiA/IGUudGFyZ2V0ICE9PSBlLmN1cnJlbnRUYXJnZXQgY29uZGl0aW9uIHRvIGRpc2FibGUgbW91c2VvdXQgZXZlbnQgb24gd2hvbGUgbWVudSBuYXZiYXJcclxuICAgICAgICAgKiA/IG1vdXNlT3V0RWwucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSB0byBjaGVjayBpZiB0aGUgbW91c2VvdXQgZWxlbWVudCBoYXMgb3BlbiBjbGFzcyBvciBub3RcclxuICAgICAgICAgKiA/ICFtb3VzZU91dEVsLmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSB0byBjaGVjayBpZiBtb3VzZW91dCB3YXMgZnJvbSBzaW5nbGUgbWVudSBpdGVtIGFuZCBub3QgZnJvbSB0aGUgb25lIHdoaWNoIGhhcyBzdWJtZW51XHJcbiAgICAgICAgICogPyAhbW91c2VPdmVyRWwucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtbGluaycpIHRvIGRpc2FibGUgbW91c2VvdXQgZXZlbnQgZm9yIGljb24sIHRleHQgYW5kIGRyb3Bkb3duIGFycm93XHJcbiAgICAgICAgICovXHJcbiAgICAgICAgdGhpcy5fZXZudEVsTW91c2VPdXQgPSBlID0+IHtcclxuICAgICAgICAgIGNvbnN0IG1haW5FbCA9IGUuY3VycmVudFRhcmdldFxyXG4gICAgICAgICAgY29uc3QgbW91c2VPdXRFbCA9IGUudGFyZ2V0XHJcbiAgICAgICAgICBjb25zdCBtb3VzZU92ZXJFbCA9IGUudG9FbGVtZW50IHx8IGUucmVsYXRlZFRhcmdldFxyXG5cclxuICAgICAgICAgIC8vIEZpbmQgYWJzb2x1dGUgcGFyZW50IG9mIGFueSBtZW51IGl0ZW0gZnJvbSB3aGljaCBtb3VzZW91dCBldmVudCB0cmlnZ2VyZWRcclxuICAgICAgICAgIGlmIChtb3VzZU91dEVsLmNsb3Nlc3QoJ3VsJykgJiYgbW91c2VPdXRFbC5jbG9zZXN0KCd1bCcpLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pbm5lcicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvcFBhcmVudCA9IG1vdXNlT3V0RWxcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG1vdXNlT3V0RWwgIT09IG1haW5FbCAmJlxyXG4gICAgICAgICAgICAobW91c2VPdXRFbC5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpIHx8ICFtb3VzZU91dEVsLmNsYXNzTGlzdC5jb250YWlucygnbWVudS10b2dnbGUnKSkgJiZcclxuICAgICAgICAgICAgbW91c2VPdmVyRWwgJiZcclxuICAgICAgICAgICAgbW91c2VPdmVyRWwucGFyZW50Tm9kZSAmJlxyXG4gICAgICAgICAgICAhbW91c2VPdmVyRWwucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtbGluaycpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgLy8gV2hlbiBtb3VzZSBnb2VzIHRvdGFsbHkgb3V0IG9mIG1lbnUgaXRlbXMsIGNoZWNrIG1vdXNlIG92ZXIgZWxlbWVudCB0byBjb25maXJtIGl0J3Mgbm90IHRoZSBjaGlsZCBvZiBtZW51LCBvbmNlIGNvbmZpcm1lZCBjbG9zZSB0aGUgbWVudVxyXG4gICAgICAgICAgICBpZiAodGhpcy5fdG9wUGFyZW50ICYmICFNZW51LmNoaWxkT2YobW91c2VPdmVyRWwsIHRoaXMuX3RvcFBhcmVudC5wYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRvZ2dsZUxpbmsgPSB0aGlzLl90b3BQYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LXRvZ2dsZScpID8gdGhpcy5fdG9wUGFyZW50IDogbnVsbFxyXG5cclxuICAgICAgICAgICAgICBpZiAodG9nZ2xlTGluaykge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRvZ2dsZUxpbmsuZ2V0QXR0cmlidXRlKCdkYXRhLWhvdmVyJykgIT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZSh0b2dnbGVMaW5rKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl90b3BQYXJlbnQgPSBudWxsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBXaGVuIG1vdXNlIGVudGVyIHRoZSBzdWIgbWVudSwgY2hlY2sgaWYgaXQncyBjaGlsZCBvZiB0aGUgaW5pdGlhbGx5IG1vdXNlIG92ZXJlZCBtZW51IGl0ZW0oQWN0dWFsIFBhcmVudCksXHJcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgdGhlIHBhcmVudCBkbyBub3QgY2xvc2UgdGhlIHN1YiBtZW51IGVsc2UgY2xvc2UgdGhlIHN1YiBtZW51XHJcbiAgICAgICAgICAgIGlmIChNZW51LmNoaWxkT2YobW91c2VPdmVyRWwsIG1vdXNlT3V0RWwucGFyZW50Tm9kZSkpIHtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0b2dnbGVMaW5rID0gbW91c2VPdXRFbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtdG9nZ2xlJykgPyBtb3VzZU91dEVsIDogbnVsbFxyXG5cclxuICAgICAgICAgICAgaWYgKHRvZ2dsZUxpbmspIHtcclxuICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHRvZ2dsZUxpbmsuZ2V0QXR0cmlidXRlKCdkYXRhLWhvdmVyJykgIT09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGUodG9nZ2xlTGluaylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2hvcml6b250YWwgJiYgd2luZG93LnNjcmVlbi53aWR0aCA+IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XHJcbiAgICAgICAgICB0aGlzLl9lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIHRoaXMuX2V2bnRFbE1vdXNlT3V0KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNoaWxkT2YoLyogY2hpbGQgbm9kZSAqLyBjLCAvKiBwYXJlbnQgbm9kZSAqLyBwKSB7XHJcbiAgICAvLyByZXR1cm5zIGJvb2xlYW5cclxuICAgIGlmIChjLnBhcmVudE5vZGUpIHtcclxuICAgICAgd2hpbGUgKChjID0gYy5wYXJlbnROb2RlKSAmJiBjICE9PSBwKTtcclxuICAgICAgcmV0dXJuICEhY1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBfdW5iaW5kRXZlbnRzKCkge1xyXG4gICAgaWYgKHRoaXMuX2V2bnRFbENsaWNrKSB7XHJcbiAgICAgIHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5fZXZudEVsQ2xpY2spXHJcbiAgICAgIHRoaXMuX2V2bnRFbENsaWNrID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9ldm50RWxNb3VzZU92ZXIpIHtcclxuICAgICAgdGhpcy5fZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgdGhpcy5fZXZudEVsTW91c2VPdmVyKVxyXG4gICAgICB0aGlzLl9ldm50RWxNb3VzZU92ZXIgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2V2bnRFbE1vdXNlT3V0KSB7XHJcbiAgICAgIHRoaXMuX2VsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgdGhpcy5fZXZudEVsTW91c2VPdXQpXHJcbiAgICAgIHRoaXMuX2V2bnRFbE1vdXNlT3V0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9ldm50V2luZG93UmVzaXplKSB7XHJcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9ldm50V2luZG93UmVzaXplKVxyXG4gICAgICB0aGlzLl9ldm50V2luZG93UmVzaXplID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9ldm50Qm9keUNsaWNrKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9ldm50Qm9keUNsaWNrKVxyXG4gICAgICB0aGlzLl9ldm50Qm9keUNsaWNrID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9ldm50SW5uZXJNb3VzZW1vdmUpIHtcclxuICAgICAgdGhpcy5faW5uZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fZXZudElubmVyTW91c2Vtb3ZlKVxyXG4gICAgICB0aGlzLl9ldm50SW5uZXJNb3VzZW1vdmUgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2V2bnRJbm5lck1vdXNlbGVhdmUpIHtcclxuICAgICAgdGhpcy5faW5uZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuX2V2bnRJbm5lck1vdXNlbGVhdmUpXHJcbiAgICAgIHRoaXMuX2V2bnRJbm5lck1vdXNlbGVhdmUgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2lzUm9vdChpdGVtKSB7XHJcbiAgICByZXR1cm4gIU1lbnUuX2ZpbmRQYXJlbnQoaXRlbSwgJ21lbnUtaXRlbScsIGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9maW5kUGFyZW50KGVsLCBjbHMsIHRocm93RXJyb3IgPSB0cnVlKSB7XHJcbiAgICBpZiAoZWwudGFnTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHJldHVybiBudWxsXHJcbiAgICBlbCA9IGVsLnBhcmVudE5vZGVcclxuICAgIHdoaWxlIChlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJyAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNscykpIHtcclxuICAgICAgZWwgPSBlbC5wYXJlbnROb2RlXHJcbiAgICB9XHJcblxyXG4gICAgZWwgPSBlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJyA/IGVsIDogbnVsbFxyXG5cclxuICAgIGlmICghZWwgJiYgdGhyb3dFcnJvcikgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCBcXGAuJHtjbHN9XFxgIHBhcmVudCBlbGVtZW50YClcclxuXHJcbiAgICByZXR1cm4gZWxcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfZmluZENoaWxkKGVsLCBjbHMpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gZWwuY2hpbGROb2Rlc1xyXG4gICAgY29uc3QgZm91bmQgPSBbXVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGlmIChpdGVtc1tpXS5jbGFzc0xpc3QpIHtcclxuICAgICAgICBsZXQgcGFzc2VkID0gMFxyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNscy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1zW2ldLmNsYXNzTGlzdC5jb250YWlucyhjbHNbal0pKSBwYXNzZWQgKz0gMVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNscy5sZW5ndGggPT09IHBhc3NlZCkgZm91bmQucHVzaChpdGVtc1tpXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3VuZFxyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9maW5kTWVudShpdGVtKSB7XHJcbiAgICBsZXQgY3VyRWwgPSBpdGVtLmNoaWxkTm9kZXNbMF1cclxuICAgIGxldCBtZW51ID0gbnVsbFxyXG5cclxuICAgIHdoaWxlIChjdXJFbCAmJiAhbWVudSkge1xyXG4gICAgICBpZiAoY3VyRWwuY2xhc3NMaXN0ICYmIGN1ckVsLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1zdWInKSkgbWVudSA9IGN1ckVsXHJcbiAgICAgIGN1ckVsID0gY3VyRWwubmV4dFNpYmxpbmdcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW1lbnUpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgYC5tZW51LXN1YmAgZWxlbWVudCBmb3IgdGhlIGN1cnJlbnQgYC5tZW51LXRvZ2dsZWAnKVxyXG5cclxuICAgIHJldHVybiBtZW51XHJcbiAgfVxyXG5cclxuICAvLyBIYXMgY2xhc3NcclxuICBzdGF0aWMgX2hhc0NsYXNzKGNscywgZWwgPSB3aW5kb3cuSGVscGVycy5ST09UX0VMKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2VcclxuXHJcbiAgICBjbHMuc3BsaXQoJyAnKS5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGMpKSByZXN1bHQgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiByZXN1bHRcclxuICB9XHJcblxyXG4gIG9wZW4oZWwsIGNsb3NlQ2hpbGRyZW4gPSB0aGlzLl9jbG9zZUNoaWxkcmVuKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5fZmluZFVub3BlbmVkUGFyZW50KE1lbnUuX2dldEl0ZW0oZWwsIHRydWUpLCBjbG9zZUNoaWxkcmVuKVxyXG5cclxuICAgIGlmICghaXRlbSkgcmV0dXJuXHJcblxyXG4gICAgY29uc3QgdG9nZ2xlTGluayA9IE1lbnUuX2dldExpbmsoaXRlbSwgdHJ1ZSlcclxuXHJcbiAgICBNZW51Ll9wcm9taXNpZnkodGhpcy5fb25PcGVuLCB0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBNZW51Ll9maW5kTWVudShpdGVtKSlcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5faG9yaXpvbnRhbCB8fCAhTWVudS5faXNSb290KGl0ZW0pKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fYW5pbWF0ZSAmJiAhdGhpcy5faG9yaXpvbnRhbCkge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuX3RvZ2dsZUFuaW1hdGlvbih0cnVlLCBpdGVtLCBmYWxzZSkpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9hY2NvcmRpb24pIHRoaXMuX2Nsb3NlT3RoZXIoaXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYW5pbWF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVEcm9wZG93bih0cnVlLCBpdGVtLCBjbG9zZUNoaWxkcmVuKVxyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXHJcbiAgICAgICAgICAgIHRoaXMuX29uT3BlbmVkICYmIHRoaXMuX29uT3BlbmVkKHRoaXMsIGl0ZW0sIHRvZ2dsZUxpbmssIE1lbnUuX2ZpbmRNZW51KGl0ZW0pKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdvcGVuJylcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xyXG4gICAgICAgICAgICB0aGlzLl9vbk9wZW5lZCAmJiB0aGlzLl9vbk9wZW5lZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBNZW51Ll9maW5kTWVudShpdGVtKSlcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2FjY29yZGlvbikgdGhpcy5fY2xvc2VPdGhlcihpdGVtLCBjbG9zZUNoaWxkcmVuKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl90b2dnbGVEcm9wZG93bih0cnVlLCBpdGVtLCBjbG9zZUNoaWxkcmVuKVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xyXG4gICAgICAgICAgdGhpcy5fb25PcGVuZWQgJiYgdGhpcy5fb25PcGVuZWQodGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKCkgPT4ge30pXHJcbiAgfVxyXG5cclxuICBjbG9zZShlbCwgY2xvc2VDaGlsZHJlbiA9IHRoaXMuX2Nsb3NlQ2hpbGRyZW4sIF9hdXRvQ2xvc2UgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXRlbSA9IE1lbnUuX2dldEl0ZW0oZWwsIHRydWUpXHJcbiAgICBjb25zdCB0b2dnbGVMaW5rID0gTWVudS5fZ2V0TGluayhlbCwgdHJ1ZSlcclxuXHJcbiAgICBpZiAoIWl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykgfHwgaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHJldHVyblxyXG5cclxuICAgIE1lbnUuX3Byb21pc2lmeSh0aGlzLl9vbkNsb3NlLCB0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBNZW51Ll9maW5kTWVudShpdGVtKSwgX2F1dG9DbG9zZSlcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5faG9yaXpvbnRhbCB8fCAhTWVudS5faXNSb290KGl0ZW0pKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fYW5pbWF0ZSAmJiAhdGhpcy5faG9yaXpvbnRhbCkge1xyXG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuX3RvZ2dsZUFuaW1hdGlvbihmYWxzZSwgaXRlbSwgY2xvc2VDaGlsZHJlbikpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG5cclxuICAgICAgICAgICAgaWYgKGNsb3NlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICBjb25zdCBvcGVuZWQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0ub3BlbicpXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBvcGVuZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSBvcGVuZWRbaV0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgICAgICAgICAgdGhpcy5fb25DbG9zZWQgJiYgdGhpcy5fb25DbG9zZWQodGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3RvZ2dsZURyb3Bkb3duKGZhbHNlLCBpdGVtLCBjbG9zZUNoaWxkcmVuKVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xyXG4gICAgICAgICAgdGhpcy5fb25DbG9zZWQgJiYgdGhpcy5fb25DbG9zZWQodGhpcywgaXRlbSwgdG9nZ2xlTGluaywgTWVudS5fZmluZE1lbnUoaXRlbSkpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKCkgPT4ge30pXHJcbiAgfVxyXG5cclxuICBfY2xvc2VPdGhlcihpdGVtLCBjbG9zZUNoaWxkcmVuKSB7XHJcbiAgICBjb25zdCBvcGVuZWQgPSBNZW51Ll9maW5kQ2hpbGQoaXRlbS5wYXJlbnROb2RlLCBbJ21lbnUtaXRlbScsICdvcGVuJ10pXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBvcGVuZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGlmIChvcGVuZWRbaV0gIT09IGl0ZW0pIHRoaXMuY2xvc2Uob3BlbmVkW2ldLCBjbG9zZUNoaWxkcmVuKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKGVsLCBjbG9zZUNoaWxkcmVuID0gdGhpcy5fY2xvc2VDaGlsZHJlbikge1xyXG4gICAgY29uc3QgaXRlbSA9IE1lbnUuX2dldEl0ZW0oZWwsIHRydWUpXHJcbiAgICAvLyBjb25zdCB0b2dnbGVMaW5rID0gTWVudS5fZ2V0TGluayhlbCwgdHJ1ZSlcclxuXHJcbiAgICBpZiAoaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSkgdGhpcy5jbG9zZShpdGVtLCBjbG9zZUNoaWxkcmVuKVxyXG4gICAgZWxzZSB0aGlzLm9wZW4oaXRlbSwgY2xvc2VDaGlsZHJlbilcclxuICB9XHJcblxyXG4gIF90b2dnbGVEcm9wZG93bihzaG93LCBpdGVtLCBjbG9zZUNoaWxkcmVuKSB7XHJcbiAgICBjb25zdCBtZW51ID0gTWVudS5fZmluZE1lbnUoaXRlbSlcclxuICAgIGNvbnN0IGFjdHVhbEl0ZW0gPSBpdGVtXHJcbiAgICBsZXQgc3ViTWVudUl0ZW0gPSBmYWxzZVxyXG5cclxuICAgIGlmIChzaG93KSB7XHJcbiAgICAgIGlmIChNZW51Ll9maW5kUGFyZW50KGl0ZW0sICdtZW51LXN1YicsIGZhbHNlKSkge1xyXG4gICAgICAgIHN1Yk1lbnVJdGVtID0gdHJ1ZVxyXG4gICAgICAgIGl0ZW0gPSB0aGlzLl90b3BQYXJlbnQgPyB0aGlzLl90b3BQYXJlbnQucGFyZW50Tm9kZSA6IGl0ZW1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgd3JhcHBlcldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl93cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2lubmVyUG9zaXRpb25cclxuICAgICAgY29uc3QgaXRlbU9mZnNldCA9IHRoaXMuX2dldEl0ZW1PZmZzZXQoaXRlbSlcclxuICAgICAgY29uc3QgaXRlbVdpZHRoID0gTWF0aC5yb3VuZChpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG5cclxuICAgICAgaWYgKGl0ZW1PZmZzZXQgLSBERUxUQSA8PSAtMSAqIHBvc2l0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5faW5uZXJQb3NpdGlvbiA9IC0xICogaXRlbU9mZnNldFxyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW1PZmZzZXQgKyBwb3NpdGlvbiArIGl0ZW1XaWR0aCArIERFTFRBID49IHdyYXBwZXJXaWR0aCkge1xyXG4gICAgICAgIGlmIChpdGVtV2lkdGggPiB3cmFwcGVyV2lkdGgpIHtcclxuICAgICAgICAgIHRoaXMuX2lubmVyUG9zaXRpb24gPSAtMSAqIGl0ZW1PZmZzZXRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5faW5uZXJQb3NpdGlvbiA9IC0xICogKGl0ZW1PZmZzZXQgKyBpdGVtV2lkdGggLSB3cmFwcGVyV2lkdGgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBhY3R1YWxJdGVtLmNsYXNzTGlzdC5hZGQoJ29wZW4nKVxyXG5cclxuICAgICAgY29uc3QgbWVudVdpZHRoID0gTWF0aC5yb3VuZChtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG5cclxuICAgICAgaWYgKHN1Yk1lbnVJdGVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaXRlbU9mZnNldCArIHRoaXMuX2lubmVyUG9zaXRpb24gKyBtZW51V2lkdGggKiAyID4gd3JhcHBlcldpZHRoICYmXHJcbiAgICAgICAgICBtZW51V2lkdGggPCB3cmFwcGVyV2lkdGggJiZcclxuICAgICAgICAgIG1lbnVXaWR0aCA+PSBpdGVtV2lkdGhcclxuICAgICAgICApIHtcclxuICAgICAgICAgIG1lbnUuc3R5bGUubGVmdCA9IFt0aGlzLl9ydGwgPyAnMTAwJScgOiAnLTEwMCUnXVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBpdGVtT2Zmc2V0ICsgdGhpcy5faW5uZXJQb3NpdGlvbiArIG1lbnVXaWR0aCA+IHdyYXBwZXJXaWR0aCAmJlxyXG4gICAgICAgIG1lbnVXaWR0aCA8IHdyYXBwZXJXaWR0aCAmJlxyXG4gICAgICAgIG1lbnVXaWR0aCA+IGl0ZW1XaWR0aFxyXG4gICAgICApIHtcclxuICAgICAgICBtZW51LnN0eWxlW3RoaXMuX3J0bCA/ICdtYXJnaW5SaWdodCcgOiAnbWFyZ2luTGVmdCddID0gYC0ke21lbnVXaWR0aCAtIGl0ZW1XaWR0aH1weGBcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fY2xvc2VPdGhlcihhY3R1YWxJdGVtLCBjbG9zZUNoaWxkcmVuKVxyXG4gICAgICB0aGlzLl91cGRhdGVTbGlkZXIoKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdG9nZ2xlID0gTWVudS5fZmluZENoaWxkKGl0ZW0sIFsnbWVudS10b2dnbGUnXSlcclxuXHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgICAgdG9nZ2xlLmxlbmd0aCAmJiB0b2dnbGVbMF0ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWhvdmVyJywgJ3RydWUnKVxyXG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICBtZW51LnN0eWxlW3RoaXMuX3J0bCA/ICdtYXJnaW5SaWdodCcgOiAnbWFyZ2luTGVmdCddID0gbnVsbFxyXG5cclxuICAgICAgaWYgKGNsb3NlQ2hpbGRyZW4pIHtcclxuICAgICAgICBjb25zdCBvcGVuZWQgPSBtZW51LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWl0ZW0ub3BlbicpXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gb3BlbmVkLmxlbmd0aDsgaSA8IGw7IGkrKykgb3BlbmVkW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfc2xpZGUoZGlyZWN0aW9uKSB7XHJcbiAgICBjb25zdCB3cmFwcGVyV2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuX3dyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXHJcbiAgICBjb25zdCBpbm5lcldpZHRoID0gdGhpcy5faW5uZXJXaWR0aFxyXG4gICAgbGV0IG5ld1Bvc2l0aW9uXHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ25leHQnKSB7XHJcbiAgICAgIG5ld1Bvc2l0aW9uID0gdGhpcy5fZ2V0U2xpZGVOZXh0UG9zKClcclxuXHJcbiAgICAgIGlmIChpbm5lcldpZHRoICsgbmV3UG9zaXRpb24gPCB3cmFwcGVyV2lkdGgpIHtcclxuICAgICAgICBuZXdQb3NpdGlvbiA9IHdyYXBwZXJXaWR0aCAtIGlubmVyV2lkdGhcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3UG9zaXRpb24gPSB0aGlzLl9nZXRTbGlkZVByZXZQb3MoKVxyXG5cclxuICAgICAgaWYgKG5ld1Bvc2l0aW9uID4gMCkgbmV3UG9zaXRpb24gPSAwXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5faW5uZXJQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uXHJcbiAgICB0aGlzLnVwZGF0ZSgpXHJcbiAgfVxyXG5cclxuICBfZ2V0U2xpZGVOZXh0UG9zKCkge1xyXG4gICAgY29uc3Qgd3JhcHBlcldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl93cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9pbm5lclBvc2l0aW9uXHJcbiAgICBsZXQgY3VySXRlbSA9IHRoaXMuX2lubmVyLmNoaWxkTm9kZXNbMF1cclxuICAgIGxldCBsZWZ0ID0gMFxyXG5cclxuICAgIHdoaWxlIChjdXJJdGVtKSB7XHJcbiAgICAgIGlmIChjdXJJdGVtLnRhZ05hbWUpIHtcclxuICAgICAgICBjb25zdCBjdXJJdGVtV2lkdGggPSBNYXRoLnJvdW5kKGN1ckl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXHJcblxyXG4gICAgICAgIGlmIChsZWZ0ICsgcG9zaXRpb24gLSBERUxUQSA8PSB3cmFwcGVyV2lkdGggJiYgbGVmdCArIHBvc2l0aW9uICsgY3VySXRlbVdpZHRoICsgREVMVEEgPj0gd3JhcHBlcldpZHRoKSB7XHJcbiAgICAgICAgICBpZiAoY3VySXRlbVdpZHRoID4gd3JhcHBlcldpZHRoICYmIGxlZnQgPT09IC0xICogcG9zaXRpb24pIGxlZnQgKz0gY3VySXRlbVdpZHRoXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGVmdCArPSBjdXJJdGVtV2lkdGhcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VySXRlbSA9IGN1ckl0ZW0ubmV4dFNpYmxpbmdcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTEgKiBsZWZ0XHJcbiAgfVxyXG5cclxuICBfZ2V0U2xpZGVQcmV2UG9zKCkge1xyXG4gICAgY29uc3Qgd3JhcHBlcldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl93cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9pbm5lclBvc2l0aW9uXHJcbiAgICBsZXQgY3VySXRlbSA9IHRoaXMuX2lubmVyLmNoaWxkTm9kZXNbMF1cclxuICAgIGxldCBsZWZ0ID0gMFxyXG5cclxuICAgIHdoaWxlIChjdXJJdGVtKSB7XHJcbiAgICAgIGlmIChjdXJJdGVtLnRhZ05hbWUpIHtcclxuICAgICAgICBjb25zdCBjdXJJdGVtV2lkdGggPSBNYXRoLnJvdW5kKGN1ckl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXHJcblxyXG4gICAgICAgIGlmIChsZWZ0IC0gREVMVEEgPD0gLTEgKiBwb3NpdGlvbiAmJiBsZWZ0ICsgY3VySXRlbVdpZHRoICsgREVMVEEgPj0gLTEgKiBwb3NpdGlvbikge1xyXG4gICAgICAgICAgaWYgKGN1ckl0ZW1XaWR0aCA8PSB3cmFwcGVyV2lkdGgpIGxlZnQgPSBsZWZ0ICsgY3VySXRlbVdpZHRoIC0gd3JhcHBlcldpZHRoXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGVmdCArPSBjdXJJdGVtV2lkdGhcclxuICAgICAgfVxyXG5cclxuICAgICAgY3VySXRlbSA9IGN1ckl0ZW0ubmV4dFNpYmxpbmdcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTEgKiBsZWZ0XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgX2dldEl0ZW0oZWwsIHRvZ2dsZSkge1xyXG4gICAgbGV0IGl0ZW0gPSBudWxsXHJcbiAgICBjb25zdCBzZWxlY3RvciA9IHRvZ2dsZSA/ICdtZW51LXRvZ2dsZScgOiAnbWVudS1saW5rJ1xyXG5cclxuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtaXRlbScpKSB7XHJcbiAgICAgIGlmIChNZW51Ll9maW5kQ2hpbGQoZWwsIFtzZWxlY3Rvcl0pLmxlbmd0aCkgaXRlbSA9IGVsXHJcbiAgICB9IGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhzZWxlY3RvcikpIHtcclxuICAgICAgaXRlbSA9IGVsLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdtZW51LWl0ZW0nKSA/IGVsLnBhcmVudE5vZGUgOiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0b2dnbGUgPyAnVG9nZ2FibGUgJyA6ICcnfVxcYC5tZW51LWl0ZW1cXGAgZWxlbWVudCBub3QgZm91bmQuYClcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaXRlbVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9nZXRMaW5rKGVsLCB0b2dnbGUpIHtcclxuICAgIGxldCBmb3VuZCA9IFtdXHJcbiAgICBjb25zdCBzZWxlY3RvciA9IHRvZ2dsZSA/ICdtZW51LXRvZ2dsZScgOiAnbWVudS1saW5rJ1xyXG5cclxuICAgIGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoc2VsZWN0b3IpKSBmb3VuZCA9IFtlbF1cclxuICAgIGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pdGVtJykpIGZvdW5kID0gTWVudS5fZmluZENoaWxkKGVsLCBbc2VsZWN0b3JdKVxyXG5cclxuICAgIGlmICghZm91bmQubGVuZ3RoKSB0aHJvdyBuZXcgRXJyb3IoYFxcYCR7c2VsZWN0b3J9XFxgIGVsZW1lbnQgbm90IGZvdW5kLmApXHJcblxyXG4gICAgcmV0dXJuIGZvdW5kWzBdXHJcbiAgfVxyXG5cclxuICBfZmluZFVub3BlbmVkUGFyZW50KGl0ZW0sIGNsb3NlQ2hpbGRyZW4pIHtcclxuICAgIGxldCB0cmVlID0gW11cclxuICAgIGxldCBwYXJlbnRJdGVtID0gbnVsbFxyXG5cclxuICAgIHdoaWxlIChpdGVtKSB7XHJcbiAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnZGlzYWJsZWQnKSkge1xyXG4gICAgICAgIHBhcmVudEl0ZW0gPSBudWxsXHJcbiAgICAgICAgdHJlZSA9IFtdXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFpdGVtLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpKSBwYXJlbnRJdGVtID0gaXRlbVxyXG4gICAgICAgIHRyZWUucHVzaChpdGVtKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtID0gTWVudS5fZmluZFBhcmVudChpdGVtLCAnbWVudS1pdGVtJywgZmFsc2UpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFwYXJlbnRJdGVtKSByZXR1cm4gbnVsbFxyXG4gICAgaWYgKHRyZWUubGVuZ3RoID09PSAxKSByZXR1cm4gcGFyZW50SXRlbVxyXG5cclxuICAgIHRyZWUgPSB0cmVlLnNsaWNlKDAsIHRyZWUuaW5kZXhPZihwYXJlbnRJdGVtKSlcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRyZWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIHRyZWVbaV0uY2xhc3NMaXN0LmFkZCgnb3BlbicpXHJcblxyXG4gICAgICBpZiAodGhpcy5fYWNjb3JkaW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb3BlbmVkSXRlbXMgPSBNZW51Ll9maW5kQ2hpbGQodHJlZVtpXS5wYXJlbnROb2RlLCBbJ21lbnUtaXRlbScsICdvcGVuJ10pXHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwLCBrID0gb3BlbmVkSXRlbXMubGVuZ3RoOyBqIDwgazsgaisrKSB7XHJcbiAgICAgICAgICBpZiAob3BlbmVkSXRlbXNbal0gIT09IHRyZWVbaV0pIHtcclxuICAgICAgICAgICAgb3BlbmVkSXRlbXNbal0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXHJcblxyXG4gICAgICAgICAgICBpZiAoY2xvc2VDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9wZW5lZENoaWxkcmVuID0gb3BlbmVkSXRlbXNbal0ucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbS5vcGVuJylcclxuICAgICAgICAgICAgICBmb3IgKGxldCB4ID0gMCwgeiA9IG9wZW5lZENoaWxkcmVuLmxlbmd0aDsgeCA8IHo7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgb3BlbmVkQ2hpbGRyZW5beF0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmVudEl0ZW1cclxuICB9XHJcblxyXG4gIF90b2dnbGVBbmltYXRpb24ob3BlbiwgaXRlbSwgY2xvc2VDaGlsZHJlbikge1xyXG4gICAgY29uc3QgdG9nZ2xlTGluayA9IE1lbnUuX2dldExpbmsoaXRlbSwgdHJ1ZSlcclxuICAgIGNvbnN0IG1lbnUgPSBNZW51Ll9maW5kTWVudShpdGVtKVxyXG5cclxuICAgIE1lbnUuX3VuYmluZEFuaW1hdGlvbkVuZEV2ZW50KGl0ZW0pXHJcblxyXG4gICAgY29uc3QgbGlua0hlaWdodCA9IE1hdGgucm91bmQodG9nZ2xlTGluay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXHJcblxyXG4gICAgaXRlbS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXHJcblxyXG4gICAgY29uc3QgY2xlYXJJdGVtU3R5bGUgPSAoKSA9PiB7XHJcbiAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1pdGVtLWFuaW1hdGluZycpXHJcbiAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1pdGVtLWNsb3NpbmcnKVxyXG4gICAgICBpdGVtLnN0eWxlLm92ZXJmbG93ID0gbnVsbFxyXG4gICAgICBpdGVtLnN0eWxlLmhlaWdodCA9IG51bGxcclxuXHJcbiAgICAgIGlmICghdGhpcy5faG9yaXpvbnRhbCkgdGhpcy51cGRhdGUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcGVuKSB7XHJcbiAgICAgIGl0ZW0uc3R5bGUuaGVpZ2h0ID0gYCR7bGlua0hlaWdodH1weGBcclxuICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdtZW51LWl0ZW0tYW5pbWF0aW5nJylcclxuICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdvcGVuJylcclxuXHJcbiAgICAgIE1lbnUuX2JpbmRBbmltYXRpb25FbmRFdmVudChpdGVtLCAoKSA9PiB7XHJcbiAgICAgICAgY2xlYXJJdGVtU3R5bGUoKVxyXG4gICAgICAgIHRoaXMuX29uT3BlbmVkKHRoaXMsIGl0ZW0sIHRvZ2dsZUxpbmssIG1lbnUpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpdGVtLnN0eWxlLmhlaWdodCA9IGAke2xpbmtIZWlnaHQgKyBNYXRoLnJvdW5kKG1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KX1weGBcclxuICAgICAgfSwgNTApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtLnN0eWxlLmhlaWdodCA9IGAke2xpbmtIZWlnaHQgKyBNYXRoLnJvdW5kKG1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KX1weGBcclxuICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdtZW51LWl0ZW0tYW5pbWF0aW5nJylcclxuICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdtZW51LWl0ZW0tY2xvc2luZycpXHJcblxyXG4gICAgICBNZW51Ll9iaW5kQW5pbWF0aW9uRW5kRXZlbnQoaXRlbSwgKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXHJcbiAgICAgICAgY2xlYXJJdGVtU3R5bGUoKVxyXG5cclxuICAgICAgICBpZiAoY2xvc2VDaGlsZHJlbikge1xyXG4gICAgICAgICAgY29uc3Qgb3BlbmVkID0gaXRlbS5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pdGVtLm9wZW4nKVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBvcGVuZWQubGVuZ3RoOyBpIDwgbDsgaSsrKSBvcGVuZWRbaV0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9vbkNsb3NlZCh0aGlzLCBpdGVtLCB0b2dnbGVMaW5rLCBtZW51KVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBgJHtsaW5rSGVpZ2h0fXB4YFxyXG4gICAgICB9LCA1MClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBfYmluZEFuaW1hdGlvbkVuZEV2ZW50KGVsLCBoYW5kbGVyKSB7XHJcbiAgICBjb25zdCBjYiA9IGUgPT4ge1xyXG4gICAgICBpZiAoZS50YXJnZXQgIT09IGVsKSByZXR1cm5cclxuICAgICAgTWVudS5fdW5iaW5kQW5pbWF0aW9uRW5kRXZlbnQoZWwpXHJcbiAgICAgIGhhbmRsZXIoZSlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZHVyYXRpb24gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkudHJhbnNpdGlvbkR1cmF0aW9uXHJcbiAgICBkdXJhdGlvbiA9IHBhcnNlRmxvYXQoZHVyYXRpb24pICogKGR1cmF0aW9uLmluZGV4T2YoJ21zJykgIT09IC0xID8gMSA6IDEwMDApXHJcblxyXG4gICAgZWwuX21lbnVBbmltYXRpb25FbmRFdmVudENiID0gY2JcclxuICAgIFRSQU5TSVRJT05fRVZFTlRTLmZvckVhY2goZXYgPT4gZWwuYWRkRXZlbnRMaXN0ZW5lcihldiwgZWwuX21lbnVBbmltYXRpb25FbmRFdmVudENiLCBmYWxzZSkpXHJcblxyXG4gICAgZWwuX21lbnVBbmltYXRpb25FbmRFdmVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY2IoeyB0YXJnZXQ6IGVsIH0pXHJcbiAgICB9LCBkdXJhdGlvbiArIDUwKVxyXG4gIH1cclxuXHJcbiAgX2dldEl0ZW1PZmZzZXQoaXRlbSkge1xyXG4gICAgbGV0IGN1ckl0ZW0gPSB0aGlzLl9pbm5lci5jaGlsZE5vZGVzWzBdXHJcbiAgICBsZXQgbGVmdCA9IDBcclxuXHJcbiAgICB3aGlsZSAoY3VySXRlbSAhPT0gaXRlbSkge1xyXG4gICAgICBpZiAoY3VySXRlbS50YWdOYW1lKSB7XHJcbiAgICAgICAgbGVmdCArPSBNYXRoLnJvdW5kKGN1ckl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1ckl0ZW0gPSBjdXJJdGVtLm5leHRTaWJsaW5nXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxlZnRcclxuICB9XHJcblxyXG4gIF91cGRhdGVTbGlkZXIod3JhcHBlcldpZHRoID0gbnVsbCwgaW5uZXJXaWR0aCA9IG51bGwsIHBvc2l0aW9uID0gbnVsbCkge1xyXG4gICAgY29uc3QgX3dyYXBwZXJXaWR0aCA9IHdyYXBwZXJXaWR0aCAhPT0gbnVsbCA/IHdyYXBwZXJXaWR0aCA6IE1hdGgucm91bmQodGhpcy5fd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aClcclxuICAgIGNvbnN0IF9pbm5lcldpZHRoID0gaW5uZXJXaWR0aCAhPT0gbnVsbCA/IGlubmVyV2lkdGggOiB0aGlzLl9pbm5lcldpZHRoXHJcbiAgICBjb25zdCBfcG9zaXRpb24gPSBwb3NpdGlvbiAhPT0gbnVsbCA/IHBvc2l0aW9uIDogdGhpcy5faW5uZXJQb3NpdGlvblxyXG5cclxuICAgIGlmIChfaW5uZXJXaWR0aCA8IF93cmFwcGVyV2lkdGggfHwgd2luZG93LmlubmVyV2lkdGggPCB3aW5kb3cuSGVscGVycy5MQVlPVVRfQlJFQUtQT0lOVCkge1xyXG4gICAgICB0aGlzLl9wcmV2QnRuLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpXHJcbiAgICAgIHRoaXMuX25leHRCdG4uY2xhc3NMaXN0LmFkZCgnZC1ub25lJylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3ByZXZCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJylcclxuICAgICAgdGhpcy5fbmV4dEJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKVxyXG4gICAgfVxyXG4gICAgaWYgKF9pbm5lcldpZHRoID4gX3dyYXBwZXJXaWR0aCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IHdpbmRvdy5IZWxwZXJzLkxBWU9VVF9CUkVBS1BPSU5UKSB7XHJcbiAgICAgIGlmIChfcG9zaXRpb24gPT09IDApIHRoaXMuX3ByZXZCdG4uY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKVxyXG4gICAgICBlbHNlIHRoaXMuX3ByZXZCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKVxyXG5cclxuICAgICAgaWYgKF9pbm5lcldpZHRoICsgX3Bvc2l0aW9uIDw9IF93cmFwcGVyV2lkdGgpIHRoaXMuX25leHRCdG4uY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKVxyXG4gICAgICBlbHNlIHRoaXMuX25leHRCdG4uY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIF9wcm9taXNpZnkoZm4sIC4uLmFyZ3MpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGZuKC4uLmFyZ3MpXHJcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXHJcbiAgfVxyXG5cclxuICBnZXQgX2lubmVyV2lkdGgoKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2lubmVyLmNoaWxkTm9kZXNcclxuICAgIGxldCB3aWR0aCA9IDBcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBpZiAoaXRlbXNbaV0udGFnTmFtZSkge1xyXG4gICAgICAgIHdpZHRoICs9IE1hdGgucm91bmQoaXRlbXNbaV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd2lkdGhcclxuICB9XHJcblxyXG4gIGdldCBfaW5uZXJQb3NpdGlvbigpIHtcclxuICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9pbm5lci5zdHlsZVt0aGlzLl9ydGwgPyAnbWFyZ2luUmlnaHQnIDogJ21hcmdpbkxlZnQnXSB8fCAnMHB4JywgMTApXHJcbiAgfVxyXG5cclxuICBzZXQgX2lubmVyUG9zaXRpb24odmFsdWUpIHtcclxuICAgIHRoaXMuX2lubmVyLnN0eWxlW3RoaXMuX3J0bCA/ICdtYXJnaW5SaWdodCcgOiAnbWFyZ2luTGVmdCddID0gYCR7dmFsdWV9cHhgXHJcbiAgICByZXR1cm4gdmFsdWVcclxuICB9XHJcblxyXG4gIHN0YXRpYyBfdW5iaW5kQW5pbWF0aW9uRW5kRXZlbnQoZWwpIHtcclxuICAgIGNvbnN0IGNiID0gZWwuX21lbnVBbmltYXRpb25FbmRFdmVudENiXHJcblxyXG4gICAgaWYgKGVsLl9tZW51QW5pbWF0aW9uRW5kRXZlbnRUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChlbC5fbWVudUFuaW1hdGlvbkVuZEV2ZW50VGltZW91dClcclxuICAgICAgZWwuX21lbnVBbmltYXRpb25FbmRFdmVudFRpbWVvdXQgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjYikgcmV0dXJuXHJcblxyXG4gICAgVFJBTlNJVElPTl9FVkVOVFMuZm9yRWFjaChldiA9PiBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2LCBjYiwgZmFsc2UpKVxyXG4gICAgZWwuX21lbnVBbmltYXRpb25FbmRFdmVudENiID0gbnVsbFxyXG4gIH1cclxuXHJcbiAgY2xvc2VBbGwoY2xvc2VDaGlsZHJlbiA9IHRoaXMuX2Nsb3NlQ2hpbGRyZW4pIHtcclxuICAgIGNvbnN0IG9wZW5lZCA9IHRoaXMuX2VsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tZW51LWlubmVyID4gLm1lbnUtaXRlbS5vcGVuJylcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IG9wZW5lZC5sZW5ndGg7IGkgPCBsOyBpKyspIHRoaXMuY2xvc2Uob3BlbmVkW2ldLCBjbG9zZUNoaWxkcmVuKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldERpc2FibGVkKGVsLCBkaXNhYmxlZCkge1xyXG4gICAgTWVudS5fZ2V0SXRlbShlbCwgZmFsc2UpLmNsYXNzTGlzdFtkaXNhYmxlZCA/ICdhZGQnIDogJ3JlbW92ZSddKCdkaXNhYmxlZCcpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNBY3RpdmUoZWwpIHtcclxuICAgIHJldHVybiBNZW51Ll9nZXRJdGVtKGVsLCBmYWxzZSkuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzT3BlbmVkKGVsKSB7XHJcbiAgICByZXR1cm4gTWVudS5fZ2V0SXRlbShlbCwgZmFsc2UpLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNEaXNhYmxlZChlbCkge1xyXG4gICAgcmV0dXJuIE1lbnUuX2dldEl0ZW0oZWwsIGZhbHNlKS5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJylcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGlmICghdGhpcy5faG9yaXpvbnRhbCkge1xyXG4gICAgICBpZiAodGhpcy5fc2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsYmFyLnVwZGF0ZSgpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xvc2VBbGwoKVxyXG5cclxuICAgICAgY29uc3Qgd3JhcHBlcldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl93cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKVxyXG4gICAgICBjb25zdCBpbm5lcldpZHRoID0gdGhpcy5faW5uZXJXaWR0aFxyXG4gICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLl9pbm5lclBvc2l0aW9uXHJcblxyXG4gICAgICBpZiAod3JhcHBlcldpZHRoIC0gcG9zaXRpb24gPiBpbm5lcldpZHRoKSB7XHJcbiAgICAgICAgcG9zaXRpb24gPSB3cmFwcGVyV2lkdGggLSBpbm5lcldpZHRoXHJcbiAgICAgICAgaWYgKHBvc2l0aW9uID4gMCkgcG9zaXRpb24gPSAwXHJcbiAgICAgICAgdGhpcy5faW5uZXJQb3NpdGlvbiA9IHBvc2l0aW9uXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX3VwZGF0ZVNsaWRlcih3cmFwcGVyV2lkdGgsIGlubmVyV2lkdGgsIHBvc2l0aW9uKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFuYWdlU2Nyb2xsKCkge1xyXG4gICAgY29uc3QgeyBQZXJmZWN0U2Nyb2xsYmFyIH0gPSB3aW5kb3dcclxuICAgIGNvbnN0IG1lbnVJbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZW51LWlubmVyJylcclxuXHJcbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCB3aW5kb3cuSGVscGVycy5MQVlPVVRfQlJFQUtQT0lOVCkge1xyXG4gICAgICBpZiAodGhpcy5fc2Nyb2xsYmFyICE9PSBudWxsKSB7XHJcbiAgICAgICAgLy8gd2luZG93LkhlbHBlcnMubWVudVBzU2Nyb2xsLmRlc3Ryb3koKVxyXG4gICAgICAgIHRoaXMuX3Njcm9sbGJhci5kZXN0cm95KClcclxuICAgICAgICB0aGlzLl9zY3JvbGxiYXIgPSBudWxsXHJcbiAgICAgIH1cclxuICAgICAgbWVudUlubmVyLmNsYXNzTGlzdC5hZGQoJ292ZXJmbG93LWF1dG8nKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3Njcm9sbGJhciA9PT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IG1lbnVTY3JvbGwgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpLCB7XHJcbiAgICAgICAgICBzdXBwcmVzc1Njcm9sbFg6IHRydWUsXHJcbiAgICAgICAgICB3aGVlbFByb3BhZ2F0aW9uOiBmYWxzZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gd2luZG93LkhlbHBlcnMubWVudVBzU2Nyb2xsID0gbWVudVNjcm9sbFxyXG4gICAgICAgIHRoaXMuX3Njcm9sbGJhciA9IG1lbnVTY3JvbGxcclxuICAgICAgfVxyXG4gICAgICBtZW51SW5uZXIuY2xhc3NMaXN0LnJlbW92ZSgnb3ZlcmZsb3ctYXV0bycpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hNZW51KG1lbnUpIHtcclxuICAgIC8vIFVuYmluZCBFdmVudHNcclxuICAgIHRoaXMuX3VuYmluZEV2ZW50cygpXHJcblxyXG4gICAgLy8gY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxyXG4gICAgY29uc3QgbmF2YmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbmF2LmxheW91dC1uYXZiYXInKVxyXG4gICAgY29uc3QgbmF2YmFyQ29sbGFwc2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbmF2YmFyLWNvbGxhcHNlJylcclxuICAgIC8qIGNvbnN0IGZ1bGxOYXZiYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LW5hdmJhci1mdWxsJylcclxuICAgIGNvbnN0IGNvbnRlbnROYXZiYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LWNvbnRlbnQtbmF2YmFyJylcclxuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNvbnRlbnQtd3JhcHBlcicpICovXHJcbiAgICBjb25zdCBhc2lkZU1lbnVXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2xheW91dC1tZW51IGRpdicpXHJcbiAgICBjb25zdCBhc2lkZU1lbnUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjbGF5b3V0LW1lbnUnKVxyXG4gICAgY29uc3QgaG9yek1lbnVDbGFzc2VzID0gWydsYXlvdXQtbWVudS1ob3Jpem9udGFsJywgJ21lbnUnLCAnbWVudS1ob3Jpem9udGFsJywgJ2NvbnRhaW5lci1mbHVpZCcsICdmbGV4LWdyb3ctMCddXHJcbiAgICBjb25zdCB2ZXJ0TWVudUNsYXNzZXMgPSBbJ2xheW91dC1tZW51JywgJ21lbnUnLCAnbWVudS12ZXJ0aWNhbCddXHJcbiAgICBjb25zdCBob3J6TWVudVdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudS1ob3Jpem9udGFsLXdyYXBwZXInKVxyXG4gICAgY29uc3QgbWVudUlubmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1lbnUtaW5uZXInKVxyXG4gICAgY29uc3QgYnJhbmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXBwLWJyYW5kJylcclxuICAgIGNvbnN0IG1lbnVUb2dnbGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1tZW51LXRvZ2dsZScpXHJcbiAgICBjb25zdCBhY3RpdmVNZW51SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWVudS1pbm5lciAuYWN0aXZlJylcclxuICAgIC8qIGNvbnN0IGxheW91dFBhZ2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0LXBhZ2UnKVxyXG4gICAgY29uc3QgbGF5b3V0Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxheW91dC1jb250YWluZXInKVxyXG4gICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250YWluZXItZmx1aWQnKSAqL1xyXG5cclxuICAgIC8vIGNvbnN0IHsgUGVyZmVjdFNjcm9sbGJhciB9ID0gd2luZG93XHJcblxyXG4gICAgaWYgKG1lbnUgPT09ICd2ZXJ0aWNhbCcpIHtcclxuICAgICAgdGhpcy5faG9yaXpvbnRhbCA9IGZhbHNlXHJcbiAgICAgIGFzaWRlTWVudVdyYXBwZXIuaW5zZXJ0QmVmb3JlKGJyYW5kLCBob3J6TWVudVdyYXBwZXIpXHJcbiAgICAgIGFzaWRlTWVudVdyYXBwZXIuaW5zZXJ0QmVmb3JlKG1lbnVJbm5lciwgaG9yek1lbnVXcmFwcGVyKVxyXG4gICAgICBhc2lkZU1lbnVXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2ZsZXgtY29sdW1uJywgJ3AtMCcpXHJcbiAgICAgIGFzaWRlTWVudS5jbGFzc0xpc3QucmVtb3ZlKC4uLmFzaWRlTWVudS5jbGFzc0xpc3QpXHJcbiAgICAgIGFzaWRlTWVudS5jbGFzc0xpc3QuYWRkKC4uLnZlcnRNZW51Q2xhc3NlcywgdGhpcy5fbWVudUJnQ2xhc3MpXHJcbiAgICAgIGJyYW5kLmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScsICdkLWxnLWZsZXgnKVxyXG4gICAgICBtZW51VG9nZ2xlci5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKVxyXG4gICAgICAvLyBpZiAoUGVyZmVjdFNjcm9sbGJhciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIC8vICAgdGhpcy5fcHNTY3JvbGwgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVudS1pbm5lcicpLCB7XHJcbiAgICAgIC8vICAgICBzdXBwcmVzc1Njcm9sbFg6IHRydWUsXHJcbiAgICAgIC8vICAgICB3aGVlbFByb3BhZ2F0aW9uOiAhTWVudS5faGFzQ2xhc3MoJ2xheW91dC1tZW51LWZpeGVkIGxheW91dC1tZW51LWZpeGVkLW9mZmNhbnZhcycpXHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgbWVudUlubmVyLmNsYXNzTGlzdC5hZGQoJ292ZXJmbG93LWF1dG8nKVxyXG5cclxuICAgICAgLy8gQWRkIG9wZW4gY2xhc3MgdG8gYWN0aXZlIGl0ZW1zXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlTWVudUl0ZW1zLmxlbmd0aCAtIDE7ICsraSkge1xyXG4gICAgICAgIGFjdGl2ZU1lbnVJdGVtc1tpXS5jbGFzc0xpc3QuYWRkKCdvcGVuJylcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faG9yaXpvbnRhbCA9IHRydWVcclxuICAgICAgbmF2YmFyLmNoaWxkcmVuWzBdLmluc2VydEJlZm9yZShicmFuZCwgbmF2YmFyQ29sbGFwc2UpXHJcbiAgICAgIGJyYW5kLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScsICdkLWxnLWZsZXgnKVxyXG4gICAgICBob3J6TWVudVdyYXBwZXIuYXBwZW5kQ2hpbGQobWVudUlubmVyKVxyXG4gICAgICBhc2lkZU1lbnVXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoJ2ZsZXgtY29sdW1uJywgJ3AtMCcpXHJcbiAgICAgIGFzaWRlTWVudS5jbGFzc0xpc3QucmVtb3ZlKC4uLmFzaWRlTWVudS5jbGFzc0xpc3QpXHJcbiAgICAgIGFzaWRlTWVudS5jbGFzc0xpc3QuYWRkKC4uLmhvcnpNZW51Q2xhc3NlcywgdGhpcy5fbWVudUJnQ2xhc3MpXHJcbiAgICAgIG1lbnVUb2dnbGVyLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpXHJcbiAgICAgIG1lbnVJbm5lci5jbGFzc0xpc3QucmVtb3ZlKCdvdmVyZmxvdy1hdXRvJylcclxuXHJcbiAgICAgIC8vIGlmIChQZXJmZWN0U2Nyb2xsYmFyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fcHNTY3JvbGwgIT09IG51bGwpIHtcclxuICAgICAgLy8gICB0aGlzLl9wc1Njcm9sbC5kZXN0cm95KClcclxuICAgICAgLy8gICB0aGlzLl9wc1Njcm9sbCA9IG51bGxcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIG9wZW4gY2xhc3MgZnJvbSBhY3RpdmUgaXRlbXNcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVNZW51SXRlbXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBhY3RpdmVNZW51SXRlbXNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9iaW5kRXZlbnRzKClcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBpZiAoIXRoaXMuX2VsKSByZXR1cm5cclxuXHJcbiAgICB0aGlzLl91bmJpbmRFdmVudHMoKVxyXG5cclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5fZWwucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbScpXHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBNZW51Ll91bmJpbmRBbmltYXRpb25FbmRFdmVudChpdGVtc1tpXSlcclxuICAgICAgaXRlbXNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1pdGVtLWFuaW1hdGluZycpXHJcbiAgICAgIGl0ZW1zW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKVxyXG4gICAgICBpdGVtc1tpXS5zdHlsZS5vdmVyZmxvdyA9IG51bGxcclxuICAgICAgaXRlbXNbaV0uc3R5bGUuaGVpZ2h0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1lbnVzID0gdGhpcy5fZWwucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtbWVudScpXHJcbiAgICBmb3IgKGxldCBpMiA9IDAsIGwyID0gbWVudXMubGVuZ3RoOyBpMiA8IGwyOyBpMisrKSB7XHJcbiAgICAgIG1lbnVzW2kyXS5zdHlsZS5tYXJnaW5SaWdodCA9IG51bGxcclxuICAgICAgbWVudXNbaTJdLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgnbWVudS1uby1hbmltYXRpb24nKVxyXG5cclxuICAgIGlmICh0aGlzLl93cmFwcGVyKSB7XHJcbiAgICAgIHRoaXMuX3ByZXZCdG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9wcmV2QnRuKVxyXG4gICAgICB0aGlzLl9uZXh0QnRuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fbmV4dEJ0bilcclxuICAgICAgdGhpcy5fd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9pbm5lciwgdGhpcy5fd3JhcHBlcilcclxuICAgICAgdGhpcy5fd3JhcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX3dyYXBwZXIpXHJcbiAgICAgIHRoaXMuX2lubmVyLnN0eWxlLm1hcmdpbkxlZnQgPSBudWxsXHJcbiAgICAgIHRoaXMuX2lubmVyLnN0eWxlLm1hcmdpblJpZ2h0ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2VsLm1lbnVJbnN0YW5jZSA9IG51bGxcclxuICAgIGRlbGV0ZSB0aGlzLl9lbC5tZW51SW5zdGFuY2VcclxuXHJcbiAgICB0aGlzLl9lbCA9IG51bGxcclxuICAgIHRoaXMuX2hvcml6b250YWwgPSBudWxsXHJcbiAgICB0aGlzLl9hbmltYXRlID0gbnVsbFxyXG4gICAgdGhpcy5fYWNjb3JkaW9uID0gbnVsbFxyXG4gICAgdGhpcy5fc2hvd0Ryb3Bkb3duT25Ib3ZlciA9IG51bGxcclxuICAgIHRoaXMuX2Nsb3NlQ2hpbGRyZW4gPSBudWxsXHJcbiAgICB0aGlzLl9ydGwgPSBudWxsXHJcbiAgICB0aGlzLl9vbk9wZW4gPSBudWxsXHJcbiAgICB0aGlzLl9vbk9wZW5lZCA9IG51bGxcclxuICAgIHRoaXMuX29uQ2xvc2UgPSBudWxsXHJcbiAgICB0aGlzLl9vbkNsb3NlZCA9IG51bGxcclxuICAgIGlmICh0aGlzLl9zY3JvbGxiYXIpIHtcclxuICAgICAgdGhpcy5fc2Nyb2xsYmFyLmRlc3Ryb3koKVxyXG4gICAgICB0aGlzLl9zY3JvbGxiYXIgPSBudWxsXHJcbiAgICB9XHJcbiAgICB0aGlzLl9pbm5lciA9IG51bGxcclxuICAgIHRoaXMuX3ByZXZCdG4gPSBudWxsXHJcbiAgICB0aGlzLl93cmFwcGVyID0gbnVsbFxyXG4gICAgdGhpcy5fbmV4dEJ0biA9IG51bGxcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCB7IE1lbnUgfVxyXG4iXSwibmFtZXMiOlsiVFJBTlNJVElPTl9FVkVOVFMiLCJERUxUQSIsIk1lbnUiLCJlbCIsImNvbmZpZyIsIl9QUyIsIl9lbCIsIl9ob3Jpem9udGFsIiwib3JpZW50YXRpb24iLCJfYW5pbWF0ZSIsImFuaW1hdGUiLCJfYWNjb3JkaW9uIiwiYWNjb3JkaW9uIiwiX3Nob3dEcm9wZG93bk9uSG92ZXIiLCJCb29sZWFuIiwic2hvd0Ryb3Bkb3duT25Ib3ZlciIsIl9jbG9zZUNoaWxkcmVuIiwiY2xvc2VDaGlsZHJlbiIsIl9ydGwiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldEF0dHJpYnV0ZSIsImJvZHkiLCJfb25PcGVuIiwib25PcGVuIiwiX29uT3BlbmVkIiwib25PcGVuZWQiLCJfb25DbG9zZSIsIm9uQ2xvc2UiLCJfb25DbG9zZWQiLCJvbkNsb3NlZCIsIl9wc1Njcm9sbCIsIl90b3BQYXJlbnQiLCJfbWVudUJnQ2xhc3MiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCJQZXJmZWN0U2Nyb2xsYmFyTGliIiwid2luZG93IiwiUGVyZmVjdFNjcm9sbGJhciIsIl9zY3JvbGxiYXIiLCJxdWVyeVNlbGVjdG9yIiwic3VwcHJlc3NTY3JvbGxYIiwid2hlZWxQcm9wYWdhdGlvbiIsIl9oYXNDbGFzcyIsIkhlbHBlcnMiLCJtZW51UHNTY3JvbGwiLCJfaW5uZXIiLCJjb250YWluZXIiLCJwYXJlbnROb2RlIiwiX3ByZXZCdG4iLCJjcmVhdGVFbGVtZW50IiwiaHJlZiIsImNsYXNzTmFtZSIsImFwcGVuZENoaWxkIiwiX3dyYXBwZXIiLCJfbmV4dEJ0biIsIl9pbm5lclBvc2l0aW9uIiwidXBkYXRlIiwibWVudUNsYXNzTGlzdCIsImkiLCJsZW5ndGgiLCJzdGFydHNXaXRoIiwic2V0QXR0cmlidXRlIiwiaW5uZXJXaWR0aCIsIkxBWU9VVF9CUkVBS1BPSU5UIiwic3dpdGNoTWVudSIsIl9iaW5kRXZlbnRzIiwibWVudUluc3RhbmNlIiwiX2V2bnRFbENsaWNrIiwiZSIsInRhcmdldCIsImNsb3Nlc3QiLCJjb250YWlucyIsIm1lbnVJdGVtIiwiX2ZpbmRQYXJlbnQiLCJjaGlsZE5vZGVzIiwidG9nZ2xlTGluayIsInByZXZlbnREZWZhdWx0IiwidG9nZ2xlIiwiaXNNb2JpbGVEZXZpY2UiLCJhZGRFdmVudExpc3RlbmVyIiwiX2V2bnRXaW5kb3dSZXNpemUiLCJfbGFzdFdpZHRoIiwiaG9yaXpvbnRhbE1lbnVUZW1wbGF0ZSIsIm1hbmFnZVNjcm9sbCIsIl9ldm50UHJldkJ0bkNsaWNrIiwiX3NsaWRlIiwiX2V2bnROZXh0QnRuQ2xpY2siLCJfZXZudEJvZHlDbGljayIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjbG9zZUFsbCIsIl9ldm50RWxNb3VzZU92ZXIiLCJjdXJyZW50VGFyZ2V0Iiwic3RvcFByb3BhZ2F0aW9uIiwic2NyZWVuIiwid2lkdGgiLCJfZXZudEVsTW91c2VPdXQiLCJtYWluRWwiLCJtb3VzZU91dEVsIiwibW91c2VPdmVyRWwiLCJ0b0VsZW1lbnQiLCJyZWxhdGVkVGFyZ2V0IiwiY2hpbGRPZiIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfZXZudElubmVyTW91c2Vtb3ZlIiwiX2V2bnRJbm5lck1vdXNlbGVhdmUiLCJpdGVtIiwiX2ZpbmRVbm9wZW5lZFBhcmVudCIsIl9nZXRJdGVtIiwiX2dldExpbmsiLCJfcHJvbWlzaWZ5IiwiX2ZpbmRNZW51IiwidGhlbiIsIl9pc1Jvb3QiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJfdG9nZ2xlQW5pbWF0aW9uIiwiX2Nsb3NlT3RoZXIiLCJfdG9nZ2xlRHJvcGRvd24iLCJjYXRjaCIsIl9hdXRvQ2xvc2UiLCJvcGVuZWQiLCJsIiwiX2ZpbmRDaGlsZCIsImNsb3NlIiwib3BlbiIsInNob3ciLCJtZW51IiwiYWN0dWFsSXRlbSIsInN1Yk1lbnVJdGVtIiwid3JhcHBlcldpZHRoIiwiTWF0aCIsInJvdW5kIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicG9zaXRpb24iLCJpdGVtT2Zmc2V0IiwiX2dldEl0ZW1PZmZzZXQiLCJpdGVtV2lkdGgiLCJtZW51V2lkdGgiLCJzdHlsZSIsImxlZnQiLCJfdXBkYXRlU2xpZGVyIiwicmVtb3ZlQXR0cmlidXRlIiwiZGlyZWN0aW9uIiwiX2lubmVyV2lkdGgiLCJuZXdQb3NpdGlvbiIsIl9nZXRTbGlkZU5leHRQb3MiLCJfZ2V0U2xpZGVQcmV2UG9zIiwiY3VySXRlbSIsInRhZ05hbWUiLCJjdXJJdGVtV2lkdGgiLCJuZXh0U2libGluZyIsInRyZWUiLCJwYXJlbnRJdGVtIiwicHVzaCIsInNsaWNlIiwiaW5kZXhPZiIsIm9wZW5lZEl0ZW1zIiwiaiIsImsiLCJvcGVuZWRDaGlsZHJlbiIsIngiLCJ6IiwiX3VuYmluZEFuaW1hdGlvbkVuZEV2ZW50IiwibGlua0hlaWdodCIsImhlaWdodCIsIm92ZXJmbG93IiwiY2xlYXJJdGVtU3R5bGUiLCJfYmluZEFuaW1hdGlvbkVuZEV2ZW50Iiwic2V0VGltZW91dCIsIl93cmFwcGVyV2lkdGgiLCJfcG9zaXRpb24iLCJpdGVtcyIsInBhcnNlSW50IiwidmFsdWUiLCJtZW51SW5uZXIiLCJkZXN0cm95IiwibWVudVNjcm9sbCIsIl91bmJpbmRFdmVudHMiLCJuYXZiYXIiLCJuYXZiYXJDb2xsYXBzZSIsImFzaWRlTWVudVdyYXBwZXIiLCJhc2lkZU1lbnUiLCJob3J6TWVudUNsYXNzZXMiLCJ2ZXJ0TWVudUNsYXNzZXMiLCJob3J6TWVudVdyYXBwZXIiLCJicmFuZCIsIm1lbnVUb2dnbGVyIiwiYWN0aXZlTWVudUl0ZW1zIiwiaW5zZXJ0QmVmb3JlIiwiY2hpbGRyZW4iLCJtZW51cyIsImkyIiwibDIiLCJtYXJnaW5SaWdodCIsIm1hcmdpbkxlZnQiLCJyZW1vdmVDaGlsZCIsImMiLCJwIiwiY2xzIiwidGhyb3dFcnJvciIsInRvVXBwZXJDYXNlIiwiRXJyb3IiLCJmb3VuZCIsInBhc3NlZCIsImN1ckVsIiwiUk9PVF9FTCIsInJlc3VsdCIsInNwbGl0IiwiZm9yRWFjaCIsInNlbGVjdG9yIiwiaGFuZGxlciIsImNiIiwiZHVyYXRpb24iLCJnZXRDb21wdXRlZFN0eWxlIiwidHJhbnNpdGlvbkR1cmF0aW9uIiwicGFyc2VGbG9hdCIsIl9tZW51QW5pbWF0aW9uRW5kRXZlbnRDYiIsImV2IiwiX21lbnVBbmltYXRpb25FbmRFdmVudFRpbWVvdXQiLCJmbiIsImFyZ3MiLCJQcm9taXNlIiwicmVqZWN0IiwicmVzb2x2ZSIsImNsZWFyVGltZW91dCIsImRpc2FibGVkIl0sInNvdXJjZVJvb3QiOiIifQ==\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__); /******/ var __webpack_export_target__ = window; /******/ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i]; /******/ if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true }); /******/ /******/ })() ;
SIMPAN PERUBAHAN