(()=>{var __webpack_modules__={413:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Z\": () => (/* binding */ watchLayoutContainerForReveal)\n/* harmony export */ });\nlet io = null;\n\nif (window.IntersectionObserver) {\n io = new IntersectionObserver(entries => entries.filter(_ref => {\n let {\n isIntersecting\n } = _ref;\n return isIntersecting;\n }).map(_ref2 => {\n let {\n target\n } = _ref2;\n return target;\n }).filter(el => (el.dataset.reveal || '').indexOf('no') > -1).map((el, index) => {\n let hasBottom = (el.dataset.reveal || '').indexOf('bottom') > -1;\n\n if (hasBottom) {\n el.dataset.reveal = `yes:${index + 1}`;\n } else {\n el.dataset.reveal = `yes`;\n }\n }));\n}\n\nconst watchLayoutContainerForReveal = layoutEl => {\n if (!window.IntersectionObserver) {\n return;\n }\n\n let items = layoutEl.querySelectorAll('[data-reveal*=\"no\"]');\n if (items.length === 0) return;\n if (!items[0].dataset.reveal) return;\n [...items].map(el => io.observe(el));\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEzLmpzIiwibWFwcGluZ3MiOiI7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9mcm9udGVuZC9hbmltYXRlZC1lbGVtZW50LmpzPzEwMjMiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IGlvID0gbnVsbDtcblxuaWYgKHdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IGVudHJpZXMuZmlsdGVyKF9yZWYgPT4ge1xuICAgIGxldCB7XG4gICAgICBpc0ludGVyc2VjdGluZ1xuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiBpc0ludGVyc2VjdGluZztcbiAgfSkubWFwKF9yZWYyID0+IHtcbiAgICBsZXQge1xuICAgICAgdGFyZ2V0XG4gICAgfSA9IF9yZWYyO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0pLmZpbHRlcihlbCA9PiAoZWwuZGF0YXNldC5yZXZlYWwgfHwgJycpLmluZGV4T2YoJ25vJykgPiAtMSkubWFwKChlbCwgaW5kZXgpID0+IHtcbiAgICBsZXQgaGFzQm90dG9tID0gKGVsLmRhdGFzZXQucmV2ZWFsIHx8ICcnKS5pbmRleE9mKCdib3R0b20nKSA+IC0xO1xuXG4gICAgaWYgKGhhc0JvdHRvbSkge1xuICAgICAgZWwuZGF0YXNldC5yZXZlYWwgPSBgeWVzOiR7aW5kZXggKyAxfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLmRhdGFzZXQucmV2ZWFsID0gYHllc2A7XG4gICAgfVxuICB9KSk7XG59XG5cbmV4cG9ydCBjb25zdCB3YXRjaExheW91dENvbnRhaW5lckZvclJldmVhbCA9IGxheW91dEVsID0+IHtcbiAgaWYgKCF3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaXRlbXMgPSBsYXlvdXRFbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1yZXZlYWwqPVwibm9cIl0nKTtcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBpZiAoIWl0ZW1zWzBdLmRhdGFzZXQucmV2ZWFsKSByZXR1cm47XG4gIFsuLi5pdGVtc10ubWFwKGVsID0+IGlvLm9ic2VydmUoZWwpKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///413\n")},410:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"C\": () => (/* binding */ getCurrentScreen)\n/* harmony export */ });\n/* harmony import */ var ct_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(601);\n/* harmony import */ var ct_events__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ct_events__WEBPACK_IMPORTED_MODULE_0__);\n\nlet currentScreen = null;\nlet mobileMql = matchMedia(`all and (max-width: 689px)`);\nlet tabletMql = matchMedia(`all and (max-width: 999px)`);\n\nconst setCurrentScreen = () => {\n currentScreen = mobileMql.matches ? 'mobile' : tabletMql.matches ? 'tablet' : 'desktop';\n ct_events__WEBPACK_IMPORTED_MODULE_0___default().trigger('ct:general:device-change', {\n currentScreen\n });\n};\n\nsetCurrentScreen();\nmobileMql.addListener(() => setCurrentScreen());\ntabletMql.addListener(() => setCurrentScreen());\nconst getCurrentScreen = function () {\n let {\n withTablet = false\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return withTablet ? currentScreen : currentScreen === 'tablet' ? 'mobile' : currentScreen;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEwLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9mcm9udGVuZC9oZWxwZXJzL2N1cnJlbnQtc2NyZWVuLmpzPzBkYTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGN0RXZlbnRzIGZyb20gJ2N0LWV2ZW50cyc7XG5sZXQgY3VycmVudFNjcmVlbiA9IG51bGw7XG5sZXQgbW9iaWxlTXFsID0gbWF0Y2hNZWRpYShgYWxsIGFuZCAobWF4LXdpZHRoOiA2ODlweClgKTtcbmxldCB0YWJsZXRNcWwgPSBtYXRjaE1lZGlhKGBhbGwgYW5kIChtYXgtd2lkdGg6IDk5OXB4KWApO1xuXG5jb25zdCBzZXRDdXJyZW50U2NyZWVuID0gKCkgPT4ge1xuICBjdXJyZW50U2NyZWVuID0gbW9iaWxlTXFsLm1hdGNoZXMgPyAnbW9iaWxlJyA6IHRhYmxldE1xbC5tYXRjaGVzID8gJ3RhYmxldCcgOiAnZGVza3RvcCc7XG4gIGN0RXZlbnRzLnRyaWdnZXIoJ2N0OmdlbmVyYWw6ZGV2aWNlLWNoYW5nZScsIHtcbiAgICBjdXJyZW50U2NyZWVuXG4gIH0pO1xufTtcblxuc2V0Q3VycmVudFNjcmVlbigpO1xubW9iaWxlTXFsLmFkZExpc3RlbmVyKCgpID0+IHNldEN1cnJlbnRTY3JlZW4oKSk7XG50YWJsZXRNcWwuYWRkTGlzdGVuZXIoKCkgPT4gc2V0Q3VycmVudFNjcmVlbigpKTtcbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50U2NyZWVuID0gZnVuY3Rpb24gKCkge1xuICBsZXQge1xuICAgIHdpdGhUYWJsZXQgPSBmYWxzZVxuICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHdpdGhUYWJsZXQgPyBjdXJyZW50U2NyZWVuIDogY3VycmVudFNjcmVlbiA9PT0gJ3RhYmxldCcgPyAnbW9iaWxlJyA6IGN1cnJlbnRTY3JlZW47XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///410\n")},488:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"b\": () => (/* binding */ isTouchDevice)\n/* harmony export */ });\nconst isTouchDevice = () => 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDg4LmpzIiwibWFwcGluZ3MiOiI7OztBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9mcm9udGVuZC9oZWxwZXJzL2lzLXRvdWNoLWRldmljZS5qcz82OTQ4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc1RvdWNoRGV2aWNlID0gKCkgPT4gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDAgfHwgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgPiAwOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///488\n")},979:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Cg\": () => (/* binding */ onDocumentLoaded),\n/* harmony export */ \"XT\": () => (/* binding */ handleEntryPoints),\n/* harmony export */ \"Xr\": () => (/* binding */ loadStyle)\n/* harmony export */ });\n/* harmony import */ var ct_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(601);\n/* harmony import */ var ct_events__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ct_events__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _frontend_helpers_is_touch_device__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(488);\nconst _excluded = [\"mount\", \"el\"];\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\nconst loadSingleEntryPoint = _ref => {\n let {\n els,\n events,\n forcedEvents,\n load,\n mount,\n condition,\n trigger\n } = _ref;\n\n if (!els) {\n els = [];\n }\n\n if (!events) {\n events = [];\n }\n\n if (!forcedEvents) {\n forcedEvents = [];\n }\n\n if (!trigger) {\n trigger = [];\n }\n\n if (!mount) {\n mount = _ref2 => {\n let {\n mount,\n el\n } = _ref2,\n everything = _objectWithoutProperties(_ref2, _excluded);\n\n return el ? mount(el, everything) : mount();\n };\n }\n\n if (els && {}.toString.call(els) === '[object Function]') {\n els = els();\n }\n\n const allEls = (Array.isArray(els) ? els : [els]).reduce((a, selector) => [...a, ...(Array.isArray(selector) ? selector : typeof selector === 'string' ? document.querySelectorAll(selector) : [selector])], []);\n\n if (allEls.length === 0) {\n return;\n }\n\n if (condition && !condition({\n els,\n allEls\n })) {\n return;\n }\n\n if (trigger.length > 0) {\n if (trigger.includes('click')) {\n allEls.map(el => {\n if (el.hasLazyLoadClickListener) {\n return;\n }\n\n el.hasLazyLoadClickListener = true;\n el.addEventListener('click', event => {\n event.preventDefault();\n load().then(arg => mount(_objectSpread(_objectSpread({}, arg), {}, {\n event,\n el\n })));\n });\n });\n }\n\n if (trigger.includes('scroll')) {\n allEls.map(el => {\n if (el.hasLazyLoadScrollListener) {\n return;\n }\n\n el.hasLazyLoadScrollListener = true;\n setTimeout(() => {\n let prevScroll = scrollY;\n\n let cb = event => {\n if (Math.abs(scrollY - prevScroll) > 30) {\n document.removeEventListener('scroll', cb);\n load().then(arg => {\n return mount(_objectSpread(_objectSpread({}, arg), {}, {\n event,\n el\n }));\n });\n return;\n }\n };\n\n document.addEventListener('scroll', cb);\n }, 500);\n });\n }\n\n if (trigger.includes('input')) {\n allEls.map(el => {\n if (el.hasLazyLoadInputListener) {\n return;\n }\n\n el.hasLazyLoadInputListener = true;\n el.addEventListener('input', event => load().then(arg => mount(_objectSpread(_objectSpread({}, arg), {}, {\n el\n }))), {\n once: true\n });\n });\n }\n\n if (trigger.includes('hover-with-touch')) {\n allEls.map(el => {\n if (el.hasLazyLoadMouseOverListener) {\n return;\n }\n\n if (el.dataset.autoplay && parseFloat(el.dataset.autoplay)) {\n setTimeout(() => {\n load().then(arg => mount(_objectSpread(_objectSpread({}, arg), {}, {\n el\n })));\n }, parseFloat(el.dataset.autoplay) * 1000);\n return;\n }\n\n el.hasLazyLoadMouseOverListener = true;\n\n el.forcedMount = function () {\n let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return load().then(arg => mount(_objectSpread(_objectSpread({}, arg), {}, {\n el\n }, data)));\n };\n\n ['mouseover', ...((0,_frontend_helpers_is_touch_device__WEBPACK_IMPORTED_MODULE_1__/* .isTouchDevice */ .b)() ? ['touchstart'] : [])].map(eventToRegister => {\n el.addEventListener(eventToRegister, event => {\n load().then(arg => mount(_objectSpread(_objectSpread(_objectSpread({}, arg), event.type === 'touchstart' ? {\n event\n } : {}), {}, {\n el\n })));\n }, {\n once: true,\n passive: true\n });\n });\n });\n }\n\n if (trigger.includes('hover-with-click')) {\n allEls.map(el => {\n if (el.hasLazyLoadClickHoverListener) {\n return;\n }\n\n el.hasLazyLoadClickHoverListener = true;\n el.addEventListener((0,_frontend_helpers_is_touch_device__WEBPACK_IMPORTED_MODULE_1__/* .isTouchDevice */ .b)() ? 'click' : 'mouseover', event => {\n event.preventDefault();\n load().then(arg => mount(_objectSpread(_objectSpread({}, arg), {}, {\n event,\n el\n })));\n }, {\n once: true\n });\n });\n }\n\n if (trigger.includes('hover')) {\n allEls.map(el => {\n if (el.hasLazyLoadMouseOverListener) {\n return;\n }\n\n el.hasLazyLoadHoverListener = true;\n el.addEventListener('mouseover', event => {\n load().then(arg => mount(_objectSpread(_objectSpread({}, arg), {}, {\n event,\n el\n })));\n }, {\n once: true\n });\n });\n }\n\n if (trigger.includes('submit')) {\n allEls.map(el => {\n if (el.hasLazyLoadSubmitListener) {\n return;\n }\n\n el.hasLazyLoadSubmitListener = true;\n el.addEventListener('submit', event => {\n event.preventDefault();\n load().then(arg => mount(_objectSpread(_objectSpread({}, arg), {}, {\n event,\n el\n })));\n });\n });\n }\n } else {\n load().then(arg => {\n allEls.map(el => {\n mount(_objectSpread(_objectSpread({}, arg), {}, {\n el\n }));\n });\n });\n }\n};\n\nconst onDocumentLoaded = cb => {\n if (/comp|inter|loaded/.test(document.readyState)) {\n cb();\n } else {\n document.addEventListener('DOMContentLoaded', cb, false);\n }\n};\nconst handleEntryPoints = (mountEntryPoints, args) => {\n const {\n immediate = false,\n skipEvents = false\n } = args || {};\n\n if (!skipEvents) {\n ;\n [...new Set(mountEntryPoints.reduce((currentEvents, entry) => [...currentEvents, ...(entry.events || []), ...(entry.forcedEvents || [])], []))].map(distinctEvent => {\n ct_events__WEBPACK_IMPORTED_MODULE_0___default().on(distinctEvent, () => {\n mountEntryPoints.filter(_ref3 => {\n let {\n events = []\n } = _ref3;\n return events.indexOf(distinctEvent) > -1;\n }).map(c => loadSingleEntryPoint(_objectSpread(_objectSpread({}, c), {}, {\n trigger: []\n })));\n mountEntryPoints.filter(_ref4 => {\n let {\n forcedEvents = []\n } = _ref4;\n return forcedEvents.indexOf(distinctEvent) > -1;\n }).map(entry => loadSingleEntryPoint(_objectSpread(_objectSpread(_objectSpread({}, entry), entry.forcedEventsElsSkip ? {} : {\n els: ['body']\n }), {}, {\n condition: () => true,\n trigger: []\n })));\n });\n });\n }\n\n const loadInitialEntryPoints = () => {\n mountEntryPoints.filter(_ref5 => {\n let {\n onLoad = true\n } = _ref5;\n\n if ({}.toString.call(onLoad) === '[object Function]') {\n return onLoad();\n }\n\n return !!onLoad;\n }).map(loadSingleEntryPoint);\n };\n\n if (immediate) {\n loadInitialEntryPoints();\n } else {\n onDocumentLoaded(loadInitialEntryPoints);\n }\n};\n\nvar loadCSS = function (href, before, media, attributes) {\n var doc = document;\n var ss = doc.createElement('link');\n var ref;\n\n if (before) {\n ref = before;\n } else {\n var refs = (doc.body || doc.getElementsByTagName('head')[0]).childNodes;\n ref = refs[refs.length - 1];\n }\n\n var sheets = doc.styleSheets;\n ss.rel = 'stylesheet';\n ss.href = href; // ss.media = 'only x'\n // ref.parentNode.insertBefore(ss, before ? ref : ref.nextSibling)\n\n document.body.appendChild(ss);\n\n var onloadcssdefined = function (cb) {\n var resolvedHref = ss.href;\n var i = sheets.length;\n\n while (i--) {\n if (sheets[i].href === resolvedHref) {\n return cb();\n }\n }\n\n setTimeout(function () {\n onloadcssdefined(cb);\n });\n };\n\n function loadCB() {\n if (ss.addEventListener) {\n ss.removeEventListener('load', loadCB);\n } // ss.media = media || 'all'\n\n }\n\n if (ss.addEventListener) {\n ss.addEventListener('load', loadCB);\n }\n\n ss.onloadcssdefined = onloadcssdefined;\n onloadcssdefined(loadCB);\n return ss;\n};\n\nfunction onloadCSS(ss, callback) {\n var called;\n\n function newcb() {\n if (!called && callback) {\n called = true;\n callback.call(ss);\n }\n }\n\n if (ss.addEventListener) {\n ss.addEventListener('load', newcb);\n }\n\n if (ss.attachEvent) {\n ss.attachEvent('onload', newcb);\n }\n\n if ('isApplicationInstalled' in navigator && 'onloadcssdefined' in ss) {\n ss.onloadcssdefined(newcb);\n }\n}\n\nconst loadStyle = function (src) {\n let hasDisable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n return new Promise((resolve, reject) => {\n if (document.querySelector(`[href=\"${src}\"]`)) {\n resolve();\n return;\n }\n\n requestAnimationFrame(() => {\n const ss = loadCSS(src);\n onloadCSS(ss, () => {\n requestAnimationFrame(() => {\n resolve();\n });\n });\n });\n });\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOTc5LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9oZWxwZXJzLmpzPzliNGIiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgX2V4Y2x1ZGVkID0gW1wibW91bnRcIiwgXCJlbFwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IGN0RXZlbnRzIGZyb20gJ2N0LWV2ZW50cyc7XG5pbXBvcnQgeyBpc1RvdWNoRGV2aWNlIH0gZnJvbSAnLi9mcm9udGVuZC9oZWxwZXJzL2lzLXRvdWNoLWRldmljZSc7XG5cbmNvbnN0IGxvYWRTaW5nbGVFbnRyeVBvaW50ID0gX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgZWxzLFxuICAgIGV2ZW50cyxcbiAgICBmb3JjZWRFdmVudHMsXG4gICAgbG9hZCxcbiAgICBtb3VudCxcbiAgICBjb25kaXRpb24sXG4gICAgdHJpZ2dlclxuICB9ID0gX3JlZjtcblxuICBpZiAoIWVscykge1xuICAgIGVscyA9IFtdO1xuICB9XG5cbiAgaWYgKCFldmVudHMpIHtcbiAgICBldmVudHMgPSBbXTtcbiAgfVxuXG4gIGlmICghZm9yY2VkRXZlbnRzKSB7XG4gICAgZm9yY2VkRXZlbnRzID0gW107XG4gIH1cblxuICBpZiAoIXRyaWdnZXIpIHtcbiAgICB0cmlnZ2VyID0gW107XG4gIH1cblxuICBpZiAoIW1vdW50KSB7XG4gICAgbW91bnQgPSBfcmVmMiA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICBtb3VudCxcbiAgICAgICAgZWxcbiAgICAgIH0gPSBfcmVmMixcbiAgICAgICAgICBldmVyeXRoaW5nID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuXG4gICAgICByZXR1cm4gZWwgPyBtb3VudChlbCwgZXZlcnl0aGluZykgOiBtb3VudCgpO1xuICAgIH07XG4gIH1cblxuICBpZiAoZWxzICYmIHt9LnRvU3RyaW5nLmNhbGwoZWxzKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJykge1xuICAgIGVscyA9IGVscygpO1xuICB9XG5cbiAgY29uc3QgYWxsRWxzID0gKEFycmF5LmlzQXJyYXkoZWxzKSA/IGVscyA6IFtlbHNdKS5yZWR1Y2UoKGEsIHNlbGVjdG9yKSA9PiBbLi4uYSwgLi4uKEFycmF5LmlzQXJyYXkoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiB0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikgOiBbc2VsZWN0b3JdKV0sIFtdKTtcblxuICBpZiAoYWxsRWxzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb25kaXRpb24gJiYgIWNvbmRpdGlvbih7XG4gICAgZWxzLFxuICAgIGFsbEVsc1xuICB9KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0cmlnZ2VyLmxlbmd0aCA+IDApIHtcbiAgICBpZiAodHJpZ2dlci5pbmNsdWRlcygnY2xpY2snKSkge1xuICAgICAgYWxsRWxzLm1hcChlbCA9PiB7XG4gICAgICAgIGlmIChlbC5oYXNMYXp5TG9hZENsaWNrTGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbC5oYXNMYXp5TG9hZENsaWNrTGlzdGVuZXIgPSB0cnVlO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGxvYWQoKS50aGVuKGFyZyA9PiBtb3VudChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFyZyksIHt9LCB7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGVsXG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHJpZ2dlci5pbmNsdWRlcygnc2Nyb2xsJykpIHtcbiAgICAgIGFsbEVscy5tYXAoZWwgPT4ge1xuICAgICAgICBpZiAoZWwuaGFzTGF6eUxvYWRTY3JvbGxMaXN0ZW5lcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsLmhhc0xhenlMb2FkU2Nyb2xsTGlzdGVuZXIgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBsZXQgcHJldlNjcm9sbCA9IHNjcm9sbFk7XG5cbiAgICAgICAgICBsZXQgY2IgPSBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMoc2Nyb2xsWSAtIHByZXZTY3JvbGwpID4gMzApIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2IpO1xuICAgICAgICAgICAgICBsb2FkKCkudGhlbihhcmcgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb3VudChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFyZyksIHt9LCB7XG4gICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYik7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHJpZ2dlci5pbmNsdWRlcygnaW5wdXQnKSkge1xuICAgICAgYWxsRWxzLm1hcChlbCA9PiB7XG4gICAgICAgIGlmIChlbC5oYXNMYXp5TG9hZElucHV0TGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbC5oYXNMYXp5TG9hZElucHV0TGlzdGVuZXIgPSB0cnVlO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGV2ZW50ID0+IGxvYWQoKS50aGVuKGFyZyA9PiBtb3VudChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFyZyksIHt9LCB7XG4gICAgICAgICAgZWxcbiAgICAgICAgfSkpKSwge1xuICAgICAgICAgIG9uY2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodHJpZ2dlci5pbmNsdWRlcygnaG92ZXItd2l0aC10b3VjaCcpKSB7XG4gICAgICBhbGxFbHMubWFwKGVsID0+IHtcbiAgICAgICAgaWYgKGVsLmhhc0xhenlMb2FkTW91c2VPdmVyTGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwuZGF0YXNldC5hdXRvcGxheSAmJiBwYXJzZUZsb2F0KGVsLmRhdGFzZXQuYXV0b3BsYXkpKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBsb2FkKCkudGhlbihhcmcgPT4gbW91bnQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhcmcpLCB7fSwge1xuICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICB9LCBwYXJzZUZsb2F0KGVsLmRhdGFzZXQuYXV0b3BsYXkpICogMTAwMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZWwuaGFzTGF6eUxvYWRNb3VzZU92ZXJMaXN0ZW5lciA9IHRydWU7XG5cbiAgICAgICAgZWwuZm9yY2VkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgbGV0IGRhdGEgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICAgIHJldHVybiBsb2FkKCkudGhlbihhcmcgPT4gbW91bnQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhcmcpLCB7fSwge1xuICAgICAgICAgICAgZWxcbiAgICAgICAgICB9LCBkYXRhKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIFsnbW91c2VvdmVyJywgLi4uKGlzVG91Y2hEZXZpY2UoKSA/IFsndG91Y2hzdGFydCddIDogW10pXS5tYXAoZXZlbnRUb1JlZ2lzdGVyID0+IHtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VG9SZWdpc3RlciwgZXZlbnQgPT4ge1xuICAgICAgICAgICAgbG9hZCgpLnRoZW4oYXJnID0+IG1vdW50KF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhcmcpLCBldmVudC50eXBlID09PSAndG91Y2hzdGFydCcgPyB7XG4gICAgICAgICAgICAgIGV2ZW50XG4gICAgICAgICAgICB9IDoge30pLCB7fSwge1xuICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBvbmNlOiB0cnVlLFxuICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0cmlnZ2VyLmluY2x1ZGVzKCdob3Zlci13aXRoLWNsaWNrJykpIHtcbiAgICAgIGFsbEVscy5tYXAoZWwgPT4ge1xuICAgICAgICBpZiAoZWwuaGFzTGF6eUxvYWRDbGlja0hvdmVyTGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbC5oYXNMYXp5TG9hZENsaWNrSG92ZXJMaXN0ZW5lciA9IHRydWU7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoaXNUb3VjaERldmljZSgpID8gJ2NsaWNrJyA6ICdtb3VzZW92ZXInLCBldmVudCA9PiB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBsb2FkKCkudGhlbihhcmcgPT4gbW91bnQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhcmcpLCB7fSwge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBlbFxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRyaWdnZXIuaW5jbHVkZXMoJ2hvdmVyJykpIHtcbiAgICAgIGFsbEVscy5tYXAoZWwgPT4ge1xuICAgICAgICBpZiAoZWwuaGFzTGF6eUxvYWRNb3VzZU92ZXJMaXN0ZW5lcikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsLmhhc0xhenlMb2FkSG92ZXJMaXN0ZW5lciA9IHRydWU7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGV2ZW50ID0+IHtcbiAgICAgICAgICBsb2FkKCkudGhlbihhcmcgPT4gbW91bnQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhcmcpLCB7fSwge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBlbFxuICAgICAgICAgIH0pKSk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBvbmNlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRyaWdnZXIuaW5jbHVkZXMoJ3N1Ym1pdCcpKSB7XG4gICAgICBhbGxFbHMubWFwKGVsID0+IHtcbiAgICAgICAgaWYgKGVsLmhhc0xhenlMb2FkU3VibWl0TGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbC5oYXNMYXp5TG9hZFN1Ym1pdExpc3RlbmVyID0gdHJ1ZTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgZXZlbnQgPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgbG9hZCgpLnRoZW4oYXJnID0+IG1vdW50KF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYXJnKSwge30sIHtcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgZWxcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2FkKCkudGhlbihhcmcgPT4ge1xuICAgICAgYWxsRWxzLm1hcChlbCA9PiB7XG4gICAgICAgIG1vdW50KF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYXJnKSwge30sIHtcbiAgICAgICAgICBlbFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG9uRG9jdW1lbnRMb2FkZWQgPSBjYiA9PiB7XG4gIGlmICgvY29tcHxpbnRlcnxsb2FkZWQvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSkpIHtcbiAgICBjYigpO1xuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBjYiwgZmFsc2UpO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IGhhbmRsZUVudHJ5UG9pbnRzID0gKG1vdW50RW50cnlQb2ludHMsIGFyZ3MpID0+IHtcbiAgY29uc3Qge1xuICAgIGltbWVkaWF0ZSA9IGZhbHNlLFxuICAgIHNraXBFdmVudHMgPSBmYWxzZVxuICB9ID0gYXJncyB8fCB7fTtcblxuICBpZiAoIXNraXBFdmVudHMpIHtcbiAgICA7XG4gICAgWy4uLm5ldyBTZXQobW91bnRFbnRyeVBvaW50cy5yZWR1Y2UoKGN1cnJlbnRFdmVudHMsIGVudHJ5KSA9PiBbLi4uY3VycmVudEV2ZW50cywgLi4uKGVudHJ5LmV2ZW50cyB8fCBbXSksIC4uLihlbnRyeS5mb3JjZWRFdmVudHMgfHwgW10pXSwgW10pKV0ubWFwKGRpc3RpbmN0RXZlbnQgPT4ge1xuICAgICAgY3RFdmVudHMub24oZGlzdGluY3RFdmVudCwgKCkgPT4ge1xuICAgICAgICBtb3VudEVudHJ5UG9pbnRzLmZpbHRlcihfcmVmMyA9PiB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGV2ZW50cyA9IFtdXG4gICAgICAgICAgfSA9IF9yZWYzO1xuICAgICAgICAgIHJldHVybiBldmVudHMuaW5kZXhPZihkaXN0aW5jdEV2ZW50KSA+IC0xO1xuICAgICAgICB9KS5tYXAoYyA9PiBsb2FkU2luZ2xlRW50cnlQb2ludChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGMpLCB7fSwge1xuICAgICAgICAgIHRyaWdnZXI6IFtdXG4gICAgICAgIH0pKSk7XG4gICAgICAgIG1vdW50RW50cnlQb2ludHMuZmlsdGVyKF9yZWY0ID0+IHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgZm9yY2VkRXZlbnRzID0gW11cbiAgICAgICAgICB9ID0gX3JlZjQ7XG4gICAgICAgICAgcmV0dXJuIGZvcmNlZEV2ZW50cy5pbmRleE9mKGRpc3RpbmN0RXZlbnQpID4gLTE7XG4gICAgICAgIH0pLm1hcChlbnRyeSA9PiBsb2FkU2luZ2xlRW50cnlQb2ludChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZW50cnkpLCBlbnRyeS5mb3JjZWRFdmVudHNFbHNTa2lwID8ge30gOiB7XG4gICAgICAgICAgZWxzOiBbJ2JvZHknXVxuICAgICAgICB9KSwge30sIHtcbiAgICAgICAgICBjb25kaXRpb246ICgpID0+IHRydWUsXG4gICAgICAgICAgdHJpZ2dlcjogW11cbiAgICAgICAgfSkpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbG9hZEluaXRpYWxFbnRyeVBvaW50cyA9ICgpID0+IHtcbiAgICBtb3VudEVudHJ5UG9pbnRzLmZpbHRlcihfcmVmNSA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICBvbkxvYWQgPSB0cnVlXG4gICAgICB9ID0gX3JlZjU7XG5cbiAgICAgIGlmICh7fS50b1N0cmluZy5jYWxsKG9uTG9hZCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScpIHtcbiAgICAgICAgcmV0dXJuIG9uTG9hZCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gISFvbkxvYWQ7XG4gICAgfSkubWFwKGxvYWRTaW5nbGVFbnRyeVBvaW50KTtcbiAgfTtcblxuICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgbG9hZEluaXRpYWxFbnRyeVBvaW50cygpO1xuICB9IGVsc2Uge1xuICAgIG9uRG9jdW1lbnRMb2FkZWQobG9hZEluaXRpYWxFbnRyeVBvaW50cyk7XG4gIH1cbn07XG5cbnZhciBsb2FkQ1NTID0gZnVuY3Rpb24gKGhyZWYsIGJlZm9yZSwgbWVkaWEsIGF0dHJpYnV0ZXMpIHtcbiAgdmFyIGRvYyA9IGRvY3VtZW50O1xuICB2YXIgc3MgPSBkb2MuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICB2YXIgcmVmO1xuXG4gIGlmIChiZWZvcmUpIHtcbiAgICByZWYgPSBiZWZvcmU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJlZnMgPSAoZG9jLmJvZHkgfHwgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pLmNoaWxkTm9kZXM7XG4gICAgcmVmID0gcmVmc1tyZWZzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgdmFyIHNoZWV0cyA9IGRvYy5zdHlsZVNoZWV0cztcbiAgc3MucmVsID0gJ3N0eWxlc2hlZXQnO1xuICBzcy5ocmVmID0gaHJlZjsgLy8gc3MubWVkaWEgPSAnb25seSB4J1xuICAvLyByZWYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc3MsIGJlZm9yZSA/IHJlZiA6IHJlZi5uZXh0U2libGluZylcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNzKTtcblxuICB2YXIgb25sb2FkY3NzZGVmaW5lZCA9IGZ1bmN0aW9uIChjYikge1xuICAgIHZhciByZXNvbHZlZEhyZWYgPSBzcy5ocmVmO1xuICAgIHZhciBpID0gc2hlZXRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGlmIChzaGVldHNbaV0uaHJlZiA9PT0gcmVzb2x2ZWRIcmVmKSB7XG4gICAgICAgIHJldHVybiBjYigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgb25sb2FkY3NzZGVmaW5lZChjYik7XG4gICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbG9hZENCKCkge1xuICAgIGlmIChzcy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICBzcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZENCKTtcbiAgICB9IC8vIHNzLm1lZGlhID0gbWVkaWEgfHwgJ2FsbCdcblxuICB9XG5cbiAgaWYgKHNzLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBzcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgbG9hZENCKTtcbiAgfVxuXG4gIHNzLm9ubG9hZGNzc2RlZmluZWQgPSBvbmxvYWRjc3NkZWZpbmVkO1xuICBvbmxvYWRjc3NkZWZpbmVkKGxvYWRDQik7XG4gIHJldHVybiBzcztcbn07XG5cbmZ1bmN0aW9uIG9ubG9hZENTUyhzcywgY2FsbGJhY2spIHtcbiAgdmFyIGNhbGxlZDtcblxuICBmdW5jdGlvbiBuZXdjYigpIHtcbiAgICBpZiAoIWNhbGxlZCAmJiBjYWxsYmFjaykge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGNhbGxiYWNrLmNhbGwoc3MpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzcy5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgc3MuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIG5ld2NiKTtcbiAgfVxuXG4gIGlmIChzcy5hdHRhY2hFdmVudCkge1xuICAgIHNzLmF0dGFjaEV2ZW50KCdvbmxvYWQnLCBuZXdjYik7XG4gIH1cblxuICBpZiAoJ2lzQXBwbGljYXRpb25JbnN0YWxsZWQnIGluIG5hdmlnYXRvciAmJiAnb25sb2FkY3NzZGVmaW5lZCcgaW4gc3MpIHtcbiAgICBzcy5vbmxvYWRjc3NkZWZpbmVkKG5ld2NiKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbG9hZFN0eWxlID0gZnVuY3Rpb24gKHNyYykge1xuICBsZXQgaGFzRGlzYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtocmVmPVwiJHtzcmN9XCJdYCkpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgY29uc3Qgc3MgPSBsb2FkQ1NTKHNyYyk7XG4gICAgICBvbmxvYWRDU1Moc3MsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///979\n")},126:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"allFrontendEntryPoints\": () => (/* binding */ allFrontendEntryPoints),\n \"areWeDealingWithSafari\": () => (/* binding */ areWeDealingWithSafari),\n \"getCurrentScreen\": () => (/* reexport */ current_screen/* getCurrentScreen */.C),\n \"handleEntryPoints\": () => (/* reexport */ helpers/* handleEntryPoints */.XT),\n \"loadStyle\": () => (/* reexport */ helpers/* loadStyle */.Xr),\n \"onDocumentLoaded\": () => (/* reexport */ helpers/* onDocumentLoaded */.Cg),\n \"registerDynamicChunk\": () => (/* reexport */ registerDynamicChunk)\n});\n\n;// CONCATENATED MODULE: ./static/js/events.js\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * Probably split string into general purpose object representation for\n * event names and listeners. This function leaves objects un-modified.\n *\n * @param topicStringOrObject {String | Object}\n * @param listener {Function | false}\n *\n * @returns {Object} {\n * eventname: listener,\n * otherevent: listener\n * }\n */\nconst splitTopicStringOrObject = (topicStringOrObject, listener) => typeof topicStringOrObject !== 'string' ? topicStringOrObject : topicStringOrObject.replace(/\\s\\s+/g, ' ').trim().split(' ').reduce((allEvents, event) => _objectSpread(_objectSpread({}, allEvents), {}, {\n [event]: listener\n}), {});\n\nclass EventsManager {\n constructor() {\n _defineProperty(this, \"_events\", {});\n }\n\n on(topicStringOrObject, listener) {\n const eventsAndListeners = splitTopicStringOrObject(topicStringOrObject, listener);\n Object.keys(eventsAndListeners).map(eventName => this._events = _objectSpread(_objectSpread({}, this._events), {}, {\n [eventName]: [...(this._events[eventName] || []), eventsAndListeners[eventName]]\n }));\n return this;\n }\n /**\n * In order to remove one single listener you should give as an argument\n * the same callback function. If you want to remove *all* listeners from\n * a particular event you should not pass the second argument.\n *\n * @param topicStringOrObject {String | Object}\n * @param listener {Function | false}\n */\n\n\n off(topicStringOrObject, listener) {\n const eventsAndListeners = splitTopicStringOrObject(topicStringOrObject, listener);\n Object.keys(eventsAndListeners).map(eventName => {\n if (this._events[eventName]) {\n if (eventsAndListeners[eventName]) {\n this._events[eventName].splice(this._events[eventName].indexOf(listener) >>> 0, 1);\n } else {\n this._events[eventName] = [];\n }\n }\n });\n return this;\n }\n /**\n * Trigger an event. In case you provide multiple events via space-separated\n * string or an object of events it will execute listeners for each event\n * separatedly. You can use the \"all\" event to trigger all events.\n *\n * @param topicStringOrObject {String | Object}\n * @param data {Object}\n */\n\n\n trigger(eventName, data) {\n const events = splitTopicStringOrObject(eventName);\n\n const dispatchSingleEvent = listenerDescriptor => listenerDescriptor && listenerDescriptor.call(window, data);\n\n Object.keys(events).map(eventName => {\n try {\n ;\n (this._events[eventName] || []).map(dispatchSingleEvent);\n (this._events['all'] || []).map(dispatchSingleEvent);\n } catch (e) {\n console.log('%c [Events] Exception raised.', 'color: red; font-weight: bold;');\n\n if (typeof console !== 'undefined') {\n console.error(e);\n } else {\n throw e;\n }\n }\n });\n return this;\n }\n\n}\n\nconst events = new EventsManager();\nwindow.ctEvents = events;\n/* harmony default export */ const js_events = ((/* unused pure expression or super */ null && (events)));\n// EXTERNAL MODULE: ./static/js/public-path.js\nvar public_path = __webpack_require__(683);\n// EXTERNAL MODULE: external \"ctEvents\"\nvar external_ctEvents_ = __webpack_require__(601);\nvar external_ctEvents_default = /*#__PURE__*/__webpack_require__.n(external_ctEvents_);\n// EXTERNAL MODULE: external \"jQuery\"\nvar external_jQuery_ = __webpack_require__(194);\nvar external_jQuery_default = /*#__PURE__*/__webpack_require__.n(external_jQuery_);\n// EXTERNAL MODULE: ./static/js/frontend/animated-element.js\nvar animated_element = __webpack_require__(413);\n// EXTERNAL MODULE: ./static/js/helpers.js\nvar helpers = __webpack_require__(979);\n// EXTERNAL MODULE: ./static/js/frontend/helpers/current-screen.js\nvar current_screen = __webpack_require__(410);\n// EXTERNAL MODULE: ./node_modules/scriptjs/dist/script.js\nvar script = __webpack_require__(277);\nvar script_default = /*#__PURE__*/__webpack_require__.n(script);\n;// CONCATENATED MODULE: ./static/js/frontend/fast-overlay.js\nfunction fast_overlay_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction fast_overlay_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? fast_overlay_ownKeys(Object(source), !0).forEach(function (key) { fast_overlay_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : fast_overlay_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction fast_overlay_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\nconst fastOverlayHandleClick = (e, settings) => {\n settings = fast_overlay_objectSpread({\n container: null,\n // full | fast | skip\n openStrategy: 'full'\n }, settings);\n\n if (document.body.hasAttribute('data-panel') && settings.openStrategy !== 'skip') {\n return;\n }\n\n if (settings.openStrategy !== 'skip') {\n if (settings.container) {\n settings.container.classList.add('active');\n }\n\n document.body.dataset.panel = `in${settings.container.dataset.behaviour.indexOf('left') > -1 ? ':left' : settings.container.dataset.behaviour.indexOf('right') > -1 ? ':right' : ''}`;\n }\n\n if (settings.openStrategy === 'full' || settings.openStrategy === 'skip') {\n __webpack_require__.e(/* import() */ 627).then(__webpack_require__.bind(__webpack_require__, 627)).then(_ref => {\n let {\n handleClick\n } = _ref;\n handleClick(e, settings);\n });\n }\n};\nconst fastOverlayMount = (el, _ref2) => {\n let {\n event,\n focus = false\n } = _ref2;\n fastOverlayHandleClick(event, {\n isModal: true,\n container: document.querySelector(el.dataset.togglePanel || el.hash),\n clickOutside: true,\n focus\n });\n};\n;// CONCATENATED MODULE: ./static/js/dynamic-chunks.js\nfunction dynamic_chunks_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction dynamic_chunks_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? dynamic_chunks_ownKeys(Object(source), !0).forEach(function (key) { dynamic_chunks_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : dynamic_chunks_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction dynamic_chunks_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nlet loadedChunks = {};\nlet intersectionObserver = null;\n\nconst loadChunkWithPayload = function (chunk) {\n let payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let el = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n const immediateMount = () => {\n if (el) {\n loadedChunks[chunk.id].mount(el, payload);\n } else {\n ;\n [...document.querySelectorAll(chunk.selector)].map(el => {\n loadedChunks[chunk.id].mount(el, payload);\n });\n }\n };\n\n if (loadedChunks[chunk.id]) {\n immediateMount();\n } else {\n if (chunk.global_data) {\n chunk.global_data.map(data => {\n if (!data.var || !data.data) {\n return;\n }\n\n window[data.var] = data.data;\n });\n }\n\n if (chunk.deps) {\n const depsThatAreNotLoadedIds = chunk.deps.filter(id => !document.querySelector(`script[src*=\"${chunk.deps_data[id]}\"]`));\n const depsThatAreNotLoaded = depsThatAreNotLoadedIds.map(id => chunk.deps_data[id]);\n\n if (depsThatAreNotLoadedIds.includes('underscore')) {\n script_default()(chunk.deps_data.underscore, () => {\n script_default()([chunk.url, ...depsThatAreNotLoaded], immediateMount);\n });\n } else {\n script_default()([chunk.url, ...depsThatAreNotLoaded], immediateMount);\n }\n } else {\n script_default()(chunk.url, immediateMount);\n }\n }\n};\n\nconst addChunkToIntersectionObserver = chunk => {\n if (!window.IntersectionObserver) {\n return;\n }\n\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver(entries => {\n entries.map(_ref => {\n let {\n boundingClientRect,\n target,\n isIntersecting\n } = _ref;\n const chunk = target.__chunk__;\n\n if (!isIntersecting && boundingClientRect.y > 0) {\n return;\n }\n\n let state = `target-before-bottom`;\n\n if (!isIntersecting && boundingClientRect.y < 0) {\n state = 'target-after-bottom';\n }\n\n if (state === 'target-before-bottom' && !loadedChunks[chunk.id]) {\n return;\n }\n\n loadChunkWithPayload(chunk, {\n state,\n target\n }, chunk.el);\n });\n });\n }\n\n ;\n [...document.querySelectorAll(chunk.selector)].map(el => {\n if (el.ioObserving) {\n return;\n }\n\n el.ioObserving = true;\n const target = document.querySelector(chunk.target);\n\n if (!target) {\n return;\n }\n\n target.__chunk__ = dynamic_chunks_objectSpread(dynamic_chunks_objectSpread({}, chunk), {}, {\n el\n });\n intersectionObserver.observe(target);\n });\n};\n\nconst mountDynamicChunks = () => {\n const requestIdleCallback = window.requestIdleCallback || function (cb) {\n var start = Date.now();\n return setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50 - (Date.now() - start));\n }\n });\n }, 1);\n };\n\n ct_localizations.dynamic_js_chunks.map(chunk => {\n if (!chunk.id) {\n return;\n }\n\n if (!document.querySelector(chunk.selector)) {\n return;\n }\n\n if (chunk.trigger) {\n if (chunk.trigger === 'click') {\n ;\n [...document.querySelectorAll(chunk.selector)].map(el => {\n if (el.hasLazyLoadClickListener) {\n return;\n }\n\n el.hasLazyLoadClickListener = true;\n\n const cb = event => {\n if (chunk.ignore_click && event.target.matches(chunk.ignore_click)) {\n return;\n }\n\n event.preventDefault();\n\n if (el.closest('.ct-panel.active') && el.matches('.ct-header-account[href*=\"account-modal\"]')) {\n return;\n }\n\n if (chunk.has_modal_loader) {\n const actuallyLoadChunk = () => {\n const loadingHtml = `\n
\n \n \n \n \n \n
\n `;\n const div = document.createElement('div');\n div.innerHTML = loadingHtml;\n let divRef = div.firstElementChild;\n document.querySelector('.ct-drawer-canvas').appendChild(div.firstElementChild);\n fastOverlayHandleClick(event, {\n openStrategy: 'fast',\n container: divRef\n });\n loadChunkWithPayload(chunk, {\n event\n }, el);\n };\n\n if (document.body.dataset.panel) {\n let currentPanel = document.querySelector('.ct-panel.active');\n\n if (currentPanel) {\n let maybeButton = document.querySelector(`[data-toggle-panel=\"#${currentPanel.id}\"]`) || document.querySelector(`[href=\"#${currentPanel.id}\"]`);\n\n if (maybeButton) {\n maybeButton.click();\n setTimeout(() => {\n actuallyLoadChunk();\n }, 500);\n return;\n }\n }\n } else {\n actuallyLoadChunk();\n }\n } else {\n loadChunkWithPayload(chunk, {\n event\n }, el);\n }\n };\n\n el.dynamicJsChunkStop = () => {\n el.removeEventListener('click', cb);\n };\n\n el.addEventListener('click', cb);\n });\n }\n\n if (chunk.trigger === 'submit') {\n ;\n [...document.querySelectorAll(chunk.selector)].map(el => {\n if (el.hasLazyLoadSubmitListener) {\n return;\n }\n\n el.hasLazyLoadSubmitListener = true;\n el.addEventListener('submit', event => {\n event.preventDefault();\n loadChunkWithPayload(chunk, {\n event\n }, el);\n });\n });\n }\n\n if (chunk.trigger === 'hover') {\n ;\n [...document.querySelectorAll(chunk.selector)].map(el => {\n if (el.hasLazyLoadHoverListener) {\n return;\n }\n\n el.hasLazyLoadHoverListener = true;\n el.addEventListener('mouseover', event => {\n event.preventDefault();\n loadChunkWithPayload(chunk, {\n event\n }, el);\n });\n });\n }\n\n if (chunk.trigger === 'intersection-observer') {\n addChunkToIntersectionObserver(chunk);\n }\n\n if (chunk.trigger === 'scroll') {\n setTimeout(() => {\n let prevScroll = scrollY;\n\n let cb = e => {\n if (Math.abs(scrollY - prevScroll) > 30) {\n document.removeEventListener('scroll', cb);\n loadChunkWithPayload(chunk);\n return;\n }\n };\n\n document.addEventListener('scroll', cb, {\n passive: true\n });\n }, 500);\n }\n } else {\n loadChunkWithPayload(chunk);\n }\n });\n};\nconst registerDynamicChunk = (id, implementation) => {\n if (loadedChunks[id]) {\n return;\n }\n\n loadedChunks[id] = implementation;\n};\n;// CONCATENATED MODULE: ./static/js/frontend/header/render-loop.js\n\nlet prevInnerWidth = null;\nlet prevScrollY = null;\n\nconst renderHeader = () => {\n if (!prevInnerWidth || window.innerWidth !== prevInnerWidth) {\n prevInnerWidth = window.innerWidth;\n external_ctEvents_default().trigger('ct:header:render-frame');\n }\n\n if (prevScrollY === null || window.scrollY !== prevScrollY) {\n prevScrollY = window.scrollY;\n external_ctEvents_default().trigger('ct:scroll:render-frame');\n }\n\n requestAnimationFrame(renderHeader);\n};\n\nconst mountRenderHeaderLoop = () => {\n requestAnimationFrame(renderHeader);\n};\n;// CONCATENATED MODULE: ./static/js/frontend/entry-points/menus.js\nfunction menus_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction menus_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? menus_ownKeys(Object(source), !0).forEach(function (key) { menus_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : menus_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction menus_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nconst loadMenuEntry = () => __webpack_require__.e(/* import() */ 27).then(__webpack_require__.bind(__webpack_require__, 27));\n\nconst menuEntryPoints = [{\n els: () => ['header [data-device=\"desktop\"] [data-id*=\"menu\"] > .menu'],\n condition: () => (0,current_screen/* getCurrentScreen */.C)() === 'desktop',\n load: loadMenuEntry,\n onLoad: false,\n mount: _ref => {\n let {\n el,\n mountMenuLevel\n } = _ref;\n return mountMenuLevel(el, {\n startPosition: 'left'\n });\n },\n events: ['ct:general:device-change', 'ct:header:init-popper']\n}, {\n els: () => ['header [data-device=\"desktop\"] [data-id*=\"menu\"] > .menu .menu-item-has-children', 'header [data-device=\"desktop\"] [data-id*=\"menu\"] > .menu .page_item_has_children'],\n load: loadMenuEntry,\n mount: _ref2 => {\n let {\n handleUpdate,\n el\n } = _ref2;\n return handleUpdate(el);\n },\n onLoad: false,\n events: ['ct:general:device-change', 'ct:header:init-popper'],\n condition: _ref3 => {\n let {\n allEls\n } = _ref3;\n return (0,current_screen/* getCurrentScreen */.C)() === 'desktop';\n }\n}, {\n els: () => [...document.querySelectorAll('header [data-device=\"desktop\"] [data-id^=\"menu\"][data-responsive]')],\n // load: () => new Promise((r) => r({ mount: mountResponsiveHeader })),\n load: () => __webpack_require__.e(/* import() */ 831).then(__webpack_require__.bind(__webpack_require__, 831)),\n // onLoad: false,\n events: ['ct:general:device-change', 'ct:header:render-frame'],\n condition: () => {\n if ((0,current_screen/* getCurrentScreen */.C)() !== 'desktop') {\n return false;\n }\n\n let allResults = [...document.querySelectorAll('header [data-device=\"desktop\"] [data-id^=\"menu\"][data-responsive]')].map(menu => {\n // true - no enough space\n // false enough space\n if (window.blocksyResponsiveMenuCache && window.blocksyResponsiveMenuCache[menu.id] && window.blocksyResponsiveMenuCache[menu.id].enabled) {\n return window.blocksyResponsiveMenuCache[menu.id].enabled;\n }\n\n if (!menu.firstElementChild) {\n if (!window.blocksyResponsiveMenuCache) {\n window.blocksyResponsiveMenuCache = {};\n }\n\n window.blocksyResponsiveMenuCache = menus_objectSpread(menus_objectSpread({}, window.blocksyResponsiveMenuCache), {}, {\n [menu.id]: {\n enabled: false\n }\n });\n return false;\n }\n\n let baseContainer = menu.closest('[class*=\"ct-container\"]');\n let hasResponsive = baseContainer.getBoundingClientRect().width - [...baseContainer.querySelectorAll('[data-id]:not([data-id*=\"menu\"])')].reduce((t, item) => {\n let style = window.getComputedStyle(item);\n return t + item.getBoundingClientRect().width + parseInt(style.getPropertyValue('margin-left')) + parseInt(style.getPropertyValue('margin-right'));\n }, 0) < [...baseContainer.querySelectorAll('[data-id*=\"menu\"] > * > *')].reduce((t, el) => {\n let style = window.getComputedStyle(el.closest('[data-id*=\"menu\"]'));\n return t + el.getBoundingClientRect().width + parseInt(style.getPropertyValue('margin-left')) + parseInt(style.getPropertyValue('margin-right'));\n }, 0);\n\n if (!hasResponsive) {\n let hadResponsive = menu.dataset.responsive;\n menu.dataset.responsive = 'yes';\n\n if (hadResponsive === 'no') {\n external_ctEvents_default().trigger('ct:header:init-popper');\n }\n }\n\n if (!window.blocksyResponsiveMenuCache) {\n window.blocksyResponsiveMenuCache = {};\n }\n\n window.blocksyResponsiveMenuCache = menus_objectSpread(menus_objectSpread({}, window.blocksyResponsiveMenuCache), {}, {\n [menu.id]: {\n enabled: hasResponsive\n }\n });\n return hasResponsive;\n });\n let finalRes = allResults.filter(r => !!r).length > 0;\n return finalRes;\n }\n}, {\n els: () => 'header [data-device=\"desktop\"] [data-id^=\"menu\"]:not([data-responsive])',\n load: () => new Promise(r => r({\n mount: el => {\n external_ctEvents_default().trigger('ct:header:init-popper');\n }\n }))\n}];\n;// CONCATENATED MODULE: ./static/js/frontend/entry-points/live-search.js\nconst liveSearchEntryPoints = [{\n els: () => [[...document.querySelectorAll('.search-form[data-live-results]')].filter(el => !el.matches('[id=\"search-modal\"] .search-form[data-live-results]') && !el.matches('.ct-sidebar .ct-widget .woocommerce-product-search'))],\n load: () => __webpack_require__.e(/* import() */ 134).then(__webpack_require__.bind(__webpack_require__, 134)),\n mount: _ref => {\n let {\n mount,\n el\n } = _ref;\n return mount(el, {});\n },\n trigger: ['input']\n}, {\n els: '.ct-sidebar .ct-widget .search-form:not(.woocommerce-product-search)[data-live-results]',\n load: () => __webpack_require__.e(/* import() */ 134).then(__webpack_require__.bind(__webpack_require__, 134)),\n trigger: ['input']\n}, {\n els: '.ct-sidebar .ct-widget .woocommerce-product-search',\n load: () => __webpack_require__.e(/* import() */ 134).then(__webpack_require__.bind(__webpack_require__, 134)),\n mount: _ref2 => {\n let {\n mount,\n el\n } = _ref2;\n return mount(el, {});\n },\n trigger: ['input']\n}, {\n els: '[id=\"search-modal\"] .search-form[data-live-results]',\n load: () => __webpack_require__.e(/* import() */ 134).then(__webpack_require__.bind(__webpack_require__, 134)),\n mount: _ref3 => {\n let {\n mount,\n el\n } = _ref3;\n return mount(el, {\n mode: 'modal',\n perPage: 6\n });\n },\n trigger: ['input']\n}];\n;// CONCATENATED MODULE: ./static/js/frontend/woocommerce/main.js\nfunction main_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction main_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? main_ownKeys(Object(source), !0).forEach(function (key) { main_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : main_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction main_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\n\nfunction isTouchDevice() {\n try {\n document.createEvent('TouchEvent');\n return true;\n } catch (e) {\n return false;\n }\n}\n\nconst wooEntryPoints = [{\n els: 'body.single-product .woocommerce-product-gallery',\n condition: () => !!document.querySelector('.woocommerce-product-gallery .ct-image-container'),\n load: () => __webpack_require__.e(/* import() */ 190).then(__webpack_require__.bind(__webpack_require__, 190)),\n trigger: ['hover-with-click']\n}, main_objectSpread({\n els: 'form.variations_form',\n condition: () => !!document.querySelector('.woocommerce-product-gallery .ct-image-container'),\n load: () => __webpack_require__.e(/* import() */ 22).then(__webpack_require__.bind(__webpack_require__, 22))\n}, isTouchDevice() ? {} : {\n trigger: ['hover']\n}), {\n els: '.quantity > *',\n load: () => __webpack_require__.e(/* import() */ 867).then(__webpack_require__.bind(__webpack_require__, 867)),\n trigger: ['click']\n}, {\n els: () => [...document.querySelectorAll('.ct-ajax-add-to-cart .cart'), ...document.querySelectorAll('.ct-floating-bar .cart')],\n load: () => __webpack_require__.e(/* import() */ 781).then(__webpack_require__.bind(__webpack_require__, 781)),\n trigger: ['submit']\n}, {\n els: '.ct-header-cart, .ajax_add_to_cart',\n load: () => __webpack_require__.e(/* import() */ 532).then(__webpack_require__.bind(__webpack_require__, 532)),\n events: ['ct:header:update'],\n trigger: ['hover-with-touch']\n}];\n\nconst initShortcut = () => {\n setTimeout(() => {\n let maybeShortcutCart = document.querySelector('.ct-shortcuts-container [data-shortcut=\"cart\"]');\n\n if (maybeShortcutCart && !maybeShortcutCart.hasClickListener) {\n maybeShortcutCart.hasClickListener = true;\n\n const handleEvent = event => {\n let maybeCart = document.querySelector('.ct-header-cart .ct-offcanvas-trigger');\n\n if (!maybeCart) {\n return;\n }\n\n event.preventDefault();\n maybeCart.dispatchEvent(new MouseEvent(event.type, {\n view: window,\n bubbles: true,\n cancelable: true\n }));\n };\n\n maybeShortcutCart.addEventListener('mouseover', handleEvent);\n maybeShortcutCart.addEventListener('click', handleEvent);\n }\n\n ;\n [...document.querySelectorAll('#woo-cart-panel .qty')].map(el => {\n if (el.hasChangeListener) {\n return;\n }\n\n el.hasChangeListener = true;\n external_jQuery_default()(el).on('change', e => {\n var item_hash = external_jQuery_default()(el).attr('name').replace(/cart\\[([\\w]+)\\]\\[qty\\]/g, '$1');\n var item_quantity = external_jQuery_default()(el).val();\n var currentVal = parseFloat(item_quantity);\n external_jQuery_default().ajax({\n type: 'POST',\n url: ct_localizations.ajax_url,\n data: {\n action: 'blocksy_update_qty_cart',\n hash: item_hash,\n quantity: currentVal\n },\n success: data => {\n jQuery('body').trigger('updated_wc_div');\n external_ctEvents_default().trigger('ct:header:update');\n }\n });\n });\n });\n }, 100);\n};\n\n(0,helpers/* onDocumentLoaded */.Cg)(initShortcut);\nexternal_ctEvents_default().on('blocksy:frontend:init', initShortcut);\n;// CONCATENATED MODULE: ./static/js/frontend/integration/elementor.js\nconst mountElementorIntegration = () => {\n if (!window.elementorFrontend) {\n return;\n }\n\n setTimeout(() => {\n elementorFrontend.elements.$document.off('click', elementorFrontend.utils.anchors.getSettings('selectors.links'), elementorFrontend.utils.anchors.handleAnchorLinks);\n }, 1000);\n};\n;// CONCATENATED MODULE: ./static/js/main.js\nconst _excluded = [\"mount\", \"el\"];\n\nfunction js_main_ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction js_main_objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? js_main_ownKeys(Object(source), !0).forEach(function (key) { js_main_defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : js_main_ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction js_main_defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * iOS hover fix\n */\n\ndocument.addEventListener('click', x => 0);\nconst areWeDealingWithSafari = /apple/i.test(navigator.vendor);\n\n\nconst allFrontendEntryPoints = [...menuEntryPoints, ...liveSearchEntryPoints, ...wooEntryPoints,\n/*\n{\n\tels: '#main [data-sticky]',\n\tload: () => import('./frontend/sticky'),\n\tcondition: () => areWeDealingWithSafari,\n},\n */\n{\n els: '[data-parallax]',\n load: () => __webpack_require__.e(/* import() */ 963).then(__webpack_require__.bind(__webpack_require__, 963)),\n events: ['blocksy:parallax:init']\n}, {\n els: '.flexy-container[data-flexy*=\"no\"]',\n load: () => __webpack_require__.e(/* import() */ 400).then(__webpack_require__.bind(__webpack_require__, 400)),\n events: ['ct:flexy:update'],\n trigger: ['hover-with-touch']\n}, {\n els: '.ct-share-box [data-network=\"pinterest\"]',\n load: () => __webpack_require__.e(/* import() */ 153).then(__webpack_require__.bind(__webpack_require__, 153)),\n trigger: ['click']\n}, {\n els: '.ct-share-box [data-network]:not([data-network=\"pinterest\"]):not([data-network=\"email\"])',\n load: () => __webpack_require__.e(/* import() */ 153).then(__webpack_require__.bind(__webpack_require__, 153)),\n trigger: ['click'],\n condition: () => !/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)\n}, {\n els: [...(document.querySelector('.ct-header-cart > .ct-cart-content') ? ['.ct-header-cart > .ct-cart-item'] : []), '.ct-language-switcher > .ct-active-language'],\n load: () => __webpack_require__.e(/* import() */ 889).then(__webpack_require__.bind(__webpack_require__, 889)),\n trigger: ['hover'],\n events: ['ct:popper-elements:update']\n}, {\n els: '.ct-back-to-top, .ct-shortcuts-container [data-shortcut*=\"scroll_top\"]',\n load: () => __webpack_require__.e(/* import() */ 985).then(__webpack_require__.bind(__webpack_require__, 985)),\n events: ['ct:back-to-top:mount'],\n trigger: ['scroll']\n}, {\n els: '.ct-pagination:not([data-pagination=\"simple\"])',\n load: () => __webpack_require__.e(/* import() */ 830).then(__webpack_require__.bind(__webpack_require__, 830)),\n trigger: ['scroll']\n}, {\n els: ['.entries[data-layout]', '[data-products].products'],\n load: () => new Promise(r => r({\n mount: animated_element/* watchLayoutContainerForReveal */.Z\n }))\n}, {\n els: ['.ct-modal-action'],\n load: () => new Promise(r => r({\n mount: fastOverlayMount\n })),\n events: ['ct:header:update'],\n trigger: ['click']\n}, {\n els: ['.ct-header-search'],\n load: () => new Promise(r => r({\n mount: fastOverlayMount\n })),\n mount: _ref => {\n let {\n mount,\n el\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n mount(el, js_main_objectSpread(js_main_objectSpread({}, rest), {}, {\n focus: true\n }));\n },\n events: [],\n trigger: ['click']\n}];\n(0,helpers/* handleEntryPoints */.XT)(allFrontendEntryPoints, {\n immediate: /comp|inter|loaded/.test(document.readyState)\n});\n\nconst initOverlayTrigger = () => {\n ;\n [...document.querySelectorAll('.ct-header-trigger'), ...document.querySelectorAll('.ct-offcanvas-trigger')].map(menuToggle => {\n if (menuToggle && !menuToggle.hasListener) {\n menuToggle.hasListener = true;\n menuToggle.addEventListener('click', event => {\n event.preventDefault();\n\n if (!menuToggle.dataset.togglePanel && !menuToggle.hash) {\n return;\n }\n\n let offcanvas = document.querySelector(menuToggle.dataset.togglePanel || menuToggle.hash);\n\n if (!offcanvas) {\n return;\n }\n\n fastOverlayHandleClick(event, {\n container: offcanvas,\n closeWhenLinkInside: !menuToggle.closest('.ct-header-cart'),\n computeScrollContainer: () => offcanvas.querySelector('.cart_list') && !offcanvas.querySelector('[data-id=\"cart\"] .cart_list') ? offcanvas.querySelector('.cart_list') : (0,current_screen/* getCurrentScreen */.C)() === 'mobile' && offcanvas.querySelector('[data-device=\"mobile\"]') ? offcanvas.querySelector('[data-device=\"mobile\"]') : offcanvas.querySelector('.ct-panel-content')\n });\n });\n }\n });\n};\n\nconst mountAsideType4 = () => {\n ;\n [...document.querySelectorAll('aside[data-type=\"type-4\"]')].map(sidebar => {\n let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n if (scrollbarWidth > 0) {\n sidebar.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);\n }\n\n sidebar.style.setProperty('--has-scrollbar', 1);\n });\n};\n\n(0,helpers/* onDocumentLoaded */.Cg)(() => {\n document.body.addEventListener('mouseover', () => {\n (0,helpers/* loadStyle */.Xr)(ct_localizations.dynamic_styles.lazy_load);\n }, {\n once: true,\n passive: true\n });\n let inputs = [...document.querySelectorAll('.comment-form [class*=\"comment-form-field\"]')].reduce((result, parent) => [...result, parent.querySelector('input,textarea')], []).filter(input => input.type !== 'hidden' && input.type !== 'checkbox');\n\n const renderEmptiness = () => {\n inputs.map(input => {\n input.parentNode.classList.remove('ct-not-empty');\n\n if (!input.value) {\n return;\n }\n\n if (input.value.trim().length > 0) {\n input.parentNode.classList.add('ct-not-empty');\n }\n });\n };\n\n setTimeout(() => {\n renderEmptiness();\n });\n inputs.map(input => input.addEventListener('input', renderEmptiness));\n mountDynamicChunks();\n mountAsideType4();\n setTimeout(() => document.body.classList.remove('ct-loading'), 1500);\n setTimeout(() => {\n initOverlayTrigger();\n });\n mountRenderHeaderLoop();\n mountElementorIntegration();\n});\n\nif ((external_jQuery_default())) {\n external_jQuery_default()(document.body).on('wc_fragments_refreshed', () => {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n external_jQuery_default()(document.body).on('wc_fragments_loaded', () => {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n external_jQuery_default()(document).on('jet-filter-content-rendered', () => {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n external_jQuery_default()(document).on('yith_infs_added_elem', function () {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n jQuery(document).on('yith-wcan-ajax-filtered', function () {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n external_jQuery_default()(document).on('berocket_ajax_filtering_end', () => {\n setTimeout(() => {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n }, 100);\n });\n external_jQuery_default()(document).on('preload', () => {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n document.addEventListener('wpfAjaxSuccess', e => {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n document.addEventListener('facetwp-loaded', () => {\n external_ctEvents_default().trigger('blocksy:frontend:init');\n });\n}\n\nexternal_ctEvents_default().on('blocksy:frontend:init', () => {\n (0,helpers/* handleEntryPoints */.XT)(allFrontendEntryPoints, {\n immediate: true,\n skipEvents: true\n });\n mountDynamicChunks();\n mountAsideType4();\n initOverlayTrigger();\n});\nexternal_ctEvents_default().on('ct:overlay:handle-click', _ref2 => {\n let {\n e,\n href,\n container,\n options = {}\n } = _ref2;\n fastOverlayHandleClick(e, js_main_objectSpread(js_main_objectSpread(js_main_objectSpread({}, href ? {\n container: document.querySelector(href)\n } : {}), container ? {\n container\n } : {}), options));\n});\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTI2LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2N0RnJvbnRlbmQvLi9zdGF0aWMvanMvZXZlbnRzLmpzP2MxOTgiLCJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9mcm9udGVuZC9mYXN0LW92ZXJsYXkuanM/YmYyYiIsIndlYnBhY2s6Ly9jdEZyb250ZW5kLy4vc3RhdGljL2pzL2R5bmFtaWMtY2h1bmtzLmpzPzg4ZjEiLCJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9mcm9udGVuZC9oZWFkZXIvcmVuZGVyLWxvb3AuanM/ZGJkNCIsIndlYnBhY2s6Ly9jdEZyb250ZW5kLy4vc3RhdGljL2pzL2Zyb250ZW5kL2VudHJ5LXBvaW50cy9tZW51cy5qcz8yYjU5Iiwid2VicGFjazovL2N0RnJvbnRlbmQvLi9zdGF0aWMvanMvZnJvbnRlbmQvZW50cnktcG9pbnRzL2xpdmUtc2VhcmNoLmpzPzA4ZTgiLCJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9mcm9udGVuZC93b29jb21tZXJjZS9tYWluLmpzPzQwYzgiLCJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9mcm9udGVuZC9pbnRlZ3JhdGlvbi9lbGVtZW50b3IuanM/MmYzZiIsIndlYnBhY2s6Ly9jdEZyb250ZW5kLy4vc3RhdGljL2pzL21haW4uanM/ODRhMSJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG4vKipcbiAqIFByb2JhYmx5IHNwbGl0IHN0cmluZyBpbnRvIGdlbmVyYWwgcHVycG9zZSBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yXG4gKiBldmVudCBuYW1lcyBhbmQgbGlzdGVuZXJzLiBUaGlzIGZ1bmN0aW9uIGxlYXZlcyBvYmplY3RzIHVuLW1vZGlmaWVkLlxuICpcbiAqIEBwYXJhbSB0b3BpY1N0cmluZ09yT2JqZWN0IHtTdHJpbmcgfCBPYmplY3R9XG4gKiBAcGFyYW0gbGlzdGVuZXIge0Z1bmN0aW9uIHwgZmFsc2V9XG4gKlxuICogQHJldHVybnMge09iamVjdH0ge1xuICogICAgZXZlbnRuYW1lOiBsaXN0ZW5lcixcbiAqICAgIG90aGVyZXZlbnQ6IGxpc3RlbmVyXG4gKiB9XG4gKi9cbmNvbnN0IHNwbGl0VG9waWNTdHJpbmdPck9iamVjdCA9ICh0b3BpY1N0cmluZ09yT2JqZWN0LCBsaXN0ZW5lcikgPT4gdHlwZW9mIHRvcGljU3RyaW5nT3JPYmplY3QgIT09ICdzdHJpbmcnID8gdG9waWNTdHJpbmdPck9iamVjdCA6IHRvcGljU3RyaW5nT3JPYmplY3QucmVwbGFjZSgvXFxzXFxzKy9nLCAnICcpLnRyaW0oKS5zcGxpdCgnICcpLnJlZHVjZSgoYWxsRXZlbnRzLCBldmVudCkgPT4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhbGxFdmVudHMpLCB7fSwge1xuICBbZXZlbnRdOiBsaXN0ZW5lclxufSksIHt9KTtcblxuY2xhc3MgRXZlbnRzTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9ldmVudHNcIiwge30pO1xuICB9XG5cbiAgb24odG9waWNTdHJpbmdPck9iamVjdCwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBldmVudHNBbmRMaXN0ZW5lcnMgPSBzcGxpdFRvcGljU3RyaW5nT3JPYmplY3QodG9waWNTdHJpbmdPck9iamVjdCwgbGlzdGVuZXIpO1xuICAgIE9iamVjdC5rZXlzKGV2ZW50c0FuZExpc3RlbmVycykubWFwKGV2ZW50TmFtZSA9PiB0aGlzLl9ldmVudHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRoaXMuX2V2ZW50cyksIHt9LCB7XG4gICAgICBbZXZlbnROYW1lXTogWy4uLih0aGlzLl9ldmVudHNbZXZlbnROYW1lXSB8fCBbXSksIGV2ZW50c0FuZExpc3RlbmVyc1tldmVudE5hbWVdXVxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogSW4gb3JkZXIgdG8gcmVtb3ZlIG9uZSBzaW5nbGUgbGlzdGVuZXIgeW91IHNob3VsZCBnaXZlIGFzIGFuIGFyZ3VtZW50XG4gICAqIHRoZSBzYW1lIGNhbGxiYWNrIGZ1bmN0aW9uLiBJZiB5b3Ugd2FudCB0byByZW1vdmUgKmFsbCogbGlzdGVuZXJzIGZyb21cbiAgICogYSBwYXJ0aWN1bGFyIGV2ZW50IHlvdSBzaG91bGQgbm90IHBhc3MgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHRvcGljU3RyaW5nT3JPYmplY3Qge1N0cmluZyB8IE9iamVjdH1cbiAgICogQHBhcmFtIGxpc3RlbmVyIHtGdW5jdGlvbiB8IGZhbHNlfVxuICAgKi9cblxuXG4gIG9mZih0b3BpY1N0cmluZ09yT2JqZWN0LCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGV2ZW50c0FuZExpc3RlbmVycyA9IHNwbGl0VG9waWNTdHJpbmdPck9iamVjdCh0b3BpY1N0cmluZ09yT2JqZWN0LCBsaXN0ZW5lcik7XG4gICAgT2JqZWN0LmtleXMoZXZlbnRzQW5kTGlzdGVuZXJzKS5tYXAoZXZlbnROYW1lID0+IHtcbiAgICAgIGlmICh0aGlzLl9ldmVudHNbZXZlbnROYW1lXSkge1xuICAgICAgICBpZiAoZXZlbnRzQW5kTGlzdGVuZXJzW2V2ZW50TmFtZV0pIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHNbZXZlbnROYW1lXS5zcGxpY2UodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0uaW5kZXhPZihsaXN0ZW5lcikgPj4+IDAsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2V2ZW50c1tldmVudE5hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogVHJpZ2dlciBhbiBldmVudC4gSW4gY2FzZSB5b3UgcHJvdmlkZSBtdWx0aXBsZSBldmVudHMgdmlhIHNwYWNlLXNlcGFyYXRlZFxuICAgKiBzdHJpbmcgb3IgYW4gb2JqZWN0IG9mIGV2ZW50cyBpdCB3aWxsIGV4ZWN1dGUgbGlzdGVuZXJzIGZvciBlYWNoIGV2ZW50XG4gICAqIHNlcGFyYXRlZGx5LiBZb3UgY2FuIHVzZSB0aGUgXCJhbGxcIiBldmVudCB0byB0cmlnZ2VyIGFsbCBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB0b3BpY1N0cmluZ09yT2JqZWN0IHtTdHJpbmcgfCBPYmplY3R9XG4gICAqIEBwYXJhbSBkYXRhIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgdHJpZ2dlcihldmVudE5hbWUsIGRhdGEpIHtcbiAgICBjb25zdCBldmVudHMgPSBzcGxpdFRvcGljU3RyaW5nT3JPYmplY3QoZXZlbnROYW1lKTtcblxuICAgIGNvbnN0IGRpc3BhdGNoU2luZ2xlRXZlbnQgPSBsaXN0ZW5lckRlc2NyaXB0b3IgPT4gbGlzdGVuZXJEZXNjcmlwdG9yICYmIGxpc3RlbmVyRGVzY3JpcHRvci5jYWxsKHdpbmRvdywgZGF0YSk7XG5cbiAgICBPYmplY3Qua2V5cyhldmVudHMpLm1hcChldmVudE5hbWUgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgO1xuICAgICAgICAodGhpcy5fZXZlbnRzW2V2ZW50TmFtZV0gfHwgW10pLm1hcChkaXNwYXRjaFNpbmdsZUV2ZW50KTtcbiAgICAgICAgKHRoaXMuX2V2ZW50c1snYWxsJ10gfHwgW10pLm1hcChkaXNwYXRjaFNpbmdsZUV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJyVjIFtFdmVudHNdIEV4Y2VwdGlvbiByYWlzZWQuJywgJ2NvbG9yOiByZWQ7IGZvbnQtd2VpZ2h0OiBib2xkOycpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG59XG5cbmNvbnN0IGV2ZW50cyA9IG5ldyBFdmVudHNNYW5hZ2VyKCk7XG53aW5kb3cuY3RFdmVudHMgPSBldmVudHM7XG5leHBvcnQgZGVmYXVsdCBldmVudHM7IiwiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgbG9hZFN0eWxlIH0gZnJvbSAnLi4vaGVscGVycyc7XG5leHBvcnQgY29uc3QgZmFzdE92ZXJsYXlIYW5kbGVDbGljayA9IChlLCBzZXR0aW5ncykgPT4ge1xuICBzZXR0aW5ncyA9IF9vYmplY3RTcHJlYWQoe1xuICAgIGNvbnRhaW5lcjogbnVsbCxcbiAgICAvLyBmdWxsIHwgZmFzdCB8IHNraXBcbiAgICBvcGVuU3RyYXRlZ3k6ICdmdWxsJ1xuICB9LCBzZXR0aW5ncyk7XG5cbiAgaWYgKGRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLXBhbmVsJykgJiYgc2V0dGluZ3Mub3BlblN0cmF0ZWd5ICE9PSAnc2tpcCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2V0dGluZ3Mub3BlblN0cmF0ZWd5ICE9PSAnc2tpcCcpIHtcbiAgICBpZiAoc2V0dGluZ3MuY29udGFpbmVyKSB7XG4gICAgICBzZXR0aW5ncy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5kYXRhc2V0LnBhbmVsID0gYGluJHtzZXR0aW5ncy5jb250YWluZXIuZGF0YXNldC5iZWhhdmlvdXIuaW5kZXhPZignbGVmdCcpID4gLTEgPyAnOmxlZnQnIDogc2V0dGluZ3MuY29udGFpbmVyLmRhdGFzZXQuYmVoYXZpb3VyLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSA/ICc6cmlnaHQnIDogJyd9YDtcbiAgfVxuXG4gIGlmIChzZXR0aW5ncy5vcGVuU3RyYXRlZ3kgPT09ICdmdWxsJyB8fCBzZXR0aW5ncy5vcGVuU3RyYXRlZ3kgPT09ICdza2lwJykge1xuICAgIGltcG9ydCgnLi9sYXp5L292ZXJsYXknKS50aGVuKF9yZWYgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgaGFuZGxlQ2xpY2tcbiAgICAgIH0gPSBfcmVmO1xuICAgICAgaGFuZGxlQ2xpY2soZSwgc2V0dGluZ3MpO1xuICAgIH0pO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IGZhc3RPdmVybGF5TW91bnQgPSAoZWwsIF9yZWYyKSA9PiB7XG4gIGxldCB7XG4gICAgZXZlbnQsXG4gICAgZm9jdXMgPSBmYWxzZVxuICB9ID0gX3JlZjI7XG4gIGZhc3RPdmVybGF5SGFuZGxlQ2xpY2soZXZlbnQsIHtcbiAgICBpc01vZGFsOiB0cnVlLFxuICAgIGNvbnRhaW5lcjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbC5kYXRhc2V0LnRvZ2dsZVBhbmVsIHx8IGVsLmhhc2gpLFxuICAgIGNsaWNrT3V0c2lkZTogdHJ1ZSxcbiAgICBmb2N1c1xuICB9KTtcbn07IiwiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0ICRzY3JpcHQgZnJvbSAnc2NyaXB0anMnO1xuaW1wb3J0IHsgZmFzdE92ZXJsYXlIYW5kbGVDbGljayB9IGZyb20gJy4vZnJvbnRlbmQvZmFzdC1vdmVybGF5JztcbmxldCBsb2FkZWRDaHVua3MgPSB7fTtcbmxldCBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG51bGw7XG5cbmNvbnN0IGxvYWRDaHVua1dpdGhQYXlsb2FkID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIGxldCBwYXlsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgbGV0IGVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGNvbnN0IGltbWVkaWF0ZU1vdW50ID0gKCkgPT4ge1xuICAgIGlmIChlbCkge1xuICAgICAgbG9hZGVkQ2h1bmtzW2NodW5rLmlkXS5tb3VudChlbCwgcGF5bG9hZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIDtcbiAgICAgIFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNodW5rLnNlbGVjdG9yKV0ubWFwKGVsID0+IHtcbiAgICAgICAgbG9hZGVkQ2h1bmtzW2NodW5rLmlkXS5tb3VudChlbCwgcGF5bG9hZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKGxvYWRlZENodW5rc1tjaHVuay5pZF0pIHtcbiAgICBpbW1lZGlhdGVNb3VudCgpO1xuICB9IGVsc2Uge1xuICAgIGlmIChjaHVuay5nbG9iYWxfZGF0YSkge1xuICAgICAgY2h1bmsuZ2xvYmFsX2RhdGEubWFwKGRhdGEgPT4ge1xuICAgICAgICBpZiAoIWRhdGEudmFyIHx8ICFkYXRhLmRhdGEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3dbZGF0YS52YXJdID0gZGF0YS5kYXRhO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNodW5rLmRlcHMpIHtcbiAgICAgIGNvbnN0IGRlcHNUaGF0QXJlTm90TG9hZGVkSWRzID0gY2h1bmsuZGVwcy5maWx0ZXIoaWQgPT4gIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmMqPVwiJHtjaHVuay5kZXBzX2RhdGFbaWRdfVwiXWApKTtcbiAgICAgIGNvbnN0IGRlcHNUaGF0QXJlTm90TG9hZGVkID0gZGVwc1RoYXRBcmVOb3RMb2FkZWRJZHMubWFwKGlkID0+IGNodW5rLmRlcHNfZGF0YVtpZF0pO1xuXG4gICAgICBpZiAoZGVwc1RoYXRBcmVOb3RMb2FkZWRJZHMuaW5jbHVkZXMoJ3VuZGVyc2NvcmUnKSkge1xuICAgICAgICAkc2NyaXB0KGNodW5rLmRlcHNfZGF0YS51bmRlcnNjb3JlLCAoKSA9PiB7XG4gICAgICAgICAgJHNjcmlwdChbY2h1bmsudXJsLCAuLi5kZXBzVGhhdEFyZU5vdExvYWRlZF0sIGltbWVkaWF0ZU1vdW50KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkc2NyaXB0KFtjaHVuay51cmwsIC4uLmRlcHNUaGF0QXJlTm90TG9hZGVkXSwgaW1tZWRpYXRlTW91bnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAkc2NyaXB0KGNodW5rLnVybCwgaW1tZWRpYXRlTW91bnQpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgYWRkQ2h1bmtUb0ludGVyc2VjdGlvbk9ic2VydmVyID0gY2h1bmsgPT4ge1xuICBpZiAoIXdpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHtcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgIGVudHJpZXMubWFwKF9yZWYgPT4ge1xuICAgICAgICBsZXQge1xuICAgICAgICAgIGJvdW5kaW5nQ2xpZW50UmVjdCxcbiAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgaXNJbnRlcnNlY3RpbmdcbiAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgIGNvbnN0IGNodW5rID0gdGFyZ2V0Ll9fY2h1bmtfXztcblxuICAgICAgICBpZiAoIWlzSW50ZXJzZWN0aW5nICYmIGJvdW5kaW5nQ2xpZW50UmVjdC55ID4gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGF0ZSA9IGB0YXJnZXQtYmVmb3JlLWJvdHRvbWA7XG5cbiAgICAgICAgaWYgKCFpc0ludGVyc2VjdGluZyAmJiBib3VuZGluZ0NsaWVudFJlY3QueSA8IDApIHtcbiAgICAgICAgICBzdGF0ZSA9ICd0YXJnZXQtYWZ0ZXItYm90dG9tJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ3RhcmdldC1iZWZvcmUtYm90dG9tJyAmJiAhbG9hZGVkQ2h1bmtzW2NodW5rLmlkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvYWRDaHVua1dpdGhQYXlsb2FkKGNodW5rLCB7XG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH0sIGNodW5rLmVsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgO1xuICBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjaHVuay5zZWxlY3RvcildLm1hcChlbCA9PiB7XG4gICAgaWYgKGVsLmlvT2JzZXJ2aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWwuaW9PYnNlcnZpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2h1bmsudGFyZ2V0KTtcblxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGFyZ2V0Ll9fY2h1bmtfXyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2h1bmspLCB7fSwge1xuICAgICAgZWxcbiAgICB9KTtcbiAgICBpbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRhcmdldCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1vdW50RHluYW1pY0NodW5rcyA9ICgpID0+IHtcbiAgY29uc3QgcmVxdWVzdElkbGVDYWxsYmFjayA9IHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrIHx8IGZ1bmN0aW9uIChjYikge1xuICAgIHZhciBzdGFydCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY2Ioe1xuICAgICAgICBkaWRUaW1lb3V0OiBmYWxzZSxcbiAgICAgICAgdGltZVJlbWFpbmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCA1MCAtIChEYXRlLm5vdygpIC0gc3RhcnQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMSk7XG4gIH07XG5cbiAgY3RfbG9jYWxpemF0aW9ucy5keW5hbWljX2pzX2NodW5rcy5tYXAoY2h1bmsgPT4ge1xuICAgIGlmICghY2h1bmsuaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY2h1bmsuc2VsZWN0b3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNodW5rLnRyaWdnZXIpIHtcbiAgICAgIGlmIChjaHVuay50cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIDtcbiAgICAgICAgWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY2h1bmsuc2VsZWN0b3IpXS5tYXAoZWwgPT4ge1xuICAgICAgICAgIGlmIChlbC5oYXNMYXp5TG9hZENsaWNrTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbC5oYXNMYXp5TG9hZENsaWNrTGlzdGVuZXIgPSB0cnVlO1xuXG4gICAgICAgICAgY29uc3QgY2IgPSBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoY2h1bmsuaWdub3JlX2NsaWNrICYmIGV2ZW50LnRhcmdldC5tYXRjaGVzKGNodW5rLmlnbm9yZV9jbGljaykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoZWwuY2xvc2VzdCgnLmN0LXBhbmVsLmFjdGl2ZScpICYmIGVsLm1hdGNoZXMoJy5jdC1oZWFkZXItYWNjb3VudFtocmVmKj1cImFjY291bnQtbW9kYWxcIl0nKSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaHVuay5oYXNfbW9kYWxfbG9hZGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdHVhbGx5TG9hZENodW5rID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvYWRpbmdIdG1sID0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmVoYXZpb3VyPVwibW9kYWxcIiBjbGFzcz1cImN0LXBhbmVsICR7Y2h1bmsuaGFzX21vZGFsX2xvYWRlci5jbGFzcyA/IGNodW5rLmhhc19tb2RhbF9sb2FkZXIuY2xhc3MgOiAnJ31cIiAke2NodW5rLmhhc19tb2RhbF9sb2FkZXIuaWQgPyBgaWQ9XCIke2NodW5rLmhhc19tb2RhbF9sb2FkZXIuaWR9XCJgIDogJyd9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1sb2FkZXI9XCJjaXJjbGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGxvYWRpbmdIdG1sO1xuICAgICAgICAgICAgICAgIGxldCBkaXZSZWYgPSBkaXYuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmN0LWRyYXdlci1jYW52YXMnKS5hcHBlbmRDaGlsZChkaXYuZmlyc3RFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgICAgICAgIGZhc3RPdmVybGF5SGFuZGxlQ2xpY2soZXZlbnQsIHtcbiAgICAgICAgICAgICAgICAgIG9wZW5TdHJhdGVneTogJ2Zhc3QnLFxuICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiBkaXZSZWZcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBsb2FkQ2h1bmtXaXRoUGF5bG9hZChjaHVuaywge1xuICAgICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgICB9LCBlbCk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuZGF0YXNldC5wYW5lbCkge1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3QtcGFuZWwuYWN0aXZlJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhbmVsKSB7XG4gICAgICAgICAgICAgICAgICBsZXQgbWF5YmVCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS10b2dnbGUtcGFuZWw9XCIjJHtjdXJyZW50UGFuZWwuaWR9XCJdYCkgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2hyZWY9XCIjJHtjdXJyZW50UGFuZWwuaWR9XCJdYCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChtYXliZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICBtYXliZUJ1dHRvbi5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxseUxvYWRDaHVuaygpO1xuICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjdHVhbGx5TG9hZENodW5rKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvYWRDaHVua1dpdGhQYXlsb2FkKGNodW5rLCB7XG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgfSwgZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbC5keW5hbWljSnNDaHVua1N0b3AgPSAoKSA9PiB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGNiKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2h1bmsudHJpZ2dlciA9PT0gJ3N1Ym1pdCcpIHtcbiAgICAgICAgO1xuICAgICAgICBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjaHVuay5zZWxlY3RvcildLm1hcChlbCA9PiB7XG4gICAgICAgICAgaWYgKGVsLmhhc0xhenlMb2FkU3VibWl0TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbC5oYXNMYXp5TG9hZFN1Ym1pdExpc3RlbmVyID0gdHJ1ZTtcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBldmVudCA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbG9hZENodW5rV2l0aFBheWxvYWQoY2h1bmssIHtcbiAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgIH0sIGVsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaHVuay50cmlnZ2VyID09PSAnaG92ZXInKSB7XG4gICAgICAgIDtcbiAgICAgICAgWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY2h1bmsuc2VsZWN0b3IpXS5tYXAoZWwgPT4ge1xuICAgICAgICAgIGlmIChlbC5oYXNMYXp5TG9hZEhvdmVyTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbC5oYXNMYXp5TG9hZEhvdmVyTGlzdGVuZXIgPSB0cnVlO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsb2FkQ2h1bmtXaXRoUGF5bG9hZChjaHVuaywge1xuICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgfSwgZWwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNodW5rLnRyaWdnZXIgPT09ICdpbnRlcnNlY3Rpb24tb2JzZXJ2ZXInKSB7XG4gICAgICAgIGFkZENodW5rVG9JbnRlcnNlY3Rpb25PYnNlcnZlcihjaHVuayk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaHVuay50cmlnZ2VyID09PSAnc2Nyb2xsJykge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBsZXQgcHJldlNjcm9sbCA9IHNjcm9sbFk7XG5cbiAgICAgICAgICBsZXQgY2IgPSBlID0+IHtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhzY3JvbGxZIC0gcHJldlNjcm9sbCkgPiAzMCkge1xuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYik7XG4gICAgICAgICAgICAgIGxvYWRDaHVua1dpdGhQYXlsb2FkKGNodW5rKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYiwge1xuICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2FkQ2h1bmtXaXRoUGF5bG9hZChjaHVuayk7XG4gICAgfVxuICB9KTtcbn07XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJEeW5hbWljQ2h1bmsgPSAoaWQsIGltcGxlbWVudGF0aW9uKSA9PiB7XG4gIGlmIChsb2FkZWRDaHVua3NbaWRdKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9hZGVkQ2h1bmtzW2lkXSA9IGltcGxlbWVudGF0aW9uO1xufTsiLCJpbXBvcnQgY3RFdmVudHMgZnJvbSAnY3QtZXZlbnRzJztcbmxldCBwcmV2SW5uZXJXaWR0aCA9IG51bGw7XG5sZXQgcHJldlNjcm9sbFkgPSBudWxsO1xuXG5jb25zdCByZW5kZXJIZWFkZXIgPSAoKSA9PiB7XG4gIGlmICghcHJldklubmVyV2lkdGggfHwgd2luZG93LmlubmVyV2lkdGggIT09IHByZXZJbm5lcldpZHRoKSB7XG4gICAgcHJldklubmVyV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjdEV2ZW50cy50cmlnZ2VyKCdjdDpoZWFkZXI6cmVuZGVyLWZyYW1lJyk7XG4gIH1cblxuICBpZiAocHJldlNjcm9sbFkgPT09IG51bGwgfHwgd2luZG93LnNjcm9sbFkgIT09IHByZXZTY3JvbGxZKSB7XG4gICAgcHJldlNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWTtcbiAgICBjdEV2ZW50cy50cmlnZ2VyKCdjdDpzY3JvbGw6cmVuZGVyLWZyYW1lJyk7XG4gIH1cblxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVySGVhZGVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBtb3VudFJlbmRlckhlYWRlckxvb3AgPSAoKSA9PiB7XG4gIHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXJIZWFkZXIpO1xufTsiLCJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgY3RFdmVudHMgZnJvbSAnY3QtZXZlbnRzJztcbmltcG9ydCB7IGdldEN1cnJlbnRTY3JlZW4gfSBmcm9tICcuLi9oZWxwZXJzL2N1cnJlbnQtc2NyZWVuJztcblxuY29uc3QgbG9hZE1lbnVFbnRyeSA9ICgpID0+IGltcG9ydCgnLi4vaGVhZGVyL21lbnUnKTtcblxuZXhwb3J0IGNvbnN0IG1lbnVFbnRyeVBvaW50cyA9IFt7XG4gIGVsczogKCkgPT4gWydoZWFkZXIgW2RhdGEtZGV2aWNlPVwiZGVza3RvcFwiXSBbZGF0YS1pZCo9XCJtZW51XCJdID4gLm1lbnUnXSxcbiAgY29uZGl0aW9uOiAoKSA9PiBnZXRDdXJyZW50U2NyZWVuKCkgPT09ICdkZXNrdG9wJyxcbiAgbG9hZDogbG9hZE1lbnVFbnRyeSxcbiAgb25Mb2FkOiBmYWxzZSxcbiAgbW91bnQ6IF9yZWYgPT4ge1xuICAgIGxldCB7XG4gICAgICBlbCxcbiAgICAgIG1vdW50TWVudUxldmVsXG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIG1vdW50TWVudUxldmVsKGVsLCB7XG4gICAgICBzdGFydFBvc2l0aW9uOiAnbGVmdCdcbiAgICB9KTtcbiAgfSxcbiAgZXZlbnRzOiBbJ2N0OmdlbmVyYWw6ZGV2aWNlLWNoYW5nZScsICdjdDpoZWFkZXI6aW5pdC1wb3BwZXInXVxufSwge1xuICBlbHM6ICgpID0+IFsnaGVhZGVyIFtkYXRhLWRldmljZT1cImRlc2t0b3BcIl0gW2RhdGEtaWQqPVwibWVudVwiXSA+IC5tZW51IC5tZW51LWl0ZW0taGFzLWNoaWxkcmVuJywgJ2hlYWRlciBbZGF0YS1kZXZpY2U9XCJkZXNrdG9wXCJdIFtkYXRhLWlkKj1cIm1lbnVcIl0gPiAubWVudSAucGFnZV9pdGVtX2hhc19jaGlsZHJlbiddLFxuICBsb2FkOiBsb2FkTWVudUVudHJ5LFxuICBtb3VudDogX3JlZjIgPT4ge1xuICAgIGxldCB7XG4gICAgICBoYW5kbGVVcGRhdGUsXG4gICAgICBlbFxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4gaGFuZGxlVXBkYXRlKGVsKTtcbiAgfSxcbiAgb25Mb2FkOiBmYWxzZSxcbiAgZXZlbnRzOiBbJ2N0OmdlbmVyYWw6ZGV2aWNlLWNoYW5nZScsICdjdDpoZWFkZXI6aW5pdC1wb3BwZXInXSxcbiAgY29uZGl0aW9uOiBfcmVmMyA9PiB7XG4gICAgbGV0IHtcbiAgICAgIGFsbEVsc1xuICAgIH0gPSBfcmVmMztcbiAgICByZXR1cm4gZ2V0Q3VycmVudFNjcmVlbigpID09PSAnZGVza3RvcCc7XG4gIH1cbn0sIHtcbiAgZWxzOiAoKSA9PiBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaGVhZGVyIFtkYXRhLWRldmljZT1cImRlc2t0b3BcIl0gW2RhdGEtaWRePVwibWVudVwiXVtkYXRhLXJlc3BvbnNpdmVdJyldLFxuICAvLyBsb2FkOiAoKSA9PiBuZXcgUHJvbWlzZSgocikgPT4gcih7IG1vdW50OiBtb3VudFJlc3BvbnNpdmVIZWFkZXIgfSkpLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoJy4uL2hlYWRlci9yZXNwb25zaXZlLWRlc2t0b3AtbWVudScpLFxuICAvLyBvbkxvYWQ6IGZhbHNlLFxuICBldmVudHM6IFsnY3Q6Z2VuZXJhbDpkZXZpY2UtY2hhbmdlJywgJ2N0OmhlYWRlcjpyZW5kZXItZnJhbWUnXSxcbiAgY29uZGl0aW9uOiAoKSA9PiB7XG4gICAgaWYgKGdldEN1cnJlbnRTY3JlZW4oKSAhPT0gJ2Rlc2t0b3AnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgbGV0IGFsbFJlc3VsdHMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaGVhZGVyIFtkYXRhLWRldmljZT1cImRlc2t0b3BcIl0gW2RhdGEtaWRePVwibWVudVwiXVtkYXRhLXJlc3BvbnNpdmVdJyldLm1hcChtZW51ID0+IHtcbiAgICAgIC8vIHRydWUgLSBubyBlbm91Z2ggc3BhY2VcbiAgICAgIC8vIGZhbHNlIGVub3VnaCBzcGFjZVxuICAgICAgaWYgKHdpbmRvdy5ibG9ja3N5UmVzcG9uc2l2ZU1lbnVDYWNoZSAmJiB3aW5kb3cuYmxvY2tzeVJlc3BvbnNpdmVNZW51Q2FjaGVbbWVudS5pZF0gJiYgd2luZG93LmJsb2Nrc3lSZXNwb25zaXZlTWVudUNhY2hlW21lbnUuaWRdLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5ibG9ja3N5UmVzcG9uc2l2ZU1lbnVDYWNoZVttZW51LmlkXS5lbmFibGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1lbnUuZmlyc3RFbGVtZW50Q2hpbGQpIHtcbiAgICAgICAgaWYgKCF3aW5kb3cuYmxvY2tzeVJlc3BvbnNpdmVNZW51Q2FjaGUpIHtcbiAgICAgICAgICB3aW5kb3cuYmxvY2tzeVJlc3BvbnNpdmVNZW51Q2FjaGUgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpbmRvdy5ibG9ja3N5UmVzcG9uc2l2ZU1lbnVDYWNoZSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgd2luZG93LmJsb2Nrc3lSZXNwb25zaXZlTWVudUNhY2hlKSwge30sIHtcbiAgICAgICAgICBbbWVudS5pZF06IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgYmFzZUNvbnRhaW5lciA9IG1lbnUuY2xvc2VzdCgnW2NsYXNzKj1cImN0LWNvbnRhaW5lclwiXScpO1xuICAgICAgbGV0IGhhc1Jlc3BvbnNpdmUgPSBiYXNlQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gWy4uLmJhc2VDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtaWRdOm5vdChbZGF0YS1pZCo9XCJtZW51XCJdKScpXS5yZWR1Y2UoKHQsIGl0ZW0pID0+IHtcbiAgICAgICAgbGV0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaXRlbSk7XG4gICAgICAgIHJldHVybiB0ICsgaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArIHBhcnNlSW50KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpICsgcGFyc2VJbnQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXJpZ2h0JykpO1xuICAgICAgfSwgMCkgPCBbLi4uYmFzZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1pZCo9XCJtZW51XCJdID4gKiA+IConKV0ucmVkdWNlKCh0LCBlbCkgPT4ge1xuICAgICAgICBsZXQgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbC5jbG9zZXN0KCdbZGF0YS1pZCo9XCJtZW51XCJdJykpO1xuICAgICAgICByZXR1cm4gdCArIGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgcGFyc2VJbnQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWxlZnQnKSkgKyBwYXJzZUludChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tcmlnaHQnKSk7XG4gICAgICB9LCAwKTtcblxuICAgICAgaWYgKCFoYXNSZXNwb25zaXZlKSB7XG4gICAgICAgIGxldCBoYWRSZXNwb25zaXZlID0gbWVudS5kYXRhc2V0LnJlc3BvbnNpdmU7XG4gICAgICAgIG1lbnUuZGF0YXNldC5yZXNwb25zaXZlID0gJ3llcyc7XG5cbiAgICAgICAgaWYgKGhhZFJlc3BvbnNpdmUgPT09ICdubycpIHtcbiAgICAgICAgICBjdEV2ZW50cy50cmlnZ2VyKCdjdDpoZWFkZXI6aW5pdC1wb3BwZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXdpbmRvdy5ibG9ja3N5UmVzcG9uc2l2ZU1lbnVDYWNoZSkge1xuICAgICAgICB3aW5kb3cuYmxvY2tzeVJlc3BvbnNpdmVNZW51Q2FjaGUgPSB7fTtcbiAgICAgIH1cblxuICAgICAgd2luZG93LmJsb2Nrc3lSZXNwb25zaXZlTWVudUNhY2hlID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB3aW5kb3cuYmxvY2tzeVJlc3BvbnNpdmVNZW51Q2FjaGUpLCB7fSwge1xuICAgICAgICBbbWVudS5pZF06IHtcbiAgICAgICAgICBlbmFibGVkOiBoYXNSZXNwb25zaXZlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGhhc1Jlc3BvbnNpdmU7XG4gICAgfSk7XG4gICAgbGV0IGZpbmFsUmVzID0gYWxsUmVzdWx0cy5maWx0ZXIociA9PiAhIXIpLmxlbmd0aCA+IDA7XG4gICAgcmV0dXJuIGZpbmFsUmVzO1xuICB9XG59LCB7XG4gIGVsczogKCkgPT4gJ2hlYWRlciBbZGF0YS1kZXZpY2U9XCJkZXNrdG9wXCJdIFtkYXRhLWlkXj1cIm1lbnVcIl06bm90KFtkYXRhLXJlc3BvbnNpdmVdKScsXG4gIGxvYWQ6ICgpID0+IG5ldyBQcm9taXNlKHIgPT4gcih7XG4gICAgbW91bnQ6IGVsID0+IHtcbiAgICAgIGN0RXZlbnRzLnRyaWdnZXIoJ2N0OmhlYWRlcjppbml0LXBvcHBlcicpO1xuICAgIH1cbiAgfSkpXG59XTsiLCJleHBvcnQgY29uc3QgbGl2ZVNlYXJjaEVudHJ5UG9pbnRzID0gW3tcbiAgZWxzOiAoKSA9PiBbWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZWFyY2gtZm9ybVtkYXRhLWxpdmUtcmVzdWx0c10nKV0uZmlsdGVyKGVsID0+ICFlbC5tYXRjaGVzKCdbaWQ9XCJzZWFyY2gtbW9kYWxcIl0gLnNlYXJjaC1mb3JtW2RhdGEtbGl2ZS1yZXN1bHRzXScpICYmICFlbC5tYXRjaGVzKCcuY3Qtc2lkZWJhciAuY3Qtd2lkZ2V0IC53b29jb21tZXJjZS1wcm9kdWN0LXNlYXJjaCcpKV0sXG4gIGxvYWQ6ICgpID0+IGltcG9ydCgnLi4vc2VhcmNoLWltcGxlbWVudGF0aW9uJyksXG4gIG1vdW50OiBfcmVmID0+IHtcbiAgICBsZXQge1xuICAgICAgbW91bnQsXG4gICAgICBlbFxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiBtb3VudChlbCwge30pO1xuICB9LFxuICB0cmlnZ2VyOiBbJ2lucHV0J11cbn0sIHtcbiAgZWxzOiAnLmN0LXNpZGViYXIgLmN0LXdpZGdldCAuc2VhcmNoLWZvcm06bm90KC53b29jb21tZXJjZS1wcm9kdWN0LXNlYXJjaClbZGF0YS1saXZlLXJlc3VsdHNdJyxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuLi9zZWFyY2gtaW1wbGVtZW50YXRpb24nKSxcbiAgdHJpZ2dlcjogWydpbnB1dCddXG59LCB7XG4gIGVsczogJy5jdC1zaWRlYmFyIC5jdC13aWRnZXQgLndvb2NvbW1lcmNlLXByb2R1Y3Qtc2VhcmNoJyxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuLi9zZWFyY2gtaW1wbGVtZW50YXRpb24nKSxcbiAgbW91bnQ6IF9yZWYyID0+IHtcbiAgICBsZXQge1xuICAgICAgbW91bnQsXG4gICAgICBlbFxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4gbW91bnQoZWwsIHt9KTtcbiAgfSxcbiAgdHJpZ2dlcjogWydpbnB1dCddXG59LCB7XG4gIGVsczogJ1tpZD1cInNlYXJjaC1tb2RhbFwiXSAuc2VhcmNoLWZvcm1bZGF0YS1saXZlLXJlc3VsdHNdJyxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuLi9zZWFyY2gtaW1wbGVtZW50YXRpb24nKSxcbiAgbW91bnQ6IF9yZWYzID0+IHtcbiAgICBsZXQge1xuICAgICAgbW91bnQsXG4gICAgICBlbFxuICAgIH0gPSBfcmVmMztcbiAgICByZXR1cm4gbW91bnQoZWwsIHtcbiAgICAgIG1vZGU6ICdtb2RhbCcsXG4gICAgICBwZXJQYWdlOiA2XG4gICAgfSk7XG4gIH0sXG4gIHRyaWdnZXI6IFsnaW5wdXQnXVxufV07IiwiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IHsgb25Eb2N1bWVudExvYWRlZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xuaW1wb3J0IGN0RXZlbnRzIGZyb20gJ2N0LWV2ZW50cyc7XG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5mdW5jdGlvbiBpc1RvdWNoRGV2aWNlKCkge1xuICB0cnkge1xuICAgIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdUb3VjaEV2ZW50Jyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHdvb0VudHJ5UG9pbnRzID0gW3tcbiAgZWxzOiAnYm9keS5zaW5nbGUtcHJvZHVjdCAud29vY29tbWVyY2UtcHJvZHVjdC1nYWxsZXJ5JyxcbiAgY29uZGl0aW9uOiAoKSA9PiAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53b29jb21tZXJjZS1wcm9kdWN0LWdhbGxlcnkgLmN0LWltYWdlLWNvbnRhaW5lcicpLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoJy4vc2luZ2xlLXByb2R1Y3QtZ2FsbGVyeScpLFxuICB0cmlnZ2VyOiBbJ2hvdmVyLXdpdGgtY2xpY2snXVxufSwgX29iamVjdFNwcmVhZCh7XG4gIGVsczogJ2Zvcm0udmFyaWF0aW9uc19mb3JtJyxcbiAgY29uZGl0aW9uOiAoKSA9PiAhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53b29jb21tZXJjZS1wcm9kdWN0LWdhbGxlcnkgLmN0LWltYWdlLWNvbnRhaW5lcicpLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoJy4vdmFyaWFibGUtcHJvZHVjdHMnKVxufSwgaXNUb3VjaERldmljZSgpID8ge30gOiB7XG4gIHRyaWdnZXI6IFsnaG92ZXInXVxufSksIHtcbiAgZWxzOiAnLnF1YW50aXR5ID4gKicsXG4gIGxvYWQ6ICgpID0+IGltcG9ydCgnLi9xdWFudGl0eS1pbnB1dCcpLFxuICB0cmlnZ2VyOiBbJ2NsaWNrJ11cbn0sIHtcbiAgZWxzOiAoKSA9PiBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmN0LWFqYXgtYWRkLXRvLWNhcnQgLmNhcnQnKSwgLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmN0LWZsb2F0aW5nLWJhciAuY2FydCcpXSxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuL2FkZC10by1jYXJ0LXNpbmdsZScpLFxuICB0cmlnZ2VyOiBbJ3N1Ym1pdCddXG59LCB7XG4gIGVsczogJy5jdC1oZWFkZXItY2FydCwgLmFqYXhfYWRkX3RvX2NhcnQnLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoJy4vbWluaS1jYXJ0JyksXG4gIGV2ZW50czogWydjdDpoZWFkZXI6dXBkYXRlJ10sXG4gIHRyaWdnZXI6IFsnaG92ZXItd2l0aC10b3VjaCddXG59XTtcblxuY29uc3QgaW5pdFNob3J0Y3V0ID0gKCkgPT4ge1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBsZXQgbWF5YmVTaG9ydGN1dENhcnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3Qtc2hvcnRjdXRzLWNvbnRhaW5lciBbZGF0YS1zaG9ydGN1dD1cImNhcnRcIl0nKTtcblxuICAgIGlmIChtYXliZVNob3J0Y3V0Q2FydCAmJiAhbWF5YmVTaG9ydGN1dENhcnQuaGFzQ2xpY2tMaXN0ZW5lcikge1xuICAgICAgbWF5YmVTaG9ydGN1dENhcnQuaGFzQ2xpY2tMaXN0ZW5lciA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGhhbmRsZUV2ZW50ID0gZXZlbnQgPT4ge1xuICAgICAgICBsZXQgbWF5YmVDYXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmN0LWhlYWRlci1jYXJ0IC5jdC1vZmZjYW52YXMtdHJpZ2dlcicpO1xuXG4gICAgICAgIGlmICghbWF5YmVDYXJ0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbWF5YmVDYXJ0LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoZXZlbnQudHlwZSwge1xuICAgICAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgfTtcblxuICAgICAgbWF5YmVTaG9ydGN1dENhcnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgaGFuZGxlRXZlbnQpO1xuICAgICAgbWF5YmVTaG9ydGN1dENhcnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVFdmVudCk7XG4gICAgfVxuXG4gICAgO1xuICAgIFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjd29vLWNhcnQtcGFuZWwgLnF0eScpXS5tYXAoZWwgPT4ge1xuICAgICAgaWYgKGVsLmhhc0NoYW5nZUxpc3RlbmVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZWwuaGFzQ2hhbmdlTGlzdGVuZXIgPSB0cnVlO1xuICAgICAgJChlbCkub24oJ2NoYW5nZScsIGUgPT4ge1xuICAgICAgICB2YXIgaXRlbV9oYXNoID0gJChlbCkuYXR0cignbmFtZScpLnJlcGxhY2UoL2NhcnRcXFsoW1xcd10rKVxcXVxcW3F0eVxcXS9nLCAnJDEnKTtcbiAgICAgICAgdmFyIGl0ZW1fcXVhbnRpdHkgPSAkKGVsKS52YWwoKTtcbiAgICAgICAgdmFyIGN1cnJlbnRWYWwgPSBwYXJzZUZsb2F0KGl0ZW1fcXVhbnRpdHkpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgIHR5cGU6ICdQT1NUJyxcbiAgICAgICAgICB1cmw6IGN0X2xvY2FsaXphdGlvbnMuYWpheF91cmwsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYWN0aW9uOiAnYmxvY2tzeV91cGRhdGVfcXR5X2NhcnQnLFxuICAgICAgICAgICAgaGFzaDogaXRlbV9oYXNoLFxuICAgICAgICAgICAgcXVhbnRpdHk6IGN1cnJlbnRWYWxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xuICAgICAgICAgICAgalF1ZXJ5KCdib2R5JykudHJpZ2dlcigndXBkYXRlZF93Y19kaXYnKTtcbiAgICAgICAgICAgIGN0RXZlbnRzLnRyaWdnZXIoJ2N0OmhlYWRlcjp1cGRhdGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIDEwMCk7XG59O1xuXG5vbkRvY3VtZW50TG9hZGVkKGluaXRTaG9ydGN1dCk7XG5jdEV2ZW50cy5vbignYmxvY2tzeTpmcm9udGVuZDppbml0JywgaW5pdFNob3J0Y3V0KTsiLCJleHBvcnQgY29uc3QgbW91bnRFbGVtZW50b3JJbnRlZ3JhdGlvbiA9ICgpID0+IHtcbiAgaWYgKCF3aW5kb3cuZWxlbWVudG9yRnJvbnRlbmQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBlbGVtZW50b3JGcm9udGVuZC5lbGVtZW50cy4kZG9jdW1lbnQub2ZmKCdjbGljaycsIGVsZW1lbnRvckZyb250ZW5kLnV0aWxzLmFuY2hvcnMuZ2V0U2V0dGluZ3MoJ3NlbGVjdG9ycy5saW5rcycpLCBlbGVtZW50b3JGcm9udGVuZC51dGlscy5hbmNob3JzLmhhbmRsZUFuY2hvckxpbmtzKTtcbiAgfSwgMTAwMCk7XG59OyIsImNvbnN0IF9leGNsdWRlZCA9IFtcIm1vdW50XCIsIFwiZWxcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCAnLi9ldmVudHMnO1xuaW1wb3J0ICcuL3B1YmxpYy1wYXRoLmpzJztcbmltcG9ydCBjdEV2ZW50cyBmcm9tICdjdC1ldmVudHMnO1xuaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCB7IHdhdGNoTGF5b3V0Q29udGFpbmVyRm9yUmV2ZWFsIH0gZnJvbSAnLi9mcm9udGVuZC9hbmltYXRlZC1lbGVtZW50JztcbmltcG9ydCB7IG9uRG9jdW1lbnRMb2FkZWQsIGhhbmRsZUVudHJ5UG9pbnRzLCBsb2FkU3R5bGUgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFNjcmVlbiB9IGZyb20gJy4vZnJvbnRlbmQvaGVscGVycy9jdXJyZW50LXNjcmVlbic7XG5pbXBvcnQgeyBtb3VudER5bmFtaWNDaHVua3MgfSBmcm9tICcuL2R5bmFtaWMtY2h1bmtzJztcbmltcG9ydCB7IG1vdW50UmVuZGVySGVhZGVyTG9vcCB9IGZyb20gJy4vZnJvbnRlbmQvaGVhZGVyL3JlbmRlci1sb29wJztcbmltcG9ydCB7IG1lbnVFbnRyeVBvaW50cyB9IGZyb20gJy4vZnJvbnRlbmQvZW50cnktcG9pbnRzL21lbnVzJztcbmltcG9ydCB7IGxpdmVTZWFyY2hFbnRyeVBvaW50cyB9IGZyb20gJy4vZnJvbnRlbmQvZW50cnktcG9pbnRzL2xpdmUtc2VhcmNoJztcbmltcG9ydCB7IHdvb0VudHJ5UG9pbnRzIH0gZnJvbSAnLi9mcm9udGVuZC93b29jb21tZXJjZS9tYWluJztcbmltcG9ydCB7IG1vdW50RWxlbWVudG9ySW50ZWdyYXRpb24gfSBmcm9tICcuL2Zyb250ZW5kL2ludGVncmF0aW9uL2VsZW1lbnRvcic7XG4vKipcbiAqIGlPUyBob3ZlciBmaXhcbiAqL1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHggPT4gMCk7XG5leHBvcnQgY29uc3QgYXJlV2VEZWFsaW5nV2l0aFNhZmFyaSA9IC9hcHBsZS9pLnRlc3QobmF2aWdhdG9yLnZlbmRvcik7XG5leHBvcnQgeyBnZXRDdXJyZW50U2NyZWVuIH0gZnJvbSAnLi9mcm9udGVuZC9oZWxwZXJzL2N1cnJlbnQtc2NyZWVuJztcbmltcG9ydCB7IGZhc3RPdmVybGF5SGFuZGxlQ2xpY2ssIGZhc3RPdmVybGF5TW91bnQgfSBmcm9tICcuL2Zyb250ZW5kL2Zhc3Qtb3ZlcmxheSc7XG5leHBvcnQgY29uc3QgYWxsRnJvbnRlbmRFbnRyeVBvaW50cyA9IFsuLi5tZW51RW50cnlQb2ludHMsIC4uLmxpdmVTZWFyY2hFbnRyeVBvaW50cywgLi4ud29vRW50cnlQb2ludHMsXG4vKlxue1xuXHRlbHM6ICcjbWFpbiBbZGF0YS1zdGlja3ldJyxcblx0bG9hZDogKCkgPT4gaW1wb3J0KCcuL2Zyb250ZW5kL3N0aWNreScpLFxuXHRjb25kaXRpb246ICgpID0+IGFyZVdlRGVhbGluZ1dpdGhTYWZhcmksXG59LFxuICAgKi9cbntcbiAgZWxzOiAnW2RhdGEtcGFyYWxsYXhdJyxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuL2Zyb250ZW5kL3BhcmFsbGF4L3JlZ2lzdGVyLWxpc3RlbmVyJyksXG4gIGV2ZW50czogWydibG9ja3N5OnBhcmFsbGF4OmluaXQnXVxufSwge1xuICBlbHM6ICcuZmxleHktY29udGFpbmVyW2RhdGEtZmxleHkqPVwibm9cIl0nLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoJy4vZnJvbnRlbmQvZmxleHknKSxcbiAgZXZlbnRzOiBbJ2N0OmZsZXh5OnVwZGF0ZSddLFxuICB0cmlnZ2VyOiBbJ2hvdmVyLXdpdGgtdG91Y2gnXVxufSwge1xuICBlbHM6ICcuY3Qtc2hhcmUtYm94IFtkYXRhLW5ldHdvcms9XCJwaW50ZXJlc3RcIl0nLFxuICBsb2FkOiAoKSA9PiBpbXBvcnQoJy4vZnJvbnRlbmQvc29jaWFsLWJ1dHRvbnMnKSxcbiAgdHJpZ2dlcjogWydjbGljayddXG59LCB7XG4gIGVsczogJy5jdC1zaGFyZS1ib3ggW2RhdGEtbmV0d29ya106bm90KFtkYXRhLW5ldHdvcms9XCJwaW50ZXJlc3RcIl0pOm5vdChbZGF0YS1uZXR3b3JrPVwiZW1haWxcIl0pJyxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuL2Zyb250ZW5kL3NvY2lhbC1idXR0b25zJyksXG4gIHRyaWdnZXI6IFsnY2xpY2snXSxcbiAgY29uZGl0aW9uOiAoKSA9PiAhL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpXG59LCB7XG4gIGVsczogWy4uLihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY3QtaGVhZGVyLWNhcnQgPiAuY3QtY2FydC1jb250ZW50JykgPyBbJy5jdC1oZWFkZXItY2FydCA+IC5jdC1jYXJ0LWl0ZW0nXSA6IFtdKSwgJy5jdC1sYW5ndWFnZS1zd2l0Y2hlciA+IC5jdC1hY3RpdmUtbGFuZ3VhZ2UnXSxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuL2Zyb250ZW5kL3BvcHBlci1lbGVtZW50cycpLFxuICB0cmlnZ2VyOiBbJ2hvdmVyJ10sXG4gIGV2ZW50czogWydjdDpwb3BwZXItZWxlbWVudHM6dXBkYXRlJ11cbn0sIHtcbiAgZWxzOiAnLmN0LWJhY2stdG8tdG9wLCAuY3Qtc2hvcnRjdXRzLWNvbnRhaW5lciBbZGF0YS1zaG9ydGN1dCo9XCJzY3JvbGxfdG9wXCJdJyxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuL2Zyb250ZW5kL2JhY2stdG8tdG9wLWxpbmsnKSxcbiAgZXZlbnRzOiBbJ2N0OmJhY2stdG8tdG9wOm1vdW50J10sXG4gIHRyaWdnZXI6IFsnc2Nyb2xsJ11cbn0sIHtcbiAgZWxzOiAnLmN0LXBhZ2luYXRpb246bm90KFtkYXRhLXBhZ2luYXRpb249XCJzaW1wbGVcIl0pJyxcbiAgbG9hZDogKCkgPT4gaW1wb3J0KCcuL2Zyb250ZW5kL2xheW91dHMvaW5maW5pdGUtc2Nyb2xsJyksXG4gIHRyaWdnZXI6IFsnc2Nyb2xsJ11cbn0sIHtcbiAgZWxzOiBbJy5lbnRyaWVzW2RhdGEtbGF5b3V0XScsICdbZGF0YS1wcm9kdWN0c10ucHJvZHVjdHMnXSxcbiAgbG9hZDogKCkgPT4gbmV3IFByb21pc2UociA9PiByKHtcbiAgICBtb3VudDogd2F0Y2hMYXlvdXRDb250YWluZXJGb3JSZXZlYWxcbiAgfSkpXG59LCB7XG4gIGVsczogWycuY3QtbW9kYWwtYWN0aW9uJ10sXG4gIGxvYWQ6ICgpID0+IG5ldyBQcm9taXNlKHIgPT4gcih7XG4gICAgbW91bnQ6IGZhc3RPdmVybGF5TW91bnRcbiAgfSkpLFxuICBldmVudHM6IFsnY3Q6aGVhZGVyOnVwZGF0ZSddLFxuICB0cmlnZ2VyOiBbJ2NsaWNrJ11cbn0sIHtcbiAgZWxzOiBbJy5jdC1oZWFkZXItc2VhcmNoJ10sXG4gIGxvYWQ6ICgpID0+IG5ldyBQcm9taXNlKHIgPT4gcih7XG4gICAgbW91bnQ6IGZhc3RPdmVybGF5TW91bnRcbiAgfSkpLFxuICBtb3VudDogX3JlZiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIG1vdW50LFxuICAgICAgZWxcbiAgICB9ID0gX3JlZixcbiAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gICAgbW91bnQoZWwsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdCksIHt9LCB7XG4gICAgICBmb2N1czogdHJ1ZVxuICAgIH0pKTtcbiAgfSxcbiAgZXZlbnRzOiBbXSxcbiAgdHJpZ2dlcjogWydjbGljayddXG59XTtcbmhhbmRsZUVudHJ5UG9pbnRzKGFsbEZyb250ZW5kRW50cnlQb2ludHMsIHtcbiAgaW1tZWRpYXRlOiAvY29tcHxpbnRlcnxsb2FkZWQvLnRlc3QoZG9jdW1lbnQucmVhZHlTdGF0ZSlcbn0pO1xuXG5jb25zdCBpbml0T3ZlcmxheVRyaWdnZXIgPSAoKSA9PiB7XG4gIDtcbiAgWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jdC1oZWFkZXItdHJpZ2dlcicpLCAuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3Qtb2ZmY2FudmFzLXRyaWdnZXInKV0ubWFwKG1lbnVUb2dnbGUgPT4ge1xuICAgIGlmIChtZW51VG9nZ2xlICYmICFtZW51VG9nZ2xlLmhhc0xpc3RlbmVyKSB7XG4gICAgICBtZW51VG9nZ2xlLmhhc0xpc3RlbmVyID0gdHJ1ZTtcbiAgICAgIG1lbnVUb2dnbGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKCFtZW51VG9nZ2xlLmRhdGFzZXQudG9nZ2xlUGFuZWwgJiYgIW1lbnVUb2dnbGUuaGFzaCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvZmZjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG1lbnVUb2dnbGUuZGF0YXNldC50b2dnbGVQYW5lbCB8fCBtZW51VG9nZ2xlLmhhc2gpO1xuXG4gICAgICAgIGlmICghb2ZmY2FudmFzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFzdE92ZXJsYXlIYW5kbGVDbGljayhldmVudCwge1xuICAgICAgICAgIGNvbnRhaW5lcjogb2ZmY2FudmFzLFxuICAgICAgICAgIGNsb3NlV2hlbkxpbmtJbnNpZGU6ICFtZW51VG9nZ2xlLmNsb3Nlc3QoJy5jdC1oZWFkZXItY2FydCcpLFxuICAgICAgICAgIGNvbXB1dGVTY3JvbGxDb250YWluZXI6ICgpID0+IG9mZmNhbnZhcy5xdWVyeVNlbGVjdG9yKCcuY2FydF9saXN0JykgJiYgIW9mZmNhbnZhcy5xdWVyeVNlbGVjdG9yKCdbZGF0YS1pZD1cImNhcnRcIl0gLmNhcnRfbGlzdCcpID8gb2ZmY2FudmFzLnF1ZXJ5U2VsZWN0b3IoJy5jYXJ0X2xpc3QnKSA6IGdldEN1cnJlbnRTY3JlZW4oKSA9PT0gJ21vYmlsZScgJiYgb2ZmY2FudmFzLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRldmljZT1cIm1vYmlsZVwiXScpID8gb2ZmY2FudmFzLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWRldmljZT1cIm1vYmlsZVwiXScpIDogb2ZmY2FudmFzLnF1ZXJ5U2VsZWN0b3IoJy5jdC1wYW5lbC1jb250ZW50JylcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgbW91bnRBc2lkZVR5cGU0ID0gKCkgPT4ge1xuICA7XG4gIFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhc2lkZVtkYXRhLXR5cGU9XCJ0eXBlLTRcIl0nKV0ubWFwKHNpZGViYXIgPT4ge1xuICAgIGxldCBzY3JvbGxiYXJXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuXG4gICAgaWYgKHNjcm9sbGJhcldpZHRoID4gMCkge1xuICAgICAgc2lkZWJhci5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zY3JvbGxiYXItd2lkdGgnLCBgJHtzY3JvbGxiYXJXaWR0aH1weGApO1xuICAgIH1cblxuICAgIHNpZGViYXIuc3R5bGUuc2V0UHJvcGVydHkoJy0taGFzLXNjcm9sbGJhcicsIDEpO1xuICB9KTtcbn07XG5cbm9uRG9jdW1lbnRMb2FkZWQoKCkgPT4ge1xuICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsICgpID0+IHtcbiAgICBsb2FkU3R5bGUoY3RfbG9jYWxpemF0aW9ucy5keW5hbWljX3N0eWxlcy5sYXp5X2xvYWQpO1xuICB9LCB7XG4gICAgb25jZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiB0cnVlXG4gIH0pO1xuICBsZXQgaW5wdXRzID0gWy4uLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5jb21tZW50LWZvcm0gW2NsYXNzKj1cImNvbW1lbnQtZm9ybS1maWVsZFwiXScpXS5yZWR1Y2UoKHJlc3VsdCwgcGFyZW50KSA9PiBbLi4ucmVzdWx0LCBwYXJlbnQucXVlcnlTZWxlY3RvcignaW5wdXQsdGV4dGFyZWEnKV0sIFtdKS5maWx0ZXIoaW5wdXQgPT4gaW5wdXQudHlwZSAhPT0gJ2hpZGRlbicgJiYgaW5wdXQudHlwZSAhPT0gJ2NoZWNrYm94Jyk7XG5cbiAgY29uc3QgcmVuZGVyRW1wdGluZXNzID0gKCkgPT4ge1xuICAgIGlucHV0cy5tYXAoaW5wdXQgPT4ge1xuICAgICAgaW5wdXQucGFyZW50Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdjdC1ub3QtZW1wdHknKTtcblxuICAgICAgaWYgKCFpbnB1dC52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC52YWx1ZS50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICBpbnB1dC5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQoJ2N0LW5vdC1lbXB0eScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHJlbmRlckVtcHRpbmVzcygpO1xuICB9KTtcbiAgaW5wdXRzLm1hcChpbnB1dCA9PiBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHJlbmRlckVtcHRpbmVzcykpO1xuICBtb3VudER5bmFtaWNDaHVua3MoKTtcbiAgbW91bnRBc2lkZVR5cGU0KCk7XG4gIHNldFRpbWVvdXQoKCkgPT4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdjdC1sb2FkaW5nJyksIDE1MDApO1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpbml0T3ZlcmxheVRyaWdnZXIoKTtcbiAgfSk7XG4gIG1vdW50UmVuZGVySGVhZGVyTG9vcCgpO1xuICBtb3VudEVsZW1lbnRvckludGVncmF0aW9uKCk7XG59KTtcblxuaWYgKCQpIHtcbiAgJChkb2N1bWVudC5ib2R5KS5vbignd2NfZnJhZ21lbnRzX3JlZnJlc2hlZCcsICgpID0+IHtcbiAgICBjdEV2ZW50cy50cmlnZ2VyKCdibG9ja3N5OmZyb250ZW5kOmluaXQnKTtcbiAgfSk7XG4gICQoZG9jdW1lbnQuYm9keSkub24oJ3djX2ZyYWdtZW50c19sb2FkZWQnLCAoKSA9PiB7XG4gICAgY3RFdmVudHMudHJpZ2dlcignYmxvY2tzeTpmcm9udGVuZDppbml0Jyk7XG4gIH0pO1xuICAkKGRvY3VtZW50KS5vbignamV0LWZpbHRlci1jb250ZW50LXJlbmRlcmVkJywgKCkgPT4ge1xuICAgIGN0RXZlbnRzLnRyaWdnZXIoJ2Jsb2Nrc3k6ZnJvbnRlbmQ6aW5pdCcpO1xuICB9KTtcbiAgJChkb2N1bWVudCkub24oJ3lpdGhfaW5mc19hZGRlZF9lbGVtJywgZnVuY3Rpb24gKCkge1xuICAgIGN0RXZlbnRzLnRyaWdnZXIoJ2Jsb2Nrc3k6ZnJvbnRlbmQ6aW5pdCcpO1xuICB9KTtcbiAgalF1ZXJ5KGRvY3VtZW50KS5vbigneWl0aC13Y2FuLWFqYXgtZmlsdGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY3RFdmVudHMudHJpZ2dlcignYmxvY2tzeTpmcm9udGVuZDppbml0Jyk7XG4gIH0pO1xuICAkKGRvY3VtZW50KS5vbignYmVyb2NrZXRfYWpheF9maWx0ZXJpbmdfZW5kJywgKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY3RFdmVudHMudHJpZ2dlcignYmxvY2tzeTpmcm9udGVuZDppbml0Jyk7XG4gICAgfSwgMTAwKTtcbiAgfSk7XG4gICQoZG9jdW1lbnQpLm9uKCdwcmVsb2FkJywgKCkgPT4ge1xuICAgIGN0RXZlbnRzLnRyaWdnZXIoJ2Jsb2Nrc3k6ZnJvbnRlbmQ6aW5pdCcpO1xuICB9KTtcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd3BmQWpheFN1Y2Nlc3MnLCBlID0+IHtcbiAgICBjdEV2ZW50cy50cmlnZ2VyKCdibG9ja3N5OmZyb250ZW5kOmluaXQnKTtcbiAgfSk7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZhY2V0d3AtbG9hZGVkJywgKCkgPT4ge1xuICAgIGN0RXZlbnRzLnRyaWdnZXIoJ2Jsb2Nrc3k6ZnJvbnRlbmQ6aW5pdCcpO1xuICB9KTtcbn1cblxuY3RFdmVudHMub24oJ2Jsb2Nrc3k6ZnJvbnRlbmQ6aW5pdCcsICgpID0+IHtcbiAgaGFuZGxlRW50cnlQb2ludHMoYWxsRnJvbnRlbmRFbnRyeVBvaW50cywge1xuICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICBza2lwRXZlbnRzOiB0cnVlXG4gIH0pO1xuICBtb3VudER5bmFtaWNDaHVua3MoKTtcbiAgbW91bnRBc2lkZVR5cGU0KCk7XG4gIGluaXRPdmVybGF5VHJpZ2dlcigpO1xufSk7XG5jdEV2ZW50cy5vbignY3Q6b3ZlcmxheTpoYW5kbGUtY2xpY2snLCBfcmVmMiA9PiB7XG4gIGxldCB7XG4gICAgZSxcbiAgICBocmVmLFxuICAgIGNvbnRhaW5lcixcbiAgICBvcHRpb25zID0ge31cbiAgfSA9IF9yZWYyO1xuICBmYXN0T3ZlcmxheUhhbmRsZUNsaWNrKGUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBocmVmID8ge1xuICAgIGNvbnRhaW5lcjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihocmVmKVxuICB9IDoge30pLCBjb250YWluZXIgPyB7XG4gICAgY29udGFpbmVyXG4gIH0gOiB7fSksIG9wdGlvbnMpKTtcbn0pO1xuZXhwb3J0IHsgbG9hZFN0eWxlLCBoYW5kbGVFbnRyeVBvaW50cywgb25Eb2N1bWVudExvYWRlZCB9IGZyb20gJy4vaGVscGVycyc7XG5leHBvcnQgeyByZWdpc3RlckR5bmFtaWNDaHVuayB9IGZyb20gJy4vZHluYW1pYy1jaHVua3MnOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///126\n")},683:(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("__webpack_require__.p = ct_localizations.public_url;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjgzLmpzIiwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3RGcm9udGVuZC8uL3N0YXRpYy9qcy9wdWJsaWMtcGF0aC5qcz8wM2IxIl0sInNvdXJjZXNDb250ZW50IjpbIl9fd2VicGFja19wdWJsaWNfcGF0aF9fID0gY3RfbG9jYWxpemF0aW9ucy5wdWJsaWNfdXJsOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///683\n")},277:(module,exports,__webpack_require__)=>{eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * $script.js JS loader & dependency manager\n * https://github.com/ded/script.js\n * (c) Dustin Diaz 2014 | License MIT\n */\n\n(function (name, definition) {\n if ( true && module.exports) module.exports = definition()\n else if (true) !(__WEBPACK_AMD_DEFINE_FACTORY__ = (definition),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))\n else {}\n})('$script', function () {\n var doc = document\n , head = doc.getElementsByTagName('head')[0]\n , s = 'string'\n , f = false\n , push = 'push'\n , readyState = 'readyState'\n , onreadystatechange = 'onreadystatechange'\n , list = {}\n , ids = {}\n , delay = {}\n , scripts = {}\n , scriptpath\n , urlArgs\n\n function every(ar, fn) {\n for (var i = 0, j = ar.length; i < j; ++i) if (!fn(ar[i])) return f\n return 1\n }\n function each(ar, fn) {\n every(ar, function (el) {\n fn(el)\n return 1\n })\n }\n\n function $script(paths, idOrDone, optDone) {\n paths = paths[push] ? paths : [paths]\n var idOrDoneIsDone = idOrDone && idOrDone.call\n , done = idOrDoneIsDone ? idOrDone : optDone\n , id = idOrDoneIsDone ? paths.join('') : idOrDone\n , queue = paths.length\n function loopFn(item) {\n return item.call ? item() : list[item]\n }\n function callback() {\n if (!--queue) {\n list[id] = 1\n done && done()\n for (var dset in delay) {\n every(dset.split('|'), loopFn) && !each(delay[dset], loopFn) && (delay[dset] = [])\n }\n }\n }\n setTimeout(function () {\n each(paths, function loading(path, force) {\n if (path === null) return callback()\n \n if (!force && !/^https?:\\/\\//.test(path) && scriptpath) {\n path = (path.indexOf('.js') === -1) ? scriptpath + path + '.js' : scriptpath + path;\n }\n \n if (scripts[path]) {\n if (id) ids[id] = 1\n return (scripts[path] == 2) ? callback() : setTimeout(function () { loading(path, true) }, 0)\n }\n\n scripts[path] = 1\n if (id) ids[id] = 1\n create(path, callback)\n })\n }, 0)\n return $script\n }\n\n function create(path, fn) {\n var el = doc.createElement('script'), loaded\n el.onload = el.onerror = el[onreadystatechange] = function () {\n if ((el[readyState] && !(/^c|loade/.test(el[readyState]))) || loaded) return;\n el.onload = el[onreadystatechange] = null\n loaded = 1\n scripts[path] = 2\n fn()\n }\n el.async = 1\n el.src = urlArgs ? path + (path.indexOf('?') === -1 ? '?' : '&') + urlArgs : path;\n head.insertBefore(el, head.lastChild)\n }\n\n $script.get = create\n\n $script.order = function (scripts, id, done) {\n (function callback(s) {\n s = scripts.shift()\n !scripts.length ? $script(s, id, done) : $script(s, callback)\n }())\n }\n\n $script.path = function (p) {\n scriptpath = p\n }\n $script.urlArgs = function (str) {\n urlArgs = str;\n }\n $script.ready = function (deps, ready, req) {\n deps = deps[push] ? deps : [deps]\n var missing = [];\n !each(deps, function (dep) {\n list[dep] || missing[push](dep);\n }) && every(deps, function (dep) {return list[dep]}) ?\n ready() : !function (key) {\n delay[key] = delay[key] || []\n delay[key][push](ready)\n req && req(missing)\n }(deps.join('|'))\n return $script\n }\n\n $script.done = function (idOrDone) {\n $script([null], idOrDone)\n }\n\n return $script\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjc3LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jdEZyb250ZW5kLy4vbm9kZV9tb2R1bGVzL3NjcmlwdGpzL2Rpc3Qvc2NyaXB0LmpzP2EyM2MiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gICogJHNjcmlwdC5qcyBKUyBsb2FkZXIgJiBkZXBlbmRlbmN5IG1hbmFnZXJcbiAgKiBodHRwczovL2dpdGh1Yi5jb20vZGVkL3NjcmlwdC5qc1xuICAqIChjKSBEdXN0aW4gRGlheiAyMDE0IHwgTGljZW5zZSBNSVRcbiAgKi9cblxuKGZ1bmN0aW9uIChuYW1lLCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKVxuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pXG4gIGVsc2UgdGhpc1tuYW1lXSA9IGRlZmluaXRpb24oKVxufSkoJyRzY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBkb2MgPSBkb2N1bWVudFxuICAgICwgaGVhZCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdXG4gICAgLCBzID0gJ3N0cmluZydcbiAgICAsIGYgPSBmYWxzZVxuICAgICwgcHVzaCA9ICdwdXNoJ1xuICAgICwgcmVhZHlTdGF0ZSA9ICdyZWFkeVN0YXRlJ1xuICAgICwgb25yZWFkeXN0YXRlY2hhbmdlID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSdcbiAgICAsIGxpc3QgPSB7fVxuICAgICwgaWRzID0ge31cbiAgICAsIGRlbGF5ID0ge31cbiAgICAsIHNjcmlwdHMgPSB7fVxuICAgICwgc2NyaXB0cGF0aFxuICAgICwgdXJsQXJnc1xuXG4gIGZ1bmN0aW9uIGV2ZXJ5KGFyLCBmbikge1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gYXIubGVuZ3RoOyBpIDwgajsgKytpKSBpZiAoIWZuKGFyW2ldKSkgcmV0dXJuIGZcbiAgICByZXR1cm4gMVxuICB9XG4gIGZ1bmN0aW9uIGVhY2goYXIsIGZuKSB7XG4gICAgZXZlcnkoYXIsIGZ1bmN0aW9uIChlbCkge1xuICAgICAgZm4oZWwpXG4gICAgICByZXR1cm4gMVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiAkc2NyaXB0KHBhdGhzLCBpZE9yRG9uZSwgb3B0RG9uZSkge1xuICAgIHBhdGhzID0gcGF0aHNbcHVzaF0gPyBwYXRocyA6IFtwYXRoc11cbiAgICB2YXIgaWRPckRvbmVJc0RvbmUgPSBpZE9yRG9uZSAmJiBpZE9yRG9uZS5jYWxsXG4gICAgICAsIGRvbmUgPSBpZE9yRG9uZUlzRG9uZSA/IGlkT3JEb25lIDogb3B0RG9uZVxuICAgICAgLCBpZCA9IGlkT3JEb25lSXNEb25lID8gcGF0aHMuam9pbignJykgOiBpZE9yRG9uZVxuICAgICAgLCBxdWV1ZSA9IHBhdGhzLmxlbmd0aFxuICAgIGZ1bmN0aW9uIGxvb3BGbihpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS5jYWxsID8gaXRlbSgpIDogbGlzdFtpdGVtXVxuICAgIH1cbiAgICBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIGlmICghLS1xdWV1ZSkge1xuICAgICAgICBsaXN0W2lkXSA9IDFcbiAgICAgICAgZG9uZSAmJiBkb25lKClcbiAgICAgICAgZm9yICh2YXIgZHNldCBpbiBkZWxheSkge1xuICAgICAgICAgIGV2ZXJ5KGRzZXQuc3BsaXQoJ3wnKSwgbG9vcEZuKSAmJiAhZWFjaChkZWxheVtkc2V0XSwgbG9vcEZuKSAmJiAoZGVsYXlbZHNldF0gPSBbXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGVhY2gocGF0aHMsIGZ1bmN0aW9uIGxvYWRpbmcocGF0aCwgZm9yY2UpIHtcbiAgICAgICAgaWYgKHBhdGggPT09IG51bGwpIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIFxuICAgICAgICBpZiAoIWZvcmNlICYmICEvXmh0dHBzPzpcXC9cXC8vLnRlc3QocGF0aCkgJiYgc2NyaXB0cGF0aCkge1xuICAgICAgICAgIHBhdGggPSAocGF0aC5pbmRleE9mKCcuanMnKSA9PT0gLTEpID8gc2NyaXB0cGF0aCArIHBhdGggKyAnLmpzJyA6IHNjcmlwdHBhdGggKyBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoc2NyaXB0c1twYXRoXSkge1xuICAgICAgICAgIGlmIChpZCkgaWRzW2lkXSA9IDFcbiAgICAgICAgICByZXR1cm4gKHNjcmlwdHNbcGF0aF0gPT0gMikgPyBjYWxsYmFjaygpIDogc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGxvYWRpbmcocGF0aCwgdHJ1ZSkgfSwgMClcbiAgICAgICAgfVxuXG4gICAgICAgIHNjcmlwdHNbcGF0aF0gPSAxXG4gICAgICAgIGlmIChpZCkgaWRzW2lkXSA9IDFcbiAgICAgICAgY3JlYXRlKHBhdGgsIGNhbGxiYWNrKVxuICAgICAgfSlcbiAgICB9LCAwKVxuICAgIHJldHVybiAkc2NyaXB0XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGUocGF0aCwgZm4pIHtcbiAgICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIGxvYWRlZFxuICAgIGVsLm9ubG9hZCA9IGVsLm9uZXJyb3IgPSBlbFtvbnJlYWR5c3RhdGVjaGFuZ2VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKChlbFtyZWFkeVN0YXRlXSAmJiAhKC9eY3xsb2FkZS8udGVzdChlbFtyZWFkeVN0YXRlXSkpKSB8fCBsb2FkZWQpIHJldHVybjtcbiAgICAgIGVsLm9ubG9hZCA9IGVsW29ucmVhZHlzdGF0ZWNoYW5nZV0gPSBudWxsXG4gICAgICBsb2FkZWQgPSAxXG4gICAgICBzY3JpcHRzW3BhdGhdID0gMlxuICAgICAgZm4oKVxuICAgIH1cbiAgICBlbC5hc3luYyA9IDFcbiAgICBlbC5zcmMgPSB1cmxBcmdzID8gcGF0aCArIChwYXRoLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJncyA6IHBhdGg7XG4gICAgaGVhZC5pbnNlcnRCZWZvcmUoZWwsIGhlYWQubGFzdENoaWxkKVxuICB9XG5cbiAgJHNjcmlwdC5nZXQgPSBjcmVhdGVcblxuICAkc2NyaXB0Lm9yZGVyID0gZnVuY3Rpb24gKHNjcmlwdHMsIGlkLCBkb25lKSB7XG4gICAgKGZ1bmN0aW9uIGNhbGxiYWNrKHMpIHtcbiAgICAgIHMgPSBzY3JpcHRzLnNoaWZ0KClcbiAgICAgICFzY3JpcHRzLmxlbmd0aCA/ICRzY3JpcHQocywgaWQsIGRvbmUpIDogJHNjcmlwdChzLCBjYWxsYmFjaylcbiAgICB9KCkpXG4gIH1cblxuICAkc2NyaXB0LnBhdGggPSBmdW5jdGlvbiAocCkge1xuICAgIHNjcmlwdHBhdGggPSBwXG4gIH1cbiAgJHNjcmlwdC51cmxBcmdzID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHVybEFyZ3MgPSBzdHI7XG4gIH1cbiAgJHNjcmlwdC5yZWFkeSA9IGZ1bmN0aW9uIChkZXBzLCByZWFkeSwgcmVxKSB7XG4gICAgZGVwcyA9IGRlcHNbcHVzaF0gPyBkZXBzIDogW2RlcHNdXG4gICAgdmFyIG1pc3NpbmcgPSBbXTtcbiAgICAhZWFjaChkZXBzLCBmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBsaXN0W2RlcF0gfHwgbWlzc2luZ1twdXNoXShkZXApO1xuICAgIH0pICYmIGV2ZXJ5KGRlcHMsIGZ1bmN0aW9uIChkZXApIHtyZXR1cm4gbGlzdFtkZXBdfSkgP1xuICAgICAgcmVhZHkoKSA6ICFmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBkZWxheVtrZXldID0gZGVsYXlba2V5XSB8fCBbXVxuICAgICAgZGVsYXlba2V5XVtwdXNoXShyZWFkeSlcbiAgICAgIHJlcSAmJiByZXEobWlzc2luZylcbiAgICB9KGRlcHMuam9pbignfCcpKVxuICAgIHJldHVybiAkc2NyaXB0XG4gIH1cblxuICAkc2NyaXB0LmRvbmUgPSBmdW5jdGlvbiAoaWRPckRvbmUpIHtcbiAgICAkc2NyaXB0KFtudWxsXSwgaWRPckRvbmUpXG4gIH1cblxuICByZXR1cm4gJHNjcmlwdFxufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///277\n")},601:e=>{"use strict";e.exports=globalThis.ctEvents},194:e=>{"use strict";e.exports=globalThis.jQuery}},__webpack_module_cache__={},inProgress,dataWebpackPrefix;function __webpack_require__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.exports}__webpack_require__.m=__webpack_modules__,__webpack_require__.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(n,{a:n}),n},__webpack_require__.d=(e,n)=>{for(var t in n)__webpack_require__.o(n,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},__webpack_require__.f={},__webpack_require__.e=e=>Promise.all(Object.keys(__webpack_require__.f).reduce(((n,t)=>(__webpack_require__.f[t](e,n),n)),[])),__webpack_require__.u=e=>e+"."+{22:"e71b9b122a000266bca2",27:"905ee37f258d899dd96a",134:"4d89b099705299a337c9",153:"6f4c1c6bf0adaa477a06",190:"d12a6f190b6cc9c6655a",400:"46f2a53a96cf354e24f8",532:"f8a2537581d79890ec7d",627:"6f27e9d93dc1271601ce",781:"57e0a912f1ab79685019",830:"46f79a22c1fcdda86040",831:"896df0c682414e514877",867:"37b4b0864c33eefdf924",889:"5a01559fe42675588e1d",963:"d85e28407ba1815aa62e",985:"fa60525d1dbc241bbc5d"}[e]+".js",__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),inProgress={},dataWebpackPrefix="ctFrontend:",__webpack_require__.l=(e,n,t,g)=>{if(inProgress[e])inProgress[e].push(n);else{var c,l;if(void 0!==t)for(var I=document.getElementsByTagName("script"),b=0;b{c.onerror=c.onload=null,clearTimeout(C);var g=inProgress[e];if(delete inProgress[e],c.parentNode&&c.parentNode.removeChild(c),g&&g.forEach((e=>e(t))),n)return n(t)},C=setTimeout(i.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=i.bind(null,c.onerror),c.onload=i.bind(null,c.onload),l&&document.head.appendChild(c)}},__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;__webpack_require__.g.importScripts&&(e=__webpack_require__.g.location+"");var n=__webpack_require__.g.document;if(!e&&n&&(n.currentScript&&(e=n.currentScript.src),!e)){var t=n.getElementsByTagName("script");t.length&&(e=t[t.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),__webpack_require__.p=e})(),(()=>{var e={179:0};__webpack_require__.f.j=(n,t)=>{var g=__webpack_require__.o(e,n)?e[n]:void 0;if(0!==g)if(g)t.push(g[2]);else{var c=new Promise(((t,c)=>g=e[n]=[t,c]));t.push(g[2]=c);var l=__webpack_require__.p+__webpack_require__.u(n),I=new Error;__webpack_require__.l(l,(t=>{if(__webpack_require__.o(e,n)&&(0!==(g=e[n])&&(e[n]=void 0),g)){var c=t&&("load"===t.type?"missing":t.type),l=t&&t.target&&t.target.src;I.message="Loading chunk "+n+" failed.\n("+c+": "+l+")",I.name="ChunkLoadError",I.type=c,I.request=l,g[1](I)}}),"chunk-"+n,n)}};var n=(n,t)=>{var g,c,[l,I,b]=t,d=0;if(l.some((n=>0!==e[n]))){for(g in I)__webpack_require__.o(I,g)&&(__webpack_require__.m[g]=I[g]);b&&b(__webpack_require__)}for(n&&n(t);d