1"use strict";(self.webpackChunkcpp_mutter=self.webpackChunkcpp_mutter||[]).push([[293],{334:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5458);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\nvar SelectDropdown=function SelectDropdown(_ref){var tags=_ref.tags,_ref$largeFont=_ref.largeFont,largeFont=_ref$largeFont===void 0?true:_ref$largeFont,selectStory=_ref.selectStory,_ref$storiesLanding=_ref.storiesLanding,storiesLanding=_ref$storiesLanding===void 0?false:_ref$storiesLanding;var ref=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();var _useState=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),isOpen=_useState[0],setIsOpen=_useState[1];var _useState2=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(tags[0]),selectedOption=_useState2[0],setSelectedOption=_useState2[1];var _useState3=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true),showArrow=_useState3[0],setShowArrow=_useState3[1];(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function(){if(!isOpen){setShowArrow(true);}var checkIfClickedOutside=function checkIfClickedOutside(e){// clicking outside of select dropdown will close it\nif(isOpen&&ref.current&&!ref.current.contains(e.target)){setIsOpen(false);}};document.addEventListener(\'mousedown\',checkIfClickedOutside);return function(){document.removeEventListener(\'mousedown\',checkIfClickedOutside);};},[isOpen]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function(){selectStory(selectedOption);},[selectedOption,selectStory]);var toggling=function toggling(){return setIsOpen(!isOpen);};var onOptionClicked=function onOptionClicked(value){return function(){setSelectedOption(value);setIsOpen(false);return selectedOption;};};var uniqueTags=(0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(new Set(tags));var filteredTags=uniqueTags.filter(function(tag){return tag!==selectedOption&&tag!==\'\'&&tag.length;});var finalTags=[selectedOption].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(filteredTags));// hides arrow when scrolling through list\nvar handleScroll=function handleScroll(e){e.target.scrollTop===0?setShowArrow(true):setShowArrow(false);};return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{ref:ref,className:"c-select-dropdown"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"c-select-dropdown__container f-heading-sub-2"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("button",{className:"c-select-dropdown__header-wrapper "+(isOpen?\'c-select-dropdown__header-wrapper-is-open\':\'\')+" "+(largeFont?\'c-select-dropdown__header-wrapper-stories-header\':\'c-select-dropdown__header-wrapper-homepage\'),onClick:toggling},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"c-select-dropdown__header "+(largeFont?\'c-select-dropdown__stories-header\':\'c-select-dropdown__homepage\')+" "+(isOpen?\'c-select-dropdown__header-open\':\'\')},selectedOption),showArrow&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"c-select-dropdown__arrow-down "+(isOpen?\'c-select-dropdown__arrow-up\':\'\')})),isOpen&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"c-select-dropdown__list-container"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("ul",{onScroll:handleScroll,className:"c-select-dropdown__list "+(storiesLanding?\'c-select-dropdown__list--stories-landing\':\'c-select-dropdown__list-homepage\')},finalTags.map(function(tag,index){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("li",{key:"tag-"+index,className:"c-selectdropdown__list-item "+(largeFont?\'c-select-dropdown__list-item-stories-header\':\'c-select-dropdown__list-item-homepage\')},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("button",{className:"c-selectdropdown__list-item-button "+(largeFont?\'c-selectdropdown__list-item-button-stories-header\':\'c-select-dropdown__list-item-button-homepage\'),onClick:onOptionClicked(tag)},tag));})))));};/* harmony default export */ __webpack_exports__.A = (SelectDropdown);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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UFHLDZCQUE2QixPQUM3RU0sTUFBTSxDQUFHLGdDQUFnQyxDQUFHLEVBQUUsQ0FBRyxFQUVwREcsY0FDRSxDQUFDLENBQ0xHLFNBQVMsZUFDUnBCLGdEQUFBLFFBQ0U2QyxTQUFTLG1DQUNQL0IsTUFBTSxDQUFHLDZCQUE2QixDQUFHLEVBQUUsQ0FDMUMsQ0FDQyxDQUVGLENBQUMsQ0FDUkEsTUFBTSxlQUNMZCxnREFBQSxRQUFLNkMsU0FBUyxDQUFDLG1DQUFtQyxlQUNoRDdDLGdEQUFBLE9BQ0UrQyxRQUFRLENBQUVMLFlBQWEsQ0FDdkJHLFNBQVMsNkJBQ1BsQyxjQUFjLENBQ1YsMENBQTBDLENBQzFDLGtDQUFrQyxDQUNyQyxFQUVGNkIsU0FBUyxDQUFDUSxHQUFHLENBQUMsU0FBQ1YsR0FBRyxDQUFFVyxLQUFLLHFCQUN4QmpELGdEQUFBLE9BQ0VrRCxHQUFHLFFBQVNELEtBQVEsQ0FDcEJKLFNBQVMsaUNBQ1ByQyxTQUFTLENBQ0wsNkNBQTZDLENBQzdDLHVDQUF1QyxDQUMxQyxlQUVIUixnREFBQSxXQUNFNkMsU0FBUyx3Q0FDUHJDLFNBQVMsQ0FDTCxtREFBbUQsQ0FDbkQsOENBQThDLENBQ2pELENBQ0hzQyxPQUFPLENBQUVmLGVBQWUsQ0FBQ08sR0FBRyxDQUFFLEVBRTdCQSxHQUNLLENBQ04sQ0FBQyxFQUNOLENBQ0MsQ0FDRCxDQUVKLENBQ0YsQ0FBQyxDQUVWLENBQUMsQ0FFRCxzREFBZWxDLGNBQWMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0RHJvcGRvd24vU2VsZWN0RHJvcGRvd24uanM/NTE2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHt1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmNvbnN0IFNlbGVjdERyb3Bkb3duID0gKHt0YWdzLCBsYXJnZUZvbnQ9dHJ1ZSwgc2VsZWN0U3RvcnksIHN0b3JpZXNMYW5kaW5nPWZhbHNlfSkgPT4ge1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZSh0YWdzWzBdKTtcbiAgY29uc3QgW3Nob3dBcnJvdywgc2V0U2hvd0Fycm93XSA9IHVzZVN0YXRlKHRydWUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgc2V0U2hvd0Fycm93KHRydWUpXG4gICAgfVxuICAgIGNvbnN0IGNoZWNrSWZDbGlja2VkT3V0c2lkZSA9IGUgPT4ge1xuICAgICAgLy8gY2xpY2tpbmcgb3V0c2lkZSBvZiBzZWxlY3QgZHJvcGRvd24gd2lsbCBjbG9zZSBpdFxuICAgICAgaWYgKGlzT3BlbiAmJiByZWYuY3VycmVudCAmJiAhcmVmLmN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQpKSB7XG4gICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBjaGVja0lmQ2xpY2tlZE91dHNpZGUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2
1N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBjaGVja0lmQ2xpY2tlZE91dHNpZGUpO1xuICAgIH07XG4gIH0sIFtpc09wZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNlbGVjdFN0b3J5KHNlbGVjdGVkT3B0aW9uKTtcbiAgfSwgW3NlbGVjdGVkT3B0aW9uLCBzZWxlY3RTdG9yeV0pO1xuXG4gIGNvbnN0IHRvZ2dsaW5nID0gKCkgPT4gc2V0SXNPcGVuKCFpc09wZW4pO1xuXG4gIGNvbnN0IG9uT3B0aW9uQ2xpY2tlZCA9IHZhbHVlID0+ICgpID0+IHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9uKHZhbHVlKTtcbiAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25cbiAgfTtcblxuICBjb25zdCB1bmlxdWVUYWdzID0gWy4uLm5ldyBTZXQodGFncyldO1xuXG4gIGNvbnN0IGZpbHRlcmVkVGFncyA9IHVuaXF1ZVRhZ3MuZmlsdGVyKHRhZyA9PiB0YWcgIT09IHNlbGVjdGVkT3B0aW9uICYmIHRhZyAhPT0gJycgJiYgdGFnLmxlbmd0aCk7XG5cbiAgY29uc3QgZmluYWxUYWdzID0gW3NlbGVjdGVkT3B0aW9uLCAuLi5maWx0ZXJlZFRhZ3NdXG5cbiAgLy8gaGlkZXMgYXJyb3cgd2hlbiBzY3JvbGxpbmcgdGhyb3VnaCBsaXN0XG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IChlKSA9PiB7XG4gICAgZS50YXJnZXQuc2Nyb2xsVG9wID09PSAwXG4gICAgPyBzZXRTaG93QXJyb3codHJ1ZSlcbiAgICA6IHNldFNob3dBcnJvdyhmYWxzZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPVwiYy1zZWxlY3QtZHJvcGRvd25cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1zZWxlY3QtZHJvcGRvd25fX2NvbnRhaW5lciBmLWhlYWRpbmctc3ViLTJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT17YGMtc2VsZWN0LWRyb3Bkb3duX19oZWFkZXItd3JhcHBlciAke1xuICAgICAgICAgICAgaXNPcGVuID8gJ2Mtc2VsZWN0LWRyb3Bkb3duX19oZWFkZXItd3JhcHBlci1pcy1vcGVuJyA6ICcnXG4gICAgICAgICAgfSAke1xuICAgICAgICAgICAgbGFyZ2VGb250XG4gICAgICAgICAgICAgID8gJ2Mtc2VsZWN0LWRyb3Bkb3duX19oZWFkZXItd3JhcHBlci1zdG9yaWVzLWhlYWRlcidcbiAgICAgICAgICAgICAgOiAnYy1zZWxlY3QtZHJvcGRvd25fX2hlYWRlci13cmFwcGVyLWhvbWVwYWdlJ1xuICAgICAgICAgIH1gfVxuICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsaW5nfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgYy1zZWxlY3QtZHJvcGRvd25fX2hlYWRlciAke1xuICAgICAgICAgICAgICBsYXJnZUZvbnQgPyAnYy1zZWxlY3QtZHJvcGRvd25fX3N0b3JpZXMtaGVhZGVyJyA6ICdjLXNlbGVjdC1kcm9wZG93bl9faG9tZXBhZ2UnXG4gICAgICAgICAgICB9ICR7aXNPcGVuID8gJ2Mtc2VsZWN0LWRyb3Bkb3duX19oZWFkZXItb3BlbicgOiAnJ31gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7c2hvd0Fycm93ICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYy1zZWxlY3QtZHJvcGRvd25fX2Fycm93LWRvd24gJHtcbiAgICAgICAgICAgICAgICBpc09wZW4gPyAnYy1zZWxlY3QtZHJvcGRvd25fX2Fycm93LXVwJyA6ICcnXG4gICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB7aXNPcGVuICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtc2VsZWN0LWRyb3Bkb3duX19saXN0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGx9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YGMtc2VsZWN0LWRyb3Bkb3duX19saXN0ICR7XG4gICAgICAgICAgICAgICAgc3Rvcmllc0xhbmRpbmdcbiAgICAgICAgICAgICAgICAgID8gJ2Mtc2VsZWN0LWRyb3Bkb3duX19saXN0LS1zdG9yaWVzLWxhbmRpbmcnXG4gICAgICAgICAgICAgICAgICA6ICdjLXNlbGVjdC1kcm9wZG93bl9fbGlzdC1ob21lcGFnZSdcbiAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtmaW5hbFRhZ3MubWFwKCh0YWcsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICBrZXk9e2B0YWctJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYy1zZWxlY3Rkcm9wZG93bl9fbGlzdC1pdGVtICR7XG4gICAgICAgICAgICAgICAgICAgIGxhcmdlRm9udFxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Mtc2VsZWN0LWRyb3Bkb3duX19saXN0LWl0ZW0tc3Rvcmllcy1oZWFkZXInXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYy1zZWxlY3QtZHJvcGRvd25fX2xpc3QtaXRlbS1ob21lcGFnZSdcbiAgICAgICAgICAgICAgICAgIH1gfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgYy1zZWxlY3Rkcm9wZG93bl9fbGlzdC1pdGVtLWJ1dHRvbiAke1xuICAgICAgICAgICAgICAgICAgICAgIGxhcmdlRm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnYy1zZWxlY3Rkcm9wZG93bl9fbGlzdC1pdGVtLWJ1dHRvbi1zdG9yaWVzLWhlYWRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Mtc2VsZWN0LWRyb3Bkb3duX19saXN0LWl0ZW0tYnV0dG9uLWhvbWVwYWdlJ1xuICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17b25PcHRpb25DbGlja2VkKHRhZyl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0YWd9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdERyb3Bkb3duO1xuXG5TZWxlY3REcm9wZG93bi5wcm9wVHlwZXMgPSB7XG4gIHRhZ3M6IFByb3BUeXBlcy5hcnJheVxufTtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiU2VsZWN0RHJvcGRvd24iLCJfcmVmIiwidGFncyIsIl9yZWYkbGFyZ2VGb250IiwibGFyZ2VGb250Iiwic2VsZWN0U3RvcnkiLCJfcmVmJHN0b3JpZXNMYW5kaW5nIiwic3Rvcmllc0xhbmRpbmciLCJyZWYiLCJfdXNlU3RhdGUiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGUyIiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsIl91c2VTdGF0ZTMiLCJzaG93QXJyb3ciLCJzZXRTaG93QXJyb3ciLCJjaGVja0lmQ2xpY2tlZE91dHNpZGUiLCJlIiwiY3VycmVudCIsImNvbn
1RhaW5zIiwidGFyZ2V0IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRvZ2dsaW5nIiwib25PcHRpb25DbGlja2VkIiwidmFsdWUiLCJ1bmlxdWVUYWdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwiZmlsdGVyZWRUYWdzIiwiZmlsdGVyIiwidGFnIiwibGVuZ3RoIiwiZmluYWxUYWdzIiwiY29uY2F0IiwiaGFuZGxlU2Nyb2xsIiwic2Nyb2xsVG9wIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJvblNjcm9sbCIsIm1hcCIsImluZGV4Iiwia2V5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///334\n')},500:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cP: function() { return /* binding */ handleImage; },\n/* harmony export */ ig: function() { return /* binding */ handleHeroImage; },\n/* harmony export */ wq: function() { return /* binding */ chooseImageByCardType; }\n/* harmony export */ });\n/* unused harmony export handleFeaturedImage */\nfunction handleHeroImage(data){var _data$relationships,_data$relationships$f,_data$relationships$f2,_data$relationships$f3,_data$relationships2,_data$relationships2$,_data$relationships2$2,_data$relationships3,_data$relationships4;var imgData=data===null||data===void 0?void 0:(_data$relationships=data.relationships)===null||_data$relationships===void 0?void 0:(_data$relationships$f=_data$relationships.field_header_image)===null||_data$relationships$f===void 0?void 0:(_data$relationships$f2=_data$relationships$f.relationships)===null||_data$relationships$f2===void 0?void 0:(_data$relationships$f3=_data$relationships$f2.field_media_image)===null||_data$relationships$f3===void 0?void 0:_data$relationships$f3.localFile;var imgAlt=data===null||data===void 0?void 0:(_data$relationships2=data.relationships)===null||_data$relationships2===void 0?void 0:(_data$relationships2$=_data$relationships2.field_header_image)===null||_data$relationships2$===void 0?void 0:(_data$relationships2$2=_data$relationships2$.field_media_image)===null||_data$relationships2$2===void 0?void 0:_data$relationships2$2.alt;var imgPosition=imgData?{focalY:(data===null||data===void 0?void 0:(_data$relationships3=data.relationships)===null||_data$relationships3===void 0?void 0:_data$relationships3.field_header_image.field_focal_point_y_position)+"%",focalX:(data===null||data===void 0?void 0:(_data$relationships4=data.relationships)===null||_data$relationships4===void 0?void 0:_data$relationships4.field_header_image.field_focal_point_x_position)+"%"}:null;return{imgData:imgData,imgAlt:imgAlt,imgPosition:imgPosition};}function handleFeaturedImage(data){var _data$relationships5,_data$relationships5$,_data$relationships5$2,_data$relationships5$3,_data$relationships6,_data$relationships6$,_data$relationships6$2,_data$relationships7,_data$relationships8;var imgData=data===null||data===void 0?void 0:(_data$relationships5=data.relationships)===null||_data$relationships5===void 0?void 0:(_data$relationships5$=_data$relationships5.field_featured_image)===null||_data$relationships5$===void 0?void 0:(_data$relationships5$2=_data$relationships5$.relationships)===null||_data$relationships5$2===void 0?void 0:(_data$relationships5$3=_data$relationships5$2.field_media_image)===null||_data$relationships5$3===void 0?void 0:_data$relationships5$3.localFile;var imgAlt=data===null||data===void 0?void 0:(_data$relationships6=data.relationships)===null||_data$relationships6===void 0?void 0:(_data$relationships6$=_data$relationships6.field_featured_image)===null||_data$relationships6$===void 0?void 0:(_data$relationships6$2=_data$relationships6$.field_media_image)===null||_data$relationships6$2===void 0?void 0:_data$relationships6$2.alt;var imgPosition=imgData?{focalY:(data===null||data===void 0?void 0:(_data$relationships7=data.relationships)===null||_data$relationships7===void 0?void 0:_data$relationships7.field_featured_image.field_focal_point_y_position)+"%",focalX:(data===null||data===void 0?void 0:(_data$relationships8=data.relationships)===null||_data$relationships8===void 0?void 0:_data$relationships8.field_featured_image.field_focal_point_x_position)+"%"}:null;return{imgData:imgData,imgAlt:imgAlt,imgPosition:imgPosition};}/**\n * processImageData\n * \n * This is similar to handleFeaturedImage but does not assume the field name of the image\n */function handleImage(image){var _image$relationships,_image$relationships$,_image$field_media_im;var imgData=image===null||image===void 0?void 0:(_image$relationships=image.relationships)===null||_image$relationships===void 0?void 0:(_image$relationships$=_image$relationships.field_media_image)===null||_image$relationships$===void 0?void 0:_image$relationships$.localFile;var imgAlt=image===null||image===void 0?void 0:(_image$field_media_im=image.field_media_image)===null||_image$field_media_im===void 0?void 0:_image$field_media_im.alt;var imgPosition=imgData?{focalY:(image===null||image===void 0?void 0:image.field_focal_point_y_position)+"%",focalX:(image===null||image===void 0?void 0:image.field_focal_point_x_position)+"%"}:null;return{imgData:imgData,imgAlt:imgAlt,imgPosition:imgPosition};}function chooseImageByCardType(item,fallbackImageLookup){var _item$relationships,_item$relationships$n,_item$relationships2,_item$relationships3,_item$relationships4,_item$relationships5,_item$relationships6,_item$relationships7;var cardImg;var cardFallbackImg=fallbackImageLookup["Global"];switch(item===null||item===void 0?void 0:(_item$relationships=item.relationships)===null||_item$relationships===void 0?void 0:(_item$relationships$n=_item$relationships.node_type)===null||_item$relationships$n===void 0?void 0:_item$relationships$n.name){case"Exhibition":case"Post":case"Video Item":case"Podcast":case"Featured Object":case"Event":cardFallbackImg=fallbackImageLookup[item.relationships.node_type.name];cardImg=(_item$relationships2=item.relationships)!==null&&_item$relationships2!==void 0&&_item$relationships2.field_featured_image?(_item$relationships3=item.relationships)===null||_item$relationships3===void 0?void 0:_item$relationships3.f
1ield_featured_image:cardFallbackImg;break;case"Store Item":cardFallbackImg=fallbackImageLookup[item.relationships.node_type.name];cardImg=(_item$relationships4=item.relationships)!==null&&_item$relationships4!==void 0&&_item$relationships4.field_store_item_image?(_item$relationships5=item.relationships)===null||_item$relationships5===void 0?void 0:_item$relationships5.field_store_item_image:cardFallbackImg;break;default:cardImg=item!==null&&item!==void 0&&(_item$relationships6=item.relationships)!==null&&_item$relationships6!==void 0&&_item$relationships6.field_featured_image?item===null||item===void 0?void 0:(_item$relationships7=item.relationships)===null||_item$relationships7===void 0?void 0:_item$relationships7.field_featured_image:cardFallbackImg;break;}return cardImg;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLENBQUcsSUFBSSxDQUNSLE1BQU8sQ0FDTFgsT0FBTyxDQUFQQSxPQUFPLENBQ1BLLE1BQU0sQ0FBTkEsTUFBTSxDQUNORSxXQUFXLENBQVhBLFdBQ0YsQ0FBQyxDQUNILENBRU8sUUFBUyxDQUFBcUIscUJBQXFCQSxDQUFDQyxJQUFJLENBQUVDLG1CQUFtQixDQUFFLEtBQUFDLG1CQUFBLENBQUFDLHFCQUFBLENBQUFDLG9CQUFBLENBQUFDLG9CQUFBLENBQUFDLG9CQUFBLENBQUFDLG9CQUFBLENBQUFDLG9CQUFBLENBQUFDLG9CQUFBLENBQy9ELEdBQUksQ0FBQUMsT0FBTyxDQUNYLEdBQUksQ0FBQUMsZUFBZSxDQUFHVixtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FDbkQsT0FBUUQsSUFBSSxTQUFKQSxJQUFJLGtCQUFBRSxtQkFBQSxDQUFKRixJQUFJLENBQUU1QixhQUFhLFVBQUE4QixtQkFBQSxrQkFBQUMscUJBQUEsQ0FBbkJELG1CQUFBLENBQXFCVSxTQUFTLFVBQUFULHFCQUFBLGlCQUE5QkEscUJBQUEsQ0FBZ0NVLElBQUksRUFDMUMsSUFBSyxZQUFZLENBQ2pCLElBQUssTUFBTSxDQUNYLElBQUssWUFBWSxDQUNqQixJQUFLLFNBQVMsQ0FDZCxJQUFLLGlCQUFpQixDQUN0QixJQUFLLE9BQU8sQ0FDVkYsZU
1FBZSxDQUFHVixtQkFBbUIsQ0FBQ0QsSUFBSSxDQUFDNUIsYUFBYSxDQUFDd0MsU0FBUyxDQUFDQyxJQUFJLENBQUMsQ0FDeEVILE9BQU8sQ0FBRyxDQUFBTixvQkFBQSxDQUFBSixJQUFJLENBQUM1QixhQUFhLFVBQUFnQyxvQkFBQSxXQUFsQkEsb0JBQUEsQ0FBb0JYLG9CQUFvQixFQUFBWSxvQkFBQSxDQUFHTCxJQUFJLENBQUM1QixhQUFhLFVBQUFpQyxvQkFBQSxpQkFBbEJBLG9CQUFBLENBQW9CWixvQkFBb0IsQ0FBR2tCLGVBQWUsQ0FDL0csTUFDRixJQUFLLFlBQVksQ0FDZkEsZUFBZSxDQUFHVixtQkFBbUIsQ0FBQ0QsSUFBSSxDQUFDNUIsYUFBYSxDQUFDd0MsU0FBUyxDQUFDQyxJQUFJLENBQUMsQ0FDeEVILE9BQU8sQ0FBRyxDQUFBSixvQkFBQSxDQUFBTixJQUFJLENBQUM1QixhQUFhLFVBQUFrQyxvQkFBQSxXQUFsQkEsb0JBQUEsQ0FBb0JRLHNCQUFzQixFQUFBUCxvQkFBQSxDQUFHUCxJQUFJLENBQUM1QixhQUFhLFVBQUFtQyxvQkFBQSxpQkFBbEJBLG9CQUFBLENBQW9CTyxzQkFBc0IsQ0FBR0gsZUFBZSxDQUNuSCxNQUNGLFFBQ0VELE9BQU8sQ0FBR1YsSUFBSSxTQUFKQSxJQUFJLFlBQUFRLG9CQUFBLENBQUpSLElBQUksQ0FBRTVCLGFBQWEsVUFBQW9DLG9CQUFBLFdBQW5CQSxvQkFBQSxDQUFxQmYsb0JBQW9CLENBQUdPLElBQUksU0FBSkEsSUFBSSxrQkFBQVMsb0JBQUEsQ0FBSlQsSUFBSSxDQUFFNUIsYUFBYSxVQUFBcUMsb0JBQUEsaUJBQW5CQSxvQkFBQSxDQUFxQmhCLG9CQUFvQixDQUFHa0IsZUFBZSxDQUNqSCxNQUNKLENBQ0EsTUFBTyxDQUFBRCxPQUFPLENBQ2hCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy91dGlscy9oYW5kbGVJbWFnZXMuanM/ZDUzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gaGFuZGxlSGVyb0ltYWdlKGRhdGEpIHtcbiAgY29uc3QgaW1nRGF0YSA9IGRhdGE/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX2hlYWRlcl9pbWFnZT8ucmVsYXRpb25zaGlwcz8uZmllbGRfbWVkaWFfaW1hZ2U/LmxvY2FsRmlsZTtcbiAgY29uc3QgaW1nQWx0ID0gZGF0YT8ucmVsYXRpb25zaGlwcz8uZmllbGRfaGVhZGVyX2ltYWdlPy5maWVsZF9tZWRpYV9pbWFnZT8uYWx0O1xuICBjb25zdCBpbWdQb3NpdGlvbiA9IGltZ0RhdGEgPyB7XG4gICAgICBmb2NhbFk6IGAke2RhdGE/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX2hlYWRlcl9pbWFnZS5maWVsZF9mb2NhbF9wb2ludF95X3Bvc2l0aW9ufSVgLFxuICAgICAgZm9jYWxYOiBgJHtkYXRhPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9oZWFkZXJfaW1hZ2UuZmllbGRfZm9jYWxfcG9pbnRfeF9wb3NpdGlvbn0lYCxcbiAgfSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgaW1nRGF0YSxcbiAgICBpbWdBbHQsXG4gICAgaW1nUG9zaXRpb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVGZWF0dXJlZEltYWdlKGRhdGEpIHtcbiAgY29uc3QgaW1nRGF0YSA9IGRhdGE/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX2ZlYXR1cmVkX2ltYWdlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9tZWRpYV9pbWFnZT8ubG9jYWxGaWxlO1xuICBjb25zdCBpbWdBbHQgPSBkYXRhPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9mZWF0dXJlZF9pbWFnZT8uZmllbGRfbWVkaWFfaW1hZ2U/LmFsdDtcbiAgY29uc3QgaW1nUG9zaXRpb24gPSBpbWdEYXRhID8ge1xuICAgICAgZm9jYWxZOiBgJHtkYXRhPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9mZWF0dXJlZF9pbWFnZS5maWVsZF9mb2NhbF9wb2ludF95X3Bvc2l0aW9ufSVgLFxuICAgICAgZm9jYWxYOiBgJHtkYXRhPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9mZWF0dXJlZF9pbWFnZS5maWVsZF9mb2NhbF9wb2ludF94X3Bvc2l0aW9ufSVgLFxuICB9IDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBpbWdEYXRhLFxuICAgIGltZ0FsdCxcbiAgICBpbWdQb3NpdGlvbixcbiAgfTtcbn1cblxuLyoqXG4gKiBwcm9jZXNzSW1hZ2VEYXRhXG4gKiBcbiAqIFRoaXMgaXMgc2ltaWxhciB0byBoYW5kbGVGZWF0dXJlZEltYWdlIGJ1dCBkb2VzIG5vdCBhc3N1bWUgdGhlIGZpZWxkIG5hbWUgb2YgdGhlIGltYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVJbWFnZShpbWFnZSkge1xuICBjb25zdCBpbWdEYXRhID0gaW1hZ2U/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX21lZGlhX2ltYWdlPy5sb2NhbEZpbGU7XG4gIGNvbnN0IGltZ0FsdCA9IGltYWdlPy5maWVsZF9tZWRpYV9pbWFnZT8uYWx0O1xuICBjb25zdCBpbWdQb3NpdGlvbiA9IGltZ0RhdGEgPyB7XG4gICAgICBmb2NhbFk6IGAke2ltYWdlPy5maWVsZF9mb2NhbF9wb2ludF95X3Bvc2l0aW9ufSVgLFxuICAgICAgZm9jYWxYOiBgJHtpbWFnZT8uZmllbGRfZm9jYWxfcG9pbnRfeF9wb3NpdGlvbn0lYCxcbiAgfSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgaW1nRGF0YSxcbiAgICBpbWdBbHQsXG4gICAgaW1nUG9zaXRpb24sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2VJbWFnZUJ5Q2FyZFR5cGUoaXRlbSwgZmFsbGJhY2tJbWFnZUxvb2t1cCkge1xuICBsZXQgY2FyZEltZztcbiAgbGV0IGNhcmRGYWxsYmFja0ltZyA9IGZhbGxiYWNrSW1hZ2VMb29rdXBbXCJHbG9iYWxcIl07XG4gIHN3aXRjaCAoaXRlbT8ucmVsYXRpb25zaGlwcz8ubm9kZV90eXBlPy5uYW1lKSB7XG4gICAgY2FzZSBcIkV4aGliaXRpb25cIjpcbiAgICBjYXNlIFwiUG9zdFwiOlxuICAgIGNhc2UgXCJWaWRlbyBJdGVtXCI6XG4gICAgY2FzZSBcIlBvZGNhc3RcIjpcbiAgICBjYXNlIFwiRmVhdHVyZWQgT2JqZWN0XCI6XG4gICAgY2FzZSBcIkV2ZW50XCI6XG4gICAgICBjYXJkRmFsbGJhY2tJbWcgPSBmYWxsYmFja0ltYWdlTG9va3VwW2l0ZW0ucmVsYXRpb25zaGlwcy5ub2RlX3R5cGUubmFtZV07XG4gICAgICBjYXJkSW1nID0gaXRlbS5yZWxhdGlvbnNoaXBzPy5maWVsZF9mZWF0dXJlZF9pbWFnZSA/IGl0ZW0ucmVsYXRpb25zaGlwcz8uZmllbGRfZmVhdHVyZWRfaW1hZ2UgO
1iBjYXJkRmFsbGJhY2tJbWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiU3RvcmUgSXRlbVwiOlxuICAgICAgY2FyZEZhbGxiYWNrSW1nID0gZmFsbGJhY2tJbWFnZUxvb2t1cFtpdGVtLnJlbGF0aW9uc2hpcHMubm9kZV90eXBlLm5hbWVdO1xuICAgICAgY2FyZEltZyA9IGl0ZW0ucmVsYXRpb25zaGlwcz8uZmllbGRfc3RvcmVfaXRlbV9pbWFnZSA/IGl0ZW0ucmVsYXRpb25zaGlwcz8uZmllbGRfc3RvcmVfaXRlbV9pbWFnZSA6IGNhcmRGYWxsYmFja0ltZztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYXJkSW1nID0gaXRlbT8ucmVsYXRpb25zaGlwcz8uZmllbGRfZmVhdHVyZWRfaW1hZ2UgPyBpdGVtPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9mZWF0dXJlZF9pbWFnZSA6IGNhcmRGYWxsYmFja0ltZztcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjYXJkSW1nO1xufVxuIl0sIm5hbWVzIjpbImhhbmRsZUhlcm9JbWFnZSIsImRhdGEiLCJfZGF0YSRyZWxhdGlvbnNoaXBzIiwiX2RhdGEkcmVsYXRpb25zaGlwcyRmIiwiX2RhdGEkcmVsYXRpb25zaGlwcyRmMiIsIl9kYXRhJHJlbGF0aW9uc2hpcHMkZjMiLCJfZGF0YSRyZWxhdGlvbnNoaXBzMiIsIl9kYXRhJHJlbGF0aW9uc2hpcHMyJCIsIl9kYXRhJHJlbGF0aW9uc2hpcHMyJDIiLCJfZGF0YSRyZWxhdGlvbnNoaXBzMyIsIl9kYXRhJHJlbGF0aW9uc2hpcHM0IiwiaW1nRGF0YSIsInJlbGF0aW9uc2hpcHMiLCJmaWVsZF9oZWFkZXJfaW1hZ2UiLCJmaWVsZF9tZWRpYV9pbWFnZSIsImxvY2FsRmlsZSIsImltZ0FsdCIsImFsdCIsImltZ1Bvc2l0aW9uIiwiZm9jYWxZIiwiZmllbGRfZm9jYWxfcG9pbnRfeV9wb3NpdGlvbiIsImZvY2FsWCIsImZpZWxkX2ZvY2FsX3BvaW50X3hfcG9zaXRpb24iLCJoYW5kbGVGZWF0dXJlZEltYWdlIiwiX2RhdGEkcmVsYXRpb25zaGlwczUiLCJfZGF0YSRyZWxhdGlvbnNoaXBzNSQiLCJfZGF0YSRyZWxhdGlvbnNoaXBzNSQyIiwiX2RhdGEkcmVsYXRpb25zaGlwczUkMyIsIl9kYXRhJHJlbGF0aW9uc2hpcHM2IiwiX2RhdGEkcmVsYXRpb25zaGlwczYkIiwiX2RhdGEkcmVsYXRpb25zaGlwczYkMiIsIl9kYXRhJHJlbGF0aW9uc2hpcHM3IiwiX2RhdGEkcmVsYXRpb25zaGlwczgiLCJmaWVsZF9mZWF0dXJlZF9pbWFnZSIsImhhbmRsZUltYWdlIiwiaW1hZ2UiLCJfaW1hZ2UkcmVsYXRpb25zaGlwcyIsIl9pbWFnZSRyZWxhdGlvbnNoaXBzJCIsIl9pbWFnZSRmaWVsZF9tZWRpYV9pbSIsImNob29zZUltYWdlQnlDYXJkVHlwZSIsIml0ZW0iLCJmYWxsYmFja0ltYWdlTG9va3VwIiwiX2l0ZW0kcmVsYXRpb25zaGlwcyIsIl9pdGVtJHJlbGF0aW9uc2hpcHMkbiIsIl9pdGVtJHJlbGF0aW9uc2hpcHMyIiwiX2l0ZW0kcmVsYXRpb25zaGlwczMiLCJfaXRlbSRyZWxhdGlvbnNoaXBzNCIsIl9pdGVtJHJlbGF0aW9uc2hpcHM1IiwiX2l0ZW0kcmVsYXRpb25zaGlwczYiLCJfaXRlbSRyZWxhdGlvbnNoaXBzNyIsImNhcmRJbWciLCJjYXJkRmFsbGJhY2tJbWciLCJub2RlX3R5cGUiLCJuYW1lIiwiZmllbGRfc3RvcmVfaXRlbV9pbWFnZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///500\n')},2064:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: function() { return /* binding */ CtaTextArrow; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\n/* harmony import */ var _Icons_SmallArrow__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2078);\n/* harmony import */ var _OrgLink_OrgLink__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2107);\nfunction CtaTextArrow(_ref){var text=_ref.text,_ref$black=_ref.black,black=_ref$black===void 0?false:_ref$black,_ref$link=_ref.link,link=_ref$link===void 0?null:_ref$link;if(link){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_OrgLink_OrgLink__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A,{to:link,className:black?\'c-cta-text-arrow u-hover-text-parent c-cta-text-arrow--black\':\'u-hover-text-parent c-cta-text-arrow\'},text&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",{className:"f-cta c-cta-text-arrow__text u-hover-text"},text),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",{className:text?\'c-cta-text-arrow__arrow\':\'c-cta-text-arrow__arrow c-cta-text-arrow__arrow--no-text\'},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_Icons_SmallArrow__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,null)));}else{return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:black?\'c-cta-text-arrow c-cta-text-arrow--black\':\'c-cta-text-arrow\'},text&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",{className:"f-cta c-cta-text-arrow__text"},text),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",{className:text?\'c-cta-text-arrow__arrow\':\'c-cta-text-arrow__arrow c-cta-text-arrow__arrow--no-text\'},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_Icons_SmallArrow__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A,null)));};}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjA2NC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFJZSxRQUFTLENBQUFHLFlBQVlBLENBQUFDLElBQUEsQ0FBcUMsSUFBbkMsQ0FBQUMsSUFBSSxDQUFBRCxJQUFBLENBQUpDLElBQUksQ0FBQUMsVUFBQSxDQUFBRixJQUFBLENBQUVHLEtBQUssQ0FBTEEsS0FBSyxDQUFBRCxVQUFBLFVBQUcsS0FBSyxDQUFBQSxVQUFBLENBQUFFLFNBQUEsQ0FBQUosSUFBQSxDQUFFSyxJQUFJLENBQUpBLElBQUksQ0FBQUQsU0FBQSxVQUFHLElBQUksQ0FBQUEsU0FBQSxDQUNwRSxHQUFJQyxJQUFJLENBQUUsQ0FDUixtQkFDRVQsZ0RBQUEsQ0FBQ0UsaUVBQU8sRUFBQ1MsRUFBRSxDQUFFRixJQUFLLENBQUNHLFNBQVMsQ0FBRUwsS0FBSyxDQUFHLDhEQUE4RCxDQUFHLHNDQUF1QyxFQUM3SUYsSUFBSSxlQUNETCxnREFBQSxTQUFNWSxTQUFTLENBQUMsMkNBQTJDLEVBQzFEUCxJQUNHLENBQ1AsY0FDREwsZ0RBQUEsU0FDRVksU0FBUyxDQUNQUCxJQUFJLENBQ0EseUJBQXlCLENBQ3pCLDBEQUNMLGVBRURMLGdEQUFBLENBQUNDLGtFQUFVLEtBQUUsQ0FDVCxDQUNDLENBQUMsQ0FHWixDQUFDLElBQ0ksQ0FDSCxtQkFDSUQsZ0RBQUEsUUFBS1ksU0FBUyxDQUFFTCxLQUFLLENBQUcsMENBQTBDLENBQUcsa0JBQW9CLEVBQ3RGRixJQUFJLGVBQ0hMLGdEQUFBLFNBQU1ZLFNBQVMsQ0FBQyw4QkFBOEIsRUFDM0NQLElBQ0csQ0FDUCxjQUNETCxnREFBQSxTQUNFWSxTQUFTLENBQ1BQLElBQUksQ0FDQSx5QkFBeUIsQ0FDekIsMERBQ0wsZUFFREwsZ0RBQUEsQ0FBQ0Msa0VBQVUsS0FBRSxDQUNULENBQ0gsQ0FBQyxDQUVkLENBQUMsQ0FDRCIsInNvdXJjZXMiOlsid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9DdGFUZXh0QXJyb3cvQ3RhVGV4dEFycm93LmpzP2IzYmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBTbWFsbEFycm93IGZyb20gJy4uL0ljb25zL1NtYWxsQXJyb3cnO1xuaW1wb3J0IE9yZ0xpbmsgZnJvbSAnLi4vT3JnTGluay9PcmdMaW5rJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ3RhVGV4dEFycm93KHt0ZXh0LCBibGFjayA9IGZhbHNlLCBsaW5rID0gbnVsbH0pIHtcbiAgaWYgKGxpbmspIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE9yZ0xpbmsgdG89e2xpbmt9IGNsYXNzTmFtZT17YmxhY2sgPyAnYy1jdGEtdGV4dC1hcnJvdyB1LWhvdmVyLXRleHQtcGFyZW50IGMtY3RhLXRleHQtYXJyb3ctLWJsYWNrJyA6ICd1LWhvdmVyLXRleHQtcGFyZW50IGMtY3RhLXRleHQtYXJyb3cnfT5cbiAgICAgIHt0ZXh0ICYmIChcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmLWN0YSBjLWN0YS10ZXh0LWFycm93X190ZXh0IHUtaG92ZXItdGV4dFwiPlxuICAgICAgICAgI
1Ht0ZXh0fVxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICB0ZXh0XG4gICAgICAgICAgICA/ICdjLWN0YS10ZXh0LWFycm93X19hcnJvdydcbiAgICAgICAgICAgIDogJ2MtY3RhLXRleHQtYXJyb3dfX2Fycm93IGMtY3RhLXRleHQtYXJyb3dfX2Fycm93LS1uby10ZXh0J1xuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxTbWFsbEFycm93IC8+XG4gICAgICA8L3NwYW4+XG4gICAgPC9PcmdMaW5rPlxuICAgIClcblxuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtibGFjayA/ICdjLWN0YS10ZXh0LWFycm93IGMtY3RhLXRleHQtYXJyb3ctLWJsYWNrJyA6ICdjLWN0YS10ZXh0LWFycm93JyB9PlxuICAgICAgICAgIHt0ZXh0ICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImYtY3RhIGMtY3RhLXRleHQtYXJyb3dfX3RleHRcIj5cbiAgICAgICAgICAgICAge3RleHR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgID8gJ2MtY3RhLXRleHQtYXJyb3dfX2Fycm93J1xuICAgICAgICAgICAgICAgIDogJ2MtY3RhLXRleHQtYXJyb3dfX2Fycm93IGMtY3RhLXRleHQtYXJyb3dfX2Fycm93LS1uby10ZXh0J1xuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTbWFsbEFycm93IC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIClcbn07XG59XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJTbWFsbEFycm93IiwiT3JnTGluayIsIkN0YVRleHRBcnJvdyIsIl9yZWYiLCJ0ZXh0IiwiX3JlZiRibGFjayIsImJsYWNrIiwiX3JlZiRsaW5rIiwibGluayIsImNyZWF0ZUVsZW1lbnQiLCJ0byIsImNsYXNzTmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2064\n')},3169:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\nvar Arrow=function Arrow(_ref){var _ref$color=_ref.color,color=_ref$color===void 0?\'#DB3A2D\':_ref$color;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",{width:"74",height:"32",viewBox:"0 0 74 32",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"u-cta-arrow"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{d:"M40 15.9624H0M40 15.9624L26 30.9237M40 15.9624L26 1",className:"u-cta-arrow__path",stroke:color}));};/* harmony default export */ __webpack_exports__.A = (Arrow);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzE2OS5qcyIsIm1hcHBpbmdzIjoiO0FBRUEsR0FBTSxDQUFBQyxLQUFLLENBQUcsUUFBUixDQUFBQSxLQUFLQSxDQUFBQyxJQUFBLE1BQUFDLFVBQUEsQ0FBQUQsSUFBQSxDQUFLRSxLQUFLLENBQUxBLEtBQUssQ0FBQUQsVUFBQSxVQUFHLFNBQVMsQ0FBQUEsVUFBQSxvQkFDL0JILGdEQUFBLFFBQUtNLEtBQUssQ0FBQyxJQUFJLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxXQUFXLENBQUNDLElBQUksQ0FBQyxNQUFNLENBQUNDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQ0MsU0FBUyxDQUFDLGFBQWEsZUFDcEhYLGdEQUFBLFNBQU1ZLENBQUMsQ0FBQyxxREFBcUQsQ0FBQ0QsU0FBUyxDQUFDLG1CQUFtQixDQUFDRSxNQUFNLENBQUVULEtBQU0sQ0FBQyxDQUN4RyxDQUFDLEVBQ1AsQ0FFRCxzREFBZUgsS0FBSyIsInNvdXJjZXMiOlsid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9JY29ucy9BcnJvdy5qcz8zZjY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IEFycm93ID0gKHtjb2xvciA9ICcjREIzQTJEJ30pID0+IChcbiAgPHN2ZyB3aWR0aD1cIjc0XCIgaGVpZ2h0PVwiMzJcIiB2aWV3Qm94PVwiMCAwIDc0IDMyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3NOYW1lPVwidS1jdGEtYXJyb3dcIj5cbiAgICA8cGF0aCBkPVwiTTQwIDE1Ljk2MjRIME00MCAxNS45NjI0TDI2IDMwLjkyMzdNNDAgMTUuOTYyNEwyNiAxXCIgY2xhc3NOYW1lPVwidS1jdGEtYXJyb3dfX3BhdGhcIiBzdHJva2U9e2NvbG9yfS8+XG4gIDwvc3ZnPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQXJyb3c7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJBcnJvdyIsIl9yZWYiLCJfcmVmJGNvbG9yIiwiY29sb3IiLCJjcmVhdGVFbGVtZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsInhtbG5zIiwiY2xhc3NOYW1lIiwiZCIsInN0cm9rZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///3169\n')},3620:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony default export */ __webpack_exports__.A = (__webpack_require__.p + "static/branch-bottom-a5bf4e6a11b7bb7ae0b5b3024716ba24.png");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYyMC5qcyIsIm1hcHBpbmdzIjoiQUFBQSxzREFBZSxxQkFBdUIsOERBQThEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9pbWFnZXMvYnJhbmNoLWJvdHRvbS5wbmc/N2IwZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwic3RhdGljL2JyYW5jaC1ib3R0b20tYTViZjRlNmExMWI3YmI3YWUwYjViMzAyNDcxNmJhMjQucG5nXCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3620\n')},4232:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: function() { return /* binding */ useOnScreen; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\nfunction useOnScreen(ref,rootMargin,threshold){if(rootMargin===void 0){rootMargin='0px';}if(threshold===void 0){threshold=0;}// State and setter for storing whether element is visible\nvar _useState=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),isIntersecting=_useState[0],setIntersecting=_useState[1];(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function(){var element=ref.current;if(!element){return undefined;}var observer=new IntersectionObserver(function(_ref){var entry=_ref[0];
1// Update our state when observer callback fires\nsetIntersecting(entry.isIntersecting);},{rootMargin:rootMargin,threshold:threshold});observer.observe(element);return function(){observer.disconnect();};// Only re-create the observer when the element or its options change.\n// Without this the observer was torn down and rebuilt on every render.\n},[ref,rootMargin,threshold]);return isIntersecting;}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIzMi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBRWUsUUFBUyxDQUFBRSxXQUFXQSxDQUFDQyxHQUFHLENBQUVDLFVBQVUsQ0FBVUMsU0FBUyxDQUFNLElBQW5DRCxVQUFVLFdBQVZBLFVBQVUsQ0FBRyxLQUFLLEtBQUVDLFNBQVMsV0FBVEEsU0FBUyxDQUFHLENBQUMsRUFDeEU7QUFDQSxJQUFBQyxTQUFBLENBQTBDTiwrQ0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFsRE8sY0FBYyxDQUFBRCxTQUFBLElBQUVFLGVBQWUsQ0FBQUYsU0FBQSxJQUV0Q0wsZ0RBQVMsQ0FBQyxVQUFNLENBQ2QsR0FBTSxDQUFBUSxPQUFPLENBQUdOLEdBQUcsQ0FBQ08sT0FBTyxDQUUzQixHQUFJLENBQUNELE9BQU8sQ0FBRSxDQUNaLE1BQU8sQ0FBQUUsU0FBUyxDQUNsQixDQUVBLEdBQU0sQ0FBQUMsUUFBUSxDQUFHLEdBQUksQ0FBQUMsb0JBQW9CLENBQ3ZDLFNBQUFDLElBQUEsQ0FBYSxJQUFYLENBQUFDLEtBQUssQ0FBQUQsSUFBQSxJQUNMO0FBQ0FOLGVBQWUsQ0FBQ08sS0FBSyxDQUFDUixjQUFjLENBQUMsQ0FDdkMsQ0FBQyxDQUNELENBQUNILFVBQVUsQ0FBVkEsVUFBVSxDQUFFQyxTQUFTLENBQVRBLFNBQVMsQ0FDeEIsQ0FBQyxDQUVETyxRQUFRLENBQUNJLE9BQU8sQ0FBQ1AsT0FBTyxDQUFDLENBRXpCLE1BQU8sV0FBTSxDQUNYRyxRQUFRLENBQUNLLFVBQVUsQ0FBQyxDQUFDLENBQ3ZCLENBQUMsQ0FDRDtBQUNBO0FBQ0YsQ0FBQyxDQUFFLENBQUNkLEdBQUcsQ0FBRUMsVUFBVSxDQUFFQyxTQUFTLENBQUMsQ0FBQyxDQUVoQyxNQUFPLENBQUFFLGNBQWMsQ0FDdkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL3V0aWxzL3VzZU9uU2NyZWVuLmpzPzk5M2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt1c2VTdGF0ZSwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU9uU2NyZWVuKHJlZiwgcm9vdE1hcmdpbiA9ICcwcHgnLCB0aHJlc2hvbGQgPSAwKSB7XG4gIC8vIFN0YXRlIGFuZCBzZXR0ZXIgZm9yIHN0b3Jpbmcgd2hldGhlciBlbGVtZW50IGlzIHZpc2libGVcbiAgY29uc3QgW2lzSW50ZXJzZWN0aW5nLCBzZXRJbnRlcnNlY3RpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHJlZi5jdXJyZW50O1xuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgKFtlbnRyeV0pID0+IHtcbiAgICAgICAgLy8gVXBkYXRlIG91ciBzdGF0ZSB3aGVuIG9ic2VydmVyIGNhbGxiYWNrIGZpcmVzXG4gICAgICAgIHNldEludGVyc2VjdGluZyhlbnRyeS5pc0ludGVyc2VjdGluZyk7XG4gICAgICB9LFxuICAgICAge3Jvb3RNYXJnaW4sIHRocmVzaG9sZH1cbiAgICApO1xuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50KTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfTtcbiAgICAvLyBPbmx5IHJlLWNyZWF0ZSB0aGUgb2JzZXJ2ZXIgd2hlbiB0aGUgZWxlbWVudCBvciBpdHMgb3B0aW9ucyBjaGFuZ2UuXG4gICAgLy8gV2l0aG91dCB0aGlzIHRoZSBvYnNlcnZlciB3YXMgdG9ybiBkb3duIGFuZCByZWJ1aWx0IG9uIGV2ZXJ5IHJlbmRlci5cbiAgfSwgW3JlZiwgcm9vdE1hcmdpbiwgdGhyZXNob2xkXSk7XG5cbiAgcmV0dXJuIGlzSW50ZXJzZWN0aW5nO1xufVxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlT25TY3JlZW4iLCJyZWYiLCJyb290TWFyZ2luIiwidGhyZXNob2xkIiwiX3VzZVN0YXRlIiwiaXNJbnRlcnNlY3RpbmciLCJzZXRJbnRlcnNlY3RpbmciLCJlbGVtZW50IiwiY3VycmVudCIsInVuZGVmaW5lZCIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfcmVmIiwiZW50cnkiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4232\n")},4467:function(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__){eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: function() { return /* binding */ _defineProperty; }\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(816);\n\nfunction _defineProperty(e, r, t) {\n return (r = (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .A)(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQ2Ny5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQStDO0FBQy9DO0FBQ0EsY0FBYyxzRUFBYTtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEd
1BQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL2NwcC1tdXR0ZXIvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanM/N2Y3ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4467\n')},4674:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\nvar Facebook=function Facebook(_ref){var _ref$color=_ref.color,color=_ref$color===void 0?\'#DB3A2D\':_ref$color;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"none",xmlns:"http://www.w3.org/2000/svg"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{d:"M20 10.0282C20 4.4944 15.52 0.00317383 10 0.00317383C4.48 0.00317383 0 4.4944 0 10.0282C0 14.8804 3.44 18.9205 8 19.8528V13.0358H6V10.0282H8V7.52197C8 5.58713 9.57 4.0132 11.5 4.0132H14V7.02072H12C11.45 7.02072 11 7.47185 11 8.02322V10.0282H14V13.0358H11V20.0032C16.05 19.5019 20 15.2312 20 10.0282Z",fill:color}));};/* harmony default export */ __webpack_exports__.A = (Facebook);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDY3NC5qcyIsIm1hcHBpbmdzIjoiO0FBRUEsR0FBTSxDQUFBQyxRQUFRLENBQUcsUUFBWCxDQUFBQSxRQUFRQSxDQUFBQyxJQUFBLE1BQUFDLFVBQUEsQ0FBQUQsSUFBQSxDQUFLRSxLQUFLLENBQUxBLEtBQUssQ0FBQUQsVUFBQSxVQUFHLFNBQVMsQ0FBQUEsVUFBQSxvQkFDbENILGdEQUFBLFFBQUtNLEtBQUssQ0FBQyxJQUFJLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxXQUFXLENBQUNDLElBQUksQ0FBQyxNQUFNLENBQUNDLEtBQUssQ0FBQyw0QkFBNEIsZUFDNUZWLGdEQUFBLFNBQ0VXLENBQUMsQ0FBQyw2U0FBNlMsQ0FDL1NGLElBQUksQ0FBRUwsS0FBTSxDQUNiLENBQ0UsQ0FBQyxFQUNQLENBRUQsc0RBQWVILFFBQVEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvSWNvbnMvRmFjZWJvb2suanM/NzI3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jb25zdCBGYWNlYm9vayA9ICh7Y29sb3IgPSAnI0RCM0EyRCd9KSA9PiAoXG4gIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCIgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTIwIDEwLjAyODJDMjAgNC40OTQ0IDE1LjUyIDAuMDAzMTczODMgMTAgMC4wMDMxNzM4M0M0LjQ4IDAuMDAzMTczODMgMCA0LjQ5NDQgMCAxMC4wMjgyQzAgMTQuODgwNCAzLjQ0IDE4LjkyMDUgOCAxOS44NTI4VjEzLjAzNThINlYxMC4wMjgySDhWNy41MjE5N0M4IDUuNTg3MTMgOS41NyA0LjAxMzIgMTEuNSA0LjAxMzJIMTRWNy4wMjA3MkgxMkMxMS40NSA3LjAyMDcyIDExIDcuNDcxODUgMTEgOC4wMjMyMlYxMC4wMjgySDE0VjEzLjAzNThIMTFWMjAuMDAzMkMxNi4wNSAxOS41MDE5IDIwIDE1LjIzMTIgMjAgMTAuMDI4MlpcIlxuICAgICAgZmlsbD17Y29sb3J9XG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBGYWNlYm9vaztcbiJdLCJuYW1lcyI6WyJSZWFjdCIsIkZhY2Vib29rIiwiX3JlZiIsIl9yZWYkY29sb3IiLCJjb2xvciIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwieG1sbnMiLCJkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///4674\n')},4959:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval("// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ pages; }\n});\n\n// NAMESPACE OBJECT: ./node_modules/swiper/swiper.mjs\nvar swiper_namespaceObject = {};\n__webpack_require__.r(swiper_namespaceObject);\n__webpack_require__.d(swiper_namespaceObject, {\n A: function() { return Swiper; }\n});\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(6540);\n// EXTERNAL MODULE: ./src/components/seo.js\nvar seo = __webpack_require__(7528);\n// EXTERNAL MODULE: ./src/templates/Layout.js + 27 modules\nvar Layout = __webpack_require__(5187);\n;// ./src/components/Icons/SliderArrow.js\nvar SliderArrow=function SliderArrow(_ref){var color=_ref.color;return/*#__PURE__*/react.createElement(\"svg\",{width:\"16\",height:\"27\",viewBox:\"0 0 16 27\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\"},/*#__PURE__*/react.createElement(\"path\",{d:\"M14.8594 1L2.00012 13.5222
1L14.8594 26.0444\",stroke:color,strokeWidth:\"2\"}));};/* harmony default export */ var Icons_SliderArrow = (SliderArrow);\n// EXTERNAL MODULE: ./src/components/Icons/Arrow.js\nvar Arrow = __webpack_require__(3169);\n// EXTERNAL MODULE: ./src/components/OrgLink/OrgLink.js + 1 modules\nvar OrgLink = __webpack_require__(2107);\n// EXTERNAL MODULE: ./node_modules/gatsby-plugin-image/dist/index.browser-25d2e62c.js\nvar index_browser_25d2e62c = __webpack_require__(5588);\n;// ./src/utils/handleTime.js\nfunction getCardDates(date){var d=new Date(date.value);var endD=new Date(date.end_value);var utcDateString=new Date(d).toLocaleDateString('en-US',{timeZone:'UTC'});var formatted={startDate:d.toLocaleDateString('en-US',{timeZone:'UTC',year:'numeric',month:'long',day:'numeric'}),endDate:endD.toLocaleDateString('en-US',{timeZone:'UTC',year:'numeric',month:'long',day:'numeric'}),startTime:d.toLocaleTimeString([],{timeZone:'UTC',hour:\"2-digit\",minute:\"2-digit\"}),endTime:endD.toLocaleTimeString([],{timeZone:'UTC',hour:\"2-digit\",minute:\"2-digit\"})};return formatted;}\n;// ./src/components/HomeGridCard/HomeGridCard.js\nvar HomeGridCard_HomeGridCard=function HomeGridCard(_ref){var type=_ref.type,title=_ref.title,image=_ref.image,dates=_ref.dates,_ref$event=_ref.event,event=_ref$event===void 0?false:_ref$event,_ref$onView=_ref.onView,onView=_ref$onView===void 0?false:_ref$onView,displayDateText=_ref.displayDateText,link=_ref.link,happeningNow=_ref.happeningNow,slider=_ref.slider,quote=_ref.quote,attribution=_ref.attribution,cta=_ref.cta,site=_ref.site,linkType=_ref.linkType,featured=_ref.featured;// Get dates for exhibition and event cards\nvar dateList=[];if(dates){if(dates.length){dates.map(function(date){dateList.push(getCardDates(date));});}else{dateList.push(getCardDates(dates));}}return/*#__PURE__*/react.createElement(OrgLink/* default */.A,{className:\"c-home-grid-card u-hover-text-parent\",to:link,site:site,type:linkType},image&&image.imgData&&/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-grid-card__image \"+(slider?'c-home-grid-card__image-slider':'')},/*#__PURE__*/react.createElement(index_browser_25d2e62c.G,{alt:image.imgAlt?image.imgAlt:'',image:(0,index_browser_25d2e62c.c)(image.imgData),loading:\"lazy\"})),/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-grid-card__text-wrapper\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-grid-card__text\"},/*#__PURE__*/react.createElement(\"h3\",{className:slider?'f-heading-4 c-home-grid-card__title-slider':'f-heading-4 c-home-grid-card__title'},/*#__PURE__*/react.createElement(\"span\",{className:\"u-hover-text u-hover-text--strong \"+(slider?'u-hover-text--white':''),dangerouslySetInnerHTML:{__html:title}})),happeningNow&&/*#__PURE__*/react.createElement(\"p\",{className:slider?'f-tag c-home-grid-card__happening-slider':'f-tag c-home-grid-card__happening'},\"Happening Now\"),featured&&/*#__PURE__*/react.createElement(\"p\",{className:\"f-tag c-home-grid-card__featured\"},\"FEATURED\"),type&&/*#__PURE__*/react.createElement(\"p\",{className:slider?'f-subtag c-home-grid-card__type-slider':'f-subtag c-home-grid-card__type'},type==='Video Item'?'Video':type),displayDateText&&/*#__PURE__*/react.createElement(\"p\",{className:\"f-body-sm c-home-grid-card__date\"},displayDateText),dates&&!displayDateText&&event&&dateList.map(function(date){return/*#__PURE__*/react.createElement(\"p\",{className:\"f-body-sm c-home-grid-card__date\"},date.startDate,\" \",date.startTime,\" - \",date.endTime);}),dates&&!displayDateText&&onView&&dateList.map(function(date){return/*#__PURE__*/react.createElement(\"p\",{className:\"f-body-sm c-home-grid-card__date\"},date.startDate,\" - \",date.endDate);})),!slider&&/*#__PURE__*/react.createElement(\"div\",{to:link,className:\"f-body-sm c-home-grid-card__arrow\"},/*#__PURE__*/react.createElement(Arrow/* default */.A,null))));};/* harmony default export */ var components_HomeGridCard_HomeGridCard = (HomeGridCard_HomeGridCard);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 3 modules\nvar slicedToArray = __webpack_require__(296);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\nvar objectWithoutPropertiesLoose = __webpack_require__(8587);\n;// ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js\n\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = (0,objectWithoutPropertiesLoose/* default */.A)(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\n\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js\nvar defineProperty = __webpack_require__(4467);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js\nvar classCallCheck = __webpack_require__(3029);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js\nvar createClass = __webpack_require__(29
101);\n// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 3 modules\nvar toConsumableArray = __webpack_require__(5458);\n// EXTERNAL MODULE: ./node_modules/core-js/modules/es.array.sort.js\nvar es_array_sort = __webpack_require__(6910);\n;// ./node_modules/swiper/shared/ssr-window.esm.mjs\n/**\n * SSR Window 5.0.1\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2025, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: June 27, 2025\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend() {\n var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var src = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(function (key) {\n return noExtend.indexOf(key) < 0;\n }).forEach(function (key) {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nvar ssrDocument = {\n body: {},\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n activeElement: {\n blur: function blur() {},\n nodeName: ''\n },\n querySelector: function querySelector() {\n return null;\n },\n querySelectorAll: function querySelectorAll() {\n return [];\n },\n getElementById: function getElementById() {\n return null;\n },\n createEvent: function createEvent() {\n return {\n initEvent: function initEvent() {}\n };\n },\n createElement: function createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function setAttribute() {},\n getElementsByTagName: function getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS: function createElementNS() {\n return {};\n },\n importNode: function importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction ssr_window_esm_getDocument() {\n var doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nvar ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState: function replaceState() {},\n pushState: function pushState() {},\n go: function go() {},\n back: function back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function addEventListener() {},\n removeEventListener: function removeEventListener() {},\n getComputedStyle: function getComputedStyle() {\n return {\n getPropertyValue: function getPropertyValue() {\n return '';\n }\n };\n },\n Image: function Image() {},\n Date: function Date() {},\n screen: {},\n setTimeout: function setTimeout() {},\n clearTimeout: function clearTimeout() {},\n matchMedia: function matchMedia() {\n return {};\n },\n requestAnimationFrame: function requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame: function cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction ssr_window_esm_getWindow() {\n var win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\n;// ./node_modules/swiper/shared/utils.mjs\n\n\n\nfunction classesToTokens() {\
1n var classes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return classes.trim().split(' ').filter(function (c) {\n return !!c.trim();\n });\n}\nfunction deleteProps(obj) {\n var object = obj;\n Object.keys(object).forEach(function (key) {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback) {\n var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction utils_getComputedStyle(el) {\n var window = ssr_window_esm_getWindow();\n var style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el) {\n var axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n var window = ssr_window_esm_getWindow();\n var matrix;\n var curTransform;\n var transformMatrix;\n var curStyle = utils_getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function (a) {\n return a.replace(',', '.');\n }).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction utils_isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction utils_extend() {\n var to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n var noExtend = ['__proto__', 'constructor', 'prototype'];\n for (var i = 1; i < arguments.length; i += 1) {\n var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n var keysArray = Object.keys(Object(nextSource)).filter(function (key) {\n return noExtend.indexOf(key) < 0;\n });\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (utils_isObject(to[nextKey]) && utils_isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n utils_extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!utils_isObject(to[nextKey]) && utils_isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n utils_extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n var swiper = _ref.swiper,\n targetPosition = _ref.targetPosition,\n side = _ref.side;\n var window = ssr_window_esm_getWindow();\n var startPosition = -swiper.translate;\n var startTime = null;\n var time;\n var duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n var dir = targetPosition > startPosition ? 'next' : 'prev';\n var isOutOfBound = function isOutOfBound(current, target) {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n var _animate = function animate() {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n var easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n var currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo((0,defineProperty/* default */.A)({}, side, currentPosition));\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';
1\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(function () {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo((0,defineProperty/* default */.A)({}, side, currentPosition));\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(_animate);\n };\n _animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element) {\n var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var window = ssr_window_esm_getWindow();\n var children = (0,toConsumableArray/* default */.A)(element.children);\n if (window.HTMLSlotElement && element instanceof HTMLSlotElement) {\n children.push.apply(children, (0,toConsumableArray/* default */.A)(element.assignedElements()));\n }\n if (!selector) {\n return children;\n }\n return children.filter(function (el) {\n return el.matches(selector);\n });\n}\nfunction elementIsChildOfSlot(el, slot) {\n // Breadth-first search through all parent's children and assigned elements\n var elementsQueue = [slot];\n while (elementsQueue.length > 0) {\n var elementToCheck = elementsQueue.shift();\n if (el === elementToCheck) {\n return true;\n }\n elementsQueue.push.apply(elementsQueue, (0,toConsumableArray/* default */.A)(elementToCheck.children).concat((0,toConsumableArray/* default */.A)(elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : []), (0,toConsumableArray/* default */.A)(elementToCheck.assignedElements ? elementToCheck.assignedElements() : [])));\n }\n}\nfunction elementIsChildOf(el, parent) {\n var window = ssr_window_esm_getWindow();\n var isChild = parent.contains(el);\n if (!isChild && window.HTMLSlotElement && parent instanceof HTMLSlotElement) {\n var children = (0,toConsumableArray/* default */.A)(parent.assignedElements());\n isChild = children.includes(el);\n if (!isChild) {\n isChild = elementIsChildOfSlot(el, parent);\n }\n }\n return isChild;\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag) {\n var _el$classList;\n var classes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var el = document.createElement(tag);\n (_el$classList = el.classList).add.apply(_el$classList, (0,toConsumableArray/* default */.A)(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n var window = getWindow();\n var document = getDocument();\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = el === window ? window.scrollY : el.scrollTop;\n var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n var prevEls = [];\n while (el.previousElementSibling) {\n var prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n var nextEls = [];\n while (el.nextElementSibling) {\n var next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n var window = ssr_window_esm_getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n var child = el;\n var i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n var parents = []; // eslint-disable-line\n var parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n var window = ssr_window_esm_getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(function (e) {\n return !!e;\n });\n}\nfunction getRotateFix(swiper) {\n return function (v) {\n if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n return v + 0.001;\n }\n return v;
1\n };\n}\nfunction setInnerHTML(el) {\n var html = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n if (typeof trustedTypes !== 'undefined') {\n el.innerHTML = trustedTypes.createPolicy('html', {\n createHTML: function createHTML(s) {\n return s;\n }\n }).createHTML(html);\n } else {\n el.innerHTML = html;\n }\n}\n\n;// ./node_modules/swiper/shared/swiper-core.mjs\n\n\n\n\n\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0,defineProperty/* default */.A)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n\n\nvar support;\nfunction calcSupport() {\n var window = ssr_window_esm_getWindow();\n var document = ssr_window_esm_getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nvar deviceCached;\nfunction calcDevice() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n userAgent = _ref.userAgent;
1\n var support = getSupport();\n var window = ssr_window_esm_getWindow();\n var platform = window.navigator.platform;\n var ua = userAgent || window.navigator.userAgent;\n var device = {\n ios: false,\n android: false\n };\n var screenWidth = window.screen.width;\n var screenHeight = window.screen.height;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n var ipad = ua.match(/(iPad)(?!\\1).*OS\\s([\\d_]+)/);\n var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n var iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n var windows = platform === 'Win32';\n var macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(\"\".concat(screenWidth, \"x\").concat(screenHeight)) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice() {\n var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\nvar browser;\nfunction calcBrowser() {\n var window = ssr_window_esm_getWindow();\n var device = getDevice();\n var needPerspectiveFix = false;\n function isSafari() {\n var ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n var ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n var _ua$split$1$split$0$s = ua.split('Version/')[1].split(' ')[0].split('.').map(function (num) {\n return Number(num);\n }),\n _ua$split$1$split$0$s2 = (0,slicedToArray/* default */.A)(_ua$split$1$split$0$s, 2),\n major = _ua$split$1$split$0$s2[0],\n minor = _ua$split$1$split$0$s2[1];\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n var isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n var isSafariBrowser = isSafari();\n var need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix: needPerspectiveFix,\n need3dFix: need3dFix,\n isWebView: isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\nfunction Resize(_ref2) {\n var swiper = _ref2.swiper,\n on = _ref2.on,\n emit = _ref2.emit;\n var window = ssr_window_esm_getWindow();\n var observer = null;\n var animationFrame = null;\n var resizeHandler = function resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n var createObserver = function createObserver() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(function (entries) {\n animationFrame = window.requestAnimationFrame(function () {\n var width = swiper.width,\n height = swiper.height;\n var newWidth = width;\n var newHeight = height;\n entries.forEach(function (_ref3) {\n var contentBoxSize = _ref3.contentBoxSize,\n contentRect = _ref3.contentRect,\n target = _ref3.target;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n var removeObserver = function removeObserver() {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n var orientationChangeHandler = function orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', function () {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', function () {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\nfunction Observer(_ref4) {\n var swiper = _ref4.swiper,\n extendParams = _ref4.extendParams,\n on = _ref4.on,\n emit = _ref4.emit;\n var observers = [];\n var window = ssr_window_esm_getWindow();\n var attach = function attach(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n var observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };
1\n var init = function init() {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n var containerParents = elementParents(swiper.hostEl);\n for (var i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n var destroy = function destroy() {\n observers.forEach(function (observer) {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on: function on(events, handler, priority) {\n var self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n var method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(function (event) {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once: function once(events, handler, priority) {\n var self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny: function onAny(handler, priority) {\n var self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n var method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny: function offAny(handler) {\n var self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n var index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off: function off(events, handler) {\n var self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(function (event) {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(function (eventHandler, index) {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit: function emit() {\n var self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n var events;\n var data;\n var context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n var eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(function (event) {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEac
1h(function (eventHandler) {\n eventHandler.apply(context, [event].concat((0,toConsumableArray/* default */.A)(data)));\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(function (eventHandler) {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\nfunction updateSize() {\n var swiper = this;\n var width;\n var height;\n var el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width: width,\n height: height,\n size: swiper.isHorizontal() ? width : height\n });\n}\nfunction updateSlides() {\n var swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n var params = swiper.params;\n var wrapperEl = swiper.wrapperEl,\n slidesEl = swiper.slidesEl,\n rtl = swiper.rtlTranslate,\n wrongRTL = swiper.wrongRTL;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n var slides = elementChildren(slidesEl, \".\".concat(swiper.params.slideClass, \", swiper-slide\"));\n var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n var snapGrid = [];\n var slidesGrid = [];\n var slidesSizesGrid = [];\n var offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n var offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n var previousSnapGridLength = swiper.snapGrid.length;\n var previousSlidesGridLength = swiper.slidesGrid.length;\n var swiperSize = swiper.size - offsetBefore - offsetAfter;\n var spaceBetween = params.spaceBetween;\n var slidePosition = -offsetBefore;\n var prevSlideSize = 0;\n var index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween - offsetBefore - offsetAfter;\n\n // reset margins\n slides.forEach(function (slideEl) {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n // set cssMode offsets\n if (params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-slides-offset-before', \"\".concat(offsetBefore, \"px\"));\n setCSSProperty(wrapperEl, '--swiper-slides-offset-after', \"\".concat(offsetAfter, \"px\"));\n }\n var gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n var slideSize;\n var shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(function (key) {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (var i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n var _slide = slides[i];\n if (_slide) {\n if (gridEnabled) {\n swiper.grid.updateSlide(i, _slide, slides);\n }\n if (elementStyle(_slide, 'display') === 'none') continue; // eslint-disable-line\n }\n if (isVirtual && params.slidesPerView === 'auto') {\n if (params.virtual.slidesPerViewAutoSlideSize) {\n slideSize = params.virtual.slidesPerViewAutoSlideSize;\n }\n if (slideSize && _slide) {\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n _slide.style[swiper.getDirectionLabel('width')] = \"\".concat(slideSize, \"px\");\n }\n } else if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n _slide.style[swiper.getDirectionLabel('width')] = \"\";\n }\n var slideStyles = getComputedStyle(_slide);\n var currentTransform = _slide.style.transform;\n var currentWebKitTransform = _slide.style.webkitTransform;\n if (currentTransform) {\n _slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n _slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(_slide, 'width', true) : elementOuterSize(_slide, 'height', true);\n } else {\n // eslint-disable-next-line\n var width = getDirectionPropertyValue(slideStyles, 'width');\n var paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n var paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n var marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n var marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n var boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n var clientWidth = _slide.clientWidth,\n offsetWidth = _slide.offsetWidth;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n _slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n _slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (_slide) {\n _slide.style[swiper.getDirectionLabel('width')] = \"\".concat(slideSize, \"px\");\n }\n }\n if (_slide) {\n _slide.swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = \"\".concat(swiper.virtualSize + spaceBetween, \"px\");\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = \"\".concat(swiper.virtualSize + spaceBetween, \"px\");\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n // Check if snapToSlideEdge should be applied\n var isFractionalSlidesPerView = params.slidesPerView !== 'auto' && params.slidesPerView % 1 !== 0;\n var shouldSnapToSlideEdge = params.snapToSlideEdge && !params.loop && (params.slidesPerView === 'auto' || isFractionalSlidesPerView);\n\n // Calculate the last allowed snap index when snapToSlideEdge is enabled\n // This ensures minimum slides are visible at the end\n var lastAllowedSnapIndex = snapGrid.length;\n if (shouldSnapToSlideEdge) {\n var minVisibleSlides;\n if (params.slidesPerView === 'auto') {\n // For 'auto' mode, calculate how many slides fit based on actual sizes\n minVisibleSlides = 1;\n var accumulatedSize = 0;\n for (var _i = slidesSizesGrid.length - 1; _i >= 0; _i -= 1) {\n accumulatedSize += slidesSizesGrid[_i] + (_i < slidesSizesGrid.length - 1 ? spaceBetween : 0);\n if (accumulatedSize <= swiperSize) {\n minVisibleSlides = slidesSizesGrid.length - _i;\n } else {\n break;\n }\n }\n } else {\n minVisibleSlides = Math.floor(params.slidesPerView);\n }\n lastAllowedSnapIndex = Math.max(slidesLength - minVisibleSlides, 0);\n }\n var newSlidesGrid = [];\n for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {\n var slidesGridItem = snapGrid[_i2];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (shouldSnapToSlideEdge) {\n // When snapToSlideEdge is enabled, only keep snaps up to lastAllowedSnapIndex\n if (_i2 <= lastAllowedSnapIndex) {\n newSlidesGrid.push(slidesGridItem);\n }\n }
1 else if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {\n // When snapToSlideEdge is disabled, keep snaps that fit within scrollable area\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n // Only add edge-aligned snap if snapToSlideEdge is not enabled\n if (!shouldSnapToSlideEdge) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n }\n if (isVirtual && params.loop) {\n var size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n var groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n var groupSize = size * params.slidesPerGroup;\n for (var _i3 = 0; _i3 < groups; _i3 += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (var _i4 = 0; _i4 < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; _i4 += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n var key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter(function (_, slideIndex) {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }
1).forEach(function (slideEl) {\n slideEl.style[key] = \"\".concat(spaceBetween, \"px\");\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n var allSlidesSize = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n var maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n snapGrid = snapGrid.map(function (snap) {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n var _allSlidesSize = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n _allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n _allSlidesSize -= spaceBetween;\n if (_allSlidesSize < swiperSize) {\n var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;\n snapGrid.forEach(function (snap, snapIndex) {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach(function (snap, snapIndex) {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides: slides,\n snapGrid: snapGrid,\n slidesGrid: slidesGrid,\n slidesSizesGrid: slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', \"\".concat(-snapGrid[0], \"px\"));\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', \"\".concat(swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2, \"px\"));\n var addToSnapGrid = -swiper.snapGrid[0];\n var addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(function (v) {\n return v + addToSnapGrid;\n });\n swiper.slidesGrid = swiper.slidesGrid.map(function (v) {\n return v + addToSlidesGrid;\n });\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n var backFaceHiddenClass = \"\".concat(params.containerModifierClass, \"backface-hidden\");\n var hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\nfunction updateAutoHeight(speed) {\n var swiper = this;\n var activeSlides = [];\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n var newHeight = 0;\n var i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n var getSlideByIndex = function getSlideByIndex(index) {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(function (slide) {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n var index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = \"\".concat(newHeight, \"px\");\n}\nfunction updateSlidesOffset() {\n var swiper = this;\n var slides = swiper.slides;\n // eslint-disable-next-line\n var minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (var i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minu
1sOffset - swiper.cssOverflowAdjustment();\n }\n}\nvar toggleSlideClasses$1 = function toggleSlideClasses$1(slideEl, condition, className) {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress() {\n var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this && this.translate || 0;\n var swiper = this;\n var params = swiper.params;\n var slides = swiper.slides,\n rtl = swiper.rtlTranslate,\n snapGrid = swiper.snapGrid;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n var offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n var spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (var i = 0; i < slides.length; i += 1) {\n var _slide2 = slides[i];\n var slideOffset = _slide2.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (_slide2.swiperSlideSize + spaceBetween);\n var originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (_slide2.swiperSlideSize + spaceBetween);\n var slideBefore = -(offsetCenter - slideOffset);\n var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n var isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(_slide2);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(_slide2, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(_slide2, isFullyVisible, params.slideFullyVisibleClass);\n _slide2.progress = rtl ? -slideProgress : slideProgress;\n _slide2.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\nfunction updateProgress(translate) {\n var swiper = this;\n if (typeof translate === 'undefined') {\n var multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n var params = swiper.params;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n var progress = swiper.progress,\n isBeginning = swiper.isBeginning,\n isEnd = swiper.isEnd,\n progressLoop = swiper.progressLoop;\n var wasBeginning = isBeginning;\n var wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n var isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n var isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n var firstSlideIndex = swiper.getSlideIndexByData(0);\n var lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n var firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n var lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n var translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n var translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress: progress,\n progressLoop: progressLoop,\n isBeginning: isBeginning,\n isEnd: isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}
1\nvar toggleSlideClasses = function toggleSlideClasses(slideEl, condition, className) {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n var swiper = this;\n var slides = swiper.slides,\n params = swiper.params,\n slidesEl = swiper.slidesEl,\n activeIndex = swiper.activeIndex;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n var gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n var getFilteredSlide = function getFilteredSlide(selector) {\n return elementChildren(slidesEl, \".\".concat(params.slideClass).concat(selector, \", swiper-slide\").concat(selector))[0];\n };\n var activeSlide;\n var prevSlide;\n var nextSlide;\n if (isVirtual) {\n if (params.loop) {\n var slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(\"[data-swiper-slide-index=\\\"\".concat(slideIndex, \"\\\"]\"));\n } else {\n activeSlide = getFilteredSlide(\"[data-swiper-slide-index=\\\"\".concat(activeIndex, \"\\\"]\"));\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.find(function (slideEl) {\n return slideEl.column === activeIndex;\n });\n nextSlide = slides.find(function (slideEl) {\n return slideEl.column === activeIndex + 1;\n });\n prevSlide = slides.find(function (slideEl) {\n return slideEl.column === activeIndex - 1;\n });\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, \".\".concat(params.slideClass, \", swiper-slide\"))[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, \".\".concat(params.slideClass, \", swiper-slide\"))[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(function (slideEl) {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\nvar processLazyPreloader = function processLazyPreloader(swiper, imageEl) {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n var slideSelector = function slideSelector() {\n return swiper.isElement ? \"swiper-slide\" : \".\".concat(swiper.params.slideClass);\n };\n var slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n var lazyEl = slideEl.querySelector(\".\".concat(swiper.params.lazyPreloaderClass));\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(\".\".concat(swiper.params.lazyPreloaderClass));\n } else {\n // init later\n requestAnimationFrame(function () {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(\".\".concat(swiper.params.lazyPreloaderClass));\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n });\n }\n }\n // Skip removal if managed by React/Vue component\n if (lazyEl && !lazyEl.lazyPreloaderManaged) lazyEl.remove();\n }\n};\nvar unlazy = function unlazy(swiper, index) {\n if (!swiper.slides[index]) return;\n var imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nvar preload = function preload(swiper) {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n var amount = swiper.params.lazyPreloadPrevNext;\n var len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n var slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n var activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n var activeColumn = activeIndex;\n var preloadColumns = [activeColumn - amount];
1\n preloadColumns.push.apply(preloadColumns, (0,toConsumableArray/* default */.A)(Array.from({\n length: amount\n }).map(function (_, i) {\n return activeColumn + slidesPerView + i;\n })));\n swiper.slides.forEach(function (slideEl, i) {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n var slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (var i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n var realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (var _i5 = Math.max(activeIndex - amount, 0); _i5 <= Math.min(slideIndexLastInView + amount, len - 1); _i5 += 1) {\n if (_i5 !== activeIndex && (_i5 > slideIndexLastInView || _i5 < activeIndex)) {\n unlazy(swiper, _i5);\n }\n }\n }\n};\nfunction getActiveIndexByTranslate(swiper) {\n var slidesGrid = swiper.slidesGrid,\n params = swiper.params;\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n var activeIndex;\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n var swiper = this;\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n var snapGrid = swiper.snapGrid,\n params = swiper.params,\n previousIndex = swiper.activeIndex,\n previousRealIndex = swiper.realIndex,\n previousSnapIndex = swiper.snapIndex;\n var activeIndex = newActiveIndex;\n var snapIndex;\n var getVirtualRealIndex = function getVirtualRealIndex(aIndex) {\n var realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n var skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n var gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n var realIndex;\n if (swiper.virtual && params.virtual.enabled) {\n if (params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else {\n realIndex = activeIndex;\n }\n } else if (gridEnabled) {\n var firstSlideInColumn = swiper.slides.find(function (slideEl) {\n return slideEl.column === activeIndex;\n });\n var activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n var slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex: previousSnapIndex,\n snapIndex: snap
1Index,\n previousRealIndex: previousRealIndex,\n realIndex: realIndex,\n previousIndex: previousIndex,\n activeIndex: activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\nfunction updateClickedSlide(el, path) {\n var swiper = this;\n var params = swiper.params;\n var slide = el.closest(\".\".concat(params.slideClass, \", swiper-slide\"));\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n (0,toConsumableArray/* default */.A)(path.slice(path.indexOf(el) + 1, path.length)).forEach(function (pathEl) {\n if (!slide && pathEl.matches && pathEl.matches(\".\".concat(params.slideClass, \", swiper-slide\"))) {\n slide = pathEl;\n }\n });\n }\n var slideFound = false;\n var slideIndex;\n if (slide) {\n for (var i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\nvar update = {\n updateSize: updateSize,\n updateSlides: updateSlides,\n updateAutoHeight: updateAutoHeight,\n updateSlidesOffset: updateSlidesOffset,\n updateSlidesProgress: updateSlidesProgress,\n updateProgress: updateProgress,\n updateSlidesClasses: updateSlidesClasses,\n updateActiveIndex: updateActiveIndex,\n updateClickedSlide: updateClickedSlide\n};\nfunction getSwiperTranslate() {\n var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.isHorizontal() ? 'x' : 'y';\n var swiper = this;\n var params = swiper.params,\n rtl = swiper.rtlTranslate,\n translate = swiper.translate,\n wrapperEl = swiper.wrapperEl;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n var currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\nfunction setTranslate(translate, byController) {\n var swiper = this;\n var rtl = swiper.rtlTranslate,\n params = swiper.params,\n wrapperEl = swiper.wrapperEl,\n progress = swiper.progress;\n var x = 0;\n var y = 0;\n var z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = \"translate3d(\".concat(x, \"px, \").concat(y, \"px, \").concat(z, \"px)\");\n }\n\n // Check if we need to update progress\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\nfunction translateTo() {\n var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;\n var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var translateBounds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n var internal = arguments.length > 4 ? arguments[4] : undefined;\n var swiper = this;\n var params = swiper.params,\n wrapperEl = swiper.wrapperEl;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n var minTranslate = swiper.minTranslate();\n var maxTranslate = swiper.maxTranslate();\n var newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n var isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper: swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo((0,defineProperty/* default */.A)((0,defineProperty/* default */.A)({}, isH ? 'left' : 'top', -newTranslate), \"behavior\", 'smooth'));\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate: setTranslate,\n minTranslate: minTranslate,\n maxTranslate: maxTranslate,\n translateTo: translateTo\n};\nfunction setTransition(duration, byController) {\n var swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = \"\".concat(duration, \"ms\");\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? \"0ms\" : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\nfunction transitionEmit(_ref5) {\n var swiper = _ref5.swiper,\n runCallbacks = _ref5.runCallbacks,\n direction = _ref5.direction,\n step = _ref5.step;\n var activeIndex = swiper.activeIndex,\n previousIndex = swiper.previousIndex;\n var dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(\"transition\".concat(step));\n if (runCallbacks && dir === 'reset') {\n swiper.emit(\"slideResetTransition\".concat(step));\n } else if (runCallbacks && activeIndex !== previousIndex) {\n swiper.emit(\"slideChangeTransition\".concat(step));\n if (dir === 'next') {\n swiper.emit(\"slideNextTransition\".concat(step));\n } else {\n swiper.emit(\"slidePrevTransition\".concat(step));\n }\n }\n}\nfunction transitionStart() {\n var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var direction = arguments.length > 1 ? arguments[1] : undefined;\n var swiper = this;\n var params = swiper.params;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper: swiper,\n runCallbacks: runCallbacks,\n direction: direction,\n step: 'Start'\n });\n}\nfunction transitionEnd() {\n var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var direction = arguments.length > 1 ? arguments[1] : undefined;\n var swiper = this;\n var params = swiper.params;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper: swiper,\n runCallbacks: runCallbacks,\n direction: direction,\n step: 'End'\n });\n}\nvar transition = {\n setTransition: setTransition,\n transitionStart: transitionStart,\n transitionEnd: transitionEnd\n};
1\nfunction slideTo() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 ? arguments[1] : undefined;\n var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var internal = arguments.length > 3 ? arguments[3] : undefined;\n var initial = arguments.length > 4 ? arguments[4] : undefined;\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n var swiper = this;\n var slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n var params = swiper.params,\n snapGrid = swiper.snapGrid,\n slidesGrid = swiper.slidesGrid,\n previousIndex = swiper.previousIndex,\n activeIndex = swiper.activeIndex,\n rtl = swiper.rtlTranslate,\n wrapperEl = swiper.wrapperEl,\n enabled = swiper.enabled;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n var translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n var normalizedTranslate = -Math.floor(translate * 100);\n var normalizedGrid = Math.floor(slidesGrid[i] * 100);\n var normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n var direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // initial virtual\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n var isInitialVirtual = isVirtual && initial;\n // Update Index\n if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n var isH = swiper.isHorizontal();\n var t = rtl ? translate : -translate;\n if (speed === 0) {\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(function () {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(function () {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper: swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo((0,defineProperty/* default */.A)((0,defineProperty/* default */.A)({}, isH ? 'left' : 'top', t), \"behavior\", 'smooth'));\n }\n return true;\n }\n var browser = getBrowser();\n var isSafari = browser.isSafari;\n if (isVirtual && !initial && isSafari && swiper.isElement) {\n swiper.virtual.update(false, false, slideIndex);\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\nfunction slideToLoop() {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var speed = arguments.length > 1 ? arguments[1] : undefined;\n var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var internal = arguments.length > 3 ? arguments[3] : undefined;\n if (typeof index === 'string') {\n var indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n var swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n var gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n var newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n var targetSlideIndex;\n if (gridEnabled) {\n var slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.find(function (slideEl) {\n return slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex;\n }).column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n var cols = gridEnabled ? Math.ceil(swiper.slides.length /
1swiper.params.grid.rows) : swiper.slides.length;\n var _swiper$params = swiper.params,\n centeredSlides = _swiper$params.centeredSlides,\n slidesOffsetBefore = _swiper$params.slidesOffsetBefore,\n slidesOffsetAfter = _swiper$params.slidesOffsetAfter;\n var bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n var slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n var needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (bothDirections) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && bothDirections && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n var direction = bothDirections ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction: direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n var _slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.find(function (slideEl) {\n return slideEl.getAttribute('data-swiper-slide-index') * 1 === _slideIndex;\n }).column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(function () {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed) {\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var swiper = this;\n var enabled = swiper.enabled,\n params = swiper.params,\n animating = swiper.animating;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n var perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(function () {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed) {\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var swiper = this;\n var params = swiper.params,\n snapGrid = swiper.snapGrid,\n slidesGrid = swiper.slidesGrid,\n rtlTranslate = swiper.rtlTranslate,\n enabled = swiper.enabled,\n animating = swiper.animating;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n var isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }
1\n var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n var normalizedTranslate = normalize(translate);\n var normalizedSnapGrid = snapGrid.map(function (val) {\n return normalize(val);\n });\n var isFreeMode = params.freeMode && params.freeMode.enabled;\n var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {\n var prevSnapIndex;\n snapGrid.forEach(function (snap, snapIndex) {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n var prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n var lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(function () {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed) {\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed) {\n var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var internal = arguments.length > 2 ? arguments[2] : undefined;\n var threshold = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5;\n var swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n var index = swiper.activeIndex;\n var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n var currentSnap = swiper.snapGrid[snapIndex];\n var nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n var prevSnap = swiper.snapGrid[snapIndex - 1];\n var _currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\nfunction slideToClickedSlide() {\n var swiper = this;\n if (swiper.destroyed) return;\n var params = swiper.params,\n slidesEl = swiper.slidesEl;\n var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n var slideToIndex = swiper.getSlideIndexWhenGrid(swiper.clickedIndex);\n var realIndex;\n var slideSelector = swiper.isElement ? \"swiper-slide\" : \".\".concat(params.slideClass);\n var isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n swiper.slideToLoop(realIndex);\n } else if (slideToIndex >
1 (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : swiper.slides.length - slidesPerView)) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, \"\".concat(slideSelector, \"[data-swiper-slide-index=\\\"\").concat(realIndex, \"\\\"]\"))[0]);\n nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\nvar slide = {\n slideTo: slideTo,\n slideToLoop: slideToLoop,\n slideNext: slideNext,\n slidePrev: slidePrev,\n slideReset: slideReset,\n slideToClosest: slideToClosest,\n slideToClickedSlide: slideToClickedSlide\n};\nfunction loopCreate(slideRealIndex, initial) {\n var swiper = this;\n var params = swiper.params,\n slidesEl = swiper.slidesEl;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n var initSlides = function initSlides() {\n var slides = elementChildren(slidesEl, \".\".concat(params.slideClass, \", swiper-slide\"));\n slides.forEach(function (el, index) {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n var clearBlankSlides = function clearBlankSlides() {\n var slides = elementChildren(slidesEl, \".\".concat(params.slideBlankClass));\n slides.forEach(function (el) {\n el.remove();\n });\n if (slides.length > 0) {\n swiper.recalcSlides();\n swiper.updateSlides();\n }\n };\n var gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {\n clearBlankSlides();\n }\n var slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n var shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n var shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n var addBlankSlides = function addBlankSlides(amountOfSlides) {\n for (var i = 0; i < amountOfSlides; i += 1) {\n var slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n var slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n var _slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(_slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n var bothDirections = params.centeredSlides || !!params.slidesOffsetBefore || !!params.slidesOffsetAfter;\n swiper.loopFix({\n slideRealIndex: slideRealIndex,\n direction: bothDirections ? undefined : 'next',\n initial: initial\n });\n}\nfunction loopFix() {\n var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n slideRealIndex = _ref6.slideRealIndex,\n _ref6$slideTo = _ref6.slideTo,\n slideTo = _ref6$slideTo === void 0 ? true : _ref6$slideTo,\n direction = _ref6.direction,\n setTranslate = _ref6.setTranslate,\n activeSlideIndex = _ref6.activeSlideIndex,\n initial = _ref6.initial,\n byController = _ref6.byController,\n byMousewheel = _ref6.byMousewheel;\n var swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n var slides = swiper.slides,\n allowSlidePrev = swiper.allowSlidePrev,\n allowSlideNext = swiper.allowSlideNext,\n slidesEl = swiper.slidesEl,\n params = swiper.params;\n var centeredSlides = params.centeredSlides,\n slidesOffsetBefore = params.slidesOffsetBefore,\n slidesOffsetAfter = params.slidesOffsetAfter,\n initialSlide = params.initialSlide;\n var bothDirections = centeredSlides || !!slidesOffsetBefore || !!slidesOffsetAfter;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!bothDirections && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (bothDirections && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n var slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (bothDirections && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n var slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n var loopedSlides = bothDirections ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n var gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n var prependSlidesIndexes = [];\n var appendSlidesIndexes = [];\n var cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n var isInitialOverflow = initial && cols - initialSlide < slidesPerView && !bothDirections;\n var activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.find(function (el) {\n return el.classList.contains(params.slideActiveClass);\n }));\n } else {\n activeIndex = activeSlideIndex;\n }\n var isNext = direction === 'next' || !direction;\n var isPrev = direction === 'prev' || !direction;\n var slidesPrepended = 0;\n var slidesAppended = 0;\n var activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n var activeColIndexWithShift = activeColIndex + (bothDirections && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (var i = 0; i < loopedSlides - activeColIndexWithShift;
1 i += 1) {\n var index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n var colIndexToPrepend = cols - index - 1;\n for (var _i6 = slides.length - 1; _i6 >= 0; _i6 -= 1) {\n if (slides[_i6].column === colIndexToPrepend) prependSlidesIndexes.push(_i6);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n if (isInitialOverflow) {\n slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);\n }\n var _loop = function _loop() {\n var index = _i7 - Math.floor(_i7 / cols) * cols;\n if (gridEnabled) {\n slides.forEach(function (slide, slideIndex) {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n };\n for (var _i7 = 0; _i7 < slidesAppended; _i7 += 1) {\n _loop();\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(function () {\n swiper.__preventObserver__ = false;\n });\n if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {\n if (appendSlidesIndexes.includes(activeSlideIndex)) {\n appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n if (prependSlidesIndexes.includes(activeSlideIndex)) {\n prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(function (index) {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(function (index) {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach(function (slide, slideIndex) {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n var currentSlideTranslate = swiper.slidesGrid[activeIndex];\n var newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n var diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n var shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n var _currentSlideTranslate = swiper.slidesGrid[activeIndex];\n var _newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n var _diff = _newSlideTranslate - _currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - _diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - _diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - _diff;\n }\n }\n } else {\n var _shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - _shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n var loopParams = {\n slideRealIndex: slideRealIndex,\n direction: direction,\n setTranslate: setTranslate,\n activeSlideIndex: activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(function (c) {\n if (!c.destroyed && c.params.loop) c.loopFix(_objectSpread(_objectSpread({}, loopParams), {}, {\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n }));\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix(_objectSpread(_objectSpread({}, loopParams), {}, {\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n }));\n }\n }\n swiper.emit('loopFix');\n}\nfunction loopDestroy() {\n var swiper = this;\n var params = swiper.params,\n slidesEl = swiper.slidesEl;\n if (!params.loop || !slidesEl || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n var newSlidesOrder = [];
1\n swiper.slides.forEach(function (slideEl) {\n var index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(function (slideEl) {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(function (slideEl) {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\nvar loop = {\n loopCreate: loopCreate,\n loopFix: loopFix,\n loopDestroy: loopDestroy\n};\nfunction setGrabCursor(moving) {\n var swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n var el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(function () {\n swiper.__preventObserver__ = false;\n });\n }\n}\nfunction unsetGrabCursor() {\n var swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(function () {\n swiper.__preventObserver__ = false;\n });\n }\n}\nvar grabCursor = {\n setGrabCursor: setGrabCursor,\n unsetGrabCursor: unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector) {\n var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this;\n function __closestFrom(el) {\n if (!el || el === ssr_window_esm_getDocument() || el === ssr_window_esm_getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n var found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n var window = ssr_window_esm_getWindow();\n var params = swiper.params;\n var edgeSwipeDetection = params.edgeSwipeDetection;\n var edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n var swiper = this;\n var document = ssr_window_esm_getDocument();\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n var data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n var params = swiper.params,\n touches = swiper.touches,\n enabled = swiper.enabled;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n var targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n var swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n var eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n var noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : \".\".concat(params.noSwipingClass);\n var isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n var startX = touches.currentX;\n var startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;
1\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n var preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n document.activeElement.blur();\n }\n var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\nfunction onTouchMove(event) {\n var document = ssr_window_esm_getDocument();\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtlTranslate,\n enabled = swiper.enabled;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n var id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n var targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = (0,toConsumableArray/* default */.A)(e.changedTouches).find(function (t) {\n return t.identifier === data.touchId;\n });\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n var pageX = targetTouch.pageX;\n var pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {\n return;\n } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {\n return;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n document.activeElement.blur();\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n var diffX = touches.currentX - touches.startX;\n var diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n var touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n var diff = swiper.isHorizontal() ? diffX : diffY;\n var touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n var prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n var isLoop = swiper.params.loop && !params.cssMode;\n var allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n var evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });
1\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n var loopFixed;\n new Date().getTime();\n if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n var disableParentSwiper = true;\n var resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\nfunction onTouchEnd(event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n var targetTouch;\n var isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;
1\n } else {\n targetTouch = (0,toConsumableArray/* default */.A)(e.changedTouches).find(function (t) {\n return t.identifier === data.touchId;\n });\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n var proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtlTranslate,\n slidesGrid = swiper.slidesGrid,\n enabled = swiper.enabled;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n var touchEndTime = now();\n var timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n var pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(function () {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n var currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos: currentPos\n });\n return;\n }\n\n // Find current slide\n var swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n var stopIndex = 0;\n var groupSize = swiper.slidesSizesGrid[0];\n for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + _increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + _increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n var rewindFirstIndex = null;\n var rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\nfunction onResize() {\n var swiper = this;\n var params = swiper.params,\n el = swiper.el;\n if (el && el.offsetWidth === 0) return;
1\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n var allowSlideNext = swiper.allowSlideNext,\n allowSlidePrev = swiper.allowSlidePrev,\n snapGrid = swiper.snapGrid;\n var isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n var isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(function () {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\nfunction onClick(e) {\n var swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\nfunction onScroll() {\n var swiper = this;\n var wrapperEl = swiper.wrapperEl,\n rtlTranslate = swiper.rtlTranslate,\n enabled = swiper.enabled;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\nfunction onLoad(e) {\n var swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\nfunction onDocumentTouchStart() {\n var swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\nvar events = function events(swiper, method) {\n var document = ssr_window_esm_getDocument();\n var params = swiper.params,\n el = swiper.el,\n wrapperEl = swiper.wrapperEl,\n device = swiper.device;\n var capture = !!params.nested;\n var domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n var swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture: capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture: capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture: capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n var swiper = this;\n var params = swiper.params;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n var swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents: attachEvents,\n detachEvents: detachEvents\n};\nvar isGridEnabled = function isGridEnabled(swiper, params) {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n var swiper = this;\n var realIndex = swiper.realIndex,\n initialized = swiper.initialized,\n params = swiper.params,\n el = swiper.el;\n var breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n var document = ssr_window_esm_getDocument();\n\n // Get breakpoint for window/container width and update parameters\n var breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';\n var breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);
1\n var breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n var wasMultiRow = isGridEnabled(swiper, params);\n var isMultiRow = isGridEnabled(swiper, breakpointParams);\n var wasGrabCursor = swiper.params.grabCursor;\n var isGrabCursor = breakpointParams.grabCursor;\n var wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(\"\".concat(params.containerModifierClass, \"grid\"), \"\".concat(params.containerModifierClass, \"grid-column\"));\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(\"\".concat(params.containerModifierClass, \"grid\"));\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(\"\".concat(params.containerModifierClass, \"grid-column\"));\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(function (prop) {\n if (typeof breakpointParams[prop] === 'undefined') return;\n var wasModuleEnabled = params[prop] && params[prop].enabled;\n var isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n var wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n utils_extend(swiper.params, breakpointParams);\n var isEnabled = swiper.params.enabled;\n var hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\nfunction getBreakpoint(breakpoints) {\n var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'window';\n var containerEl = arguments.length > 2 ? arguments[2] : undefined;\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n var breakpoint = false;\n var window = ssr_window_esm_getWindow();\n var currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n var points = Object.keys(breakpoints).map(function (point) {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n var minRatio = parseFloat(point.substr(1));\n var value = currentHeight * minRatio;\n return {\n value: value,\n point: point\n };\n }\n return {\n value: point,\n point: point\n };\n });\n points.sort(function (a, b) {\n return parseInt(a.value, 10) - parseInt(b.value, 10);\n });\n for (var i = 0; i < points.length; i += 1) {\n var _points$i = points[i],\n point = _points$i.point,\n value = _points$i.value;\n if (base === 'window') {\n if (window.matchMedia(\"(min-width: \".concat(value, \"px)\")).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\nvar breakpoints = {\n setBreakpoint: setBreakpoint,\n getBreakp
1oint: getBreakpoint\n};\nfunction prepareClasses(entries, prefix) {\n var resultClasses = [];\n entries.forEach(function (item) {\n if (typeof item === 'object') {\n Object.keys(item).forEach(function (classNames) {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n var _el$classList;\n var swiper = this;\n var classNames = swiper.classNames,\n params = swiper.params,\n rtl = swiper.rtl,\n el = swiper.el,\n device = swiper.device;\n // prettier-ignore\n var suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push.apply(classNames, (0,toConsumableArray/* default */.A)(suffixes));\n (_el$classList = el.classList).add.apply(_el$classList, (0,toConsumableArray/* default */.A)(classNames));\n swiper.emitContainerClasses();\n}\nfunction removeClasses() {\n var _el$classList2;\n var swiper = this;\n var el = swiper.el,\n classNames = swiper.classNames;\n if (!el || typeof el === 'string') return;\n (_el$classList2 = el.classList).remove.apply(_el$classList2, (0,toConsumableArray/* default */.A)(classNames));\n swiper.emitContainerClasses();\n}\nvar classes = {\n addClasses: addClasses,\n removeClasses: removeClasses\n};\nfunction checkOverflow() {\n var swiper = this;\n var wasLocked = swiper.isLocked,\n params = swiper.params;\n var slidesOffsetBefore = params.slidesOffsetBefore;\n if (slidesOffsetBefore) {\n var lastSlideIndex = swiper.slides.length - 1;\n var lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow: checkOverflow\n};\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesB
1ounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n snapToSlideEdge: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var moduleParamName = Object.keys(obj)[0];\n var moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n utils_extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n utils_extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n utils_extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nvar prototypes = {\n eventsEmitter: eventsEmitter,\n update: update,\n translate: translate,\n transition: transition,\n slide: slide,\n loop: loop,\n grabCursor: grabCursor,\n events: events$1,\n breakpoints: breakpoints,\n checkOverflow: checkOverflow$1,\n classes: classes\n};\nvar extendedDefaults = {};\nvar Swiper = /*#__PURE__*/function () {\n function Swiper() {\n (0,classCallCheck/* default */.A)(this, Swiper);\n var el;\n var params;\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }
1\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n el = args[0];\n params = args[1];\n }\n if (!params) params = {};\n params = utils_extend({}, params);\n if (el && !params.el) params.el = el;\n var document = ssr_window_esm_getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n var swipers = [];\n document.querySelectorAll(params.el).forEach(function (containerEl) {\n var newParams = utils_extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n var swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = (0,toConsumableArray/* default */.A)(swiper.__modules__);\n if (params.modules && Array.isArray(params.modules)) {\n params.modules.forEach(function (mod) {\n if (typeof mod === 'function' && swiper.modules.indexOf(mod) < 0) {\n swiper.modules.push(mod);\n }\n });\n }\n var allModulesParams = {};\n swiper.modules.forEach(function (mod) {\n mod({\n params: params,\n swiper: swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n var swiperParams = utils_extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = utils_extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = utils_extend({}, swiper.params);\n swiper.passedParams = utils_extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEac
1h(function (eventName) {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el: el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal: function isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical: function isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment: function cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / Math.pow(2, 23)) * Math.pow(2, 23);\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n return (0,createClass/* default */.A)(Swiper, [{\n key: \"getDirectionLabel\",\n value: function getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n }, {\n key: \"getSlideIndex\",\n value: function getSlideIndex(slideEl) {\n var slidesEl = this.slidesEl,\n params = this.params;\n var slides = elementChildren(slidesEl, \".\".concat(params.slideClass, \", swiper-slide\"));\n var firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n }, {\n key: \"getSlideIndexByData\",\n value: function getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.find(function (slideEl) {\n return slideEl.getAttribute('data-swiper-slide-index') * 1 === index;\n }));\n }\n }, {\n key: \"getSlideIndexWhenGrid\",\n value: function getSlideIndexWhenGrid(index) {\n if (this.grid && this.params.grid && this.params.grid.rows > 1) {\n if (this.params.grid.fill === 'column') {\n index = Math.floor(index / this.params.grid.rows);\n } else if (this.params.grid.fill === 'row') {\n index = index % Math.
1ceil(this.slides.length / this.params.grid.rows);\n }\n }\n return index;\n }\n }, {\n key: \"recalcSlides\",\n value: function recalcSlides() {\n var swiper = this;\n var slidesEl = swiper.slidesEl,\n params = swiper.params;\n swiper.slides = elementChildren(slidesEl, \".\".concat(params.slideClass, \", swiper-slide\"));\n }\n }, {\n key: \"enable\",\n value: function enable() {\n var swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n }, {\n key: \"disable\",\n value: function disable() {\n var swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n }, {\n key: \"setProgress\",\n value: function setProgress(progress, speed) {\n var swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n var min = swiper.minTranslate();\n var max = swiper.maxTranslate();\n var current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }, {\n key: \"emitContainerClasses\",\n value: function emitContainerClasses() {\n var swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n var cls = swiper.el.className.split(' ').filter(function (className) {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n }, {\n key: \"getSlideClasses\",\n value: function getSlideClasses(slideEl) {\n var swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(function (className) {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n }, {\n key: \"emitSlidesClasses\",\n value: function emitSlidesClasses() {\n var swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n var updates = [];\n swiper.slides.forEach(function (slideEl) {\n var classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl: slideEl,\n classNames: classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n }, {\n key: \"slidesPerViewDynamic\",\n value: function slidesPerViewDynamic() {\n var view = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'current';\n var exact = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var swiper = this;\n var params = swiper.params,\n slides = swiper.slides,\n slidesGrid = swiper.slidesGrid,\n slidesSizesGrid = swiper.slidesSizesGrid,\n swiperSize = swiper.size,\n activeIndex = swiper.activeIndex;\n var spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n var slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n var breakLoop;\n for (var i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (var _i8 = activeIndex - 1; _i8 >= 0; _i8 -= 1) {\n if (slides[_i8] && !breakLoop) {\n slideSize += slides[_i8].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (var _i9 = activeIndex + 1; _i9 < slides.length; _i9 += 1) {\n var slideInView = exact ? slidesGrid[_i9] + slidesSizesGrid[_i9] - slidesGrid[activeIndex] < swiperSize : slidesGrid[_i9] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (var _i0 = activeIndex - 1; _i0 >= 0; _i0 -= 1) {\n var _slideInView = slidesGrid[activeIndex] - slidesGrid[_i0] < swiperSize;\n if (_slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n }
1, {\n key: \"update\",\n value: function update() {\n var swiper = this;\n if (!swiper || swiper.destroyed) return;\n var snapGrid = swiper.snapGrid,\n params = swiper.params;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n (0,toConsumableArray/* default */.A)(swiper.el.querySelectorAll('[loading=\"lazy\"]')).forEach(function (imageEl) {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n var translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n var slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n }, {\n key: \"changeDirection\",\n value: function changeDirection(newDirection) {\n var needUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var swiper = this;\n var currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(\"\".concat(swiper.params.containerModifierClass).concat(currentDirection));\n swiper.el.classList.add(\"\".concat(swiper.params.containerModifierClass).concat(newDirection));\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(function (slideEl) {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n }, {\n key: \"changeLanguageDirection\",\n value: function changeLanguageDirection(direction) {\n var swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(\"\".concat(swiper.params.containerModifierClass, \"rtl\"));\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(\"\".concat(swiper.params.containerModifierClass, \"rtl\"));\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n }, {\n key: \"mount\",\n value: function mount(element) {\n var swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n var el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n var getWrapperSelector = function getWrapperSelector() {\n return \".\".concat((swiper.params.wrapperClass || '').trim().split(' ').join('.'));\n };\n var getWrapper = function getWrapper() {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n var res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n var wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, \".\".concat(swiper.params.slideClass)).forEac
1h(function (slideEl) {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el: el,\n wrapperEl: wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n }, {\n key: \"init\",\n value: function init(el) {\n var swiper = this;\n if (swiper.initialized) return swiper;\n var mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate(undefined, true);\n }\n\n // Attach events\n swiper.attachEvents();\n var lazyElements = (0,toConsumableArray/* default */.A)(swiper.el.querySelectorAll('[loading=\"lazy\"]'));\n if (swiper.isElement) {\n lazyElements.push.apply(lazyElements, (0,toConsumableArray/* default */.A)(swiper.hostEl.querySelectorAll('[loading=\"lazy\"]')));\n }\n lazyElements.forEach(function (imageEl) {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', function (e) {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var deleteInstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var cleanStyles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var swiper = this;\n var params = swiper.params,\n el = swiper.el,\n wrapperEl = swiper.wrapperEl,\n slides = swiper.slides;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(function (slideEl) {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEac
1h(function (eventName) {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n }], [{\n key: \"extendDefaults\",\n value: function extendDefaults(newDefaults) {\n utils_extend(extendedDefaults, newDefaults);\n }\n }, {\n key: \"extendedDefaults\",\n get: function get() {\n return extendedDefaults;\n }\n }, {\n key: \"defaults\",\n get: function get() {\n return defaults;\n }\n }, {\n key: \"installModule\",\n value: function installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n var modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n }, {\n key: \"use\",\n value: function use(module) {\n if (Array.isArray(module)) {\n module.forEach(function (m) {\n return Swiper.installModule(m);\n });\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n }]);\n}();\nObject.keys(prototypes).forEach(function (prototypeGroup) {\n Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\n;// ./node_modules/swiper/shared/update-swiper.mjs\n\n\n/* underscore in name -> watch for changes */\nvar paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'swiperElementNodeName', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_snapToSlideEdge', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\nfunction update_swiper_isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction update_swiper_extend(target, src) {\n var noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(function (key) {\n return noExtend.indexOf(key) < 0;\n }
1).forEach(function (key) {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (update_swiper_isObject(src[key]) && update_swiper_isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else update_swiper_extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses() {\n var classNames = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var classes = classNames.split(' ').map(function (c) {\n return c.trim();\n }).filter(function (c) {\n return !!c;\n });\n var unique = [];\n classes.forEach(function (c) {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp() {\n var attrName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return attrName.replace(/-[a-z]/g, function (l) {\n return l.toUpperCase().replace('-', '');\n });\n}\nfunction wrapperClass() {\n var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return \"swiper-wrapper \".concat(className);\n return className;\n}\nfunction updateSwiper(_ref) {\n var swiper = _ref.swiper,\n slides = _ref.slides,\n passedParams = _ref.passedParams,\n changedParams = _ref.changedParams,\n nextEl = _ref.nextEl,\n prevEl = _ref.prevEl,\n scrollbarEl = _ref.scrollbarEl,\n paginationEl = _ref.paginationEl;\n var updateParams = changedParams.filter(function (key) {\n return key !== 'children' && key !== 'direction' && key !== 'wrapperClass';\n });\n var currentParams = swiper.params,\n pagination = swiper.pagination,\n navigation = swiper.navigation,\n scrollbar = swiper.scrollbar,\n virtual = swiper.virtual,\n thumbs = swiper.thumbs;\n var needThumbsInit;\n var needControllerInit;\n var needPaginationInit;\n var needScrollbarInit;\n var needNavigationInit;\n var loopNeedDestroy;\n var loopNeedEnable;\n var loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && !passedParams.thumbs.swiper.destroyed && currentParams.thumbs && (!currentParams.thumbs.swiper || currentParams.thumbs.swiper.destroyed)) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n var destroyModule = function destroyModule(mod) {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }
1\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(function (key) {\n if (update_swiper_isObject(currentParams[key]) && update_swiper_isObject(passedParams[key])) {\n Object.assign(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n var newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {\n if (slides) virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n var initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n setInnerHTML(nextEl, swiper.navigation.arrowSvg);\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n setInnerHTML(prevEl, swiper.navigation.arrowSvg);\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }
1\n swiper.update();\n}\n\n;// ./node_modules/swiper/shared/update-on-virtual-data.mjs\n\n\nfunction getParams() {\n var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var splitEvents = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n var params = {\n on: {}\n };\n var events = {};\n var passedParams = {};\n update_swiper_extend(params, defaults);\n params._emitClasses = true;\n params.init = false;\n var rest = {};\n var allowedParams = paramsList.map(function (key) {\n return key.replace(/_/, '');\n });\n var plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(function (key) {\n if (typeof obj[key] === 'undefined') return;\n if (allowedParams.indexOf(key) >= 0) {\n if (update_swiper_isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n update_swiper_extend(params[key], obj[key]);\n update_swiper_extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[\"\".concat(key[2].toLowerCase()).concat(key.substr(3))] = obj[key];\n } else {\n params.on[\"\".concat(key[2].toLowerCase()).concat(key.substr(3))] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(function (key) {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params: params,\n passedParams: passedParams,\n rest: rest,\n events: events\n };\n}\nfunction mountSwiper(_ref, swiperParams) {\n var el = _ref.el,\n nextEl = _ref.nextEl,\n prevEl = _ref.prevEl,\n paginationEl = _ref.paginationEl,\n scrollbarEl = _ref.scrollbarEl,\n swiper = _ref.swiper;\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n swiper.init(el);\n}\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n var keys = [];\n if (!oldParams) return keys;\n var addKey = function addKey(key) {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n if (children && oldChildren) {\n var oldChildrenKeys = oldChildren.map(getKey);\n var childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n var watchParams = paramsList.filter(function (key) {\n return key[0] === '_';\n }).map(function (key) {\n return key.replace(/_/, '');\n });\n watchParams.forEach(function (key) {\n if (key in swiperParams && key in oldParams) {\n if (update_swiper_isObject(swiperParams[key]) && update_swiper_isObject(oldParams[key])) {\n var newKeys = Object.keys(swiperParams[key]);\n var oldKeys = Object.keys(oldParams[key]);\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(function (newKey) {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(function (oldKey) {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\nvar updateOnVirtualData = function updateOnVirtualData(swiper) {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n swiper.emit('_virtualUpdated');\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};\n\n;// ./node_modules/swiper/swiper-react.mjs\n\n\n\nvar _excluded = [\"className\", \"tag\", \"wrapperTag\", \"children\", \"onSwiper\"],\n _excluded2 = [\"tag\", \"children\", \"className\", \"swiper\", \"zoom\", \"lazy\", \"virtualIndex\", \"swiperSlideIndex\"];\nfunction swiper_react_ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction swiper_react_objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {};
1 r % 2 ? swiper_react_ownKeys(Object(t), !0).forEach(function (r) { (0,defineProperty/* default */.A)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : swiper_react_ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/**\n * Swiper React 12.1.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2026 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 13, 2026\n */\n\n\n\n\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\nfunction processChildren(c) {\n var slides = [];\n react.Children.toArray(c).forEach(function (child) {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(function (slide) {\n return slides.push(slide);\n });\n }\n });\n return slides;\n}\nfunction getChildren(c) {\n var slides = [];\n var slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n react.Children.toArray(c).forEach(function (child) {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n var foundSlides = processChildren(child.props.children);\n if (foundSlides.length > 0) {\n foundSlides.forEach(function (slide) {\n return slides.push(slide);\n });\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides: slides,\n slots: slots\n };\n}\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n var getSlideIndex = function getSlideIndex(index) {\n var slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n var style = swiper.isHorizontal() ? (0,defineProperty/* default */.A)({}, swiper.rtlTranslate ? 'right' : 'left', \"\".concat(virtualData.offset, \"px\")) : {\n top: \"\".concat(virtualData.offset, \"px\")\n };\n var from = virtualData.from,\n to = virtualData.to;\n var loopFrom = swiper.params.loop ? -slides.length : 0;\n var loopTo = swiper.params.loop ? slides.length * 2 : slides.length;\n var slidesToRender = [];\n for (var i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n slidesToRender.push(slides[getSlideIndex(i)]);\n }\n }\n return slidesToRender.map(function (child, index) {\n return /*#__PURE__*/react.cloneElement(child, {\n swiper: swiper,\n style: style,\n key: child.props.virtualIndex || child.key || \"slide-\".concat(index)\n });\n });\n}\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return (0,react.useEffect)(callback, deps);\n return (0,react.useLayoutEffect)(callback, deps);\n}\nvar SwiperSlideContext = /*#__PURE__*/(0,react.createContext)(null);\nvar useSwiperSlide = function useSwiperSlide() {\n return useContext(SwiperSlideContext);\n};\nvar SwiperContext = /*#__PURE__*/(0,react.createContext)(null);\nvar useSwiper = function useSwiper() {\n return useContext(SwiperContext);\n};\nvar swiper_react_Swiper = /*#__PURE__*/(0,react.forwardRef)(function () {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n className = _ref2.className,\n _ref2$tag = _ref2.tag,\n Tag = _ref2$tag === void 0 ? 'div' : _ref2$tag,\n _ref2$wrapperTag = _ref2.wrapperTag,\n WrapperTag = _ref2$wrapperTag === void 0 ? 'div' : _ref2$wrapperTag,\n children = _ref2.children,\n onSwiper = _ref2.onSwiper,\n rest = _objectWithoutProperties(_ref2, _excluded);\n var externalElRef = arguments.length > 1 ? arguments[1] : undefined;\n var eventsAssigned = false;\n var _useState = (0,react.useState)('swiper'),\n _useState2 = (0,slicedToArray/* default */.A)(_useState, 2),\n containerClasses = _useState2[0],\n setContainerClasses = _useState2[1];\n var _useState3 = (0,react.useState)(null),\n _useState4 = (0,slicedToArray/* default */.A)(_useState3, 2),\n virtualData = _useState4[0],\n setVirtualData = _useState4[1];\n var _useState5 = (0,react.useState)(false),\n _useState6 = (0,slicedToArray/* default */.A)(_useState5, 2),\n breakpointChanged = _useState6[0],\n setBreakpointChanged = _useState6[1];\n var initializedRef = (0,react.useRef)(false);\n var swiperElRef = (0,react.useRef)(null);\n var swiperRef = (0,react.useRef)(null);\n var oldPassedParamsRef = (0,react.useRef)(null);\n var oldSlides = (0,react.useRef)(null);\n var nextElRef = (0,react.useRef)(null);\n var prevElRef = (0,react.useRef)(null);\n var paginationElRef = (0,react.useRef)(null);\n var scrollbarElRef = (0,react.useRef)(null);\n var _getParams = getParams(rest),\n swiperParams = _getParams.params,\n passedParams = _getParams.passedParams,\n restProps = _getParams.rest,\n events = _getParams.events;\n var _getChildren = getChildren(children),\n slides = _getChildren.slides,\n slots = _getChildren.slots;\n var onBeforeBreakpoint = function onBeforeBreakpoint() {\n setBreakpointChanged(!breakpointChanged);\n };\n Object.assign(swiperParams.on, {\n _containerClasses: function _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n });\n var initSwiper = function initSwiper() {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n var passParams = swiper_react_objectSpread({}, swiperParams);\n delete passParams.wrapperClass;\n swiperRef.current = new Swiper(passParams);\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n var extendWith = {\n cache: false,\n slides: slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n update_swiper_extend(swiperRef.current.params.virtual, extendWith);\n update_swiper_extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n if (!swiperElRef.current) {\n initSwiper();\n }\n\n // Listen for breakpoints change\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n var attachEvents = function attachEvents() {\n if (eventsAssigned || !events || !swiperRef.current) return;
1\n Object.keys(events).forEach(function (eventName) {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n var detachEvents = function detachEvents() {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(function (eventName) {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n (0,react.useEffect)(function () {\n return function () {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n });\n\n // set initialized flag\n (0,react.useEffect)(function () {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n });\n\n // mount swiper\n useIsomorphicLayoutEffect(function () {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n if (!swiperElRef.current) return;\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper && !swiperRef.current.destroyed) onSwiper(swiperRef.current);\n // eslint-disable-next-line\n return function () {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []);\n\n // watch for params change\n useIsomorphicLayoutEffect(function () {\n attachEvents();\n var changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, function (c) {\n return c.key;\n });\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides: slides,\n passedParams: passedParams,\n changedParams: changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n return function () {\n detachEvents();\n };\n });\n\n // update on virtual update\n useIsomorphicLayoutEffect(function () {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]);
1\n\n // bypass swiper instance to slides\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n return slides.map(function (child, index) {\n return /*#__PURE__*/react.cloneElement(child, {\n swiper: swiperRef.current,\n swiperSlideIndex: index\n });\n });\n }\n return /*#__PURE__*/react.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(\"\".concat(containerClasses).concat(className ? \" \".concat(className) : ''))\n }, restProps), /*#__PURE__*/react.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/react.createElement(WrapperTag, {\n className: wrapperClass(swiperParams.wrapperClass)\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/react.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/react.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/react.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nswiper_react_Swiper.displayName = 'Swiper';\nvar SwiperSlide = /*#__PURE__*/(0,react.forwardRef)(function () {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$tag = _ref3.tag,\n Tag = _ref3$tag === void 0 ? 'div' : _ref3$tag,\n children = _ref3.children,\n _ref3$className = _ref3.className,\n className = _ref3$className === void 0 ? '' : _ref3$className,\n swiper = _ref3.swiper,\n zoom = _ref3.zoom,\n lazy = _ref3.lazy,\n virtualIndex = _ref3.virtualIndex,\n swiperSlideIndex = _ref3.swiperSlideIndex,\n rest = _objectWithoutProperties(_ref3, _excluded2);\n var externalRef = arguments.length > 1 ? arguments[1] : undefined;\n var slideElRef = (0,react.useRef)(null);\n var _useState7 = (0,react.useState)('swiper-slide'),\n _useState8 = (0,slicedToArray/* default */.A)(_useState7, 2),\n slideClasses = _useState8[0],\n setSlideClasses = _useState8[1];\n var _useState9 = (0,react.useState)(false),\n _useState0 = (0,slicedToArray/* default */.A)(_useState9, 2),\n lazyLoaded = _useState0[0],\n setLazyLoaded = _useState0[1];\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n useIsomorphicLayoutEffect(function () {\n if (typeof swiperSlideIndex !== 'undefined') {\n slideElRef.current.swiperSlideIndex = swiperSlideIndex;\n }\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n if (!slideElRef.current || !swiper) {\n return;\n }\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n return;\n }\n swiper.on('_slideClass', updateClasses);\n // eslint-disable-next-line\n return function () {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(function () {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n var slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0\n };\n var renderChildren = function renderChildren() {\n return typeof children === 'function' ? children(slideData) : children;\n };
1\n var onLoad = function onLoad() {\n setLazyLoaded(true);\n };\n return /*#__PURE__*/react.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(\"\".concat(slideClasses).concat(className ? \" \".concat(className) : '')),\n \"data-swiper-slide-index\": virtualIndex,\n onLoad: onLoad\n }, rest), zoom && /*#__PURE__*/react.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, /*#__PURE__*/react.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/react.createElement(\"div\", {\n className: \"swiper-lazy-preloader\",\n ref: function ref(node) {\n if (node) node.lazyPreloaderManaged = true;\n }\n }))), !zoom && /*#__PURE__*/react.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/react.createElement(\"div\", {\n className: \"swiper-lazy-preloader\",\n ref: function ref(node) {\n if (node) node.lazyPreloaderManaged = true;\n }\n })));\n});\nSwiperSlide.displayName = 'SwiperSlide';\n\n;// ./node_modules/swiper/swiper.mjs\n/**\n * Swiper 12.1.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2026 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: February 13, 2026\n */\n\n\n// EXTERNAL MODULE: ./src/utils/useOnScreen.js\nvar utils_useOnScreen = __webpack_require__(4232);\n;// ./src/components/SliderSwiper/SliderSwiper.js\n// import { Parallax } from 'react-scroll-parallax';\n// SwiperCore.use([Navigation]);\nSwiper.use([swiper_namespaceObject.Keyboard,swiper_namespaceObject.Mousewheel]);function SliderSwiper(props){// in case we want to use navigation and buttons\n// const SliderArrows = () => (\n// <div className={props.buttonWhite ? 'c-slider-arrows-white' : 'c-slider-arrows'}>\n// <div className=\"c-slider-arrows-inner\">\n// <button className=\"c-slider-arrow-left swiper-button-prev\">\n// <SliderArrow color={props.buttonWhite ? 'black' : 'white'} />\n// </button>\n// <button className=\"c-slider-arrow-right swiper-button-next\">\n// <SliderArrow color={props.buttonWhite ? 'black' : 'white'} />\n// </button>\n// </div>\n// </div>\n// );\n// const [parallaxAllowed, setParallaxAllowed] = useState(true);\n// useEffect(() => {\n// function checkParallaxScreenSize() {\n// setParallaxAllowed(window.innerWidth < 640);\n// }\n// checkParallaxScreenSize();\n// window.addEventListener('resize', checkParallaxScreenSize);\n// return () => {\n// window.removeEventListener('resize', checkParallaxScreenSize);\n// };\n// }, []);\nvar sliderRef=(0,react.useRef)();var sliderOnScreen=(0,utils_useOnScreen/* default */.A)(sliderRef);var parallaxRef=(0,react.useRef)();var swiperContent=/*#__PURE__*/react.createElement(swiper_react_Swiper,{observer:true,observeParents:true,parallax:true,spaceBetween:20,slidesPerView:'auto',freeMode:true,freeModeSticky:true,keyboard:{enabled:true,onlyInViewport:true},mousewheel:{forceToAxis:true}},props.data.map(function(card,i){return/*#__PURE__*/react.createElement(SwiperSlide,{key:card.link?card.link+\"-\"+i:\"slide-\"+i},/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider-slides\"},/*#__PURE__*/react.createElement(components_HomeGridCard_HomeGridCard,{type:card.type,title:card.title,image:card.image,link:card.link,quote:card.quote,attribution:card.attribution,cta:card.cta,slider:\"true\",happeningNow:card.happeningNow,site:card===null||card===void 0?void 0:card.site,linkType:card===null||card===void 0?void 0:card.linkType})));}));(0,react.useEffect)(function(){var winH,halfH,offset;var speed=0.5;var ticking=false;function setVariables(){if(!parallaxRef.current){return;}winH=window.innerHeight;halfH=window.innerHeight/2;var winOneThird=winH/3;var box=parallaxRef.current.getBoundingClientRect();var testOffset=halfH-box.height/2;offset=testOffset<winOneThird?winOneThird:testOffset;}function handleScroll(){// Coalesce bursts of scroll events into one frame. Without this every\n// scroll event queued another layout read, saturating the main thread.\nif(ticking){return;}ticking=true;requestAnimationFrame(function(){ticking=false;if(!parallaxRef.current){return;}var pos=parallaxRef.current.getBoundingClientRect();var transOffset=pos.y<offset?0:(offset-pos.y)*speed*-1;parallaxRef.current.style.transform=\"translate3d(0, \"+transOffset+\"px, 0)\";});}setVariables();window.addEventListener('scroll',handleScroll,{passive:true});window.addEventListener('resize',setVariables,{passive:true});return function(){window.removeEventListener('scroll',handleScroll);window.removeEventListener('resize',setVariables);};},[]);// let SliderContent;
1\n// if (props.useParallax) {\n// SliderContent = <Parallax x={[5, -5]} y={[20, -20]}><SwiperContent /></Parallax>;\n// } else {\n// SliderContent = <SwiperContent />;\n// }\nreturn/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider-content \"+(sliderOnScreen?'in-view':''),ref:sliderRef},/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider-content__scroller\",ref:parallaxRef},swiperContent));}\n;// ./src/components/SliderWatcher/SliderWatcher.js\nfunction SliderWatcher(){var watcherRef=(0,react.useRef)();var watcherOnScreen=(0,utils_useOnScreen/* default */.A)(watcherRef);var _useState=(0,react.useState)(false),wasSeen=_useState[0],setWasSeen=_useState[1];(0,react.useEffect)(function(){if(watcherOnScreen){setWasSeen(true);}},[watcherOnScreen]);return/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider-watcher \"+(wasSeen?'in-view':''),ref:watcherRef});}\n;// ./src/components/Slider/Slider.js\nvar Slider=function Slider(_ref){var data=_ref.data,buttonWhite=_ref.buttonWhite,selectedStory=_ref.selectedStory,useParallax=_ref.useParallax;// const sliderData = !selectedStory ? data : data.filter(item => item.storyTag === selectedStory);\n// const SliderContent = ({data}) => {\n// return (\n// <div className=\"c-slider-content\" ref={ref}>\n// {data.map((card, i) => (\n// <div className=\"c-slider-slides\" key={`${card.title}+${i}`}>\n// <HomeGridCard\n// type={card.type}\n// title={card.title}\n// image={card.image}\n// link={card.link}\n// quote={card.quote}\n// attribution={card.attribution}\n// cta={card.cta}\n// slider=\"true\"\n// happeningNow={card.happeningNow}\n// />\n// </div>\n// ))}\n// </div>\n// );\n// };\n//still working on a better way to scroll to each item with .scrollIntoView, this is for now...\nvar SliderArrows=function SliderArrows(){return/*#__PURE__*/react.createElement(\"div\",{className:buttonWhite?'c-slider-arrows-white':'c-slider-arrows'},/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider-arrows-inner\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider-arrow-left\"},/*#__PURE__*/react.createElement(Icons_SliderArrow,{color:buttonWhite?'black':'white'})),/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider-arrow-right\"},/*#__PURE__*/react.createElement(Icons_SliderArrow,{color:buttonWhite?'black':'white'}))));};return/*#__PURE__*/react.createElement(\"div\",{className:\"c-slider\"},/*#__PURE__*/react.createElement(SliderWatcher,null),/*#__PURE__*/react.createElement(SliderSwiper,{data:data,useParallax:useParallax,buttonWhite:buttonWhite}),data.length>3&&/*#__PURE__*/react.createElement(SliderArrows,null));};/* harmony default export */ var Slider_Slider = (Slider);\n;// ./src/components/SplitText/SplitText.js\nfunction SplitText(props){var _props$copy;var charCount=0;var wordCount=0;return/*#__PURE__*/react.createElement(\"span\",{className:\"split-container\",\"aria-label\":props.copy,role:props.role},(_props$copy=props.copy)===null||_props$copy===void 0?void 0:_props$copy.split(\" \").map(function(word,index){return/*#__PURE__*/react.createElement(react.Fragment,{key:\"word-\"+index},/*#__PURE__*/react.createElement(\"span\",{className:\"word\",\"aria-hidden\":\"true\",\"data-index\":++wordCount},word.split(\"\").map(function(char,idx){return/*#__PURE__*/react.createElement(\"span\",{className:\"char\",\"aria-hidden\":\"true\",\"data-index\":++charCount,key:\"char-\"+idx},char);})),/*#__PURE__*/react.createElement(\"span\",{className:\"whitespace\"},\" \"));}));}\n// EXTERNAL MODULE: ./src/components/Icons/SmallArrow.js\nvar SmallArrow = __webpack_require__(2078);\n;// ./src/components/MostLovedHeart/MostLovedHeart.js\nfunction MostLovedHeart(){var totalFrames=8;var frameRate=8;var ref=(0,react.useRef)();// Counters have to survive re-renders, otherwise the animation resets\n// every time the component renders and never advances.\nvar activeFrame=(0,react.useRef)(3);var frameTick=(0,react.useRef)(0);var ticking=(0,react.useRef)(false);var _useState=(0,react.useState)(''),heartFadeClass=_useState[0],setHeartFadeClass=_useState[1];var _useState2=(0,react.useState)(3),currentFrame=_useState2[0],setCurrentFrame=_useState2[1];(0,react.useEffect)(function(){function advanceAnimation(){if(++frameTick.current>=frameRate){frameTick.current=0;if(++activeFrame.current>totalFrames)activeFrame.current=1;setCurrentFrame(activeFrame.current);}}function onScroll(){// Coalesce bursts of scroll events into a single frame so the\n// rAF queue c
1annot grow without bound.\nif(ticking.current){return;}ticking.current=true;window.requestAnimationFrame(function(){ticking.current=false;if(!ref.current){return;}var box=ref.current.getBoundingClientRect();setHeartFadeClass(box.y<-100?'is-faded':'');advanceAnimation();});}window.addEventListener('scroll',onScroll,{passive:true});return function(){window.removeEventListener('scroll',onScroll);};},[]);return/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__heart \"+heartFadeClass,ref:ref},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__heart-fader\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__heart-inner frame-\"+currentFrame})));}\n;// ./src/components/MostLovedContent/MostLovedContent.js\nfunction MostLovedContent(props){var titleRef=(0,react.useRef)();var titleOnScreen=(0,utils_useOnScreen/* default */.A)(titleRef);var bkgRef=(0,react.useRef)();var bkgOnScreen=(0,utils_useOnScreen/* default */.A)(bkgRef,'-100px');var _useState=(0,react.useState)(false),bkgwasSeen=_useState[0],setBkgWasSeen=_useState[1];(0,react.useEffect)(function(){if(bkgOnScreen){setBkgWasSeen(true);}},[bkgOnScreen]);return/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__content-inner \"+(bkgwasSeen?'in-view':''),ref:bkgRef},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__bkg\"}),/*#__PURE__*/react.createElement(MostLovedHeart,null),/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__text-wrapper\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__text \"+(titleOnScreen?'in-view':''),ref:titleRef},/*#__PURE__*/react.createElement(\"h2\",{className:\"f-heading-2 c-most-loved__heading\"},/*#__PURE__*/react.createElement(\"span\",{className:\"c-most-loved__heading-mobile\"},props.title),/*#__PURE__*/react.createElement(\"span\",{className:\"c-most-loved__heading-desktop\",\"aria-hidden\":\"true\"},/*#__PURE__*/react.createElement(SplitText,{copy:props.title}))),/*#__PURE__*/react.createElement(\"p\",{className:\"f-heading-6 c-most-loved__hours\"},props.subhead),/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__ctas\"},props.ctas.map(function(cta,index){return/*#__PURE__*/react.createElement(OrgLink/* default */.A,{to:cta.uri_alias,site:cta.uri_site,type:cta.uri_bundle,key:index,className:\"c-most-loved__link u-hover-text-parent u-hover-expand-small-arrow\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__cta\"},/*#__PURE__*/react.createElement(\"span\",{className:\"f-cta c-most-loved__cta-text u-hover-text u-hover-text--white\"},cta.title),/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__cta-arrow\"},/*#__PURE__*/react.createElement(SmallArrow/* default */.A,{color:\"white\"}))));})))));}\n;// ./src/components/MostLoved/MostLoved.js\nvar MostLoved=function MostLoved(_ref){var title=_ref.title,subhead=_ref.subhead,ctas=_ref.ctas,sliderEyebrow=_ref.sliderEyebrow,sliderHeader=_ref.sliderHeader,sliderData=_ref.sliderData;return/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__content-wrapper o-basic-grid\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__content\"},/*#__PURE__*/react.createElement(MostLovedContent,{title:title,subhead:subhead,ctas:ctas}))),/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__slider-wrapper o-basic-grid\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-most-loved__slider\"},/*#__PURE__*/react.createElement(Slider_Slider,{data:sliderData,buttonWhite:true,useParallax:true}))));};/* harmony default export */ var MostLoved_MostLoved = (MostLoved);\n// EXTERNAL MODULE: ./.cache/gatsby-browser-entry.js + 4 modules\nvar gatsby_browser_entry = __webpack_require__(4810);\n// EXTERNAL MODULE: ./src/components/SelectDropdown/SelectDropdown.js\nvar SelectDropdown = __webpack_require__(334);\n;// ./src/components/ScanTextureUnmask/ScanTextureUnmask.js\nfunction ScanTextureUnmask(){var _useState=(0,react.useState)('hidden'),scanState=_useState[0],setScanState=_useState[1];var ref=(0,react.useRef)();var inView=(0,utils_useOnScreen/* default */.A)(ref);(0,react.useEffect)(function(){if(inView){setScanState('active');}else{setScanState('hidden');}},[inView]);return/*#__PURE__*/react.createElement(\"div\",{className:\"c-scan-dissolver \"+scanState,ref:ref},/*#__PURE__*/react.createElement(\"div\",{className:\"c-scan-dissolver__inner\"}));}\n;// ./src/components/HomepageStories/HomepageStories.js\nvar HomepageStories=function HomepageStories(_ref){var subtitle=_ref.subtitle,sliderData=_ref.sliderData,tags=_ref.tags;var _useState=(0,react.useState)('Everything'),selectedStory=_useState[0],setSelectedStory=_useState[1];function _selectStory(e){setSelectedStory(e);}var cardData=selectedStory==='Everything'?sliderData:sliderData.filter(function(story){var _story$storyTag;return(_story$storyTag=story.storyTag)===null||_story$storyTag===void 0?void 0:_story$storyTag.includes(selectedStory);});return/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories o-basic-grid\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories__scan\"},/*#__PURE__*/react.createElement(ScanTextureUnmask,null)),/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories__
1content\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories__text\"},/*#__PURE__*/react.createElement(\"h3\",{className:\"f-cta c-homepage-stories__subtitle\"},subtitle),/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories__heading-select\"},/*#__PURE__*/react.createElement(\"h2\",{className:\"f-heading-sub-2 c-homepage-stories__heading\"},\"Learn about \"),/*#__PURE__*/react.createElement(SelectDropdown/* default */.A,{tags:tags,largeFont:false,selectStory:function selectStory(e){return _selectStory(e);}}))),/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories__cta\"},/*#__PURE__*/react.createElement(gatsby_browser_entry.Link,{to:\"/stories\",className:\"c-homepage-stories__link u-hover-text-parent u-hover-expand-small-arrow\"},/*#__PURE__*/react.createElement(\"div\",{className:\"f-cta c-homepage-stories__cta-text u-hover-text u-hover-text--white\"},\"See all Stories\"),/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories__cta-arrow\"},/*#__PURE__*/react.createElement(SmallArrow/* default */.A,{color:\"white\"}))))),/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-stories__slider\"},/*#__PURE__*/react.createElement(Slider_Slider,{data:cardData,buttonWhite:false,selectedStory:selectedStory})));};/* harmony default export */ var HomepageStories_HomepageStories = (HomepageStories);\n// EXTERNAL MODULE: ./node_modules/react-scroll-parallax/dist/index.mjs + 1 modules\nvar dist = __webpack_require__(5359);\n// EXTERNAL MODULE: ./src/images/branch-bottom.png\nvar branch_bottom = __webpack_require__(3620);\n// EXTERNAL MODULE: ./src/components/BlinkingEye/BlinkingEye.js\nvar BlinkingEye = __webpack_require__(8294);\n;// ./src/components/InViewWatcher/InViewWatcher.js\nfunction InViewWatcher_InViewWatcher(){var watchRef=(0,react.useRef)();var inView=(0,utils_useOnScreen/* default */.A)(watchRef);var _useState=(0,react.useState)(false),wasSeen=_useState[0],setWasSeen=_useState[1];(0,react.useEffect)(function(){if(inView){setWasSeen(true);}},[inView]);return/*#__PURE__*/react.createElement(\"div\",{className:\"u-watcher \"+(wasSeen?'in-view':''),ref:watchRef});}\n;// ./src/components/VeinsTextureUnmask/VeinsTextureUnmask.js\nfunction VeinsTextureUnmask_VeinTextureUnmask(){var _useState=useState('hidden'),veinState=_useState[0],setVeinState=_useState[1];var ref=useRef();var inView=useOnScreen(ref);useEffect(function(){if(inView){setVeinState('active');}else{setVeinState('hidden');}},[inView]);return/*#__PURE__*/React.createElement(\"div\",{className:\"c-vein-dissolver \"+veinState,ref:ref},/*#__PURE__*/React.createElement(\"div\",{className:\"c-vein-dissolver__inner\"}));}\n;// ./src/components/HomeGrid/HomeGrid.js\nvar cardIterator=0;var HomeGrid=function HomeGrid(_ref){var cardData=_ref.cardData,position=_ref.position;var leftData=[];var rightData=[];// let dataCount = 0;\nvar dataLength=cardData.length;var _useState=useState(true),parallaxAllowed=_useState[0],setParallaxAllowed=_useState[1];useEffect(function(){function checkParallaxScreenSize(){setParallaxAllowed(window.innerWidth<640);}checkParallaxScreenSize();window.addEventListener('resize',checkParallaxScreenSize);return function(){window.removeEventListener('resize',checkParallaxScreenSize);};},[]);var leftDataCutoff=Math.floor(dataLength/3);// if (dataLength > 2) {\ncardData.forEach(function(data,idx){if(idx<=leftDataCutoff){leftData.push(data);}else{rightData.push(data);}});// } else {\n// cardData.forEach((data, idx) => {\n// // ++dataCount;\n// if (idx === 0) {\n// leftData.push(data);\n// } else {\n// rightData.push(data);\n// }\n// });\n// }\nreturn/*#__PURE__*/React.createElement(\"div\",{className:\"c-home-grid o-basic-grid\"},/*#__PURE__*/React.createElement(\"h2\",{className:\"u-sr-only\"},\"Stories\"),/*#__PURE__*/React.createElement(\"div\",{className:\"c-home-grid__branch\"},/*#__PURE__*/React.createElement(VeinTextureUnmask,null)),/*#__PURE__*/React.createElement(\"div\",{className:\"c-home-grid__left\"},leftData.map(function(data,i){return/*#__PURE__*/React.createElement(\"div\",{className:\"c-home-grid-card\",ke
1y:\"card-\"+ ++cardIterator},/*#__PURE__*/React.createElement(HomeGridCard,{type:data.type,title:data.title,link:data.link,happeningNow:data.happeningNow,image:data.image,site:data===null||data===void 0?void 0:data.site,linkType:data===null||data===void 0?void 0:data.linkType,key:nanoid()}));})),/*#__PURE__*/React.createElement(Parallax,{className:\"c-home-grid__right\",y:[20,-20],disabled:parallaxAllowed},rightData.map(function(data,i){return/*#__PURE__*/React.createElement(\"div\",{className:\"c-home-grid-card\",key:\"card-\"+ ++cardIterator},/*#__PURE__*/React.createElement(HomeGridCard,{type:data.type,title:data.title,link:data.link,happeningNow:data.happeningNow,image:data.image,key:nanoid(),site:data===null||data===void 0?void 0:data.site,linkType:data===null||data===void 0?void 0:data.linkType}));})),/*#__PURE__*/React.createElement(\"div\",{className:\"c-home-grid__branch-bottom\"},/*#__PURE__*/React.createElement(InViewWatcher,null),/*#__PURE__*/React.createElement(\"div\",{className:\"c-home-grid__branch-bottom-inner\"},/*#__PURE__*/React.createElement(\"img\",{src:BranchBottomImg,alt:\"\"}))));};/* harmony default export */ var HomeGrid_HomeGrid = ((/* unused pure expression or super */ null && (HomeGrid)));\n;// ./src/components/HomepageHeroTitleCard/HomepageHeroTitleCard.js\nfunction HomepageHeroTitleCard(props){var cardRef=(0,react.useRef)();(0,react.useEffect)(function(){var ticking=false;function handleTitleCardScroll(){// Coalesce bursts of scroll events into one frame. Without this every\n// scroll event queued another style write, saturating the main thread.\nif(ticking){return;}ticking=true;requestAnimationFrame(function(){ticking=false;if(!cardRef.current){return;}var scrolled=window.scrollY;if(scrolled>100){cardRef.current.style.transform=\"translate3d(\"+(scrolled-100)/2*-1+\"px, 0, 0)\";cardRef.current.style.webkitTransform=\"translate3d(\"+(scrolled-100)/2*-1+\"px, 0, 0)\";}else{cardRef.current.style.transform=\"translate3d(0, 0, 0)\";cardRef.current.style.webkitTransform=\"translate3d(0, 0, 0)\";}});}var inViewTimeout=setTimeout(function(){if(cardRef.current){cardRef.current.classList.add('in-view');}},200);window.addEventListener('scroll',handleTitleCardScroll,{passive:true});return function(){clearTimeout(inViewTimeout);window.removeEventListener('scroll',handleTitleCardScroll);};},[]);return/*#__PURE__*/react.createElement(\"div\",{ref:cardRef,className:\"c-homepage-hero__bottom-block\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-hero__bottom-block-inner\"},/*#__PURE__*/react.createElement(\"p\",{className:\"c-homepage-hero__bottom-eyebrow f-tag\"},props.eyebrow),/*#__PURE__*/react.createElement(\"p\",{className:\"c-homepage-hero__bottom-title f-heading-h1\"},/*#__PURE__*/react.createElement(SplitText,{copy:props.blockText})),/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-hero__bottom-cta\"},/*#__PURE__*/react.createElement(OrgLink/* default */.A,{className:\"c-homepage-hero__bottom-link f-cta u-hover-text-parent\",to:props.cta.url,style:{textDecoration:'none',color:'#fff',display:'flex',alignItems:'center'}},/*#__PURE__*/react.createElement(\"span\",null,props.cta.title),/*#__PURE__*/react.createElement(\"span\",{className:\"c-homepage-hero__arrow\"},/*#__PURE__*/react.createElement(SmallArrow/* default */.A,{color:\"#ffffff\"}))))));}\n// EXTERNAL MODULE: ./node_modules/regl/dist/regl.js\nvar regl = __webpack_require__(6396);\n;// ./src/components/HomepageIllustration/HomepageIllustration.js\nfunction HomepageIllustration_BlinkingEye(){var eyeRef=(0,react.useRef)();var inView=(0,utils_useOnScreen/* default */.A)(eyeRef);return/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-illustration\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-illustration__inner \"+(inView?'in-view':''),ref:eyeRef}));}\n;// ./src/components/HomepageHeroDissolver/HomepageHeroDissolver.js\nfunction HomepageHeroDissolver(props){// const ref = useRef();\n// useEffect(() => {\n// const data = {\n// animateGrain: false, // animateGrain: true,\n// grainAmount: 0, // grainAmount: 0.15,\n// noiseSpeed: 0.05,\n// noiseFreq: 54, // noiseFreq: 18,\n// maskLowEnd: 0.89,\n// maskHighEnd: 1,\n// bkColor: [25
15, 255, 255], // bkColor: [248, 249, 242],// bkColor: [250, 250, 250],\n// maskClamp: 1.28, // maskClamp: 0.5,\n// maskGradient: 0.31, // maskGradient: 0.61,\n// maskEdgeColor: [219, 58, 45], // maskEdgeColor: [165, 0, 255],\n// maskEdgeSize: 0.1,\n// };\n// let scrollTarget = 0;\n// let scrollPos = 0;\n// let imageLoaded = false;\n// let imageTexture;\n// let allowUpdate = true;\n// let updateRunning = true;\n// let winW = window.innerWidth;\n// let winH = window.innerHeight;\n// let image = new Image();\n// let canvas = document.getElementById('regl-canvas');\n// canvas.setAttribute('width', window.innerWidth);\n// canvas.setAttribute('height', window.innerHeight);\n// image.src = props.imageSrc;\n// image.onload = function () {\n// imageLoaded = true;\n// imageTexture = regl.texture(image);\n// sizeCanvas();\n// };\n// function lerp(position, targetPosition, speed = 0.2) {\n// return position + ((targetPosition - position) / 2) * speed;\n// }\n// function sizeCanvas() {\n// winW = window.innerWidth;\n// winH = window.innerHeight;\n// const imageW = image.naturalWidth;\n// const imageH = image.naturalHeight;\n// let vals = {w: 0, h: 0};\n// let ratio;\n// if ( imageW > imageH ) {\n// // landscape\n// ratio = imageW / imageH;\n// vals.h = winH;\n// vals.w = winH * ratio;\n// } else {\n// // portrait\n// ratio = imageH / imageW;\n// vals.h = winW * ratio;\n// vals.w = winW;\n// }\n// if ( vals.w < winW ) {\n// vals.h = winW * (vals.h / vals.w);\n// vals.w = winW;\n// } else if ( vals.h < winH ) {\n// vals.w = winH * (vals.w / vals.h);\n// vals.h = winH;\n// }\n// canvas.setAttribute('width', vals.w);\n// canvas.setAttribute('height', vals.h);\n// return vals;\n// }\n// const regl = createRegl({ canvas: canvas });\n// const drawQuad = regl({\n// frag: frag,\n// vert: fullVert,\n// attributes: {\n// position: (context, props) =>\n// regl.buffer([\n// [1, -1],\n// [1, 1],\n// [-1, -1],\
1n// [-1, 1],\n// ]),\n// },\n// uniforms: {\n// u_resolution: [window.innerWidth, window.innerHeight],\n// u_screenDimensions: [window.innerWidth, window.innerHeight],\n// u_time: (context, props, batchId) => context.time,\n// u_noiseFreq: () => data.noiseFreq,\n// u_noiseSpeed: () => data.noiseSpeed,\n// u_maskLowEnd: () => data.maskLowEnd,\n// u_maskHighEnd: () => data.maskHighEnd,\n// u_animateGrain: () => data.animateGrain,\n// u_grainAmount: () => data.grainAmount,\n// u_maskClamp: () => data.maskClamp,\n// u_maskGradient: () => data.maskGradient,\n// u_scroll: () => scrollPos / window.innerHeight,\n// u_image: () => imageTexture,\n// u_bkColor: () => data.bkColor.map((n) => n / 255),\n// u_maskEdgeColor: () => data.maskEdgeColor.map((n) => n / 255),\n// u_maskEdgeSize: () => data.maskEdgeSize,\n// },\n// primitive: 'triangle strip',\n// count: 4,\n// });\n// // -----------\n// // Animation Loop\n// // -----------\n// function update() {\n// // update mouse\n// updateRunning = true;\n// scrollTarget = window.scrollY;\n// scrollPos = lerp(scrollPos, scrollTarget);\n// // Do webgl Draw call\n// if (imageLoaded) {\n// regl.poll();\n// regl.clear({\n// color: [1, 1, 1, 0],\n// });\n// drawQuad();\n// }\n// // animation loop\n// if ( allowUpdate ) {\n// requestAnimationFrame(update);\n// } else {\n// updateRunning = false;\n// }\n// }\n// ref.current.classList.add('allow-animation');\n// requestAnimationFrame(update);\n// function testUpdate() {\n// requestAnimationFrame(() => {\n// if ( window.scrollY > winH ) {\n// allowUpdate = false;\n// update();\n// } else {\n// if ( !updateRunning ) {\n// allowUpdate = true;\n// requestAnimationFrame(update);\n// }\n// }\n// })\n// }\n// window.addEventListener('scroll', testUpdate);\n// window.addEventListener('resize', sizeCanvas);\n// return (() => {\n// allowUpdate = false;\n// cancelAnimationFrame(update);\n// window.removeEventListener('scroll', testUpdate);\n// window.removeEventListener('resize', sizeCanvas);\n// })\n// }, [props.imageSrc]);\nreturn/*#__PURE__*/react.createElement(react.Fragment,null,/*#__PURE__*/react.createElement(\"div\",{className:\"c-dissolver\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-dissolver__eye\"},/*#__PURE__*/react.createElement(HomepageIllustration_BlinkingEye,null))));}\n;// ./src/components/HomepageHeroPattern/HomepageHeroPattern.js\n// import {isMobile} from 'react-device-detect';\nvar HomepageHeroPattern=function HomepageHeroPattern(_ref){var image=_ref.image,blockText=_ref.blockText,cta=_ref.cta,eyebrow=_ref.eyebrow;var _useState=(0,react.useState)(true),isMobile=_useState[0],setIsMobile=_useState[1];(0,react.useEffect)(function(){setIsMobile('ontouchstart'in document.documentElement&&navigator.userAgent.match(/Mobi/));},[]);return/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-hero\"},/*#__PURE__*/react.createElement(\"h1\",{className:\"u-sr-only\"},\"Home\"),/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-hero__content\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-hero__image c-homepage-hero__image--static\"},/*#__PURE__*/react.createElement(index_browser_25d2e62c.G,{alt:image===null||image===void 0?void 0:image.imgAlt,image:(0,index_browser_25d2e62c.c)(image===null||image===void 0?void 0:image.imgData)})),isMobile?image&&/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-hero__image c-homepage-hero__image--static\"},/*#__PURE__*/react.createElement(index_browser_25d2e62c.G,{alt:image===null||image===void 0?void 0:image.imgAlt,image:(0,index_browser_25d2e62c.c)(image===null||image===void 0?void 0:image.imgData)})):image&&/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage-hero__image\"},/*#__PURE__*/react.createElement(HomepageHeroDissolver,{imageSrc:image.imgData.childImageSharp.gatsbyImageData.images.fallback.src})),/*#__PURE__*/react.createElement(HomepageHeroTitleCard,{eyebrow:eyebrow,blockText:blockText,cta:cta})));};/* harmony default export */ var HomepageHeroPattern_HomepageHeroPattern = (HomepageHeroPattern);\n;// ./src/components/HomepageHeroPattern/index.js\n\n// EXTERNAL MODULE: ./src/components/Icons/Twitter.js\nvar Twitter = __webpack_require__(8819);\n// EXTERNAL MODULE: ./src/components/Icons/Instagram.js\nvar Instagram = __webpack_require__(5840);\n// EXTERNAL MODULE: ./src/components/Icons/Facebook.js\nvar Facebook = __webpack_require__(4674);\n;// ./src/components/FurtherExplorationCard/FurtherExplorationCard.js\nfunction FutherExplorationCard(props){var fadeRef=(0,react.useRef)();var fadeInView=(0,utils_useOnScreen/* default */.A)(fadeRef);var tileRef=(0,react.useRef)();var tileInView=(0,utils_useOnScreen/* default */.A)(tileRef);return/*#__PURE__*/react.createElement(\"div\",{className:\"c-furtherExplorationCallout__section\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-furtherExplorationCallout__image u-watch u-watch--fade-in \"+(fadeInView?'in-view':''),style:{backgroundImage:\"url(\"+props.item.image+\")\"},ref:fadeRef}),/*#__PURE__*/react.createElement(\"div\",{className:\"further-exploration-callout__text-logo-wrapper\"},/*#__PURE__*/react.createElement(\"div\",{className:\"further-exploration-callout__text u-watch u-watch--slide-right \"+(tileInView?'in-view':''),ref:tileRef},/*#__PURE__*/react.createElement(\"p\",{className:\"further-exploration-callout__text-tag u-text-uppercase f-tag\"},props.item.eyebrow),/*#__PURE__*/react.createElement(\"h6\",{className:\"f-heading-6 further-exploration-callout__text-desc\",dangerouslySetInnerHTML:{__html:props.item.description}}),props.item.twitterUrl&&/*#__PURE__*/react.createElement(\"div\",{className:\"further-exploration-callout__icons\"},/*#__PURE__*/react.createElement(\"a\",{className:\"further-exploration-callout__icon\",href:props.item.twitterUrl,target:\"_blank\",rel:\"noreferrer\"},/*#__PURE__*/react.createElement(Twitter/* default */.A,null)),/*#__PURE__*/react.createElement(\"a\",{className:\"further-exploration-callout__icon\",href:props.item.instagramUrl,target:\"_blank\",rel:\"noreferrer\"},/*#__PURE__*/react.createElement(Instagram/* default */.A,null)),/*#__PURE__*/react.createElement(\"a\",{className:\"further-exploration-callout__icon\",href:props.item.facebookUrl,target:\"_blank\",rel:\"noreferrer\"},/*#__PURE__*/react.createElement(Facebook/* default */.A,null))),/*#__PURE__*/react.createElement(\"div\",{className:\"mobile-logos\"},props.item.twitterUrl&&/*#__PURE__*/react.createElement(\"div\",{className:\"mobile-logos__further-exploration-callout-icons\"},/*#__PURE__*/react.createElement(\"a\",{className:\"mobile-logos__further-exploration-callout-icon\",href:props.item.twitterUrl,target:\"_blank\",rel:\"noreferrer\"},/*#__PURE__*/react.createElement(Twitter/* default */.A,null)),/*#__PURE__*/react.createElement(\"a\",{className:\"mobile-logos__further-exploration-callout-icon\",href:props.item.instagramUrl,target:\"_blank\",rel:\"noreferrer\"},/*#__PURE__*/react.createElement(Instagram/* default */.A,null)),/*#__PURE__*/react.createElement(\"a\",{className:\"mobile-logos__further-exploration-callout-icon\",href:props.item.facebookUrl,target:\"_blank\",rel:\"noreferrer\"},/*#__PURE__*/react.createElement(Facebook/* default */.A,null)))))));}\n;// ./src/components/FurtherExplorationCallout/FurtherExplorationCallout.js\nvar FurtherExplorationCallout=function FurtherExplorationCallout(_ref){var data=_ref.data;return/*#__PURE__*/react.createElement(\"div\",{className:\"c-furtherExplorationCallout\"},data.map(function(item,idx){return/*#__PURE__*/react.createElement(FutherExplorationCard,{item:item,key:idx});}));};/* harmony default export */ var FurtherExplorationCallout_FurtherExplorationCallout = (FurtherExplorationCallout);\n// EXTERNAL MODULE: ./src/utils/handleImages.js\nvar handleImages = __webpack_require__(500);\n// EXTERNAL MODULE: ./node_modules/nanoid/index.browser.js + 1 modules\nvar index_browser = __webpack_require__(7430);\n// EXTERNAL MODULE: ./src/components/CtaTextArrow/CtaTextArrow.js\nvar CtaTextArrow = __webpack_require__(2064);\n;// ./src/components/HomeColumns/HomeColumns.js\nfunction HomeColumns(_ref){var _featuredOnView$relat,_featuredOnView$relat2;var onView=_ref.onView,events=_ref.events,_ref$featuredEventDat=_ref.featuredEventData,featuredEventData=_ref$featuredEventDat===void 0?null:_ref$featuredEventDat;var today=(0,react.useMemo)(function(){var todayUtcDateString=new Date().toLocaleDateString('en-US',{timeZone:'UTC'});return new Date(todayUtcDateString).getTime();},[]);function handleDate(date){var utcDateString=new Date(date).toLocaleDateString('en-US',{timeZone:'UTC'});return new Date(utcDateString).getTime();}function decodeHTML(html){if(typeof document!==\"undefined\"){var txt=document.createElement(\"textarea\");txt.innerHTML=html;return txt.value;}return html;// fallback for SSR\n}var sortedEvents=[];var featuredEvent;events.map(function(event){var eventDate=handleDate(event.node.field_event_dates[0].value);if(eventDate>=today){sortedEvents.push(event.node);}return;});if(sortedEvents.length>0){sortedEvents.sort(function(a,b){return a.field_event_dates[0].value>b.field_event_dates[0].value?1:-1;});if(featuredEventData){// use manually entered featured event if it exists\nfeaturedEvent=featuredEventData;
1sortedEvents=sortedEvents.filter(function(event){return event.id!==featuredEventData.id;});// remove extra item from query, list should be no longer than 3\nif(sortedEvents.length>3){sortedEvents.pop();}}else{// use soonest event as featured event\nfeaturedEvent=sortedEvents.shift();}}var featuredOnView=onView.relationships.field_featured_on_view_item;var onViewList=onView.relationships.field_on_view_list;return/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-columns o-basic-grid\"},/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-columns__on-view\"},/*#__PURE__*/react.createElement(\"h2\",{className:\"f-heading-3 c-home-columns__heading\"},\"On View\"),featuredOnView&&/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-grid-card\"},/*#__PURE__*/react.createElement(components_HomeGridCard_HomeGridCard,{type:(_featuredOnView$relat=featuredOnView.relationships)===null||_featuredOnView$relat===void 0?void 0:(_featuredOnView$relat2=_featuredOnView$relat.field_exhibition_type)===null||_featuredOnView$relat2===void 0?void 0:_featuredOnView$relat2.name,title:featuredOnView.field_display_title,link:featuredOnView.path.alias,image:(0,handleImages/* handleImage */.cP)(featuredOnView.relationships.field_featured_image),featured:true,onView:true,dates:featuredOnView.field_exhibition_dates,displayDateText:featuredOnView.field_date_display_text})),onViewList&&/*#__PURE__*/react.createElement(\"ul\",{className:\"c-home-columns__list\"},onViewList.map(function(item){var _item$relationships,_item$relationships$f;var label=item===null||item===void 0?void 0:(_item$relationships=item.relationships)===null||_item$relationships===void 0?void 0:(_item$relationships$f=_item$relationships.field_exhibition_type)===null||_item$relationships$f===void 0?void 0:_item$relationships$f.name;var displayDateText=item.field_date_display_text;var dates=item.field_display_dates&&item.field_exhibition_dates?getCardDates(item.field_exhibition_dates):null;return/*#__PURE__*/react.createElement(\"li\",{className:\"c-home-columns__list--item\",key:(0,index_browser/* nanoid */.Ak)()},/*#__PURE__*/react.createElement(OrgLink/* default */.A,{className:\"u-hover-parent\",to:item.path.alias},label&&/*#__PURE__*/react.createElement(\"p\",{className:\"f-subtag c-home-columns__list--label\"},label),/*#__PURE__*/react.createElement(\"h3\",{className:\"f-heading-5 c-home-columns__list--title\"},/*#__PURE__*/react.createElement(\"span\",{className:\"u-hover-text u-hover-text--strong\"},item.field_display_title)),displayDateText&&/*#__PURE__*/react.createElement(\"p\",{className:\"f-body-sm c-home-columns__list--date\"},displayDateText),dates&&!displayDateText&&/*#__PURE__*/react.createElement(\"p\",{className:\"f-body-sm c-home-columns__list--date\"},dates.startDate,\" - \",dates.endDate)));})),/*#__PURE__*/react.createElement(CtaTextArrow/* default */.A,{black:true,text:\"See All On View\",link:\"/on-view\"})),/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-columns__events\"},/*#__PURE__*/react.createElement(\"h2\",{className:\"f-heading-3 c-home-columns__heading\"},\"Upcoming Events\"),!featuredEvent&&sortedEvents.length==0&&/*#__PURE__*/react.createElement(\"p\",{className:\"f-body\"},\"There are no upcoming events at this time.\"),featuredEvent&&/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-grid-card\"},/*#__PURE__*/react.createElement(components_HomeGridCard_HomeGridCard,{title:featuredEvent.field_display_title,link:featuredEvent.path.alias,date:featuredEvent.field_date_display_text?featuredEvent.field_date_display_text:handleDate(featuredEvent.field_event_dates[0].value),image:(0,handleImages/* handleImage */.cP)(featuredEvent.relationships.field_featured_image),featured:true,dates:featuredEvent.field_event_dates,displayDateText:featuredEvent.field_date_display_text,event:true})),sortedEvents.length>0&&/*#__PURE__*/react.createElement(\"ul\",{className:\"c-home-columns__list\"},sortedEvents.map(function(item,i){if(i>3){return;}var displayDateText=item.field_date_display_text;var dateList=[];item.field_event_dates.map(function(date){return dateList.push(getCardDates(date));});return/*#__PURE__*/react.createElement(\"li\",{className:\"c-home-columns__list--item u-hover-text-parent\",key:(0,index_browser/* nanoid */.Ak)()},/*#__PURE__*/react.createElement(OrgLink/* default */.A,{to:item.path.alias},/*#__PURE__*/react.createElement(\"h3\",{className:\"f-heading-5 c-home-columns__list--title\"},/*#__PURE__*/react.createElement(\"span\",{className:\"u-hover-text u-hover-text--strong\",dangerouslySetInnerHTML:{__html:decodeHTML(item.field_display_title)}})),displayDateText&&/*#__PURE__*/react.createElement(\"p\",{className:\"f-body-sm c-h
1ome-columns__list--date\"},displayDateText),dateList.length>0&&!displayDateText&&dateList.map(function(date){return/*#__PURE__*/react.createElement(\"p\",{className:\"f-body-sm c-home-columns__list--date\"},date.startDate,\" \",date.startTime,\" - \",date.endTime);})));})),/*#__PURE__*/react.createElement(CtaTextArrow/* default */.A,{black:true,text:\"See All Events\",link:\"/events\"})),/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-columns__branch-bottom\"},/*#__PURE__*/react.createElement(InViewWatcher_InViewWatcher,null),/*#__PURE__*/react.createElement(\"div\",{className:\"c-home-columns__branch-bottom-inner\"},/*#__PURE__*/react.createElement(\"img\",{src:branch_bottom/* default */.A,alt:\"\"}))));}\n;// ./src/templates/Homepage/Homepage.js\nvar Homepage=function Homepage(_ref){var _data$allNodeHomepage,_data$allNodeHomepage2,_headerImg$imgData,_data$allBlockContent,_data$allBlockContent2,_data$allBlockContent3,_data$allBlockContent4,_data$allBlockContent5,_data$allBlockContent6,_data$allBlockContent7,_data$allBlockContent8,_data$allBlockContent9,_data$allBlockContent0,_data$allBlockContent1,_data$allBlockContent10,_data$allBlockContent11,_data$allBlockContent12,_data$allBlockContent13,_data$allBlockContent14,_data$allBlockContent15,_data$allBlockContent16,_data$allBlockContent17,_data$allBlockContent18,_data$allBlockContent19,_data$allBlockContent20,_data$allBlockContent21,_data$allBlockContent22,_data$allBlockContent23,_data$allBlockContent24,_data$allBlockContent25,_data$allBlockContent26,_homepageData$relatio;var data=_ref.data;var homepageData=data===null||data===void 0?void 0:(_data$allNodeHomepage=data.allNodeHomepage)===null||_data$allNodeHomepage===void 0?void 0:(_data$allNodeHomepage2=_data$allNodeHomepage.edges[0])===null||_data$allNodeHomepage2===void 0?void 0:_data$allNodeHomepage2.node;var headerImg=(0,handleImages/* handleHeroImage */.ig)(homepageData);var hero={blockText:homepageData===null||homepageData===void 0?void 0:homepageData.field_display_title,eyebrow:homepageData===null||homepageData===void 0?void 0:homepageData.field_homepage_hero_eyebrow_text,cta:{title:homepageData===null||homepageData===void 0?void 0:homepageData.field_homepage_hero_link.title,url:homepageData===null||homepageData===void 0?void 0:homepageData.field_homepage_hero_link.uri_alias,site:homepageData===null||homepageData===void 0?void 0:homepageData.field_homepage_hero_link.uri_site,type:homepageData===null||homepageData===void 0?void 0:homepageData.field_homepage_hero_link.uri_bundle},image:((_headerImg$imgData=headerImg.imgData)===null||_headerImg$imgData===void 0?void 0:_headerImg$imgData.childImageSharp)&&{imgData:headerImg.imgData,imgAlt:headerImg.imgAlt}};
1// fallback images\nvar globalFallbackImg=data===null||data===void 0?void 0:(_data$allBlockContent=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent===void 0?void 0:(_data$allBlockContent2=_data$allBlockContent.edges[0])===null||_data$allBlockContent2===void 0?void 0:(_data$allBlockContent3=_data$allBlockContent2.node)===null||_data$allBlockContent3===void 0?void 0:(_data$allBlockContent4=_data$allBlockContent3.relationships)===null||_data$allBlockContent4===void 0?void 0:_data$allBlockContent4.field_global_image_fallback;var exhibitionFallbackImg=data===null||data===void 0?void 0:(_data$allBlockContent5=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent5===void 0?void 0:(_data$allBlockContent6=_data$allBlockContent5.edges[0])===null||_data$allBlockContent6===void 0?void 0:(_data$allBlockContent7=_data$allBlockContent6.node)===null||_data$allBlockContent7===void 0?void 0:(_data$allBlockContent8=_data$allBlockContent7.relationships)===null||_data$allBlockContent8===void 0?void 0:_data$allBlockContent8.field_exhibition_fallback_image;
1var eventFallbackImg=data===null||data===void 0?void 0:(_data$allBlockContent9=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent9===void 0?void 0:(_data$allBlockContent0=_data$allBlockContent9.edges[0])===null||_data$allBlockContent0===void 0?void 0:(_data$allBlockContent1=_data$allBlockContent0.node)===null||_data$allBlockContent1===void 0?void 0:(_data$allBlockContent10=_data$allBlockContent1.relationships)===null||_data$allBlockContent10===void 0?void 0:_data$allBlockContent10.field_event_fallback_image;var podcastFallbackImg=data===null||data===void 0?void 0:(_data$allBlockContent11=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent11===void 0?void 0:(_data$allBlockContent12=_data$allBlockContent11.edges[0])===null||_data$allBlockContent12===void 0?void 0:(_data$allBlockContent13=_data$allBlockContent12.node)===null||_data$allBlockContent13===void 0?void 0:(_data$allBlockContent14=_data$allBlockContent13.relationships)===null||_data$allBlockContent14===void 0?void 0:_data$allBlockContent14.field_podcast_image_fallback;
1var postFallbackImg=data===null||data===void 0?void 0:(_data$allBlockContent15=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent15===void 0?void 0:(_data$allBlockContent16=_data$allBlockContent15.edges[0])===null||_data$allBlockContent16===void 0?void 0:(_data$allBlockContent17=_data$allBlockContent16.node)===null||_data$allBlockContent17===void 0?void 0:(_data$allBlockContent18=_data$allBlockContent17.relationships)===null||_data$allBlockContent18===void 0?void 0:_data$allBlockContent18.field_post_image_fallback;var storeItemFallbackImg=data===null||data===void 0?void 0:(_data$allBlockContent19=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent19===void 0?void 0:(_data$allBlockContent20=_data$allBlockContent19.edges[0])===null||_data$allBlockContent20===void 0?void 0:(_data$allBlockContent21=_data$allBlockContent20.node)===null||_data$allBlockContent21===void 0?void 0:(_data$allBlockContent22=_data$allBlockContent21.relationships)===null||_data$allBlockContent22===void 0?void 0:_data$allBlockContent22.field_store_item_image_fallback;
1var videoItemFallbackImg=data===null||data===void 0?void 0:(_data$allBlockContent23=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent23===void 0?void 0:(_data$allBlockContent24=_data$allBlockContent23.edges[0])===null||_data$allBlockContent24===void 0?void 0:(_data$allBlockContent25=_data$allBlockContent24.node)===null||_data$allBlockContent25===void 0?void 0:(_data$allBlockContent26=_data$allBlockContent25.relationships)===null||_data$allBlockContent26===void 0?void 0:_data$allBlockContent26.field_video_item_image_fallback;var fallbackImgLookup={\"Global\":globalFallbackImg,\"Exhibition\":exhibitionFallbackImg,\"Post\":postFallbackImg,\"Video Item\":videoItemFallbackImg,\"Podcast\":podcastFallbackImg,\"Featured Object\":globalFallbackImg,\"Event\":eventFallbackImg,\"Store Item\":storeItemFallbackImg};var flexibleContent=homepageData===null||homepageData===void 0?void 0:(_homepageData$relatio=homepageData.relationships)===null||_homepageData$relatio===void 0?void 0:_homepageData$relatio.field_flexible_content;var homepageFlexibleComponents=function homepageFlexibleComponents(flexibleContent){var flexibleContentComponents=flexibleContent.map(function(f,i){var _f$internal,_f$relationships,_f$relationships2,_f$relationships2$fie,_f$relationships2$fie2,_f$relationships2$fie3,_f$relationships2$fie4,_f$relationships2$fie5,_f$relationships2$fie6,_f$relationships2$fie7,_f$relationships2$fie8,_f$field_f_e_left_tex,_f$relationships3,_f$relationships3$fie,_f$relationships3$fie2,_f$relationships3$fie3,_f$relationships3$fie4,_f$relationships3$fie5,_f$relationships3$fie6,_f$relationships3$fie7,_f$relationships3$fie8,_f$field_f_e_right_te,_f$field_twitter_url,_f$field_instagram_ur,_f$field_facebook_url;switch((_f$internal=f.internal)===null||_f$internal===void 0?void 0:_f$internal.type){// case 'paragraph__callout_grid':\n// const cardData = f.relationships.field_callout_grid_items.map(item => {\n// // need alias for featured object\n// const homeGridLink = item.path?.alias ? item.path.alias : '#';\n// const gridImg = chooseImageByCardType(item, fallbackImgLookup);\n// const gridImgProcessed = handleImage(gridImg);\n// return {\n// type: item.relationships?.node_type?.name,\n// title: item.field_display_title,\n// link: homeGridLink,\n// happeningNow: false,\n// image: gridImgProcessed.imgData?.childImageSharp && {\n// imgData: gridImgProcessed.imgData,\n// imgAlt: gridImgProcessed.imgAlt,\n// },\n// site: item.relationships?.field_site,\n// linkType: item.relationships?.node_type?.drupal_internal__type,\n// };\n// });\n// return (\n// <div key={f.id}>\n// <HomeGrid cardData={cardData} position={i} />\n// </div>\n// );\ncase'paragraph__on_view_column':return/*#__PURE__*/react.createElement(HomeColumns,{onView:f,events:data.allNodeEvent.edges,featuredEventData:(_f$relationships=f.relationships)===null||_f$relationships===void 0?void 0:_f$relationships.field_featured_event});case'paragraph__most_loved_cta_slider':var mostLovedSliderData=f.relationships.field_most_loved_slides.map(function(item){var _item$relationships,_thisSliderItem$path,_thisSliderItem$path2,_thisSliderItem$relat,_thisSliderItem$relat2,_thisSliderItem$relat3;var externalLink;var externalTitle;var externalImage;if(item.field_callout1_link&&item.relationships.field_image){var _imageProcessed$imgDa;var imageProcessed=(0,handleImages/* handleImage */.cP)(item.relationships.field_image);externalLink=item.field_callout1_link.uri;externalTitle=item.field_callout1_link.title;externalImage=((_imageProcessed$imgDa=imageProcessed.imgData)===null||_imageProcessed$imgDa===void 0?void 0:_imageProcessed$imgDa.childImageSharp)&&{imgData:imageProcessed.imgData,imgAlt:imageProcessed.imgAlt};}var thisSliderItem=(_item$relationships=item.relationships)===null||_item$relationships===void 0?void 0:_item$relationships.field_most_loved_slider_item;var gridImg=(0,handleImages/* chooseImageByCardType */.wq)(thisSliderItem,fallbackImgLookup);var gridImgProcessed=(0,handleImages/* handleImage */.cP)(gridImg);// need alias for featured object\nvar mostLovedLink=thisSliderItem!==null&&thisSliderItem!==void 0&&(_thisSliderItem$path=thisSliderItem.path)!==null&&_thisSliderItem$path!==void 0&&_thisSliderItem$path.alias?thisSliderItem===null||thisSliderItem===void 0?void 0:(_thisSliderItem$path2=thisSliderItem.path)===null||_thisSliderItem$path2===void 0?void 0:_thisSliderItem$path2.alias:'#';return{// type: thisSliderItem?.relationships?.node_type?.name,\ntitle:externalTitle?externalTitle:thisSliderItem===null||thisSliderItem===void 0?void 0:thisSliderItem.field_display_title,link:externalLink?externalLink:mostLovedLink,happeningNow:false,image:externalImage?{imgData:externalImage.imgData,imgAlt:externalImage.imgAlt}:{imgData:gridImgProcessed.imgData,imgAlt:gridImgProcessed.imgAlt},site:thisSliderItem===null||thisSliderItem===void 0?void 0:(_thisSliderItem$relat=thisSliderItem.relationships)===null||_thisSliderItem$relat===void 0?void 0:_thisSliderItem$relat.field_site,linkType:thisSliderItem===null||thisSliderItem===void 0?void 0:(_thisSliderItem$relat2=thisSliderItem.relationships)===null||_thisSliderItem$relat2===void 0?void 0:(_thisSliderItem$relat3=_thisSliderItem$relat2.node_type)===null||_thisSliderItem$relat3===void 0?void 0:_thisSliderItem$relat3.drupal_internal__type};});return/*#__PURE__*/react.createElement(\"div\",{key:f.id,className:\"c-homepage__most-loved\"},/*#__PURE__*/react.createElement(MostLoved_MostLoved,{title:f.field_most_loved_title,subhead:f.field_most_loved_subhead,sliderEyebrow:f.field_most_loved_slider_eyebrow_,sliderHeader:f.field_most_loved_slider_header,ctas:f.field_most_loved_link,sliderData:mostLovedSliderData}));case'paragraph__i_m_into_stories_slider':var storiesSliderData=f.relationships.field_stories_slider_items.map(function(item){var _item$path,_item$relationships3,_item$relationships3$,_item$relationships4,_item$relationships5,_item$relationships5$,_gridImgProcessed$img;// need alias for featured object\nvar storiesLink=(_item$path=item.path)===null||_item$path===void 0?void 0:_item$path.alias;var storyTopics;if(item.relationships.field_story_topic){var _item$relationships2;storyTopics=(_item$relationships2=item.relationships)===null||_item$relationships2===void 0?void 0:_item$relationships2.field_story_topic.map(function(topic){return topic.name;});}var gridImg=(0,handleImages/* chooseImageByCardType */.wq)(item,fallbackImgLookup);var gridImgProcessed=(0,handleImages/* handleImage */.cP)(gridImg);// // force image layout to constrained for this section\n// gridImgProcessed.imgData.childImageSharp.gatsbyImageData.layout = \"constrained\";\n// gridImgProcessed.imgData.childImageSharp.gatsbyImageData.width = 600;\n// gridImgProcessed.imgData.childImageSharp.gatsbyImageData.layout = \"constrained\";\nreturn{type:(_item$relationships3=item.relationships)===null||_item$relationships3===void 0?void 0:(_item$relationships3$=_item$relationships3.node_type)===null||_item$relationships3$===void 0?void 0:_item$relationships3$.name,site:item===null||item===void 0?void 0:(_item$relationships4=item.relationships)===null||_item$relationships4===void 0?void 0:_item$relationships4.field_site,linkType:item===null||item===void 0?void 0:(_item$relationships5=item.relationships)===null||_item$relationships5===void 0?void 0:(_item$relationships5$=_item$relationships5.node_type)===null||_item$relationships5$===void 0?void 0:_item$relationships5$.drupal_internal__type,title:item===null||item===void 0?void 0:item.field_display_title,link:storiesLink,happeningNow:false,storyTag:storyTopics,image:((_gridImgProcessed$img=gridImgProcessed.imgData)===null||_gridImgProcessed$img===void 0?void 0:_gridImgProcessed$img.childImageSharp)&&{imgData:gridImgProcessed.imgData,imgAlt:gridImgProcessed.imgAlt}};});var allStoryTopics=['Everything'];storiesSliderData.forEach(function(item){if(item.storyTag){item.storyTag.length>0&&item.storyTag.forEach(function(topic){return allStoryTopics.push(topic);});}});return/*#__PURE__*/react.createElement(\"div\",{key:f.id},/*#__PURE__*/react.createElement(HomepageStories_HomepageStories,{subtitle:f.field_stories_slider_eyebrow_tex,sliderData:storiesSliderData,tags:allStoryTopics}));case'paragraph__further_exploration_dual_callout':var FurtherExplorationData=[{image:(_f$relationships2=f.relationships)===null||_f$relationships2===void 0?void 0:(_f$relationships2$fie=_f$relationships2.field_f_e_left_image)===null||_f$relationships2$fie===void 0?void 0:(_f$relationships2$fie2=_f$relationships2$fie.relationships)===null||_f$relationships2$fie2===void 0?void 0:(_f$relationships2$fie3=_f$relationships2$fie2.field_media_image)===null||_f$relationships2$fie3===void 0?void 0:(_f$relationships2$fie4=_f$relationships2$fie3.localFile)===null||_f$relationships2$fie4===void 0?void 0:(_f$relationships2$fie5=_f$relationships2$fie4.childImageSharp)===null||_f$relationships2$fie5===void 0?void 0:(_f$relationships2$fie6=_f$relationships2$fie5.gatsbyImageData)===null||_f$relationships2$fie6===void 0?void 0:(_f$relationships2$fie7=_f$relationships2$fie6.images)===null||_f$relationships2$fie7===void 0?void 0:(_f$relationships2$fie8=_f$relationships2$fie7.fallback)===null||_f$relationships2$fie8===void 0?void 0:_f$relationships2$fie8.src,description:(_f$field_f_e_left_tex=f.field_f_e_left_text)===null||_f$field_f_e_left_tex===void 0?void 0:_f$field_f_e_left_tex.processed,eyebrow:f.field_f_e_left_eyebrow_text},{image:(_f$relationships3=f.relationships)===null||_f$relationships3===void 0?void 0:(_f$relationships3$fie=_f$relationships3.f
1ield_f_e_right_image)===null||_f$relationships3$fie===void 0?void 0:(_f$relationships3$fie2=_f$relationships3$fie.relationships)===null||_f$relationships3$fie2===void 0?void 0:(_f$relationships3$fie3=_f$relationships3$fie2.field_media_image)===null||_f$relationships3$fie3===void 0?void 0:(_f$relationships3$fie4=_f$relationships3$fie3.localFile)===null||_f$relationships3$fie4===void 0?void 0:(_f$relationships3$fie5=_f$relationships3$fie4.childImageSharp)===null||_f$relationships3$fie5===void 0?void 0:(_f$relationships3$fie6=_f$relationships3$fie5.gatsbyImageData)===null||_f$relationships3$fie6===void 0?void 0:(_f$relationships3$fie7=_f$relationships3$fie6.images)===null||_f$relationships3$fie7===void 0?void 0:(_f$relationships3$fie8=_f$relationships3$fie7.fallback)===null||_f$relationships3$fie8===void 0?void 0:_f$relationships3$fie8.src,eyebrow:f.field_f_e_right_eyebrow_text,description:(_f$field_f_e_right_te=f.field_f_e_right_text)===null||_f$field_f_e_right_te===void 0?void 0:_f$field_f_e_right_te.processed,twitterUrl:(_f$field_twitter_url=f.field_twitter_url)===null||_f$field_twitter_url===void 0?void 0:_f$field_twitter_url.url,instagramUrl:(_f$field_instagram_ur=f.field_instagram_url)===null||_f$field_instagram_ur===void 0?void 0:_f$field_instagram_ur.url,facebookUrl:(_f$field_facebook_url=f.field_facebook_url)===null||_f$field_facebook_url===void 0?void 0:_f$field_facebook_url.url}];return/*#__PURE__*/react.createElement(FurtherExplorationCallout_FurtherExplorationCallout,{key:f.id,data:FurtherExplorationData});default:break;}return null;});return flexibleContentComponents;};return/*#__PURE__*/react.createElement(Layout/* default */.A,{isHome:true},/*#__PURE__*/react.createElement(\"div\",{className:\"homepage-hero\"},/*#__PURE__*/react.createElement(HomepageHeroPattern_HomepageHeroPattern,{blockText:hero.blockText,cta:hero.cta,image:hero.image,eyebrow:hero.eyebrow})),flexibleContent&&/*#__PURE__*/react.createElement(\"div\",{className:\"c-homepage__flexible-content\"},homepageFlexibleComponents(flexibleContent)));};/* harmony default export */ var Homepage_Homepage = (Homepage);\n;// ./src/templates/Homepage/index.js\n\n;// ./src/pages/index.js\nvar IndexPage=function IndexPage(_ref){var _data$allNodeHomepage,_data$allNodeHomepage2,_data$allBlockContent,_data$allBlockContent2,_data$allBlockContent3,_data$allBlockContent4,_data$allBlockContent5,_data$allBlockContent6,_data$allBlockContent7,_data$allBlockContent8,_fallBackImgData$chil,_fallBackImgData$chil2,_fallBackImgData$chil3,_fallBackImgData$chil4,_homepageData$relatio,_homepageData$relatio2,_homepageData$relatio3,_homepageData$relatio4,_homepageData$relatio5,_homepageData$relatio6,_homepageData$relatio7,_homepageData$relatio8,_homepageData$relatio9;var data=_ref.data;var homepageData=data===null||data===void 0?void 0:(_data$allNodeHomepage=data.allNodeHomepage)===null||_data$allNodeHomepage===void 0?void 0:(_data$allNodeHomepage2=_data$allNodeHomepage.edges[0])===null||_data$allNodeHomepage2===void 0?void 0:_data$allNodeHomepage2.node;// SEO metadata\nvar fallbackSocialData=data===null||data===void 0?void 0:(_data$allBlockContent=data.allBlockContentFallbackSocialText.edges[0])===null||_data$allBlockContent===void 0?void 0:_data$allBlockContent.node;var shortDescriptionFallback=fallbackSocialData===null||fallbackSocialData===void 0?void 0:fallbackSocialData.field_short_description_fallback;var fallBackImgData=data===null||data===void 0?void 0:(_data$allBlockContent2=data.allBlockContentFallbackImagesByType)===null||_data$allBlockContent2===void 0?void 0:(_data$allBlockContent3=_data$allBlockContent2.edges[0])===null||_data$allBlockContent3===void 0?void 0:(_data$allBlockContent4=_data$allBlockContent3.node)===null||_data$allBlockContent4===void 0?void 0:(_data$allBlockContent5=_data$allBlockContent4.relationships)===null||_data$allBlockContent5===void 0?void 0:(_data$allBlockContent6=_data$allBlockContent5.field_global_image_fallback)===null||_data$allBlockContent6===void 0?void 0:(_data$allBlockContent7=_data$allBlockContent6.relationships)===null||_data$allBlockContent7===void 0?void 0:(_data$allBlockContent8=_data$allBlockContent7.field_media_image)===null||_data$allBlockContent8===void 0?void 0:_data$allBlockContent8.localFile;var fallBackImgDataSrc=fallBackImgData?fallBackImgData===null||fallBackImgData===void 0?void 0:(_fallBackImgData$chil=fallBackImgData.childImageSharp)===null||_fallBackImgData$chil===void 0?void 0:(_fallBackImgData$chil2=_fallBackImgData$chil.gatsbyImageData)===null||_fallBackImgData$chil2===void 0?void 0:(_fallBackImgData$chil3=_fallBackImgData$chil2.images)===null||_fallBackImgData$chil3===void 0?void 0:(_fallBackImgData$chil4=_fallBackImgData$chil3.fallback)===null||_fallBackImgData$chil4===void 0?void 0:_fallBackImgData$chil4.src:\"\";var shortDescription=homepageData!==null&&homepageData!==void 0&&homepageData.field_short_description?homepageData===null||homepageData===void 0?void 0:homepageData.field_short_description:shortDescriptionFallback;var nodeFeaturedImgPath=homepageData===null||homepageData===void 0?void 0:(_homepageData$relatio=homepageData.relationships)===null||_homepageData$relatio===void 0?void 0:(_homepageData$relatio2=_homepageData$relatio.field_featured_image)===null||_homepageData$relatio2===void 0?void 0:(_homepageData$relatio3=_homepageData$relatio2.relationships)===null||_homepageData$relatio3===void 0?void 0:(_homepageData$relatio4=_homepageData$relatio3.field_media_image)===null||_homepageData$relatio4===void 0?void 0:(_homepageData$relatio5=_homepageData$relatio4.localFile)===null||_homepageData$relatio5===void 0?void 0:(_homepageData$relatio6=_homepageData$relatio5.childImageSharp)===null||_homepageData$relatio6===void 0?void 0:(_homepageData$relatio7=_homepageData$relatio6.gatsbyImageData)===null||_homepageData$relatio7===void 0?void 0:(_homepageData$relatio8=_homepageData$relatio7.images)===null||_homepageData$relatio8===void 0?void 0:(_homepageData$relatio9=_homepageData$relatio8.fallback)===null||_homepageData$relatio9===void 0?void 0:_homepageData$relatio9.src;
1var seoImage=nodeFeaturedImgPath?nodeFeaturedImgPath:fallBackImgDataSrc;return/*#__PURE__*/react.createElement(react.Fragment,null,/*#__PURE__*/react.createElement(seo/* default */.A,{title:\"M\\xFCtter Museum Home\"// title={nodeData?.field_display_title}\n,description:shortDescription,image:seoImage}),/*#__PURE__*/react.createElement(Homepage_Homepage,{data:data}));};/* harmony default export */ var pages = (IndexPage);var query=\"900757118\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBOzs7QUMvVXdHO0FBQ047QUFDTTtBQUNNO0FBQ1I7QUFDNUQ7QUFDMUMseUJBQXlCLHdCQUF3QixvQ0FBb0MseUNBQXlDLGtDQUFrQywwREFBMEQsMEJBQTBCO0FBQ3BQLDRCQUE0QixnQkFBZ0Isc0JBQXNCLE9BQU8sa0RBQWtELHNEQUFzRCxpQ0FBZSxlQUFlLG1KQUFtSixxRUFBcUUsS0FBSztBQUNwVztBQUMrUjtBQUN2VztBQUNBO0FBQ0EsZUFBZSx3QkFBUztBQUN4QixpQkFBaUIsMEJBQVc7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRkFBbUY7QUFDbkY7QUFDQTtBQUNBLGVBQWUsd0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxxQkFBcUI7QUFDekQ7QU
1FDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULGlDQUFpQyxnQ0FBYztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsY0FBYztBQUMzQyxzQkFBc0IsNkJBQTZCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRSxhQUFhO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkVBQTJFLGVBQWU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRCxvQ0FBa0I7QUFDdkUsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkIsWUFBWSwwQ0FBMEMsWUFBWTtBQUM3Riw2QkFBNkIsWUFBWSx5Q0FBeUMsWUFBWTtBQUM5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGVBQWU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQixJQUFJLGNBQWM7QUFDbEI7O0FBRUE7QUFDQTtBQUNBLElBQUksY0FBYztBQUNsQixJQUFJLGNBQWM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsWUFBWSwwQ0FBMEM7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGdCQUFnQiwwQkFBMEIsZ0JBQWdCO0FBQ3RHLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxTQUFTO0FBQzNEO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QU
1FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix1QkFBdUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixjQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixnRUFBZ0U7QUFDdEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxJQUFJLGNBQWM7QUFDbEIsSUFBSSxjQUFjO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOLGtCQUFrQiw0Q0FBNEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsY0FBYyx5QkFBeUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZUFBZTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsb0NBQWtCO0FBQ2hFO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsb0NBQW9DO0FBQzNFO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixzREFBc0QseURBQXlEO0FBQy9HO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9DQUFrQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFlBQVk7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS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FDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLDBDQUEwQyxlQUFlO0FBQ3pELE1BQU0sUUFBUTtBQUNkO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixlQUFlO0FBQ2hDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLGlCQUFpQixlQUFlO0FBQ2hDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDLHVDQUF1QyxhQUFhLDZDQUE2QyxhQUFhO0FBQzlHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixNQUFNLFdBQVc7QUFDakI7QU
1FDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLE1BQU0sV0FBVztBQUNqQjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxvRkFBb0Y7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxXQUFXO0FBQ2YsSUFBSTtBQUNKLElBQUksV0FBVztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiw0Q0FBNEM7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFVBQVU7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixzQkFBc0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRixpQkFBaUI7QUFDcEc7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU07QUFDTixzRUFBc0UsaUJBQWlCO0FBQ3ZGO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsMEJBQVcsYUFBYSx3QkFBUztBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsd0JBQVM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwwQkFBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdCQUFnQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esd0JBQXdCLEdBQUc7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLDBCQUFXO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixvQ0FBa0I7QUFDcEM7QUFDQSxLQUFLO0FBQ0w7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNEJBQTRCLEdBQUc7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0F
1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQSxJQUFJO0FBQ0osa0JBQWtCLG9DQUFrQjtBQUNwQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLEdBQUc7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLEdBQUc7QUFDMUIsRUFBRSxRQUFRO0FBQ1Y7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9JQUFvSTtBQUNwSTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwwQkFBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwwQkFBVzs7QUFFNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsWUFBTTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx3QkFBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILG9DQUFvQyxvQ0FBa0I7QUFDdEQsMERBQTBELG9DQUFrQjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELG9DQUFrQjtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLFlBQU07QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxZQUFNO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksWUFBTTtBQUNWO0FBQ0E7O0F
1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksaUNBQWU7QUFDbkI7QUFDQTtBQUNBLDJFQUEyRSxlQUFlO0FBQzFGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxZQUFNLEdBQUc7QUFDdEI7QUFDQSxtQkFBbUIsMEJBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFlBQU0sR0FBRztBQUNqQztBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQ0FBa0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7O0FBRUw7QUFDQSx1QkFBdUIsWUFBTSxHQUFHOztBQUVoQztBQUNBLG9CQUFvQixZQUFNLEdBQUc7QUFDN0IsNEJBQTRCLFlBQU0sR0FBRztBQUNyQywwQkFBMEIsWUFBTSxHQUFHOztBQUVuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0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7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsbUJBQ0U5RSxtQkFBQSxDQUFBQSxjQUFBLG1CQUNFQSxtQk
1FBQSxRQUFLNEQsU0FBUyxDQUFDLGFBQWEsZUFDMUI1RCxtQkFBQSxRQUFLNEQsU0FBUyxDQUFDLGtCQUFrQixlQUMvQjVELG1CQUFBLENBQUNpUCxnQ0FBb0IsS0FBRSxDQUNwQixDQUNGLENBSUwsQ0FBQyxDQUVQLEM7O0FDNUxBO0FBR0EsR0FBTSxDQUFBRSxtQkFBbUIsQ0FBRyxRQUF0QixDQUFBQSxtQkFBbUJBLENBQUFqUCxJQUFBLENBQXlDLElBQXBDLENBQUFzQyxLQUFLLENBQUF0QyxJQUFBLENBQUxzQyxLQUFLLENBQUVnTSxTQUFTLENBQUF0TyxJQUFBLENBQVRzTyxTQUFTLENBQUVwTCxHQUFHLENBQUFsRCxJQUFBLENBQUhrRCxHQUFHLENBQUVtTCxPQUFPLENBQUFyTyxJQUFBLENBQVBxTyxPQUFPLENBQzFELElBQUF4RyxTQUFBLENBQWdDSixrQkFBUSxDQUFDLElBQUksQ0FBQyxDQUF2Q3lILFFBQVEsQ0FBQXJILFNBQUEsSUFBRXNILFdBQVcsQ0FBQXRILFNBQUEsSUFFNUIzRCxtQkFBUyxDQUFDLFVBQU0sQ0FDZGlMLFdBQVcsQ0FBQyxjQUFjLEVBQUksQ0FBQUMsUUFBUSxDQUFDQyxlQUFlLEVBQUlDLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDOUYsQ0FBQyxDQUFFLEVBQUUsQ0FBQyxDQUVOLG1CQUNFMVAsbUJBQUEsUUFBSzRELFNBQVMsQ0FBQyxpQkFBaUIsZUFDOUI1RCxtQkFBQSxPQUFJNEQsU0FBUyxDQUFDLFdBQVcsRUFBQyxNQUFRLENBQUMsY0FDbkM1RCxtQkFBQSxRQUFLNEQsU0FBUyxDQUFDLDBCQUEwQixlQUV2QzVELG1CQUFBLFFBQUs0RCxTQUFTLENBQUMsdURBQXVELGVBQ3BFNUQsbUJBQUEsQ0FBQ21DLHdCQUFXLEVBQ1Y0QixHQUFHLENBQUV2QixLQUFLLFNBQUxBLEtBQUssaUJBQUxBLEtBQUssQ0FBRXdCLE1BQU8sQ0FDbkJ4QixLQUFLLENBQUVKLDRCQUFRLENBQUNJLEtBQUssU0FBTEEsS0FBSyxpQ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dBQUcsQ0FBQyxTQUFBNUMsSUFBSSxxQkFDZmQsbUJBQUEsTUFBRzRELFNBQVMsQ0FBQyxzQ0FBc0MsRUFBRTlDLElBQUksQ0FBQ1MsU0FBUyxDQUFDLEdBQUMsQ0FBQ1QsSUFBSSxDQUFDYyxTQUFTLENBQUMsS0FBRyxDQUFDZCxJQUFJLENBQUNrQixPQUFXLENBQUMsRUFFNUcsQ0FFTyxDQUNQLENBQUMsQ0FFVCxDQUFDLENBQ0MsQ0FBRSxjQUNSaEMsbUJBQUEsQ0FBQ3FSLDJCQUFZLEVBQUMyQyxLQUFLLENBQUUsSUFBSyxDQUFDQyxJQUFJLENBQUMsZ0JBQWdCLENBQUNsUixJQUFJLENBQUMsU0FBUyxDQUFFLENBQzlELENBQUMsY0FDTi9DLG1CQUFBLFFBQUs0RCxTQUFTLENBQUMsK0JBQStCLGVBQzVDNUQsbUJBQUEsQ0FBQ21NLDJCQUFhLEtB
1QUUsQ0FBQyxjQUNqQm5NLG1CQUFBLFFBQUs0RCxTQUFTLENBQUMscUNBQXFDLGVBQ2xENUQsbUJBQUEsUUFBSzJOLEdBQUcsQ0FBRWxCLDRCQUFnQixDQUFDMUksR0FBRyxDQUFDLEVBQUUsQ0FBRSxDQUNoQyxDQUNGLENBQ0YsQ0FBQyxDQUVWLEM7O0FDNUpBLEdBQU0sQ0FBQXNRLFFBQVEsQ0FBRyxRQUFYLENBQUFBLFFBQVFBLENBQUFuVSxJQUFBLENBQWlCLEtBQUFvVSxxQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxrQkFBQSxDQUFBQyxxQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyxzQkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyx1QkFBQSxDQUFBQyxxQkFBQSxJQUFYLENBQUF0USxJQUFJLENBQUE3RixJQUFBLENBQUo2RixJQUFJLENBQ3RCLEdBQU0sQ0FBQXVRLFlBQVksQ0FBR3ZRLElBQUksU0FBSkEsSUFBSSxrQkFBQXVPLHFCQUFBLENBQUp2TyxJQUFJLENBQUV3USxlQUFlLFVBQUFqQyxxQkFBQSxrQkFBQUMsc0JBQUEsQ0FBckJELHFCQUFBLENBQXVCa0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFBakMsc0JBQUEsaUJBQS9CQSxzQkFBQSxDQUFpQ2hDLElBQUksQ0FDMUQsR0FBTSxDQUFBa0UsU0FBUyxDQUFHdEMsd0NBQWUsQ0FBQ21DLFlBQVksQ0FBQyxDQUUvQyxHQUFNLENBQUFJLElBQUksQ0F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UFBLGtCQUFBQyxzQkFBQSxDQUFoRUQsc0JBQUEsQ0FBa0VuQixpQkFBaUIsVUFBQW9CLHNCQUFBLGtCQUFBQyxzQkFBQSxDQUFuRkQsc0JBQUEsQ0FBcUZuQixTQUFTLFVBQUFvQixzQkFBQSxrQkFBQUMsc0JBQUEsQ0FBOUZELHNCQUFBLENBQ0lyTyxlQUFlLFVBQUFzTyxzQkFBQSxrQkFBQUMsc0JBQUEsQ0FEbkJELHNCQUFBLENBQ3FCck8sZUFBZSxVQUFBc08sc0JBQUEsa0JBQUFDLHNCQUFBLENBRHBDRCxzQkFBQSxDQUNzQ3JPLE1BQU0sVUFBQXNPLHNCQUFBLGtCQUFBQyxzQkFBQSxDQUQ1Q0Qsc0JBQUEsQ0FDOENyTyxRQUFRLFVBQUFzTyxzQkFBQSxpQkFEdERBLHNCQUFBLENBQ3dEMVEsR0FBRyxDQUM3RCxHQUFNLENBQUFvUixRQUFRLENBQUdELG1CQUFtQixDQUFHQSxtQkFBbUIsQ0FBR0gsa0JBQWtCLENBRS9FLG1CQUNFM2UsbUJBQUEsQ0FBQUEsY0FBQSxtQk
1FDRUEsbUJBQUEsQ0FBQ3dkLGtCQUFHLEVBQ0ZqYixLQUFLLENBQUMsdUJBQ047QUFBQSxDQUNBb08sV0FBVyxDQUFFaU8sZ0JBQWlCLENBQzlCcGMsS0FBSyxDQUFFdWMsUUFBUyxDQUNqQixDQUFDLGNBQ0YvZSxtQkFBQSxDQUFDcVUsaUJBQVEsRUFBQ3RPLElBQUksQ0FBRUEsSUFBSyxDQUFFLENBQ3ZCLENBQUMsQ0FFUCxDQUFDLENBRUQsMENBQWUwWCxTQUFTLEVBRWpCLEdBQU0sQ0FBQXVCLEtBQUssWUF5SWpCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL0ljb25zL1NsaWRlckFycm93LmpzP2UzNTYiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy91dGlscy9oYW5kbGVUaW1lLmpzP2EyNGUiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL0hvbWVHcmlkQ2FyZC9Ib21lR3JpZENhcmQuanM/MDhkYyIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzPzlkNzkiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL3Nzci13aW5kb3cuZXNtLm1qcz9mYTE2Iiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC91dGlscy5tanM/NTZiYiIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvc3dpcGVyLWNvcmUubWpzPzBjYTMiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL3VwZGF0ZS1zd2lwZXIubWpzP2VmM2MiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL3VwZGF0ZS1vbi12aXJ0dWFsLWRhdGEubWpzP2Q4MjgiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc3dpcGVyLXJlYWN0Lm1qcz8wZWZiIiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9ub2RlX21vZHVsZXMvc3dpcGVyL3N3aXBlci5tanM/MjYyZSIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvU2xpZGVyU3dpcGVyL1NsaWRlclN3aXBlci5qcz8zYmE1Iiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9TbGlkZXJXYXRjaGVyL1NsaWRlcldhdGNoZXIuanM/OTBlOSIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvU2xpZGVyL1NsaWRlci5qcz8wMmZmIiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9TcGxpdFRleHQvU3BsaXRUZXh0LmpzPzU0ZTYiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL01vc3RMb3ZlZEhlYXJ0L01vc3RMb3ZlZEhlYXJ0LmpzPzJhOTkiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL01vc3RMb3ZlZENvbnRlbnQvTW9zdExvdmVkQ29udGVudC5qcz84ODk0Iiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9Nb3N0TG92ZWQvTW9zdExvdmVkLmpzP2RkYTIiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL1NjYW5UZXh0dXJlVW5tYXNrL1NjYW5UZXh0dXJlVW5tYXNrLmpzPzExMDQiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL0hvbWVwYWdlU3Rvcmllcy9Ib21lcGFnZVN0b3JpZXMuanM/MDMwOCIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvSW5WaWV3V2F0Y2hlci9JblZpZXdXYXRjaGVyLmpzP2JmMzIiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL1ZlaW5zVGV4dHVyZVVubWFzay9WZWluc1RleHR1cmVVbm1hc2suanM/ZDA4ZCIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvSG9tZUdyaWQvSG9tZUdyaWQuanM/YmNlMSIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvSG9tZXBhZ2VIZXJvVGl0bGVDYXJkL0hvbWVwYWdlSGVyb1RpdGxlQ2FyZC5qcz81OWE4Iiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9Ib21lcGFnZUlsbHVzdHJhdGlvbi9Ib21lcGFnZUlsbHVzdHJhdGlvbi5qcz9kNjQ4Iiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9Ib21lcGFnZUhlcm9EaXNzb2x2ZXIvSG9tZXBhZ2VIZXJvRGlzc29sdmVyLmpzPzhhMTIiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL0hvbWVwYWdlSGVyb1BhdHRlcm4vSG9tZXBhZ2VIZXJvUGF0dGVybi5qcz8yMmMwIiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9Ib21lcGFnZUhlcm9QYXR0ZXJuL2luZGV4LmpzP2I1MjkiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9jb21wb25lbnRzL0Z1cnRoZXJFeHBsb3JhdGlvbkNhcmQvRnVydGhlckV4cGxvcmF0aW9uQ2FyZC5qcz9iYjU2Iiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvY29tcG9uZW50cy9GdXJ0aGVyRXhwbG9yYXRpb25DYWxsb3V0L0Z1cnRoZXJFeHBsb3JhdGlvbkNhbGxvdXQuanM/MTExNSIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvSG9tZUNvbHVtbnMvSG9tZUNvbHVtbnMuanM/YTQ2YSIsIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL3RlbXBsYXRlcy9Ib21lcGFnZS9Ib21lcGFnZS5qcz82MThmIiwid2VicGFjazovL2NwcC1tdXR0ZXIvLi9zcmMvdGVtcGxhdGVzL0hvbWVwYWdlL2luZGV4LmpzP2VkMzUiLCJ3ZWJwYWNrOi8vY3BwLW11dHRlci8uL3NyYy9wYWdlcy9pbmRleC5qcz80NTcwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFNsaWRlckFycm93ID0gKHtjb2xvcn0pID0+IChcbiAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMjdcIiB2aWV3Qm94PVwiMCAwIDE2IDI3XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgPHBhdGggZD1cIk0xNC44NTk0IDFMMi4wMDAxMiAxMy41MjIyTDE0Ljg1OTQgMjYuMDQ0NFwiIHN0cm9rZT17Y29sb3J9IHN0cm9rZVdpZHRoPVwiMlwiIC8+XG4gIDwvc3ZnPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgU2xpZGVyQXJyb3c7XG4iLCJleHBvcnQgZnVuY3Rpb24gZ2V0Q2FyZERhdGVzKGRhdGUpIHtcbiAgY29uc3QgZCA9IG5ldyBEYXRlKGRhdGUudmFsdWUpO1xuICBjb25zdCBlbmREI
1D0gbmV3IERhdGUoZGF0ZS5lbmRfdmFsdWUpO1xuICBjb25zdCB1dGNEYXRlU3RyaW5nID0gbmV3IERhdGUoZCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgdGltZVpvbmU6ICdVVEMnIH0pO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IHtcbiAgICBzdGFydERhdGU6IGQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgdGltZVpvbmU6ICdVVEMnLCB5ZWFyOiAnbnVtZXJpYycsIG1vbnRoOiAnbG9uZycsIGRheTogJ251bWVyaWMnIH0pLFxuICAgIGVuZERhdGU6IGVuZEQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHsgdGltZVpvbmU6ICdVVEMnLCB5ZWFyOiAnbnVtZXJpYycsIG1vbnRoOiAnbG9uZycsIGRheTogJ251bWVyaWMnIH0pLFxuICAgIHN0YXJ0VGltZTogZC50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgdGltZVpvbmU6ICdVVEMnLCBob3VyOiBcIjItZGlnaXRcIiwgbWludXRlOiBcIjItZGlnaXRcIiB9KSxcbiAgICBlbmRUaW1lOiBlbmRELnRvTG9jYWxlVGltZVN0cmluZyhbXSwgeyB0aW1lWm9uZTogJ1VUQycsIGhvdXI6IFwiMi1kaWdpdFwiLCBtaW51dGU6IFwiMi1kaWdpdFwiIH0pXG4gIH1cblxuICByZXR1cm4gZm9ybWF0dGVkO1xufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEFycm93IGZyb20gJy4uL0ljb25zL0Fycm93JztcbmltcG9ydCBPcmdMaW5rIGZyb20gJy4uL09yZ0xpbmsvT3JnTGluayc7XG5pbXBvcnQgeyBHYXRzYnlJbWFnZSwgZ2V0SW1hZ2UgfSBmcm9tICdnYXRzYnktcGx1Z2luLWltYWdlJztcbmltcG9ydCB7IGdldENhcmREYXRlcyB9IGZyb20gJy4uLy4uL3V0aWxzL2hhbmRsZVRpbWUnO1xuXG5jb25zdCBIb21lR3JpZENhcmQgPSAoeyB0eXBlLCB0aXRsZSwgaW1hZ2UsIGRhdGVzLCBldmVudD1mYWxzZSwgb25WaWV3PWZhbHNlLCBkaXNwbGF5RGF0ZVRleHQsIGxpbmssIGhhcHBlbmluZ05vdywgc2xpZGVyLCBxdW90ZSwgYXR0cmlidXRpb24sIGN0YSwgc2l0ZSwgbGlua1R5cGUsIGZlYXR1cmVkIH0pID0+IHtcbiAgXG4gIC8vIEdldCBkYXRlcyBmb3IgZXhoaWJpdGlvbiBhbmQgZXZlbnQgY2FyZHNcbiAgY29uc3QgZGF0ZUxpc3QgPSBbXTtcblxuICBpZiAoZGF0ZXMpIHtcbiAgICBpZiAoZGF0ZXMubGVuZ3RoKSB7XG4gICAgICBkYXRlcy5tYXAoZGF0ZSA9PiB7XG4gICAgICAgIGRhdGVMaXN0LnB1c2goZ2V0Q2FyZERhdGVzKGRhdGUpKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZUxpc3QucHVzaChnZXRDYXJkRGF0ZXMoZGF0ZXMpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPE9yZ0xpbmsgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWQtY2FyZCB1LWhvdmVyLXRleHQtcGFyZW50XCIgdG89e2xpbmt9IHNpdGU9e3NpdGV9IHR5cGU9e2xpbmtUeXBlfT5cbiAgICAgIHtpbWFnZSAmJiBpbWFnZS5pbWdEYXRhICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17YGMtaG9tZS1ncmlkLWNhcmRfX2ltYWdlICR7c2xpZGVyID8gJ2MtaG9tZS1ncmlkLWNhcmRfX2ltYWdlLXNsaWRlcicgOiAnJ31gfVxuICAgICAgICA+XG4gICAgICAgICAgPEdhdHNieUltYWdlXG4gICAgICAgICAgICBhbHQ9e2ltYWdlLmltZ0FsdCA/IGltYWdlLmltZ0FsdCA6ICcnfVxuICAgICAgICAgICAgaW1hZ2U9e2dldEltYWdlKGltYWdlLmltZ0RhdGEpfVxuICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWQtY2FyZF9fdGV4dC13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWQtY2FyZF9fdGV4dFwiPlxuICAgICAgICA8aDNcbiAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgc2xpZGVyXG4gICAgICAgICAgICAgID8gJ2YtaGVhZGluZy00IGMtaG9tZS1ncmlkLWNhcmRfX3RpdGxlLXNsaWRlcidcbiAgICAgICAgICAgICAgOiAnZi1oZWFkaW5nLTQgYy1ob21lLWdyaWQtY2FyZF9fdGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzTmFtZT17YHUtaG92ZXItdGV4dCB1LWhvdmVyLXRleHQtLXN0cm9uZyAke3NsaWRlciA/ICd1LWhvdmVyLXRleHQtLXdoaXRlJyA6ICcnfWB9XG4gICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHRpdGxlIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9oMz5cbiAgICAgICAge2hhcHBlbmluZ05vdyAmJiAoXG4gICAgICAgICAgPHBcbiAgICAgICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgIHNsaWRlclxuICAgICAgICAgICAgICAgID8gJ2YtdGFnIGMtaG9tZS1ncmlkLWNhcmRfX2hhcHBlbmluZy1zbGlkZXInXG4gICAgICAgICAgICAgICAgOiAnZi10YWcgYy1ob21lLWdyaWQtY2FyZF9faGFwcGVuaW5nJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEhhcHBlbmluZyBOb3dcbiAgICAgICAgICA8L3A+XG4gICAgICAgICl9XG4gICAgICAgIHtmZWF0dXJlZCAmJiAoXG4gICAgICAgICAgPHAgY2xhc3NOYW1lPSdmLXRhZyBjLWhvbWUtZ3JpZC1jYXJkX19mZWF0dXJlZCc+XG4gICAgICAgICAgICBGRUFUVVJFRFxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKX1cbiAgICAgICAge3R5cGUgJiYgKDxwXG4gICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgIHNsaWRlciA/ICdmLXN1YnRhZyBjLWhvbWUtZ3JpZC1jYXJkX190eXBlLXNsaWRlcicgOiAnZi1zdWJ0YWcgYy1ob21lLWdyaWQtY2FyZF9fdHlwZSdcbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICB7dHlwZSA9PT0gJ1ZpZGVvIEl0ZW0nID8gJ1ZpZGVvJyA6IHR5cGV9XG4gICAgICAgIDwvcD4pfVxuICAgICAgICB7ZGlzcGxheURhdGVUZXh0ICYmIChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZi1ib2R5LXNtIGMtaG9tZS1ncmlkLWNhcmRfX2RhdGUnPntkaXNwbGF5RGF0ZVRleHR9PC9wPlxuICAgICAgICApfVxuICAgICAgICB7KGRhdGVzICYmICFkaXNwbGF5RGF0ZVRleHQgJiYgZXZlbnQpICYmIChcbiAgICAgICAgICBkYXRlTGlzdC5tYXAoZGF0ZSA9PiAoXG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9J2YtYm9keS1zbSBjLWhvbWUtZ3JpZC1jYXJkX19kYXRlJz57ZGF0ZS5zdGFydERhdGV9IHtkYXRlLnN0YXJ0VGltZX0gLSB7ZGF0ZS
15lbmRUaW1lfTwvcD5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICl9XG5cbiAgICAgICAgeyhkYXRlcyAmJiAhZGlzcGxheURhdGVUZXh0ICYmIG9uVmlldykgJiYgKFxuICAgICAgICAgIGRhdGVMaXN0Lm1hcChkYXRlID0+IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT0nZi1ib2R5LXNtIGMtaG9tZS1ncmlkLWNhcmRfX2RhdGUnPntkYXRlLnN0YXJ0RGF0ZX0gLSB7ZGF0ZS5lbmREYXRlfTwvcD5cbiAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeyFzbGlkZXIgJiYgKFxuICAgICAgICAgIDxkaXYgdG89e2xpbmt9IGNsYXNzTmFtZT1cImYtYm9keS1zbSBjLWhvbWUtZ3JpZC1jYXJkX19hcnJvd1wiPlxuICAgICAgICAgICAgPEFycm93IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L09yZ0xpbms+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBIb21lR3JpZENhcmQ7XG5cbkhvbWVHcmlkQ2FyZC5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMubnVtYmVyLFxuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW1hZ2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW1nQWx0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGltZ0RhdGE6IFByb3BUeXBlcy5vYmplY3QsXG4gIH0pLFxuICBoYXBwZW5pbmdOb3c6IFByb3BUeXBlcy5ib29sLFxufTsiLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsIi8qKlxuICogU1NSIFdpbmRvdyA1LjAuMVxuICogQmV0dGVyIGhhbmRsaW5nIGZvciB3aW5kb3cgb2JqZWN0IGluIFNTUiBlbnZpcm9ubWVudFxuICogaHR0cHM6Ly9naXRodWIuY29tL25vbGltaXRzNHdlYi9zc3Itd2luZG93XG4gKlxuICogQ29weXJpZ2h0IDIwMjUsIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgTUlUXG4gKlxuICogUmVsZWFzZWQgb246IEp1bmUgMjcsIDIwMjVcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICdjb25zdHJ1Y3RvcicgaW4gb2JqICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICB2YXIgdGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIHNyYyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHZhciBub0V4dGVuZCA9IFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddO1xuICBPYmplY3Qua2V5cyhzcmMpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG5vRXh0ZW5kLmluZGV4T2Yoa2V5KSA8IDA7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gPT09ICd1bmRlZmluZWQnKSB0YXJnZXRba2V5XSA9IHNyY1trZXldO2Vsc2UgaWYgKGlzT2JqZWN0KHNyY1trZXldKSAmJiBpc09iamVjdCh0YXJnZXRba2V5XSkgJiYgT2JqZWN0LmtleXMoc3JjW2tleV0pLmxlbmd0aCA+IDApIHtcbiAgICAgIGV4dGVuZCh0YXJnZXRba2V5XSwgc3JjW2tleV0pO1xuICAgIH1cbiAgfSk7XG59XG52YXIgc3NyRG9jdW1lbnQgPSB7XG4gIGJvZHk6IHt9LFxuICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKCkge30sXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7fSxcbiAgYWN0aXZlRWxlbWVudDoge1xuICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7fSxcbiAgICBub2RlTmFtZTogJydcbiAgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24gcXVlcnlTZWxlY3RvcigpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbCgpIHtcbiAgICByZXR1cm4gW107XG4gIH0sXG4gIGdldEVsZW1lbnRCeUlkOiBmdW5jdGlvbiBnZXRFbGVtZW50QnlJZCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgY3JlYXRlRXZlbnQ6IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbml0RXZlbnQ6IGZ1bmN0aW9uIGluaXRFdmVudCgpIHt9XG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICBzdHlsZToge30sXG4gICAgICBzZXRBdHRyaWJ1dGU6IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZSgpIHt9LFxuICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWU6IGZ1bmN0aW9uIGdldEVsZW1lbnRzQnlUYWdOYW1lKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgY3JlYXRlRWxlbWVudE5TOiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9LFxuICBpbXBvcnROb2RlOiBmdW5jdGlvbiBpbXBvcnROb2RlKCkge1xuICAgIHJldHVybi
1BudWxsO1xuICB9LFxuICBsb2NhdGlvbjoge1xuICAgIGhhc2g6ICcnLFxuICAgIGhvc3Q6ICcnLFxuICAgIGhvc3RuYW1lOiAnJyxcbiAgICBocmVmOiAnJyxcbiAgICBvcmlnaW46ICcnLFxuICAgIHBhdGhuYW1lOiAnJyxcbiAgICBwcm90b2NvbDogJycsXG4gICAgc2VhcmNoOiAnJ1xuICB9XG59O1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG4gIHZhciBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB7fTtcbiAgZXh0ZW5kKGRvYywgc3NyRG9jdW1lbnQpO1xuICByZXR1cm4gZG9jO1xufVxudmFyIHNzcldpbmRvdyA9IHtcbiAgZG9jdW1lbnQ6IHNzckRvY3VtZW50LFxuICBuYXZpZ2F0b3I6IHtcbiAgICB1c2VyQWdlbnQ6ICcnXG4gIH0sXG4gIGxvY2F0aW9uOiB7XG4gICAgaGFzaDogJycsXG4gICAgaG9zdDogJycsXG4gICAgaG9zdG5hbWU6ICcnLFxuICAgIGhyZWY6ICcnLFxuICAgIG9yaWdpbjogJycsXG4gICAgcGF0aG5hbWU6ICcnLFxuICAgIHByb3RvY29sOiAnJyxcbiAgICBzZWFyY2g6ICcnXG4gIH0sXG4gIGhpc3Rvcnk6IHtcbiAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIHJlcGxhY2VTdGF0ZSgpIHt9LFxuICAgIHB1c2hTdGF0ZTogZnVuY3Rpb24gcHVzaFN0YXRlKCkge30sXG4gICAgZ286IGZ1bmN0aW9uIGdvKCkge30sXG4gICAgYmFjazogZnVuY3Rpb24gYmFjaygpIHt9XG4gIH0sXG4gIEN1c3RvbUV2ZW50OiBmdW5jdGlvbiBDdXN0b21FdmVudCgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYWRkRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxuICByZW1vdmVFdmVudExpc3RlbmVyOiBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXG4gIGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIGdldFByb3BlcnR5VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBJbWFnZTogZnVuY3Rpb24gSW1hZ2UoKSB7fSxcbiAgRGF0ZTogZnVuY3Rpb24gRGF0ZSgpIHt9LFxuICBzY3JlZW46IHt9LFxuICBzZXRUaW1lb3V0OiBmdW5jdGlvbiBzZXRUaW1lb3V0KCkge30sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24gY2xlYXJUaW1lb3V0KCkge30sXG4gIG1hdGNoTWVkaWE6IGZ1bmN0aW9uIG1hdGNoTWVkaWEoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9LFxuICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9LFxuICBjYW5jZWxBbmltYXRpb25GcmFtZTogZnVuY3Rpb24gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpIHtcbiAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNsZWFyVGltZW91dChpZCk7XG4gIH1cbn07XG5mdW5jdGlvbiBnZXRXaW5kb3coKSB7XG4gIHZhciB3aW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9O1xuICBleHRlbmQod2luLCBzc3JXaW5kb3cpO1xuICByZXR1cm4gd2luO1xufVxuZXhwb3J0IHsgZ2V0V2luZG93IGFzIGEsIGdldERvY3VtZW50IGFzIGcgfTsiLCJpbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCIvb3B0L2J1aWxkL3JlcG8vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCIvb3B0L2J1aWxkL3JlcG8vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzXCI7XG5pbXBvcnQgeyBhIGFzIGdldFdpbmRvdywgZyBhcyBnZXREb2N1bWVudCB9IGZyb20gJy4vc3NyLXdpbmRvdy5lc20ubWpzJztcbmZ1bmN0aW9uIGNsYXNzZXNUb1Rva2VucygpIHtcbiAgdmFyIGNsYXNzZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICByZXR1cm4gY2xhc3Nlcy50cmltKCkuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gISFjLnRyaW0oKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkZWxldGVQcm9wcyhvYmopIHtcbiAgdmFyIG9iamVjdCA9IG9iajtcbiAgT2JqZWN0LmtleXMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqZWN0W2tleV0gPSBudWxsO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vIGdldHRlciBmb3Igb2JqZWN0XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkZWxldGUgb2JqZWN0W2tleV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc29tZXRoaW5nIGdvdCB3cm9uZ1xuICAgIH1cbiAgfSk7XG59XG5mdW5jdGlvbiBuZXh0VGljayhjYWxsYmFjaykge1xuICB2YXIgZGVsYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHJldHVybiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSk7XG59XG5mdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBEYXRlLm5vdygpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBzdHlsZTtcbiAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKSB7XG4gICAgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCk7XG4gIH1cbiAgaWYgKCFzdHlsZSAmJiBlbC5jdXJyZW50U3R5bGUpIHtcbiAgICBzdHlsZSA9IGVsLmN1cnJlbnRTdHlsZTtcbiAgfVxuICBpZiAoIXN0eWxlKSB7XG4gICAgc3R5bGUgPSBlbC5zdHlsZTtcbiAgfVxuICByZXR1cm4gc3R5bGU7XG59XG5mdW5jdGlvbiBnZXRUcmFuc2xhdGUoZWwpIHtcbiAgdmFyIGF4aXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd4JztcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgbWF0cml4O1xuICB2YXIgY3VyVHJhbnNmb3JtO1xuICB2YXIgdHJhbnNmb3JtTWF0cml4O1xuICB2YXIgY3VyU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgaWYgKHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgpIHtcbiAgICBjdXJUcmFuc2Zvcm0gPSBjdXJTdHlsZS50cmFuc2Zvcm0gfHwgY3VyU3R5bGUud2Via2l0VHJhbnNmb3JtO1xuICAgIGlmIChjdXJUcmFuc2Zvcm0uc3BsaXQoJywnKS5sZW5ndGggPiA2KSB7XG4gICAgICBjdXJUcmFuc2Zvcm0gPSBjdXJUcmFuc2Zvcm0uc3BsaXQoJywgJykubWFwKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgI
1HJldHVybiBhLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9XG4gICAgLy8gU29tZSBvbGQgdmVyc2lvbnMgb2YgV2Via2l0IGNob2tlIHdoZW4gJ25vbmUnIGlzIHBhc3NlZDsgcGFzc1xuICAgIC8vIGVtcHR5IHN0cmluZyBpbnN0ZWFkIGluIHRoaXMgY2FzZVxuICAgIHRyYW5zZm9ybU1hdHJpeCA9IG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KGN1clRyYW5zZm9ybSA9PT0gJ25vbmUnID8gJycgOiBjdXJUcmFuc2Zvcm0pO1xuICB9IGVsc2Uge1xuICAgIHRyYW5zZm9ybU1hdHJpeCA9IGN1clN0eWxlLk1velRyYW5zZm9ybSB8fCBjdXJTdHlsZS5PVHJhbnNmb3JtIHx8IGN1clN0eWxlLk1zVHJhbnNmb3JtIHx8IGN1clN0eWxlLm1zVHJhbnNmb3JtIHx8IGN1clN0eWxlLnRyYW5zZm9ybSB8fCBjdXJTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCd0cmFuc2Zvcm0nKS5yZXBsYWNlKCd0cmFuc2xhdGUoJywgJ21hdHJpeCgxLCAwLCAwLCAxLCcpO1xuICAgIG1hdHJpeCA9IHRyYW5zZm9ybU1hdHJpeC50b1N0cmluZygpLnNwbGl0KCcsJyk7XG4gIH1cbiAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgaWYgKHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgpIGN1clRyYW5zZm9ybSA9IHRyYW5zZm9ybU1hdHJpeC5tNDE7XG4gICAgLy8gQ3JhenkgSUUxMCBNYXRyaXhcbiAgICBlbHNlIGlmIChtYXRyaXgubGVuZ3RoID09PSAxNikgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbMTJdKTtcbiAgICAvLyBOb3JtYWwgQnJvd3NlcnNcbiAgICBlbHNlIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzRdKTtcbiAgfVxuICBpZiAoYXhpcyA9PT0gJ3knKSB7XG4gICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkgY3VyVHJhbnNmb3JtID0gdHJhbnNmb3JtTWF0cml4Lm00MjtcbiAgICAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxM10pO1xuICAgIC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgIGVsc2UgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNV0pO1xuICB9XG4gIHJldHVybiBjdXJUcmFuc2Zvcm0gfHwgMDtcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBvICE9PSBudWxsICYmIG8uY29uc3RydWN0b3IgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKSA9PT0gJ09iamVjdCc7XG59XG5mdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbiAgfVxuICByZXR1cm4gbm9kZSAmJiAobm9kZS5ub2RlVHlwZSA9PT0gMSB8fCBub2RlLm5vZGVUeXBlID09PSAxMSk7XG59XG5mdW5jdGlvbiBleHRlbmQoKSB7XG4gIHZhciB0byA9IE9iamVjdChhcmd1bWVudHMubGVuZ3RoIDw9IDAgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMF0pO1xuICB2YXIgbm9FeHRlbmQgPSBbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgbmV4dFNvdXJjZSA9IGkgPCAwIHx8IGFyZ3VtZW50cy5sZW5ndGggPD0gaSA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1tpXTtcbiAgICBpZiAobmV4dFNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIG5leHRTb3VyY2UgIT09IG51bGwgJiYgIWlzTm9kZShuZXh0U291cmNlKSkge1xuICAgICAgdmFyIGtleXNBcnJheSA9IE9iamVjdC5rZXlzKE9iamVjdChuZXh0U291cmNlKSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIG5vRXh0ZW5kLmluZGV4T2Yoa2V5KSA8IDA7XG4gICAgICB9KTtcbiAgICAgIGZvciAodmFyIG5leHRJbmRleCA9IDAsIGxlbiA9IGtleXNBcnJheS5sZW5ndGg7IG5leHRJbmRleCA8IGxlbjsgbmV4dEluZGV4ICs9IDEpIHtcbiAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuICAgICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkICYmIGRlc2MuZW51bWVyYWJsZSkge1xuICAgICAgICAgIGlmIChpc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgIGlmIChuZXh0U291cmNlW25leHRLZXldLl9fc3dpcGVyX18pIHtcbiAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXh0ZW5kKHRvW25leHRLZXldLCBuZXh0U291cmNlW25leHRLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFpc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgIHRvW25leHRLZXldID0ge307XG4gICAgICAgICAgICBpZiAobmV4dFNvdXJjZVtuZXh0S2V5XS5fX3N3aXBlcl9fKSB7XG4gICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvO1xufVxuZnVuY3Rpb24gc2V0Q1NTUHJvcGVydHkoZWwsIHZhck5hbWUsIHZhclZhbHVlKSB7XG4gIGVsLnN0eWxlLnNldFByb3BlcnR5KHZhck5hbWUsIHZhclZhbHVlKTtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVDU1NNb2RlU2Nyb2xsKF9yZWYpIHtcbiAgdmFyIHN3aXBlciA9IF9yZWYuc3dpcGVyLFxuICAgIHRhcmdldFBvc2l0aW9uID0gX3JlZi50YXJnZXRQb3NpdGlvbixcbiAgICBzaWRlID0gX3JlZi5zaWRlO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBzdGFydFBvc2l0aW9uID0gLXN3aXBlci50cmFuc2xhdGU7XG4gIHZhciBzdGFydFRpbWUgPSBudWxsO1xuICB2YXIgdGltZTtcbiAgdmFyIGR1cmF0aW9uID0gc3dpcGVyLnBhcmFtcy5zcGVlZDtcbiAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICdub25lJztcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHN3aXBlci5jc3NNb2RlRnJhbWVJRCk7XG4gIHZhciBkaXIgPSB0YXJnZXRQb3NpdGlvbiA+IHN0YXJ0UG9zaXRpb24gPyAnbmV4dCcgOiAncHJldic7XG4gIHZhciBpc091dE9mQm91bmQgPSBmdW5jdGlvbiBpc091dE9mQm91bmQoY3VycmVudCwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIGRpciA9PT0gJ25leHQnICYmIGN1cnJlbnQgPj0gdGFyZ2V0IHx8IGRpciA9PT0gJ3ByZXYnICYmIGN1cnJlbnQgPD0gdGFyZ2V0O1xuICB9O1xuICB2YXIgX2FuaW1hdGUgPSBmdW5jdGlvbiBhbmltYXRlKCkge1xuICAgIHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBpZiAoc3RhcnRUaW1lID09PSBudWxsKSB7XG4gICAgICBzdGFydFRpbWUgPSB0aW1lO1xuICAgIH1cbiAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBkdXJhdGlvbiwgMSksIDApO1xuICAgIHZhciBlYXNlUHJvZ3Jlc3MgPSAwLjUgLSBNYXRoLmNvcyhwcm9ncmVzcyAqIE1hdGguUEkpIC8gMjtcbiAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGVhc2VQcm9ncmVzcyAqICh0YXJnZXRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pO1xuICAgIGlmIChpc091dE9mQm91bmQoY3VycmVudFBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbikpIHtcbiAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHRhcmdldFBvc2l0aW9uO1xuICAgIH1cbiAgICBzd2lwZXIud3JhcHBlckVsLnNjcm9sbFRvKF9kZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgY3VycmVudFBvc2l0aW9uKSk7XG4gICAgaWYgKGlzT3V0T2ZCb3VuZChjdXJyZW50UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKSkge1xuICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICcnO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgI
1HN3aXBlci53cmFwcGVyRWwuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgICAgICAgc3dpcGVyLndyYXBwZXJFbC5zY3JvbGxUbyhfZGVmaW5lUHJvcGVydHkoe30sIHNpZGUsIGN1cnJlbnRQb3NpdGlvbikpO1xuICAgICAgfSk7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoc3dpcGVyLmNzc01vZGVGcmFtZUlEKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpcGVyLmNzc01vZGVGcmFtZUlEID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShfYW5pbWF0ZSk7XG4gIH07XG4gIF9hbmltYXRlKCk7XG59XG5mdW5jdGlvbiBnZXRTbGlkZVRyYW5zZm9ybUVsKHNsaWRlRWwpIHtcbiAgcmV0dXJuIHNsaWRlRWwucXVlcnlTZWxlY3RvcignLnN3aXBlci1zbGlkZS10cmFuc2Zvcm0nKSB8fCBzbGlkZUVsLnNoYWRvd1Jvb3QgJiYgc2xpZGVFbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItc2xpZGUtdHJhbnNmb3JtJykgfHwgc2xpZGVFbDtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRDaGlsZHJlbihlbGVtZW50KSB7XG4gIHZhciBzZWxlY3RvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIGNoaWxkcmVuID0gX3RvQ29uc3VtYWJsZUFycmF5KGVsZW1lbnQuY2hpbGRyZW4pO1xuICBpZiAod2luZG93LkhUTUxTbG90RWxlbWVudCAmJiBlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNsb3RFbGVtZW50KSB7XG4gICAgY2hpbGRyZW4ucHVzaC5hcHBseShjaGlsZHJlbiwgX3RvQ29uc3VtYWJsZUFycmF5KGVsZW1lbnQuYXNzaWduZWRFbGVtZW50cygpKSk7XG4gIH1cbiAgaWYgKCFzZWxlY3Rvcikge1xuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuICByZXR1cm4gY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbGVtZW50SXNDaGlsZE9mU2xvdChlbCwgc2xvdCkge1xuICAvLyBCcmVhZHRoLWZpcnN0IHNlYXJjaCB0aHJvdWdoIGFsbCBwYXJlbnQncyBjaGlsZHJlbiBhbmQgYXNzaWduZWQgZWxlbWVudHNcbiAgdmFyIGVsZW1lbnRzUXVldWUgPSBbc2xvdF07XG4gIHdoaWxlIChlbGVtZW50c1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZWxlbWVudFRvQ2hlY2sgPSBlbGVtZW50c1F1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKGVsID09PSBlbGVtZW50VG9DaGVjaykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsZW1lbnRzUXVldWUucHVzaC5hcHBseShlbGVtZW50c1F1ZXVlLCBfdG9Db25zdW1hYmxlQXJyYXkoZWxlbWVudFRvQ2hlY2suY2hpbGRyZW4pLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZWxlbWVudFRvQ2hlY2suc2hhZG93Um9vdCA/IGVsZW1lbnRUb0NoZWNrLnNoYWRvd1Jvb3QuY2hpbGRyZW4gOiBbXSksIF90b0NvbnN1bWFibGVBcnJheShlbGVtZW50VG9DaGVjay5hc3NpZ25lZEVsZW1lbnRzID8gZWxlbWVudFRvQ2hlY2suYXNzaWduZWRFbGVtZW50cygpIDogW10pKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVsZW1lbnRJc0NoaWxkT2YoZWwsIHBhcmVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBpc0NoaWxkID0gcGFyZW50LmNvbnRhaW5zKGVsKTtcbiAgaWYgKCFpc0NoaWxkICYmIHdpbmRvdy5IVE1MU2xvdEVsZW1lbnQgJiYgcGFyZW50IGluc3RhbmNlb2YgSFRNTFNsb3RFbGVtZW50KSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX3RvQ29uc3VtYWJsZUFycmF5KHBhcmVudC5hc3NpZ25lZEVsZW1lbnRzKCkpO1xuICAgIGlzQ2hpbGQgPSBjaGlsZHJlbi5pbmNsdWRlcyhlbCk7XG4gICAgaWYgKCFpc0NoaWxkKSB7XG4gICAgICBpc0NoaWxkID0gZWxlbWVudElzQ2hpbGRPZlNsb3QoZWwsIHBhcmVudCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpc0NoaWxkO1xufVxuZnVuY3Rpb24gc2hvd1dhcm5pbmcodGV4dCkge1xuICB0cnkge1xuICAgIGNvbnNvbGUud2Fybih0ZXh0KTtcbiAgICByZXR1cm47XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIGVyclxuICB9XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZykge1xuICB2YXIgX2VsJGNsYXNzTGlzdDtcbiAgdmFyIGNsYXNzZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIChfZWwkY2xhc3NMaXN0ID0gZWwuY2xhc3NMaXN0KS5hZGQuYXBwbHkoX2VsJGNsYXNzTGlzdCwgX3RvQ29uc3VtYWJsZUFycmF5KEFycmF5LmlzQXJyYXkoY2xhc3NlcykgPyBjbGFzc2VzIDogY2xhc3Nlc1RvVG9rZW5zKGNsYXNzZXMpKSk7XG4gIHJldHVybiBlbDtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRPZmZzZXQoZWwpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICB2YXIgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgdmFyIGNsaWVudFRvcCA9IGVsLmNsaWVudFRvcCB8fCBib2R5LmNsaWVudFRvcCB8fCAwO1xuICB2YXIgY2xpZW50TGVmdCA9IGVsLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7XG4gIHZhciBzY3JvbGxUb3AgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFkgOiBlbC5zY3JvbGxUb3A7XG4gIHZhciBzY3JvbGxMZWZ0ID0gZWwgPT09IHdpbmRvdyA/IHdpbmRvdy5zY3JvbGxYIDogZWwuc2Nyb2xsTGVmdDtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IGJveC50b3AgKyBzY3JvbGxUb3AgLSBjbGllbnRUb3AsXG4gICAgbGVmdDogYm94LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdFxuICB9O1xufVxuZnVuY3Rpb24gZWxlbWVudFByZXZBbGwoZWwsIHNlbGVjdG9yKSB7XG4gIHZhciBwcmV2RWxzID0gW107XG4gIHdoaWxlIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSB7XG4gICAgdmFyIHByZXYgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAocHJldi5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldkVscy5wdXNoKHByZXYpO1xuICAgIH0gZWxzZSBwcmV2RWxzLnB1c2gocHJldik7XG4gICAgZWwgPSBwcmV2O1xuICB9XG4gI
1HJldHVybiBwcmV2RWxzO1xufVxuZnVuY3Rpb24gZWxlbWVudE5leHRBbGwoZWwsIHNlbGVjdG9yKSB7XG4gIHZhciBuZXh0RWxzID0gW107XG4gIHdoaWxlIChlbC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICB2YXIgbmV4dCA9IGVsLm5leHRFbGVtZW50U2libGluZzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIG5leHRFbHMucHVzaChuZXh0KTtcbiAgICB9IGVsc2UgbmV4dEVscy5wdXNoKG5leHQpO1xuICAgIGVsID0gbmV4dDtcbiAgfVxuICByZXR1cm4gbmV4dEVscztcbn1cbmZ1bmN0aW9uIGVsZW1lbnRTdHlsZShlbCwgcHJvcCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRJbmRleChlbCkge1xuICB2YXIgY2hpbGQgPSBlbDtcbiAgdmFyIGk7XG4gIGlmIChjaGlsZCkge1xuICAgIGkgPSAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIGkgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRQYXJlbnRzKGVsLCBzZWxlY3Rvcikge1xuICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIHZhciBwYXJlbnQgPSBlbC5wYXJlbnRFbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChwYXJlbnQubWF0Y2hlcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcmVudHM7XG59XG5mdW5jdGlvbiBlbGVtZW50VHJhbnNpdGlvbkVuZChlbCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gZmlyZUNhbGxCYWNrKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgIT09IGVsKSByZXR1cm47XG4gICAgY2FsbGJhY2suY2FsbChlbCwgZSk7XG4gICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGZpcmVDYWxsQmFjayk7XG4gIH1cbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGZpcmVDYWxsQmFjayk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVsZW1lbnRPdXRlclNpemUoZWwsIHNpemUsIGluY2x1ZGVNYXJnaW5zKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgcmV0dXJuIGVsW3NpemUgPT09ICd3aWR0aCcgPyAnb2Zmc2V0V2lkdGgnIDogJ29mZnNldEhlaWdodCddICsgcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShzaXplID09PSAnd2lkdGgnID8gJ21hcmdpbi1yaWdodCcgOiAnbWFyZ2luLXRvcCcpKSArIHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoc2l6ZSA9PT0gJ3dpZHRoJyA/ICdtYXJnaW4tbGVmdCcgOiAnbWFyZ2luLWJvdHRvbScpKTtcbiAgfVxuICByZXR1cm4gZWwub2Zmc2V0V2lkdGg7XG59XG5mdW5jdGlvbiBtYWtlRWxlbWVudHNBcnJheShlbCkge1xuICByZXR1cm4gKEFycmF5LmlzQXJyYXkoZWwpID8gZWwgOiBbZWxdKS5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gISFlO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdldFJvdGF0ZUZpeChzd2lwZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2KSB7XG4gICAgaWYgKE1hdGguYWJzKHYpID4gMCAmJiBzd2lwZXIuYnJvd3NlciAmJiBzd2lwZXIuYnJvd3Nlci5uZWVkM2RGaXggJiYgTWF0aC5hYnModikgJSA5MCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHYgKyAwLjAwMTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH07XG59XG5mdW5jdGlvbiBzZXRJbm5lckhUTUwoZWwpIHtcbiAgdmFyIGh0bWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICBpZiAodHlwZW9mIHRydXN0ZWRUeXBlcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBlbC5pbm5lckhUTUwgPSB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCdodG1sJywge1xuICAgICAgY3JlYXRlSFRNTDogZnVuY3Rpb24gY3JlYXRlSFRNTChzKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuICAgIH0pLmNyZWF0ZUhUTUwoaHRtbCk7XG4gIH0gZWxzZSB7XG4gICAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgfVxufVxuZXhwb3J0IHsgZ2V0Um90YXRlRml4IGFzIGEsIHNldENTU1Byb3BlcnR5IGFzIGIsIGNyZWF0ZUVsZW1lbnQgYXMgYywgZWxlbWVudFBhcmVudHMgYXMgZCwgZWxlbWVudENoaWxkcmVuIGFzIGUsIGVsZW1lbnRPZmZzZXQgYXMgZiwgZ2V0U2xpZGVUcmFuc2Zvcm1FbCBhcyBnLCBub3cgYXMgaCwgZWxlbWVudE91dGVyU2l6ZSBhcyBpLCBlbGVtZW50SW5kZXggYXMgaiwgY2xhc3Nlc1RvVG9rZW5zIGFzIGssIGdldFRyYW5zbGF0ZSBhcyBsLCBtYWtlRWxlbWVudHNBcnJheSBhcyBtLCBuZXh0VGljayBhcyBuLCBlbGVtZW50VHJhbnNpdGlvbkVuZCBhcyBvLCBpc09iamVjdCBhcyBwLCBlbGVtZW50U3R5bGUgYXMgcSwgZWxlbWVudE5leHRBbGwgYXMgciwgc2V0SW5uZXJIVE1MIGFzIHMsIGVsZW1lbnRQcmV2QWxsIGFzIHQsIGFuaW1hdGVDU1NNb2RlU2Nyb2xsIGFzIHUsIHNob3dXYXJuaW5nIGFzIHYsIGVsZW1lbnRJc0NoaWxkT2YgYXMgdywgZXh0ZW5kIGFzIHgsIGRlbGV0ZVByb3BzIGFzIHkgfTsiLCJpbXBvcnQgX2NsYXNzQ2FsbENoZWNrIGZyb20gXCIvb3B0L2J1aWxkL3JlcG8vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzXCI7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gXCIvb3B0L2J1aWxkL3JlcG8vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzXCI7XG5pbXBvcnQgX2RlZmluZVByb3BlcnR5IGZyb20gXCIvb3B0L2J1aWxkL3JlcG8vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzXCI7XG5pbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gXCIvb3B0L2J1aWxkL3JlcG8vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzXCI7XG5pbXBvcnQgX3NsaWNlZFRvQXJyYXkgZnJvbSBcIi9vcHQvYnVpbGQvcmVwby9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vc2xpY2VkVG9BcnJheS5qc1wiO1xuaW1wb3J0IFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanNcIjtcbmZ1bmN0aW9uIG93bktleXMoZSwgcikgeyB2YXIgdCA9IE9iamVjdC5rZXlzKGUpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7IHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbiAocikgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCByKS5lbnVtZXJhYmxlOyB9KSksIHQucHVzaC5hcHBseSh0LCBvKTsgfSByZXR1cm4gdDsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZChlKSB7IGZvciAodmFyIHIgPSAxOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKSB7IHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTsgciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgX2RlZmluZVByb3BlcnR5KGUsIHIsIHRbcl0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnModCkpIDogb3duS2V5cyhPYmplY3QodCkpLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgcikpOyB9KTsgfSByZXR1cm4gZTsgfVxuaW1wb3J0IHsgYSBhcyBnZXRXaW5kb3csIGcgYXMgZ2V0RG9jdW1lbnQgfSBmcm9tICcuL3Nzci13aW5kb3cuZXNtLm1qcyc7XG5pbXBvcnQgeyBkIGFzIGVsZW1lbnRQYXJlbnRzLCBxIGFzIGVsZW1lbnRTdHlsZSwgZSBhcyBlbGVtZW50Q2hpbGRyZW4sIGIgYXMgc2V0Q1NTUHJvcGVydHksIGkgYXMgZWxlbWVudE91dGVyU2l6ZSwgciBhcyBlbGVtZW50TmV4dEFsbCwgdCBhcyBlbGVtZW50UHJldkFsbCwgbCBhcyBnZXRUcmFuc2xhdGUsIHUgYXMgYW5pbWF0ZUNTU01vZGVTY3JvbGwsIG4gYXMgbm
1V4dFRpY2ssIHYgYXMgc2hvd1dhcm5pbmcsIGMgYXMgY3JlYXRlRWxlbWVudCwgdyBhcyBlbGVtZW50SXNDaGlsZE9mLCBoIGFzIG5vdywgeCBhcyBleHRlbmQsIGogYXMgZWxlbWVudEluZGV4LCB5IGFzIGRlbGV0ZVByb3BzIH0gZnJvbSAnLi91dGlscy5tanMnO1xudmFyIHN1cHBvcnQ7XG5mdW5jdGlvbiBjYWxjU3VwcG9ydCgpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICByZXR1cm4ge1xuICAgIHNtb290aFNjcm9sbDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiAnc2Nyb2xsQmVoYXZpb3InIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSxcbiAgICB0b3VjaDogISEoJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IHdpbmRvdy5Eb2N1bWVudFRvdWNoICYmIGRvY3VtZW50IGluc3RhbmNlb2Ygd2luZG93LkRvY3VtZW50VG91Y2gpXG4gIH07XG59XG5mdW5jdGlvbiBnZXRTdXBwb3J0KCkge1xuICBpZiAoIXN1cHBvcnQpIHtcbiAgICBzdXBwb3J0ID0gY2FsY1N1cHBvcnQoKTtcbiAgfVxuICByZXR1cm4gc3VwcG9ydDtcbn1cbnZhciBkZXZpY2VDYWNoZWQ7XG5mdW5jdGlvbiBjYWxjRGV2aWNlKCkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgdXNlckFnZW50ID0gX3JlZi51c2VyQWdlbnQ7XG4gIHZhciBzdXBwb3J0ID0gZ2V0U3VwcG9ydCgpO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBwbGF0Zm9ybSA9IHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm07XG4gIHZhciB1YSA9IHVzZXJBZ2VudCB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgdmFyIGRldmljZSA9IHtcbiAgICBpb3M6IGZhbHNlLFxuICAgIGFuZHJvaWQ6IGZhbHNlXG4gIH07XG4gIHZhciBzY3JlZW5XaWR0aCA9IHdpbmRvdy5zY3JlZW4ud2lkdGg7XG4gIHZhciBzY3JlZW5IZWlnaHQgPSB3aW5kb3cuc2NyZWVuLmhlaWdodDtcbiAgdmFyIGFuZHJvaWQgPSB1YS5tYXRjaCgvKEFuZHJvaWQpOz9bXFxzXFwvXSsoW1xcZC5dKyk/Lyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgdmFyIGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpKD8hXFwxKS4qT1NcXHMoW1xcZF9dKykvKTtcbiAgdmFyIGlwb2QgPSB1YS5tYXRjaCgvKGlQb2QpKC4qT1NcXHMoW1xcZF9dKykpPy8pO1xuICB2YXIgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gIHZhciB3aW5kb3dzID0gcGxhdGZvcm0gPT09ICdXaW4zMic7XG4gIHZhciBtYWNvcyA9IHBsYXRmb3JtID09PSAnTWFjSW50ZWwnO1xuXG4gIC8vIGlQYWRPcyAxMyBmaXhcbiAgdmFyIGlQYWRTY3JlZW5zID0gWycxMDI0eDEzNjYnLCAnMTM2NngxMDI0JywgJzgzNHgxMTk0JywgJzExOTR4ODM0JywgJzgzNHgxMTEyJywgJzExMTJ4ODM0JywgJzc2OHgxMDI0JywgJzEwMjR4NzY4JywgJzgyMHgxMTgwJywgJzExODB4ODIwJywgJzgxMHgxMDgwJywgJzEwODB4ODEwJ107XG4gIGlmICghaXBhZCAmJiBtYWNvcyAmJiBzdXBwb3J0LnRvdWNoICYmIGlQYWRTY3JlZW5zLmluZGV4T2YoXCJcIi5jb25jYXQoc2NyZWVuV2lkdGgsIFwieFwiKS5jb25jYXQoc2NyZWVuSGVpZ2h0KSkgPj0gMCkge1xuICAgIGlwYWQgPSB1YS5tYXRjaCgvKFZlcnNpb24pXFwvKFtcXGQuXSspLyk7XG4gICAgaWYgKCFpcGFkKSBpcGFkID0gWzAsIDEsICcxM18wXzAnXTtcbiAgICBtYWNvcyA9IGZhbHNlO1xuICB9XG5cbiAgLy8gQW5kcm9pZFxuICBpZiAoYW5kcm9pZCAmJiAhd2luZG93cykge1xuICAgIGRldmljZS5vcyA9ICdhbmRyb2lkJztcbiAgICBkZXZpY2UuYW5kcm9pZCA9IHRydWU7XG4gIH1cbiAgaWYgKGlwYWQgfHwgaXBob25lIHx8IGlwb2QpIHtcbiAgICBkZXZpY2Uub3MgPSAnaW9zJztcbiAgICBkZXZpY2UuaW9zID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIEV4cG9ydCBvYmplY3RcbiAgcmV0dXJuIGRldmljZTtcbn1cbmZ1bmN0aW9uIGdldERldmljZSgpIHtcbiAgdmFyIG92ZXJyaWRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIGlmICghZGV2aWNlQ2FjaGVkKSB7XG4gICAgZGV2aWNlQ2FjaGVkID0gY2FsY0RldmljZShvdmVycmlkZXMpO1xuICB9XG4gIHJldHVybiBkZXZpY2VDYWNoZWQ7XG59XG52YXIgYnJvd3NlcjtcbmZ1bmN0aW9uIGNhbGNCcm93c2VyKCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBkZXZpY2UgPSBnZXREZXZpY2UoKTtcbiAgdmFyIG5lZWRQZXJzcGVjdGl2ZUZpeCA9IGZhbHNlO1xuICBmdW5jdGlvbiBpc1NhZmFyaSgpIHtcbiAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB1YS5pbmRleE9mKCdzYWZhcmknKSA+PSAwICYmIHVhLmluZGV4T2YoJ2Nocm9tZScpIDwgMCAmJiB1YS5pbmRleE9mKCdhbmRyb2lkJykgPCAwO1xuICB9XG4gIGlmIChpc1NhZmFyaSgpKSB7XG4gICAgdmFyIHVhID0gU3RyaW5nKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBpZiAodWEuaW5jbHVkZXMoJ1ZlcnNpb24vJykpIHtcbiAgICAgIHZhciBfdWEkc3BsaXQkMSRzcGxpdCQwJHMgPSB1YS5zcGxpdCgnVmVyc2lvbi8nKVsxXS5zcGxpdCgnICcpWzBdLnNwbGl0KCcuJykubWFwKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKG51bSk7XG4gICAgICAgIH0pLFxuICAgICAgICBfdWEkc3BsaXQkMSRzcGxpdCQwJHMyID0gX3NsaWNlZFRvQXJyYXkoX3VhJHNwbGl0JDEkc3BsaXQkMCRzLCAyKSxcbiAgICAgICAgbWFqb3IgPSBfdWEkc3BsaXQkMSRzcGxpdCQwJHMyWzBdLFxuICAgICAgICBtaW5vciA9IF91YSRzcGxpdCQxJHNwbGl0JDAkczJbMV07XG4gICAgICBuZWVkUGVyc3BlY3RpdmVGaXggPSBtYWpvciA8IDE2IHx8IG1ham9yID09PSAxNiAmJi
1BtaW5vciA8IDI7XG4gICAgfVxuICB9XG4gIHZhciBpc1dlYlZpZXcgPSAvKGlQaG9uZXxpUG9kfGlQYWQpLipBcHBsZVdlYktpdCg/IS4qU2FmYXJpKS9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO1xuICB2YXIgaXNTYWZhcmlCcm93c2VyID0gaXNTYWZhcmkoKTtcbiAgdmFyIG5lZWQzZEZpeCA9IGlzU2FmYXJpQnJvd3NlciB8fCBpc1dlYlZpZXcgJiYgZGV2aWNlLmlvcztcbiAgcmV0dXJuIHtcbiAgICBpc1NhZmFyaTogbmVlZFBlcnNwZWN0aXZlRml4IHx8IGlzU2FmYXJpQnJvd3NlcixcbiAgICBuZWVkUGVyc3BlY3RpdmVGaXg6IG5lZWRQZXJzcGVjdGl2ZUZpeCxcbiAgICBuZWVkM2RGaXg6IG5lZWQzZEZpeCxcbiAgICBpc1dlYlZpZXc6IGlzV2ViVmlld1xuICB9O1xufVxuZnVuY3Rpb24gZ2V0QnJvd3NlcigpIHtcbiAgaWYgKCFicm93c2VyKSB7XG4gICAgYnJvd3NlciA9IGNhbGNCcm93c2VyKCk7XG4gIH1cbiAgcmV0dXJuIGJyb3dzZXI7XG59XG5mdW5jdGlvbiBSZXNpemUoX3JlZjIpIHtcbiAgdmFyIHN3aXBlciA9IF9yZWYyLnN3aXBlcixcbiAgICBvbiA9IF9yZWYyLm9uLFxuICAgIGVtaXQgPSBfcmVmMi5lbWl0O1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBvYnNlcnZlciA9IG51bGw7XG4gIHZhciBhbmltYXRpb25GcmFtZSA9IG51bGw7XG4gIHZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24gcmVzaXplSGFuZGxlcigpIHtcbiAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBlbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICBlbWl0KCdyZXNpemUnKTtcbiAgfTtcbiAgdmFyIGNyZWF0ZU9ic2VydmVyID0gZnVuY3Rpb24gY3JlYXRlT2JzZXJ2ZXIoKSB7XG4gICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHtcbiAgICAgIGFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IHN3aXBlci53aWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSBzd2lwZXIuaGVpZ2h0O1xuICAgICAgICB2Y
1XIgbmV3V2lkdGggPSB3aWR0aDtcbiAgICAgICAgdmFyIG5ld0hlaWdodCA9IGhlaWdodDtcbiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICAgIHZhciBjb250ZW50Qm94U2l6ZSA9IF9yZWYzLmNvbnRlbnRCb3hTaXplLFxuICAgICAgICAgICAgY29udGVudFJlY3QgPSBfcmVmMy5jb250ZW50UmVjdCxcbiAgICAgICAgICAgIHRhcmdldCA9IF9yZWYzLnRhcmdldDtcbiAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gc3dpcGVyLmVsKSByZXR1cm47XG4gICAgICAgICAgbmV3V2lkdGggPSBjb250ZW50UmVjdCA/IGNvbnRlbnRSZWN0LndpZHRoIDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5pbmxpbmVTaXplO1xuICAgICAgICAgIG5ld0hlaWdodCA9IGNvbnRlbnRSZWN0ID8gY29udGVudFJlY3QuaGVpZ2h0IDogKGNvbnRlbnRCb3hTaXplWzBdIHx8IGNvbnRlbnRCb3hTaXplKS5ibG9ja1NpemU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobmV3V2lkdGggIT09IHdpZHRoIHx8IG5ld0hlaWdodCAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgcmVzaXplSGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHN3aXBlci5lbCk7XG4gIH07XG4gIHZhciByZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKCkge1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcbiAgICB9XG4gICAgaWYgKG9ic2VydmVyICYmIG9ic2VydmVyLnVub2JzZXJ2ZSAmJiBzd2lwZXIuZWwpIHtcbiAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShzd2lwZXIuZWwpO1xuICAgICAgb2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgdmFyIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcigpIHtcbiAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBlbWl0KCdvcmllbnRhdGlvbmNoYW5nZScpO1xuICB9O1xuICBvbignaW5pdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5yZXNpemVPYnNlcnZlciAmJiB0eXBlb2Ygd2luZG93LlJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY3JlYXRlT2JzZXJ2ZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2l6ZUhhbmRsZXIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlcik7XG4gIH0pO1xuICBvbignZGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICByZW1vdmVPYnNlcnZlcigpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemVIYW5kbGVyKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCBvcmllbnRhdGlvbkNoYW5nZUhhbmRsZXIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE9ic2VydmVyKF9yZWY0KSB7XG4gIHZhciBzd2lwZXIgPSBfcmVmNC5zd2lwZXIsXG4gICAgZXh0ZW5kUGFyYW1zID0gX3JlZjQuZXh0ZW5kUGFyYW1zLFxuICAgIG9uID0gX3JlZjQub24sXG4gICAgZW1pdCA9IF9yZWY0LmVtaXQ7XG4gIHZhciBvYnNlcnZlcnMgPSBbXTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICB2YXIgYXR0YWNoID0gZnVuY3Rpb24gYXR0YWNoKHRhcmdldCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgT2JzZXJ2ZXJGdW5jID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYmtpdE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgdmFyIG9ic2VydmVyID0gbmV3IE9ic2VydmVyRnVuYyhmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAvLyBUaGUgb2JzZXJ2ZXJVcGRhdGUgZXZlbnQgc2hvdWxkIG9ubHkgYmUgdHJpZ2dlcmVkXG4gICAgICAvLyBvbmNlIGRlc3BpdGUgdGhlIG51bWJlciBvZiBtdXRhdGlvbnMuICBBZGRpdGlvbmFsXG4gICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgIGlmIChzd2lwZXIuX19wcmV2ZW50T2JzZXJ2ZXJfXykgcmV0dXJuO1xuICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2Y
1XIgb2JzZXJ2ZXJVcGRhdGUgPSBmdW5jdGlvbiBvYnNlcnZlclVwZGF0ZSgpIHtcbiAgICAgICAgZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgfTtcbiAgICAgIGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUob2JzZXJ2ZXJVcGRhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNldFRpbWVvdXQob2JzZXJ2ZXJVcGRhdGUsIDApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUodGFyZ2V0LCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0eXBlb2Ygb3B0aW9ucy5hdHRyaWJ1dGVzID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBvcHRpb25zLmF0dHJpYnV0ZXMsXG4gICAgICBjaGlsZExpc3Q6IHN3aXBlci5pc0VsZW1lbnQgfHwgKHR5cGVvZiBvcHRpb25zLmNoaWxkTGlzdCA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucykuY2hpbGRMaXN0LFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHlwZW9mIG9wdGlvbnMuY2hhcmFjdGVyRGF0YSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGFyYWN0ZXJEYXRhXG4gICAgfSk7XG4gICAgb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICB9O1xuICB2YXIgaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLm9ic2VydmVyKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5wYXJhbXMub2JzZXJ2ZVBhcmVudHMpIHtcbiAgICAgIHZhciBjb250YWluZXJQYXJlbnRzID0gZWxlbWVudFBhcmVudHMoc3dpcGVyLmhvc3RFbCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRhaW5lclBhcmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXR0YWNoKGNvbnRhaW5lclBhcmVudHNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBPYnNlcnZlIGNvbnRhaW5lclxuICAgIGF0dGFjaChzd2lwZXIuaG9zdEVsLCB7XG4gICAgICBjaGlsZExpc3Q6IHN3aXBlci5wYXJhbXMub2JzZXJ2ZVNsaWRlQ2hpbGRyZW5cbiAgICB9KTtcblxuICAgIC8vIE9ic2VydmUgd3JhcHBlclxuICAgIGF0dGFjaChzd2lwZXIud3JhcHBlckVsLCB7XG4gICAgICBhdHRyaWJ1dGVzOiBmYWxzZVxuICAgIH0pO1xuICB9O1xuICB2YXIgZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgb2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXJzLnNwbGljZSgwLCBvYnNlcnZlcnMubGVuZ3RoKTtcbiAgfTtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBvYnNlcnZlcjogZmFsc2UsXG4gICAgb2JzZXJ2ZVBhcmVudHM6IGZhbHNlLFxuICAgIG9ic2VydmVTbGlkZUNoaWxkcmVuOiBmYWxzZVxuICB9KTtcbiAgb24oJ2luaXQnLCBpbml0KTtcbiAgb24oJ2Rlc3Ryb3knLCBkZXN0cm95KTtcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cblxudmFyIGV2ZW50c0VtaXR0ZXIgPSB7XG4gIG9uOiBmdW5jdGlvbiBvbihldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgdmFyIG1ldGhvZCA9IHByaW9yaXR5ID8gJ3Vuc2hpZnQnIDogJ3B1c2gnO1xuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF1bbWV0aG9kXShoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSxcbiAgb25jZTogZnVuY3Rpb24gb25jZShldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgZnVuY3Rpb24gb25jZUhhbmRsZXIoKSB7XG4gICAgICBzZWxmLm9mZihldmVudHMsIG9uY2VIYW5kbGVyKTtcbiAgICAgIGlmIChvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSkge1xuICAgICAgICBkZWxldGUgb25jZUhhbmRsZXIuX19lbWl0dGVyUHJveHk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZXIuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgfVxuICAgIG9uY2VIYW5kbGVyLl9fZW1pdHRlclByb3h5ID0gaGFuZGxlcjtcbiAgICByZXR1cm4gc2VsZi5vbihldmVudHMsIG9uY2VIYW5kbGVyLCBwcmlvcml0eSk7XG4gIH0sXG4gIG9uQW55OiBmdW5jdGlvbiBvbkFueShoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzIHx8IHNlbGYuZGVzdHJveWVkKSByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBzZWxmO1xuICAgIHZhciBtZXRob2QgPSBwcmlvcml0eSA/ICd1bnNoaWZ0JyA6ICdwdXNoJztcbiAgICBpZiAoc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMuaW5kZXhPZihoYW5kbGVyKSA8IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzW21ldGhvZF0oaGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICBvZmZBbnk6IGZ1bmN0aW9uIG9mZkFueShoYW5kbGVyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybi
1BzZWxmO1xuICAgIGlmICghc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgIHZhciBpbmRleCA9IHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICBvZmY6IGZ1bmN0aW9uIG9mZihldmVudHMsIGhhbmRsZXIpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICB9IGVsc2UgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnRIYW5kbGVyLCBpbmRleCkge1xuICAgICAgICAgIGlmIChldmVudEhhbmRsZXIgPT09IGhhbmRsZXIgfHwgZXZlbnRIYW5kbGVyLl9fZW1pdHRlclByb3h5ICYmIGV2ZW50SGFuZGxlci5fX2VtaXR0ZXJQcm94eSA9PT0gaGFuZGxlcikge1xuICAgICAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSxcbiAgZW1pdDogZnVuY3Rpb24gZW1pdCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgdmFyIGV2ZW50cztcbiAgICB2YXIgZGF0YTtcbiAgICB2YXIgY29udGV4dDtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICBldmVudHMgPSBhcmdzWzBdO1xuICAgICAgZGF0YSA9IGFyZ3Muc2xpY2UoMSwgYXJncy5sZW5ndGgpO1xuICAgICAgY29udGV4dCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF0uZXZlbnRzO1xuICAgICAgZGF0YSA9IGFyZ3NbMF0uZGF0YTtcbiAgICAgIGNvbnRleHQgPSBhcmdzWzBdLmNvbnRleHQgfHwgc2VsZjtcbiAgICB9XG4gICAgZGF0YS51bnNoaWZ0KGNvbnRleHQpO1xuICAgIHZhciBldmVudHNBcnJheSA9IEFycmF5LmlzQXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgnICcpO1xuICAgIGV2ZW50c0FycmF5LmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMgJiYgc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50SGFuZGxlcikge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBbZXZlbnRdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoZGF0YSkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoc2VsZi5ldmVudHNMaXN0ZW5lcnMgJiYgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudEhhbmRsZXIpIHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuYXBwbHkoY29udGV4dCwgZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG59O1xuZnVuY3Rpb24gdXBkYXRlU2l6ZSgpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciB3aWR0aDtcbiAgdmFyIGhlaWdodDtcbiAgdmFyIGVsID0gc3dpcGVyLmVsO1xuICBpZiAodHlwZW9mIHN3aXBlci5wYXJhbXMud2lkdGggIT09ICd1bmRlZmluZWQnICYmIHN3aXBlci5wYXJhbXMud2lkdGggIT09IG51bGwpIHtcbiAgICB3aWR0aCA9IHN3aXBlci5wYXJhbXMud2lkdGg7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aDtcbiAgfVxuICBpZiAodHlwZW9mIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSAndW5kZWZpbmVkJyAmJiBzd2lwZXIucGFyYW1zLmhlaWdodCAhPT0gbnVsbCkge1xuICAgIGhlaWdodCA9IHN3aXBlci5wYXJhbXMuaGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGhlaWdodCA9IGVsLmNsaWVudEhlaWdodDtcbiAgfVxuICBpZiAod2lkdGggPT09IDAgJiYgc3dpcGVyLmlzSG9yaXpvbnRhbCgpIHx8IGhlaWdodCA9PT0gMCAmJiBzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU3VidHJhY3QgcGFkZGluZ3NcbiAgd2lkdGggPSB3aWR0aCAtIHBhcnNlSW50KGVsZW1lbnRTdHlsZShlbCwgJ3BhZGRpbmctbGVmdCcpIHx8IDAsIDEwKSAtIHBhcnNlSW50KGVsZW1lbnRTdHlsZShlbCwgJ3BhZGRpbmctcmlnaHQnKSB8fCAwLCAxMCk7XG4gIGhlaWdodCA9IGhlaWdodCAtIHBhcnNlSW50KGVsZW1lbnRTdHlsZShlbCwgJ3BhZGRpbmctdG9wJykgfHwgMCwgMTApIC0gcGFyc2VJbnQoZWxlbWVudFN0eWxlKGVsLCAncGFkZGluZy1ib3R0b20nKSB8fCAwLCAxMCk7XG4gIGlmIChOdW1iZXIuaXNOYU4od2lkdGgpKSB3aWR0aCA9IDA7XG4gIGlmIChOdW1iZXIuaXNOYU4oaGVpZ2h0KSkgaGVpZ2h0ID0gMDtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgc2l6ZTogc3dpcGVyLmlzSG9yaXpvbn
1RhbCgpID8gd2lkdGggOiBoZWlnaHRcbiAgfSk7XG59XG5mdW5jdGlvbiB1cGRhdGVTbGlkZXMoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICBmdW5jdGlvbiBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKG5vZGUsIGxhYmVsKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobm9kZS5nZXRQcm9wZXJ0eVZhbHVlKHN3aXBlci5nZXREaXJlY3Rpb25MYWJlbChsYWJlbCkpIHx8IDApO1xuICB9XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICB2YXIgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICBzbGlkZXNFbCA9IHN3aXBlci5zbGlkZXNFbCxcbiAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlLFxuICAgIHdyb25nUlRMID0gc3dpcGVyLndyb25nUlRMO1xuICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgcGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgdmFyIHByZXZpb3VzU2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICB2YXIgc2xpZGVzID0gZWxlbWVudENoaWxkcmVuKHNsaWRlc0VsLCBcIi5cIi5jb25jYXQoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzLCBcIiwgc3dpcGVyLXNsaWRlXCIpKTtcbiAgdmFyIHNsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzbGlkZXMubGVuZ3RoO1xuICB2YXIgc25hcEdyaWQgPSBbXTtcbiAgdmFyIHNsaWRlc0dyaWQgPSBbXTtcbiAgdmFyIHNsaWRlc1NpemVzR3JpZCA9IFtdO1xuICB2YXIgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZTtcbiAgaWYgKHR5cGVvZiBvZmZzZXRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlLmNhbGwoc3dpcGVyKTtcbiAgfVxuICB2YXIgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXI7XG4gIGlmICh0eXBlb2Ygb2Zmc2V0QWZ0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvZmZzZXRBZnRlciA9IHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlci5jYWxsKHN3aXBlcik7XG4gIH1cbiAgdmFyIHByZXZpb3VzU25hcEdyaWRMZW5ndGggPSBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuICB2YXIgcHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoID0gc3dpcGVyLnNsaWRlc0dyaWQubGVuZ3RoO1xuICB2YXIgc3dpcGVyU2l6ZSA9IHN3aXBlci5zaXplIC0gb2Zmc2V0QmVmb3JlIC0gb2Zmc2V0QWZ0ZXI7XG4gIHZhciBzcGFjZUJldHdlZW4gPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICB2YXIgc2xpZGVQb3NpdGlvbiA9IC1vZmZzZXRCZWZvcmU7XG4gIHZhciBwcmV2U2xpZGVTaXplID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgaWYgKHR5cGVvZiBzd2lwZXJTaXplID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gcGFyc2VGbG9hdChzcGFjZUJldHdlZW4ucmVwbGFjZSgnJScsICcnKSkgLyAxMDAgKiBzd2lwZXJTaXplO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZUJldHdlZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gcGFyc2VGbG9hdChzcGFjZUJldHdlZW4pO1xuICB9XG4gIHN3aXBlci52aXJ0dWFsU2l6ZSA9IC1zcGFjZUJldHdlZW4gLSBvZmZzZXRCZWZvcmUgLSBvZmZzZXRBZnRlcjtcblxuICAvLyByZXNldCBtYXJnaW5zXG4gIHNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgaWYgKHJ0bCkge1xuICAgICAgc2xpZGVFbC5zdHlsZS5tYXJnaW5MZWZ0ID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNsaWRlRWwuc3R5bGUubWFyZ2luUmlnaHQgPSAnJztcbiAgICB9XG4gICAgc2xpZGVFbC5zdHlsZS5tYXJnaW5Cb3R0b20gPSAnJztcbiAgICBzbGlkZUVsLnN0eWxlLm1hcmdpblRvcCA9ICcnO1xuICB9KTtcblxuICAvLyByZXNldCBjc3NNb2RlIG9mZnNldHNcbiAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuY3NzTW9kZSkge1xuICAgIHNldENTU1Byb3BlcnR5KHdyYXBwZXJFbCwgJy0tc3dpcGVyLWNlbnRlcmVkLW9mZnNldC1iZWZvcmUnLCAnJyk7XG4gICAgc2V0Q1NTUHJvcGVydHkod3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWFmdGVyJywgJycpO1xuICB9XG5cbiAgLy8gc2V0IGNzc01vZGUgb2Zmc2V0c1xuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBzZXRDU1NQcm9wZXJ0eSh3cmFwcGVyRWwsICctLXN3aXBlci1zbGlkZXMtb2Zmc2V0LWJlZm9yZScsIFwiXCIuY29uY2F0KG9mZnNldEJlZm9yZSwgXCJweFwiKSk7XG4gICAgc2V0Q1NTUHJvcGVydHkod3JhcHBlckVsLCAnLS1zd2lwZXItc2xpZGVzLW9mZnNldC1hZnRlcicsIFwiXCIuY29uY2F0KG9mZnNldEFmdGVyLCBcInB4XCIpKTtcbiAgfVxuICB2YXIgZ3JpZEVuYWJsZWQgPSBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMSAmJiBzd2lwZXIuZ3JpZDtcbiAgaWYgKGdyaWRFbmFibGVkKSB7XG4gICAgc3dpcGVyLmdyaWQuaW5pdFNsaWRlcyhzbGlkZXMpO1xuICB9IGVsc2UgaWYgKHN3aXBlci5ncmlkKSB7XG4gICAgc3dpcGVyLmdyaWQudW5zZXRTbGlkZXMoKTtcbiAgfVxuXG4gIC8vIENhbGMgc2xpZGVzXG4gIHZhciBzbGlkZVNpemU7XG4gIHZhciBzaG91bGRSZXNldFNsaWRlU2l6ZSA9IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgcGFyYW1zLmJyZWFrcG9pbnRzICYmIE9iamVjdC5rZXlzKHBhcmFtcy5icmVha3BvaW50cykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHBhcmFtcy5icmVha3BvaW50c1trZXldLnNsaWRlc1BlclZpZXcgIT09ICd1bmRlZmluZWQnO1xuICB9KS5sZW5ndGggPiAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWRlc0xlbmd0aDsgaSArPSAxKSB7XG4gICAgc2xpZGVTaXplID0gMDtcbiAgICB2YXIgX3NsaWRlID0gc2xpZGVzW2ldO1xuICAgIGlmIChfc2xpZGUpIHtcbiAgICAgIGlmIChncmlkRW5hYmxlZCkge1xuICAgICAgICBzd2lwZXIuZ3JpZC51cGRhdGVTbGlkZShpLCBfc2xpZGUsIHNsaWRlcyk7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudFN0eWxlKF9zbGlkZSwgJ2Rpc3BsYXknKSA9PT0gJ25vbmUnKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIH1cbiAgICBpZiAoaXNWaXJ0dWFsICYmIHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycpIHtcbiAgICAgIGlmIChwYXJhbXMudmlydHVhbC5zbGlkZXNQZXJWaWV3QXV0b1NsaWRlU2l6ZSkge1xuICAgICAgICBzbGlkZVNpemUgPSBwYXJhbXMudmlydHVhbC5zbGlkZXNQZXJWaWV3QXV0b1NsaWRlU2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzbGlkZVNpemUgJiYgX3NsaWRlKSB7XG4gICAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVNpemUgPSBNYXRoLmZsb29yKHNsaWRlU2l6ZSk7XG4gICAgICAgIF9zbGlkZS5zdHlsZVtzd2lwZXIuZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gXCJcIi5jb25jYXQoc2xpZGVTaXplLCBcInB4XCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2xpZGVTaXplKSB7XG4gICAgICAgIF9zbGlkZS5zdHlsZVtzd2lwZXIuZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIHZhciBzbGlkZVN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoX3NsaWRlKTtcbiAgICAgIHZhciBjdXJyZW50VHJhbnNmb3JtID0gX3NsaWRlLnN0eWxlLnRyYW5zZm9ybTtcbiAgICAgIHZhciBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gX3NsaWRlLnN0eWxlLndlYmtpdFRyYW5zZm9ybTtcbiAgICAgIGlmIChjdXJyZW50VHJhbnNmb3JtKSB7XG4gICAgICAgIF9zbGlkZS5zdHlsZS50cmFuc2Zvcm0gPSAnbm9uZSc7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICBfc2xpZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHtcbiAgICAgICAgc2xpZGVTaXplID0gc3dpcGVyLmlzSG9yaXpvbn
1RhbCgpID8gZWxlbWVudE91dGVyU2l6ZShfc2xpZGUsICd3aWR0aCcsIHRydWUpIDogZWxlbWVudE91dGVyU2l6ZShfc2xpZGUsICdoZWlnaHQnLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YXIgd2lkdGggPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnd2lkdGgnKTtcbiAgICAgICAgdmFyIHBhZGRpbmdMZWZ0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3BhZGRpbmctbGVmdCcpO1xuICAgICAgICB2YXIgcGFkZGluZ1JpZ2h0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3BhZGRpbmctcmlnaHQnKTtcbiAgICAgICAgdmFyIG1hcmdpbkxlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLWxlZnQnKTtcbiAgICAgICAgdmFyIG1hcmdpblJpZ2h0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICB2YXIgYm94U2l6aW5nID0gc2xpZGVTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNpemluZycpO1xuICAgICAgICBpZiAoYm94U2l6aW5nICYmIGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBtYXJnaW5MZWZ0ICsgbWFyZ2luUmlnaHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gX3NsaWRlLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgb2Zmc2V0V2lkdGggPSBfc2xpZGUub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodCArIChvZmZzZXRXaWR0aCAtIGNsaWVudFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgX3NsaWRlLnN0eWxlLnRyYW5zZm9ybSA9IGN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICBfc2xpZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gY3VycmVudFdlYktpdFRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVNpemUgPSBNYXRoLmZsb29yKHNsaWRlU2l6ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNsaWRlU2l6ZSA9IChzd2lwZXJTaXplIC0gKHBhcmFtcy5zbGlkZXNQZXJWaWV3IC0gMSkgKiBzcGFjZUJldHdlZW4pIC8gcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpO1xuICAgICAgaWYgKF9zbGlkZSkge1xuICAgICAgICBfc2xpZGUuc3R5bGVbc3dpcGVyLmdldERpcmVjdGlvbkxhYmVsKCd3aWR0aCcpXSA9IFwiXCIuY29uY2F0KHNsaWRlU2l6ZSwgXCJweFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKF9zbGlkZSkge1xuICAgICAgX3NsaWRlLnN3aXBlclNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcbiAgICB9XG4gICAgc2xpZGVzU2l6ZXNHcmlkLnB1c2goc2xpZGVTaXplKTtcbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSAvIDIgKyBwcmV2U2xpZGVTaXplIC8gMiArIHNwYWNlQmV0d2VlbjtcbiAgICAgIGlmIChwcmV2U2xpZGVTaXplID09PSAwICYmIGkgIT09IDApIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gc3dpcGVyU2l6ZSAvIDIgLSBzcGFjZUJldHdlZW47XG4gICAgICBpZiAoaSA9PT0gMCkgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gLSBzd2lwZXJTaXplIC8gMiAtIHNwYWNlQmV0d2VlbjtcbiAgICAgIGlmIChNYXRoLmFicyhzbGlkZVBvc2l0aW9uKSA8IDEgLyAxMDAwKSBzbGlkZVBvc2l0aW9uID0gMDtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgIGlmIChpbmRleCAlIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlUG9zaXRpb24gPSBNYXRoLmZsb29yKHNsaWRlUG9zaXRpb24pO1xuICAgICAgaWYgKChpbmRleCAtIE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCkpICUgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uICsgc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuICAgIH1cbiAgICBzd2lwZXIudmlydHVhbFNpemUgKz0gc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuICAgIHByZXZTbGlkZVNpemUgPSBzbGlkZVNpemU7XG4gICAgaW5kZXggKz0gMTtcbiAgfVxuICBzd2lwZXIudmlydHVhbFNpemUgPSBNYXRoLm1heChzd2lwZXIudmlydHVhbFNpemUsIHN3aXBlclNpemUpICsgb2Zmc2V0QWZ0ZXI7XG4gIGlmIChydGwgJiYgd3JvbmdSVEwgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2NvdmVyZmxvdycpKSB7XG4gICAgd3JhcHBlckVsLnN0eWxlLndpZHRoID0gXCJcIi5jb25jYXQoc3dpcGVyLnZpcnR1YWxTaXplICsgc3BhY2VCZXR3ZWVuLCBcInB4XCIpO1xuICB9XG4gIGlmIChwYXJhbXMuc2V0V3JhcHBlclNpemUpIHtcbiAgICB3cmFwcGVyRWwuc3R5bGVbc3dpcGVyLmdldERpcmVjdGlvbkxhYmVsKCd3aWR0aCcpXSA9IFwiXCIuY29uY2F0KHN3aXBlci52aXJ0dWFsU2l6ZSArIHNwYWNlQmV0d2VlbiwgXCJweFwiKTtcbiAgfVxuICBpZiAoZ3JpZEVuYWJsZWQpIHtcbiAgICBzd2lwZXIuZ3JpZC51cGRhdGVXcmFwcGVyU2l6ZShzbGlkZVNpemUsIHNuYXBHcmlkKTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBsYXN0IGdyaWQgZWxlbWVudHMgZGVwZW5kaW5nIG9uIHdpZHRoXG4gIGlmICghcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgLy8gQ2hlY2sgaWYgc25hcFRvU2xpZGVFZGdlIHNob3VsZCBiZSBhcHBsaWVkXG4gICAgdmFyIGlzRnJhY3Rpb25hbFNsaWRlc1BlclZpZXcgPSBwYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nICYmIHBhcmFtcy5zbGlkZXNQZXJWaWV3ICUgMSAhPT0gMDtcbiAgICB2YXIgc2hvdWxkU25hcFRvU2xpZGVFZGdlID0gcGFyYW1zLnNuYXBUb1NsaWRlRWRnZSAmJiAhcGFyYW1zLmxvb3AgJiYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgfHwgaXNGcmFjdGlvbmFsU2xpZGVzUGVyVmlldyk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGxhc3QgYWxsb3dlZCBzbmFwIGluZGV4IHdoZW4gc25hcFRvU2xpZGVFZGdlIGlzIGVuYWJsZWRcbiAgICAvLyBUaGlzIGVuc3VyZXMgbWluaW11bSBzbGlkZXMgYXJlIHZpc2libGUgYXQgdGhlIGVuZFxuICAgIHZhciBsYXN0QWxsb3dlZFNuYXBJbmRleCA9IHNuYXBHcmlkLmxlbmd0aDtcbiAgICBpZiAoc2hvdWxkU25hcFRvU2xpZGVFZGdlKSB7XG4gICAgICB2Y
1XIgbWluVmlzaWJsZVNsaWRlcztcbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIC8vIEZvciAnYXV0bycgbW9kZSwgY2FsY3VsYXRlIGhvdyBtYW55IHNsaWRlcyBmaXQgYmFzZWQgb24gYWN0dWFsIHNpemVzXG4gICAgICAgIG1pblZpc2libGVTbGlkZXMgPSAxO1xuICAgICAgICB2YXIgYWNjdW11bGF0ZWRTaXplID0gMDtcbiAgICAgICAgZm9yICh2YXIgX2kgPSBzbGlkZXNTaXplc0dyaWQubGVuZ3RoIC0gMTsgX2kgPj0gMDsgX2kgLT0gMSkge1xuICAgICAgICAgIGFjY3VtdWxhdGVkU2l6ZSArPSBzbGlkZXNTaXplc0dyaWRbX2ldICsgKF9pIDwgc2xpZGVzU2l6ZXNHcmlkLmxlbmd0aCAtIDEgPyBzcGFjZUJldHdlZW4gOiAwKTtcbiAgICAgICAgICBpZiAoYWNjdW11bGF0ZWRTaXplIDw9IHN3aXBlclNpemUpIHtcbiAgICAgICAgICAgIG1pblZpc2libGVTbGlkZXMgPSBzbGlkZXNTaXplc0dyaWQubGVuZ3RoIC0gX2k7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluVmlzaWJsZVNsaWRlcyA9IE1hdGguZmxvb3IocGFyYW1zLnNsaWRlc1BlclZpZXcpO1xuICAgICAgfVxuICAgICAgbGFzdEFsbG93ZWRTbmFwSW5kZXggPSBNYXRoLm1heChzbGlkZXNMZW5ndGggLSBtaW5WaXNpYmxlU2xpZGVzLCAwKTtcbiAgICB9XG4gICAgdmFyIG5ld1NsaWRlc0dyaWQgPSBbXTtcbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBzbmFwR3JpZC5sZW5ndGg7IF9pMiArPSAxKSB7XG4gICAgICB2Y
1XIgc2xpZGVzR3JpZEl0ZW0gPSBzbmFwR3JpZFtfaTJdO1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlc0dyaWRJdGVtID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkSXRlbSk7XG4gICAgICBpZiAoc2hvdWxkU25hcFRvU2xpZGVFZGdlKSB7XG4gICAgICAgIC8vIFdoZW4gc25hcFRvU2xpZGVFZGdlIGlzIGVuYWJsZWQsIG9ubHkga2VlcCBzbmFwcyB1cCB0byBsYXN0QWxsb3dlZFNuYXBJbmRleFxuICAgICAgICBpZiAoX2kyIDw9IGxhc3RBbGxvd2VkU25hcEluZGV4KSB7XG4gICAgICAgICAgbmV3U2xpZGVzR3JpZC5wdXNoKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzbmFwR3JpZFtfaTJdIDw9IHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIHtcbiAgICAgICAgLy8gV2hlbiBzbmFwVG9TbGlkZUVkZ2UgaXMgZGlzYWJsZWQsIGtlZXAgc25hcHMgdGhhdCBmaXQgd2l0aGluIHNjcm9sbGFibGUgYXJlYVxuICAgICAgICBuZXdTbGlkZXNHcmlkLnB1c2goc2xpZGVzR3JpZEl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBzbmFwR3JpZCA9IG5ld1NsaWRlc0dyaWQ7XG4gICAgaWYgKE1hdGguZmxvb3Ioc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkgLSBNYXRoLmZsb29yKHNuYXBHcmlkW3NuYXBHcmlkLmxlbmd0aCAtIDFdKSA+IDEpIHtcbiAgICAgIC8vIE9ubHkgYWRkIGVkZ2UtYWxpZ25lZCBzbmFwIGlmIHNuYXBUb1NsaWRlRWRnZSBpcyBub3QgZW5hYmxlZFxuICAgICAgaWYgKCFzaG91bGRTbmFwVG9TbGlkZUVkZ2UpIHtcbiAgICAgICAgc25hcEdyaWQucHVzaChzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGlzVmlydHVhbCAmJiBwYXJhbXMubG9vcCkge1xuICAgIHZhciBzaXplID0gc2xpZGVzU2l6ZXNHcmlkWzBdICsgc3BhY2VCZXR3ZWVuO1xuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPiAxKSB7XG4gICAgICB2Y
1XIgZ3JvdXBzID0gTWF0aC5jZWlsKChzd2lwZXIudmlydHVhbC5zbGlkZXNCZWZvcmUgKyBzd2lwZXIudmlydHVhbC5zbGlkZXNBZnRlcikgLyBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICAgICAgdmFyIGdyb3VwU2l6ZSA9IHNpemUgKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICBmb3IgKHZhciBfaTMgPSAwOyBfaTMgPCBncm91cHM7IF9pMyArPSAxKSB7XG4gICAgICAgIHNuYXBHcmlkLnB1c2goc25hcEdyaWRbc25hcEdyaWQubGVuZ3RoIC0gMV0gKyBncm91cFNpemUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBzd2lwZXIudmlydHVhbC5zbGlkZXNCZWZvcmUgKyBzd2lwZXIudmlydHVhbC5zbGlkZXNBZnRlcjsgX2k0ICs9IDEpIHtcbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDEpIHtcbiAgICAgICAgc25hcEdyaWQucHVzaChzbmFwR3JpZFtzbmFwR3JpZC5sZW5ndGggLSAxXSArIHNpemUpO1xuICAgICAgfVxuICAgICAgc2xpZGVzR3JpZC5wdXNoKHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAxXSArIHNpemUpO1xuICAgICAgc3dpcGVyLnZpcnR1YWxTaXplICs9IHNpemU7XG4gICAgfVxuICB9XG4gIGlmIChzbmFwR3JpZC5sZW5ndGggPT09IDApIHNuYXBHcmlkID0gWzBdO1xuICBpZiAoc3BhY2VCZXR3ZWVuICE9PSAwKSB7XG4gICAgdmFyIGtleSA9IHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBydGwgPyAnbWFyZ2luTGVmdCcgOiBzd2lwZXIuZ2V0RGlyZWN0aW9uTGFiZWwoJ21hcmdpblJpZ2h0Jyk7XG4gICAgc2xpZGVzLmZpbHRlcihmdW5jdGlvbiAoXywgc2xpZGVJbmRleCkge1xuICAgICAgaWYgKCFwYXJhbXMuY3NzTW9kZSB8fCBwYXJhbXMubG9vcCkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoc2xpZGVJbmRleCA9PT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgICAgc2xpZGVFbC5zdHlsZVtrZXldID0gXCJcIi5jb25jYXQoc3BhY2VCZXR3ZWVuLCBcInB4XCIpO1xuICAgIH0pO1xuICB9XG4gIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzQm91bmRzKSB7XG4gICAgdmFyIGFsbFNsaWRlc1NpemUgPSAwO1xuICAgIHNsaWRlc1NpemVzR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZVNpemVWYWx1ZSkge1xuICAgICAgYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChzcGFjZUJldHdlZW4gfHwgMCk7XG4gICAgfSk7XG4gICAgYWxsU2xpZGVzU2l6ZSAtPSBzcGFj
1ZUJldHdlZW47XG4gICAgdmFyIG1heFNuYXAgPSBhbGxTbGlkZXNTaXplID4gc3dpcGVyU2l6ZSA/IGFsbFNsaWRlc1NpemUgLSBzd2lwZXJTaXplIDogMDtcbiAgICBzbmFwR3JpZCA9IHNuYXBHcmlkLm1hcChmdW5jdGlvbiAoc25hcCkge1xuICAgICAgaWYgKHNuYXAgPD0gMCkgcmV0dXJuIC1vZmZzZXRCZWZvcmU7XG4gICAgICBpZiAoc25hcCA+IG1heFNuYXApIHJldHVybiBtYXhTbmFwICsgb2Zmc2V0QWZ0ZXI7XG4gICAgICByZXR1cm4gc25hcDtcbiAgICB9KTtcbiAgfVxuICBpZiAocGFyYW1zLmNlbnRlckluc3VmZmljaWVudFNsaWRlcykge1xuICAgIHZhciBfYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlU2l6ZVZhbHVlKSB7XG4gICAgICBfYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChzcGFjZUJldHdlZW4gfHwgMCk7XG4gICAgfSk7XG4gICAgX2FsbFNsaWRlc1NpemUgLT0gc3BhY2VCZXR3ZWVuO1xuICAgIGlmIChfYWxsU2xpZGVzU2l6ZSA8IHN3aXBlclNpemUpIHtcbiAgICAgIHZhciBhbGxTbGlkZXNPZmZzZXQgPSAoc3dpcGVyU2l6ZSAtIF9hbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICBzbmFwR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgICAgc25hcEdyaWRbc25hcEluZGV4XSA9IHNuYXAgLSBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaChmdW5jdGlvbiAoc25hcCwgc25hcEluZGV4KSB7XG4gICAgICAgIHNsaWRlc0dyaWRbc25hcEluZGV4XSA9IHNuYXAgKyBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICBzbGlkZXM6IHNsaWRlcyxcbiAgICBzbmFwR3JpZDogc25hcEdyaWQsXG4gICAgc2xpZGVzR3JpZDogc2xpZGVzR3JpZCxcbiAgICBzbGlkZXNTaXplc0dyaWQ6IHNsaWRlc1NpemVzR3JpZFxuICB9KTtcbiAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuY3NzTW9kZSAmJiAhcGFyYW1zLmNlbnRlcmVkU2xpZGVzQm91bmRzKSB7XG4gICAgc2V0Q1NTUHJvcGVydHkod3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWJlZm9yZScsIFwiXCIuY29uY2F0KC1zbmFwR3JpZFswXSwgXCJweFwiKSk7XG4gICAgc2V0Q1NTUHJvcGVydHkod3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWFmdGVyJywgXCJcIi5jb25jYXQoc3dpcGVyLnNpemUgLyAyIC0gc2xpZGVzU2l6ZXNHcmlkW3NsaWRlc1NpemVzR3JpZC5sZW5ndGggLSAxXSAvIDIsIFwicHhcIikpO1xuICAgIHZhciBhZGRUb1NuYXBHcmlkID0gLXN3aXBlci5zbmFwR3JpZFswXTtcbiAgICB2YXIgYWRkVG9TbGlkZXNHcmlkID0gLXN3aXBlci5zbGlkZXNHcmlkWzBdO1xuICAgIHN3aXBlci5zbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZC5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2ICsgYWRkVG9TbmFwR3JpZDtcbiAgICB9KTtcbiAgICBzd2lwZXIuc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHYgKyBhZGRUb1NsaWRlc0dyaWQ7XG4gICAgfSk7XG4gIH1cbiAgaWYgKHNsaWRlc0xlbmd0aCAhPT0gcHJldmlvdXNTbGlkZXNMZW5ndGgpIHtcbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVzTGVuZ3RoQ2hhbmdlJyk7XG4gIH1cbiAgaWYgKHNuYXBHcmlkLmxlbmd0aCAhPT0gcHJldmlvdXNTbmFwR3JpZExlbmd0aCkge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgc3dpcGVyLmVtaXQoJ3NuYXBHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gIH1cbiAgaWYgKHNsaWRlc0dyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGgpIHtcbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVzR3JpZExlbmd0aENoYW5nZScpO1xuICB9XG4gIGlmIChwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgfVxuICBzd2lwZXIuZW1pdCgnc2xpZGVzVXBkYXRlZCcpO1xuICBpZiAoIWlzVmlydHVhbCAmJiAhcGFyYW1zLmNzc01vZGUgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2ZhZGUnKSkge1xuICAgIHZhciBiYWNrRmFjZUhpZGRlbkNsYXNzID0gXCJcIi5jb25jYXQocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MsIFwiYmFja2ZhY2UtaGlkZGVuXCIpO1xuICAgIHZhciBoYXNDbGFzc0JhY2tmYWNlQ2xhc3NBZGRlZCA9IHN3aXBlci5lbC5jbGFzc0xpc3QuY29udGFpbnMoYmFja0ZhY2VIaWRkZW5DbGFzcyk7XG4gICAgaWYgKHNsaWRlc0xlbmd0aCA8PSBwYXJhbXMubWF4QmFja2ZhY2VIaWRkZW5TbGlkZXMpIHtcbiAgICAgIGlmICghaGFzQ2xhc3NCYWNrZmFjZUNsYXNzQWRkZWQpIHN3aXBlci5lbC5jbGFzc0xpc3QuYWRkKGJhY2tGYWNlSGlkZGVuQ2xhc3MpO1xuICAgIH0gZWxzZSBpZiAoaGFzQ2xhc3NCYWNrZmFjZUNsYXNzQWRkZWQpIHtcbiAgICAgIHN3aXBlci5lbC5jbGFzc0xpc3QucmVtb3ZlKGJhY2tGYWNlSGlkZGVuQ2xhc3MpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlQXV0b0hlaWdodChzcGVlZCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIGFjdGl2ZVNsaWRlcyA9IFtdO1xuICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIHZhciBuZXdIZWlnaHQgPSAwO1xuICB2YXIgaTtcbiAgaWYgKHR5cGVvZiBzcGVlZCA9PT0gJ251bWJlcicpIHtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gIH0gZWxzZSBpZiAoc3BlZWQgPT09IHRydWUpIHtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzd2lwZXIucGFyYW1zLnNwZWVkKTtcbiAgfVxuICB2YXIgZ2V0U2xpZGVCeUluZGV4ID0gZnVuY3Rpb24gZ2V0U2xpZGVCeUluZGV4KGluZGV4KSB7XG4gICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgcmV0dXJuIHN3aXBlci5zbGlkZXNbc3dpcGVyLmdldFNsaWRlSW5kZXhCeURhdGEoaW5kZXgpXTtcbiAgICB9XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZXNbaW5kZXhdO1xuICB9O1xuICAvLyBGaW5kIHNsaWRlcyBjdXJyZW50bHkgaW4gdmlld1xuICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAoc3dpcGVyLnZpc2libGVTbGlkZXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlKSB7XG4gICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgTWF0aC5jZWlsKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyk7IGkgKz0gMSkge1xuICAgICAgICB2Y
1XIgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXggKyBpO1xuICAgICAgICBpZiAoaW5kZXggPiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAmJiAhaXNWaXJ0dWFsKSBicmVhaztcbiAgICAgICAgYWN0aXZlU2xpZGVzLnB1c2goZ2V0U2xpZGVCeUluZGV4KGluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVNsaWRlcy5wdXNoKGdldFNsaWRlQnlJbmRleChzd2lwZXIuYWN0aXZlSW5kZXgpKTtcbiAgfVxuXG4gIC8vIEZpbmQgbmV3IGhlaWdodCBmcm9tIGhpZ2hlc3Qgc2xpZGUgaW4gdmlld1xuICBmb3IgKGkgPSAwOyBpIDwgYWN0aXZlU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhY3RpdmVTbGlkZXNbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgaGVpZ2h0ID0gYWN0aXZlU2xpZGVzW2ldLm9mZnNldEhlaWdodDtcbiAgICAgIG5ld0hlaWdodCA9IGhlaWdodCA+IG5ld0hlaWdodCA/IGhlaWdodCA6IG5ld0hlaWdodDtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgSGVpZ2h0XG4gIGlmIChuZXdIZWlnaHQgfHwgbmV3SGVpZ2h0ID09PSAwKSBzd2lwZXIud3JhcHBlckVsLnN0eWxlLmhlaWdodCA9IFwiXCIuY29uY2F0KG5ld0hlaWdodCwgXCJweFwiKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVNsaWRlc09mZnNldCgpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgdmFyIG1pbnVzT2Zmc2V0ID0gc3dpcGVyLmlzRWxlbWVudCA/IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHN3aXBlci53cmFwcGVyRWwub2Zmc2V0TGVmdCA6IHN3aXBlci53cmFwcGVyRWwub2Zmc2V0VG9wIDogMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBzbGlkZXNbaV0uc3dpcGVyU2xpZGVPZmZzZXQgPSAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGVzW2ldLm9mZnNldExlZnQgOiBzbGlkZXNbaV0ub2Zmc2V0VG9wKSAtIG1pbnVzT2Zmc2V0IC0gc3dpcGVyLmNzc092ZXJmbG93QWRqdXN0bWVudCgpO1xuICB9XG59XG52YXIgdG9nZ2xlU2xpZGVDbGFzc2VzJDEgPSBmdW5jdGlvbiB0b2dnbGVTbGlkZUNsYXNzZXMkMShzbGlkZUVsLCBjb25kaXRpb24sIGNsYXNzTmFtZSkge1xuICBpZiAoY29uZGl0aW9uICYmICFzbGlkZUVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgc2xpZGVFbC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAoIWNvbmRpdGlvbiAmJiBzbGlkZUVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgc2xpZGVFbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH1cbn07XG5mdW5jdGlvbiB1cGRhdGVTbGlkZXNQcm9ncmVzcygpIHtcbiAgdmFyIHRyYW5zbGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcyAmJiB0aGlzLnRyYW5zbGF0ZSB8fCAwO1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHZhciBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzLFxuICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQ7XG4gIGlmIChzbGlkZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGlmICh0eXBlb2Ygc2xpZGVzWzBdLnN3aXBlclNsaWRlT2Zmc2V0ID09PSAndW5kZWZpbmVkJykgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICB2YXIgb2Zmc2V0Q2VudGVyID0gLXRyYW5zbGF0ZTtcbiAgaWYgKHJ0bCkgb2Zmc2V0Q2VudGVyID0gdHJhbnNsYXRlO1xuICBzd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgc3dpcGVyLnZpc2libGVTbGlkZXMgPSBbXTtcbiAgdmFyIHNwYWNlQmV0d2VlbiA9IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gIGlmICh0eXBlb2Ygc3BhY2VCZXR3ZWVuID09PSAnc3RyaW5nJyAmJiBzcGFjZUJldHdlZW4uaW5kZXhPZignJScpID49IDApIHtcbiAgICBzcGFjZUJldHdlZW4gPSBwYXJzZUZsb2F0KHNwYWNlQmV0d2Vlbi5yZXBsYWNlKCclJywgJycpKSAvIDEwMCAqIHN3aXBlci5zaXplO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZUJldHdlZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gcGFyc2VGbG9hdChzcGFjZUJldHdlZW4pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIF9zbGlkZTIgPSBzbGlkZXNbaV07XG4gICAgdmFyIHNsaWRlT2Zmc2V0ID0gX3NsaWRlMi5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICBpZiAocGFyYW1zLmNzc01vZGUgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBzbGlkZU9mZnNldCAtPSBzbGlkZXNbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgfVxuICAgIHZhciBzbGlkZVByb2dyZXNzID0gKG9mZnNldENlbnRlciArIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgPyBzd2lwZXIubWluVHJhbnNsYXRlKCkgOiAwKSAtIHNsaWRlT2Zmc2V0KSAvIChfc2xpZGUyLnN3aXBlclNsaWRlU2l6ZSArIHNwYWNlQmV0d2Vlbik7XG4gICAgdmFyIG9yaWdpbmFsU2xpZGVQcm9ncmVzcyA9IChvZmZzZXRDZW50ZXIgLSBzbmFwR3JpZFswXSArIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgPyBzd2lwZXIubWluVHJhbnNsYXRlKCkgOiAwKSAtIHNsaWRlT2Zmc2V0KSAvIChfc2xpZGUyLnN3aXBlclNsaWRlU2l6ZSArIHNwYWNlQmV0d2Vlbik7XG4gICAgdmFyIHNsaWRlQmVmb3JlID0gLShvZmZzZXRDZW50ZXIgLSBzbGlkZU9mZnNldCk7XG4gICAgdmFyIHNsaWRlQWZ0ZXIgPSBzbGlkZUJlZm9yZSArIHN3aXBlci5zbGlkZXNTaXplc0dyaWRbaV07XG4gICAgdmFyIGlzRnVsbHlWaXNpYmxlID0gc2xpZGVCZWZvcmUgPj0gMCAmJiBzbGlkZUJlZm9yZSA8PSBzd2lwZXIuc2l6ZSAtIHN3aXBlci5zbGlkZXNTaXplc0dyaWRbaV07XG4gICAgdmFyIGlzVmlzaWJsZSA9IHNsaWRlQmVmb3JlID49IDAgJiYgc2xpZGVCZWZvcmUgPCBzd2lwZXIuc2l6ZSAtIDEgfHwgc2xpZGVBZnRlciA+IDEgJiYgc2xpZGVBZnRlciA8PSBzd2lwZXIuc2l6ZSB8fCBzbGlkZUJlZm9yZSA8PSAwICYmIHNsaWRlQWZ0ZXIgPj0gc3dpcGVyLnNpemU7XG4gICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXMucHVzaChfc2xpZGUyKTtcbiAgICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZX
1hlcy5wdXNoKGkpO1xuICAgIH1cbiAgICB0b2dnbGVTbGlkZUNsYXNzZXMkMShfc2xpZGUyLCBpc1Zpc2libGUsIHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG4gICAgdG9nZ2xlU2xpZGVDbGFzc2VzJDEoX3NsaWRlMiwgaXNGdWxseVZpc2libGUsIHBhcmFtcy5zbGlkZUZ1bGx5VmlzaWJsZUNsYXNzKTtcbiAgICBfc2xpZGUyLnByb2dyZXNzID0gcnRsID8gLXNsaWRlUHJvZ3Jlc3MgOiBzbGlkZVByb2dyZXNzO1xuICAgIF9zbGlkZTIub3JpZ2luYWxQcm9ncmVzcyA9IHJ0bCA/IC1vcmlnaW5hbFNsaWRlUHJvZ3Jlc3MgOiBvcmlnaW5hbFNsaWRlUHJvZ3Jlc3M7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgaWYgKHR5cGVvZiB0cmFuc2xhdGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIG11bHRpcGxpZXIgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLTEgOiAxO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHRyYW5zbGF0ZSA9IHN3aXBlciAmJiBzd2lwZXIudHJhbnNsYXRlICYmIHN3aXBlci50cmFuc2xhdGUgKiBtdWx0aXBsaWVyIHx8IDA7XG4gIH1cbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgdmFyIHByb2dyZXNzID0gc3dpcGVyLnByb2dyZXNzLFxuICAgIGlzQmVnaW5uaW5nID0gc3dpcGVyLmlzQmVnaW5uaW5nLFxuICAgIGlzRW5kID0gc3dpcGVyLmlzRW5kLFxuICAgIHByb2dyZXNzTG9vcCA9IHN3aXBlci5wcm9ncmVzc0xvb3A7XG4gIHZhciB3YXNCZWdpbm5pbmcgPSBpc0JlZ2lubmluZztcbiAgdmFyIHdhc0VuZCA9IGlzRW5kO1xuICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICBwcm9ncmVzcyA9IDA7XG4gICAgaXNCZWdpbm5pbmcgPSB0cnVlO1xuICAgIGlzRW5kID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBwcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gICAgdmFyIGlzQmVnaW5uaW5nUm91bmRlZCA9IE1hdGguYWJzKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgPCAxO1xuICAgIHZhciBpc0VuZFJvdW5kZWQgPSBNYXRoLmFicyh0cmFuc2xhdGUgLSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIDwgMTtcbiAgICBpc0JlZ2lubmluZyA9IGlzQmVnaW5uaW5nUm91bmRlZCB8fCBwcm9ncmVzcyA8PSAwO1xuICAgIGlzRW5kID0gaXNFbmRSb3VuZGVkIHx8IHByb2dyZXNzID49IDE7XG4gICAgaWYgKGlzQmVnaW5uaW5nUm91bmRlZCkgcHJvZ3Jlc3MgPSAwO1xuICAgIGlmIChpc0VuZFJvdW5kZWQpIHByb2dyZXNzID0gMTtcbiAgfVxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICB2YXIgZmlyc3RTbGlkZUluZGV4ID0gc3dpcGVyLmdldFNsaWRlSW5kZXhCeURhdGEoMCk7XG4gICAgdmFyIGxhc3RTbGlkZUluZGV4ID0gc3dpcGVyLmdldFNsaWRlSW5kZXhCeURhdGEoc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxKTtcbiAgICB2YXIgZmlyc3RTbGlkZVRyYW5zbGF0ZSA9IHN3aXBlci5zbGlkZXNHcmlkW2ZpcnN0U2xpZGVJbmRleF07XG4gICAgdmFyIGxhc3RTbGlkZVRyYW5zbGF0ZSA9IHN3aXBlci5zbGlkZXNHcmlkW2xhc3RTbGlkZUluZGV4XTtcbiAgICB2YXIgdHJhbnNsYXRlTWF4ID0gc3dpcGVyLnNsaWRlc0dyaWRbc3dpcGVyLnNsaWRlc0dyaWQubGVuZ3RoIC0gMV07XG4gICAgdmFyIHRyYW5zbGF0ZUFicyA9IE1hdGguYWJzKHRyYW5zbGF0ZSk7XG4gICAgaWYgKHRyYW5zbGF0ZUFicyA+PSBmaXJzdFNsaWRlVHJhbnNsYXRlKSB7XG4gICAgICBwcm9ncmVzc0xvb3AgPSAodHJhbnNsYXRlQWJzIC0gZmlyc3RTbGlkZVRyYW5zbGF0ZSkgLyB0cmFuc2xhdGVNYXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzTG9vcCA9ICh0cmFuc2xhdGVBYnMgKyB0cmFuc2xhdGVNYXggLSBsYXN0U2xpZGVUcmFuc2xhdGUpIC8gdHJhbnNsYXRlTWF4O1xuICAgIH1cbiAgICBpZiAocHJvZ3Jlc3NMb29wID4gMSkgcHJvZ3Jlc3NMb29wIC09IDE7XG4gIH1cbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NMb29wOiBwcm9ncmVzc0xvb3AsXG4gICAgaXNCZWdpbm5pbmc6IGlzQmVnaW5uaW5nLFxuICAgIGlzRW5kOiBpc0VuZFxuICB9KTtcbiAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzIHx8IHBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiBwYXJhbXMuYXV0b0hlaWdodCkgc3dpcGVyLnVwZGF0ZVNsaWRlc1Byb2dyZXNzKHRyYW5zbGF0ZSk7XG4gIGlmIChpc0JlZ2lubmluZyAmJiAhd2FzQmVnaW5uaW5nKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3JlYWNoQmVnaW5uaW5nIHRvRWRnZScpO1xuICB9XG4gIGlmIChpc0VuZCAmJiAhd2FzRW5kKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3JlYWNoRW5kIHRvRWRnZScpO1xuICB9XG4gIGlmICh3YXNCZWdpbm5pbmcgJiYgIWlzQmVnaW5uaW5nIHx8IHdhc0VuZCAmJiAhaXNFbmQpIHtcbiAgICBzd2lwZXIuZW1pdCgnZnJvbUVkZ2UnKTtcbiAgfVxuICBzd2lwZXIuZW1pdCgncHJvZ3Jlc3MnLCBwcm9ncmVzcyk7XG59XG52YXIgdG9nZ2xlU2xpZGVDbGFzc2VzID0gZnVuY3Rpb24gdG9nZ2xlU2xpZGVDbGFzc2VzKHNsaWRlRWwsIGNvbmRpdGlvbiwgY2xhc3NOYW1lKSB7XG4gIGlmIChjb25kaXRpb24gJiYgIXNsaWRlRWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICBzbGlkZUVsLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmICghY29uZGl0aW9uICYmIHNsaWRlRWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcbiAgICBzbGlkZUVsLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfVxufTtcbmZ1bmN0aW9uIHVwZGF0ZVNsaWRlc0NsYXNzZXMoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgc2xpZGVzID0gc3dpcGVyLnNsaWRlcyxcbiAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgIHNsaWRlc0VsID0gc3dpcGVyLnNsaWRlc0VsLFxuICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICB2YXIgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgcGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgdmFyIGdyaWRFbmFibGVkID0gc3dpcGVyLmdyaWQgJiYgcGFyYW1zLmdyaWQgJiYgcGFyYW1zLmdyaWQucm93cyA+IDE7XG4gIHZhciBnZXRGaWx0ZXJlZFNsaWRlID0gZnVuY3Rpb24gZ2V0RmlsdGVyZWRTbGlkZShzZWxlY3Rvcikge1xuICAgIHJldHVybi
1BlbGVtZW50Q2hpbGRyZW4oc2xpZGVzRWwsIFwiLlwiLmNvbmNhdChwYXJhbXMuc2xpZGVDbGFzcykuY29uY2F0KHNlbGVjdG9yLCBcIiwgc3dpcGVyLXNsaWRlXCIpLmNvbmNhdChzZWxlY3RvcikpWzBdO1xuICB9O1xuICB2YXIgYWN0aXZlU2xpZGU7XG4gIHZhciBwcmV2U2xpZGU7XG4gIHZhciBuZXh0U2xpZGU7XG4gIGlmIChpc1ZpcnR1YWwpIHtcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHZhciBzbGlkZUluZGV4ID0gYWN0aXZlSW5kZXggLSBzd2lwZXIudmlydHVhbC5zbGlkZXNCZWZvcmU7XG4gICAgICBpZiAoc2xpZGVJbmRleCA8IDApIHNsaWRlSW5kZXggPSBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoICsgc2xpZGVJbmRleDtcbiAgICAgIGlmIChzbGlkZUluZGV4ID49IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGgpIHNsaWRlSW5kZXggLT0gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aDtcbiAgICAgIGFjdGl2ZVNsaWRlID0gZ2V0RmlsdGVyZWRTbGlkZShcIltkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cXFwiXCIuY29uY2F0KHNsaWRlSW5kZXgsIFwiXFxcIl1cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVTbGlkZSA9IGdldEZpbHRlcmVkU2xpZGUoXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiLmNvbmNhdChhY3RpdmVJbmRleCwgXCJcXFwiXVwiKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChncmlkRW5hYmxlZCkge1xuICAgICAgYWN0aXZlU2xpZGUgPSBzbGlkZXMuZmluZChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgICAgICByZXR1cm4gc2xpZGVFbC5jb2x1bW4gPT09IGFjdGl2ZUluZGV4O1xuICAgICAgfSk7XG4gICAgICBuZXh0U2xpZGUgPSBzbGlkZXMuZmluZChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgICAgICByZXR1cm4gc2xpZGVFbC5jb2x1bW4gPT09IGFjdGl2ZUluZGV4ICsgMTtcbiAgICAgIH0pO1xuICAgICAgcHJldlNsaWRlID0gc2xpZGVzLmZpbmQoZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgICAgcmV0dXJuIHNsaWRlRWwuY29sdW1uID09PSBhY3RpdmVJbmRleCAtIDE7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZlU2xpZGUgPSBzbGlkZXNbYWN0aXZlSW5kZXhdO1xuICAgIH1cbiAgfVxuICBpZiAoYWN0aXZlU2xpZGUpIHtcbiAgICBpZiAoIWdyaWRFbmFibGVkKSB7XG4gICAgICAvLyBOZXh0IFNsaWRlXG4gICAgICBuZXh0U2xpZGUgPSBlbGVtZW50TmV4dEFsbChhY3RpdmVTbGlkZSwgXCIuXCIuY29uY2F0KHBhcmFtcy5zbGlkZUNsYXNzLCBcIiwgc3dpcGVyLXNsaWRlXCIpKVswXTtcbiAgICAgIGlmIChwYXJhbXMubG9vcCAmJiAhbmV4dFNsaWRlKSB7XG4gICAgICAgIG5leHRTbGlkZSA9IHNsaWRlc1swXTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJldiBTbGlkZVxuICAgICAgcHJldlNsaWRlID0gZWxlbWVudFByZXZBbGwoYWN0aXZlU2xpZGUsIFwiLlwiLmNvbmNhdChwYXJhbXMuc2xpZGVDbGFzcywgXCIsIHN3aXBlci1zbGlkZVwiKSlbMF07XG4gICAgICBpZiAocGFyYW1zLmxvb3AgJiYgIXByZXZTbGlkZSA9PT0gMCkge1xuICAgICAgICBwcmV2U2xpZGUgPSBzbGlkZXNbc2xpZGVzLmxlbmd0aCAtIDFdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgIHRvZ2dsZVNsaWRlQ2xhc3NlcyhzbGlkZUVsLCBzbGlkZUVsID09PSBhY3RpdmVTbGlkZSwgcGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuICAgIHRvZ2dsZVNsaWRlQ2xhc3NlcyhzbGlkZUVsLCBzbGlkZUVsID09PSBuZXh0U2xpZGUsIHBhcmFtcy5zbGlkZU5leHRDbGFzcyk7XG4gICAgdG9nZ2xlU2xpZGVDbGFzc2VzKHNsaWRlRWwsIHNsaWRlRWwgPT09IHByZXZTbGlkZSwgcGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgfSk7XG4gIHN3aXBlci5lbWl0U2xpZGVzQ2xhc3NlcygpO1xufVxudmFyIHByb2Nlc3NMYXp5UHJlbG9hZGVyID0gZnVuY3Rpb24gcHJvY2Vzc0xhenlQcmVsb2FkZXIoc3dpcGVyLCBpbWFnZUVsKSB7XG4gIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5wYXJhbXMpIHJldHVybjtcbiAgdmFyIHNsaWRlU2VsZWN0b3IgPSBmdW5jdGlvbiBzbGlkZVNlbGVjdG9yKCkge1xuICAgIHJldHVybiBzd2lwZXIuaXNFbGVtZW50ID8gXCJzd2lwZXItc2xpZGVcIiA6IFwiLlwiLmNvbmNhdChzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpO1xuICB9O1xuICB2YXIgc2xpZGVFbCA9IGltYWdlRWwuY2xvc2VzdChzbGlkZVNlbGVjdG9yKCkpO1xuICBpZiAoc2xpZGVFbCkge1xuICAgIHZhciBsYXp5RWwgPSBzbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoXCIuXCIuY29uY2F0KHN3aXBlci5wYXJhbXMubGF6eVByZWxvYWRlckNsYXNzKSk7XG4gICAgaWYgKCFsYXp5RWwgJiYgc3dpcGVyLmlzRWxlbWVudCkge1xuICAgICAgaWYgKHNsaWRlRWwuc2hhZG93Um9vdCkge1xuICAgICAgICBsYXp5RWwgPSBzbGlkZUVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoc3dpcGVyLnBhcmFtcy5sYXp5UHJlbG9hZGVyQ2xhc3MpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluaXQgbGF0ZXJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoc2xpZGVFbC5zaGFkb3dSb290KSB7XG4gICAgICAgICAgICBsYXp5RWwgPSBzbGlkZUVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcIi5cIi5jb25jYXQoc3dpcGVyLnBhcmFtcy5sYXp5UHJlbG9hZGVyQ2xhc3MpKTtcbiAgICAgICAgICAgIGlmIChsYXp5RWwgJiYgIWxhenlFbC5sYXp5UHJlbG9hZGVyTWFuYWdlZCkgbGF6eUVsLnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFNraXAgcmVtb3ZhbCBpZiBtYW5hZ2VkIGJ5IFJlYWN0L1Z1ZSBjb21wb25lbnRcbiAgICBpZiAobGF6eUVsICYmICFsYXp5RWwubGF6eVByZWxvYWRlck1hbmFnZWQpIGxhenlFbC5yZW1vdmUoKTtcbiAgfVxufTtcbnZhciB1bmxhenkgPSBmdW5jdGlvbiB1bmxhenkoc3dpcGVyLCBpbmRleCkge1xuICBpZiAoIXN3aXBlci5zbGlkZXNbaW5kZXhdKSByZXR1cm47XG4gIHZhciBpbWFnZUVsID0gc3dpcGVyLnNsaWRlc1tpbmRleF0ucXVlcnlTZWxlY3RvcignW2xvYWRpbmc9XCJsYXp5XCJdJyk7XG4gIGlmIChpbWFnZUVsKSBpbWFnZUVsLnJlbW92ZUF0dHJpYnV0ZSgnbG9hZGluZycpO1xufTtcbnZhciBwcmVsb2FkID0gZnVuY3Rpb24gcHJlbG9hZChzd2lwZXIp
1IHtcbiAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLnBhcmFtcykgcmV0dXJuO1xuICB2YXIgYW1vdW50ID0gc3dpcGVyLnBhcmFtcy5sYXp5UHJlbG9hZFByZXZOZXh0O1xuICB2YXIgbGVuID0gc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gIGlmICghbGVuIHx8ICFhbW91bnQgfHwgYW1vdW50IDwgMCkgcmV0dXJuO1xuICBhbW91bnQgPSBNYXRoLm1pbihhbW91bnQsIGxlbik7XG4gIHZhciBzbGlkZXNQZXJWaWV3ID0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgPyBzd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoKSA6IE1hdGguY2VpbChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcpO1xuICB2YXIgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gIGlmIChzd2lwZXIucGFyYW1zLmdyaWQgJiYgc3dpcGVyLnBhcmFtcy5ncmlkLnJvd3MgPiAxKSB7XG4gICAgdmFyIGFjdGl2ZUNvbHVtbiA9IGFjdGl2ZUluZGV4O1xuICAgIHZhciBwcmVsb2FkQ29sdW1ucyA9IFthY3RpdmVDb2x1bW4gLSBhbW91bnRdO1xuICAgIHByZWxvYWRDb2x1bW5zLnB1c2guYXBwbHkocHJlbG9hZENvbHVtbnMsIF90b0NvbnN1bWFibGVBcnJheShBcnJheS5mcm9tKHtcbiAgICAgIGxlbmd0aDogYW1vdW50XG4gICAgfSkubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gYWN0aXZlQ29sdW1uICsgc2xpZGVzUGVyVmlldyArIGk7XG4gICAgfSkpKTtcbiAgICBzd2lwZXIuc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlRWwsIGkpIHtcbiAgICAgIGlmIChwcmVsb2FkQ29sdW1ucy5pbmNsdWRlcyhzbGlkZUVsLmNvbHVtbikpIHVubGF6eShzd2lwZXIsIGkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgc2xpZGVJbmRleExhc3RJblZpZXcgPSBhY3RpdmVJbmRleCArIHNsaWRlc1BlclZpZXcgLSAxO1xuICBpZiAoc3dpcGVyLnBhcmFtcy5yZXdpbmQgfHwgc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgZm9yICh2YXIgaSA9IGFjdGl2ZUluZGV4IC0gYW1vdW50OyBpIDw9IHNsaWRlSW5kZXhMYXN0SW5WaWV3ICsgYW1vdW50OyBpICs9IDEpIHtcbiAgICAgIHZhciByZWFsSW5kZXggPSAoaSAlIGxlbiArIGxlbikgJSBsZW47XG4gICAgICBpZiAocmVhbEluZGV4IDwgYWN0aXZlSW5kZXggfHwgcmVhbEluZGV4ID4gc2xpZGVJbmRleExhc3RJblZpZXcpIHVubGF6eShzd2lwZXIsIHJlYWxJbmRleCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pNSA9IE1hdGgubWF4KGFjdGl2ZUluZGV4IC0gYW1vdW50LCAwKTsgX2k1IDw9IE1hdGgubWluKHNsaWRlSW5kZXhMYXN0SW5WaWV3ICsgYW1vdW50LCBsZW4gLSAxKTsgX2k1ICs9IDEpIHtcbiAgICAgIGlmIChfaTUgIT09IGFjdGl2ZUluZGV4ICYmIChfaTUgPiBzbGlkZUluZGV4TGFzdEluVmlldyB8fCBfaTUgPCBhY3RpdmVJbmRleCkpIHtcbiAgICAgICAgdW5sYXp5KHN3aXBlciwgX2k1KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5mdW5jdGlvbiBnZXRBY3RpdmVJbmRleEJ5VHJhbnNsYXRlKHN3aXBlcikge1xuICB2YXIgc2xpZGVzR3JpZCA9IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHZhciB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICB2YXIgYWN0aXZlSW5kZXg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0gJiYgdHJhbnNsYXRlIDwgc2xpZGVzR3JpZFtpICsgMV0gLSAoc2xpZGVzR3JpZFtpICsgMV0gLSBzbGlkZXNHcmlkW2ldKSAvIDIpIHtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSkge1xuICAgICAgICBhY3RpdmVJbmRleCA9IGkgKyAxO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICB9XG4gIH1cbiAgLy8gTm9ybWFsaXplIHNsaWRlSW5kZXhcbiAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgaWYgKGFjdGl2ZUluZGV4IDwgMCB8fCB0eXBlb2YgYWN0aXZlSW5kZXggPT09ICd1bmRlZmluZWQnKSBhY3RpdmVJbmRleCA9IDA7XG4gIH1cbiAgcmV0dXJuIGFjdGl2ZUluZGV4O1xufVxuZnVuY3Rpb24gdXBkYXRlQWN0aXZlSW5kZXgobmV3QWN0aXZlSW5kZXgpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICB2YXIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgIHByZXZpb3VzUmVhbEluZGV4ID0gc3dpcGVyLnJlYWxJbmRleCxcbiAgICBwcmV2aW91c1NuYXBJbmRleCA9IHN3aXBlci5zbmFwSW5kZXg7XG4gIHZhciBhY3RpdmVJbmRleCA9IG5ld0FjdGl2ZUluZGV4O1xuICB2YXIgc25hcEluZGV4O1xuICB2YXIgZ2V0VmlydHVhbFJlYWxJbmRleCA9IGZ1bmN0aW9uIGdldFZpcnR1YWxSZWFsSW5kZXgoYUluZGV4KSB7XG4gICAgdmFyIHJlYWxJbmRleCA9IGFJbmRleCAtIHN3aXBlci52aXJ0dWFsLnNsaWRlc0JlZm9yZTtcbiAgICBpZiAocmVhbEluZGV4IDwgMCkge1xuICAgICAgcmVhbEluZGV4ID0gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCArIHJlYWxJbmRleDtcbiAgICB9XG4gICAgaWYgKHJlYWxJbmRleCA+PSBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoKSB7XG4gICAgICByZWFsSW5kZXggLT0gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHJlYWxJbmRleDtcbiAgfTtcbiAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBhY3RpdmVJbmRleCA9IGdldEFjdGl2ZUluZGV4QnlUcmFuc2xhdGUoc3dpcGVyKTtcbiAgfVxuICBpZiAoc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpID49IDApIHtcbiAgICBzbmFwSW5kZXggPSBzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNraXAgPSBNYXRoLm1pbihwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBhY3RpdmVJbmRleCk7XG4gICAgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKGFjdGl2ZUluZGV4IC0gc2tpcCkgLyBwYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICB9XG4gIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxO1xuICBpZiAoYWN0aXZlSW5kZXggPT09IHByZXZpb3VzSW5kZXggJiYgIXN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgIGlmIChzbmFwSW5kZXggIT09IHByZXZpb3VzU25hcEluZGV4KSB7XG4gICAgICBzd2lwZXIuc25hcEluZGV4ID0gc25hcEluZGV4O1xuICAgICAgc3dpcGVyLmVtaXQoJ3NuYXBJbmRleENoYW5nZScpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFjdGl2ZUluZGV4ID09PSBwcmV2aW91c0luZGV4ICYmIHN3aXBlci5wYXJhbXMubG9vcCAmJiBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgIHN3aXBlci5yZWFsSW5kZXggPSBnZXRWaXJ0dWFsUmVhbEluZGV4KGFjdGl2ZUluZGV4KTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGdyaWRFbmFibGVkID0gc3dpcGVyLmdyaWQgJiYgcGFyYW1zLmdyaWQgJiYgcGFyYW1zLmdyaWQucm93cyA+IDE7XG5cbiAgLy8gR2V0IHJlYWwgaW5kZXhcbiAgdmFyIHJlYWxJbmRleDtcbiAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIHJlYWxJbmRleCA9IGdldFZpcnR1YWxSZWFsSW5kZXgoYWN0aXZlSW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWFsSW5kZXggPSBhY3RpdmVJbmRleDtcbiAgICB9XG4gI
1H0gZWxzZSBpZiAoZ3JpZEVuYWJsZWQpIHtcbiAgICB2YXIgZmlyc3RTbGlkZUluQ29sdW1uID0gc3dpcGVyLnNsaWRlcy5maW5kKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICByZXR1cm4gc2xpZGVFbC5jb2x1bW4gPT09IGFjdGl2ZUluZGV4O1xuICAgIH0pO1xuICAgIHZhciBhY3RpdmVTbGlkZUluZGV4ID0gcGFyc2VJbnQoZmlyc3RTbGlkZUluQ29sdW1uLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgIGlmIChOdW1iZXIuaXNOYU4oYWN0aXZlU2xpZGVJbmRleCkpIHtcbiAgICAgIGFjdGl2ZVNsaWRlSW5kZXggPSBNYXRoLm1heChzd2lwZXIuc2xpZGVzLmluZGV4T2YoZmlyc3RTbGlkZUluQ29sdW1uKSwgMCk7XG4gICAgfVxuICAgIHJlYWxJbmRleCA9IE1hdGguZmxvb3IoYWN0aXZlU2xpZGVJbmRleCAvIHBhcmFtcy5ncmlkLnJvd3MpO1xuICB9IGVsc2UgaWYgKHN3aXBlci5zbGlkZXNbYWN0aXZlSW5kZXhdKSB7XG4gICAgdmFyIHNsaWRlSW5kZXggPSBzd2lwZXIuc2xpZGVzW2FjdGl2ZUluZGV4XS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gICAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICAgIHJlYWxJbmRleCA9IHBhcnNlSW50KHNsaWRlSW5kZXgsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVhbEluZGV4ID0gYWN0aXZlSW5kZXg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlYWxJbmRleCA9IGFjdGl2ZUluZGV4O1xuICB9XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgcHJldmlvdXNTbmFwSW5kZXg6IHByZXZpb3VzU25hcEluZGV4LFxuICAgIHNuYXBJbmRleDogc25hcEluZGV4LFxuICAgIHByZXZpb3VzUmVhbEluZGV4OiBwcmV2aW91c1JlYWxJbmRleCxcbiAgICByZWFsSW5kZXg6IHJlYWxJbmRleCxcbiAgICBwcmV2aW91c0luZGV4OiBwcmV2aW91c0luZGV4LFxuICAgIGFjdGl2ZUluZGV4OiBhY3RpdmVJbmRleFxuICB9KTtcbiAgaWYgKHN3aXBlci5pbml0aWFsaXplZCkge1xuICAgIHByZWxvYWQoc3dpcGVyKTtcbiAgfVxuICBzd2lwZXIuZW1pdCgnYWN0aXZlSW5kZXhDaGFuZ2UnKTtcbiAgc3dpcGVyLmVtaXQoJ3NuYXBJbmRleENoYW5nZScpO1xuICBpZiAoc3dpcGVyLmluaXRpYWxpemVkIHx8IHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdyZWFsSW5kZXhDaGFuZ2UnKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlQ2hhbmdlJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZUNsaWNrZWRTbGlkZShlbCwgcGF0aCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHZhciBzbGlkZSA9IGVsLmNsb3Nlc3QoXCIuXCIuY29uY2F0KHBhcmFtcy5zbGlkZUNsYXNzLCBcIiwgc3dpcGVyLXNsaWRlXCIpKTtcbiAgaWYgKCFzbGlkZSAmJiBzd2lwZXIuaXNFbGVtZW50ICYmIHBhdGggJiYgcGF0aC5sZW5ndGggPiAxICYmIHBhdGguaW5jbHVkZXMoZWwpKSB7XG4gICAgX3RvQ29uc3VtYWJsZUFycmF5KHBhdGguc2xpY2UocGF0aC5pbmRleE9mKGVsKSArIDEsIHBhdGgubGVuZ3RoKSkuZm9yRWFjaChmdW5jdGlvbiAocGF0aEVsKSB7XG4gICAgICBpZiAoIXNsaWRlICYmIHBhdGhFbC5tYXRjaGVzICYmIHBhdGhFbC5tYXRjaGVzKFwiLlwiLmNvbmNhdChwYXJhbXMuc2xpZGVDbGFzcywgXCIsIHN3aXBlci1zbGlkZVwiKSkpIHtcbiAgICAgICAgc2xpZGUgPSBwYXRoRWw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdmFyIHNsaWRlRm91bmQgPSBmYWxzZTtcbiAgdmFyIHNsaWRlSW5kZXg7XG4gIGlmIChzbGlkZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3dpcGVyLnNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHN3aXBlci5zbGlkZXNbaV0gPT09IHNsaWRlKSB7XG4gICAgICAgIHNsaWRlRm91bmQgPSB0cnVlO1xuICAgICAgICBzbGlkZUluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzbGlkZSAmJiBzbGlkZUZvdW5kKSB7XG4gICAgc3dpcGVyLmNsaWNrZWRTbGlkZSA9IHNsaWRlO1xuICAgIGlmIChzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHBhcnNlSW50KHNsaWRlLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gc2xpZGVJbmRleDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLmNsaWNrZWRTbGlkZSA9IHVuZGVmaW5lZDtcbiAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocGFyYW1zLnNsaWRlVG9DbGlja2VkU2xpZGUgJiYgc3dpcGVyLmNsaWNrZWRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHN3aXBlci5hY3RpdmVJbmRleCkge1xuICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gIH1cbn1cbnZhciB1cGRhdGUgPSB7XG4gIHVwZGF0ZVNpemU6IHVwZGF0ZVNpemUsXG4gIHVwZGF0ZVNsaWRlczogdXBkYXRlU2xpZGVzLFxuICB1cGRhdGVBdXRvSGVpZ2h0OiB1cGRhdGVBdXRvSGVpZ2h0LFxuICB1cGRhdGVTbGlkZXNPZmZzZXQ6IHVwZGF0ZVNsaWRlc09mZnNldCxcbiAgdXBkYXRlU2xpZGVzUHJvZ3Jlc3M6IHVwZGF0ZVNsaWRlc1Byb2dyZXNzLFxuICB1cGRhdGVQcm9ncmVzczogdXBkYXRlUHJvZ3Jlc3MsXG4gIHVwZGF0ZVNsaWRlc0NsYXNzZXM6IHVwZGF0ZVNsaWRlc0NsYXNzZXMsXG4gIHVwZGF0ZUFjdGl2ZUluZGV4OiB1cGRhdGVBY3RpdmVJbmRleCxcbiAgdXBkYXRlQ2xpY2tlZFNsaWRlOiB1cGRhdGVDbGlja2VkU2xpZGVcbn07XG5mdW5jdGlvbiBnZXRTd2lwZXJUcmFuc2xhdGUoKSB7XG4gIHZhciBheGlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzLmlzSG9yaXpvbn
1RhbCgpID8gJ3gnIDogJ3knO1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICB0cmFuc2xhdGUgPSBzd2lwZXIudHJhbnNsYXRlLFxuICAgIHdyYXBwZXJFbCA9IHN3aXBlci53cmFwcGVyRWw7XG4gIGlmIChwYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkge1xuICAgIHJldHVybiBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICB9XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHJldHVybiB0cmFuc2xhdGU7XG4gIH1cbiAgdmFyIGN1cnJlbnRUcmFuc2xhdGUgPSBnZXRUcmFuc2xhdGUod3JhcHBlckVsLCBheGlzKTtcbiAgY3VycmVudFRyYW5zbGF0ZSArPSBzd2lwZXIuY3NzT3ZlcmZsb3dBZGp1c3RtZW50KCk7XG4gIGlmIChydGwpIGN1cnJlbnRUcmFuc2xhdGUgPSAtY3VycmVudFRyYW5zbGF0ZTtcbiAgcmV0dXJuIGN1cnJlbnRUcmFuc2xhdGUgfHwgMDtcbn1cbmZ1bmN0aW9uIHNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcikge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgIHByb2dyZXNzID0gc3dpcGVyLnByb2dyZXNzO1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcbiAgdmFyIHogPSAwO1xuICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgeCA9IHJ0bCA/IC10cmFuc2xhdGUgOiB0cmFuc2xhdGU7XG4gIH0gZWxzZSB7XG4gICAgeSA9IHRyYW5zbGF0ZTtcbiAgfVxuICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykge1xuICAgIHggPSBNYXRoLmZsb29yKHgpO1xuICAgIHkgPSBNYXRoLmZsb29yKHkpO1xuICB9XG4gIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gIHN3aXBlci50cmFuc2xhdGUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB4IDogeTtcbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgd3JhcHBlckVsW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzY3JvbGxMZWZ0JyA6ICdzY3JvbGxUb3AnXSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IC14IDogLXk7XG4gIH0gZWxzZSBpZiAoIXBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB7XG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgeCAtPSBzd2lwZXIuY3NzT3ZlcmZsb3dBZGp1c3RtZW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHkgLT0gc3dpcGVyLmNzc092ZXJmbG93QWRqdXN0bWVudCgpO1xuICAgIH1cbiAgICB3cmFwcGVyRWwuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQoeCwgXCJweCwgXCIpLmNvbmNhdCh5LCBcInB4LCBcIikuY29uY2F0KHosIFwicHgpXCIpO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcbiAgdmFyIG5ld1Byb2dyZXNzO1xuICB2YXIgdHJhbnNsYXRlc0RpZmYgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgIG5ld1Byb2dyZXNzID0gMDtcbiAgfSBlbHNlIHtcbiAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gIH1cbiAgaWYgKG5ld1Byb2dyZXNzICE9PSBwcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyh0cmFuc2xhdGUpO1xuICB9XG4gIHN3aXBlci5lbWl0KCdzZXRUcmFuc2xhdGUnLCBzd2lwZXIudHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpO1xufVxuZnVuY3Rpb24gbWluVHJhbnNsYXRlKCkge1xuICByZXR1cm4gLXRoaXMuc25hcEdyaWRbMF07XG59XG5mdW5jdGlvbiBtYXhUcmFuc2xhdGUoKSB7XG4gIHJldHVybiAtdGhpcy5zbmFwR3JpZFt0aGlzLnNuYXBHcmlkLmxlbmd0aCAtIDFdO1xufVxuZnVuY3Rpb24gdHJhbnNsYXRlVG8oKSB7XG4gIHZhciB0cmFuc2xhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDA7XG4gIHZhciBzcGVlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdGhpcy5wYXJhbXMuc3BlZWQ7XG4gIHZhciBydW5DYWxsYmFja3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gIHZhciB0cmFuc2xhdGVCb3VuZHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHRydWU7XG4gIHZhciBpbnRlcm5hbCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ID8gYXJndW1lbnRzWzRdIDogdW5kZWZpbmVkO1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbDtcbiAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbWluVHJhbnNsYXRlID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICB2YXIgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICB2YXIgbmV3VHJhbnNsYXRlO1xuICBpZiAodHJhbnNsYXRlQm91bmRzICYmIHRyYW5zbGF0ZSA+IG1pblRyYW5zbGF0ZSkgbmV3VHJhbnNsYXRlID0gbWluVHJhbnNsYXRlO2Vsc2UgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPCBtYXhUcmFuc2xhdGUpIG5ld1RyYW5zbGF0ZSA9IG1heFRyYW5zbGF0ZTtlbHNlIG5ld1RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcblxuICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1RyYW5zbGF0ZSk7XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHZhciBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzd2lwZXIuc3VwcG9ydC5zbW9vdGhTY3JvbGwpIHtcbiAgICAgICAgYW5pbWF0ZUNTU01vZGVTY3JvbGwoe1xuICAgICAgICAgI
1HN3aXBlcjogc3dpcGVyLFxuICAgICAgICAgIHRhcmdldFBvc2l0aW9uOiAtbmV3VHJhbnNsYXRlLFxuICAgICAgICAgIHNpZGU6IGlzSCA/ICdsZWZ0JyA6ICd0b3AnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbyhfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBpc0ggPyAnbGVmdCcgOiAndG9wJywgLW5ld1RyYW5zbGF0ZSksIFwiYmVoYXZpb3JcIiwgJ3Ntb290aCcpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG4gICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgIGlmIChydW5DYWxsYmFja3MpIHtcbiAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3BlZWQpO1xuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcbiAgICB9XG4gICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgIGlmICghc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCkge1xuICAgICAgICBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgICAgICAgIHN3aXBlci53cmFwcGVyRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kO1xuICAgICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci53cmFwcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbnZhciB0cmFuc2xhdGUgPSB7XG4gIGdldFRyYW5zbGF0ZTogZ2V0U3dpcGVyVHJhbnNsYXRlLFxuICBzZXRUcmFuc2xhdGU6IHNldFRyYW5zbGF0ZSxcbiAgbWluVHJhbnNsYXRlOiBtaW5UcmFuc2xhdGUsXG4gIG1heFRyYW5zbGF0ZTogbWF4VHJhbnNsYXRlLFxuICB0cmFuc2xhdGVUbzogdHJhbnNsYXRlVG9cbn07XG5mdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIGlmICghc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBcIlwiLmNvbmNhdChkdXJhdGlvbiwgXCJtc1wiKTtcbiAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnRyYW5zaXRpb25EZWxheSA9IGR1cmF0aW9uID09PSAwID8gXCIwbXNcIiA6ICcnO1xuICB9XG4gIHN3aXBlci5lbWl0KCdzZXRUcmFuc2l0aW9uJywgZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG59XG5mdW5jdGlvbiB0cmFuc2l0aW9uRW1pdChfcmVmNSkge1xuICB2YXIgc3dpcGVyID0gX3JlZjUuc3dpcGVyLFxuICAgIHJ1bkNhbGxiYWNrcyA9IF9yZWY1LnJ1bkNhbGxiYWNrcyxcbiAgICBkaXJlY3Rpb24gPSBfcmVmNS5kaXJlY3Rpb24sXG4gICAgc3RlcCA9IF9yZWY1LnN0ZXA7XG4gIHZhciBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCxcbiAgICBwcmV2aW91c0luZGV4ID0gc3dpcGVyLnByZXZpb3VzSW5kZXg7XG4gIHZhciBkaXIgPSBkaXJlY3Rpb247XG4gIGlmICghZGlyKSB7XG4gICAgaWYgKGFjdGl2ZUluZGV4ID4gcHJldmlvdXNJbmRleCkgZGlyID0gJ25leHQnO2Vsc2UgaWYgKGFjdGl2ZUluZGV4IDwgcHJldmlvdXNJbmRleCkgZGlyID0gJ3ByZXYnO2Vsc2UgZGlyID0gJ3Jlc2V0JztcbiAgfVxuICBzd2lwZXIuZW1pdChcInRyYW5zaXRpb25cIi5jb25jYXQoc3RlcCkpO1xuICBpZiAocnVuQ2FsbGJhY2tzICYmIGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgIHN3aXBlci5lbWl0KFwic2xpZGVSZXNldFRyYW5zaXRpb25cIi5jb25jYXQoc3RlcCkpO1xuICB9IGVsc2UgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgIHN3aXBlci5lbWl0KFwic2xpZGVDaGFuZ2VUcmFuc2l0aW9uXCIuY29uY2F0KHN0ZXApKTtcbiAgICBpZiAoZGlyID09PSAnbmV4dCcpIHtcbiAgICAgIHN3aXBlci5lbWl0KFwic2xpZGVOZXh0VHJhbnNpdGlvblwiLmNvbmNhdChzdGVwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5lbWl0KFwic2xpZGVQcmV2VHJhbnNpdGlvblwiLmNvbmNhdChzdGVwKSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQoKSB7XG4gIHZhciBydW5DYWxsYmFja3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gIHZhciBkaXJlY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICBpZiAocGFyYW1zLmNzc01vZGUpIHJldHVybjtcbiAgaWYgKHBhcmFtcy5hdXRv
1SGVpZ2h0KSB7XG4gICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgfVxuICB0cmFuc2l0aW9uRW1pdCh7XG4gICAgc3dpcGVyOiBzd2lwZXIsXG4gICAgcnVuQ2FsbGJhY2tzOiBydW5DYWxsYmFja3MsXG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgc3RlcDogJ1N0YXJ0J1xuICB9KTtcbn1cbmZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoKSB7XG4gIHZhciBydW5DYWxsYmFja3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gIHZhciBkaXJlY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgdHJhbnNpdGlvbkVtaXQoe1xuICAgIHN3aXBlcjogc3dpcGVyLFxuICAgIHJ1bkNhbGxiYWNrczogcnVuQ2FsbGJhY2tzLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIHN0ZXA6ICdFbmQnXG4gIH0pO1xufVxudmFyIHRyYW5zaXRpb24gPSB7XG4gIHNldFRyYW5zaXRpb246IHNldFRyYW5zaXRpb24sXG4gIHRyYW5zaXRpb25TdGFydDogdHJhbnNpdGlvblN0YXJ0LFxuICB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kXG59O1xuZnVuY3Rpb24gc2xpZGVUbygpIHtcbiAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwO1xuICB2YXIgc3BlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHJ1bkNhbGxiYWNrcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgdmFyIGludGVybmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gIHZhciBpbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgPyBhcmd1bWVudHNbNF0gOiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgaW5kZXggPSBwYXJzZUludChpbmRleCwgMTApO1xuICB9XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgc2xpZGVJbmRleCA9IGluZGV4O1xuICBpZiAoc2xpZGVJbmRleCA8IDApIHNsaWRlSW5kZXggPSAwO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZCxcbiAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgcHJldmlvdXNJbmRleCA9IHN3aXBlci5wcmV2aW91c0luZGV4LFxuICAgIGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4LFxuICAgIHJ0bCA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gIGlmICghZW5hYmxlZCAmJiAhaW50ZXJuYWwgJiYgIWluaXRpYWwgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCBzd2lwZXIuYW5pbWF0aW5nICYmIHBhcmFtcy5wcmV2ZW50SW50ZXJhY3Rpb25PblRyYW5zaXRpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiBzcGVlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBzcGVlZCA9IHN3aXBlci5wYXJhbXMuc3BlZWQ7XG4gIH1cbiAgdmFyIHNraXAgPSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgc2xpZGVJbmRleCk7XG4gIHZhciBzbmFwSW5kZXggPSBza2lwICsgTWF0aC5mbG9vcigoc2xpZGVJbmRleCAtIHNraXApIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gIGlmIChzbmFwSW5kZXggPj0gc25hcEdyaWQubGVuZ3RoKSBzbmFwSW5kZXggPSBzbmFwR3JpZC5sZW5ndGggLSAxO1xuICB2YXIgdHJhbnNsYXRlID0gLXNuYXBHcmlkW3NuYXBJbmRleF07XG4gIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gIGlmIChwYXJhbXMubm9ybWFsaXplU2xpZGVJbmRleCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgdmFyIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPSAtTWF0aC5mbG9vcih0cmFuc2xhdGUgKiAxMDApO1xuICAgICAgdmFyIG5vcm1hbGl6ZWRHcmlkID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2ldICogMTAwKTtcbiAgICAgIHZhciBub3JtYWxpemVkR3JpZE5leHQgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRbaSArIDFdICogMTAwKTtcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHcmlkICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPCBub3JtYWxpemVkR3JpZE5leHQgLSAobm9ybWFsaXplZEdyaWROZXh0IC0gbm9ybWFsaXplZEdyaWQpIC8gMikge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gbm9ybWFsaXplZEdyaWQgJiYgbm9ybWFsaXplZFRyYW5zbGF0ZSA8IG5vcm1hbGl6ZWRHcmlkTmV4dCkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHcmlkKSB7XG4gICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBEaXJlY3Rpb25zIGxvY2tzXG4gIGlmIChzd2lwZXIuaW5pdGlhbGl6ZWQgJiYgc2xpZGVJbmRleCAhPT0gYWN0aXZlSW5kZXgpIHtcbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiAocnRsID8gdHJhbnNsYXRlID4gc3dpcGVyLnRyYW5zbGF0ZSAmJiB0cmFuc2xhdGUgPiBzd2lwZXIubWluVHJhbnNsYXRlKCkgOiB0cmFuc2xhdGUgPC
1Bzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgdHJhbnNsYXRlID4gc3dpcGVyLnRyYW5zbGF0ZSAmJiB0cmFuc2xhdGUgPiBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgIGlmICgoYWN0aXZlSW5kZXggfHwgMCkgIT09IHNsaWRlSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoc2xpZGVJbmRleCAhPT0gKHByZXZpb3VzSW5kZXggfHwgMCkgJiYgcnVuQ2FsbGJhY2tzKSB7XG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVNsaWRlQ2hhbmdlU3RhcnQnKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwcm9ncmVzc1xuICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3ModHJhbnNsYXRlKTtcbiAgdmFyIGRpcmVjdGlvbjtcbiAgaWYgKHNsaWRlSW5kZXggPiBhY3RpdmVJbmRleCkgZGlyZWN0aW9uID0gJ25leHQnO2Vsc2UgaWYgKHNsaWRlSW5kZXggPCBhY3RpdmVJbmRleCkgZGlyZWN0aW9uID0gJ3ByZXYnO2Vsc2UgZGlyZWN0aW9uID0gJ3Jlc2V0JztcblxuICAvLyBpbml0aWFsIHZpcnR1YWxcbiAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICB2YXIgaXNJbml0aWFsVmlydHVhbCA9IGlzVmlydHVhbCAmJiBpbml0aWFsO1xuICAvLyBVcGRhdGUgSW5kZXhcbiAgaWYgKCFpc0luaXRpYWxWaXJ0dWFsICYmIChydGwgJiYgLXRyYW5zbGF0ZSA9PT0gc3dpcGVyLnRyYW5zbGF0ZSB8fCAhcnRsICYmIHRyYW5zbGF0ZSA9PT0gc3dpcGVyLnRyYW5zbGF0ZSkpIHtcbiAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gICAgLy8gVXBkYXRlIEhlaWdodFxuICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICB9XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICBpZiAocGFyYW1zLmVmZmVjdCAhPT0gJ3NsaWRlJykge1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9uICE9PSAncmVzZXQnKSB7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHZhciBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgdmFyIHQgPSBydGwgPyB0cmFuc2xhdGUgOiAtdHJhbnNsYXRlO1xuICAgIGlmIChzcGVlZCA9PT0gMCkge1xuICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJ25vbmUnO1xuICAgICAgICBzd2lwZXIuX2ltbWVkaWF0ZVZpcnR1YWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzVmlydHVhbCAmJiAhc3dpcGVyLl9jc3NNb2RlVmlydHVhbEluaXRpYWxTZXQgJiYgc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgPiAwKSB7XG4gICAgICAgIHN3aXBlci5fY3NzTW9kZVZpcnR1YWxJbml0aWFsU2V0ID0gdHJ1ZTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gdDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gdDtcbiAgICAgIH1cbiAgICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJyc7XG4gICAgICAgICAgc3dpcGVyLl9pbW1lZGlhdGVWaXJ0dWFsID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXN3aXBlci5zdXBwb3J0LnNtb290aFNjcm9sbCkge1xuICAgICAgICBhbmltYXRlQ1NTTW9kZVNjcm9sbCh7XG4gICAgICAgICAgc3dpcGVyOiBzd2lwZXIsXG4gICAgICAgICAgdGFyZ2V0UG9zaXRpb246IHQsXG4gICAgICAgICAgc2lkZTogaXNIID8gJ2xlZnQnIDogJ3RvcCdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgd3JhcHBlckVsLnNjcm9sbFRvKF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoe30sIGlzSCA/ICdsZWZ0JyA6ICd0b3AnLCB0KSwgXCJiZWhhdmlvclwiLCAnc21vb3RoJykpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB2YXIgYnJvd3NlciA9IGdldEJyb3dzZXIoKTtcbiAgdmFyIGlzU2FmYXJpID0gYnJvd3Nlci5pc1NhZmFyaTtcbiAgaWYgKGlzVmlydHVhbCAmJiAhaW5pdGlhbCAmJiBpc1NhZmFyaSAmJiBzd2lwZXIuaXNFbGVtZW50KSB7XG4gICAgc3dpcGVyLnZpcnR1YWwudXBkYXRlKGZhbHNlLCBmYWxzZSwgc2xpZGVJbmRleCk7XG4gIH1cbiAgc3dpcGVyLnNldFRyYW5zaXRpb24oc3BlZWQpO1xuICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleChzbGlkZUluZGV4KTtcbiAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gIHN3aXBlci50cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gIH0gZWxzZSBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICBpZiAoIXN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCkge1xuICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgICAgI
1HN3aXBlci53cmFwcGVyRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IG51bGw7XG4gICAgICAgIGRlbGV0ZSBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQ7XG4gICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHN3aXBlci53cmFwcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBzbGlkZVRvTG9vcCgpIHtcbiAgdmFyIGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwO1xuICB2YXIgc3BlZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHJ1bkNhbGxiYWNrcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgdmFyIGludGVybmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGluZGV4QXNOdW1iZXIgPSBwYXJzZUludChpbmRleCwgMTApO1xuICAgIGluZGV4ID0gaW5kZXhBc051bWJlcjtcbiAgfVxuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgaWYgKHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgaWYgKHR5cGVvZiBzcGVlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBzcGVlZCA9IHN3aXBlci5wYXJhbXMuc3BlZWQ7XG4gIH1cbiAgdmFyIGdyaWRFbmFibGVkID0gc3dpcGVyLmdyaWQgJiYgc3dpcGVyLnBhcmFtcy5ncmlkICYmIHN3aXBlci5wYXJhbXMuZ3JpZC5yb3dzID4gMTtcbiAgdmFyIG5ld0luZGV4ID0gaW5kZXg7XG4gIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICBpZiAoc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbmV3SW5kZXggPSBuZXdJbmRleCArIHN3aXBlci52aXJ0dWFsLnNsaWRlc0JlZm9yZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhcmdldFNsaWRlSW5kZXg7XG4gICAgICBpZiAoZ3JpZEVuYWJsZWQpIHtcbiAgICAgICAgdmFyIHNsaWRlSW5kZXggPSBuZXdJbmRleCAqIHN3aXBlci5wYXJhbXMuZ3JpZC5yb3dzO1xuICAgICAgICB0YXJnZXRTbGlkZUluZGV4ID0gc3dpcGVyLnNsaWRlcy5maW5kKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgICAgcmV0dXJuIHNsaWRlRWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpICogMSA9PT0gc2xpZGVJbmRleDtcbiAgICAgICAgfSkuY29sdW1uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0U2xpZGVJbmRleCA9IHN3aXBlci5nZXRTbGlkZUluZGV4QnlEYXRhKG5ld0luZGV4KTtcbiAgICAgIH1cbiAgICAgIHZhciBjb2xzID0gZ3JpZEVuYWJsZWQgPyBNYXRoLmNlaWwoc3dpcGVyLnNsaWRlcy5sZW5ndGggLyBzd2lwZXIucGFyYW1zLmdyaWQucm93cykgOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICAgIHZhciBfc3dpcGVyJHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIGNlbnRlcmVkU2xpZGVzID0gX3N3aXBlciRwYXJhbXMuY2VudGVyZWRTbGlkZXMsXG4gICAgICAgIHNsaWRlc09mZnNldEJlZm9yZSA9IF9zd2lwZXIkcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZSxcbiAgICAgICAgc2xpZGVzT2Zmc2V0QWZ0ZXIgPSBfc3dpcGVyJHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlcjtcbiAgICAgIHZhciBib3RoRGlyZWN0aW9ucyA9IGNlbnRlcmVkU2xpZGVzIHx8ICEhc2xpZGVzT2Zmc2V0QmVmb3JlIHx8ICEhc2xpZGVzT2Zmc2V0QWZ0ZXI7XG4gICAgICB2Y
1XIgc2xpZGVzUGVyVmlldyA9IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgICAgIGlmIChzbGlkZXNQZXJWaWV3ID09PSAnYXV0bycpIHtcbiAgICAgICAgc2xpZGVzUGVyVmlldyA9IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xpZGVzUGVyVmlldyA9IE1hdGguY2VpbChwYXJzZUZsb2F0KHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldywgMTApKTtcbiAgICAgICAgaWYgKGJvdGhEaXJlY3Rpb25zICYmIHNsaWRlc1BlclZpZXcgJSAyID09PSAwKSB7XG4gICAgICAgICAgc2xpZGVzUGVyVmlldyA9IHNsaWRlc1BlclZpZXcgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgbmVlZExvb3BGaXggPSBjb2xzIC0gdGFyZ2V0U2xpZGVJbmRleCA8IHNsaWRlc1BlclZpZXc7XG4gICAgICBpZiAoYm90aERpcmVjdGlvbnMpIHtcbiAgICAgICAgbmVlZExvb3BGaXggPSBuZWVkTG9vcEZpeCB8fCB0YXJnZXRTbGlkZUluZGV4IDwgTWF0aC5jZWlsKHNsaWRlc1BlclZpZXcgLyAyKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnRlcm5hbCAmJiBib3RoRGlyZWN0aW9ucyAmJiBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJyAmJiAhZ3JpZEVuYWJsZWQpIHtcbiAgICAgICAgbmVlZExvb3BGaXggPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTG9vcEZpeCkge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gYm90aERpcmVjdGlvbnMgPyB0YXJnZXRTbGlkZUluZGV4IDwgc3dpcGVyLmFjdGl2ZUluZGV4ID8gJ3ByZXYnIDogJ25leHQnIDogdGFyZ2V0U2xpZGVJbmRleCAtIHN3aXBlci5hY3RpdmVJbmRleCAtIDEgPCBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPyAnbmV4dCcgOiAncHJldic7XG4gICAgICAgIHN3aXBlci5sb29wRml4KHtcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICAgICAgICBzbGlkZVRvOiB0cnVlLFxuICAgICAgICAgIGFjdGl2ZVNsaWRlSW5kZXg6IGRpcmVjdGlvbiA9PT0gJ25leHQnID8gdGFyZ2V0U2xpZGVJbmRleCArIDEgOiB0YXJnZXRTbGlkZUluZGV4IC0gY29scyArIDEsXG4gICAgICAgICAgc2xpZGVSZWFsSW5kZXg6IGRpcmVjdGlvbiA9PT0gJ25leHQnID8gc3dpcGVyLnJlYWxJbmRleCA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChncmlkRW5hYmxlZCkge1xuICAgICAgICB2Y
1XIgX3NsaWRlSW5kZXggPSBuZXdJbmRleCAqIHN3aXBlci5wYXJhbXMuZ3JpZC5yb3dzO1xuICAgICAgICBuZXdJbmRleCA9IHN3aXBlci5zbGlkZXMuZmluZChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgICAgICAgIHJldHVybiBzbGlkZUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSAqIDEgPT09IF9zbGlkZUluZGV4O1xuICAgICAgICB9KS5jb2x1bW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdJbmRleCA9IHN3aXBlci5nZXRTbGlkZUluZGV4QnlEYXRhKG5ld0luZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhuZXdJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9KTtcbiAgcmV0dXJuIHN3aXBlcjtcbn1cblxuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5mdW5jdGlvbiBzbGlkZU5leHQoc3BlZWQpIHtcbiAgdmFyIHJ1bkNhbGxiYWNrcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIGludGVybmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkLFxuICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgYW5pbWF0aW5nID0gc3dpcGVyLmFuaW1hdGluZztcbiAgaWYgKCFlbmFibGVkIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybiBzd2lwZXI7XG4gIGlmICh0eXBlb2Ygc3BlZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgc3BlZWQgPSBzd2lwZXIucGFyYW1zLnNwZWVkO1xuICB9XG4gIHZhciBwZXJHcm91cCA9IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwID09PSAxICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cEF1dG8pIHtcbiAgICBwZXJHcm91cCA9IE1hdGgubWF4KHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygnY3VycmVudCcsIHRydWUpLCAxKTtcbiAgfVxuICB2YXIgaW5jcmVtZW50ID0gc3dpcGVyLmFjdGl2ZUluZGV4IDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwZXJHcm91cDtcbiAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChhbmltYXRpbmcgJiYgIWlzVmlydHVhbCAmJiBwYXJhbXMubG9vcFByZXZlbnRzU2xpZGluZykgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5sb29wRml4KHtcbiAgICAgIGRpcmVjdGlvbjogJ25leHQnXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLndyYXBwZXJFbC5jbGllbnRMZWZ0O1xuICAgIGlmIChzd2lwZXIuYWN0aXZlSW5kZXggPT09IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSAmJiBwYXJhbXMuY3NzTW9kZSkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4ICsgaW5jcmVtZW50LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAocGFyYW1zLnJld2luZCAmJiBzd2lwZXIuaXNFbmQpIHtcbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXggKyBpbmNyZW1lbnQsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn1cblxuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5mdW5jdGlvbiBzbGlkZVByZXYoc3BlZWQpIHtcbiAgdmFyIHJ1bkNhbGxiYWNrcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIGludGVybmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZCxcbiAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgcnRsVHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQsXG4gICAgYW5pbWF0aW5nID0gc3dpcGVyLmFuaW1hdGluZztcbiAgaWYgKCFlbmFibGVkIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybiBzd2lwZXI7XG4gIGlmICh0eXBlb2Ygc3BlZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgc3BlZWQgPSBzd2lwZXIucGFyYW1zLnNwZWVkO1xuICB9XG4gIHZhciBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBpZiAoYW5pbWF0aW5nICYmICFpc1ZpcnR1YWwgJiYgcGFyYW1zLmxvb3BQcmV2ZW50c1NsaWRpbmcpIHJldHVybiBmYWxzZTtcbiAgICBzd2lwZXIubG9vcEZpeCh7XG4gICAgICBkaXJlY3Rpb246ICdwcmV2J1xuICAgIH0pO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHN3aXBlci5fY2xpZW50TGVmdCA9IHN3aXBlci53cmFwcGVyRWwuY2xpZW50TGVmdDtcbiAgfVxuICB2YXIgdHJhbnNsYXRlID0gcnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICBmdW5jdGlvbiBub3JtYWxpemUodmFsKSB7XG4gICAgaWYgKHZhbCA8IDApIHJldHVybiAtTWF0aC5mbG9vcihNYXRoLmFicyh2YWwpKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwpO1xuICB9XG4gI
1HZhciBub3JtYWxpemVkVHJhbnNsYXRlID0gbm9ybWFsaXplKHRyYW5zbGF0ZSk7XG4gIHZhciBub3JtYWxpemVkU25hcEdyaWQgPSBzbmFwR3JpZC5tYXAoZnVuY3Rpb24gKHZhbCkge1xuICAgIHJldHVybiBub3JtYWxpemUodmFsKTtcbiAgfSk7XG4gIHZhciBpc0ZyZWVNb2RlID0gcGFyYW1zLmZyZWVNb2RlICYmIHBhcmFtcy5mcmVlTW9kZS5lbmFibGVkO1xuICB2YXIgcHJldlNuYXAgPSBzbmFwR3JpZFtub3JtYWxpemVkU25hcEdyaWQuaW5kZXhPZihub3JtYWxpemVkVHJhbnNsYXRlKSAtIDFdO1xuICBpZiAodHlwZW9mIHByZXZTbmFwID09PSAndW5kZWZpbmVkJyAmJiAocGFyYW1zLmNzc01vZGUgfHwgaXNGcmVlTW9kZSkpIHtcbiAgICB2YXIgcHJldlNuYXBJbmRleDtcbiAgICBzbmFwR3JpZC5mb3JFYWNoKGZ1bmN0aW9uIChzbmFwLCBzbmFwSW5kZXgpIHtcbiAgICAgIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IHNuYXApIHtcbiAgICAgICAgLy8gcHJldlNuYXAgPSBzbmFwO1xuICAgICAgICBwcmV2U25hcEluZGV4ID0gc25hcEluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgcHJldlNuYXBJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHByZXZTbmFwID0gaXNGcmVlTW9kZSA/IHNuYXBHcmlkW3ByZXZTbmFwSW5kZXhdIDogc25hcEdyaWRbcHJldlNuYXBJbmRleCA+IDAgPyBwcmV2U25hcEluZGV4IC0gMSA6IHByZXZTbmFwSW5kZXhdO1xuICAgIH1cbiAgfVxuICB2YXIgcHJldkluZGV4ID0gMDtcbiAgaWYgKHR5cGVvZiBwcmV2U25hcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBwcmV2SW5kZXggPSBzbGlkZXNHcmlkLmluZGV4T2YocHJldlNuYXApO1xuICAgIGlmIChwcmV2SW5kZXggPCAwKSBwcmV2SW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXggLSAxO1xuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMSAmJiBwYXJhbXMuc2xpZGVzUGVyR3JvdXBBdXRvKSB7XG4gICAgICBwcmV2SW5kZXggPSBwcmV2SW5kZXggLSBzd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoJ3ByZXZpb3VzJywgdHJ1ZSkgKyAxO1xuICAgICAgcHJldkluZGV4ID0gTWF0aC5tYXgocHJldkluZGV4LCAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKHBhcmFtcy5yZXdpbmQgJiYgc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgdmFyIGxhc3RJbmRleCA9IHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCAmJiBzd2lwZXIudmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggLSAxIDogc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxO1xuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbyhsYXN0SW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbiAgfSBlbHNlIGlmIChwYXJhbXMubG9vcCAmJiBzd2lwZXIuYWN0aXZlSW5kZXggPT09IDAgJiYgcGFyYW1zLmNzc01vZGUpIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8ocHJldkluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHByZXZJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufVxuXG4vKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmZ1bmN0aW9uIHNsaWRlUmVzZXQoc3BlZWQpIHtcbiAgdmFyIHJ1bkNhbGxiYWNrcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIGludGVybmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICBpZiAoc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIHNwZWVkID09PSAndW5kZWZpbmVkJykge1xuICAgIHNwZWVkID0gc3dpcGVyLnBhcmFtcy5zcGVlZDtcbiAgfVxuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59XG5cbi8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuZnVuY3Rpb24gc2xpZGVUb0Nsb3Nlc3Qoc3BlZWQpIHtcbiAgdmFyIHJ1bkNhbGxiYWNrcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgdmFyIGludGVybmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciB0aHJlc2hvbGQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDAuNTtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIGlmIChzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gIGlmICh0eXBlb2Ygc3BlZWQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgc3BlZWQgPSBzd2lwZXIucGFyYW1zLnNwZWVkO1xuICB9XG4gIHZhciBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgdmFyIHNraXAgPSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgaW5kZXgpO1xuICB2YXIgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKGluZGV4IC0gc2tpcCkgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgdmFyIHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIGlmICh0cmFuc2xhdGUgPj0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF0pIHtcbiAgICAvLyBUaGUgY3VycmVudCB0cmFuc2xhdGUgaXMgb24gb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgc25hcCBpbmRleCwgc28gdGhlIGNob2ljZVxuICAgIC8vIGlzIGJldHdlZW4gdGhlIGN1cnJlbnQgaW5kZXggYW5kIHRoZSBvbmUgYWZ0ZXIgaX
1QuXG4gICAgdmFyIGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgdmFyIG5leHRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCArIDFdO1xuICAgIGlmICh0cmFuc2xhdGUgLSBjdXJyZW50U25hcCA+IChuZXh0U25hcCAtIGN1cnJlbnRTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgaW5kZXggKz0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdHJhbnNsYXRlIGlzIGJlZm9yZSB0aGUgY3VycmVudCBzbmFwIGluZGV4LCBzbyB0aGUgY2hvaWNlXG4gICAgLy8gaXMgYmV0d2VlbiB0aGUgY3VycmVudCBpbmRleCBhbmQgdGhlIG9uZSBiZWZvcmUgaXQuXG4gICAgdmFyIHByZXZTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCAtIDFdO1xuICAgIHZhciBfY3VycmVudFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4XTtcbiAgICBpZiAodHJhbnNsYXRlIC0gcHJldlNuYXAgPD0gKF9jdXJyZW50U25hcCAtIHByZXZTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgaW5kZXggLT0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICB9XG4gIH1cbiAgaW5kZXggPSBNYXRoLm1heChpbmRleCwgMCk7XG4gIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHN3aXBlci5zbGlkZXNHcmlkLmxlbmd0aCAtIDEpO1xuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn1cbmZ1bmN0aW9uIHNsaWRlVG9DbGlja2VkU2xpZGUoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICBpZiAoc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBzbGlkZXNFbCA9IHN3aXBlci5zbGlkZXNFbDtcbiAgdmFyIHNsaWRlc1BlclZpZXcgPSBwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nID8gc3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCkgOiBwYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgdmFyIHNsaWRlVG9JbmRleCA9IHN3aXBlci5nZXRTbGlkZUluZGV4V2hlbkdyaWQoc3dpcGVyLmNsaWNrZWRJbmRleCk7XG4gIHZhciByZWFsSW5kZXg7XG4gIHZhciBzbGlkZVNlbGVjdG9yID0gc3dpcGVyLmlzRWxlbWVudCA/IFwic3dpcGVyLXNsaWRlXCIgOiBcIi5cIi5jb25jYXQocGFyYW1zLnNsaWRlQ2xhc3MpO1xuICB2YXIgaXNHcmlkID0gc3dpcGVyLmdyaWQgJiYgc3dpcGVyLnBhcmFtcy5ncmlkICYmIHN3aXBlci5wYXJhbXMuZ3JpZC5yb3dzID4gMTtcbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgaWYgKHN3aXBlci5hbmltYXRpbmcpIHJldHVybjtcbiAgICByZWFsSW5kZXggPSBwYXJzZUludChzd2lwZXIuY2xpY2tlZFNsaWRlLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApO1xuICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvTG9vcChyZWFsSW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoc2xpZGVUb0luZGV4ID4gKGlzR3JpZCA/IChzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIHNsaWRlc1BlclZpZXcpIC8gMiAtIChzd2lwZXIucGFyYW1zLmdyaWQucm93cyAtIDEpIDogc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzbGlkZXNQZXJWaWV3KSkge1xuICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIHNsaWRlVG9JbmRleCA9IHN3aXBlci5nZXRTbGlkZUluZGV4KGVsZW1lbnRDaGlsZHJlbihzbGlkZXNFbCwgXCJcIi5jb25jYXQoc2xpZGVTZWxlY3RvciwgXCJbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XFxcIlwiKS5jb25jYXQocmVhbEluZGV4LCBcIlxcXCJdXCIpKVswXSk7XG4gICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgfVxufVxudmFyIHNsaWRlID0ge1xuICBzbGlkZVRvOiBzbGlkZVRvLFxuICBzbGlkZVRvTG9vcDogc2xpZGVUb0xvb3AsXG4gIHNsaWRlTmV4dDogc2xpZGVOZXh0LFxuICBzbGlkZVByZXY6IHNsaWRlUHJldixcbiAgc2xpZGVSZXNldDogc2xpZGVSZXNldCxcbiAgc2xpZGVUb0Nsb3Nlc3Q6IHNsaWRlVG9DbG9zZXN0LFxuICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBzbGlkZVRvQ2xpY2tlZFNsaWRlXG59O1xuZnVuY3Rpb24gbG9vcENyZWF0ZShzbGlkZVJlYWxJbmRleCwgaW5pdGlhbCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgc2xpZGVzRWwgPSBzd2lwZXIuc2xpZGVzRWw7XG4gIGlmICghcGFyYW1zLmxvb3AgfHwgc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHJldHVybjtcbiAgdmFyIGluaXRTbGlkZXMgPSBmdW5jdGlvbiBpbml0U2xpZGVzKCkge1xuICAgIHZhciBzbGlkZXMgPSBlbGVtZW50Q2hpbGRyZW4oc2xpZGVzRWwsIFwiLlwiLmNvbmNhdChwYXJhbXMuc2xpZGVDbGFzcywgXCIsIHN3aXBlci1zbGlkZVwiKSk7XG4gICAgc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsLCBpbmRleCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcsIGluZGV4KTtcbiAgICB9KTtcbiAgfTtcbiAgdmFyIGNsZWFyQmxhbmtTbGlkZXMgPSBmdW5jdGlvbiBjbGVhckJsYW5rU2xpZGVzKCkge1xuICAgIHZhciBzbGlkZXMgPSBlbGVtZW50Q2hpbGRyZW4oc2xpZGVzRWwsIFwiLlwiLmNvbmNhdChwYXJhbXMuc2xpZGVCbGFua0NsYXNzKSk7XG4gICAgc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICBlbC5yZW1vdmUoKTtcbiAgICB9KTtcbiAgICBpZiAoc2xpZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHN3aXBlci5yZWNhbGNTbGlkZXMoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICB9XG4gIH07XG4gIHZhciBncmlkRW5hYmxlZCA9IHN3aXBlci5ncmlkICYmIHBhcmFtcy5ncmlkICYmIHBhcmFtcy5ncmlkLnJvd3MgPiAxO1xuICBpZiAocGFyYW1zLmxvb3BBZGRCbGFua1NsaWRlcyAmJiAocGFyYW1zLnNsaWRlc1Blckdyb3VwID4gMSB8fCBncmlkRW5hYmxlZCkpIHtcbiAgICBjbGVhckJ
1sYW5rU2xpZGVzKCk7XG4gIH1cbiAgdmFyIHNsaWRlc1Blckdyb3VwID0gcGFyYW1zLnNsaWRlc1Blckdyb3VwICogKGdyaWRFbmFibGVkID8gcGFyYW1zLmdyaWQucm93cyA6IDEpO1xuICB2YXIgc2hvdWxkRmlsbEdyb3VwID0gc3dpcGVyLnNsaWRlcy5sZW5ndGggJSBzbGlkZXNQZXJHcm91cCAhPT0gMDtcbiAgdmFyIHNob3VsZEZpbGxHcmlkID0gZ3JpZEVuYWJsZWQgJiYgc3dpcGVyLnNsaWRlcy5sZW5ndGggJSBwYXJhbXMuZ3JpZC5yb3dzICE9PSAwO1xuICB2YXIgYWRkQmxhbmtTbGlkZXMgPSBmdW5jdGlvbiBhZGRCbGFua1NsaWRlcyhhbW91bnRPZlNsaWRlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW1vdW50T2ZTbGlkZXM7IGkgKz0gMSkge1xuICAgICAgdmFyIHNsaWRlRWwgPSBzd2lwZXIuaXNFbGVtZW50ID8gY3JlYXRlRWxlbWVudCgnc3dpcGVyLXNsaWRlJywgW3BhcmFtcy5zbGlkZUJsYW5rQ2xhc3NdKSA6IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIFtwYXJhbXMuc2xpZGVDbGFzcywgcGFyYW1zLnNsaWRlQmxhbmtDbGFzc10pO1xuICAgICAgc3dpcGVyLnNsaWRlc0VsLmFwcGVuZChzbGlkZUVsKTtcbiAgICB9XG4gIH07XG4gIGlmIChzaG91bGRGaWxsR3JvdXApIHtcbiAgICBpZiAocGFyYW1zLmxvb3BBZGRCbGFua1NsaWRlcykge1xuICAgICAgdmFyIHNsaWRlc1RvQWRkID0gc2xpZGVzUGVyR3JvdXAgLSBzd2lwZXIuc2xpZGVzLmxlbmd0aCAlIHNsaWRlc1Blckdyb3VwO1xuICAgICAgYWRkQmxhbmtTbGlkZXMoc2xpZGVzVG9BZGQpO1xuICAgICAgc3dpcGVyLnJlY2FsY1NsaWRlcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93V2FybmluZygnU3dpcGVyIExvb3AgV2FybmluZzogVGhlIG51bWJlciBvZiBzbGlkZXMgaXMgbm90IGV2ZW4gdG8gc2xpZGVzUGVyR3JvdXAsIGxvb3AgbW9kZSBtYXkgbm90IGZ1bmN0aW9uIHByb3Blcmx5LiBZb3UgbmVlZCB0byBhZGQgbW9yZSBzbGlkZXMgKG9yIG1ha2UgZHVwbGljYXRlcywgb3IgZW1wdHkgc2xpZGVzKScpO1xuICAgIH1cbiAgICBpbml0U2xpZGVzKCk7XG4gIH0gZWxzZSBpZiAoc2hvdWxkRmlsbEdyaWQpIHtcbiAgICBpZiAocGFyYW1zLmxvb3BBZGRCbGFua1NsaWRlcykge1xuICAgICAgdmFyIF9zbGlkZXNUb0FkZCA9IHBhcmFtcy5ncmlkLnJvd3MgLSBzd2lwZXIuc2xpZGVzLmxlbmd0aCAlIHBhcmFtcy5ncmlkLnJvd3M7XG4gICAgICBhZGRCbGFua1NsaWRlcyhfc2xpZGVzVG9BZGQpO1xuICAgICAgc3dpcGVyLnJlY2FsY1NsaWRlcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaG93V2FybmluZygnU3dpcGVyIExvb3AgV2FybmluZzogVGhlIG51bWJlciBvZiBzbGlkZXMgaXMgbm90IGV2ZW4gdG8gZ3JpZC5yb3dzLCBsb29wIG1vZGUgbWF5IG5vdCBmdW5jdGlvbiBwcm9wZXJseS4gWW91IG5lZWQgdG8gYWRkIG1vcmUgc2xpZGVzIChvciBtYWtlIGR1cGxpY2F0ZXMsIG9yIGVtcHR5IHNsaWRlcyknKTtcbiAgICB9XG4gICAgaW5pdFNsaWRlcygpO1xuICB9IGVsc2Uge1xuICAgIGluaXRTbGlkZXMoKTtcbiAgfVxuICB2YXIgYm90aERpcmVjdGlvbnMgPSBwYXJhbXMuY2VudGVyZWRTbGlkZXMgfHwgISFwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlIHx8ICEhcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyO1xuICBzd2lwZXIubG9vcEZpeCh7XG4gICAgc2xpZGVSZWFsSW5kZXg6IHNsaWRlUmVhbEluZGV4LFxuICAgIGRpcmVjdGlvbjogYm90aERpcmVjdGlvbnMgPyB1bmRlZmluZWQgOiAnbmV4dCcsXG4gICAgaW5pdGlhbDogaW5pdGlhbFxuICB9KTtcbn1cbmZ1bmN0aW9uIGxvb3BGaXgoKSB7XG4gIHZhciBfcmVmNiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgc2xpZGVSZWFsSW5kZXggPSBfcmVmNi5zbGlkZVJlYWxJbmRleCxcbiAgICBfcmVmNiRzbGlkZVRvID0gX3JlZjYuc2xpZGVUbyxcbiAgICBzbGlkZVRvID0gX3JlZjYkc2xpZGVUbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWY2JHNsaWRlVG8sXG4gICAgZGlyZWN0aW9uID0gX3JlZjYuZGlyZWN0aW9uLFxuICAgIHNldFRyYW5zbGF0ZSA9IF9yZWY2LnNldFRyYW5zbGF0ZSxcbiAgICBhY3RpdmVTbGlkZUluZGV4ID0gX3JlZjYuYWN0aXZlU2xpZGVJbmRleCxcbiAgICBpbml0aWFsID0gX3JlZjYuaW5pdGlhbCxcbiAgICBieUNvbnRyb2xsZXIgPSBfcmVmNi5ieUNvbnRyb2xsZXIsXG4gICAgYnlNb3VzZXdoZWVsID0gX3JlZjYuYnlNb3VzZXdoZWVsO1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgaWYgKCFzd2lwZXIucGFyYW1zLmxvb3ApIHJldHVybjtcbiAgc3dpcGVyLmVtaXQoJ2JlZm9yZUxvb3BGaXgnKTtcbiAgdmFyIHNsaWRlcyA9IHN3aXBlci5zbGlkZXMsXG4gICAgYWxsb3dTbGlkZVByZXYgPSBzd2lwZXIuYWxsb3dTbGlkZVByZXYsXG4gICAgYWxsb3dTbGlkZU5leHQgPSBzd2lwZXIuYWxsb3dTbGlkZU5leHQsXG4gICAgc2xpZGVzRWwgPSBzd2lwZXIuc2xpZGVzRWwsXG4gICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgdmFyIGNlbnRlcmVkU2xpZGVzID0gcGFyYW1zLmNlbnRlcmVkU2xpZGVzLFxuICAgIHNsaWRlc09mZnNldEJlZm9yZSA9IHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmUsXG4gICAgc2xpZGVzT2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIsXG4gICAgaW5pdGlhbFNsaWRlID0gcGFyYW1zLmluaXRpYWxTbGlkZTtcbiAgdmFyIGJvdGhEaXJlY3Rpb25zID0gY2VudGVyZWRTbGlkZXMgfHwgISFzbGlkZXNPZmZzZXRCZWZvcmUgfHwgISFzbGlkZXNPZmZzZXRBZnRlcjtcbiAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gdHJ1ZTtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gdHJ1ZTtcbiAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICBpZiAoc2xpZGVUbykge1xuICAgICAgaWYgKCFib3RoRGlyZWN0aW9ucyAmJiBzd2lwZXIuc25hcEluZGV4ID09PSAwKSB7XG4gICAgICAgI
1HN3aXBlci5zbGlkZVRvKHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYm90aERpcmVjdGlvbnMgJiYgc3dpcGVyLnNuYXBJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJWaWV3KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggKyBzd2lwZXIuc25hcEluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5zbmFwSW5kZXggPT09IHN3aXBlci5zbmFwR3JpZC5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci52aXJ0dWFsLnNsaWRlc0JlZm9yZSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSBhbGxvd1NsaWRlTmV4dDtcbiAgICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgc2xpZGVzUGVyVmlldyA9IHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICBpZiAoc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nKSB7XG4gICAgc2xpZGVzUGVyVmlldyA9IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpO1xuICB9IGVsc2Uge1xuICAgIHNsaWRlc1BlclZpZXcgPSBNYXRoLmNlaWwocGFyc2VGbG9hdChwYXJhbXMuc2xpZGVzUGVyVmlldywgMTApKTtcbiAgICBpZiAoYm90aERpcmVjdGlvbnMgJiYgc2xpZGVzUGVyVmlldyAlIDIgPT09IDApIHtcbiAgICAgIHNsaWRlc1BlclZpZXcgPSBzbGlkZXNQZXJWaWV3ICsgMTtcbiAgICB9XG4gIH1cbiAgdmFyIHNsaWRlc1Blckdyb3VwID0gcGFyYW1zLnNsaWRlc1Blckdyb3VwQXV0byA/IHNsaWRlc1BlclZpZXcgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gIHZhciBsb29wZWRTbGlkZXMgPSBib3RoRGlyZWN0aW9ucyA/IE1hdGgubWF4KHNsaWRlc1Blckdyb3VwLCBNYXRoLmNlaWwoc2xpZGVzUGVyVmlldyAvIDIpKSA6IHNsaWRlc1Blckdyb3VwO1xuICBpZiAobG9vcGVkU2xpZGVzICUgc2xpZGVzUGVyR3JvdXAgIT09IDApIHtcbiAgICBsb29wZWRTbGlkZXMgKz0gc2xpZGVzUGVyR3JvdXAgLSBsb29wZWRTbGlkZXMgJSBzbGlkZXNQZXJHcm91cDtcbiAgfVxuICBsb29wZWRTbGlkZXMgKz0gcGFyYW1zLmxvb3BBZGRpdGlvbmFsU2xpZGVzO1xuICBzd2lwZXIubG9vcGVkU2xpZGVzID0gbG9vcGVkU2xpZGVzO1xuICB2YXIgZ3JpZEVuYWJsZWQgPSBzd2lwZXIuZ3JpZCAmJiBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMTtcbiAgaWYgKHNsaWRlcy5sZW5ndGggPCBzbGlkZXNQZXJWaWV3ICsgbG9vcGVkU2xpZGVzIHx8IHN3aXBlci5wYXJhbXMuZWZmZWN0ID09PSAnY2FyZHMnICYmIHNsaWRlcy5sZW5ndGggPCBzbGlkZXNQZXJWaWV3ICsgbG9vcGVkU2xpZGVzICogMikge1xuICAgIHNob3dXYXJuaW5nKCdTd2lwZXIgTG9vcCBXYXJuaW5nOiBUaGUgbnVtYmVyIG9mIHNsaWRlcyBpcyBub3QgZW5vdWdoIGZvciBsb29wIG1vZGUsIGl0IHdpbGwgYmUgZGlzYWJsZWQgb3Igbm90IGZ1bmN0aW9uIHByb3Blcmx5LiBZb3UgbmVlZCB0byBhZGQgbW9yZSBzbGlkZXMgKG9yIG1ha2UgZHVwbGljYXRlcykgb3IgbG93ZXIgdGhlIHZhbHVlcyBvZiBzbGlkZXNQZXJWaWV3IGFuZCBzbGlkZXNQZXJHcm91cCBwYXJhbWV0ZXJzJyk7XG4gIH0gZWxzZSBpZiAoZ3JpZEVuYWJsZWQgJiYgcGFyYW1zLmdyaWQuZmlsbCA9PT0gJ3JvdycpIHtcbiAgICBzaG93V2FybmluZygnU3dpcGVyIExvb3AgV2FybmluZzogTG9vcCBtb2RlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggZ3JpZC5maWxsID0gYHJvd2AnKTtcbiAgfVxuICB2YXIgcHJlcGVuZFNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgdmFyIGFwcGVuZFNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgdmFyIGNvbHMgPSBncmlkRW5hYmxlZCA/IE1hdGguY2VpbChzbGlkZXMubGVuZ3RoIC8gcGFyYW1zLmdyaWQucm93cykgOiBzbGlkZXMubGVuZ3RoO1xuICB2YXIgaXNJbml0aWFsT3ZlcmZsb3cgPSBpbml0aWFsICYmIGNvbHMgLSBpbml0aWFsU2xpZGUgPCBzbGlkZXNQZXJWaWV3ICYmICFib3RoRGlyZWN0aW9ucztcbiAgdmFyIGFjdGl2ZUluZGV4ID0gaXNJbml0aWFsT3ZlcmZsb3cgPyBpbml0aWFsU2xpZGUgOiBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gIGlmICh0eXBlb2YgYWN0aXZlU2xpZGVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBhY3RpdmVTbGlkZUluZGV4ID0gc3dpcGVyLmdldFNsaWRlSW5kZXgoc2xpZGVzLmZpbmQoZnVuY3Rpb24gKGVsKSB7XG4gICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzKTtcbiAgICB9KSk7XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlSW5kZXggPSBhY3RpdmVTbGlkZUluZGV4O1xuICB9XG4gIHZhciBpc05leHQgPSBkaXJlY3Rpb24gPT09ICduZXh0JyB8fCAhZGlyZWN0aW9uO1xuICB2YXIgaXNQcmV2ID0gZGlyZWN0aW9uID09PSAncHJldicgfHwgIWRpcmVjdGlvbjtcbiAgdmFyIHNsaWRlc1ByZXBlbmRlZCA9IDA7XG4gIHZhciBzbGlkZXNBcHBlbmRlZCA9IDA7XG4gIHZhciBhY3RpdmVDb2xJbmRleCA9IGdyaWRFbmFibGVkID8gc2xpZGVzW2FjdGl2ZVNsaWRlSW5kZXhdLmNvbHVtbiA6IGFjdGl2ZVNsaWRlSW5kZXg7XG4gIHZhciBhY3RpdmVDb2xJbmRleFdpdGhTaGlmdCA9IGFjdGl2ZUNvbEluZGV4ICsgKGJvdGhEaXJlY3Rpb25zICYmIHR5cGVvZiBzZXRUcmFuc2xhdGUgPT09ICd1bmRlZmluZWQnID8gLXNsaWRlc1BlclZpZXcgLyAyICsgMC41IDogMCk7XG4gIC8vIHByZXBlbmQgbGFzdCBzbGlkZXMgYmVmb3JlIHN0YXJ0XG4gIGlmIChhY3RpdmVDb2xJbmRleFdpdGhTaGlmdCA8IGxvb3BlZFNsaWRlcykge1xuICAgIHNsaWRlc1ByZXBlbmRlZCA9IE1hdGgubWF4KGxvb3BlZFNsaWRlcyAtIGFjdGl2ZUNvbEluZGV4V2l0aFNoaWZ0LCBzbGlkZXNQZXJHcm91cCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb29wZWRTbGlkZXMgLSBhY3RpdmVDb2xJbmRleFdpdGhTaGlmdDsgaSArPSAxKSB7XG4gICAgICB2Y
1XIgaW5kZXggPSBpIC0gTWF0aC5mbG9vcihpIC8gY29scykgKiBjb2xzO1xuICAgICAgaWYgKGdyaWRFbmFibGVkKSB7XG4gICAgICAgIHZhciBjb2xJbmRleFRvUHJlcGVuZCA9IGNvbHMgLSBpbmRleCAtIDE7XG4gICAgICAgIGZvciAodmFyIF9pNiA9IHNsaWRlcy5sZW5ndGggLSAxOyBfaTYgPj0gMDsgX2k2IC09IDEpIHtcbiAgICAgICAgICBpZiAoc2xpZGVzW19pNl0uY29sdW1uID09PSBjb2xJbmRleFRvUHJlcGVuZCkgcHJlcGVuZFNsaWRlc0luZGV4ZXMucHVzaChfaTYpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNsaWRlcy5mb3JFYWNoKChzbGlkZSwgc2xpZGVJbmRleCkgPT4ge1xuICAgICAgICAvLyAgIGlmIChzbGlkZS5jb2x1bW4gPT09IGNvbEluZGV4VG9QcmVwZW5kKSBwcmVwZW5kU2xpZGVzSW5kZXhlcy5wdXNoKHNsaWRlSW5kZXgpO1xuICAgICAgICAvLyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZXBlbmRTbGlkZXNJbmRleGVzLnB1c2goY29scyAtIGluZGV4IC0gMSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGFjdGl2ZUNvbEluZGV4V2l0aFNoaWZ0ICsgc2xpZGVzUGVyVmlldyA+IGNvbHMgLSBsb29wZWRTbGlkZXMpIHtcbiAgICBzbGlkZXNBcHBlbmRlZCA9IE1hdGgubWF4KGFjdGl2ZUNvbEluZGV4V2l0aFNoaWZ0IC0gKGNvbHMgLSBsb29wZWRTbGlkZXMgKiAyKSwgc2xpZGVzUGVyR3JvdXApO1xuICAgIGlmIChpc0luaXRpYWxPdmVyZmxvdykge1xuICAgICAgc2xpZGVzQXBwZW5kZWQgPSBNYXRoLm1heChzbGlkZXNBcHBlbmRlZCwgc2xpZGVzUGVyVmlldyAtIGNvbHMgKyBpbml0aWFsU2xpZGUgKyAxKTtcbiAgICB9XG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICB2Y
1XIgaW5kZXggPSBfaTcgLSBNYXRoLmZsb29yKF9pNyAvIGNvbHMpICogY29scztcbiAgICAgIGlmIChncmlkRW5hYmxlZCkge1xuICAgICAgICBzbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGUsIHNsaWRlSW5kZXgpIHtcbiAgICAgICAgICBpZiAoc2xpZGUuY29sdW1uID09PSBpbmRleCkgYXBwZW5kU2xpZGVzSW5kZXhlcy5wdXNoKHNsaWRlSW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGVuZFNsaWRlc0luZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCBzbGlkZXNBcHBlbmRlZDsgX2k3ICs9IDEpIHtcbiAgICAgIF9sb29wKCk7XG4gICAgfVxuICB9XG4gIHN3aXBlci5fX3ByZXZlbnRPYnNlcnZlcl9fID0gdHJ1ZTtcbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICBzd2lwZXIuX19wcmV2ZW50T2JzZXJ2ZXJfXyA9IGZhbHNlO1xuICB9KTtcbiAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ID09PSAnY2FyZHMnICYmIHNsaWRlcy5sZW5ndGggPCBzbGlkZXNQZXJWaWV3ICsgbG9vcGVkU2xpZGVzICogMikge1xuICAgIGlmIChhcHBlbmRTbGlkZXNJbmRleGVzLmluY2x1ZGVzKGFjdGl2ZVNsaWRlSW5kZXgpKSB7XG4gICAgICBhcHBlbmRTbGlkZXNJbmRleGVzLnNwbGljZShhcHBlbmRTbGlkZXNJbmRleGVzLmluZGV4T2YoYWN0aXZlU2xpZGVJbmRleCksIDEpO1xuICAgIH1cbiAgICBpZiAocHJlcGVuZFNsaWRlc0luZGV4ZXMuaW5jbHVkZXMoYWN0aXZlU2xpZGVJbmRleCkpIHtcbiAgICAgIHByZXBlbmRTbGlkZXNJbmRleGVzLnNwbGljZShwcmVwZW5kU2xpZGVzSW5kZXhlcy5pbmRleE9mKGFjdGl2ZVNsaWRlSW5kZXgpLCAxKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzUHJldikge1xuICAgIHByZXBlbmRTbGlkZXNJbmRleGVzLmZvckVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICBzbGlkZXNbaW5kZXhdLnN3aXBlckxvb3BNb3ZlRE9NID0gdHJ1ZTtcbiAgICAgIHNsaWRlc0VsLnByZXBlbmQoc2xpZGVzW2luZGV4XSk7XG4gICAgICBzbGlkZXNbaW5kZXhdLnN3aXBlckxvb3BNb3ZlRE9NID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGlzTmV4dCkge1xuICAgIGFwcGVuZFNsaWRlc0luZGV4ZXMuZm9yRWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHNsaWRlc1tpbmRleF0uc3dpcGVyTG9vcE1vdmVET00gPSB0cnVlO1xuICAgICAgc2xpZGVzRWwuYXBwZW5kKHNsaWRlc1tpbmRleF0pO1xuICAgICAgc2xpZGVzW2luZGV4XS5zd2lwZXJMb29wTW92ZURPTSA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG4gIHN3aXBlci5yZWNhbGNTbGlkZXMoKTtcbiAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycpIHtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gIH0gZWxzZSBpZiAoZ3JpZEVuYWJsZWQgJiYgKHByZXBlbmRTbGlkZXNJbmRleGVzLmxlbmd0aCA+IDAgJiYgaXNQcmV2IHx8IGFwcGVuZFNsaWRlc0luZGV4ZXMubGVuZ3RoID4gMCAmJiBpc05leHQpKSB7XG4gICAgc3dpcGVyLnNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZSwgc2xpZGVJbmRleCkge1xuICAgICAgc3dpcGVyLmdyaWQudXBkYXRlU2xpZGUoc2xpZGVJbmRleCwgc2xpZGUsIHN3aXBlci5zbGlkZXMpO1xuICAgIH0pO1xuICB9XG4gIGlmIChwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgfVxuICBpZiAoc2xpZGVUbykge1xuICAgIGlmIChwcmVwZW5kU2xpZGVzSW5kZXhlcy5sZW5ndGggPiAwICYmIGlzUHJldikge1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZVJlYWxJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTbGlkZVRyYW5zbGF0ZSA9IHN3aXBlci5zbGlkZXNHcmlkW2FjdGl2ZUluZGV4XTtcbiAgICAgICAgdmFyIG5ld1NsaWRlVHJhbnNsYXRlID0gc3dpcGVyLnNsaWRlc0dyaWRbYWN0aXZlSW5kZXggKyBzbGlkZXNQcmVwZW5kZWRdO1xuICAgICAgICB2Y
1XIgZGlmZiA9IG5ld1NsaWRlVHJhbnNsYXRlIC0gY3VycmVudFNsaWRlVHJhbnNsYXRlO1xuICAgICAgICBpZiAoYnlNb3VzZXdoZWVsKSB7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShzd2lwZXIudHJhbnNsYXRlIC0gZGlmZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oYWN0aXZlSW5kZXggKyBNYXRoLmNlaWwoc2xpZGVzUHJlcGVuZGVkKSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIGlmIChzZXRUcmFuc2xhdGUpIHtcbiAgICAgICAgICAgIHN3aXBlci50b3VjaEV2ZW50c0RhdGEuc3RhcnRUcmFuc2xhdGUgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhLnN0YXJ0VHJhbnNsYXRlIC0gZGlmZjtcbiAgICAgICAgICAgIHN3aXBlci50b3VjaEV2ZW50c0RhdGEuY3VycmVudFRyYW5zbGF0ZSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGEuY3VycmVudFRyYW5zbGF0ZSAtIGRpZmY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc2V0VHJhbnNsYXRlKSB7XG4gICAgICAgICAgdmFyIHNoaWZ0ID0gZ3JpZEVuYWJsZWQgPyBwcmVwZW5kU2xpZGVzSW5kZXhlcy5sZW5ndGggLyBwYXJhbXMuZ3JpZC5yb3dzIDogcHJlcGVuZFNsaWRlc0luZGV4ZXMubGVuZ3RoO1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCArIHNoaWZ0LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzRGF0YS5jdXJyZW50VHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXBwZW5kU2xpZGVzSW5kZXhlcy5sZW5ndGggPiAwICYmIGlzTmV4dCkge1xuICAgICAgaWYgKHR5cGVvZiBzbGlkZVJlYWxJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIF9jdXJyZW50U2xpZGVUcmFuc2xhdGUgPSBzd2lwZXIuc2xpZGVzR3JpZFthY3RpdmVJbmRleF07XG4gICAgICAgIHZhciBfbmV3U2xpZGVUcmFuc2xhdGUgPSBzd2lwZXIuc2xpZGVzR3JpZFthY3RpdmVJbmRleCAtIHNsaWRlc0FwcGVuZGVkXTtcbiAgICAgICAgdmFyIF9kaWZmID0gX25ld1NsaWRlVHJhbnNsYXRlIC0gX2N1cnJlbnRTbGlkZVRyYW5zbGF0ZTtcbiAgICAgICAgaWYgKGJ5TW91c2V3aGVlbCkge1xuICAgICAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUoc3dpcGVyLnRyYW5zbGF0ZSAtIF9kaWZmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhhY3RpdmVJbmRleCAtIHNsaWRlc0FwcGVuZGVkLCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgaWYgKHNldFRyYW5zbGF0ZSkge1xuICAgICAgICAgICAgc3dpcGVyLnRvdWNoRXZlbnRzRGF0YS5zdGFydFRyYW5zbGF0ZSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGEuc3RhcnRUcmFuc2xhdGUgLSBfZGlmZjtcbiAgICAgICAgICAgIHN3aXBlci50b3VjaEV2ZW50c0RhdGEuY3VycmVudFRyYW5zbGF0ZSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGEuY3VycmVudFRyYW5zbGF0ZSAtIF9kaWZmO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9zaGlmdCA9IGdyaWRFbmFibGVkID8gYXBwZW5kU2xpZGVzSW5kZXhlcy5sZW5ndGggLyBwYXJhbXMuZ3JpZC5yb3dzIDogYXBwZW5kU2xpZGVzSW5kZXhlcy5sZW5ndGg7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCAtIF9zaGlmdCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG4gIGlmIChzd2lwZXIuY29udHJvbGxlciAmJiBzd2lwZXIuY29udHJvbGxlci5jb250cm9sICYmICFieUNvbnRyb2xsZXIpIHtcbiAgICB2YXIgbG9vcFBhcmFtcyA9IHtcbiAgICAgIHNsaWRlUmVhbEluZGV4OiBzbGlkZVJlYWxJbmRleCxcbiAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgICAgc2V0VHJhbnNsYXRlOiBzZXRUcmFuc2xhdGUsXG4gICAgICBhY3RpdmVTbGlkZUluZGV4OiBhY3RpdmVTbGlkZUluZGV4LFxuICAgICAgYnlDb250cm9sbGVyOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSkge1xuICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbC5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmICghYy5kZXN0cm95ZWQgJiYgYy5wYXJhbXMubG9vcCkgYy5sb29wRml4KF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgbG9vcFBhcmFtcyksIHt9LCB7XG4gICAgICAgICAgc2xpZGVUbzogYy5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPyBzbGlkZVRvIDogZmFsc2VcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuY29udHJvbGxlci5jb250cm9sIGluc3RhbmNlb2Ygc3dpcGVyLmNvbnN0cnVjdG9yICYmIHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wucGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wubG9vcEZpeChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGxvb3BQYXJhbXMpLCB7fSwge1xuICAgICAgICBzbGlkZVRvOiBzd2lwZXIuY29udHJvbGxlci5jb250cm9sLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSBwYXJhbXMuc2xpZGVzUGVyVmlldyA/IHNsaWRlVG8gOiBmYWxzZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfVxuICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xufVxuZnVuY3Rpb24gbG9vcERlc3Ryb3koKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBzbGlkZXNFbCA9IHN3aXBlci5zbGlkZXNFbDtcbiAgaWYgKCFwYXJhbXMubG9vcCB8fCAhc2xpZGVzRWwgfHwgc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHJldHVybjtcbiAgc3dpcGVyLnJlY2FsY1NsaWRlcygpO1xuICB2YXIgbmV3U2xpZGVzT3JkZXIgPSBbXTtcbiAgc3dpcGVyLnNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgdmFyIGluZGV4ID0gdHlwZW9mIHNsaWRlRWwuc3dpcGVyU2xpZGVJbmRleCA9PT0gJ3VuZGVmaW5lZCcgPyBzbGlkZUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSAqIDEgOiBzbGlkZUVsLnN3aXBlclNsaWRlSW5kZXg7XG4gICAgbmV3
1U2xpZGVzT3JkZXJbaW5kZXhdID0gc2xpZGVFbDtcbiAgfSk7XG4gIHN3aXBlci5zbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgIHNsaWRlRWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICB9KTtcbiAgbmV3U2xpZGVzT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgIHNsaWRlc0VsLmFwcGVuZChzbGlkZUVsKTtcbiAgfSk7XG4gIHN3aXBlci5yZWNhbGNTbGlkZXMoKTtcbiAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnJlYWxJbmRleCwgMCk7XG59XG52YXIgbG9vcCA9IHtcbiAgbG9vcENyZWF0ZTogbG9vcENyZWF0ZSxcbiAgbG9vcEZpeDogbG9vcEZpeCxcbiAgbG9vcERlc3Ryb3k6IGxvb3BEZXN0cm95XG59O1xuZnVuY3Rpb24gc2V0R3JhYkN1cnNvcihtb3ZpbmcpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIGlmICghc3dpcGVyLnBhcmFtcy5zaW11bGF0ZVRvdWNoIHx8IHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQgfHwgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIHZhciBlbCA9IHN3aXBlci5wYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICdjb250YWluZXInID8gc3dpcGVyLmVsIDogc3dpcGVyLndyYXBwZXJFbDtcbiAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICBzd2lwZXIuX19wcmV2ZW50T2JzZXJ2ZXJfXyA9IHRydWU7XG4gIH1cbiAgZWwuc3R5bGUuY3Vyc29yID0gJ21vdmUnO1xuICBlbC5zdHlsZS5jdXJzb3IgPSBtb3ZpbmcgPyAnZ3JhYmJpbmcnIDogJ2dyYWInO1xuICBpZiAoc3dpcGVyLmlzRWxlbWVudCkge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICBzd2lwZXIuX19wcmV2ZW50T2JzZXJ2ZXJfXyA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiB1bnNldEdyYWJDdXJzb3IoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICBzd2lwZXIuX19wcmV2ZW50T2JzZXJ2ZXJfXyA9IHRydWU7XG4gIH1cbiAgc3dpcGVyW3N3aXBlci5wYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICdjb250YWluZXInID8gJ2VsJyA6ICd3cmFwcGVyRWwnXS5zdHlsZS5jdXJzb3IgPSAnJztcbiAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgc3dpcGVyLl9fcHJldmVudE9ic2VydmVyX18gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxufVxudmFyIGdyYWJDdXJzb3IgPSB7XG4gIHNldEdyYWJDdXJzb3I6IHNldEdyYWJDdXJzb3IsXG4gIHVuc2V0R3JhYkN1cnNvcjogdW5zZXRHcmFiQ3Vyc29yXG59O1xuXG4vLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU0NTIwNTU0L2N1c3RvbS1lbGVtZW50LWdldHJvb3Rub2RlLWNsb3Nlc3QtZnVuY3Rpb24tY3Jvc3NpbmctbXVsdGlwbGUtcGFyZW50LXNoYWRvd2RcbmZ1bmN0aW9uIGNsb3Nlc3RFbGVtZW50KHNlbGVjdG9yKSB7XG4gIHZhciBiYXNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0aGlzO1xuICBmdW5jdGlvbiBfX2Nsb3Nlc3RGcm9tKGVsKSB7XG4gICAgaWYgKCFlbCB8fCBlbCA9PT0gZ2V0RG9jdW1lbnQoKSB8fCBlbCA9PT0gZ2V0V2luZG93KCkpIHJldHVybiBudWxsO1xuICAgIGlmIChlbC5hc3NpZ25lZFNsb3QpIGVsID0gZWwuYXNzaWduZWRTbG90O1xuICAgIHZhciBmb3VuZCA9IGVsLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIGlmICghZm91bmQgJiYgIWVsLmdldFJvb3ROb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kIHx8IF9fY2xvc2VzdEZyb20oZWwuZ2V0Um9vdE5vZGUoKS5ob3N0KTtcbiAgfVxuICByZXR1cm4gX19jbG9zZXN0RnJvbShiYXNlKTtcbn1cbmZ1bmN0aW9uIHByZXZlbnRFZGdlU3dpcGUoc3dpcGVyLCBldmVudCwgc3RhcnRYKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHZhciBlZGdlU3dpcGVEZXRlY3Rpb24gPSBwYXJhbXMuZWRnZVN3aXBlRGV0ZWN0aW9uO1xuICB2YXIgZWRnZVN3aXBlVGhyZXNob2xkID0gcGFyYW1zLmVkZ2VTd2lwZVRocmVzaG9sZDtcbiAgaWYgKGVkZ2VTd2lwZURldGVjdGlvbiAmJiAoc3RhcnRYIDw9IGVkZ2VTd2lwZVRocmVzaG9sZCB8fCBzdGFydFggPj0gd2luZG93LmlubmVyV2lkdGggLSBlZGdlU3dpcGVUaHJlc2hvbGQpKSB7XG4gICAgaWYgKGVkZ2VTd2lwZURldGVjdGlvbiA9PT0gJ3ByZXZlbnQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG9uVG91Y2hTdGFydChldmVudCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgdmFyIGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgdmFyIGRhdGEgPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICBpZiAoZS50eXBlID09PSAncG9pbnRlcmRvd24nKSB7XG4gICAgaWYgKGRhdGEucG9pbnRlcklkICE9PSBudWxsICYmIGRhdGEucG9pbnRlcklkICE9PSBlLnBvaW50ZXJJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYXRhLnBvaW50ZXJJZCA9IGUucG9pbnRlcklkO1xuICB9IGVsc2UgaWYgKGUudHlwZSA9PT0gJ3RvdWNoc3RhcnQnICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICBkYXRhLnRvdWNoSWQgPSBlLnRhcmdldFRvdWNoZXNbMF0uaWRlbnRpZmllcjtcbiAgfVxuICBpZiAoZS50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAvLyBkb24ndCBwcm9jZWVkIHRvdWNoIGV2ZW50XG4gICAgcHJldmVudEVkZ2VTd2lwZShzd2lwZXIsIGUsIGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCk7XG4gICAgcmV0dXJuO1xuICB9XG4gI
1HZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcyxcbiAgICBlbmFibGVkID0gc3dpcGVyLmVuYWJsZWQ7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuO1xuICBpZiAoIXBhcmFtcy5zaW11bGF0ZVRvdWNoICYmIGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHJldHVybjtcbiAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLmNzc01vZGUgJiYgcGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIubG9vcEZpeCgpO1xuICB9XG4gIHZhciB0YXJnZXRFbCA9IGUudGFyZ2V0O1xuICBpZiAocGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnd3JhcHBlcicpIHtcbiAgICBpZiAoIWVsZW1lbnRJc0NoaWxkT2YodGFyZ2V0RWwsIHN3aXBlci53cmFwcGVyRWwpKSByZXR1cm47XG4gIH1cbiAgaWYgKCd3aGljaCcgaW4gZSAmJiBlLndoaWNoID09PSAzKSByZXR1cm47XG4gIGlmICgnYnV0dG9uJyBpbiBlICYmIGUuYnV0dG9uID4gMCkgcmV0dXJuO1xuICBpZiAoZGF0YS5pc1RvdWNoZWQgJiYgZGF0YS5pc01vdmVkKSByZXR1cm47XG5cbiAgLy8gY2hhbmdlIHRhcmdldCBlbCBmb3Igc2hhZG93IHJvb3QgY29tcG9uZW50XG4gIHZhciBzd2lwaW5nQ2xhc3NIYXNWYWx1ZSA9ICEhcGFyYW1zLm5vU3dpcGluZ0NsYXNzICYmIHBhcmFtcy5ub1N3aXBpbmdDbGFzcyAhPT0gJyc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICB2YXIgZXZlbnRQYXRoID0gZS5jb21wb3NlZFBhdGggPyBlLmNvbXBvc2VkUGF0aCgpIDogZS5wYXRoO1xuICBpZiAoc3dpcGluZ0NsYXNzSGFzVmFsdWUgJiYgZS50YXJnZXQgJiYgZS50YXJnZXQuc2hhZG93Um9vdCAmJiBldmVudFBhdGgpIHtcbiAgICB0YXJnZXRFbCA9IGV2ZW50UGF0aFswXTtcbiAgfVxuICB2YXIgbm9Td2lwaW5nU2VsZWN0b3IgPSBwYXJhbXMubm9Td2lwaW5nU2VsZWN0b3IgPyBwYXJhbXMubm9Td2lwaW5nU2VsZWN0b3IgOiBcIi5cIi5jb25jYXQocGFyYW1zLm5vU3dpcGluZ0NsYXNzKTtcbiAgdmFyIGlzVGFyZ2V0U2hhZG93ID0gISEoZS50YXJnZXQgJiYgZS50YXJnZXQuc2hhZG93Um9vdCk7XG5cbiAgLy8gdXNlIGNsb3Nlc3RFbGVtZW50IGZvciBzaGFkb3cgcm9vdCBlbGVtZW50IHRvIGdldCB0aGUgYWN0dWFsIGNsb3Nlc3QgZm9yIG5lc3RlZCBzaGFkb3cgcm9vdCBlbGVtZW50XG4gIGlmIChwYXJhbXMubm9Td2lwaW5nICYmIChpc1RhcmdldFNoYWRvdyA/IGNsb3Nlc3RFbGVtZW50KG5vU3dpcGluZ1NlbGVjdG9yLCB0YXJnZXRFbCkgOiB0YXJnZXRFbC5jbG9zZXN0KG5vU3dpcGluZ1NlbGVjdG9yKSkpIHtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYXJhbXMuc3dpcGVIYW5kbGVyKSB7XG4gICAgaWYgKCF0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5zd2lwZUhhbmRsZXIpKSByZXR1cm47XG4gIH1cbiAgdG91Y2hlcy5jdXJyZW50WCA9IGUucGFnZVg7XG4gIHRvdWNoZXMuY3VycmVudFkgPSBlLnBhZ2VZO1xuICB2YXIgc3RhcnRYID0gdG91Y2hlcy5jdXJyZW50WDtcbiAgdmFyIHN0YXJ0WSA9IHRvdWNoZXMuY3VycmVudFk7XG5cbiAgLy8gRG8gTk9UIHN0YXJ0IGlmIGlPUyBlZGdlIHN3aXBlIGlzIGRldGVjdGVkLiBPdGhlcndpc2UgaU9TIGFwcCBjYW5ub3Qgc3dpcGUtdG8tZ28tYmFjayBhbnltb3JlXG5cbiAgaWYgKCFwcmV2ZW50RWRnZVN3aXBlKHN3aXBlciwgZSwgc3RhcnRYKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBPYmplY3QuYXNzaWduKGRhdGEsIHtcbiAgICBpc1RvdWNoZWQ6IHRydWUsXG4gICAgaXNNb3ZlZDogZmFsc2UsXG4gICAgYWxsb3dUb3VjaENhbGxiYWNrczogdHJ1ZSxcbiAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgIHN0YXJ0TW92aW5nOiB1bmRlZmluZWRcbiAgfSk7XG4gIHRvdWNoZXMuc3RhcnRYID0gc3RhcnRYO1xuICB0b3VjaGVzLnN0YXJ0WSA9IHN0YXJ0WTtcbiAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gIHN3aXBlci51cGRhdGVTaXplKCk7XG4gIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSA9IGZhbHNlO1xuICB2YXIgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICBpZiAodGFyZ2V0RWwubWF0Y2hlcyhkYXRhLmZvY3VzYWJsZUVsZW1lbnRzKSkge1xuICAgIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgaWYgKHRhcmdldEVsLm5vZGVOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5tYXRjaGVzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRhcmdldEVsICYmIChlLnBvaW50ZXJUeXBlID09PSAnbW91c2UnIHx8IGUucG9pbnRlclR5cGUgIT09ICdtb3VzZScgJiYgIXRhcmdldEVsLm1hdGNoZXMoZGF0YS5mb2N1c2FibGVFbGVtZW50cykpKSB7XG4gICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cbiAgdmFyIHNob3VsZFByZXZlbnREZWZhdWx0ID0gcHJldmVudERlZmF1bHQgJiYgc3dpcGVyLmFsbG93VG91Y2hNb3ZlICYmIHBhcmFtcy50b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ7XG4gIGlmICgocGFyYW1zLnRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0IHx8IHNob3VsZFByZXZlbnREZWZhdWx0KSAmJiAhdGFyZ2V0RWwuaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKHBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiBzd2lwZXIuZnJlZU1vZGUgJiYgc3dpcGVyLmFuaW1hdGluZyAmJiAhcGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIuZnJlZU1vZGUub25Ub3VjaFN0YXJ0KCk7XG4gIH1cbiAgc3dpcGVyLmVtaXQoJ3RvdWNoU3RhcnQnLCBlKTtcbn1cbmZ1bmN0aW9uIG9uVG91Y2hNb3ZlKGV2ZW50KSB7XG4gIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgIHRvdWNoZXMgPSBzd2lwZXIudG91Y2hlcyxcbiAgICBydGwgPSBzd2lwZXIucnRsVHJhbnNsYXRlLFxuICAgIGVuYWJsZWQgPSBzd2lwZXIuZW5hYmxlZDtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gIGlmICghcGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgZXZlbnQucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHJldHVybjtcbiAgdmFyIGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgaWYgKGUudHlwZSA9PT0gJ3BvaW50ZXJtb3ZlJykge1xuICAgIGlmIChkYXRhLnRvdWNoSWQgIT09IG51bGwpIHJldHVybjsgLy8gcmV0dXJuIGZyb20gcG9pbnRlciBpZiB3ZSB1c2UgdG91Y2hcbiAgICB2YXIgaWQgPSBlLnBvaW50ZXJJZDtcbiAgICBpZiAoaWQgIT09IGRhdGEucG9pbnRlcklkKSByZXR1cm47XG4gIH1cbiAgdmFyIHRhcmdldFRvdWNoO1xuICBpZiAoZS50eXBlID09PSAndG91Y2htb3ZlJykge1xuICAgIHRhcmdldFRvdWNoID0gX3RvQ29uc3VtYWJsZUFycmF5KGUuY2hhbmdlZFRvdWNoZXMpLmZpbmQoZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybi
1B0LmlkZW50aWZpZXIgPT09IGRhdGEudG91Y2hJZDtcbiAgICB9KTtcbiAgICBpZiAoIXRhcmdldFRvdWNoIHx8IHRhcmdldFRvdWNoLmlkZW50aWZpZXIgIT09IGRhdGEudG91Y2hJZCkgcmV0dXJuO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldFRvdWNoID0gZTtcbiAgfVxuICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgaWYgKGRhdGEuc3RhcnRNb3ZpbmcgJiYgZGF0YS5pc1Njcm9sbGluZykge1xuICAgICAgc3dpcGVyLmVtaXQoJ3RvdWNoTW92ZU9wcG9zaXRlJywgZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcGFnZVggPSB0YXJnZXRUb3VjaC5wYWdlWDtcbiAgdmFyIHBhZ2VZID0gdGFyZ2V0VG91Y2gucGFnZVk7XG4gIGlmIChlLnByZXZlbnRlZEJ5TmVzdGVkU3dpcGVyKSB7XG4gICAgdG91Y2hlcy5zdGFydFggPSBwYWdlWDtcbiAgICB0b3VjaGVzLnN0YXJ0WSA9IHBhZ2VZO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXN3aXBlci5hbGxvd1RvdWNoTW92ZSkge1xuICAgIGlmICghZS50YXJnZXQubWF0Y2hlcyhkYXRhLmZvY3VzYWJsZUVsZW1lbnRzKSkge1xuICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNUb3VjaGVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRvdWNoZXMsIHtcbiAgICAgICAgc3RhcnRYOiBwYWdlWCxcbiAgICAgICAgc3RhcnRZOiBwYWdlWSxcbiAgICAgICAgY3VycmVudFg6IHBhZ2VYLFxuICAgICAgICBjdXJyZW50WTogcGFnZVlcbiAgICAgIH0pO1xuICAgICAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzICYmICFwYXJhbXMubG9vcCkge1xuICAgIGlmIChzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICAvLyBWZXJ0aWNhbFxuICAgICAgaWYgKHBhZ2VZIDwgdG91Y2hlcy5zdGFydFkgJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVkgPiB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocnRsICYmIChwYWdlWCA+IHRvdWNoZXMuc3RhcnRYICYmIC1zd2lwZXIudHJhbnNsYXRlIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSB8fCBwYWdlWCA8IHRvdWNoZXMuc3RhcnRYICYmIC1zd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKCFydGwgJiYgKHBhZ2VYIDwgdG91Y2hlcy5zdGFydFggJiYgc3dpcGVyLnRyYW5zbGF0ZSA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgfHwgcGFnZVggPiB0b3VjaGVzLnN0YXJ0WCAmJiBzd2lwZXIudHJhbnNsYXRlID49IHN3aXBlci5taW5UcmFuc2xhdGUoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5tYXRjaGVzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGUudGFyZ2V0ICYmIGUucG9pbnRlclR5cGUgIT09ICdtb3VzZScpIHtcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgfVxuICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBlLnRhcmdldC5tYXRjaGVzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpKSB7XG4gICAgICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuICAgICAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmUnLCBlKTtcbiAgfVxuICB0b3VjaGVzLnByZXZpb3VzWCA9IHRvdWNoZXMuY3VycmVudFg7XG4gIHRvdWNoZXMucHJldmlvdXNZID0gdG91Y2hlcy5jdXJyZW50WTtcbiAgdG91Y2hlcy5jdXJyZW50WCA9IHBhZ2VYO1xuICB0b3VjaGVzLmN1cnJlbnRZID0gcGFnZVk7XG4gIHZhciBkaWZmWCA9IHRvdWNoZXMuY3VycmVudFggLSB0b3VjaGVzLnN0YXJ0WDtcbiAgdmFyIGRpZmZZID0gdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICBpZiAoc3dpcGVyLnBhcmFtcy50aHJlc2hvbGQgJiYgTWF0aC5zcXJ0KE1hdGgucG93KGRpZmZYLCAyKSArIE1hdGgucG93KGRpZmZZLCAyKSkgPCBzd2lwZXIucGFyYW1zLnRocmVzaG9sZCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIGRhdGEuaXNTY3JvbGxpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIHRvdWNoQW5nbGU7XG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiB0b3VjaGVzLmN1cnJlbnRZID09PSB0b3VjaGVzLnN0YXJ0WSB8fCBzd2lwZXIuaXNWZXJ0aWNhbCgpICYmIHRvdWNoZXMuY3VycmVudFggPT09IHRvdWNoZXMuc3RhcnRYKSB7XG4gICAgICBkYXRhLmlzU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgaWYgKGRpZmZYICogZGlmZlggKyBkaWZmWSAqIGRpZmZZID49IDI1KSB7XG4gICAgICAgIHRvdWNoQW5nbGUgPSBNYXRoLmF0YW4yKE1hdGguYWJzKGRpZmZZKSwgTWF0aC5hYnMoZGlmZlgpKSAqIDE4MCAvIE1hdGguUEk7XG4gICAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGUgOiA5MCAtIHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgfVxuICBpZiAodHlwZW9mIGRhdGEuc3RhcnRNb3ZpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKHRvdWNoZXMuY3VycmVudFggIT09IHRvdWNoZXMuc3RhcnRYIHx8IHRvdWNoZXMuY3VycmVudFkgIT09I
1HRvdWNoZXMuc3RhcnRZKSB7XG4gICAgICBkYXRhLnN0YXJ0TW92aW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGRhdGEuaXNTY3JvbGxpbmcgfHwgZS50eXBlID09PSAndG91Y2htb3ZlJyAmJiBkYXRhLnByZXZlbnRUb3VjaE1vdmVGcm9tUG9pbnRlck1vdmUpIHtcbiAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWRhdGEuc3RhcnRNb3ZpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgaWYgKCFwYXJhbXMuY3NzTW9kZSAmJiBlLmNhbmNlbGFibGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKHBhcmFtcy50b3VjaE1vdmVTdG9wUHJvcGFnYXRpb24gJiYgIXBhcmFtcy5uZXN0ZWQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG4gIHZhciBkaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gZGlmZlggOiBkaWZmWTtcbiAgdmFyIHRvdWNoZXNEaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMucHJldmlvdXNYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMucHJldmlvdXNZO1xuICBpZiAocGFyYW1zLm9uZVdheU1vdmVtZW50KSB7XG4gICAgZGlmZiA9IE1hdGguYWJzKGRpZmYpICogKHJ0bCA/IDEgOiAtMSk7XG4gICAgdG91Y2hlc0RpZmYgPSBNYXRoLmFicyh0b3VjaGVzRGlmZikgKiAocnRsID8gMSA6IC0xKTtcbiAgfVxuICB0b3VjaGVzLmRpZmYgPSBkaWZmO1xuICBkaWZmICo9IHBhcmFtcy50b3VjaFJhdGlvO1xuICBpZiAocnRsKSB7XG4gICAgZGlmZiA9IC1kaWZmO1xuICAgIHRvdWNoZXNEaWZmID0gLXRvdWNoZXNEaWZmO1xuICB9XG4gIHZhciBwcmV2VG91Y2hlc0RpcmVjdGlvbiA9IHN3aXBlci50b3VjaGVzRGlyZWN0aW9uO1xuICBzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPSBkaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgc3dpcGVyLnRvdWNoZXNEaXJlY3Rpb24gPSB0b3VjaGVzRGlmZiA+IDAgPyAncHJldicgOiAnbmV4dCc7XG4gIHZhciBpc0xvb3AgPSBzd2lwZXIucGFyYW1zLmxvb3AgJiYgIXBhcmFtcy5jc3NNb2RlO1xuICB2YXIgYWxsb3dMb29wRml4ID0gc3dpcGVyLnRvdWNoZXNEaXJlY3Rpb24gPT09ICduZXh0JyAmJiBzd2lwZXIuYWxsb3dTbGlkZU5leHQgfHwgc3dpcGVyLnRvdWNoZXNEaXJlY3Rpb24gPT09ICdwcmV2JyAmJiBzd2lwZXIuYWxsb3dTbGlkZVByZXY7XG4gIGlmICghZGF0YS5pc01vdmVkKSB7XG4gICAgaWYgKGlzTG9vcCAmJiBhbGxvd0xvb3BGaXgpIHtcbiAgICAgIHN3aXBlci5sb29wRml4KHtcbiAgICAgICAgZGlyZWN0aW9uOiBzd2lwZXIuc3dpcGVEaXJlY3Rpb25cbiAgICAgIH0pO1xuICAgIH1cbiAgICBkYXRhLnN0YXJ0VHJhbnNsYXRlID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpO1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICB2Y
1XIgZXZ0ID0gbmV3IHdpbmRvdy5DdXN0b21FdmVudCgndHJhbnNpdGlvbmVuZCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYnlTd2lwZXJUb3VjaE1vdmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICB9XG4gICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7XG4gICAgLy8gR3JhYiBDdXJzb3JcbiAgICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlckZpcnN0TW92ZScsIGUpO1xuICB9XG4gIHZhciBsb29wRml4ZWQ7XG4gIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICBpZiAocGFyYW1zLl9sb29wU3dhcFJlc2V0ICE9PSBmYWxzZSAmJiBkYXRhLmlzTW92ZWQgJiYgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgJiYgcHJldlRvdWNoZXNEaXJlY3Rpb24gIT09IHN3aXBlci50b3VjaGVzRGlyZWN0aW9uICYmIGlzTG9vcCAmJiBhbGxvd0xvb3BGaXggJiYgTWF0aC5hYnMoZGlmZikgPj0gMSkge1xuICAgIE9iamVjdC5hc3NpZ24odG91Y2hlcywge1xuICAgICAgc3RhcnRYOiBwYWdlWCxcbiAgICAgIHN0YXJ0WTogcGFnZVksXG4gICAgICBjdXJyZW50WDogcGFnZVgsXG4gICAgICBjdXJyZW50WTogcGFnZVksXG4gICAgICBzdGFydFRyYW5zbGF0ZTogZGF0YS5jdXJyZW50VHJhbnNsYXRlXG4gICAgfSk7XG4gICAgZGF0YS5sb29wU3dhcFJlc2V0ID0gdHJ1ZTtcbiAgICBkYXRhLnN0YXJ0VHJhbnNsYXRlID0gZGF0YS5jdXJyZW50VHJhbnNsYXRlO1xuICAgIHJldHVybjtcbiAgfVxuICBzd2lwZXIuZW1pdCgnc2xpZGVyTW92ZScsIGUpO1xuICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkaWZmICsgZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgdmFyIGRpc2FibGVQYXJlbnRTd2lwZXIgPSB0cnVlO1xuICB2YXIgcmVzaXN0YW5jZVJhdGlvID0gcGFyYW1zLnJlc2lzdGFuY2VSYXRpbztcbiAgaWYgKHBhcmFtcy50b3VjaFJlbGVhc2VPbkVkZ2VzKSB7XG4gICAgcmVzaXN0YW5jZVJhdGlvID0gMDtcbiAgfVxuICBpZiAoZGlmZiA+IDApIHtcbiAgICBpZiAoaXNMb29wICYmIGFsbG93TG9vcEZpeCAmJiAhbG9vcEZpeGVkICYmIGRhdGEuYWxsb3dUaHJlc2hvbGRNb3ZlICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IChwYXJhbXMuY2VudGVyZWRTbGlkZXMgPyBzd2lwZXIubWluVHJhbnNsYXRlKCkgLSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW3N3aXBlci5hY3RpdmVJbmRleCArIDFdIC0gKHBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBwYXJhbXMuc2xpZGVzUGVyVmlldyA+PSAyID8gc3dpcGVyLnNsaWRlc1NpemVzR3JpZFtzd2lwZXIuYWN0aXZlSW5kZXggKyAxXSArIHN3aXBlci5wYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCkgLSBzd2lwZXIucGFyYW1zLnNwYWNlQmV0d2VlbiA6IHN3aXBlci5taW5UcmFuc2xhdGUoKSkpIHtcbiAgICAgIHN3aXBlci5sb29wRml4KHtcbiAgICAgICAgZGlyZWN0aW9uOiAncHJldicsXG4gICAgICAgIHNldFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgICAgYWN0aXZlU2xpZGVJbmRleDogMFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPiBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgIGRpc2FibGVQYXJlbnRTd2lwZXIgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMucmVzaXN0YW5jZSkge1xuICAgICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIubWluVHJhbnNsYXRlKCkgLSAxICsgTWF0aC5wb3coLXN3aXBlci5taW5UcmFuc2xhdGUoKSArIGRhdGEuc3RhcnRUcmFuc2xhdGUgKyBkaWZmLCByZXNpc3RhbmNlUmF0aW8pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChkaWZmIDwgMCkge1xuICAgIGlmIChpc0xvb3AgJiYgYWxsb3dMb29wRml4ICYmICFsb29wRml4ZWQgJiYgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIHN3aXBlci5zbGlkZXNTaXplc0dyaWRbc3dpcGVyLnNsaWRlc1NpemVzR3JpZC5sZW5ndGggLSAxXSArIHN3aXBlci5wYXJhbXMuc3BhY2VCZXR3ZWVuICsgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBwYXJhbXMuc2xpZGVzUGVyVmlldyA+PSAyID8gc3dpcGVyLnNsaWRlc1NpemVzR3JpZFtzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkLmxlbmd0aCAtIDFdICsgc3dpcGVyLnBhcmFtcy5zcGFjZUJldHdlZW4gOiAwKSA6IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkpIHtcbiAgICAgIHN3aXBlci5sb29wRml4KHtcbiAgICAgICAgZGlyZWN0aW9uOiAnbmV4dCcsXG4gICAgICAgIHNldFRyYW5zbGF0ZTogdHJ1ZSxcbiAgICAgICAgYWN0aXZlU2xpZGVJbmRleDogc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyA/IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpIDogTWF0aC5jZWlsKHBhcnNlRmxvYXQocGFyYW1zLnNsaWRlc1BlclZpZXcsIDEwKSkpXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSB7XG4gICAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSArIDEgLSBNYXRoLnBvdyhzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBkYXRhLnN0YXJ0VHJhbnNsYXRlIC0gZGlmZiwgcmVzaXN0YW5jZVJhdGlvKTtcbiAgICAgIH1cbiAgICB9XG4gI
1H1cbiAgaWYgKGRpc2FibGVQYXJlbnRTd2lwZXIpIHtcbiAgICBlLnByZXZlbnRlZEJ5TmVzdGVkU3dpcGVyID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIERpcmVjdGlvbnMgbG9ja3NcbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZU5leHQgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlIDwgZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgIXN3aXBlci5hbGxvd1NsaWRlTmV4dCkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cblxuICAvLyBUaHJlc2hvbGRcbiAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSB7XG4gICAgaWYgKE1hdGguYWJzKGRpZmYpID4gcGFyYW1zLnRocmVzaG9sZCB8fCBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgaWYgKCFkYXRhLmFsbG93VGhyZXNob2xkTW92ZSkge1xuICAgICAgICBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSA9IHRydWU7XG4gICAgICAgIHRvdWNoZXMuc3RhcnRYID0gdG91Y2hlcy5jdXJyZW50WDtcbiAgICAgICAgdG91Y2hlcy5zdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZO1xuICAgICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICAgICAgICB0b3VjaGVzLmRpZmYgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFggOiB0b3VjaGVzLmN1cnJlbnRZIC0gdG91Y2hlcy5zdGFydFk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKCFwYXJhbXMuZm9sbG93RmluZ2VyIHx8IHBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG5cbiAgLy8gVXBkYXRlIGFjdGl2ZSBpbmRleCBpbiBmcmVlIG1vZGVcbiAgaWYgKHBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiBzd2lwZXIuZnJlZU1vZGUgfHwgcGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MpIHtcbiAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICB9XG4gIGlmIChwYXJhbXMuZnJlZU1vZGUgJiYgcGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQgJiYgc3dpcGVyLmZyZWVNb2RlKSB7XG4gICAgc3dpcGVyLmZyZWVNb2RlLm9uVG91Y2hNb3ZlKCk7XG4gIH1cbiAgLy8gVXBkYXRlIHByb2dyZXNzXG4gIHN3aXBlci51cGRhdGVQcm9ncmVzcyhkYXRhLmN1cnJlbnRUcmFuc2xhdGUpO1xuICAvLyBVcGRhdGUgdHJhbnNsYXRlXG4gIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbn1cbmZ1bmN0aW9uIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgdmFyIGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgdmFyIHRhcmdldFRvdWNoO1xuICB2YXIgaXNUb3VjaEV2ZW50ID0gZS50eXBlID09PSAndG91Y2hlbmQnIHx8IGUudHlwZSA9PT0gJ3RvdWNoY2FuY2VsJztcbiAgaWYgKCFpc1RvdWNoRXZlbnQpIHtcbiAgICBpZiAoZGF0YS50b3VjaElkICE9PSBudWxsKSByZXR1cm47IC8vIHJldHVybiBmcm9tIHBvaW50ZXIgaWYgd2UgdXNlIHRvdWNoXG4gICAgaWYgKGUucG9pbnRlcklkICE9PSBkYXRhLnBvaW50ZXJJZCkgcmV0dXJuO1xuICAgIHRhcmdldFRvdWNoID0gZTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXRUb3VjaCA9IF90b0NvbnN1bWFibGVBcnJheShlLmNoYW5nZWRUb3VjaGVzKS5maW5kKGZ1bmN0aW9uICh0KSB7XG4gICAgICByZXR1cm4gdC5pZGVudGlmaWVyID09PSBkYXRhLnRvdWNoSWQ7XG4gICAgfSk7XG4gICAgaWYgKCF0YXJnZXRUb3VjaCB8fCB0YXJnZXRUb3VjaC5pZGVudGlmaWVyICE9PSBkYXRhLnRvdWNoSWQpIHJldHVybjtcbiAgfVxuICBpZiAoWydwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJvdXQnLCAncG9pbnRlcmxlYXZlJywgJ2NvbnRleHRtZW51J10uaW5jbHVkZXMoZS50eXBlKSkge1xuICAgIHZhciBwcm9jZWVkID0gWydwb2ludGVyY2FuY2VsJywgJ2NvbnRleHRtZW51J10uaW5jbHVkZXMoZS50eXBlKSAmJiAoc3dpcGVyLmJyb3dzZXIuaXNTYWZhcmkgfHwgc3dpcGVyLmJyb3dzZXIuaXNXZWJWaWV3KTtcbiAgICBpZiAoIXByb2NlZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgZGF0YS5wb2ludGVySWQgPSBudWxsO1xuICBkYXRhLnRvdWNoSWQgPSBudWxsO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICB0b3VjaGVzID0gc3dpcGVyLnRvdWNoZXMsXG4gICAgcnRsID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSxcbiAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgaWYgKCFwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiBlLnBvaW50ZXJUeXBlID09PSAnbW91c2UnKSByZXR1cm47XG4gIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICBzd2lwZXIuZW1pdCgndG91Y2hFbmQnLCBlKTtcbiAgfVxuICBkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MgPSBmYWxzZTtcbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgIGlmIChkYXRhLmlzTW92ZWQgJiYgcGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgICB9XG4gICAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gICAgZGF0YS5zdGFydE1vdmluZyA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFJldHVybi
1BHcmFiIEN1cnNvclxuICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgZGF0YS5pc01vdmVkICYmIGRhdGEuaXNUb3VjaGVkICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgfVxuXG4gIC8vIFRpbWUgZGlmZlxuICB2YXIgdG91Y2hFbmRUaW1lID0gbm93KCk7XG4gIHZhciB0aW1lRGlmZiA9IHRvdWNoRW5kVGltZSAtIGRhdGEudG91Y2hTdGFydFRpbWU7XG5cbiAgLy8gVGFwLCBkb3VibGVUYXAsIENsaWNrXG4gIGlmIChzd2lwZXIuYWxsb3dDbGljaykge1xuICAgIHZhciBwYXRoVHJlZSA9IGUucGF0aCB8fCBlLmNvbXBvc2VkUGF0aCAmJiBlLmNvbXBvc2VkUGF0aCgpO1xuICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUocGF0aFRyZWUgJiYgcGF0aFRyZWVbMF0gfHwgZS50YXJnZXQsIHBhdGhUcmVlKTtcbiAgICBzd2lwZXIuZW1pdCgndGFwIGNsaWNrJywgZSk7XG4gICAgaWYgKHRpbWVEaWZmIDwgMzAwICYmIHRvdWNoRW5kVGltZSAtIGRhdGEubGFzdENsaWNrVGltZSA8IDMwMCkge1xuICAgICAgc3dpcGVyLmVtaXQoJ2RvdWJsZVRhcCBkb3VibGVDbGljaycsIGUpO1xuICAgIH1cbiAgfVxuICBkYXRhLmxhc3RDbGlja1RpbWUgPSBub3coKTtcbiAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIGlmICghc3dpcGVyLmRlc3Ryb3llZCkgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICB9KTtcbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCB8fCAhZGF0YS5pc01vdmVkIHx8ICFzd2lwZXIuc3dpcGVEaXJlY3Rpb24gfHwgdG91Y2hlcy5kaWZmID09PSAwICYmICFkYXRhLmxvb3BTd2FwUmVzZXQgfHwgZGF0YS5jdXJyZW50VHJhbnNsYXRlID09PSBkYXRhLnN0YXJ0VHJhbnNsYXRlICYmICFkYXRhLmxvb3BTd2FwUmVzZXQpIHtcbiAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcbiAgICByZXR1cm47XG4gIH1cbiAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcbiAgdmFyIGN1cnJlbnRQb3M7XG4gIGlmIChwYXJhbXMuZm9sbG93RmluZ2VyKSB7XG4gICAgY3VycmVudFBvcyA9IHJ0bCA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBjdXJyZW50UG9zID0gLWRhdGEuY3VycmVudFRyYW5zbGF0ZTtcbiAgfVxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCkge1xuICAgIHN3aXBlci5mcmVlTW9kZS5vblRvdWNoRW5kKHtcbiAgICAgIGN1cnJlbnRQb3M6IGN1cnJlbnRQb3NcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGaW5kIGN1cnJlbnQgc2xpZGVcbiAgdmFyIHN3aXBlVG9MYXN0ID0gY3VycmVudFBvcyA+PSAtc3dpcGVyLm1heFRyYW5zbGF0ZSgpICYmICFzd2lwZXIucGFyYW1zLmxvb3A7XG4gIHZhciBzdG9wSW5kZXggPSAwO1xuICB2YXIgZ3JvdXBTaXplID0gc3dpcGVyLnNsaWRlc1NpemVzR3JpZFswXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSBpIDwgcGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIHtcbiAgICB2YXIgX2luY3JlbWVudCA9IGkgPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgaWYgKHR5cGVvZiBzbGlkZXNHcmlkW2kgKyBfaW5jcmVtZW50XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChzd2lwZVRvTGFzdCB8fCBjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0gJiYgY3VycmVudFBvcyA8IHNsaWRlc0dyaWRbaSArIF9pbmNyZW1lbnRdKSB7XG4gICAgICAgIHN0b3BJbmRleCA9IGk7XG4gICAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbaSArIF9pbmNyZW1lbnRdIC0gc2xpZGVzR3JpZFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN3aXBlVG9MYXN0IHx8IGN1cnJlbnRQb3MgPj0gc2xpZGVzR3JpZFtpXSkge1xuICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAxXSAtIHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAyXTtcbiAgICB9XG4gIH1cbiAgdmFyIHJld2luZEZpcnN0SW5kZXggPSBudWxsO1xuICB2YXIgcmV3aW5kTGFzdEluZGV4ID0gbnVsbDtcbiAgaWYgKHBhcmFtcy5yZXdpbmQpIHtcbiAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICByZXdpbmRMYXN0SW5kZXggPSBwYXJhbXMudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkICYmIHN3aXBlci52aXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCAtIDEgOiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDE7XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgIHJld2luZEZpcnN0SW5kZXggPSAwO1xuICAgIH1cbiAgfVxuICAvLyBGaW5kIGN1cnJlbnQgc2xpZGUgc2l6ZVxuICB2YXIgcmF0aW8gPSAoY3VycmVudFBvcyAtIHNsaWRlc0dyaWRbc3RvcEluZGV4XSkgLyBncm91cFNpemU7XG4gIHZhciBpbmNyZW1lbnQgPSBzdG9wSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gIGlmICh0aW1lRGlmZiA+IHBhcmFtcy5sb25nU3dpcGVzTXMpIHtcbiAgICAvLyBMb25nIHRvdWNoZXNcbiAgICBpZiAoIXBhcmFtcy5sb25nU3dpcGVzKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgIGlmIChyYXRpbyA+PSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSBzd2lwZXIuc2xpZGVUbyhwYXJhbXMucmV3aW5kICYmIHN3aXBlci5pc0VuZCA/IHJld2luZEZpcnN0SW5kZXggOiBzdG9wSW5kZXggKyBpbmNyZW1lbnQpO2Vsc2Ug
1c3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICBpZiAocmF0aW8gPiAxIC0gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChyZXdpbmRMYXN0SW5kZXggIT09IG51bGwgJiYgcmF0aW8gPCAwICYmIE1hdGguYWJzKHJhdGlvKSA+IHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8ocmV3aW5kTGFzdEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNob3J0IHN3aXBlc1xuICAgIGlmICghcGFyYW1zLnNob3J0U3dpcGVzKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaXNOYXZCdXR0b25UYXJnZXQgPSBzd2lwZXIubmF2aWdhdGlvbiAmJiAoZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCB8fCBlLnRhcmdldCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsKTtcbiAgICBpZiAoIWlzTmF2QnV0dG9uVGFyZ2V0KSB7XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8ocmV3aW5kRmlyc3RJbmRleCAhPT0gbnVsbCA/IHJld2luZEZpcnN0SW5kZXggOiBzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfVxuICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHJld2luZExhc3RJbmRleCAhPT0gbnVsbCA/IHJld2luZExhc3RJbmRleCA6IHN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLnRhcmdldCA9PT0gc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBlbCA9IHN3aXBlci5lbDtcbiAgaWYgKGVsICYmIGVsLm9mZnNldFdpZHRoID09PSAwKSByZXR1cm47XG5cbiAgLy8gQnJlYWtwb2ludHNcbiAgaWYgKHBhcmFtcy5icmVha3BvaW50cykge1xuICAgIHN3aXBlci5zZXRCcmVha3BvaW50KCk7XG4gIH1cblxuICAvLyBTYXZlIGxvY2tzXG4gIHZhciBhbGxvd1NsaWRlTmV4dCA9IHN3aXBlci5hbGxvd1NsaWRlTmV4dCxcbiAgICBhbGxvd1NsaWRlUHJldiA9IHN3aXBlci5hbGxvd1NsaWRlUHJldixcbiAgICBzbmFwR3JpZCA9IHN3aXBlci5zbmFwR3JpZDtcbiAgdmFyIGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuXG4gIC8vIERpc2FibGUgbG9ja3Mgb24gcmVzaXplXG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gIHN3aXBlci51cGRhdGVTaXplKCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgdmFyIGlzVmlydHVhbExvb3AgPSBpc1ZpcnR1YWwgJiYgcGFyYW1zLmxvb3A7XG4gIGlmICgocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpICYmIHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmICFpc1ZpcnR1YWxMb29wKSB7XG4gICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxLCAwLCBmYWxzZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCAmJiAhaXNWaXJ0dWFsKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUb0xvb3Aoc3dpcGVyLnJlYWxJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKHN3aXBlci5hdXRvcGxheSAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgY2xlYXJUaW1lb3V0KHN3aXBlci5hdXRvcGxheS5yZXNpemVUaW1lb3V0KTtcbiAgICBzd2lwZXIuYXV0b3BsYXkucmVzaXplVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHN3aXBlci5hdXRvcGxheSAmJiBzd2lwZXIuYXV0b3BsYXkucnVubmluZyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG4gIC8vIFJldHVybiBsb2NrcyBhZnRlciByZXNpemVcbiAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHNuYXBHcmlkICE9PSBzd2lwZXIuc25hcEdyaWQpIHtcbiAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICB9XG59XG5mdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgaWYgKCFzd2lwZXIuYWxsb3dDbGljaykge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnByZXZlbnRDbGlja3MpIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24gJiYgc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvblNjcm9sbCgpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHZhciB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgIHJ0bFRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUsXG4gICAgZW5hYmxlZCA9IHN3aXBlci5lbmFibGVkO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgc3dpcGVyLnByZXZpb3VzVHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgIHN3aXBlci50cmFuc2xhdGUgPSAtd3JhcHBlckVsLnNjcm9sbExlZnQ7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsVG9wO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBpZiAoc3dpcGVyLnRyYW5zbGF0ZSA9PT0gMCkgc3dpcGVyLnRyYW5zbGF0ZSA9IDA7XG4gIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICB2YXIgbmV3UHJvZ3Jlc3M7XG4gIHZhciB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgbmV3
1UHJvZ3Jlc3MgPSAwO1xuICB9IGVsc2Uge1xuICAgIG5ld1Byb2dyZXNzID0gKHN3aXBlci50cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gIH1cbiAgaWYgKG5ld1Byb2dyZXNzICE9PSBzd2lwZXIucHJvZ3Jlc3MpIHtcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MocnRsVHJhbnNsYXRlID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlKTtcbiAgfVxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNsYXRlJywgc3dpcGVyLnRyYW5zbGF0ZSwgZmFsc2UpO1xufVxuZnVuY3Rpb24gb25Mb2FkKGUpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIHByb2Nlc3NMYXp5UHJlbG9hZGVyKHN3aXBlciwgZS50YXJnZXQpO1xuICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlIHx8IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gJ2F1dG8nICYmICFzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc3dpcGVyLnVwZGF0ZSgpO1xufVxuZnVuY3Rpb24gb25Eb2N1bWVudFRvdWNoU3RhcnQoKSB7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICBpZiAoc3dpcGVyLmRvY3VtZW50VG91Y2hIYW5kbGVyUHJvY2VlZGVkKSByZXR1cm47XG4gIHN3aXBlci5kb2N1bWVudFRvdWNoSGFuZGxlclByb2NlZWRlZCA9IHRydWU7XG4gIGlmIChzd2lwZXIucGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMpIHtcbiAgICBzd2lwZXIuZWwuc3R5bGUudG91Y2hBY3Rpb24gPSAnYXV0byc7XG4gIH1cbn1cbnZhciBldmVudHMgPSBmdW5jdGlvbiBldmVudHMoc3dpcGVyLCBtZXRob2QpIHtcbiAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgZWwgPSBzd2lwZXIuZWwsXG4gICAgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbCxcbiAgICBkZXZpY2UgPSBzd2lwZXIuZGV2aWNlO1xuICB2YXIgY2FwdHVyZSA9ICEhcGFyYW1zLm5lc3RlZDtcbiAgdmFyIGRvbU1ldGhvZCA9IG1ldGhvZCA9PT0gJ29uJyA/ICdhZGRFdmVudExpc3RlbmVyJyA6ICdyZW1vdmVFdmVudExpc3RlbmVyJztcbiAgdmFyIHN3aXBlck1ldGhvZCA9IG1ldGhvZDtcbiAgaWYgKCFlbCB8fCB0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSByZXR1cm47XG5cbiAgLy8gVG91Y2ggRXZlbnRzXG4gIGRvY3VtZW50W2RvbU1ldGhvZF0oJ3RvdWNoc3RhcnQnLCBzd2lwZXIub25Eb2N1bWVudFRvdWNoU3RhcnQsIHtcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlXG4gIH0pO1xuICBlbFtkb21NZXRob2RdKCd0b3VjaHN0YXJ0Jywgc3dpcGVyLm9uVG91Y2hTdGFydCwge1xuICAgIHBhc3NpdmU6IGZhbHNlXG4gIH0pO1xuICBlbFtkb21NZXRob2RdKCdwb2ludGVyZG93bicsIHN3aXBlci5vblRvdWNoU3RhcnQsIHtcbiAgICBwYXNzaXZlOiBmYWxzZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgndG91Y2htb3ZlJywgc3dpcGVyLm9uVG91Y2hNb3ZlLCB7XG4gICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgY2FwdHVyZTogY2FwdHVyZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgncG9pbnRlcm1vdmUnLCBzd2lwZXIub25Ub3VjaE1vdmUsIHtcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICBjYXB0dXJlOiBjYXB0dXJlXG4gIH0pO1xuICBkb2N1bWVudFtkb21NZXRob2RdKCd0b3VjaGVuZCcsIHN3aXBlci5vblRvdWNoRW5kLCB7XG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgncG9pbnRlcnVwJywgc3dpcGVyLm9uVG91Y2hFbmQsIHtcbiAgICBwYXNzaXZlOiB0cnVlXG4gIH0pO1xuICBkb2N1bWVudFtkb21NZXRob2RdKCdwb2ludGVyY2FuY2VsJywgc3dpcGVyLm9uVG91Y2hFbmQsIHtcbiAgICBwYXNzaXZlOiB0cnVlXG4gIH0pO1xuICBkb2N1bWVudFtkb21NZXRob2RdKCd0b3VjaGNhbmNlbCcsIHN3aXBlci5vblRvdWNoRW5kLCB7XG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgncG9pbnRlcm91dCcsIHN3aXBlci5vblRvdWNoRW5kLCB7XG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgncG9pbnRlcmxlYXZlJywgc3dpcGVyLm9uVG91Y2hFbmQsIHtcbiAgICBwYXNzaXZlOiB0cnVlXG4gIH0pO1xuICBkb2N1bWVudFtkb21NZXRob2RdKCdjb250ZXh0bWVudScsIHN3aXBlci5vblRvdWNoRW5kLCB7XG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcblxuICAvLyBQcmV2ZW50IExpbmtzIENsaWNrc1xuICBpZiAocGFyYW1zLnByZXZlbnRDbGlja3MgfHwgcGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbikge1xuICAgIGVsW2RvbU1ldGhvZF0oJ2NsaWNrJywgc3dpcGVyLm9uQ2xpY2ssIHRydWUpO1xuICB9XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHdyYXBwZXJFbFtkb21NZXRob2RdKCdzY3JvbGwnLCBzd2lwZXIub25TY3JvbGwpO1xuICB9XG5cbiAgLy8gUmVzaXplIGhhbmRsZXJcbiAgaWYgKHBhcmFtcy51cGRhdGVPbldpbmRvd1Jlc2l6ZSkge1xuICAgIHN3aXBlcltzd2lwZXJNZXRob2RdKGRldmljZS5pb3MgfHwgZGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyW3N3aXBlck1ldGhvZF0oJ29ic2VydmVyVXBkYXRlJywgb25SZXNpemUsIHRydWUpO1xuICB9XG5cbiAgLy8gSW1hZ2VzIGxvYWRlclxuICBlbFtkb21NZXRob2RdKCdsb2FkJywgc3dpcGVyLm9uTG9hZCwge1xuICAgIGNhcHR1cmU6IHRydWVcbiAgfSk7XG59O1xuZnVuY3Rpb24gYXR0YWNoRXZlbnRzKCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIHN3aXBlci5vblRvdWNoU3RhcnQgPSBvblRvdWNoU3RhcnQuYmluZChzd2lwZXIpO1xuICBzd2lwZXIub25Ub3VjaE1vdmUgPSBvblRvdWNoTW92ZS5iaW5kKHN3aXBlcik7XG4gIHN3aXBlci5vblRvdWNoRW5kID0gb25Ub3VjaEVuZC5iaW5kKHN3aXBlcik7XG4gIHN3aXBlci5vbkRvY3VtZW50VG91Y2hTdGFydCA9IG9uRG9jdW1lbnRUb3VjaFN0YXJ0LmJpbmQoc3dpcGVyKTtcbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc3dpcGVyLm9uU2Nyb2xsID0gb25TY3JvbGwuYmluZChzd2lwZXIpO1xuICB9XG4gI
1HN3aXBlci5vbkNsaWNrID0gb25DbGljay5iaW5kKHN3aXBlcik7XG4gIHN3aXBlci5vbkxvYWQgPSBvbkxvYWQuYmluZChzd2lwZXIpO1xuICBldmVudHMoc3dpcGVyLCAnb24nKTtcbn1cbmZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgdmFyIHN3aXBlciA9IHRoaXM7XG4gIGV2ZW50cyhzd2lwZXIsICdvZmYnKTtcbn1cbnZhciBldmVudHMkMSA9IHtcbiAgYXR0YWNoRXZlbnRzOiBhdHRhY2hFdmVudHMsXG4gIGRldGFjaEV2ZW50czogZGV0YWNoRXZlbnRzXG59O1xudmFyIGlzR3JpZEVuYWJsZWQgPSBmdW5jdGlvbiBpc0dyaWRFbmFibGVkKHN3aXBlciwgcGFyYW1zKSB7XG4gIHJldHVybiBzd2lwZXIuZ3JpZCAmJiBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMTtcbn07XG5mdW5jdGlvbiBzZXRCcmVha3BvaW50KCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHJlYWxJbmRleCA9IHN3aXBlci5yZWFsSW5kZXgsXG4gICAgaW5pdGlhbGl6ZWQgPSBzd2lwZXIuaW5pdGlhbGl6ZWQsXG4gICAgcGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBlbCA9IHN3aXBlci5lbDtcbiAgdmFyIGJyZWFrcG9pbnRzID0gcGFyYW1zLmJyZWFrcG9pbnRzO1xuICBpZiAoIWJyZWFrcG9pbnRzIHx8IGJyZWFrcG9pbnRzICYmIE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93L2NvbnRhaW5lciB3aWR0aCBhbmQgdXBkYXRlIHBhcmFtZXRlcnNcbiAgdmFyIGJyZWFrcG9pbnRzQmFzZSA9IHBhcmFtcy5icmVha3BvaW50c0Jhc2UgPT09ICd3aW5kb3cnIHx8ICFwYXJhbXMuYnJlYWtwb2ludHNCYXNlID8gcGFyYW1zLmJyZWFrcG9pbnRzQmFzZSA6ICdjb250YWluZXInO1xuICB2YXIgYnJlYWtwb2ludENvbnRhaW5lciA9IFsnd2luZG93JywgJ2NvbnRhaW5lciddLmluY2x1ZGVzKHBhcmFtcy5icmVha3BvaW50c0Jhc2UpIHx8ICFwYXJhbXMuYnJlYWtwb2ludHNCYXNlID8gc3dpcGVyLmVsIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihwYXJhbXMuYnJlYWtwb2ludHNCYXNlKTtcbiAgdmFyIGJyZWFrcG9pbnQgPSBzd2lwZXIuZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgYnJlYWtwb2ludHNCYXNlLCBicmVha3BvaW50Q29udGFpbmVyKTtcbiAgaWYgKCFicmVha3BvaW50IHx8IHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCA9PT0gYnJlYWtwb2ludCkgcmV0dXJuO1xuICB2YXIgYnJlYWtwb2ludE9ubHlQYXJhbXMgPSBicmVha3BvaW50IGluIGJyZWFrcG9pbnRzID8gYnJlYWtwb2ludHNbYnJlYWtwb2ludF0gOiB1bmRlZmluZWQ7XG4gIHZhciBicmVha3BvaW50UGFyYW1zID0gYnJlYWtwb2ludE9ubHlQYXJhbXMgfHwgc3dpcGVyLm9yaWdpbmFsUGFyYW1zO1xuICB2YXIgd2FzTXVsdGlSb3cgPSBpc0dyaWRFbmFibGVkKHN3aXBlciwgcGFyYW1zKTtcbiAgdmFyIGlzTXVsdGlSb3cgPSBpc0dyaWRFbmFibGVkKHN3aXBlciwgYnJlYWtwb2ludFBhcmFtcyk7XG4gIHZhciB3YXNHcmFiQ3Vyc29yID0gc3dpcGVyLnBhcmFtcy5ncmFiQ3Vyc29yO1xuICB2YXIgaXNHcmFiQ3Vyc29yID0gYnJlYWtwb2ludFBhcmFtcy5ncmFiQ3Vyc29yO1xuICB2YXIgd2FzRW5hYmxlZCA9IHBhcmFtcy5lbmFibGVkO1xuICBpZiAod2FzTXVsdGlSb3cgJiYgIWlzTXVsdGlSb3cpIHtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKFwiXCIuY29uY2F0KHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzLCBcImdyaWRcIiksIFwiXCIuY29uY2F0KHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzLCBcImdyaWQtY29sdW1uXCIpKTtcbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgfSBlbHNlIGlmICghd2FzTXVsdGlSb3cgJiYgaXNNdWx0aVJvdykge1xuICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJcIi5jb25jYXQocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MsIFwiZ3JpZFwiKSk7XG4gICAgaWYgKGJyZWFrcG9pbnRQYXJhbXMuZ3JpZC5maWxsICYmIGJyZWFrcG9pbnRQYXJhbXMuZ3JpZC5maWxsID09PSAnY29sdW1uJyB8fCAhYnJlYWtwb2ludFBhcmFtcy5ncmlkLmZpbGwgJiYgcGFyYW1zLmdyaWQuZmlsbCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJcIi5jb25jYXQocGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MsIFwiZ3JpZC1jb2x1bW5cIikpO1xuICAgIH1cbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgfVxuICBpZiAod2FzR3JhYkN1cnNvciAmJiAhaXNHcmFiQ3Vyc29yKSB7XG4gICAgc3dpcGVyLnVuc2V0R3JhYkN1cnNvcigpO1xuICB9IGVsc2UgaWYgKCF3YXNHcmFiQ3Vyc29yICYmIGlzR3JhYkN1cnNvcikge1xuICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKCk7XG4gIH1cblxuICAvLyBUb2dnbGUgbmF2aWdhdGlvbiwgcGFnaW5hdGlvbiwgc2Nyb2xsYmFyXG4gIFsnbmF2aWdhdGlvbicsICdwYWdpbmF0aW9uJywgJ3Njcm9sbGJhciddLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICBpZiAodHlwZW9mIGJyZWFrcG9pbnRQYXJhbXNbcHJvcF0gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgdmFyIHdhc01vZHVsZUVuYWJsZWQgPSBwYXJhbXNbcHJvcF0gJiYgcGFyYW1zW3Byb3BdLmVuYWJsZWQ7XG4gICAgdmFyIGlzTW9kdWxlRW5hYmxlZCA9IGJyZWFrcG9pbnRQYXJhbXNbcHJvcF0gJiYgYnJlYWtwb2ludFBhcmFtc1twcm9wXS5lbmFibGVkO1xuICAgIGlmICh3YXNNb2R1bGVFbmFibGVkICYmICFpc01vZHVsZUVuYWJsZWQpIHtcbiAgICAgIHN3aXBlcltwcm9wXS5kaXNhYmxlKCk7XG4gICAgfVxuICAgIGlmICghd2FzTW9kdWxlRW5hYmxlZCAmJiBpc01vZHVsZUVuYWJsZWQpIHtcbiAgICAgIHN3aXBlcltwcm9wXS5lbmFibGUoKTtcbiAgICB9XG4gIH0pO1xuICB2YXIgZGlyZWN0aW9uQ2hhbmdlZCA9IGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICYmIGJyZWFrcG9pbnRQYXJhbXMuZGlyZWN0aW9uICE9PSBwYXJhbXMuZGlyZWN0aW9uO1xuICB2YXIgbmVlZHNSZUxvb3AgPSBwYXJhbXMubG9vcCAmJiAoYnJlYWtwb2ludFBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSBwYXJhbXMuc2xpZGVzUGVyVmlldyB8fCBkaXJlY3Rpb25DaGFuZ2VkKTtcbiAgdmFyIHdhc0xvb3AgPSBwYXJhbXMubG9vcDtcbiAgaWYgKGRpcmVjdGlvbkNoYW5nZWQgJiYgaW5pdGlhbGl6ZWQpIHtcbiAgICBzd2lwZXIuY2hhbmdlRGlyZWN0aW9uKCk7XG4gIH1cbiAgZXh0ZW5kKHN3aXBlci5wYXJhbXMsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICB2YXIgaXNFbmFibGVkID0gc3dpcGVyLnBhcmFtcy5lbmFibGVkO1xuICB2YXIgaGFzTG9vcCA9IHN3aXBlci5wYXJhbXMubG9vcDtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICBhbGxvd1NsaWRlTmV4dDogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlTmV4dCxcbiAgICBhbGxvd1NsaWRlUHJldjogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlUHJldlxuICB9KTtcbiAgaWYgKHdhc0VuYWJsZWQgJiYgIWlzRW5hYmxlZCkge1xuICAgIHN3aXBlci5kaXNhYmxlKCk7XG4gIH0gZWxzZSBpZiAoIXdhc0VuYWJsZWQgJiYgaXNFbmFibGVkKSB7XG4gICAgc3dpcGVyLmVuYWJsZSgpO1xuICB9XG4gI
1HN3aXBlci5jdXJyZW50QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7XG4gIHN3aXBlci5lbWl0KCdfYmVmb3JlQnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICBpZiAoaW5pdGlhbGl6ZWQpIHtcbiAgICBpZiAobmVlZHNSZUxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUocmVhbEluZGV4KTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICB9IGVsc2UgaWYgKCF3YXNMb29wICYmIGhhc0xvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKHJlYWxJbmRleCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gICAgfSBlbHNlIGlmICh3YXNMb29wICYmICFoYXNMb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG4gIH1cbiAgc3dpcGVyLmVtaXQoJ2JyZWFrcG9pbnQnLCBicmVha3BvaW50UGFyYW1zKTtcbn1cbmZ1bmN0aW9uIGdldEJyZWFrcG9pbnQoYnJlYWtwb2ludHMpIHtcbiAgdmFyIGJhc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICd3aW5kb3cnO1xuICB2YXIgY29udGFpbmVyRWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgaWYgKCFicmVha3BvaW50cyB8fCBiYXNlID09PSAnY29udGFpbmVyJyAmJiAhY29udGFpbmVyRWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIHZhciBicmVha3BvaW50ID0gZmFsc2U7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIGN1cnJlbnRIZWlnaHQgPSBiYXNlID09PSAnd2luZG93JyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IGNvbnRhaW5lckVsLmNsaWVudEhlaWdodDtcbiAgdmFyIHBvaW50cyA9IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5tYXAoZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgaWYgKHR5cGVvZiBwb2ludCA9PT0gJ3N0cmluZycgJiYgcG9pbnQuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICB2Y
1XIgbWluUmF0aW8gPSBwYXJzZUZsb2F0KHBvaW50LnN1YnN0cigxKSk7XG4gICAgICB2YXIgdmFsdWUgPSBjdXJyZW50SGVpZ2h0ICogbWluUmF0aW87XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHBvaW50OiBwb2ludFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBwb2ludCxcbiAgICAgIHBvaW50OiBwb2ludFxuICAgIH07XG4gIH0pO1xuICBwb2ludHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBwYXJzZUludChhLnZhbHVlLCAxMCkgLSBwYXJzZUludChiLnZhbHVlLCAxMCk7XG4gIH0pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBfcG9pbnRzJGkgPSBwb2ludHNbaV0sXG4gICAgICBwb2ludCA9IF9wb2ludHMkaS5wb2ludCxcbiAgICAgIHZhbHVlID0gX3BvaW50cyRpLnZhbHVlO1xuICAgIGlmIChiYXNlID09PSAnd2luZG93Jykge1xuICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKFwiKG1pbi13aWR0aDogXCIuY29uY2F0KHZhbHVlLCBcInB4KVwiKSkubWF0Y2hlcykge1xuICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8PSBjb250YWluZXJFbC5jbGllbnRXaWR0aCkge1xuICAgICAgYnJlYWtwb2ludCA9IHBvaW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnJlYWtwb2ludCB8fCAnbWF4Jztcbn1cbnZhciBicmVha3BvaW50cyA9IHtcbiAgc2V0QnJlYWtwb2ludDogc2V0QnJlYWtwb2ludCxcbiAgZ2V0QnJlYWtwb2ludDogZ2V0QnJlYWtwb2ludFxufTtcbmZ1bmN0aW9uIHByZXBhcmVDbGFzc2VzKGVudHJpZXMsIHByZWZpeCkge1xuICB2YXIgcmVzdWx0Q2xhc3NlcyA9IFtdO1xuICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWVzKSB7XG4gICAgICAgIGlmIChpdGVtW2NsYXNzTmFtZXNdKSB7XG4gICAgICAgICAgcmVzdWx0Q2xhc3Nlcy5wdXNoKHByZWZpeCArIGNsYXNzTmFtZXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0Q2xhc3Nlcy5wdXNoKHByZWZpeCArIGl0ZW0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHRDbGFzc2VzO1xufVxuZnVuY3Rpb24gYWRkQ2xhc3NlcygpIHtcbiAgdmFyIF9lbCRjbGFzc0xpc3Q7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgY2xhc3NOYW1lcyA9IHN3aXBlci5jbGFzc05hbWVzLFxuICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgcnRsID0gc3dpcGVyLnJ0bCxcbiAgICBlbCA9IHN3aXBlci5lbCxcbiAgICBkZXZpY2UgPSBzd2lwZXIuZGV2aWNlO1xuICAvLyBwcmV0dGllci1pZ25vcmVcbiAgdmFyIHN1ZmZpeGVzID0gcHJlcGFyZUNsYXNzZXMoWydpbml0aWFsaXplZCcsIHBhcmFtcy5kaXJlY3Rpb24sIHtcbiAgICAnZnJlZS1tb2RlJzogc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZFxuICB9LCB7XG4gICAgJ2F1dG9oZWlnaHQnOiBwYXJhbXMuYXV0b0hlaWdodFxuICB9LCB7XG4gICAgJ3J0bCc6IHJ0bFxuICB9LCB7XG4gICAgJ2dyaWQnOiBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMVxuICB9LCB7XG4gICAgJ2dyaWQtY29sdW1uJzogcGFyYW1zLmdyaWQgJiYgcGFyYW1zLmdyaWQucm93cyA+IDEgJiYgcGFyYW1zLmdyaWQuZmlsbCA9PT0gJ2NvbHVtbidcbiAgfSwge1xuICAgICdhbmRyb2lkJzogZGV2aWNlLmFuZHJvaWRcbiAgfSwge1xuICAgICdpb3MnOiBkZXZpY2UuaW9zXG4gIH0sIHtcbiAgICAnY3NzLW1vZGUnOiBwYXJhbXMuY3NzTW9kZVxuICB9LCB7XG4gICAgJ2NlbnRlcmVkJzogcGFyYW1zLmNzc01vZGUgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzXG4gIH0sIHtcbiAgICAnd2F0Y2gtcHJvZ3Jlc3MnOiBwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzc1xuICB9XSwgcGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpO1xuICBjbGFzc05hbWVzLnB1c2guYXBwbHkoY2xhc3NOYW1lcywgX3RvQ29uc3VtYWJsZUFycmF5KHN1ZmZpeGVzKSk7XG4gIChfZWwkY2xhc3NMaXN0ID0gZWwuY2xhc3NMaXN0KS5hZGQuYXBwbHkoX2VsJGNsYXNzTGlzdCwgX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzTmFtZXMpKTtcbiAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG59XG5mdW5jdGlvbiByZW1vdmVDbGFzc2VzKCkge1xuICB2YXIgX2VsJGNsYXNzTGlzdDI7XG4gIHZhciBzd2lwZXIgPSB0aGlzO1xuICB2YXIgZWwgPSBzd2lwZXIuZWwsXG4gICAgY2xhc3NOYW1lcyA9IHN3aXBlci5jbGFzc05hbWVzO1xuICBpZiAoIWVsIHx8IHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHJldHVybjtcbiAgKF9lbCRjbGFzc0xpc3QyID0gZWwuY2xhc3NMaXN0KS5yZW1vdmUuYXBwbHkoX2VsJGNsYXNzTGlzdDIsIF90b0NvbnN1bWFibGVBcnJheShjbGFzc05hbWVzKSk7XG4gIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xufVxudmFyIGNsYXNzZXMgPSB7XG4gIGFkZENsYXNzZXM6IGFkZENsYXNzZXMsXG4gIHJlbW92ZUNsYXNzZXM6IHJlbW92ZUNsYXNzZXNcbn07XG5mdW5jdGlvbiBjaGVja092ZXJmbG93KCkge1xuICB2YXIgc3dpcGVyID0gdGhpcztcbiAgdmFyIHdhc0xvY2tlZCA9IHN3aXBlci5pc0xvY2tlZCxcbiAgICBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICB2YXIgc2xpZGVzT2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZTtcbiAgaWYgKHNsaWRlc09mZnNldEJlZm9yZSkge1xuICAgIHZhciBsYXN0U2xpZGVJbmRleCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMTtcbiAgICB2YXIgbGFzdFNsaWRlUmlnaHRFZGdlID0gc3dpcGVyLnNsaWRlc0dyaWRbbGFzdFNsaWRlSW5kZXhdICsgc3dpcGVyLnNsaWRlc1NpemVzR3JpZFtsYXN0U2xpZGVJbmRleF0gKyBzbGlkZXNPZmZzZXRCZWZvcmUgKiAyO1xuICAgIHN3aXBlci5pc0xvY2tlZCA9IHN3aXBlci5zaXplID4gbGFzdFNsaWRlUmlnaHRFZGdlO1xuICB9IGVsc2Uge1xuICAgIHN3aXBlci5pc0xvY2tlZCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGggPT09IDE7XG4gIH1cbiAgaWYgKHBhcmFtcy5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9ICFzd2lwZXIuaXNMb2NrZWQ7XG4gIH1cbiAgaWYgKHBhcmFtcy5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9ICFzd2lwZXIuaXNMb2NrZWQ7XG4gIH1cbiAgaWYgKHdhc0xvY2tlZCAmJiB3YXNMb2NrZWQgIT09I
1HN3aXBlci5pc0xvY2tlZCkge1xuICAgIHN3aXBlci5pc0VuZCA9IGZhbHNlO1xuICB9XG4gIGlmICh3YXNMb2NrZWQgIT09IHN3aXBlci5pc0xvY2tlZCkge1xuICAgIHN3aXBlci5lbWl0KHN3aXBlci5pc0xvY2tlZCA/ICdsb2NrJyA6ICd1bmxvY2snKTtcbiAgfVxufVxudmFyIGNoZWNrT3ZlcmZsb3ckMSA9IHtcbiAgY2hlY2tPdmVyZmxvdzogY2hlY2tPdmVyZmxvd1xufTtcbnZhciBkZWZhdWx0cyA9IHtcbiAgaW5pdDogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcsXG4gIG9uZVdheU1vdmVtZW50OiBmYWxzZSxcbiAgc3dpcGVyRWxlbWVudE5vZGVOYW1lOiAnU1dJUEVSLUNPTlRBSU5FUicsXG4gIHRvdWNoRXZlbnRzVGFyZ2V0OiAnd3JhcHBlcicsXG4gIGluaXRpYWxTbGlkZTogMCxcbiAgc3BlZWQ6IDMwMCxcbiAgY3NzTW9kZTogZmFsc2UsXG4gIHVwZGF0ZU9uV2luZG93UmVzaXplOiB0cnVlLFxuICByZXNpemVPYnNlcnZlcjogdHJ1ZSxcbiAgbmVzdGVkOiBmYWxzZSxcbiAgY3JlYXRlRWxlbWVudHM6IGZhbHNlLFxuICBldmVudHNQcmVmaXg6ICdzd2lwZXInLFxuICBlbmFibGVkOiB0cnVlLFxuICBmb2N1c2FibGVFbGVtZW50czogJ2lucHV0LCBzZWxlY3QsIG9wdGlvbiwgdGV4dGFyZWEsIGJ1dHRvbiwgdmlkZW8sIGxhYmVsJyxcbiAgLy8gT3ZlcnJpZGVzXG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG4gIC8vXG4gIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG4gIC8vIHNzclxuICB1c2VyQWdlbnQ6IG51bGwsXG4gIHVybDogbnVsbCxcbiAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICBlZGdlU3dpcGVEZXRlY3Rpb246IGZhbHNlLFxuICBlZGdlU3dpcGVUaHJlc2hvbGQ6IDIwLFxuICAvLyBBdXRvaGVpZ2h0XG4gIGF1dG9IZWlnaHQ6IGZhbHNlLFxuICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICBzZXRXcmFwcGVyU2l6ZTogZmFsc2UsXG4gIC8vIFZpcnR1YWwgVHJhbnNsYXRlXG4gIHZpcnR1YWxUcmFuc2xhdGU6IGZhbHNlLFxuICAvLyBFZmZlY3RzXG4gIGVmZmVjdDogJ3NsaWRlJyxcbiAgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuXG4gIC8vIEJyZWFrcG9pbnRzXG4gIGJyZWFrcG9pbnRzOiB1bmRlZmluZWQsXG4gIGJyZWFrcG9pbnRzQmFzZTogJ3dpbmRvdycsXG4gIC8vIFNsaWRlcyBncmlkXG4gIHNwYWNlQmV0d2VlbjogMCxcbiAgc2xpZGVzUGVyVmlldzogMSxcbiAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gIHNsaWRlc1Blckdyb3VwU2tpcDogMCxcbiAgc2xpZGVzUGVyR3JvdXBBdXRvOiBmYWxzZSxcbiAgY2VudGVyZWRTbGlkZXM6IGZhbHNlLFxuICBjZW50ZXJlZFNsaWRlc0JvdW5kczogZmFsc2UsXG4gIHNsaWRlc09mZnNldEJlZm9yZTogMCxcbiAgLy8gaW4gcHhcbiAgc2xpZGVzT2Zmc2V0QWZ0ZXI6IDAsXG4gIC8vIGluIHB4XG4gIG5vcm1hbGl6ZVNsaWRlSW5kZXg6IHRydWUsXG4gIGNlbnRlckluc3VmZmljaWVudFNsaWRlczogZmFsc2UsXG4gIHNuYXBUb1NsaWRlRWRnZTogZmFsc2UsXG4gIC8vIERpc2FibGUgc3dpcGVyIGFuZCBoaWRlIG5hdmlnYXRpb24gd2hlbiBjb250YWluZXIgbm90IG92ZXJmbG93XG4gIHdhdGNoT3ZlcmZsb3c6IHRydWUsXG4gIC8vIFJvdW5kIGxlbmd0aFxuICByb3VuZExlbmd0aHM6IGZhbHNlLFxuICAvLyBUb3VjaGVzXG4gIHRvdWNoUmF0aW86IDEsXG4gIHRvdWNoQW5nbGU6IDQ1LFxuICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICBzaG9ydFN3aXBlczogdHJ1ZSxcbiAgbG9uZ1N3aXBlczogdHJ1ZSxcbiAgbG9uZ1N3aXBlc1JhdGlvOiAwLjUsXG4gIGxvbmdTd2lwZXNNczogMzAwLFxuICBmb2xsb3dGaW5nZXI6IHRydWUsXG4gIGFsbG93VG91Y2hNb3ZlOiB0cnVlLFxuICB0aHJlc2hvbGQ6IDUsXG4gIHRvdWNoTW92ZVN0b3BQcm9wYWdhdGlvbjogZmFsc2UsXG4gIHRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgdG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICB0b3VjaFJlbGVhc2VPbkVkZ2VzOiBmYWxzZSxcbiAgLy8gVW5pcXVlIE5hdmlnYXRpb24gRWxlbWVudHNcbiAgdW5pcXVlTmF2RWxlbWVudHM6IHRydWUsXG4gIC8vIFJlc2lzdGFuY2VcbiAgcmVzaXN0YW5jZTogdHJ1ZSxcbiAgcmVzaXN0YW5jZVJhdGlvOiAwLjg1LFxuICAvLyBQcm9ncmVzc1xuICB3YXRjaFNsaWRlc1Byb2dyZXNzOiBmYWxzZSxcbiAgLy8gQ3Vyc29yXG4gIGdyYWJDdXJzb3I6IGZhbHNlLFxuICAvLyBDbGlja3NcbiAgcHJldmVudENsaWNrczogdHJ1ZSxcbiAgcHJldmVudENsaWNrc1Byb3BhZ2F0aW9uOiB0cnVlLFxuICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZSxcbiAgLy8gbG9vcFxuICBsb29wOiBmYWxzZSxcbiAgbG9vcEFkZEJsYW5rU2xpZGVzOiB0cnVlLFxuICBsb29wQWRkaXRpb25hbFNsaWRlczogMCxcbiAgbG9vcFByZXZlbnRzU2xpZGluZzogdHJ1ZSxcbiAgLy8gcmV3aW5kXG4gIHJld2luZDogZmFsc2UsXG4gIC8vIFN3aXBpbmcvbm8gc3dpcGluZ1xuICBhbGxvd1NsaWRlUHJldjogdHJ1ZSxcbiAgYWxsb3dTbGlkZU5leHQ6IHRydWUsXG4gIHN3aXBlSGFuZGxlcjogbnVsbCxcbiAgLy8gJy5zd2lwZS1oYW5kbGVyJyxcbiAgbm9Td2lwaW5nOiB0cnVlLFxuICBub1N3aXBpbmdDbGFzczogJ3N3aXBlci1uby1zd2lwaW5nJyxcbiAgbm9Td2lwaW5nU2VsZWN0b3I6IG51bGwsXG4gIC8vIFBhc3NpdmUgTGlzdGVuZXJzXG4gIHBhc3NpdmVMaXN0ZW5lcnM6IHRydWUsXG4gIG1heEJhY2tmYWNlSGlkZGVuU2xpZGVzOiAxMCxcbiAgLy8gTlNcbiAgY29udGFpbmVyTW9kaWZpZXJDbGFzczogJ3N3aXBlci0nLFxuICAvLyBORVdcbiAgc2xpZGVDbGFzczogJ3N3aXBlci1zbGlkZScsXG4gIHNsaWRlQmxhbmtDbGFzczogJ3N3aXBlci1zbGlkZS1ibGFuaycsXG4gIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgc2xpZGVWaXNpYmxlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdmlzaWJsZScsXG4gIHNsaWRlRnVsbHlWaXNpYmxlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZnVsbHktdmlzaWJsZScsXG4gIHNsaWRlTmV4dENsYXNzOiAnc3dpcGVyLXNsaWRlLW5leHQnLFxuICBzbGlkZVByZXZDbGFzczogJ3N3aXBlci1zbGlkZS1wcmV2JyxcbiAgd3JhcHBlckNsYXNzOiAnc3dpcGVyLXdyYXBwZXInLFxuICBsYXp5UHJlbG9hZGVyQ2xhc3M6ICdzd2lwZXItbGF6eS1wcmVsb2FkZXInLFxuICBsYXp5UHJlbG9hZFByZXZOZXh0OiAwLFxuICAvLyBDYWxsYmFja3NcbiAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLFxuICAvLyBJbnRlcm5hbHNcbiAgX2VtaXRDbGFzc2VzOiBmYWxzZVxufTtcbmZ1bmN0aW9uIG1vZHVsZUV4dGVuZFBhcmFtcyhwYXJhbXMsIGFsbE1vZHVsZXNQYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGV4dGVuZFBhcmFtcygpIHtcbiAgICB2YXIgb2JqID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICB2YXIgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMob2JqKVswXTtcbiAgICB2YXIgbW9kdWxlUGFyYW1zID0gb2JqW21vZHVsZVBhcmFtTmFtZV07XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVQYXJhbXMgIT09ICdvYmplY3QnIHx8IG1vZHVsZVBhcmFtcyA9PT0gbnVsbCkge1xuICAgICAgZXh0ZW5kKGFsbE1vZHVsZXNQYXJhbXMsIG9iaik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChtb2R1bGVQYXJhbU5hbWUgPT09ICduYXZpZ2F0aW9uJyAmJiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSAmJiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXS5lbmFibGVkICYmICFwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXS5wcmV2RWwgJiYgIXBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdLm5leHRFbCkge1xuICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0uYXV0byA9IHRydWU7XG4gICAgfVxuICAgIGlmIChbJ3BhZ2luYX
1Rpb24nLCAnc2Nyb2xsYmFyJ10uaW5kZXhPZihtb2R1bGVQYXJhbU5hbWUpID49IDAgJiYgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gJiYgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0uZW5hYmxlZCAmJiAhcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0uZWwpIHtcbiAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdLmF1dG8gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIShtb2R1bGVQYXJhbU5hbWUgaW4gcGFyYW1zICYmICdlbmFibGVkJyBpbiBtb2R1bGVQYXJhbXMpKSB7XG4gICAgICBleHRlbmQoYWxsTW9kdWxlc1BhcmFtcywgb2JqKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gJ29iamVjdCcgJiYgISgnZW5hYmxlZCcgaW4gcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0pKSB7XG4gICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXS5lbmFibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSkgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH07XG4gICAgZXh0ZW5kKGFsbE1vZHVsZXNQYXJhbXMsIG9iaik7XG4gIH07XG59XG5cbi8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogXCJvZmZcIiAqL1xudmFyIHByb3RvdHlwZXMgPSB7XG4gIGV2ZW50c0VtaXR0ZXI6IGV2ZW50c0VtaXR0ZXIsXG4gIHVwZGF0ZTogdXBkYXRlLFxuICB0cmFuc2xhdGU6IHRyYW5zbGF0ZSxcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbixcbiAgc2xpZGU6IHNsaWRlLFxuICBsb29wOiBsb29wLFxuICBncmFiQ3Vyc29yOiBncmFiQ3Vyc29yLFxuICBldmVudHM6IGV2ZW50cyQxLFxuICBicmVha3BvaW50czogYnJlYWtwb2ludHMsXG4gIGNoZWNrT3ZlcmZsb3c6IGNoZWNrT3ZlcmZsb3ckMSxcbiAgY2xhc3NlczogY2xhc3Nlc1xufTtcbnZhciBleHRlbmRlZERlZmF1bHRzID0ge307XG52YXIgU3dpcGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3dpcGVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTd2lwZXIpO1xuICAgIHZhciBlbDtcbiAgICB2YXIgcGFyYW1zO1xuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXS5jb25zdHJ1Y3RvciAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnc1swXSkuc2xpY2UoOCwgLTEpID09PSAnT2JqZWN0Jykge1xuICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwgPSBhcmdzWzBdO1xuICAgICAgcGFyYW1zID0gYXJnc1sxXTtcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMpIHBhcmFtcyA9IHt9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICBpZiAoZWwgJiYgIXBhcmFtcy5lbCkgcGFyYW1zLmVsID0gZWw7XG4gICAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICBpZiAocGFyYW1zLmVsICYmIHR5cGVvZiBwYXJhbXMuZWwgPT09ICdzdHJpbmcnICYmIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGFyYW1zLmVsKS5sZW5ndGggPiAxKSB7XG4gICAgICB2Y
1XIgc3dpcGVycyA9IFtdO1xuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXJhbXMuZWwpLmZvckVhY2goZnVuY3Rpb24gKGNvbnRhaW5lckVsKSB7XG4gICAgICAgIHZhciBuZXdQYXJhbXMgPSBleHRlbmQoe30sIHBhcmFtcywge1xuICAgICAgICAgIGVsOiBjb250YWluZXJFbFxuICAgICAgICB9KTtcbiAgICAgICAgc3dpcGVycy5wdXNoKG5ldyBTd2lwZXIobmV3UGFyYW1zKSk7XG4gICAgICB9KTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cbiAgICAgIHJldHVybiBzd2lwZXJzO1xuICAgIH1cblxuICAgIC8vIFN3aXBlciBJbnN0YW5jZVxuICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5fX3N3aXBlcl9fID0gdHJ1ZTtcbiAgICBzd2lwZXIuc3VwcG9ydCA9IGdldFN1cHBvcnQoKTtcbiAgICBzd2lwZXIuZGV2aWNlID0gZ2V0RGV2aWNlKHtcbiAgICAgIHVzZXJBZ2VudDogcGFyYW1zLnVzZXJBZ2VudFxuICAgIH0pO1xuICAgIHN3aXBlci5icm93c2VyID0gZ2V0QnJvd3NlcigpO1xuICAgIHN3aXBlci5ldmVudHNMaXN0ZW5lcnMgPSB7fTtcbiAgICBzd2lwZXIuZXZlbnRzQW55TGlzdGVuZXJzID0gW107XG4gICAgc3dpcGVyLm1vZHVsZXMgPSBfdG9Db25zdW1hYmxlQXJyYXkoc3dpcGVyLl9fbW9kdWxlc19fKTtcbiAgICBpZiAocGFyYW1zLm1vZHVsZXMgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMubW9kdWxlcykpIHtcbiAgICAgIHBhcmFtcy5tb2R1bGVzLmZvckVhY2goZnVuY3Rpb24gKG1vZCkge1xuICAgICAgICBpZiAodHlwZW9mIG1vZCA9PT0gJ2Z1bmN0aW9uJyAmJiBzd2lwZXIubW9kdWxlcy5pbmRleE9mKG1vZCkgPCAwKSB7XG4gICAgICAgICAgc3dpcGVyLm1vZHVsZXMucHVzaChtb2QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGFsbE1vZHVsZXNQYXJhbXMgPSB7fTtcbiAgICBzd2lwZXIubW9kdWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChtb2QpIHtcbiAgICAgIG1vZCh7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICBzd2lwZXI6IHN3aXBlcixcbiAgICAgICAgZXh0ZW5kUGFyYW1zOiBtb2R1bGVFeHRlbmRQYXJhbXMocGFyYW1zLCBhbGxNb2R1bGVzUGFyYW1zKSxcbiAgICAgICAgb246IHN3aXBlci5vbi5iaW5kKHN3aXBlciksXG4gICAgICAgIG9uY2U6IHN3aXBlci5vbmNlLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgb2ZmOiBzd2lwZXIub2ZmLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgZW1pdDogc3dpcGVyLmVtaXQuYmluZChzd2lwZXIpXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEV4dGVuZCBkZWZhdWx0cyB3aXRoIG1vZHVsZXMgcGFyYW1zXG4gICAgdmFyIHN3aXBlclBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGFsbE1vZHVsZXNQYXJhbXMpO1xuXG4gICAgLy8gRXh0ZW5kIGRlZmF1bHRzIHdpdGggcGFzc2VkIHBhcmFtc1xuICAgIHN3aXBlci5wYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlclBhcmFtcywgZXh0ZW5kZWREZWZhdWx0cywgcGFyYW1zKTtcbiAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlci5wYXJhbXMpO1xuICAgIHN3aXBlci5wYXNzZWRQYXJhbXMgPSBleHRlbmQoe30sIHBhcmFtcyk7XG5cbiAgICAvLyBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHN3aXBlci5wYXJhbXMgJiYgc3dpcGVyLnBhcmFtcy5vbikge1xuICAgICAgT2JqZWN0LmtleXMoc3dpcGVyLnBhcmFtcy5vbikuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICAgIHN3aXBlci5vbihldmVudE5hbWUsIHN3aXBlci5wYXJhbXMub25bZXZlbnROYW1lXSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMgJiYgc3dpcGVyLnBhcmFtcy5vbkFueSkge1xuICAgICAgc3dpcGVyLm9uQW55KHN3aXBlci5wYXJhbXMub25BbnkpO1xuICAgIH1cblxuICAgIC8vIEV4dGVuZCBTd2lwZXJcbiAgICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgICAgZW5hYmxlZDogc3dpcGVyLnBhcmFtcy5lbmFibGVkLFxuICAgICAgZWw6IGVsLFxuICAgICAgLy8gQ2xhc3Nlc1xuICAgICAgY2xhc3NOYW1lczogW10sXG4gICAgICAvLyBTbGlkZXNcbiAgICAgIHNsaWRlczogW10sXG4gICAgICBzbGlkZXNHcmlkOiBbXSxcbiAgICAgIHNuYXBHcmlkOiBbXSxcbiAgICAgIHNsaWRlc1NpemVzR3JpZDogW10sXG4gICAgICAvLyBpc0RpcmVjdGlvblxuICAgICAgaXNIb3Jpem9udGFsOiBmdW5jdGlvbiBpc0hvcml6b250YWwoKSB7XG4gICAgICAgIHJldHVybiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgfSxcbiAgICAgIGlzVmVydGljYWw6IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgICAgIHJldHVybiBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICAgIH0sXG4gICAgICAvLyBJbmRleGVzXG4gICAgICBhY3RpdmVJbmRleDogMCxcbiAgICAgIHJlYWxJbmRleDogMCxcbiAgICAgIC8vXG4gICAgICBpc0JlZ2lubmluZzogdHJ1ZSxcbiAgICAgIGlzRW5kOiBmYWxzZSxcbiAgICAgIC8vIFByb3BzXG4gICAgICB0cmFuc2xhdGU6IDAsXG4gICAgICBwcmV2aW91c1RyYW5zbGF0ZTogMCxcbiAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgdmVsb2NpdHk6IDAsXG4gICAgICBhbmltYXRpbmc6IGZhbHNlLFxuICAgICAgY3NzT3ZlcmZsb3dBZGp1c3RtZW50OiBmdW5jdGlvbiBjc3NPdmVyZmxvd0FkanVzdG1lbnQoKSB7XG4gICAgICAgIC8vIFJldHVybnMgMCB1bmxlc3MgYHRyYW5zbGF0ZWAgaXMgPiAyKioyM1xuICAgICAgICAvLyBTaG91bGQgYmUgc3VidHJhY3RlZCBmcm9tIGNzcyB2YWx1ZXMgdG8gcHJldmVudCBvdmVyZmxvd1xuICAgICAgICByZXR1cm4gTWF0aC50cnVuYyh0aGlzLnRyYW5zbGF0ZSAvIE1hdGgucG93KDIsIDIzKSkgKiBNYXRoLnBvdygyLCAyMyk7XG4gICAgICB9LFxuICAgICAgLy8gTG9ja3NcbiAgICAgIGFsbG93U2xpZGVOZXh0OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVOZXh0LFxuICAgICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXYsXG4gICAgICAvLyBUb3VjaCBFdmVudHNcbiAgICAgIHRvdWNoRXZlbnRzRGF0YToge1xuICAgICAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNNb3ZlZDogdW5kZWZpbmVkLFxuICAgICAgICBhbGxvd1RvdWNoQ2FsbGJhY2tzOiB1bmRlZmluZWQsXG4gICAgICAgI
1HRvdWNoU3RhcnRUaW1lOiB1bmRlZmluZWQsXG4gICAgICAgIGlzU2Nyb2xsaW5nOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhcnRUcmFuc2xhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgYWxsb3dUaHJlc2hvbGRNb3ZlOiB1bmRlZmluZWQsXG4gICAgICAgIC8vIEZvcm0gZWxlbWVudHMgdG8gbWF0Y2hcbiAgICAgICAgZm9jdXNhYmxlRWxlbWVudHM6IHN3aXBlci5wYXJhbXMuZm9jdXNhYmxlRWxlbWVudHMsXG4gICAgICAgIC8vIExhc3QgY2xpY2sgdGltZVxuICAgICAgICBsYXN0Q2xpY2tUaW1lOiAwLFxuICAgICAgICBjbGlja1RpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gVmVsb2NpdGllc1xuICAgICAgICB2ZWxvY2l0aWVzOiBbXSxcbiAgICAgICAgYWxsb3dNb21lbnR1bUJvdW5jZTogdW5kZWZpbmVkLFxuICAgICAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkLFxuICAgICAgICBwb2ludGVySWQ6IG51bGwsXG4gICAgICAgIHRvdWNoSWQ6IG51bGxcbiAgICAgIH0sXG4gICAgICAvLyBDbGlja3NcbiAgICAgIGFsbG93Q2xpY2s6IHRydWUsXG4gICAgICAvLyBUb3VjaGVzXG4gICAgICBhbGxvd1RvdWNoTW92ZTogc3dpcGVyLnBhcmFtcy5hbGxvd1RvdWNoTW92ZSxcbiAgICAgIHRvdWNoZXM6IHtcbiAgICAgICAgc3RhcnRYOiAwLFxuICAgICAgICBzdGFydFk6IDAsXG4gICAgICAgIGN1cnJlbnRYOiAwLFxuICAgICAgICBjdXJyZW50WTogMCxcbiAgICAgICAgZGlmZjogMFxuICAgICAgfSxcbiAgICAgIC8vIEltYWdlc1xuICAgICAgaW1hZ2VzVG9Mb2FkOiBbXSxcbiAgICAgIGltYWdlc0xvYWRlZDogMFxuICAgIH0pO1xuICAgIHN3aXBlci5lbWl0KCdfc3dpcGVyJyk7XG5cbiAgICAvLyBJbml0XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuaW5pdCkge1xuICAgICAgc3dpcGVyLmluaXQoKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYXBwIGluc3RhbmNlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnN0cnVjdG9yLXJldHVyblxuICAgI
1HJldHVybiBzd2lwZXI7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVDbGFzcyhTd2lwZXIsIFt7XG4gICAga2V5OiBcImdldERpcmVjdGlvbkxhYmVsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERpcmVjdGlvbkxhYmVsKHByb3BlcnR5KSB7XG4gICAgICBpZiAodGhpcy5pc0hvcml6b250YWwoKSkge1xuICAgICAgICByZXR1cm4gcHJvcGVydHk7XG4gICAgICB9XG4gICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd3aWR0aCc6ICdoZWlnaHQnLFxuICAgICAgICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tbGVmdCcsXG4gICAgICAgICdtYXJnaW4tYm90dG9tICc6ICdtYXJnaW4tcmlnaHQnLFxuICAgICAgICAnbWFyZ2luLWxlZnQnOiAnbWFyZ2luLXRvcCcsXG4gICAgICAgICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAgICdwYWRkaW5nLWxlZnQnOiAncGFkZGluZy10b3AnLFxuICAgICAgICAncGFkZGluZy1yaWdodCc6ICdwYWRkaW5nLWJvdHRvbScsXG4gICAgICAgICdtYXJnaW5SaWdodCc6ICdtYXJnaW5Cb3R0b20nXG4gICAgICB9W3Byb3BlcnR5XTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U2xpZGVJbmRleFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTbGlkZUluZGV4KHNsaWRlRWwpIHtcbiAgICAgIHZhciBzbGlkZXNFbCA9IHRoaXMuc2xpZGVzRWwsXG4gICAgICAgIHBhcmFtcyA9IHRoaXMucGFyYW1zO1xuICAgICAgdmFyIHNsaWRlcyA9IGVsZW1lbnRDaGlsZHJlbihzbGlkZXNFbCwgXCIuXCIuY29uY2F0KHBhcmFtcy5zbGlkZUNsYXNzLCBcIiwgc3dpcGVyLXNsaWRlXCIpKTtcbiAgICAgIHZhciBmaXJzdFNsaWRlSW5kZXggPSBlbGVtZW50SW5kZXgoc2xpZGVzWzBdKTtcbiAgICAgIHJldHVybiBlbGVtZW50SW5kZXgoc2xpZGVFbCkgLSBmaXJzdFNsaWRlSW5kZXg7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFNsaWRlSW5kZXhCeURhdGFcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2xpZGVJbmRleEJ5RGF0YShpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2xpZGVJbmRleCh0aGlzLnNsaWRlcy5maW5kKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgIHJldHVybiBzbGlkZUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSAqIDEgPT09IGluZGV4O1xuICAgICAgfSkpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTbGlkZUluZGV4V2hlbkdyaWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2xpZGVJbmRleFdoZW5HcmlkKGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMucGFyYW1zLmdyaWQgJiYgdGhpcy5wYXJhbXMuZ3JpZC5yb3dzID4gMSkge1xuICAgICAgICBpZiAodGhpcy5wYXJhbXMuZ3JpZC5maWxsID09PSAnY29sdW1uJykge1xuICAgICAgICAgIGluZGV4ID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFyYW1zLmdyaWQucm93cyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJhbXMuZ3JpZC5maWxsID09PSAncm93Jykge1xuICAgICAgICAgIGluZGV4ID0gaW5kZXggJSBNYXRoLmNlaWwodGhpcy5zbGlkZXMubGVuZ3RoIC8gdGhpcy5wYXJhbXMuZ3JpZC5yb3dzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWNhbGNTbGlkZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVjYWxjU2xpZGVzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
1XIgc2xpZGVzRWwgPSBzd2lwZXIuc2xpZGVzRWwsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICBzd2lwZXIuc2xpZGVzID0gZWxlbWVudENoaWxkcmVuKHNsaWRlc0VsLCBcIi5cIi5jb25jYXQocGFyYW1zLnNsaWRlQ2xhc3MsIFwiLCBzd2lwZXItc2xpZGVcIikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlbmFibGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICAgIHN3aXBlci5lbmFibGVkID0gdHJ1ZTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCdlbmFibGUnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGlzYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNhYmxlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gICAgICBzd2lwZXIuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgICBzd2lwZXIudW5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgICB9XG4gICAgICBzd2lwZXIuZW1pdCgnZGlzYWJsZScpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXRQcm9ncmVzc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRQcm9ncmVzcyhwcm9ncmVzcywgc3BlZWQpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1pbihNYXRoLm1heChwcm9ncmVzcywgMCksIDEpO1xuICAgICAgdmFyIG1pbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICAgIHZhciBtYXggPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICB2Y
1XIgY3VycmVudCA9IChtYXggLSBtaW4pICogcHJvZ3Jlc3MgKyBtaW47XG4gICAgICBzd2lwZXIudHJhbnNsYXRlVG8oY3VycmVudCwgdHlwZW9mIHNwZWVkID09PSAndW5kZWZpbmVkJyA/IDAgOiBzcGVlZCk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVtaXRDb250YWluZXJDbGFzc2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXRDb250YWluZXJDbGFzc2VzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuX2VtaXRDbGFzc2VzIHx8ICFzd2lwZXIuZWwpIHJldHVybjtcbiAgICAgIHZhciBjbHMgPSBzd2lwZXIuZWwuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5pbmRleE9mKCdzd2lwZXInKSA9PT0gMCB8fCBjbGFzc05hbWUuaW5kZXhPZihzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3MpID09PSAwO1xuICAgICAgfSk7XG4gICAgICBzd2lwZXIuZW1pdCgnX2NvbnRhaW5lckNsYXNzZXMnLCBjbHMuam9pbignICcpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U2xpZGVDbGFzc2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFNsaWRlQ2xhc3NlcyhzbGlkZUVsKSB7XG4gICAgICB2YXIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIuZGVzdHJveWVkKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gc2xpZGVFbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gY2xhc3NOYW1lLmluZGV4T2YoJ3N3aXBlci1zbGlkZScpID09PSAwIHx8IGNsYXNzTmFtZS5pbmRleE9mKHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykgPT09IDA7XG4gICAgICB9KS5qb2luKCcgJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVtaXRTbGlkZXNDbGFzc2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXRTbGlkZXNDbGFzc2VzKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuX2VtaXRDbGFzc2VzIHx8ICFzd2lwZXIuZWwpIHJldHVybjtcbiAgICAgIHZhciB1cGRhdGVzID0gW107XG4gICAgICBzd2lwZXIuc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgICAgdmFyIGNsYXNzTmFtZXMgPSBzd2lwZXIuZ2V0U2xpZGVDbGFzc2VzKHNsaWRlRWwpO1xuICAgICAgICB1cGRhdGVzLnB1c2goe1xuICAgICAgICAgIHNsaWRlRWw6IHNsaWRlRWwsXG4gICAgICAgICAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1xuICAgICAgICB9KTtcbiAgICAgICAgc3dpcGVyLmVtaXQoJ19zbGlkZUNsYXNzJywgc2xpZGVFbCwgY2xhc3NOYW1lcyk7XG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5lbWl0KCdfc2xpZGVDbGFzc2VzJywgdXBkYXRlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNsaWRlc1BlclZpZXdEeW5hbWljXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNsaWRlc1BlclZpZXdEeW5hbWljKCkge1xuICAgICAgdmFyIHZpZXcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdjdXJyZW50JztcbiAgICAgIHZhciBleGFjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICB2Y
1XIgc3dpcGVyID0gdGhpcztcbiAgICAgIHZhciBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLFxuICAgICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzLFxuICAgICAgICBzbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQsXG4gICAgICAgIHNsaWRlc1NpemVzR3JpZCA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWQsXG4gICAgICAgIHN3aXBlclNpemUgPSBzd2lwZXIuc2l6ZSxcbiAgICAgICAgYWN0aXZlSW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICB2YXIgc3B2ID0gMTtcbiAgICAgIGlmICh0eXBlb2YgcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdudW1iZXInKSByZXR1cm4gcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gICAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIHZhciBzbGlkZVNpemUgPSBzbGlkZXNbYWN0aXZlSW5kZXhdID8gTWF0aC5jZWlsKHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplKSA6IDA7XG4gICAgICAgIHZhciBicmVha0xvb3A7XG4gICAgICAgIGZvciAodmFyIGkgPSBhY3RpdmVJbmRleCArIDE7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBpZiAoc2xpZGVzW2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICAgIHNsaWRlU2l6ZSArPSBNYXRoLmNlaWwoc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZSk7XG4gICAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICAgIGlmIChzbGlkZVNpemUgPiBzd2lwZXJTaXplKSBicmVha0xvb3AgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBfaTggPSBhY3RpdmVJbmRleCAtIDE7IF9pOCA+PSAwOyBfaTggLT0gMSkge1xuICAgICAgICAgIGlmIChzbGlkZXNbX2k4XSAmJiAhYnJlYWtMb29wKSB7XG4gICAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW19pOF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgYnJlYWtMb29wID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICBpZiAodmlldyA9PT0gJ2N1cnJlbnQnKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2k5ID0gYWN0aXZlSW5kZXggKyAxOyBfaTkgPCBzbGlkZXMubGVuZ3RoOyBfaTkgKz0gMSkge1xuICAgICAgICAgICAgdmFyIHNsaWRlSW5WaWV3ID0gZXhhY3QgPyBzbGlkZXNHcmlkW19pOV0gKyBzbGlkZXNTaXplc0dyaWRbX2k5XSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZSA6IHNsaWRlc0dyaWRbX2k5XSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZTtcbiAgICAgICAgICAgIGlmIChzbGlkZUluVmlldykge1xuICAgICAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHJldmlvdXNcbiAgICAgICAgICBmb3IgKHZhciBfaTAgPSBhY3RpdmVJbmRleCAtIDE7IF9pMCA+PSAwOyBfaTAgLT0gMSkge1xuICAgICAgICAgICAgdmFyIF9zbGlkZUluVmlldyA9IHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIC0gc2xpZGVzR3JpZFtfaTBdIDwgc3dpcGVyU2l6ZTtcbiAgICAgICAgICAgIGlmIChfc2xpZGVJblZpZXcpIHtcbiAgICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3B2O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1cGRhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICB2Y
1XIgc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQsXG4gICAgICAgIHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gICAgICAvLyBCcmVha3BvaW50c1xuICAgICAgaWYgKHBhcmFtcy5icmVha3BvaW50cykge1xuICAgICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgICAgfVxuICAgICAgX3RvQ29uc3VtYWJsZUFycmF5KHN3aXBlci5lbC5xdWVyeVNlbGVjdG9yQWxsKCdbbG9hZGluZz1cImxhenlcIl0nKSkuZm9yRWFjaChmdW5jdGlvbiAoaW1hZ2VFbCkge1xuICAgICAgICBpZiAoaW1hZ2VFbC5jb21wbGV0ZSkge1xuICAgICAgICAgIHByb2Nlc3NMYXp5UHJlbG9hZGVyKHN3aXBlciwgaW1hZ2VFbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNpemUoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgICAgdmFyIHRyYW5zbGF0ZVZhbHVlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgKiAtMSA6IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICAgIHZhciBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heCh0cmFuc2xhdGVWYWx1ZSwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdUcmFuc2xhdGUpO1xuICAgICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICAgIH1cbiAgICAgIHZhciB0cmFuc2xhdGVkO1xuICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiAhcGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgc2V0VHJhbnNsYXRlKCk7XG4gICAgICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldyA+IDEpICYmIHN3aXBlci5pc0VuZCAmJiAhcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgICAgdmFyIHNsaWRlcyA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMgOiBzd2lwZXIuc2xpZGVzO1xuICAgICAgICAgIHRyYW5zbGF0ZWQgPSBzd2lwZXIuc2xpZGVUbyhzbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zbGF0ZWQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHNuYXBHcmlkICE9PSBzd2lwZXIuc25hcEdyaWQpIHtcbiAgICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci5lbWl0KCd1cGRhdGUnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlRGlyZWN0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoYW5nZURpcmVjdGlvbihuZXdEaXJlY3Rpb24pIHtcbiAgICAgIHZhciBuZWVkVXBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgICAgdmFyIHN3aXBlciA9IHRoaXM7XG4gICAgICB2Y
1XIgY3VycmVudERpcmVjdGlvbiA9IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uO1xuICAgICAgaWYgKCFuZXdEaXJlY3Rpb24pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIG5ld0RpcmVjdGlvbiA9IGN1cnJlbnREaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICB9XG4gICAgICBpZiAobmV3RGlyZWN0aW9uID09PSBjdXJyZW50RGlyZWN0aW9uIHx8IG5ld0RpcmVjdGlvbiAhPT0gJ2hvcml6b250YWwnICYmIG5ld0RpcmVjdGlvbiAhPT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICByZXR1cm4gc3dpcGVyO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5yZW1vdmUoXCJcIi5jb25jYXQoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKS5jb25jYXQoY3VycmVudERpcmVjdGlvbikpO1xuICAgICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5hZGQoXCJcIi5jb25jYXQoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKS5jb25jYXQobmV3RGlyZWN0aW9uKSk7XG4gICAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgICAgIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID0gbmV3RGlyZWN0aW9uO1xuICAgICAgc3dpcGVyLnNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZUVsKSB7XG4gICAgICAgIGlmIChuZXdEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzbGlkZUVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xpZGVFbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzd2lwZXIuZW1pdCgnY2hhbmdlRGlyZWN0aW9uJyk7XG4gICAgICBpZiAobmVlZFVwZGF0ZSkgc3dpcGVyLnVwZGF0ZSgpO1xuICAgICAgcmV0dXJuIHN3aXBlcjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VEaXJlY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2VEaXJlY3Rpb24oZGlyZWN0aW9uKSB7XG4gICAgICB2Y
1XIgc3dpcGVyID0gdGhpcztcbiAgICAgIGlmIChzd2lwZXIucnRsICYmIGRpcmVjdGlvbiA9PT0gJ3J0bCcgfHwgIXN3aXBlci5ydGwgJiYgZGlyZWN0aW9uID09PSAnbHRyJykgcmV0dXJuO1xuICAgICAgc3dpcGVyLnJ0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICBzd2lwZXIucnRsVHJhbnNsYXRlID0gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiBzd2lwZXIucnRsO1xuICAgICAgaWYgKHN3aXBlci5ydGwpIHtcbiAgICAgICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5hZGQoXCJcIi5jb25jYXQoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzLCBcInJ0bFwiKSk7XG4gICAgICAgIHN3aXBlci5lbC5kaXIgPSAncnRsJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5lbC5jbGFzc0xpc3QucmVtb3ZlKFwiXCIuY29uY2F0KHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcywgXCJydGxcIikpO1xuICAgICAgICBzd2lwZXIuZWwuZGlyID0gJ2x0cic7XG4gICAgICB9XG4gICAgICBzd2lwZXIudXBkYXRlKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm1vdW50XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG1vdW50KGVsZW1lbnQpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5tb3VudGVkKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gRmluZCBlbFxuICAgICAgdmFyIGVsID0gZWxlbWVudCB8fCBzd2lwZXIucGFyYW1zLmVsO1xuICAgICAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICAgIH1cbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZWwuc3dpcGVyID0gc3dpcGVyO1xuICAgICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5ob3N0ICYmIGVsLnBhcmVudE5vZGUuaG9zdC5ub2RlTmFtZSA9PT0gc3dpcGVyLnBhcmFtcy5zd2lwZXJFbGVtZW50Tm9kZU5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICBzd2lwZXIuaXNFbGVtZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZXRXcmFwcGVyU2VsZWN0b3IgPSBmdW5jdGlvbiBnZXRXcmFwcGVyU2VsZWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBcIi5cIi5jb25jYXQoKHN3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzIHx8ICcnKS50cmltKCkuc3BsaXQoJyAnKS5qb2luKCcuJykpO1xuICAgICAgfTtcbiAgICAgIHZhciBnZXRXcmFwcGVyID0gZnVuY3Rpb24gZ2V0V3JhcHBlcigpIHtcbiAgICAgICAgaWYgKGVsICYmIGVsLnNoYWRvd1Jvb3QgJiYgZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKSB7XG4gICAgICAgICAgdmFyIHJlcyA9IGVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihnZXRXcmFwcGVyU2VsZWN0b3IoKSk7XG4gICAgICAgICAgLy8gQ2hpbGRyZW4gbmVlZHMgdG8gcmV0dXJuIHNsb3QgaXRlbXNcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtZW50Q2hpbGRyZW4oZWwsIGdldFdyYXBwZXJTZWxlY3RvcigpKVswXTtcbiAgICAgIH07XG4gICAgICAvLyBGaW5kIFdyYXBwZXJcbiAgICAgIHZhciB3cmFwcGVyRWwgPSBnZXRXcmFwcGVyKCk7XG4gICAgICBpZiAoIXdyYXBwZXJFbCAmJiBzd2lwZXIucGFyYW1zLmNyZWF0ZUVsZW1lbnRzKSB7XG4gICAgICAgIHdyYXBwZXJFbCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIHN3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzKTtcbiAgICAgICAgZWwuYXBwZW5kKHdyYXBwZXJFbCk7XG4gICAgICAgIGVsZW1lbnRDaGlsZHJlbihlbCwgXCIuXCIuY29uY2F0KHN3aXBlci5wYXJhbXMuc2xpZGVDbGFzcykpLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlRWwpIHtcbiAgICAgICAgICB3cmFwcGVyRWwuYXBwZW5kKHNsaWRlRWwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgICAgIGVsOiBlbCxcbiAgICAgICAgd3JhcHBlckVsOiB3cmFwcGVyRWwsXG4gICAgICAgIHNsaWRlc0VsOiBzd2lwZXIuaXNFbGVtZW50ICYmICFlbC5wYXJlbnROb2RlLmhvc3Quc2xpZGVTbG90cyA/IGVsLnBhcmVudE5vZGUuaG9zdCA6IHdyYXBwZXJFbCxcbiAgICAgICAgaG9zdEVsOiBzd2lwZXIuaXNFbGVtZW50ID8gZWwucGFyZW50Tm9kZS5ob3N0IDogZWwsXG4gICAgICAgIG1vdW50ZWQ6IHRydWUsXG4gICAgICAgIC8vIFJUTFxuICAgICAgICBydGw6IGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCBlbGVtZW50U3R5bGUoZWwsICdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcsXG4gICAgICAgIHJ0bFRyYW5zbGF0ZTogc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiAoZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8IGVsZW1lbnRTdHlsZShlbCwgJ2RpcmVjdGlvbicpID09PSAncnRsJyksXG4gICAgICAgIHdyb25nUlRMOiBlbGVtZW50U3R5bGUod3JhcHBlckVsLCAnZGlzcGxheScpID09PSAnLXdlYmtpdC1ib3gnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoZWwpIHtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgaWYgKHN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuIHN3aXBlcjtcbiAgICAgIHZhciBtb3VudGVkID0gc3dpcGVyLm1vdW50KGVsKTtcbiAgICAgIGlmIChtb3VudGVkID09PSBmYWxzZSkgcmV0dXJuIHN3aXBlcjtcbiAgICAgIHN3aXBlci5lbWl0KCdiZWZvcmVJbml0Jyk7XG5cbiAgICAgIC8vIFNldCBicmVha3BvaW50XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5icmVha3BvaW50cykge1xuICAgICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgQ2xhc3Nlc1xuICAgICAgc3dpcGVyLmFkZENsYXNzZXMoKTtcblxuICAgICAgLy8gVXBkYXRlIHNpemVcbiAgICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBzbGlkZXNcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHtcbiAgICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IEdyYWIgQ3Vyc29yXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5ncmFiQ3Vyc29yICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgI
1HN3aXBlci5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3AgJiYgc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgKyBzd2lwZXIudmlydHVhbC5zbGlkZXNCZWZvcmUsIDAsIHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSwgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGxvb3BcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BDcmVhdGUodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gQXR0YWNoIGV2ZW50c1xuICAgICAgc3dpcGVyLmF0dGFjaEV2ZW50cygpO1xuICAgICAgdmFyIGxhenlFbGVtZW50cyA9IF90b0NvbnN1bWFibGVBcnJheShzd2lwZXIuZWwucXVlcnlTZWxlY3RvckFsbCgnW2xvYWRpbmc9XCJsYXp5XCJdJykpO1xuICAgICAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICAgICAgbGF6eUVsZW1lbnRzLnB1c2guYXBwbHkobGF6eUVsZW1lbnRzLCBfdG9Db25zdW1hYmxlQXJyYXkoc3dpcGVyLmhvc3RFbC5xdWVyeVNlbGVjdG9yQWxsKCdbbG9hZGluZz1cImxhenlcIl0nKSkpO1xuICAgICAgfVxuICAgICAgbGF6eUVsZW1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGltYWdlRWwpIHtcbiAgICAgICAgaWYgKGltYWdlRWwuY29tcGxldGUpIHtcbiAgICAgICAgICBwcm9jZXNzTGF6eVByZWxvYWRlcihzd2lwZXIsIGltYWdlRWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGltYWdlRWwuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBwcm9jZXNzTGF6eVByZWxvYWRlcihzd2lwZXIsIGUudGFyZ2V0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwcmVsb2FkKHN3aXBlcik7XG5cbiAgICAgIC8vIEluaXQgRmxhZ1xuICAgICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHByZWxvYWQoc3dpcGVyKTtcblxuICAgICAgLy8gRW1pdFxuICAgICAgc3dpcGVyLmVtaXQoJ2luaXQnKTtcbiAgICAgIHN3aXBlci5lbWl0KCdhZnRlckluaXQnKTtcbiAgICAgIHJldHVybiBzd2lwZXI7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRlc3Ryb3lcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHZhciBkZWxldGVJbnN0YW5jZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICAgIHZhciBjbGVhblN0eWxlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICAgIHZhciBzd2lwZXIgPSB0aGlzO1xuICAgICAgdmFyIHBhcmFtcyA9IHN3aXBlci5wYXJhbXMsXG4gICAgICAgIGVsID0gc3dpcGVyLmVsLFxuICAgICAgICB3cmFwcGVyRWwgPSBzd2lwZXIud3JhcHBlckVsLFxuICAgICAgICBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuICAgICAgaWYgKHR5cGVvZiBzd2lwZXIucGFyYW1zID09PSAndW5kZWZpbmVkJyB8fCBzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZURlc3Ryb3knKTtcblxuICAgICAgLy8gSW5pdCBGbGFnXG4gICAgICBzd2lwZXIuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgICAgLy8gRGV0YWNoIGV2ZW50c1xuICAgICAgc3dpcGVyLmRldGFjaEV2ZW50cygpO1xuXG4gICAgICAvLyBEZXN0cm95IGxvb3BcbiAgICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYW51cCBzdHlsZXNcbiAgICAgIGlmIChjbGVhblN0eWxlcykge1xuICAgICAgICBzd2lwZXIucmVtb3ZlQ2xhc3NlcygpO1xuICAgICAgICBpZiAoZWwgJiYgdHlwZW9mIGVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcHBlckVsKSB7XG4gICAgICAgICAgd3JhcHBlckVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2xpZGVzICYmIHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICBzbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGVFbCkge1xuICAgICAgICAgICAgc2xpZGVFbC5jbGFzc0xpc3QucmVtb3ZlKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcywgcGFyYW1zLnNsaWRlRnVsbHlWaXNpYmxlQ2xhc3MsIHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzLCBwYXJhbXMuc2xpZGVOZXh0Q2xhc3MsIHBhcmFtcy5zbGlkZVByZXZDbGFzcyk7XG4gICAgICAgICAgICBzbGlkZUVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgICAgIHNsaWRlRWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzd2lwZXIuZW1pdCgnZGVzdHJveScpO1xuXG4gICAgICAvLyBEZXRhY2ggZW1pdHRlciBldmVudHNcbiAgICAgIE9iamVjdC5rZXlzKHN3aXBlci5ldmVudHNMaXN0ZW5lcnMpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICBzd2lwZXIub2ZmKGV2ZW50TmFtZSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChkZWxldGVJbnN0YW5jZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHN3aXBlci5lbCAmJiB0eXBlb2Ygc3dpcGVyLmVsICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgI
1HN3aXBlci5lbC5zd2lwZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZVByb3BzKHN3aXBlcik7XG4gICAgICB9XG4gICAgICBzd2lwZXIuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImV4dGVuZERlZmF1bHRzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4dGVuZERlZmF1bHRzKG5ld0RlZmF1bHRzKSB7XG4gICAgICBleHRlbmQoZXh0ZW5kZWREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleHRlbmRlZERlZmF1bHRzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gZXh0ZW5kZWREZWZhdWx0cztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVmYXVsdHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0cztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW5zdGFsbE1vZHVsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnN0YWxsTW9kdWxlKG1vZCkge1xuICAgICAgaWYgKCFTd2lwZXIucHJvdG90eXBlLl9fbW9kdWxlc19fKSBTd2lwZXIucHJvdG90eXBlLl9fbW9kdWxlc19fID0gW107XG4gICAgICB2YXIgbW9kdWxlcyA9IFN3aXBlci5wcm90b3R5cGUuX19tb2R1bGVzX187XG4gICAgICBpZiAodHlwZW9mIG1vZCA9PT0gJ2Z1bmN0aW9uJyAmJiBtb2R1bGVzLmluZGV4T2YobW9kKSA8IDApIHtcbiAgICAgICAgbW9kdWxlcy5wdXNoKG1vZCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInVzZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB1c2UobW9kdWxlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2R1bGUpKSB7XG4gICAgICAgIG1vZHVsZS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIFN3aXBlci5pbnN0YWxsTW9kdWxlKG0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFN3aXBlcjtcbiAgICAgIH1cbiAgICAgIFN3aXBlci5pbnN0YWxsTW9kdWxlKG1vZHVsZSk7XG4gICAgICByZXR1cm4gU3dpcGVyO1xuICAgIH1cbiAgfV0pO1xufSgpO1xuT2JqZWN0LmtleXMocHJvdG90eXBlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvdG90eXBlR3JvdXApIHtcbiAgT2JqZWN0LmtleXMocHJvdG90eXBlc1twcm90b3R5cGVHcm91cF0pLmZvckVhY2goZnVuY3Rpb24gKHByb3RvTWV0aG9kKSB7XG4gICAgU3dpcGVyLnByb3RvdHlwZVtwcm90b01ldGhvZF0gPSBwcm90b3R5cGVzW3Byb3RvdHlwZUdyb3VwXVtwcm90b01ldGhvZF07XG4gIH0pO1xufSk7XG5Td2lwZXIudXNlKFtSZXNpemUsIE9ic2VydmVyXSk7XG5leHBvcnQgeyBTd2lwZXIgYXMgUywgZGVmYXVsdHMgYXMgZCB9OyIsImltcG9ydCB7IHMgYXMgc2V0SW5uZXJIVE1MIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG4vKiB1bmRlcnNjb3JlIGluIG5hbWUgLT4gd2F0Y2ggZm9yIGNoYW5nZXMgKi9cbnZhciBwYXJhbXNMaXN0ID0gWydldmVudHNQcmVmaXgnLCAnaW5qZWN0U3R5bGVzJywgJ2luamVjdFN0eWxlc1VybHMnLCAnbW9kdWxlcycsICdpbml0JywgJ19kaXJlY3Rpb24nLCAnb25lV2F5TW92ZW1lbnQnLCAnc3dpcGVyRWxlbWVudE5vZGVOYW1lJywgJ3RvdWNoRXZlbnRzVGFyZ2V0JywgJ2luaXRpYWxTbGlkZScsICdfc3BlZWQnLCAnY3NzTW9kZScsICd1cGRhdGVPbldpbmRvd1Jlc2l6ZScsICdyZXNpemVPYnNlcnZlcicsICduZXN0ZWQnLCAnZm9jdXNhYmxlRWxlbWVudHMnLCAnX2VuYWJsZWQnLCAnX3dpZHRoJywgJ19oZWlnaHQnLCAncHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uJywgJ3VzZXJBZ2VudCcsICd1cmwnLCAnX2VkZ2VTd2lwZURldGVjdGlvbicsICdfZWRnZVN3aXBlVGhyZXNob2xkJywgJ19mcmVlTW9kZScsICdfYXV0b0hlaWdodCcsICdzZXRXcmFwcGVyU2l6ZScsICd2aXJ0dWFsVHJhbnNsYXRlJywgJ19lZmZlY3QnLCAnYnJlYWtwb2ludHMnLCAnYnJlYWtwb2ludHNCYXNlJywgJ19zcGFjZUJldHdlZW4nLCAnX3NsaWRlc1BlclZpZXcnLCAnbWF4QmFja2ZhY2VIaWRkZW5TbGlkZXMnLCAnX2dyaWQnLCAnX3NsaWRlc1Blckdyb3VwJywgJ19zbGlkZXNQZXJHcm91cFNraXAnLCAnX3NsaWRlc1Blckdyb3VwQXV0bycsICdfY2VudGVyZWRTbGlkZXMnLCAnX2NlbnRlcmVkU2xpZGVzQm91bmRzJywgJ19zbGlkZXNPZmZzZXRCZWZvcmUnLCAnX3NsaWRlc09mZnNldEFmdGVyJywgJ25vcm1hbGl6ZVNsaWRlSW5kZXgnLCAnX2NlbnRlckluc3VmZmljaWVudFNsaWRlcycsICdfc25hcFRvU2xpZGVFZGdlJywgJ193YXRjaE92ZXJmbG93JywgJ3JvdW5kTGVuZ3RocycsICd0b3VjaFJhdGlvJywgJ3RvdWNoQW5nbGUnLCAnc2ltdWxhdGVUb3VjaCcsICdfc2hvcnRTd2lwZXMnLCAnX2xvbmdTd2lwZXMnLCAnbG9uZ1N3aXBlc1JhdGlvJywgJ2xvbmdTd2lwZXNNcycsICdfZm9sbG93RmluZ2VyJywgJ2FsbG93VG91Y2hNb3ZlJywgJ190aHJlc2hvbGQnLCAndG91Y2hNb3ZlU3RvcFByb3BhZ2F0aW9uJywgJ3RvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdCcsICd0b3VjaFN0YXJ0Rm9yY2VQcmV2ZW50RGVmYXVsdCcsICd0b3VjaFJlbGVhc2VPbkVkZ2VzJywgJ3VuaXF1ZU5hdkVsZW1lbnRzJywgJ19yZXNpc3RhbmNlJywgJ19yZXNpc3RhbmNlUmF0aW8nLCAnX3dhdGNoU2xpZGVzUHJvZ3Jlc3MnLCAnX2dyYWJDdXJzb3InLCAncHJldmVudENsaWNrcycsICdwcmV2ZW50Q2xpY2tzUHJvcGFnYXRpb24nLCAnX3NsaWRlVG9DbGlja2VkU2xpZGUnLCAnX2xvb3AnLCAnbG9vcEFkZGl0aW9uYWxTbGlkZXMnLCAnbG9vcEFkZEJsYW5rU2xpZGVzJywgJ2xvb3BQcmV2ZW50c1NsaWRpbmcnLCAnX3Jld2luZCcsICdfYWxsb3dTbGlkZVByZXYnLCAnX2FsbG93U2xpZGVOZXh0JywgJ19zd2lwZUhhbmRsZXInLCAnX25vU3dpcGluZycsICdub1N3aXBpbmdDbGFzcycsICdub1N3aXBpbmdTZWxlY3RvcicsICdwYXNzaXZlTGlzdGVuZXJzJywgJ2NvbnRhaW5lck1vZGlmaWVyQ2xhc3MnLCAnc2xpZGVDbGFzcycsICdzbGlkZUFjdGl2ZUNsYXNzJywgJ3NsaWRlVmlzaWJsZUNsYXNzJywgJ3NsaWRlRnVsbHlWaXNpYmxlQ2xhc3MnLCAnc2xpZGVOZXh0Q2xhc3MnLCAnc2xpZGVQcmV2Q2xhc3MnLCAnc2xpZGVCbGFua0NsYXNzJywgJ3dyYXBwZXJDbGFzcycsICdsYXp5UHJlbG9hZGVyQ2xhc3MnLCAnbGF6eVByZWxvYWRQcmV2TmV4dCcsICdydW5DYWxsYmFja3NPbkluaXQnLCAnb2JzZXJ2ZXInLCAnb2JzZXJ2ZVBhcmVudHMnLCAnb2JzZXJ2ZVNsaWRlQ2hpbGRyZW4nLFxuLy8gbW9kdWxlc1xuJ2ExMXknLCAnX2F1dG9wbGF5JywgJ19jb250cm9sbGVyJywgJ2NvdmVyZmxvd0VmZmVjdCcsICdjdWJlRWZmZWN0JywgJ2ZhZGVFZmZlY3QnLCAnZmxpcEVmZmVjdCcsICdjcmVhdGl2ZUVmZmVjdCcsICdjYXJkc0VmZmVjdCcsICdoYXNoTmF2aWdhdGlvbicsICdoaXN0b3J5JywgJ2tleWJvYXJkJywgJ21vdXNld2hlZWwnLCAnX25hdmlnYXRpb24nLCAnX3BhZ2luYX
1Rpb24nLCAncGFyYWxsYXgnLCAnX3Njcm9sbGJhcicsICdfdGh1bWJzJywgJ3ZpcnR1YWwnLCAnem9vbScsICdjb250cm9sJ107XG5mdW5jdGlvbiBpc09iamVjdChvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiBvLmNvbnN0cnVjdG9yICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSkgPT09ICdPYmplY3QnICYmICFvLl9fc3dpcGVyX187XG59XG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0LCBzcmMpIHtcbiAgdmFyIG5vRXh0ZW5kID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG4gIE9iamVjdC5rZXlzKHNyYykuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gbm9FeHRlbmQuaW5kZXhPZihrZXkpIDwgMDtcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXRba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHRhcmdldFtrZXldID0gc3JjW2tleV07ZWxzZSBpZiAoaXNPYmplY3Qoc3JjW2tleV0pICYmIGlzT2JqZWN0KHRhcmdldFtrZXldKSAmJiBPYmplY3Qua2V5cyhzcmNba2V5XSkubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHNyY1trZXldLl9fc3dpcGVyX18pIHRhcmdldFtrZXldID0gc3JjW2tleV07ZWxzZSBleHRlbmQodGFyZ2V0W2tleV0sIHNyY1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gbmVlZHNOYXZpZ2F0aW9uKCkge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHBhcmFtcy5uYXZpZ2F0aW9uICYmIHR5cGVvZiBwYXJhbXMubmF2aWdhdGlvbi5uZXh0RWwgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwYXJhbXMubmF2aWdhdGlvbi5wcmV2RWwgPT09ICd1bmRlZmluZWQnO1xufVxuZnVuY3Rpb24gbmVlZHNQYWdpbmF0aW9uKCkge1xuICB2YXIgcGFyYW1zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgcmV0dXJuIHBhcmFtcy5wYWdpbmF0aW9uICYmIHR5cGVvZiBwYXJhbXMucGFnaW5hdGlvbi5lbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5mdW5jdGlvbiBuZWVkc1Njcm9sbGJhcigpIHtcbiAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiBwYXJhbXMuc2Nyb2xsYmFyICYmIHR5cGVvZiBwYXJhbXMuc2Nyb2xsYmFyLmVsID09PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIHVuaXF1ZUNsYXNzZXMoKSB7XG4gIHZhciBjbGFzc05hbWVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgdmFyIGNsYXNzZXMgPSBjbGFzc05hbWVzLnNwbGl0KCcgJykubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMudHJpbSgpO1xuICB9KS5maWx0ZXIoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gISFjO1xuICB9KTtcbiAgdmFyIHVuaXF1ZSA9IFtdO1xuICBjbGFzc2VzLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICBpZiAodW5pcXVlLmluZGV4T2YoYykgPCAwKSB1bmlxdWUucHVzaChjKTtcbiAgfSk7XG4gIHJldHVybiB1bmlxdWUuam9pbignICcpO1xufVxuZnVuY3Rpb24gYXR0clRvUHJvcCgpIHtcbiAgdmFyIGF0dHJOYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgcmV0dXJuIGF0dHJOYW1lLnJlcGxhY2UoLy1bYS16XS9nLCBmdW5jdGlvbiAobCkge1xuICAgIHJldHVybiBsLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgnLScsICcnKTtcbiAgfSk7XG59XG5mdW5jdGlvbiB3cmFwcGVyQ2xhc3MoKSB7XG4gIHZhciBjbGFzc05hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICBpZiAoIWNsYXNzTmFtZSkgcmV0dXJuICdzd2lwZXItd3JhcHBlcic7XG4gIGlmICghY2xhc3NOYW1lLmluY2x1ZGVzKCdzd2lwZXItd3JhcHBlcicpKSByZXR1cm4gXCJzd2lwZXItd3JhcHBlciBcIi5jb25jYXQoY2xhc3NOYW1lKTtcbiAgcmV0dXJuIGNsYXNzTmFtZTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZVN3aXBlcihfcmVmKSB7XG4gIHZhciBzd2lwZXIgPSBfcmVmLnN3aXBlcixcbiAgICBzbGlkZXMgPSBfcmVmLnNsaWRlcyxcbiAgICBwYXNzZWRQYXJhbXMgPSBfcmVmLnBhc3NlZFBhcmFtcyxcbiAgICBjaGFuZ2VkUGFyYW1zID0gX3JlZi5jaGFuZ2VkUGFyYW1zLFxuICAgIG5leHRFbCA9IF9yZWYubmV4dEVsLFxuICAgIHByZXZFbCA9IF9yZWYucHJldkVsLFxuICAgIHNjcm9sbGJhckVsID0gX3JlZi5zY3JvbGxiYXJFbCxcbiAgICBwYWdpbmF0aW9uRWwgPSBfcmVmLnBhZ2luYXRpb25FbDtcbiAgdmFyIHVwZGF0ZVBhcmFtcyA9IGNoYW5nZWRQYXJhbXMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4ga2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2RpcmVjdGlvbicgJiYga2V5ICE9PSAnd3JhcHBlckNsYXNzJztcbiAgfSk7XG4gIHZhciBjdXJyZW50UGFyYW1zID0gc3dpcGVyLnBhcmFtcyxcbiAgICBwYWdpbmF0aW9uID0gc3dpcGVyLnBhZ2luYXRpb24sXG4gICAgbmF2aWdhdGlvbiA9IHN3aXBlci5uYXZpZ2F0aW9uLFxuICAgIHNjcm9sbGJhciA9IHN3aXBlci5zY3JvbGxiYXIsXG4gICAgdmlydHVhbCA9IHN3aXBlci52aXJ0dWFsLFxuICAgIHRodW1icyA9IHN3aXBlci50aHVtYnM7XG4gIHZhciBuZWVkVGh1bWJzSW5pdDtcbiAgdmFyIG5lZWRDb250cm9sbGVySW5pdDtcbiAgdmFyIG5lZWRQYWdpbmF0aW9uSW5pdDtcbiAgdmFyIG5lZWRTY3JvbGxiYXJJbml0O1xuICB2YXIgbmVlZE5hdmlnYXRpb25Jbml0O1xuICB2YXIgbG9vcE5lZWREZXN0cm95O1xuICB2YXIgbG9vcE5lZWRFbmFibGU7XG4gIHZhciBsb29wTmVlZFJlbG9vcDtcbiAgaWYgKGNoYW5nZWRQYXJhbXMuaW5jbHVkZXMoJ3RodW1icycpICYmIHBhc3NlZFBhcmFtcy50aHVtYnMgJiYgcGFzc2VkUGFyYW1zLnRodW1icy5zd2lwZXIgJiYgIXBhc3NlZFBhcmFtcy50aHVtYnMuc3dpcGVyLmRlc3Ryb3llZCAmJiBjdXJyZW50UGFyYW1zLnRodW1icyAmJiAoIWN1cnJlbnRQYXJhbXMudGh1bWJzLnN3aXBlciB8fCBjdXJyZW50UGFyYW1zLnRodW1icy5zd2lwZXIuZGVzdHJveWVkKSkge1xuICAgIG5lZWRUaHVtYnNJbml0ID0gdHJ1ZTtcbiAgfVxuICBpZiAoY2hhbmdlZFBhcmFtcy5pbmNsdWRlcygnY29udHJvbGxlcicpICYmIHBhc3NlZFBhcmFtcy5jb250cm9sbGVyICYmIHBhc3NlZFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2wgJiYgY3VycmVudFBhcmFtcy5jb250cm9sbGVyICYmICFjdXJyZW50UGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbCkge1xuICAgIG5lZWRDb250cm9sbGVySW5pdCA9IHRydWU7XG4gIH1cbiAgaWYgKGNoYW5nZWRQYXJhbXMuaW5jbHVkZXMoJ3BhZ2luYX
1Rpb24nKSAmJiBwYXNzZWRQYXJhbXMucGFnaW5hdGlvbiAmJiAocGFzc2VkUGFyYW1zLnBhZ2luYXRpb24uZWwgfHwgcGFnaW5hdGlvbkVsKSAmJiAoY3VycmVudFBhcmFtcy5wYWdpbmF0aW9uIHx8IGN1cnJlbnRQYXJhbXMucGFnaW5hdGlvbiA9PT0gZmFsc2UpICYmIHBhZ2luYXRpb24gJiYgIXBhZ2luYXRpb24uZWwpIHtcbiAgICBuZWVkUGFnaW5hdGlvbkluaXQgPSB0cnVlO1xuICB9XG4gIGlmIChjaGFuZ2VkUGFyYW1zLmluY2x1ZGVzKCdzY3JvbGxiYXInKSAmJiBwYXNzZWRQYXJhbXMuc2Nyb2xsYmFyICYmIChwYXNzZWRQYXJhbXMuc2Nyb2xsYmFyLmVsIHx8IHNjcm9sbGJhckVsKSAmJiAoY3VycmVudFBhcmFtcy5zY3JvbGxiYXIgfHwgY3VycmVudFBhcmFtcy5zY3JvbGxiYXIgPT09IGZhbHNlKSAmJiBzY3JvbGxiYXIgJiYgIXNjcm9sbGJhci5lbCkge1xuICAgIG5lZWRTY3JvbGxiYXJJbml0ID0gdHJ1ZTtcbiAgfVxuICBpZiAoY2hhbmdlZFBhcmFtcy5pbmNsdWRlcygnbmF2aWdhdGlvbicpICYmIHBhc3NlZFBhcmFtcy5uYXZpZ2F0aW9uICYmIChwYXNzZWRQYXJhbXMubmF2aWdhdGlvbi5wcmV2RWwgfHwgcHJldkVsKSAmJiAocGFzc2VkUGFyYW1zLm5hdmlnYXRpb24ubmV4dEVsIHx8IG5leHRFbCkgJiYgKGN1cnJlbnRQYXJhbXMubmF2aWdhdGlvbiB8fCBjdXJyZW50UGFyYW1zLm5hdmlnYXRpb24gPT09IGZhbHNlKSAmJiBuYXZpZ2F0aW9uICYmICFuYXZpZ2F0aW9uLnByZXZFbCAmJiAhbmF2aWdhdGlvbi5uZXh0RWwpIHtcbiAgICBuZWVkTmF2aWdhdGlvbkluaXQgPSB0cnVlO1xuICB9XG4gIHZhciBkZXN0cm95TW9kdWxlID0gZnVuY3Rpb24gZGVzdHJveU1vZHVsZShtb2QpIHtcbiAgICBpZiAoIXN3aXBlclttb2RdKSByZXR1cm47XG4gICAgc3dpcGVyW21vZF0uZGVzdHJveSgpO1xuICAgIGlmIChtb2QgPT09ICduYXZpZ2F0aW9uJykge1xuICAgICAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICAgICAgc3dpcGVyW21vZF0ucHJldkVsLnJlbW92ZSgpO1xuICAgICAgICBzd2lwZXJbbW9kXS5uZXh0RWwucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UGFyYW1zW21vZF0ucHJldkVsID0gdW5kZWZpbmVkO1xuICAgICAgY3VycmVudFBhcmFtc1ttb2RdLm5leHRFbCA9IHVuZGVmaW5lZDtcbiAgICAgIHN3aXBlclttb2RdLnByZXZFbCA9IHVuZGVmaW5lZDtcbiAgICAgIHN3aXBlclttb2RdLm5leHRFbCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICAgICAgc3dpcGVyW21vZF0uZWwucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgICBjdXJyZW50UGFyYW1zW21vZF0uZWwgPSB1bmRlZmluZWQ7XG4gICAgICBzd2lwZXJbbW9kXS5lbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG4gIGlmIChjaGFuZ2VkUGFyYW1zLmluY2x1ZGVzKCdsb29wJykgJiYgc3dpcGVyLmlzRWxlbWVudCkge1xuICAgIGlmIChjdXJyZW50UGFyYW1zLmxvb3AgJiYgIXBhc3NlZFBhcmFtcy5sb29wKSB7XG4gICAgICBsb29wTmVlZERlc3Ryb3kgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIWN1cnJlbnRQYXJhbXMubG9vcCAmJiBwYXNzZWRQYXJhbXMubG9vcCkge1xuICAgICAgbG9vcE5lZWRFbmFibGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb29wTmVlZFJlbG9vcCA9IHRydWU7XG4gICAgfVxuICB9XG4gIHVwZGF0ZVBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3QoY3VycmVudFBhcmFtc1trZXldKSAmJiBpc09iamVjdChwYXNzZWRQYXJhbXNba2V5XSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFBhcmFtc1trZXldLCBwYXNzZWRQYXJhbXNba2V5XSk7XG4gICAgICBpZiAoKGtleSA9PT0gJ25hdmlnYXRpb24nIHx8IGtleSA9PT0gJ3BhZ2luYXRpb24nIHx8IGtleSA9PT0gJ3Njcm9sbGJhcicpICYmICdlbmFibGVkJyBpbiBwYXNzZWRQYXJhbXNba2V5XSAmJiAhcGFzc2VkUGFyYW1zW2tleV0uZW5hYmxlZCkge1xuICAgICAgICBkZXN0cm95TW9kdWxlKGtleSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZXdWYWx1ZSA9IHBhc3NlZFBhcmFtc1trZXldO1xuICAgICAgaWYgKChuZXdWYWx1ZSA9PT0gdHJ1ZSB8fCBuZXdWYWx1ZSA9PT0gZmFsc2UpICYmIChrZXkgPT09ICduYXZpZ2F0aW9uJyB8fCBrZXkgPT09ICdwYWdpbmF0aW9uJyB8fCBrZXkgPT09ICdzY3JvbGxiYXInKSkge1xuICAgICAgICBpZiAobmV3VmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgZGVzdHJveU1vZHVsZShrZXkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50UGFyYW1zW2tleV0gPSBwYXNzZWRQYXJhbXNba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBpZiAodXBkYXRlUGFyYW1zLmluY2x1ZGVzKCdjb250cm9sbGVyJykgJiYgIW5lZWRDb250cm9sbGVySW5pdCAmJiBzd2lwZXIuY29udHJvbGxlciAmJiBzd2lwZXIuY29udHJvbGxlci5jb250cm9sICYmIGN1cnJlbnRQYXJhbXMuY29udHJvbGxlciAmJiBjdXJyZW50UGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbCkge1xuICAgIHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wgPSBjdXJyZW50UGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbDtcbiAgfVxuICBpZiAoY2hhbmdlZFBhcmFtcy5pbmNsdWRlcygnY2hpbGRyZW4nKSAmJiBzbGlkZXMgJiYgdmlydHVhbCAmJiBjdXJyZW50UGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgIHZpcnR1YWwuc2xpZGVzID0gc2xpZGVzO1xuICAgIHZpcnR1YWwudXBkYXRlKHRydWUpO1xuICB9IGVsc2UgaWYgKGNoYW5nZWRQYXJhbXMuaW5jbHVkZXMoJ3ZpcnR1YWwnKSAmJiB2aXJ0dWFsICYmIGN1cnJlbnRQYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgaWYgKHNsaWRlcykgdmlydHVhbC5zbGlkZXMgPSBzbGlkZXM7XG4gICAgdmlydHVhbC51cGRhdGUodHJ1ZSk7XG4gIH1cbiAgaWYgKGNoYW5nZWRQYXJhbXMuaW5jbHVkZXMoJ2NoaWxkcmVuJykgJiYgc2xpZGVzICYmIGN1cnJlbnRQYXJhbXMubG9vcCkge1xuICAgIGxvb3BOZWVkUmVsb29wID0gdHJ1ZTtcbiAgfVxuICBpZiAobmVlZF
1RodW1ic0luaXQpIHtcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSB0aHVtYnMuaW5pdCgpO1xuICAgIGlmIChpbml0aWFsaXplZCkgdGh1bWJzLnVwZGF0ZSh0cnVlKTtcbiAgfVxuICBpZiAobmVlZENvbnRyb2xsZXJJbml0KSB7XG4gICAgc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCA9IGN1cnJlbnRQYXJhbXMuY29udHJvbGxlci5jb250cm9sO1xuICB9XG4gIGlmIChuZWVkUGFnaW5hdGlvbkluaXQpIHtcbiAgICBpZiAoc3dpcGVyLmlzRWxlbWVudCAmJiAoIXBhZ2luYXRpb25FbCB8fCB0eXBlb2YgcGFnaW5hdGlvbkVsID09PSAnc3RyaW5nJykpIHtcbiAgICAgIHBhZ2luYXRpb25FbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcGFnaW5hdGlvbkVsLmNsYXNzTGlzdC5hZGQoJ3N3aXBlci1wYWdpbmF0aW9uJyk7XG4gICAgICBwYWdpbmF0aW9uRWwucGFydC5hZGQoJ3BhZ2luYXRpb24nKTtcbiAgICAgIHN3aXBlci5lbC5hcHBlbmRDaGlsZChwYWdpbmF0aW9uRWwpO1xuICAgIH1cbiAgICBpZiAocGFnaW5hdGlvbkVsKSBjdXJyZW50UGFyYW1zLnBhZ2luYXRpb24uZWwgPSBwYWdpbmF0aW9uRWw7XG4gICAgcGFnaW5hdGlvbi5pbml0KCk7XG4gICAgcGFnaW5hdGlvbi5yZW5kZXIoKTtcbiAgICBwYWdpbmF0aW9uLnVwZGF0ZSgpO1xuICB9XG4gIGlmIChuZWVkU2Nyb2xsYmFySW5pdCkge1xuICAgIGlmIChzd2lwZXIuaXNFbGVtZW50ICYmICghc2Nyb2xsYmFyRWwgfHwgdHlwZW9mIHNjcm9sbGJhckVsID09PSAnc3RyaW5nJykpIHtcbiAgICAgIHNjcm9sbGJhckVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzY3JvbGxiYXJFbC5jbGFzc0xpc3QuYWRkKCdzd2lwZXItc2Nyb2xsYmFyJyk7XG4gICAgICBzY3JvbGxiYXJFbC5wYXJ0LmFkZCgnc2Nyb2xsYmFyJyk7XG4gICAgICBzd2lwZXIuZWwuYXBwZW5kQ2hpbGQoc2Nyb2xsYmFyRWwpO1xuICAgIH1cbiAgICBpZiAoc2Nyb2xsYmFyRWwpIGN1cnJlbnRQYXJhbXMuc2Nyb2xsYmFyLmVsID0gc2Nyb2xsYmFyRWw7XG4gICAgc2Nyb2xsYmFyLmluaXQoKTtcbiAgICBzY3JvbGxiYXIudXBkYXRlU2l6ZSgpO1xuICAgIHNjcm9sbGJhci5zZXRUcmFuc2xhdGUoKTtcbiAgfVxuICBpZiAobmVlZE5hdmlnYXRpb25Jbml0KSB7XG4gICAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICAgIGlmICghbmV4dEVsIHx8IHR5cGVvZiBuZXh0RWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG5leHRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBuZXh0RWwuY2xhc3NMaXN0LmFkZCgnc3dpcGVyLWJ1dHRvbi1uZXh0Jyk7XG4gICAgICAgIHNldElubmVySFRNTChuZXh0RWwsIHN3aXBlci5uYXZpZ2F0aW9uLmFycm93U3ZnKTtcbiAgICAgICAgbmV4dEVsLnBhcnQuYWRkKCdidXR0b24tbmV4dCcpO1xuICAgICAgICBzd2lwZXIuZWwuYXBwZW5kQ2hpbGQobmV4dEVsKTtcbiAgICAgIH1cbiAgICAgIGlmICghcHJldkVsIHx8IHR5cGVvZiBwcmV2RWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHByZXZFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwcmV2RWwuY2xhc3NMaXN0LmFkZCgnc3dpcGVyLWJ1dHRvbi1wcmV2Jyk7XG4gICAgICAgIHNldElubmVySFRNTChwcmV2RWwsIHN3aXBlci5uYXZpZ2F0aW9uLmFycm93U3ZnKTtcbiAgICAgICAgcHJldkVsLnBhcnQuYWRkKCdidXR0b24tcHJldicpO1xuICAgICAgICBzd2lwZXIuZWwuYXBwZW5kQ2hpbGQocHJldkVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5leHRFbCkgY3VycmVudFBhcmFtcy5uYXZpZ2F0aW9uLm5leHRFbCA9IG5leHRFbDtcbiAgICBpZiAocHJldkVsKSBjdXJyZW50UGFyYW1zLm5hdmlnYXRpb24ucHJldkVsID0gcHJldkVsO1xuICAgIG5hdmlnYXRpb24uaW5pdCgpO1xuICAgIG5hdmlnYXRpb24udXBkYXRlKCk7XG4gIH1cbiAgaWYgKGNoYW5nZWRQYXJhbXMuaW5jbHVkZXMoJ2FsbG93U2xpZGVOZXh0JykpIHtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSBwYXNzZWRQYXJhbXMuYWxsb3dTbGlkZU5leHQ7XG4gIH1cbiAgaWYgKGNoYW5nZWRQYXJhbXMuaW5jbHVkZXMoJ2FsbG93U2xpZGVQcmV2JykpIHtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBwYXNzZWRQYXJhbXMuYWxsb3dTbGlkZVByZXY7XG4gIH1cbiAgaWYgKGNoYW5nZWRQYXJhbXMuaW5jbHVkZXMoJ2RpcmVjdGlvbicpKSB7XG4gICAgc3dpcGVyLmNoYW5nZURpcmVjdGlvbihwYXNzZWRQYXJhbXMuZGlyZWN0aW9uLCBmYWxzZSk7XG4gIH1cbiAgaWYgKGxvb3BOZWVkRGVzdHJveSB8fCBsb29wTmVlZFJlbG9vcCkge1xuICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICB9XG4gIGlmIChsb29wTmVlZEVuYWJsZSB8fCBsb29wTmVlZFJlbG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cbiAgc3dpcGVyLnVwZGF0ZSgpO1xufVxuZXhwb3J0IHsgbmVlZHNQYWdpbmF0aW9uIGFzIGEsIG5lZWRzU2Nyb2xsYmFyIGFzIGIsIGF0dHJUb1Byb3AgYXMgYywgdW5pcXVlQ2xhc3NlcyBhcyBkLCBleHRlbmQgYXMgZSwgaXNPYmplY3QgYXMgaSwgbmVlZHNOYXZpZ2F0aW9uIGFzIG4sIHBhcmFtc0xpc3QgYXMgcCwgdXBkYXRlU3dpcGVyIGFzIHUsIHdyYXBwZXJDbGFzcyBhcyB3IH07IiwiaW1wb3J0IHsgZSBhcyBleHRlbmQsIHAgYXMgcGFyYW1zTGlzdCwgaSBhcyBpc09iamVjdCwgbiBhcyBuZWVkc05hdmlnYXRpb24sIGEgYXMgbmVlZHNQYWdpbmF0aW9uLCBiIGFzIG5lZWRzU2Nyb2xsYmFyIH0gZnJvbSAnLi91cGRhdGUtc3dpcGVyLm1qcyc7XG5pbXBvcnQgeyBkIGFzIGRlZmF1bHRzIH0gZnJvbSAnLi9zd2lwZXItY29yZS5tanMnO1xuZnVuY3Rpb24gZ2V0UGFyYW1zKCkge1xuICB2YXIgb2JqID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgdmFyIHNwbGl0RXZlbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICB2YXIgcGFyYW1zID0ge1xuICAgIG9uOiB7fVxuICB9O1xuICB2YXIgZXZlbnRzID0ge307XG4gIHZhciBwYXNzZWRQYXJhbXMgPSB7fTtcbiAgZXh0ZW5kKHBhcmFtcywgZGVmYXVsdHMpO1xuICBwYXJhbXMuX2VtaXRDbGFzc2VzID0gdHJ1ZTtcbiAgcGFyYW1zLmluaXQgPSBmYWxzZTtcbiAgdmFyIHJlc3QgPSB7fTtcbiAgdmFyIGFsbG93ZWRQYXJhbXMgPSBwYXJhbXNMaXN0Lm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKC9fLywgJycpO1xuICB9KTtcbiAgdmFyIHBsYWluT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgT2JqZWN0LmtleXMocGxhaW5PYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgaWYgKGFsbG93ZWRQYXJhbXMuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgIGlmIChpc09iamVjdChvYmpba2V5XSkpIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSB7fTtcbiAgICAgICAgcGFzc2VkUGFyYW1zW2tleV0gPSB7fTtcbiAgICAgICAgZXh0ZW5kKHBhcmFtc1trZXldLCBvYmpba2V5XSk7XG4gICAgICAgIGV4dGVuZChwYXNzZWRQYXJhbXNba2V5XSwgb2JqW2tleV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zW2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgcGFzc2VkUGFyYW1zW2tleV0gPSBvYmpba2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleS5zZWFyY2goL29uW0EtWl0vKSA9PT0gMCAmJiB0eXBlb2Ygb2JqW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChzcGxpdEV2ZW50cykge1xuICAgICAgICBldmVudHNbXCJcIi5jb25jYXQoa2V5WzJdLnRvTG93ZXJDYXNlKCkpLmNvbmNhdChrZXkuc3Vic3RyKDMpKV0gPSBvYmpba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgI
1HBhcmFtcy5vbltcIlwiLmNvbmNhdChrZXlbMl0udG9Mb3dlckNhc2UoKSkuY29uY2F0KGtleS5zdWJzdHIoMykpXSA9IG9ialtrZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN0W2tleV0gPSBvYmpba2V5XTtcbiAgICB9XG4gIH0pO1xuICBbJ25hdmlnYXRpb24nLCAncGFnaW5hdGlvbicsICdzY3JvbGxiYXInXS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAocGFyYW1zW2tleV0gPT09IHRydWUpIHBhcmFtc1trZXldID0ge307XG4gICAgaWYgKHBhcmFtc1trZXldID09PSBmYWxzZSkgZGVsZXRlIHBhcmFtc1trZXldO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICBwYXNzZWRQYXJhbXM6IHBhc3NlZFBhcmFtcyxcbiAgICByZXN0OiByZXN0LFxuICAgIGV2ZW50czogZXZlbnRzXG4gIH07XG59XG5mdW5jdGlvbiBtb3VudFN3aXBlcihfcmVmLCBzd2lwZXJQYXJhbXMpIHtcbiAgdmFyIGVsID0gX3JlZi5lbCxcbiAgICBuZXh0RWwgPSBfcmVmLm5leHRFbCxcbiAgICBwcmV2RWwgPSBfcmVmLnByZXZFbCxcbiAgICBwYWdpbmF0aW9uRWwgPSBfcmVmLnBhZ2luYXRpb25FbCxcbiAgICBzY3JvbGxiYXJFbCA9IF9yZWYuc2Nyb2xsYmFyRWwsXG4gICAgc3dpcGVyID0gX3JlZi5zd2lwZXI7XG4gIGlmIChuZWVkc05hdmlnYXRpb24oc3dpcGVyUGFyYW1zKSAmJiBuZXh0RWwgJiYgcHJldkVsKSB7XG4gICAgc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLm5leHRFbCA9IG5leHRFbDtcbiAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMubmF2aWdhdGlvbi5uZXh0RWwgPSBuZXh0RWw7XG4gICAgc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLnByZXZFbCA9IHByZXZFbDtcbiAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMubmF2aWdhdGlvbi5wcmV2RWwgPSBwcmV2RWw7XG4gIH1cbiAgaWYgKG5lZWRzUGFnaW5hdGlvbihzd2lwZXJQYXJhbXMpICYmIHBhZ2luYXRpb25FbCkge1xuICAgIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbCA9IHBhZ2luYXRpb25FbDtcbiAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMucGFnaW5hdGlvbi5lbCA9IHBhZ2luYXRpb25FbDtcbiAgfVxuICBpZiAobmVlZHNTY3JvbGxiYXIoc3dpcGVyUGFyYW1zKSAmJiBzY3JvbGxiYXJFbCkge1xuICAgIHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsID0gc2Nyb2xsYmFyRWw7XG4gICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLnNjcm9sbGJhci5lbCA9IHNjcm9sbGJhckVsO1xuICB9XG4gIHN3aXBlci5pbml0KGVsKTtcbn1cbmZ1bmN0aW9uIGdldENoYW5nZWRQYXJhbXMoc3dpcGVyUGFyYW1zLCBvbGRQYXJhbXMsIGNoaWxkcmVuLCBvbGRDaGlsZHJlbiwgZ2V0S2V5KSB7XG4gIHZhciBrZXlzID0gW107XG4gIGlmICghb2xkUGFyYW1zKSByZXR1cm4ga2V5cztcbiAgdmFyIGFkZEtleSA9IGZ1bmN0aW9uIGFkZEtleShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgPCAwKSBrZXlzLnB1c2goa2V5KTtcbiAgfTtcbiAgaWYgKGNoaWxkcmVuICYmIG9sZENoaWxkcmVuKSB7XG4gICAgdmFyIG9sZENoaWxkcmVuS2V5cyA9IG9sZENoaWxkcmVuLm1hcChnZXRLZXkpO1xuICAgIHZhciBjaGlsZHJlbktleXMgPSBjaGlsZHJlbi5tYXAoZ2V0S2V5KTtcbiAgICBpZiAob2xkQ2hpbGRyZW5LZXlzLmpvaW4oJycpICE9PSBjaGlsZHJlbktleXMuam9pbignJykpIGFkZEtleSgnY2hpbGRyZW4nKTtcbiAgICBpZiAob2xkQ2hpbGRyZW4ubGVuZ3RoICE9PSBjaGlsZHJlbi5sZW5ndGgpIGFkZEtleSgnY2hpbGRyZW4nKTtcbiAgfVxuICB2YXIgd2F0Y2hQYXJhbXMgPSBwYXJhbXNMaXN0LmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleVswXSA9PT0gJ18nO1xuICB9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXkucmVwbGFjZSgvXy8sICcnKTtcbiAgfSk7XG4gIHdhdGNoUGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmIChrZXkgaW4gc3dpcGVyUGFyYW1zICYmIGtleSBpbiBvbGRQYXJhbXMpIHtcbiAgICAgIGlmIChpc09iamVjdChzd2lwZXJQYXJhbXNba2V5XSkgJiYgaXNPYmplY3Qob2xkUGFyYW1zW2tleV0pKSB7XG4gICAgICAgIHZhciBuZXdLZXlzID0gT2JqZWN0LmtleXMoc3dpcGVyUGFyYW1zW2tleV0pO1xuICAgICAgICB2Y
1XIgb2xkS2V5cyA9IE9iamVjdC5rZXlzKG9sZFBhcmFtc1trZXldKTtcbiAgICAgICAgaWYgKG5ld0tleXMubGVuZ3RoICE9PSBvbGRLZXlzLmxlbmd0aCkge1xuICAgICAgICAgIGFkZEtleShrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld0tleXMuZm9yRWFjaChmdW5jdGlvbiAobmV3S2V5KSB7XG4gICAgICAgICAgICBpZiAoc3dpcGVyUGFyYW1zW2tleV1bbmV3S2V5XSAhPT0gb2xkUGFyYW1zW2tleV1bbmV3S2V5XSkge1xuICAgICAgICAgICAgICBhZGRLZXkoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvbGRLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9sZEtleSkge1xuICAgICAgICAgICAgaWYgKHN3aXBlclBhcmFtc1trZXldW29sZEtleV0gIT09IG9sZFBhcmFtc1trZXldW29sZEtleV0pIGFkZEtleShrZXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlclBhcmFtc1trZXldICE9PSBvbGRQYXJhbXNba2V5XSkge1xuICAgICAgICBhZGRLZXkoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ga2V5cztcbn1cbnZhciB1cGRhdGVPblZpcnR1YWxEYXRhID0gZnVuY3Rpb24gdXBkYXRlT25WaXJ0dWFsRGF0YShzd2lwZXIpIHtcbiAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLnBhcmFtcy52aXJ0dWFsIHx8IHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiAhc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHJldHVybjtcbiAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgc3dpcGVyLmVtaXQoJ192aXJ0dWFsVXBkYXRlZCcpO1xuICBpZiAoc3dpcGVyLnBhcmFsbGF4ICYmIHN3aXBlci5wYXJhbXMucGFyYWxsYXggJiYgc3dpcGVyLnBhcmFtcy5wYXJhbGxheC5lbmFibGVkKSB7XG4gICAgc3dpcGVyLnBhcmFsbGF4LnNldFRyYW5zbGF0ZSgpO1xuICB9XG59O1xuZXhwb3J0IHsgZ2V0Q2hhbmdlZFBhcmFtcyBhcyBhLCBnZXRQYXJhbXMgYXMgZywgbW91bnRTd2lwZXIgYXMgbSwgdXBkYXRlT25WaXJ0dWFsRGF0YSBhcyB1IH07IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCIvb3B0L2J1aWxkL3JlcG8vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIi9vcHQvYnVpbGQvcmVwby9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIi9vcHQvYnVpbGQvcmVwby9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJ0YWdcIiwgXCJ3cmFwcGVyVGFnXCIsIFwiY2hpbGRyZW5cIiwgXCJvblN3aXBlclwiXSxcbiAgX2V4Y2x1ZGVkMiA9IFtcInRhZ1wiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic3dpcGVyXCIsIFwiem9vbVwiLCBcImxhenlcIiwgXCJ2aXJ0dWFsSW5kZXhcIiwgXCJzd2lwZXJTbGlkZUluZGV4XCJdO1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7IHZhciB0ID0gT2JqZWN0LmtleXMoZSk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBvID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlKTsgciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uIChyKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIpLmVudW1lcmFibGU7IH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pOyB9IHJldHVybiB0OyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKGUpIHsgZm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHsgdmFyIHQgPSBudWxsICE9IGFyZ3VtZW50c1tyXSA/IGFyZ3VtZW50c1tyXSA6IHt9OyByICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBfZGVmaW5lUHJvcGVydHkoZSwgciwgdFtyXSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbiAocikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByKSk7IH0pOyB9IHJldHVybiBlOyB9XG4vKipcbiAqIFN3aXBlciBSZWFjdCAxMi4xLjFcbiAqIE1vc3QgbW9kZXJuIG1vYmlsZSB0b3VjaCBzbGlkZXIgYW5kIGZyYW1ld29yayB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25zXG4gKiBodHRwczovL3N3aXBlcmpzLmNvbVxuICpcbiAqIENvcHlyaWdodCAyMDE0LTIwMjYgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqXG4gKiBSZWxlYXNlZCBvbjogRmVicnVhcnkgMTMsIDIwMjZcbiAqL1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZUNvbnRleHQsIGNyZWF0ZUNvbnRleHQsIGZvcndhcmRSZWYsIHVzZVN0YXRlLCB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTIGFzIFN3aXBlciQxIH0gZnJvbSAnLi9zaGFyZWQvc3dpcGVyLWNvcmUubWpzJztcbmltcG9ydCB7IGcgYXMgZ2V0UGFyYW1zLCBtIGFzIG1vdW50U3dpcGVyLCBhIGFzIGdldENoYW5nZWRQYXJhbXMsIHUgYXMgdXBkYXRlT25WaXJ0dWFsRGF0YSB9IGZyb20gJy4vc2hhcmVkL3VwZGF0ZS1vbi12aXJ0dWFsLWRhdGEubWpzJztcbmltcG9ydCB7IGQgYXMgdW5pcXVlQ2xhc3NlcywgdyBhcyB3cmFwcGVyQ2xhc3MsIG4gYXMgbmVlZHNOYXZpZ2F0aW9uLCBiIGFzIG5lZWRzU2Nyb2xsYmFyLCBhIGFzIG5lZWRzUGFnaW5hdGlvbiwgZSBhcyBleHRlbmQsIHUgYXMgdXBkYXRlU3dpcGVyIH0gZnJvbSAnLi9zaGFyZWQvdXBkYXRlLXN3aXBlci5tanMnO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2Y
1XIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5mdW5jdGlvbiBpc0NoaWxkU3dpcGVyU2xpZGUoY2hpbGQpIHtcbiAgcmV0dXJuIGNoaWxkLnR5cGUgJiYgY2hpbGQudHlwZS5kaXNwbGF5TmFtZSAmJiBjaGlsZC50eXBlLmRpc3BsYXlOYW1lLmluY2x1ZGVzKCdTd2lwZXJTbGlkZScpO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0NoaWxkcmVuKGMpIHtcbiAgdmFyIHNsaWRlcyA9IFtdO1xuICBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGMpLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGlzQ2hpbGRTd2lwZXJTbGlkZShjaGlsZCkpIHtcbiAgICAgIHNsaWRlcy5wdXNoKGNoaWxkKTtcbiAgICB9IGVsc2UgaWYgKGNoaWxkLnByb3BzICYmIGNoaWxkLnByb3BzLmNoaWxkcmVuKSB7XG4gICAgICBwcm9jZXNzQ2hpbGRyZW4oY2hpbGQucHJvcHMuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlKSB7XG4gICAgICAgIHJldHVybiBzbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2xpZGVzO1xufVxuZnVuY3Rpb24gZ2V0Q2hpbGRyZW4oYykge1xuICB2YXIgc2xpZGVzID0gW107XG4gIHZhciBzbG90cyA9IHtcbiAgICAnY29udGFpbmVyLXN0YXJ0JzogW10sXG4gICAgJ2NvbnRhaW5lci1lbmQnOiBbXSxcbiAgICAnd3JhcHBlci1zdGFydCc6IFtdLFxuICAgICd3cmFwcGVyLWVuZCc6IFtdXG4gIH07XG4gIFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoYykuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoaXNDaGlsZFN3aXBlclNsaWRlKGNoaWxkKSkge1xuICAgICAgc2xpZGVzLnB1c2goY2hpbGQpO1xuICAgIH0gZWxzZSBpZiAoY2hpbGQucHJvcHMgJiYgY2hpbGQucHJvcHMuc2xvdCAmJiBzbG90c1tjaGlsZC5wcm9wcy5zbG90XSkge1xuICAgICAgc2xvdHNbY2hpbGQucHJvcHMuc2xvdF0ucHVzaChjaGlsZCk7XG4gICAgfSBlbHNlIGlmIChjaGlsZC5wcm9wcyAmJiBjaGlsZC5wcm9wcy5jaGlsZHJlbikge1xuICAgICAgdmFyIGZvdW5kU2xpZGVzID0gcHJvY2Vzc0NoaWxkcmVuKGNoaWxkLnByb3BzLmNoaWxkcmVuKTtcbiAgICAgIGlmIChmb3VuZFNsaWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvdW5kU2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIHNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbG90c1snY29udGFpbmVyLWVuZCddLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzbG90c1snY29udGFpbmVyLWVuZCddLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc2xpZGVzOiBzbGlkZXMsXG4gICAgc2xvdHM6IHNsb3RzXG4gIH07XG59XG5mdW5jdGlvbiByZW5kZXJWaXJ0dWFsKHN3aXBlciwgc2xpZGVzLCB2aXJ0dWFsRGF0YSkge1xuICBpZiAoIXZpcnR1YWxEYXRhKSByZXR1cm4gbnVsbDtcbiAgdmFyIGdldFNsaWRlSW5kZXggPSBmdW5jdGlvbiBnZXRTbGlkZUluZGV4KGluZGV4KSB7XG4gICAgdmFyIHNsaWRlSW5kZXggPSBpbmRleDtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICBzbGlkZUluZGV4ID0gc2xpZGVzLmxlbmd0aCArIGluZGV4O1xuICAgIH0gZWxzZSBpZiAoc2xpZGVJbmRleCA+PSBzbGlkZXMubGVuZ3RoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIHNsaWRlSW5kZXggPSBzbGlkZUluZGV4IC0gc2xpZGVzLmxlbmd0aDtcbiAgICB9XG4gICAgcmV0dXJuIHNsaWRlSW5kZXg7XG4gIH07XG4gIHZhciBzdHlsZSA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IF9kZWZpbmVQcm9wZXJ0eSh7fSwgc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/ICdyaWdodCcgOiAnbGVmdCcsIFwiXCIuY29uY2F0KHZpcnR1YWxEYXRhLm9mZnNldCwgXCJweFwiKSkgOiB7XG4gICAgdG9wOiBcIlwiLmNvbmNhdCh2aXJ0dWFsRGF0YS5vZmZzZXQsIFwicHhcIilcbiAgfTtcbiAgdmFyIGZyb20gPSB2aXJ0dWFsRGF0YS5mcm9tLFxuICAgIHRvID0gdmlydHVhbERhdGEudG87XG4gIHZhciBsb29wRnJvbSA9IHN3aXBlci5wYXJhbXMubG9vcCA/IC1zbGlkZXMubGVuZ3RoIDogMDtcbiAgdmFyIGxvb3BUbyA9IHN3aXBlci5wYXJhbXMubG9vcCA/IHNsaWRlcy5sZW5ndGggKiAyIDogc2xpZGVzLmxlbmd0aDtcbiAgdmFyIHNsaWRlc1RvUmVuZGVyID0gW107XG4gIGZvciAodmFyIGkgPSBsb29wRnJvbTsgaSA8IGxvb3BUbzsgaSArPSAxKSB7XG4gICAgaWYgKGkgPj0gZnJvbSAmJiBpIDw9IHRvKSB7XG4gICAgICBzbGlkZXNUb1JlbmRlci5wdXNoKHNsaWRlc1tnZXRTbGlkZUluZGV4KGkpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzbGlkZXNUb1JlbmRlci5tYXAoZnVuY3Rpb24gKGNoaWxkLCBpbmRleCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBzd2lwZXI6IHN3aXBlcixcbiAgICAgIHN0eWxlOiBzdHlsZSxcbiAgICAgIGtleTogY2hpbGQucHJvcHMudmlydHVhbEluZGV4IHx8IGNoaWxkLmtleSB8fCBcInNsaWRlLVwiLmNvbmNhdChpbmRleClcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGNhbGxiYWNrLCBkZXBzKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB1c2VFZmZlY3QoY2FsbGJhY2ssIGRlcHMpO1xuICByZXR1cm4gdXNlTGF5b3V0RWZmZWN0KGNhbGxiYWNrLCBkZXBzKTtcbn1cbnZhciBTd2lwZXJTbGlkZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovY3JlYXRlQ29udGV4dChudWxsKTtcbnZhciB1c2VTd2lwZXJTbGlkZSA9IGZ1bmN0aW9uIHVzZVN3aXBlclNsaWRlKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChTd2lwZXJTbGlkZUNvbnRleHQpO1xufTtcbnZhciBTd2lwZXJDb250ZXh0ID0gLyojX19QVVJFX18qL2NyZWF0ZUNvbnRleHQobnVsbCk7XG52YXIgdXNlU3dpcGVyID0gZnVuY3Rpb24gdXNlU3dpcGVyKCkge1xuICByZXR1cm4gdXNlQ29udGV4dChTd2lwZXJDb250ZXh0KTtcbn07XG52YXIgU3dpcGVyID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09I
1HVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgIGNsYXNzTmFtZSA9IF9yZWYyLmNsYXNzTmFtZSxcbiAgICBfcmVmMiR0YWcgPSBfcmVmMi50YWcsXG4gICAgVGFnID0gX3JlZjIkdGFnID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYyJHRhZyxcbiAgICBfcmVmMiR3cmFwcGVyVGFnID0gX3JlZjIud3JhcHBlclRhZyxcbiAgICBXcmFwcGVyVGFnID0gX3JlZjIkd3JhcHBlclRhZyA9PT0gdm9pZCAwID8gJ2RpdicgOiBfcmVmMiR3cmFwcGVyVGFnLFxuICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgb25Td2lwZXIgPSBfcmVmMi5vblN3aXBlcixcbiAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBfZXhjbHVkZWQpO1xuICB2YXIgZXh0ZXJuYWxFbFJlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgZXZlbnRzQXNzaWduZWQgPSBmYWxzZTtcbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKCdzd2lwZXInKSxcbiAgICBfdXNlU3RhdGUyID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlLCAyKSxcbiAgICBjb250YWluZXJDbGFzc2VzID0gX3VzZVN0YXRlMlswXSxcbiAgICBzZXRDb250YWluZXJDbGFzc2VzID0gX3VzZVN0YXRlMlsxXTtcbiAgdmFyIF91c2VTdGF0ZTMgPSB1c2VTdGF0ZShudWxsKSxcbiAgICBfdXNlU3RhdGU0ID0gX3NsaWNlZFRvQXJyYXkoX3VzZVN0YXRlMywgMiksXG4gICAgdmlydHVhbERhdGEgPSBfdXNlU3RhdGU0WzBdLFxuICAgIHNldFZpcnR1YWxEYXRhID0gX3VzZVN0YXRlNFsxXTtcbiAgdmFyIF91c2VTdGF0ZTUgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlNiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTUsIDIpLFxuICAgIGJyZWFrcG9pbnRDaGFuZ2VkID0gX3VzZVN0YXRlNlswXSxcbiAgICBzZXRCcmVha3BvaW50Q2hhbmdlZCA9IF91c2VTdGF0ZTZbMV07XG4gIHZhciBpbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIHZhciBzd2lwZXJFbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHN3aXBlclJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG9sZFBhc3NlZFBhcmFtc1JlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG9sZFNsaWRlcyA9IHVzZVJlZihudWxsKTtcbiAgdmFyIG5leHRFbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHByZXZFbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHBhZ2luYXRpb25FbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIHNjcm9sbGJhckVsUmVmID0gdXNlUmVmKG51bGwpO1xuICB2YXIgX2dldFBhcmFtcyA9IGdldFBhcmFtcyhyZXN0KSxcbiAgICBzd2lwZXJQYXJhbXMgPSBfZ2V0UGFyYW1zLnBhcmFtcyxcbiAgICBwYXNzZWRQYXJhbXMgPSBfZ2V0UGFyYW1zLnBhc3NlZFBhcmFtcyxcbiAgICByZXN0UHJvcHMgPSBfZ2V0UGFyYW1zLnJlc3QsXG4gICAgZXZlbnRzID0gX2dldFBhcmFtcy5ldmVudHM7XG4gIHZhciBfZ2V0Q2hpbGRyZW4gPSBnZXRDaGlsZHJlbihjaGlsZHJlbiksXG4gICAgc2xpZGVzID0gX2dldENoaWxkcmVuLnNsaWRlcyxcbiAgICBzbG90cyA9IF9nZXRDaGlsZHJlbi5zbG90cztcbiAgdmFyIG9uQmVmb3JlQnJlYWtwb2ludCA9IGZ1bmN0aW9uIG9uQmVmb3JlQnJlYWtwb2ludCgpIHtcbiAgICBzZXRCcmVha3BvaW50Q2hhbmdlZCghYnJlYWtwb2ludENoYW5nZWQpO1xuICB9O1xuICBPYmplY3QuYXNzaWduKHN3aXBlclBhcmFtcy5vbiwge1xuICAgIF9jb250YWluZXJDbGFzc2VzOiBmdW5jdGlvbiBfY29udGFpbmVyQ2xhc3Nlcyhzd2lwZXIsIGNsYXNzZXMpIHtcbiAgICAgIHNldENvbnRhaW5lckNsYXNzZXMoY2xhc3Nlcyk7XG4gICAgfVxuICB9KTtcbiAgdmFyIGluaXRTd2lwZXIgPSBmdW5jdGlvbiBpbml0U3dpcGVyKCkge1xuICAgIC8vIGluaXQgc3dpcGVyXG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXJQYXJhbXMub24sIGV2ZW50cyk7XG4gICAgZXZlbnRzQXNzaWduZWQgPSB0cnVlO1xuICAgIHZhciBwYXNzUGFyYW1zID0gX29iamVjdFNwcmVhZCh7fSwgc3dpcGVyUGFyYW1zKTtcbiAgICBkZWxldGUgcGFzc1BhcmFtcy53cmFwcGVyQ2xhc3M7XG4gICAgc3dpcGVyUmVmLmN1cnJlbnQgPSBuZXcgU3dpcGVyJDEocGFzc1BhcmFtcyk7XG4gICAgaWYgKHN3aXBlclJlZi5jdXJyZW50LnZpcnR1YWwgJiYgc3dpcGVyUmVmLmN1cnJlbnQucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgICAgc3dpcGVyUmVmLmN1cnJlbnQudmlydHVhbC5zbGlkZXMgPSBzbGlkZXM7XG4gICAgICB2Y
1XIgZXh0ZW5kV2l0aCA9IHtcbiAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICBzbGlkZXM6IHNsaWRlcyxcbiAgICAgICAgcmVuZGVyRXh0ZXJuYWw6IHNldFZpcnR1YWxEYXRhLFxuICAgICAgICByZW5kZXJFeHRlcm5hbFVwZGF0ZTogZmFsc2VcbiAgICAgIH07XG4gICAgICBleHRlbmQoc3dpcGVyUmVmLmN1cnJlbnQucGFyYW1zLnZpcnR1YWwsIGV4dGVuZFdpdGgpO1xuICAgICAgZXh0ZW5kKHN3aXBlclJlZi5jdXJyZW50Lm9yaWdpbmFsUGFyYW1zLnZpcnR1YWwsIGV4dGVuZFdpdGgpO1xuICAgIH1cbiAgfTtcbiAgaWYgKCFzd2lwZXJFbFJlZi5jdXJyZW50KSB7XG4gICAgaW5pdFN3aXBlcigpO1xuICB9XG5cbiAgLy8gTGlzdGVuIGZvciBicmVha3BvaW50cyBjaGFuZ2VcbiAgaWYgKHN3aXBlclJlZi5jdXJyZW50KSB7XG4gICAgc3dpcGVyUmVmLmN1cnJlbnQub24oJ19iZWZvcmVCcmVha3BvaW50Jywgb25CZWZvcmVCcmVha3BvaW50KTtcbiAgfVxuICB2YXIgYXR0YWNoRXZlbnRzID0gZnVuY3Rpb24gYXR0YWNoRXZlbnRzKCkge1xuICAgIGlmIChldmVudHNBc3NpZ25lZCB8fCAhZXZlbnRzIHx8ICFzd2lwZXJSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROYW1lKSB7XG4gICAgICBzd2lwZXJSZWYuY3VycmVudC5vbihldmVudE5hbWUsIGV2ZW50c1tldmVudE5hbWVdKTtcbiAgICB9KTtcbiAgfTtcbiAgdmFyIGRldGFjaEV2ZW50cyA9IGZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgICBpZiAoIWV2ZW50cyB8fCAhc3dpcGVyUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgc3dpcGVyUmVmLmN1cnJlbnQub2ZmKGV2ZW50TmFtZSwgZXZlbnRzW2V2ZW50TmFtZV0pO1xuICAgIH0pO1xuICB9O1xuICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc3dpcGVyUmVmLmN1cnJlbnQpIHN3aXBlclJlZi5jdXJyZW50Lm9mZignX2JlZm9yZUJyZWFrcG9pbnQnLCBvbkJlZm9yZUJyZWFrcG9pbnQpO1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIHNldCBpbml0aWFsaXplZCBmbGFnXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFpbml0aWFsaXplZFJlZi5jdXJyZW50ICYmIHN3aXBlclJlZi5jdXJyZW50KSB7XG4gICAgICBzd2lwZXJSZWYuY3VycmVudC5lbWl0U2xpZGVzQ2xhc3NlcygpO1xuICAgICAgaW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgfVxuICB9KTtcblxuICAvLyBtb3VudCBzd2lwZXJcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGV4dGVybmFsRWxSZWYpIHtcbiAgICAgIGV4dGVybmFsRWxSZWYuY3VycmVudCA9IHN3aXBlckVsUmVmLmN1cnJlbnQ7XG4gICAgfVxuICAgIGlmICghc3dpcGVyRWxSZWYuY3VycmVudCkgcmV0dXJuO1xuICAgIGlmIChzd2lwZXJSZWYuY3VycmVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGluaXRTd2lwZXIoKTtcbiAgICB9XG4gICAgbW91bnRTd2lwZXIoe1xuICAgICAgZWw6IHN3aXBlckVsUmVmLmN1cnJlbnQsXG4gICAgICBuZXh0RWw6IG5leHRFbFJlZi5jdXJyZW50LFxuICAgICAgcHJldkVsOiBwcmV2RWxSZWYuY3VycmVudCxcbiAgICAgIHBhZ2luYXRpb25FbDogcGFnaW5hdGlvbkVsUmVmLmN1cnJlbnQsXG4gICAgICBzY3JvbGxiYXJFbDogc2Nyb2xsYmFyRWxSZWYuY3VycmVudCxcbiAgICAgIHN3aXBlcjogc3dpcGVyUmVmLmN1cnJlbnRcbiAgICB9LCBzd2lwZXJQYXJhbXMpO1xuICAgIGlmIChvblN3aXBlciAmJiAhc3dpcGVyUmVmLmN1cnJlbnQuZGVzdHJveWVkKSBvblN3aXBlcihzd2lwZXJSZWYuY3VycmVudCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzd2lwZXJSZWYuY3VycmVudCAmJiAhc3dpcGVyUmVmLmN1cnJlbnQuZGVzdHJveWVkKSB7XG4gICAgICAgIHN3aXBlclJlZi5jdXJyZW50LmRlc3Ryb3kodHJ1ZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcblxuICAvLyB3YXRjaCBmb3IgcGFyYW1zIGNoYW5nZVxuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBhdHRhY2hFdmVudHMoKTtcbiAgICB2YXIgY2hhbmdlZFBhcmFtcyA9IGdldENoYW5nZWRQYXJhbXMocGFzc2VkUGFyYW1zLCBvbGRQYXNzZWRQYXJhbXNSZWYuY3VycmVudCwgc2xpZGVzLCBvbGRTbGlkZXMuY3VycmVudCwgZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjLmtleTtcbiAgICB9KTtcbiAgICBvbGRQYXNzZWRQYXJhbXNSZWYuY3VycmVudCA9IHBhc3NlZFBhcmFtcztcbiAgICBvbGRTbGlkZXMuY3VycmVudCA9IHNsaWRlcztcbiAgICBpZiAoY2hhbmdlZFBhcmFtcy5sZW5ndGggJiYgc3dpcGVyUmVmLmN1cnJlbnQgJiYgIXN3aXBlclJlZi5jdXJyZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXBkYXRlU3dpcGVyKHtcbiAgICAgICAgc3dpcGVyOiBzd2lwZXJSZWYuY3VycmVudCxcbiAgICAgICAgc2xpZGVzOiBzbGlkZXMsXG4gICAgICAgIHBhc3NlZFBhcmFtczogcGFzc2VkUGFyYW1zLFxuICAgICAgICBjaGFuZ2VkUGFyYW1zOiBjaGFuZ2VkUGFyYW1zLFxuICAgICAgICBuZXh0RWw6IG5leHRFbFJlZi5jdXJyZW50LFxuICAgICAgICBwcmV2RWw6IHByZXZFbFJlZi5jdXJyZW50LFxuICAgICAgICBzY3JvbGxiYXJFbDogc2Nyb2xsYmFyRWxSZWYuY3VycmVudCxcbiAgICAgICAgcGFnaW5hdGlvbkVsOiBwYWdpbmF0aW9uRWxSZWYuY3VycmVudFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZXRhY2hFdmVudHMoKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyB1cGRhdGUgb24gdmlydHVhbCB1cGRhdGVcbiAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdXBkYXRlT25WaXJ0dWFsRGF0YShzd2lwZXJSZWYuY3VycmVudCk7XG4gIH0sIFt2aXJ0dWFsRGF0YV0pO1xuXG4gIC8vIGJ5cGFzcyBzd2lwZXIgaW5zdGFuY2UgdG8gc2xpZGVzXG4gIGZ1bmN0aW9uIHJlbmRlclNsaWRlcygpIHtcbiAgICBpZiAoc3dpcGVyUGFyYW1zLnZpcnR1YWwpIHtcbiAgICAgIHJldHVybi
1ByZW5kZXJWaXJ0dWFsKHN3aXBlclJlZi5jdXJyZW50LCBzbGlkZXMsIHZpcnR1YWxEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHNsaWRlcy5tYXAoZnVuY3Rpb24gKGNoaWxkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgc3dpcGVyOiBzd2lwZXJSZWYuY3VycmVudCxcbiAgICAgICAgc3dpcGVyU2xpZGVJbmRleDogaW5kZXhcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWcsIF9leHRlbmRzKHtcbiAgICByZWY6IHN3aXBlckVsUmVmLFxuICAgIGNsYXNzTmFtZTogdW5pcXVlQ2xhc3NlcyhcIlwiLmNvbmNhdChjb250YWluZXJDbGFzc2VzKS5jb25jYXQoY2xhc3NOYW1lID8gXCIgXCIuY29uY2F0KGNsYXNzTmFtZSkgOiAnJykpXG4gIH0sIHJlc3RQcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN3aXBlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogc3dpcGVyUmVmLmN1cnJlbnRcbiAgfSwgc2xvdHNbJ2NvbnRhaW5lci1zdGFydCddLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVyVGFnLCB7XG4gICAgY2xhc3NOYW1lOiB3cmFwcGVyQ2xhc3Moc3dpcGVyUGFyYW1zLndyYXBwZXJDbGFzcylcbiAgfSwgc2xvdHNbJ3dyYXBwZXItc3RhcnQnXSwgcmVuZGVyU2xpZGVzKCksIHNsb3RzWyd3cmFwcGVyLWVuZCddKSwgbmVlZHNOYXZpZ2F0aW9uKHN3aXBlclBhcmFtcykgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IHByZXZFbFJlZixcbiAgICBjbGFzc05hbWU6IFwic3dpcGVyLWJ1dHRvbi1wcmV2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IG5leHRFbFJlZixcbiAgICBjbGFzc05hbWU6IFwic3dpcGVyLWJ1dHRvbi1uZXh0XCJcbiAgfSkpLCBuZWVkc1Njcm9sbGJhcihzd2lwZXJQYXJhbXMpICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IHNjcm9sbGJhckVsUmVmLFxuICAgIGNsYXNzTmFtZTogXCJzd2lwZXItc2Nyb2xsYmFyXCJcbiAgfSksIG5lZWRzUGFnaW5hdGlvbihzd2lwZXJQYXJhbXMpICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICByZWY6IHBhZ2luYXRpb25FbFJlZixcbiAgICBjbGFzc05hbWU6IFwic3dpcGVyLXBhZ2luYXRpb25cIlxuICB9KSwgc2xvdHNbJ2NvbnRhaW5lci1lbmQnXSkpO1xufSk7XG5Td2lwZXIuZGlzcGxheU5hbWUgPSAnU3dpcGVyJztcbnZhciBTd2lwZXJTbGlkZSA9IC8qI19fUFVSRV9fKi9mb3J3YXJkUmVmKGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICBfcmVmMyR0YWcgPSBfcmVmMy50YWcsXG4gICAgVGFnID0gX3JlZjMkdGFnID09PSB2b2lkIDAgPyAnZGl2JyA6IF9yZWYzJHRhZyxcbiAgICBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgIF9yZWYzJGNsYXNzTmFtZSA9IF9yZWYzLmNsYXNzTmFtZSxcbiAgICBjbGFzc05hbWUgPSBfcmVmMyRjbGFzc05hbWUgPT09IHZvaWQgMCA/ICcnIDogX3JlZjMkY2xhc3NOYW1lLFxuICAgIHN3aXBlciA9IF9yZWYzLnN3aXBlcixcbiAgICB6b29tID0gX3JlZjMuem9vbSxcbiAgICBsYXp5ID0gX3JlZjMubGF6eSxcbiAgICB2aXJ0dWFsSW5kZXggPSBfcmVmMy52aXJ0dWFsSW5kZXgsXG4gICAgc3dpcGVyU2xpZGVJbmRleCA9IF9yZWYzLnN3aXBlclNsaWRlSW5kZXgsXG4gICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMywgX2V4Y2x1ZGVkMik7XG4gIHZhciBleHRlcm5hbFJlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgc2xpZGVFbFJlZiA9IHVzZVJlZihudWxsKTtcbiAgdmFyIF91c2VTdGF0ZTcgPSB1c2VTdGF0ZSgnc3dpcGVyLXNsaWRlJyksXG4gICAgX3VzZVN0YXRlOCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTcsIDIpLFxuICAgIHNsaWRlQ2xhc3NlcyA9IF91c2VTdGF0ZThbMF0sXG4gICAgc2V0U2xpZGVDbGFzc2VzID0gX3VzZVN0YXRlOFsxXTtcbiAgdmFyIF91c2VTdGF0ZTkgPSB1c2VTdGF0ZShmYWxzZSksXG4gICAgX3VzZVN0YXRlMCA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZTksIDIpLFxuICAgIGxhenlMb2FkZWQgPSBfdXNlU3RhdGUwWzBdLFxuICAgIHNldExhenlMb2FkZWQgPSBfdXNlU3RhdGUwWzFdO1xuICBmdW5jdGlvbiB1cGRhdGVDbGFzc2VzKF9zLCBlbCwgY2xhc3NOYW1lcykge1xuICAgIGlmIChlbCA9PT0gc2xpZGVFbFJlZi5jdXJyZW50KSB7XG4gICAgICBzZXRTbGlkZUNsYXNzZXMoY2xhc3NOYW1lcyk7XG4gICAgfVxuICB9XG4gIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIGlmICh0eXBlb2Ygc3dpcGVyU2xpZGVJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHNsaWRlRWxSZWYuY3VycmVudC5zd2lwZXJTbGlkZUluZGV4ID0gc3dpcGVyU2xpZGVJbmRleDtcbiAgICB9XG4gICAgaWYgKGV4dGVybmFsUmVmKSB7XG4gICAgICBleHRlcm5hbFJlZi5jdXJyZW50ID0gc2xpZGVFbFJlZi5jdXJyZW50O1xuICAgIH1cbiAgICBpZiAoIXNsaWRlRWxSZWYuY3VycmVudCB8fCAhc3dpcGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzd2lwZXIuZGVzdHJveWVkKSB7XG4gICAgICBpZiAoc2xpZGVDbGFzc2VzICE9PSAnc3dpcGVyLXNsaWRlJykge1xuICAgICAgICBzZXRTbGlkZUNsYXNzZXMoJ3N3aXBlci1zbGlkZScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2lwZXIub24oJ19zbGlkZUNsYXNzJywgdXBkYXRlQ2xhc3Nlcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghc3dpcGVyKSByZXR1cm47XG4gICAgICBzd2lwZXIub2ZmKCdfc2xpZGVDbGFzcycsIHVwZGF0ZUNsYXNzZXMpO1xuICAgIH07XG4gIH0pO1xuICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc3dpcGVyICYmIHNsaWRlRWxSZWYuY3VycmVudCAmJiAhc3dpcGVyLmRlc3Ryb3llZCkge1xuICAgICAgc2V0U2xpZGVDbGFzc2VzKHN3aXBlci5nZXRTbGlkZUNsYXNzZXMoc2xpZGVFbFJlZi5jdXJyZW50KSk7XG4gICAgfVxuICB9LCBbc3dpcGVyXSk7XG4gIHZhciBzbGlkZURhdGEgPSB7XG4gICAgaXNBY3RpdmU6IHNsaWRlQ2xhc3Nlcy5pbmRleE9mKCdzd2lwZXItc2xpZGUtYWN0aXZlJykgPj0gMCxcbiAgICBpc1Zpc2libGU6IHNsaWRlQ2xhc3Nlcy5pbmRleE9mKCdzd2lwZXItc2xpZGUtdmlzaWJsZScpID49IDAsXG4gICAgaXNQcmV2OiBzbGlkZUNsYXNzZXMuaW5kZXhPZignc3dpcGVyLXNsaWRlLXByZXYnKSA+PSAwLFxuICAgIGlzTmV4dDogc2xpZGVDbGFzc2VzLmluZGV4T2YoJ3N3aXBlci1zbGlkZS1uZXh0JykgPj0gMFxuICB9O1xuICB2YXIgcmVuZGVyQ2hpbGRyZW4gPSBmdW5jdGlvbiByZW5kZXJDaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oc2xpZGVEYXRhKSA6
1IGNoaWxkcmVuO1xuICB9O1xuICB2YXIgb25Mb2FkID0gZnVuY3Rpb24gb25Mb2FkKCkge1xuICAgIHNldExhenlMb2FkZWQodHJ1ZSk7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWcsIF9leHRlbmRzKHtcbiAgICByZWY6IHNsaWRlRWxSZWYsXG4gICAgY2xhc3NOYW1lOiB1bmlxdWVDbGFzc2VzKFwiXCIuY29uY2F0KHNsaWRlQ2xhc3NlcykuY29uY2F0KGNsYXNzTmFtZSA/IFwiIFwiLmNvbmNhdChjbGFzc05hbWUpIDogJycpKSxcbiAgICBcImRhdGEtc3dpcGVyLXNsaWRlLWluZGV4XCI6IHZpcnR1YWxJbmRleCxcbiAgICBvbkxvYWQ6IG9uTG9hZFxuICB9LCByZXN0KSwgem9vbSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTd2lwZXJTbGlkZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogc2xpZGVEYXRhXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwic3dpcGVyLXpvb20tY29udGFpbmVyXCIsXG4gICAgXCJkYXRhLXN3aXBlci16b29tXCI6IHR5cGVvZiB6b29tID09PSAnbnVtYmVyJyA/IHpvb20gOiB1bmRlZmluZWRcbiAgfSwgcmVuZGVyQ2hpbGRyZW4oKSwgbGF6eSAmJiAhbGF6eUxvYWRlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcInN3aXBlci1sYXp5LXByZWxvYWRlclwiLFxuICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgIGlmIChub2RlKSBub2Rl
1LmxhenlQcmVsb2FkZXJNYW5hZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pKSksICF6b29tICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN3aXBlclNsaWRlQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBzbGlkZURhdGFcbiAgfSwgcmVuZGVyQ2hpbGRyZW4oKSwgbGF6eSAmJiAhbGF6eUxvYWRlZCAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcInN3aXBlci1sYXp5LXByZWxvYWRlclwiLFxuICAgIHJlZjogZnVuY3Rpb24gcmVmKG5vZGUpIHtcbiAgICAgIGlmIChub2RlKSBub2RlLmxhenlQcmVsb2FkZXJNYW5hZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH0pKSk7XG59KTtcblN3aXBlclNsaWRlLmRpc3BsYXlOYW1lID0gJ1N3aXBlclNsaWRlJztcbmV4cG9ydCB7IFN3aXBlciwgU3dpcGVyU2xpZGUsIHVzZVN3aXBlciwgdXNlU3dpcGVyU2xpZGUgfTsiLCIvKipcbiAqIFN3aXBlciAxMi4xLjFcbiAqIE1vc3QgbW9kZXJuIG1vYmlsZSB0b3VjaCBzbGlkZXIgYW5kIGZyYW1ld29yayB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25zXG4gKiBodHRwczovL3N3aXBlcmpzLmNvbVxuICpcbiAqIENvcHlyaWdodCAyMDE0LTIwMjYgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqXG4gKiBSZWxlYXNlZCBvbjogRmVicnVhcnkgMTMsIDIwMjZcbiAqL1xuXG5leHBvcnQgeyBTIGFzIFN3aXBlciwgUyBhcyBkZWZhdWx0IH0gZnJvbSAnLi9zaGFyZWQvc3dpcGVyLWNvcmUubWpzJzsiLCJpbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBIb21lR3JpZENhcmQgZnJvbSAnLi4vSG9tZUdyaWRDYXJkL0hvbWVHcmlkQ2FyZCc7XG5pbXBvcnQge1N3aXBlciwgU3dpcGVyU2xpZGV9IGZyb20gJ3N3aXBlci9yZWFjdCc7XG5pbXBvcnQgJ3N3aXBlci9jc3MnO1xuaW1wb3J0IFN3aXBlckNvcmUsIHtLZXlib2FyZCwgTW91c2V3aGVlbH0gZnJvbSAnc3dpcGVyL2NvcmUnO1xuLy8gaW1wb3J0IHsgUGFyYWxsYXggfSBmcm9tICdyZWFjdC1zY3JvbGwtcGFyYWxsYXgnO1xuaW1wb3J0IHVzZU9uU2NyZWVuIGZyb20gJy4uLy4uL3V0aWxzL3VzZU9uU2NyZWVuJztcblxuLy8gU3dpcGVyQ29yZS51c2UoW05hdmlnYXRpb25dKTtcblN3aXBlckNvcmUudXNlKFtLZXlib2FyZCwgTW91c2V3aGVlbF0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTbGlkZXJTd2lwZXIocHJvcHMpIHtcblxuICAvLyBpbiBjYXNlIHdlIHdhbnQgdG8gdXNlIG5hdmlnYXRpb24gYW5kIGJ1dHRvbnNcbiAgLy8gY29uc3QgU2xpZGVyQXJyb3dzID0gKCkgPT4gKFxuICAvLyAgIDxkaXYgY2xhc3NOYW1lPXtwcm9wcy5idXR0b25XaGl0ZSA/ICdjLXNsaWRlci1hcnJvd3Mtd2hpdGUnIDogJ2Mtc2xpZGVyLWFycm93cyd9PlxuICAvLyAgICAgPGRpdiBjbGFzc05hbWU9XCJjLXNsaWRlci1hcnJvd3MtaW5uZXJcIj5cbiAgLy8gICAgICAgPGJ1dHRvbiBjbGFzc05hbWU9XCJjLXNsaWRlci1hcnJvdy1sZWZ0IHN3aXBlci1idXR0b24tcHJldlwiPlxuICAvLyAgICAgICAgIDxTbGlkZXJBcnJvdyBjb2xvcj17cHJvcHMuYnV0dG9uV2hpdGUgPyAnYmxhY2snIDogJ3doaXRlJ30gLz5cbiAgLy8gICAgICAgPC9idXR0b24+XG4gIC8vICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYy1zbGlkZXItYXJyb3ctcmlnaHQgc3dpcGVyLWJ1dHRvbi1uZXh0XCI+XG4gIC8vICAgICAgICAgPFNsaWRlckFycm93IGNvbG9yPXtwcm9wcy5idXR0b25XaGl0ZSA/ICdibGFjaycgOiAnd2hpdGUnfSAvPlxuICAvLyAgICAgICA8L2J1dHRvbj5cbiAgLy8gICAgIDwvZGl2PlxuICAvLyAgIDwvZGl2PlxuICAvLyApO1xuXG5cbiAgLy8gY29uc3QgW3BhcmFsbGF4QWxsb3dlZCwgc2V0UGFyYWxsYXhBbGxvd2VkXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIC8vIHVzZUVmZmVjdCgoKSA9PiB7XG4gIC8vICAgZnVuY3Rpb24gY2hlY2tQYXJhbGxheFNjcmVlblNpemUoKSB7XG4gIC8vICAgICBzZXRQYXJhbGxheEFsbG93ZWQod2luZG93LmlubmVyV2lkdGggPCA2NDApO1xuICAvLyAgIH1cblxuICAvLyAgIGNoZWNrUGFyYWxsYXhTY3JlZW5TaXplKCk7XG5cbiAgLy8gICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tQYXJhbGxheFNjcmVlblNpemUpO1xuXG4gIC8vICAgcmV0dXJuICgpID0+IHtcbiAgLy8gICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjaGVja1BhcmFsbGF4U2NyZWVuU2l6ZSk7XG4gIC8vICAgfTtcbiAgLy8gfSwgW10pO1xuXG4gIGNvbnN0IHNsaWRlclJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBzbGlkZXJPblNjcmVlbiA9IHVzZU9uU2NyZWVuKHNsaWRlclJlZik7XG4gIGNvbnN0IHBhcmFsbGF4UmVmID0gdXNlUmVmKCk7XG5cbiAgY29uc3Qgc3dpcGVyQ29udGVudCA9IChcbiAgICA8U3dpcGVyXG4gICAgICBvYnNlcnZlcj17dHJ1ZX1cbiAgICAgIG9ic2VydmVQYXJlbnRzPXt0cnVlfVxuICAgICAgcGFyYWxsYXg9e3RydWV9XG4gICAgICBzcGFjZUJldHdlZW49ezIwfVxuICAgICAgc2xpZGVzUGVyVmlldz17J2F1dG8nfVxuICAgICAgZnJlZU1vZGU9e3RydWV9XG4gICAgICBmcmVlTW9kZVN0aWNreT17dHJ1ZX1cbiAgICAgIGtleWJvYXJkPXt7XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIG9ubHlJblZpZXdwb3J0OiB0cnVlLFxuICAgICAgfX1cbiAgICAgIG1vdXNld2hlZWw9e3tcbiAgICAgICAgZm9yY2VUb0F4aXM6IHRydWUsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtwcm9wcy5kYXRhLm1hcCgoY2FyZCwgaSkgPT4gKFxuICAgICAgICA8U3dpcGVyU2xpZGUga2V5PXtjYXJkLmxpbmsgPyBgJHtjYXJkLmxpbmt9LSR7aX1gIDogYHNsaWRlLSR7aX1gfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtc2xpZGVyLXNsaWRlc1wiPlxuICAgICAgICAgICAgPEhvbWVHcmlkQ2FyZFxuICAgICAgICAgICAgICB0eXBlPXtjYXJkLnR5cGV9XG4gICAgICAgICAgICAgI
1HRpdGxlPXtjYXJkLnRpdGxlfVxuICAgICAgICAgICAgICBpbWFnZT17Y2FyZC5pbWFnZX1cbiAgICAgICAgICAgICAgbGluaz17Y2FyZC5saW5rfVxuICAgICAgICAgICAgICBxdW90ZT17Y2FyZC5xdW90ZX1cbiAgICAgICAgICAgICAgYXR0cmlidXRpb249e2NhcmQuYXR0cmlidXRpb259XG4gICAgICAgICAgICAgIGN0YT17Y2FyZC5jdGF9XG4gICAgICAgICAgICAgIHNsaWRlcj1cInRydWVcIlxuICAgICAgICAgICAgICBoYXBwZW5pbmdOb3c9e2NhcmQuaGFwcGVuaW5nTm93fVxuICAgICAgICAgICAgICBzaXRlPXtjYXJkPy5zaXRlfVxuICAgICAgICAgICAgICBsaW5rVHlwZT17Y2FyZD8ubGlua1R5cGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1N3aXBlclNsaWRlPlxuICAgICAgKSl9XG4gICAgPC9Td2lwZXI+XG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcblxuICAgIGxldCB3aW5ILCBoYWxmSCwgb2Zmc2V0O1xuICAgIGNvbnN0IHNwZWVkID0gMC41O1xuXG4gICAgbGV0IHRpY2tpbmcgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIHNldFZhcmlhYmxlcygpIHtcbiAgICAgIGlmICghcGFyYWxsYXhSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdpbkggID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgaGFsZkggPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xuICAgICAgY29uc3Qgd2luT25lVGhpcmQgPSAod2luSCAvIDMpO1xuICAgICAgY29uc3QgYm94ID0gcGFyYWxsYXhSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGxldCB0ZXN0T2Zmc2V0ID0gaGFsZkggLSAoYm94LmhlaWdodCAvIDIpO1xuICAgICAgb2Zmc2V0ID0gdGVzdE9mZnNldCA8IHdpbk9uZVRoaXJkID8gd2luT25lVGhpcmQgOiB0ZXN0T2Zmc2V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHtcbiAgICAgIC8vIENvYWxlc2NlIGJ1cnN0cyBvZiBzY3JvbGwgZXZlbnRzIGludG8gb25lIGZyYW1lLiBXaXRob3V0IHRoaXMgZXZlcnlcbiAgICAgIC8vIHNjcm9sbCBldmVudCBxdWV1ZWQgYW5vdGhlciBsYXlvdXQgcmVhZCwgc2F0dXJhdGluZyB0aGUgbWFpbiB0aHJlYWQuXG4gICAgICBpZiAodGlja2luZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aWNraW5nID0gdHJ1ZTtcblxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGlja2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghcGFyYWxsYXhSZWYuY3VycmVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvcyA9IHBhcmFsbGF4UmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCB0cmFuc09mZnNldCA9IHBvcy55IDwgb2Zmc2V0ID8gMCA6IChvZmZzZXQgLSBwb3MueSkgKiBzcGVlZCAqIC0xO1xuICAgICAgICBwYXJhbGxheFJlZi5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAke3RyYW5zT2Zmc2V0fXB4LCAwKWA7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRWYXJpYWJsZXMoKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwsIHtwYXNzaXZlOiB0cnVlfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHNldFZhcmlhYmxlcywge3Bhc3NpdmU6IHRydWV9KTtcblxuICAgIHJldHVybigoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzZXRWYXJpYWJsZXMpO1xuICAgIH0pO1xuICB9LCBbXSlcblxuICAvLyBsZXQgU2xpZGVyQ29udGVudDtcbiAgLy8gaWYgKHByb3BzLnVzZVBhcmFsbGF4KSB7XG4gIC8vICAgU2xpZGVyQ29udGVudCA9IDxQYXJhbGxheCB4PXtbNSwgLTVdfSB5PXtbMjAsIC0yMF19PjxTd2lwZXJDb250ZW50IC8+PC9QYXJhbGxheD47XG4gIC8vIH0gZWxzZSB7XG4gIC8vICAgU2xpZGVyQ29udGVudCA9IDxTd2lwZXJDb250ZW50IC8+O1xuICAvLyB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YGMtc2xpZGVyLWNvbnRlbnQgJHtzbGlkZXJPblNjcmVlbiA/ICdpbi12aWV3JyA6ICcnfWB9IHJlZj17c2xpZGVyUmVmfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYy1zbGlkZXItY29udGVudF9fc2Nyb2xsZXJgfSByZWY9e3BhcmFsbGF4UmVmfT5cbiAgICAgICAge3N3aXBlckNvbnRlbnR9XG4gICAgICA8L2Rpdj5cbiAgICAgIHsvKiB7cHJvcHMuZGF0YS5sZW5ndGggPiAzICYmICg8U2xpZGVyQXJyb3dzIC8+KX0gKi99XG4gICAgPC9kaXY+XG4gICk7XG59IiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHVzZU9uU2NyZWVuIGZyb20gXCIuLi8uLi91dGlscy91c2VPblNjcmVlblwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTbGlkZXJXYXRjaGVyKCkge1xuICBjb25zdCB3YXRjaGVyUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IHdhdGNoZXJPblNjcmVlbiA9IHVzZU9uU2NyZWVuKHdhdGNoZXJSZWYpO1xuICBjb25zdCBbd2FzU2Vlbiwgc2V0V2FzU2Vlbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIHdhdGNoZXJPblNjcmVlbiApIHtcbiAgICAgIHNldFdhc1NlZW4odHJ1ZSk7XG4gICAgfVxuICB9LCBbd2F0Y2hlck9uU2NyZWVuXSk7XG5cbiAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtgYy1zbGlkZXItd2F0Y2hlciAke3dhc1NlZW4gPyAnaW4tdmlldycgOiAnJ31gfSByZWY9e3dhdGNoZXJSZWZ9PjwvZGl2Pjtcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBTbGlkZXJBcnJvdyBmcm9tICcuLi9JY29ucy9TbGlkZXJBcnJvdyc7XG5pbXBvcnQgU2xpZGVyU3dpcGVyIGZyb20gJy4uL1NsaWRlclN3aXBlci9TbGlkZXJTd2lwZXInO1xuaW1wb3J0IFNsaWRlcldhdGNoZXIgZnJvbSAnLi4vU2xpZGVyV2F0Y2hlci9TbGlkZXJXYXRjaGVyJztcblxuY29uc3QgU2xpZGVyID0gKHtkYXRhLCBidXR0b25XaGl0ZSwgc2VsZWN0ZWRTdG9yeSwgdXNlUGFyYWxsYXh9KSA9PiB7XG5cbiAgLy8gY29uc3Qgc2xpZGVyRGF0YSA9ICFzZWxlY3RlZFN0b3J5ID8gZGF0YSA6IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdG9yeVRhZyA9PT0gc2VsZWN0ZWRTdG9yeSk7XG5cbiAgLy8gY29uc3QgU2xpZGVyQ29udGVudCA9ICh7ZGF0YX0pID0+IHtcbiAgLy8gICByZXR1cm4gKFxuICAvLyAgICAgPGRpdiBjbGFzc05hbWU9XCJjLXNsaWRlci1jb250ZW50XCIgcmVmPXtyZWZ9PlxuICAvLyAgICAgICB7ZGF0YS5tYXAoKGNhcmQsIGkpID0+IChcbiAgLy8gICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtc2xpZGVyLXNsaWRlc1wiIGtleT17YCR7Y2FyZC50aXRsZX0rJHtpfWB9PlxuICAvLyAgICAgICAgICAgPEhvbWVHcmlkQ2FyZFxuICAvLyAgICAgICAgICAgICB0eX
1BlPXtjYXJkLnR5cGV9XG4gIC8vICAgICAgICAgICAgIHRpdGxlPXtjYXJkLnRpdGxlfVxuICAvLyAgICAgICAgICAgICBpbWFnZT17Y2FyZC5pbWFnZX1cbiAgLy8gICAgICAgICAgICAgbGluaz17Y2FyZC5saW5rfVxuICAvLyAgICAgICAgICAgICBxdW90ZT17Y2FyZC5xdW90ZX1cbiAgLy8gICAgICAgICAgICAgYXR0cmlidXRpb249e2NhcmQuYXR0cmlidXRpb259XG4gIC8vICAgICAgICAgICAgIGN0YT17Y2FyZC5jdGF9XG4gIC8vICAgICAgICAgICAgIHNsaWRlcj1cInRydWVcIlxuICAvLyAgICAgICAgICAgICBoYXBwZW5pbmdOb3c9e2NhcmQuaGFwcGVuaW5nTm93fVxuICAvLyAgICAgICAgICAgLz5cbiAgLy8gICAgICAgICA8L2Rpdj5cbiAgLy8gICAgICAgKSl9XG4gIC8vICAgICA8L2Rpdj5cbiAgLy8gICApO1xuICAvLyB9O1xuXG4gIC8vc3RpbGwgd29ya2luZyBvbiBhIGJldHRlciB3YXkgdG8gc2Nyb2xsIHRvIGVhY2ggaXRlbSB3aXRoIC5zY3JvbGxJbnRvVmlldywgdGhpcyBpcyBmb3Igbm93Li4uXG4gIGNvbnN0IFNsaWRlckFycm93cyA9ICgpID0+IChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YnV0dG9uV2hpdGUgPyAnYy1zbGlkZXItYXJyb3dzLXdoaXRlJyA6ICdjLXNsaWRlci1hcnJvd3MnfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1zbGlkZXItYXJyb3dzLWlubmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1zbGlkZXItYXJyb3ctbGVmdFwiPlxuICAgICAgICAgIDxTbGlkZXJBcnJvdyBjb2xvcj17YnV0dG9uV2hpdGUgPyAnYmxhY2snIDogJ3doaXRlJ30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1zbGlkZXItYXJyb3ctcmlnaHRcIj5cbiAgICAgICAgICA8U2xpZGVyQXJyb3cgY29sb3I9e2J1dHRvbldoaXRlID8gJ2JsYWNrJyA6ICd3aGl0ZSd9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YGMtc2xpZGVyYH0+XG4gICAgICA8U2xpZGVyV2F0Y2hlciAvPlxuICAgICAgPFNsaWRlclN3aXBlciBkYXRhPXtkYXRhfSB1c2VQYXJhbGxheD17dXNlUGFyYWxsYXh9IGJ1dHRvbldoaXRlPXtidXR0b25XaGl0ZX0vPlxuICAgICAge1xuICAgICAgICBkYXRhLmxlbmd0aCA+IDMgJiZcbiAgICAgICAgPFNsaWRlckFycm93cyAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2xpZGVyO1xuXG5TbGlkZXIucHJvcFR5cGVzID0ge1xuICBidXR0b25XaGl0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIHVzZVBhcmFsbGF4OiBQcm9wVHlwZXMuYm9vbCxcbiAgZGF0YTogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxpbms6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBpbWFnZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgaW1nQWx0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBpbWdEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgfSksXG4gICAgfSlcbiAgKSxcbn07XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYW
1N0XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNwbGl0VGV4dChwcm9wcykge1xuICBsZXQgY2hhckNvdW50ID0gMDtcbiAgbGV0IHdvcmRDb3VudCA9IDA7XG5cbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9XCJzcGxpdC1jb250YWluZXJcIiBhcmlhLWxhYmVsPXtwcm9wcy5jb3B5fSByb2xlPXtwcm9wcy5yb2xlfT5cbiAgICAgIHtwcm9wcy5jb3B5Py5zcGxpdChcIiBcIikubWFwKGZ1bmN0aW9uKHdvcmQsIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudCBrZXk9e2B3b3JkLSR7aW5kZXh9YH0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIndvcmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWluZGV4PXsrK3dvcmRDb3VudH0+XG4gICAgICAgICAgICAgICAgeyB3b3JkLnNwbGl0KFwiXCIpLm1hcCgoY2hhciwgaWR4KSA9PiA8c3BhbiBjbGFzc05hbWU9XCJjaGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1pbmRleD17KytjaGFyQ291bnR9IGtleT17YGNoYXItJHtpZHh9YH0+e2NoYXJ9PC9zcGFuPikgfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIndoaXRlc3BhY2VcIj4gPC9zcGFuPlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApXG4gICAgICB9KX1cbiAgICA8L3NwYW4+XG4gIClcbn0iLCJpbXBvcnQgUmVhY3QsIHt1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9zdExvdmVkSGVhcnQoKSB7XG4gIGNvbnN0IHRvdGFsRnJhbWVzID0gODtcbiAgY29uc3QgZnJhbWVSYXRlID0gODtcblxuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgLy8gQ291bnRlcnMgaGF2ZSB0byBzdXJ2aXZlIHJlLXJlbmRlcnMsIG90aGVyd2lzZSB0aGUgYW5pbWF0aW9uIHJlc2V0c1xuICAvLyBldmVyeSB0aW1lIHRoZSBjb21wb25lbnQgcmVuZGVycyBhbmQgbmV2ZXIgYWR2YW5jZXMuXG4gIGNvbnN0IGFjdGl2ZUZyYW1lID0gdXNlUmVmKDMpO1xuICBjb25zdCBmcmFtZVRpY2sgPSB1c2VSZWYoMCk7XG4gIGNvbnN0IHRpY2tpbmcgPSB1c2VSZWYoZmFsc2UpO1xuXG4gIGNvbnN0IFtoZWFydEZhZGVDbGFzcywgc2V0SGVhcnRGYWRlQ2xhc3NdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbY3VycmVudEZyYW1lLCBzZXRDdXJyZW50RnJhbWVdID0gdXNlU3RhdGUoMyk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmdW5jdGlvbiBhZHZhbmNlQW5pbWF0aW9uKCkge1xuICAgICAgaWYgKCsrZnJhbWVUaWNrLmN1cnJlbnQgPj0gZnJhbWVSYXRlKSB7XG4gICAgICAgIGZyYW1lVGljay5jdXJyZW50ID0gMDtcbiAgICAgICAgaWYgKCsrYWN0aXZlRnJhbWUuY3VycmVudCA+IHRvdGFsRnJhbWVzKSBhY3RpdmVGcmFtZS5jdXJyZW50ID0gMTtcbiAgICAgICAgc2V0Q3VycmVudEZyYW1lKGFjdGl2ZUZyYW1lLmN1cnJlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgICAgLy8gQ29hbGVzY2UgYnVyc3RzIG9mIHNjcm9sbCBldmVudHMgaW50byBhIHNpbmdsZSBmcmFtZSBzbyB0aGVcbiAgICAgIC8vIHJBRiBxdWV1ZSBjYW5ub3QgZ3JvdyB3aXRob3V0IGJvdW5kLlxuICAgICAgaWYgKHRpY2tpbmcuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aWNraW5nLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGlja2luZy5jdXJyZW50ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFyZWYuY3VycmVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJveCA9IHJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBzZXRIZWFydEZhZGVDbGFzcyhib3gueSA8IC0xMDAgPyAnaXMtZmFkZWQnIDogJycpO1xuICAgICAgICBhZHZhbmNlQW5pbWF0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwsIHtwYXNzaXZlOiB0cnVlfSk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YGMtbW9zdC1sb3ZlZF9faGVhcnQgJHtoZWFydEZhZGVDbGFzc31gfSByZWY9e3JlZn0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtbW9zdC1sb3ZlZF9faGVhcnQtZmFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BjLW1vc3QtbG92ZWRfX2hlYXJ0LWlubmVyIGZyYW1lLSR7Y3VycmVudEZyYW1lfWB9PjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHt1c2VSZWYsIHVzZVN0YXRlLCB1c2VFZmZlY3R9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VPblNjcmVlbiBmcm9tICcuLi8uLi91dGlscy91c2VPblNjcmVlbic7XG5pbXBvcnQgU3BsaXRUZXh0IGZyb20gJy4uL1NwbGl0VGV4dC9TcGxpdFRleHQnO1xuaW1wb3J0IFNtYWxsQXJyb3cgZnJvbSAnLi4vSWNvbnMvU21hbGxBcnJvdyc7XG5pbXBvcnQgTW9zdExvdmVkSGVhcnQgZnJvbSAnLi4vTW9zdExvdmVkSGVhcnQvTW9zdExvdmVkSGVhcnQnO1xuaW1wb3J0IE9yZ0xpbmsgZnJvbSAnLi4vT3JnTGluay9PcmdMaW5rJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9zdExvdmVkQ29udGVudChwcm9wcykge1xuICBjb25zdCB0aXRsZVJlZiA9IHVzZVJlZigpO1xuICBjb25zdCB0aXRsZU9uU2NyZWVuID0gdXNlT25TY3JlZW4odGl0bGVSZWYpO1xuXG4gIGNvbnN0IGJrZ1JlZiA9IHVzZVJlZigpO1xuICBjb25zdCBia2dPblNjcmVlbiA9IHVzZU9uU2NyZWVuKGJrZ1JlZiwgJy0xMDBweCcpO1xuICBjb25zdCBbYmtnd2FzU2Vlbiwgc2V0QmtnV2FzU2Vlbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYmtnT25TY3JlZW4pIHtcbiAgICAgIHNldEJrZ1dhc1NlZW4odHJ1ZSk7XG4gICAgfVxuICB9LCBbYmtnT25TY3JlZW5dKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgYy1tb3N0LWxvdmVkX19jb250ZW50LWlubmVyICR7Ymtnd2FzU2VlbiA/ICdpbi12aWV3JyA6ICcnfWB9IHJlZj17YmtnUmVmfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1tb3N0LWxvdmVkX19ia2dcIj48L2Rpdj5cbiAgICAgIDxNb3N0TG92ZWRIZWFydCAvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLW1vc3QtbG92ZWRfX3RleHQtd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YGMtbW9zdC1sb3ZlZF9fdGV4dCAke3RpdGxlT25TY3JlZW4gPyAnaW4tdmlldycgOiAnJ31gfSByZWY9e3RpdGxlUmVmfT5cbiAgICAgICAgICA8aDIgY2xhc3NOYW1lPVwiZi1oZWFkaW5nLTIgYy1tb3N0LWxvdmVkX19oZWFkaW5nXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjLW1vc3QtbG92ZWRfX2hlYWRpbmctbW9iaWxlXCI+e3Byb3BzLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImMtbW9zdC1sb3ZlZF9faGVhZGluZy1kZXNrdG9wXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxTcGxpdFRleHQgY29weT17cHJvcHMudGl0bGV9IC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJmLWhlYWRpbmctNiBjLW1vc3QtbG92ZWRfX2hvdXJzXCI+e3Byb3BzLnN1YmhlYWR9PC9wPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1tb3N0LWxvdmVkX19jdGFzXCI+XG4gICAgICAgICAgICB7c
1HJvcHMuY3Rhcy5tYXAoKGN0YSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPE9yZ0xpbmtcbiAgICAgICAgICAgICAgICB0bz17Y3RhLnVyaV9hbGlhc31cbiAgICAgICAgICAgICAgICBzaXRlPXtjdGEudXJpX3NpdGV9XG4gICAgICAgICAgICAgICAgdHlwZT17Y3RhLnVyaV9idW5kbGV9XG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJjLW1vc3QtbG92ZWRfX2xpbmsgdS1ob3Zlci10ZXh0LXBhcmVudCB1LWhvdmVyLWV4cGFuZC1zbWFsbC1hcnJvd1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtbW9zdC1sb3ZlZF9fY3RhXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmLWN0YSBjLW1vc3QtbG92ZWRfX2N0YS10ZXh0IHUtaG92ZXItdGV4dCB1LWhvdmVyLXRleHQtLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHtjdGEudGl0bGV9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtbW9zdC1sb3ZlZF9fY3RhLWFycm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxTbWFsbEFycm93IGNvbG9yPVwid2hpdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvT3JnTGluaz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgU2xpZGVyIGZyb20gJy4uL1NsaWRlci9TbGlkZXInO1xuaW1wb3J0IE1vc3RMb3ZlZENvbnRlbnQgZnJvbSAnLi4vTW9zdExvdmVkQ29udGVudC9Nb3N0TG92ZWRDb250ZW50JztcblxuY29uc3QgTW9zdExvdmVkID0gKHt0aXRsZSwgc3ViaGVhZCwgY3Rhcywgc2xpZGVyRXllYnJvdywgc2xpZGVySGVhZGVyLCBzbGlkZXJEYXRhfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1tb3N0LWxvdmVkXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtbW9zdC1sb3ZlZF9fY29udGVudC13cmFwcGVyIG8tYmFzaWMtZ3JpZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtbW9zdC1sb3ZlZF9fY29udGVudFwiPlxuICAgICAgICAgIDxNb3N0TG92ZWRDb250ZW50IHRpdGxlPXt0aXRsZX0gc3ViaGVhZD17c3ViaGVhZH0gY3Rhcz17Y3Rhc30gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1tb3N0LWxvdmVkX19zbGlkZXItd3JhcHBlciBvLWJhc2ljLWdyaWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLW1vc3QtbG92ZWRfX3NsaWRlclwiPlxuICAgICAgICAgIDxTbGlkZXIgZGF0YT17c2xpZGVyRGF0YX0gYnV0dG9uV2hpdGU9e3RydWV9IHVzZVBhcmFsbGF4PXt0cnVlfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9zdExvdmVkO1xuXG5Nb3N0TG92ZWQucHJvcFR5cGVzID0ge1xuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgc3ViaGVhZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY3RhczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pXG4gICksXG4gIHNsaWRlckRhdGE6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsaW5rOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgaW1hZ2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGltZ0FsdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgaW1nRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIH0pLFxuICAgIH0pXG4gICksXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VPblNjcmVlbiBmcm9tICcuLi8uLi91dGlscy91c2VPblNjcmVlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjYW5UZXh0dXJlVW5tYXNrKCkge1xuICBjb25zdCBbc2NhblN0YXRlLCBzZXRTY2FuU3RhdGVdID0gdXNlU3RhdGUoJ2hpZGRlbicpO1xuICBjb25zdCByZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgaW5WaWV3ID0gdXNlT25TY3JlZW4ocmVmKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICggaW5WaWV3ICkge1xuICAgICAgc2V0U2NhblN0YXRlKCdhY3RpdmUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0U2NhblN0YXRlKCdoaWRkZW4nKTtcbiAgICB9XG4gIH0sIFtpblZpZXddKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgYy1zY2FuLWRpc3NvbHZlciAke3NjYW5TdGF0ZX1gfSByZWY9e3JlZn0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YGMtc2Nhbi1kaXNzb2x2ZXJfX2lubmVyYH0+PC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59IiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7TGlua30gZnJvbSAnZ2F0c2J5JztcbmltcG9ydCBTbGlkZXIgZnJvbSAnLi4vU2xpZGVyL1NsaWRlcic7XG5pbXBvcnQgU21hbGxBcnJvdyBmcm9tICcuLi9JY29ucy9TbWFsbEFycm93JztcbmltcG9ydCBTZWxlY3REcm9wZG93biBmcm9tICcuLi9TZWxlY3REcm9wZG93bi9TZWxlY3REcm9wZG93bic7XG5pbXBvcnQgU2NhblRleHR1cmVVbm1hc2sgZnJvbSAnLi4vU2NhblRleHR1cmVVbm1hc2svU2NhblRleHR1cmVVbm1hc2snO1xuXG5jb25zdCBIb21lcGFnZVN0b3JpZXMgPSAoe3N1YnRpdGxlLCBzbGlkZXJ
1EYXRhLCB0YWdzfSkgPT4ge1xuICBjb25zdCBbc2VsZWN0ZWRTdG9yeSwgc2V0U2VsZWN0ZWRTdG9yeV0gPSB1c2VTdGF0ZSgnRXZlcnl0aGluZycpXG5cbiAgZnVuY3Rpb24gc2VsZWN0U3RvcnkoZSkge1xuICAgIHNldFNlbGVjdGVkU3RvcnkoZSlcbiAgfVxuXG4gIGNvbnN0IGNhcmREYXRhID1cbiAgICBzZWxlY3RlZFN0b3J5ID09PSAnRXZlcnl0aGluZydcbiAgICAgID8gc2xpZGVyRGF0YVxuICAgICAgOiBzbGlkZXJEYXRhLmZpbHRlcihzdG9yeSA9PiBzdG9yeS5zdG9yeVRhZz8uaW5jbHVkZXMoc2VsZWN0ZWRTdG9yeSkpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWVwYWdlLXN0b3JpZXMgby1iYXNpYy1ncmlkXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZXBhZ2Utc3Rvcmllc19fc2NhblwiPlxuICAgICAgICA8U2NhblRleHR1cmVVbm1hc2sgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWVwYWdlLXN0b3JpZXNfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWVwYWdlLXN0b3JpZXNfX3RleHRcIj5cbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiZi1jdGEgYy1ob21lcGFnZS1zdG9yaWVzX19zdWJ0aXRsZVwiPntzdWJ0aXRsZX08L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1zdG9yaWVzX19oZWFkaW5nLXNlbGVjdFwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzTmFtZT1cImYtaGVhZGluZy1zdWItMiBjLWhvbWVwYWdlLXN0b3JpZXNfX2hlYWRpbmdcIj5MZWFybiBhYm91dCA8L2gyPlxuICAgICAgICAgICAgPFNlbGVjdERyb3Bkb3duIHRhZ3M9e3RhZ3N9IGxhcmdlRm9udD17ZmFsc2V9IHNlbGVjdFN0b3J5PXtlID0+IHNlbGVjdFN0b3J5KGUpfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWVwYWdlLXN0b3JpZXNfX2N0YVwiPlxuICAgICAgICAgIDxMaW5rXG4gICAgICAgICAgICB0bz1cIi9zdG9yaWVzXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImMtaG9tZXBhZ2Utc3Rvcmllc19fbGluayB1LWhvdmVyLXRleHQtcGFyZW50IHUtaG92ZXItZXhwYW5kLXNtYWxsLWFycm93XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImYtY3RhIGMtaG9tZXBhZ2Utc3Rvcmllc19fY3RhLXRleHQgdS1ob3Zlci10ZXh0IHUtaG92ZXItdGV4dC0td2hpdGVcIj5cbiAgICAgICAgICAgICAgU2VlIGFsbCBTdG9yaWVzXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1zdG9yaWVzX19jdGEtYXJyb3dcIj5cbiAgICAgICAgICAgICAgPFNtYWxsQXJyb3cgY29sb3I9XCJ3aGl0ZVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZXBhZ2Utc3Rvcmllc19fc2xpZGVyXCI+XG4gICAgICAgIDxTbGlkZXJcbiAgICAgICAgICBkYXRhPXtjYXJkRGF0YX1cbiAgICAgICAgICBidXR0b25XaGl0ZT17ZmFsc2V9XG4gICAgICAgICAgc2VsZWN0ZWRTdG9yeT17c2VsZWN0ZWRTdG9yeX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO307XG5cbmV4cG9ydCBkZWZhdWx0IEhvbWVwYWdlU3RvcmllcztcblxuSG9tZXBhZ2VTdG9yaWVzLnByb3BUeXBlcyA9IHtcbiAgc3VidGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRhZ3M6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zdHJpbmcsXG4gICksXG4gIHNsaWRlckRhdGE6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsaW5rOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgaW1hZ2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIGltZ0FsdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgaW1nRGF0YTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIH0pLFxuICAgIH0pXG4gICksXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VPblNjcmVlbiBmcm9tICcuLi8uLi91dGlscy91c2VPblNjcmVlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEluVmlld1dhdGNoZXIoKSB7XG4gIGNvbnN0IHdhdGNoUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGluVmlldyA9IHVzZU9uU2NyZWVuKHdhdGNoUmVmKTtcbiAgY29uc3QgW3dhc1NlZW4sIHNldFdhc1NlZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCBpblZpZXcgKSB7XG4gICAgICBzZXRXYXNTZWVuKHRydWUpO1xuICAgIH1cbiAgfSwgW2luVmlld10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2B1LXdhdGNoZXIgJHt3YXNTZWVuID8gJ2luLXZpZXcnIDogJyd9YH0gcmVmPXt3YXRjaFJlZn0+PC9kaXY+XG4gIClcbn0iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU9uU2NyZWVuIGZyb20gJy4uLy4uL3V0aWxzL3VzZU9uU2NyZWVuJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVmVpblRleHR1cmVVbm1hc2soKSB7XG4gIGNvbnN0IFt2ZWluU3RhdGUsIHNldFZlaW5TdGF0ZV0gPSB1c2VTdGF0ZSgnaGlkZGVuJyk7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZigpO1xuICBjb25zdCBpblZpZXcgPSB1c2VPblNjcmVlbihyZWYpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCBpblZpZXcgKSB7XG4gICAgICBzZXRWZWluU3RhdGUoJ2FjdGl2ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWZWluU3RhdGUoJ2hpZGRlbicpO1xuICAgIH1cbiAgfSwgW2luVmlld10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2BjLXZlaW4tZGlzc29sdmVyICR7dmVpblN0YXRlfWB9IHJlZj17cmVmfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYy12ZWluLWRpc3NvbHZlcl9faW5uZXJgfT48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn0iLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgSG9tZUdyaWRDYXJkIGZyb20gJy4uL0hvbWVHcmlkQ2FyZC9Ib21lR3JpZENhcmQnO1xuaW1wb3J0IHsgUGFyYWxsYXggfSBmcm9tICdyZWFjdC1zY3JvbGwtcGFyYWxsYXgnO1xuaW1wb3J0IEJyYW5jaEJvdHRvbUltZyBmcm9tICcuLi8uLi9pbWFnZXMvYnJhbmNoLWJvdHRvbS5wbmcnO1xuaW1wb3J0IEJsaW5raW5nRXllIGZyb20gJy4uL0JsaW5raW5nRXllL0JsaW5raW5nRXllJztcbmltcG9ydCBJblZpZXdXYXRjaGVyIGZyb20gJy4uL0luVmlld1dhdGNoZXIvSW5WaWV3V2F0Y2hlcic7XG5pbXBvcnQgVmVpblRleHR1cmVVbm1hc2sgZnJvbSAnLi4vVmVpbnNUZXh0dXJlVW5tYXNrL1ZlaW5zVGV4dHVyZVVubWFzayc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuXG5s
1ZXQgY2FyZEl0ZXJhdG9yID0gMDtcblxuY29uc3QgSG9tZUdyaWQgPSAoeyBjYXJkRGF0YSwgcG9zaXRpb24gfSkgPT4ge1xuICBsZXQgbGVmdERhdGEgPSBbXTtcbiAgbGV0IHJpZ2h0RGF0YSA9IFtdO1xuICAvLyBsZXQgZGF0YUNvdW50ID0gMDtcbiAgY29uc3QgZGF0YUxlbmd0aCA9IGNhcmREYXRhLmxlbmd0aDtcbiAgY29uc3QgW3BhcmFsbGF4QWxsb3dlZCwgc2V0UGFyYWxsYXhBbGxvd2VkXSA9IHVzZVN0YXRlKHRydWUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZnVuY3Rpb24gY2hlY2tQYXJhbGxheFNjcmVlblNpemUoKSB7XG4gICAgICBzZXRQYXJhbGxheEFsbG93ZWQod2luZG93LmlubmVyV2lkdGggPCA2NDApO1xuICAgIH1cblxuICAgIGNoZWNrUGFyYWxsYXhTY3JlZW5TaXplKCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2hlY2tQYXJhbGxheFNjcmVlblNpemUpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNoZWNrUGFyYWxsYXhTY3JlZW5TaXplKVxuICAgIH1cblxuICB9LCBbXSk7XG5cbiAgY29uc3QgbGVmdERhdGFDdXRvZmYgPSBNYXRoLmZsb29yKGRhdGFMZW5ndGggLyAzKTtcblxuICAvLyBpZiAoZGF0YUxlbmd0aCA+IDIpIHtcbiAgY2FyZERhdGEuZm9yRWFjaCgoZGF0YSwgaWR4KSA9PiB7XG4gICAgaWYgKGlkeCA8PSBsZWZ0RGF0YUN1dG9mZikge1xuICAgICAgbGVmdERhdGEucHVzaChkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHREYXRhLnB1c2goZGF0YSk7XG4gICAgfVxuICB9KTtcbiAgLy8gfSBlbHNlIHtcbiAgLy8gICBjYXJkRGF0YS5mb3JFYWNoKChkYXRhLCBpZHgpID0+IHtcbiAgLy8gICAgIC8vICsrZGF0YUNvdW50O1xuICAvLyAgICAgaWYgKGlkeCA9PT0gMCkge1xuICAvLyAgICAgICBsZWZ0RGF0YS5wdXNoKGRhdGEpO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgcmlnaHREYXRhLnB1c2goZGF0YSk7XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZS1ncmlkIG8tYmFzaWMtZ3JpZFwiPlxuICAgICAgPGgyIGNsYXNzTmFtZT1cInUtc3Itb25seVwiPlN0b3JpZXM8L2gyPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2BjLWhvbWUtZ3JpZF9fYnJhbmNoYH0+XG4gICAgICAgIDxWZWluVGV4dHVyZVVubWFzayAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWRfX2xlZnRcIj5cbiAgICAgICAge1xuICAgICAgICAgIGxlZnREYXRhLm1hcCgoZGF0YSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWUtZ3JpZC1jYXJkXCIga2V5PXtgY2FyZC0keysrY2FyZEl0ZXJhdG9yfWB9PlxuICAgICAgICAgICAgICAgIDxIb21lR3JpZENhcmRcbiAgICAgICAgICAgICAgICAgIHR5cGU9e2RhdGEudHlwZX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtkYXRhLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgbGluaz17ZGF0YS5saW5rfVxuICAgICAgICAgICAgICAgICAgaGFwcGVuaW5nTm93PXtkYXRhLmhhcHBlbmluZ05vd31cbiAgICAgICAgICAgICAgICAgIGltYWdlPXtkYXRhLmltYWdlfVxuICAgICAgICAgICAgICAgICAgc2l0ZT17ZGF0YT8uc2l0ZX1cbiAgICAgICAgICAgICAgICAgIGxpbmtUeXBlPXtkYXRhPy5saW5rVHlwZX1cbiAgICAgICAgICAgICAgICAgIGtleT17bmFub2lkKCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxQYXJhbGxheCBjbGFzc05hbWU9XCJjLWhvbWUtZ3JpZF9fcmlnaHRcIiB5PXtbMjAsIC0yMF19IGRpc2FibGVkPXtwYXJhbGxheEFsbG93ZWR9PlxuICAgICAgICB7XG4gICAgICAgICAgcmlnaHREYXRhLm1hcCgoZGF0YSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWUtZ3JpZC1jYXJkXCIga2V5PXtgY2FyZC0keysrY2FyZEl0ZXJhdG9yfWB9PlxuICAgICAgICAgICAgICAgIDxIb21lR3JpZENhcmRcbiAgICAgICAgICAgICAgICAgIHR5cGU9e2RhdGEudHlwZX1cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtkYXRhLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgbGluaz17ZGF0YS5saW5rfVxuICAgICAgICAgICAgICAgICAgaGFwcGVuaW5nTm93PXtkYXRhLmhhcHBlbmluZ05vd31cbiAgICAgICAgICAgICAgICAgIGltYWdlPXtkYXRhLmltYWdlfVxuICAgICAgICAgICAgICAgICAga2V5PXtuYW5vaWQoKX1cbiAgICAgICAgICAgICAgICAgIHNpdGU9e2RhdGE/LnNpdGV9XG4gICAgICAgICAgICAgICAgICBsaW5rVHlwZT17ZGF0YT8ubGlua1R5cGV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgPC9QYXJhbGxheD5cblxuICAgICAgey8qIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWRfX2V5ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZS1ncmlkX19leWUtcGFyYWxsYXhcIj5cbiAgICAgICAgICA8QmxpbmtpbmdFeWUgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj4gKi99XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWRfX2JyYW5jaC1ib3R0b21cIj5cbiAgICAgICAgPEluVmlld1dhdGNoZXIgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWUtZ3JpZF9fYnJhbmNoLWJvdHRvbS1pbm5lclwiPlxuICAgICAgICAgIDxpbWcgc3JjPXtCcmFuY2hCb3R0b21JbWd9IGFsdD1cIlwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgKVxufTtcblxuZXhwb3J0IGRlZmF1bHQgSG9tZUdyaWQ7XG5cbkhvbWVHcmlkLnByb3BUeXBlcyA9IHtcbiAgcG9zaXRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIGNhcmREYXRhOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgaWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICB0eX
1BlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBpbWFnZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgICAgaW1nQWx0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBpbWdEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgICAgfSksXG4gICAgICBoYXBwZW5pbmdOb3c6IFByb3BUeXBlcy5ib29sLFxuICAgIH0pXG4gICksXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlRWZmZWN0fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgU3BsaXRUZXh0IGZyb20gJy4uL1NwbGl0VGV4dC9TcGxpdFRleHQnO1xuaW1wb3J0IE9yZ0xpbmsgZnJvbSAnLi4vT3JnTGluay9PcmdMaW5rJztcbmltcG9ydCBTbWFsbEFycm93IGZyb20gJy4uL0ljb25zL1NtYWxsQXJyb3cnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb21lcGFnZUhlcm9UaXRsZUNhcmQocHJvcHMpIHtcbiAgY29uc3QgY2FyZFJlZj0gdXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgdGlja2luZyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gaGFuZGxlVGl0bGVDYXJkU2Nyb2xsKCkge1xuICAgICAgLy8gQ29hbGVzY2UgYnVyc3RzIG9mIHNjcm9sbCBldmVudHMgaW50byBvbmUgZnJhbWUuIFdpdGhvdXQgdGhpcyBldmVyeVxuICAgICAgLy8gc2Nyb2xsIGV2ZW50IHF1ZXVlZCBhbm90aGVyIHN0eWxlIHdyaXRlLCBzYXR1cmF0aW5nIHRoZSBtYWluIHRocmVhZC5cbiAgICAgIGlmICh0aWNraW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRpY2tpbmcgPSB0cnVlO1xuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aWNraW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFjYXJkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxlZCA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gICAgICAgIGlmICggc2Nyb2xsZWQgPiAxMDAgKSB7XG4gICAgICAgICAgY2FyZFJlZi5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgkeyhzY3JvbGxlZCAtIDEwMCkgLyAyICogLTF9cHgsIDAsIDApYDtcbiAgICAgICAgICBjYXJkUmVmLmN1cnJlbnQuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7KChzY3JvbGxlZCAtIDEwMCkgLyAyKSAqIC0xfXB4LCAwLCAwKWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FyZFJlZi5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAwLCAwKWA7XG4gICAgICAgICAgY2FyZFJlZi5jdXJyZW50LnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAwLCAwKWA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGluVmlld1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChjYXJkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2FyZFJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQoJ2luLXZpZXcnKVxuICAgICAgfVxuICAgIH0sIDIwMCk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlVGl0bGVDYXJkU2Nyb2xsLCB7cGFzc2l2ZTogdHJ1ZX0pO1xuXG4gICAgcmV0dXJuKCgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dChpblZpZXdUaW1lb3V0KTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVUaXRsZUNhcmRTY3JvbGwpO1xuICAgIH0pXG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuXG4gICAgPGRpdiByZWY9eyBjYXJkUmVmIH0gY2xhc3NOYW1lPXtgYy1ob21lcGFnZS1oZXJvX19ib3R0b20tYmxvY2tgfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1oZXJvX19ib3R0b20tYmxvY2staW5uZXJcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1oZXJvX19ib3R0b20tZXllYnJvdyBmLXRhZ1wiPntwcm9wcy5leWVicm93fTwvcD5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1oZXJvX19ib3R0b20tdGl0bGUgZi1oZWFkaW5nLWgxXCI+XG4gICAgICAgICAgPFNwbGl0VGV4dCBjb3B5PXtwcm9wcy5ibG9ja1RleHR9IC8+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWVwYWdlLWhlcm9fX2JvdHRvbS1jdGFcIj5cbiAgICAgICAgICA8T3JnTGlua1xuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1oZXJvX19ib3R0b20tbGluayBmLWN0YSB1LWhvdmVyLXRleHQtcGFyZW50XCJcbiAgICAgICAgICAgIHRvPXtwcm9wcy5jdGEudXJsfVxuICAgICAgICAgICAgc3R5bGU9e3t0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLCBjb2xvcjogJyNmZmYnLCBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3Bhbj57cHJvcHMuY3RhLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImMtaG9tZXBhZ2UtaGVyb19fYXJyb3dcIj5cbiAgICAgICAgICAgICAgPFNtYWxsQXJyb3cgY29sb3I9XCIjZmZmZmZmXCIgLz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L09yZ0xpbms+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgKVxufSIsImltcG9ydCBSZWFjdCwgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlT25TY3JlZW4gZnJvbSAnLi4vLi4vdXRpbHMvdXNlT25TY3JlZW4nO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJsaW5raW5nRXllKCkge1xuICBjb25zdCBleWVSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3QgaW5WaWV3ID0gdXNlT25TY3JlZW4o
1ZXllUmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgYy1ob21lcGFnZS1pbGx1c3RyYXRpb25gfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgYy1ob21lcGFnZS1pbGx1c3RyYXRpb25fX2lubmVyICR7aW5WaWV3ID8gJ2luLXZpZXcnIDogJyd9YH0gcmVmPXtleWVSZWZ9PjwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59IiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGZyYWcgZnJvbSAnLi4vLi4vc2hhZGVycy9kaXNzb2x2ZXJfZnJhZy5mcmFnJztcbmltcG9ydCBmdWxsVmVydCBmcm9tICcuLi8uLi9zaGFkZXJzL2Z1bGwudmVydCc7XG5pbXBvcnQgY3JlYXRlUmVnbCBmcm9tICdyZWdsJztcbmltcG9ydCBIb21lcGFnZUlsbHVzdHJhdGlvbiBmcm9tICcuLi9Ib21lcGFnZUlsbHVzdHJhdGlvbi9Ib21lcGFnZUlsbHVzdHJhdGlvbic7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG9tZXBhZ2VIZXJvRGlzc29sdmVyKHByb3BzKSB7XG5cbiAgLy8gY29uc3QgcmVmID0gdXNlUmVmKCk7XG5cbiAgLy8gdXNlRWZmZWN0KCgpID0+IHtcblxuICAvLyAgIGNvbnN0IGRhdGEgPSB7XG4gIC8vICAgICBhbmltYXRlR3JhaW46IGZhbHNlLCAgICAgICAgICAvLyBhbmltYXRlR3JhaW46IHRydWUsXG4gIC8vICAgICBncmFpbkFtb3VudDogMCwgICAgICAgICAgICAgICAvLyBncmFpbkFtb3VudDogMC4xNSxcbiAgLy8gICAgIG5vaXNlU3BlZWQ6IDAuMDUsXG4gIC8vICAgICBub2lzZUZyZXE6IDU0LCAgICAgICAgICAgICAgICAvLyBub2lzZUZyZXE6IDE4LFxuICAvLyAgICAgbWFza0xvd0VuZDogMC44OSxcbiAgLy8gICAgIG1hc2tIaWdoRW5kOiAxLFxuICAvLyAgICAgYmtDb2xvcjogWzI1NSwgMjU1LCAyNTVdLCAgICAgLy8gYmtDb2xvcjogWzI0OCwgMjQ5LCAyNDJdLC8vIGJrQ29sb3I6IFsyNTAsIDI1MCwgMjUwXSxcbiAgLy8gICAgIG1hc2tDbGFtcDogMS4yOCwgICAgICAgICAgICAgIC8vIG1hc2tDbGFtcDogMC41LFxuICAvLyAgICAgbWFza0dyYWRpZW50OiAwLjMxLCAgICAgICAgICAgLy8gbWFza0dyYWRpZW50OiAwLjYxLFxuICAvLyAgICAgbWFza0VkZ2VDb2xvcjogWzIxOSwgNTgsIDQ1XSwgLy8gbWFza0VkZ2VDb2xvcjogWzE2NSwgMCwgMjU1XSxcbiAgLy8gICAgIG1hc2tFZGdlU2l6ZTogMC4xLFxuICAvLyAgIH07XG5cbiAgLy8gICBsZXQgc2Nyb2xsVGFyZ2V0ID0gMDtcbiAgLy8gICBsZXQgc2Nyb2xsUG9zID0gMDtcblxuICAvLyAgIGxldCBpbWFnZUxvYWRlZCA9IGZhbHNlO1xuICAvLyAgIGxldCBpbWFnZVRleHR1cmU7XG4gIC8vICAgbGV0IGFsbG93VXBkYXRlID0gdHJ1ZTtcbiAgLy8gICBsZXQgdXBkYXRlUnVubmluZyA9IHRydWU7XG4gIC8vICAgbGV0IHdpblcgICAgICA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAvLyAgIGxldCB3aW5IICAgICAgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgLy8gICBsZXQgaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcbiAgLy8gICBsZXQgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZ2wtY2FudmFzJyk7XG4gIC8vICAgY2FudmFzLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3aW5kb3cuaW5uZXJXaWR0aCk7XG4gIC8vICAgY2FudmFzLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgd2luZG93LmlubmVySGVpZ2h0KTtcblxuICAvLyAgIGltYWdlLnNyYyA9IHByb3BzLmltYWdlU3JjO1xuICAvLyAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gICAgIGltYWdlTG9hZGVkID0gdHJ1ZTtcbiAgLy8gICAgIGltYWdlVGV4dHVyZSA9IHJlZ2wudGV4dHVyZShpbWFnZSk7XG4gIC8vICAgICBzaXplQ2FudmFzKCk7XG4gIC8vICAgfTtcblxuICAvLyAgIGZ1bmN0aW9uIGxlcnAocG9zaXRpb24sIHRhcmdldFBvc2l0aW9uLCBzcGVlZCA9IDAuMikge1xuICAvLyAgICAgcmV0dXJuIHBvc2l0aW9uICsgKCh0YXJnZXRQb3NpdGlvbiAtIHBvc2l0aW9uKSAvIDIpICogc3BlZWQ7XG4gIC8vICAgfVxuXG4gIC8vICAgZnVuY3Rpb24gc2l6ZUNhbnZhcygpIHtcbiAgLy8gICAgIHdpblcgICAgICAgICAgID0gd2luZG93LmlubmVyV2lkdGg7XG4gIC8vICAgICB3aW5IICAgICAgICAgICA9IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgLy8gICAgIGNvbnN0IGltYWdlVyAgID0gaW1hZ2UubmF0dXJhbFdpZHRoO1xuICAvLyAgICAgY29uc3QgaW1hZ2VIICAgPSBpbWFnZS5uYXR1cmFsSGVpZ2h0O1xuICAvLyAgICAgbGV0IHZhbHMgICAgICAgPSB7dzogMCwgaDogMH07XG4gIC8vICAgICBsZXQgcmF0aW87XG5cbiAgLy8gICAgIGlmICggaW1hZ2VXID4gaW1hZ2VIICkge1xuICAvLyAgICAgICAvLyBsYW5kc2NhcGVcbiAgLy8gICAgICAgcmF0aW8gPSBpbWFnZVcgLyBpbWFnZUg7XG4gIC8vICAgICAgIHZhbHMuaCA9IHdpbkg7XG4gIC8vICAgICAgIHZhbHMudyA9IHdpbkggKiByYXRpbztcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIC8vIHBvcnRyYWl0XG4gIC8vICAgICAgIHJhdGlvID0gaW1hZ2VIIC8gaW1hZ2VXO1xuICAvLyAgICAgICB2YWxzLmggPSB3aW5XICogcmF0aW87XG4gIC8vICAgICAgIHZhbHMudyA9IHdpblc7XG4gIC8vICAgICB9XG5cbiAgLy8gICAgIGlmICggdmFscy53IDwgd2luVyApIHtcbiAgLy8gICAgICAgdmFscy5oID0gd2luVyAqICh2YWxzLmggLyB2YWxzLncpO1xuICAvLyAgICAgICB2YWxzLncgPSB3aW5XO1xuICAvLyAgICAgfSBlbHNlIGlmICggdmFscy5oIDwgd2luSCApIHtcbiAgLy8gICAgICAgdmFscy53ID0gd2luSCAqICh2YWxzLncgLyB2YWxzLmgpO1xuICAvLyAgICAgICB2YWxzLmggPSB3aW5IO1xuICAvLyAgICAgfVxuXG4gIC8vICAgICBjYW52YXMuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHZhbHMudyk7XG4gIC8vICAgICBjYW52YXMuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCB2YWxzLmgpO1xuICAvLyAgICAgcmV0dXJuIHZhbHM7XG4gIC8vICAgfVxuXG5cbiAgLy8gICBjb25zdCByZWdsICAgPSBjcmVhdGVSZWdsKHsgY2FudmFzOiBjYW52YXMgfSk7XG5cbiAgLy8gICBjb25zdCBkcmF3UXVhZCA9IHJlZ2woe1xuICAvLyAgICAgZnJhZzogZnJhZyxcbiAgLy8gICAgI
1HZlcnQ6IGZ1bGxWZXJ0LFxuICAvLyAgICAgYXR0cmlidXRlczoge1xuICAvLyAgICAgICBwb3NpdGlvbjogKGNvbnRleHQsIHByb3BzKSA9PlxuICAvLyAgICAgICAgIHJlZ2wuYnVmZmVyKFtcbiAgLy8gICAgICAgICAgIFsxLCAtMV0sXG4gIC8vICAgICAgICAgICBbMSwgMV0sXG4gIC8vICAgICAgICAgICBbLTEsIC0xXSxcbiAgLy8gICAgICAgICAgIFstMSwgMV0sXG4gIC8vICAgICAgICAgXSksXG4gIC8vICAgICB9LFxuXG4gIC8vICAgICB1bmlmb3Jtczoge1xuICAvLyAgICAgICB1X3Jlc29sdXRpb246IFt3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0XSxcbiAgLy8gICAgICAgdV9zY3JlZW5EaW1lbnNpb25zOiBbd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodF0sXG4gIC8vICAgICAgIHVfdGltZTogKGNvbnRleHQsIHByb3BzLCBiYXRjaElkKSA9PiBjb250ZXh0LnRpbWUsXG4gIC8vICAgICAgIHVfbm9pc2VGcmVxOiAoKSA9PiBkYXRhLm5vaXNlRnJlcSxcbiAgLy8gICAgICAgdV9ub2lzZVNwZWVkOiAoKSA9PiBkYXRhLm5vaXNlU3BlZWQsXG4gIC8vICAgICAgIHVfbWFza0xvd0VuZDogKCkgPT4gZGF0YS5tYXNrTG93RW5kLFxuICAvLyAgICAgICB1X21hc2tIaWdoRW5kOiAoKSA9PiBkYXRhLm1hc2tIaWdoRW5kLFxuICAvLyAgICAgICB1X2FuaW1hdGVHcmFpbjogKCkgPT4gZGF0YS5hbmltYXRlR3JhaW4sXG4gIC8vICAgICAgIHVfZ3JhaW5BbW91bnQ6ICgpID0+IGRhdGEuZ3JhaW5BbW91bnQsXG4gIC8vICAgICAgIHVfbWFza0NsYW1wOiAoKSA9PiBkYXRhLm1hc2tDbGFtcCxcbiAgLy8gICAgICAgdV9tYXNrR3JhZGllbnQ6ICgpID0+IGRhdGEubWFza0dyYWRpZW50LFxuICAvLyAgICAgICB1X3Njcm9sbDogKCkgPT4gc2Nyb2xsUG9zIC8gd2luZG93LmlubmVySGVpZ2h0LFxuICAvLyAgICAgICB1X2ltYWdlOiAoKSA9PiBpbWFnZVRleHR1cmUsXG4gIC8vICAgICAgIHVfYmtDb2xvcjogKCkgPT4gZGF0YS5ia0NvbG9yLm1hcCgobikgPT4gbiAvIDI1NSksXG4gIC8vICAgICAgIHVfbWFza0VkZ2VDb2xvcjogKCkgPT4gZGF0YS5tYXNrRWRnZUNvbG9yLm1hcCgobikgPT4gbiAvIDI1NSksXG4gIC8vICAgICAgIHVfbWFza0VkZ2VTaXplOiAoKSA9PiBkYXRhLm1hc2tFZGdlU2l6ZSxcbiAgLy8gICAgIH0sXG4gIC8vICAgICBwcmltaXRpdmU6ICd0cmlhbmdsZSBzdHJpcCcsXG4gIC8vICAgICBjb3VudDogNCxcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIC0tLS0tLS0tLS0tXG4gIC8vICAgLy8gQW5pbWF0aW9uIExvb3BcbiAgLy8gICAvLyAtLS0tLS0tLS0tLVxuXG4gIC8vICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAvLyAgICAgLy8gdXBkYXRlIG1vdXNlXG4gIC8vICAgICB1cGRhdGVSdW5uaW5nID0gdHJ1ZTtcbiAgLy8gICAgIHNjcm9sbFRhcmdldCA9IHdpbmRvdy5zY3JvbGxZO1xuICAvLyAgICAgc2Nyb2xsUG9zID0gbGVycChzY3JvbGxQb3MsIHNjcm9sbFRhcmdldCk7XG5cbiAgLy8gICAgIC8vIERvIHdlYmdsIERyYXcgY2FsbFxuICAvLyAgICAgaWYgKGltYWdlTG9hZGVkKSB7XG4gIC8vICAgICAgIHJlZ2wucG9sbCgpO1xuICAvLyAgICAgICByZWdsLmNsZWFyKHtcbiAgLy8gICAgICAgICBjb2xvcjogWzEsIDEsIDEsIDBdLFxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgZHJhd1F1YWQoKTtcbiAgLy8gICAgIH1cblxuICAvLyAgICAgLy8gYW5pbWF0aW9uIGxvb3BcbiAgLy8gICAgIGlmICggYWxsb3dVcGRhdGUgKSB7XG4gIC8vICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGUpO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgdXBkYXRlUnVubmluZyA9IGZhbHNlO1xuICAvLyAgICAgfVxuICAvLyAgIH1cblxuICAvLyAgIHJlZi5jdXJyZW50LmNsYXNzTGlzdC5hZGQoJ2FsbG93LWFuaW1hdGlvbicpO1xuICAvLyAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGUpO1xuXG5cbiAgLy8gICBmdW5jdGlvbiB0ZXN0VXBkYXRlKCkge1xuICAvLyAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgLy8gICAgICAgaWYgKCB3aW5kb3cuc2Nyb2xsWSA+IHdpbkggKSB7XG4gIC8vICAgICAgICAgYWxsb3dVcGRhdGUgPSBmYWxzZTtcbiAgLy8gICAgICAgICB1cGRhdGUoKTtcbiAgLy8gICAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgICBpZiAoICF1cGRhdGVSdW5uaW5nICkge1xuICAvLyAgICAgICAgICAgYWxsb3dVcGRhdGUgPSB0cnVlO1xuICAvLyAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9XG4gIC8vICAgICB9KVxuICAvLyAgIH1cblxuICAvLyAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0ZXN0VXBkYXRlKTtcbiAgLy8gICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc2l6ZUNhbnZhcyk7XG5cbiAgLy8gICByZXR1cm4gKCgpID0+IHtcbiAgLy8gICAgIGFsbG93VXBkYXRlID0gZmFsc2U7XG4gIC8vICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh1cGRhdGUpO1xuICAvLyAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRlc3RVcGRhdGUpO1xuICAvLyAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHNpemVDYW52YXMpO1xuICAvLyAgIH0pXG5cbiAgLy8gfSwgW3Byb3BzLmltYWdlU3JjXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWRpc3NvbHZlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtZGlzc29sdmVyX19leWVcIj5cbiAgICAgICAgICA8SG9tZXBhZ2VJbGx1c3RyYXRpb24gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHsvKiA8ZGl2IGNsYXNzTmFtZT1cImMtZGlzc29sdmVyLWNhbnZhc1wiIHJlZj17cmVmfT5cbiAgICAgICAgPGNhbnZhcyBpZD1cInJlZ2wtY2FudmFzXCIgY2xhc3NOYW1lPVwiYy1kaXNzb2x2ZXJfX2NhbnZhc1wiPjwvY2FudmFzPlxuICAgICAgPC9kaXY+ICovfVxuICAgIDwvPlxuICApXG59IiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEhvbWVwYWdlSGVyb1RpdGxlQ2FyZCBmcm9tICcuLi9Ib21lcGFnZUhlcm9UaXRsZUNhcmQvSG9tZXBhZ2VIZXJvVGl0bGVDYXJkJztcbmltcG9ydCBIb21lcGFnZUhlcm9EaXNzb2x2ZXIgZnJvbSAnLi4vSG9tZXBhZ2VIZXJvRGlzc29sdmVyL0hvbWVwYWdlSGVyb0Rpc3NvbHZlcic7XG5pbXBvcnQge0dhdHNieUltYWdlLCBnZXRJbWFnZX0gZnJvbSAnZ2F0c2J5LXBsdWdpbi1pbWFnZSc7XG4vLyBpbXBvcnQge2lzTW9iaWxlfSBmcm9tICdyZWFjdC1kZXZpY2UtZGV0ZWN0JztcblxuXG5jb25zdCBIb21lcGFnZUhlcm9QYXR0
1ZXJuID0gKHtpbWFnZSwgYmxvY2tUZXh0LCBjdGEsIGV5ZWJyb3d9KSA9PiB7XG4gIGNvbnN0IFtpc01vYmlsZSwgc2V0SXNNb2JpbGVdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRJc01vYmlsZSgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvTW9iaS8pKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWVwYWdlLWhlcm9cIj5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJ1LXNyLW9ubHlcIj5Ib21lPC9oMT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1oZXJvX19jb250ZW50XCI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjLWhvbWVwYWdlLWhlcm9fX2ltYWdlIGMtaG9tZXBhZ2UtaGVyb19faW1hZ2UtLXN0YXRpY1wiPlxuICAgICAgICAgIDxHYXRzYnlJbWFnZVxuICAgICAgICAgICAgYWx0PXtpbWFnZT8uaW1nQWx0fVxuICAgICAgICAgICAgaW1hZ2U9e2dldEltYWdlKGltYWdlPy5pbWdEYXRhKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgeyBpc01vYmlsZSA/XG4gICAgICAgICAgICBpbWFnZSAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lcGFnZS1oZXJvX19pbWFnZSBjLWhvbWVwYWdlLWhlcm9fX2ltYWdlLS1zdGF0aWNcIj5cbiAgICAgICAgICAgICAgICA8R2F0c2J5SW1hZ2VcbiAgICAgICAgICAgICAgICAgIGFsdD17aW1hZ2U/LmltZ0FsdH1cbiAgICAgICAgICAgICAgICAgIGltYWdlPXtnZXRJbWFnZShpbWFnZT8uaW1nRGF0YSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApXG4gICAgICAgICAgOlxuICAgICAgICAgICAgaW1hZ2UgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZXBhZ2UtaGVyb19faW1hZ2VcIj5cbiAgICAgICAgICAgICAgICA8SG9tZXBhZ2VIZXJvRGlzc29sdmVyIGltYWdlU3JjPXtpbWFnZS5pbWdEYXRhLmNoaWxkSW1hZ2VTaGFycC5nYXRzYnlJbWFnZURhdGEuaW1hZ2VzLmZhbGxiYWNrLnNyY30gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICA8SG9tZXBhZ2VIZXJvVGl0bGVDYXJkIGV5ZWJyb3c9e2V5ZWJyb3d9IGJsb2NrVGV4dD17YmxvY2tUZXh0fSBjdGE9e2N0YX0gLz5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuZXhwb3J0IGRlZmF1bHQgSG9tZXBhZ2VIZXJvUGF0dGVybjtcblxuSG9tZXBhZ2VIZXJvUGF0dGVybi5wcm9wVHlwZXMgPSB7XG4gIGltYWdlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGltZ0FsdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpbWdEYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICB9KSxcbiAgYmxvY2tUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleWVicm93OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjdGE6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB9KSxcbn07XG4iLCJleHBvcnQge2RlZmF1bHR9IGZyb20gJy4vSG9tZXBhZ2VIZXJvUGF0dGVybic7XG4iLCJpbXBvcnQgUmVhY3QsIHt1c2VSZWZ9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUd2l0dGVyIGZyb20gJy4uL0ljb25zL1R3aXR0ZXInO1xuaW1wb3J0IEluc3RhZ3JhbSBmcm9tICcuLi9JY29ucy9JbnN0YWdyYW0nO1xuaW1wb3J0IEZhY2Vib29rIGZyb20gJy4uL0ljb25zL0ZhY2Vib29rJztcbmltcG9ydCB1c2VPblNjcmVlbiBmcm9tICcuLi8uLi91dGlscy91c2VPblNjcmVlbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEZ1dGhlckV4cGxvcmF0aW9uQ2FyZChwcm9wcykge1xuICBjb25zdCBmYWRlUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGZhZGVJblZpZXcgPSB1c2VPblNjcmVlbihmYWRlUmVmKTtcblxuICBjb25zdCB0aWxlUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IHRpbGVJblZpZXcgPSB1c2VPblNjcmVlbih0aWxlUmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1mdXJ0aGVyRXhwbG9yYXRpb25DYWxsb3V0X19zZWN0aW9uXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17YGMtZnVydGhlckV4cGxvcmF0aW9uQ2FsbG91dF9faW1hZ2UgdS13YXRjaCB1LXdhdGNoLS1mYWRlLWluICR7XG4gICAgICAgICAgZmFkZUluVmlldyA/ICdpbi12aWV3JyA6ICcnXG4gICAgICAgIH1gfVxuICAgICAgICBzdHlsZT17e2JhY2tncm91bmRJbWFnZTogYHVybCgke3Byb3BzLml0ZW0uaW1hZ2V9KWB9fVxuICAgICAgICByZWY9e2ZhZGVSZWZ9XG4gICAgICA+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZ1cnRoZXItZXhwbG9yYXRpb24tY2FsbG91dF9fdGV4dC1sb2dvLXdyYXBwZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17YGZ1cnRoZXItZXhwbG9yYXRpb24tY2FsbG91dF9fdGV4dCB1LXdhdGNoIHUtd2F0Y2gtLXNsaWRlLXJpZ2h0ICR7XG4gICAgICAgICAgICB0aWxlSW5WaWV3ID8gJ2luLXZpZXcnIDogJydcbiAgICAgICAgICB9YH1cbiAgICAgICAgICByZWY9e3RpbGVSZWZ9XG4gICAgICAgID5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJmdXJ0aGVyLWV4cGxvcmF0aW9uLWNhbGxvdXRfX3RleHQtdGFnICB1LXRleHQtdXBwZXJjYXNlIGYtdGFnXCI+XG4gICAgICAgICAgICB7cHJvcHMuaXRlbS5leWVicm93fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8aDZcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImYtaGVhZGluZy02IGZ1cnRoZXItZXhwbG9yYXRpb24tY2FsbG91dF9fdGV4dC1kZXNjXCJcbiAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBwcm9wcy5pdGVtLmRlc2NyaXB0aW9ufX1cbiAgICAgICAgICA+PC9oNj5cbiAgICAgICAgICB7cHJvcHMuaXRlbS50d2l0dGVyVXJsICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZnVydGhlci1leHBsb3JhdGlvbi1jYWxsb3V0X19pY29uc1wiPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZ1cnRoZXItZXhwbG9yYXRpb24tY2FsbG91dF9faWNvblwiXG4gICAgICAgICAgICAgICAgaHJlZj17cHJvcHMuaXRlbS50d2l0dGVyVXJ
1sfVxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8VHdpdHRlciAvPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZnVydGhlci1leHBsb3JhdGlvbi1jYWxsb3V0X19pY29uXCJcbiAgICAgICAgICAgICAgICBocmVmPXtwcm9wcy5pdGVtLmluc3RhZ3JhbVVybH1cbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEluc3RhZ3JhbSAvPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZnVydGhlci1leHBsb3JhdGlvbi1jYWxsb3V0X19pY29uXCJcbiAgICAgICAgICAgICAgICBocmVmPXtwcm9wcy5pdGVtLmZhY2Vib29rVXJsfVxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RmFjZWJvb2sgLz5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vYmlsZS1sb2dvc1wiPlxuICAgICAgICAgICAge3Byb3BzLml0ZW0udHdpdHRlclVybCAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9iaWxlLWxvZ29zX19mdXJ0aGVyLWV4cGxvcmF0aW9uLWNhbGxvdXQtaWNvbnNcIj5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibW9iaWxlLWxvZ29zX19mdXJ0aGVyLWV4cGxvcmF0aW9uLWNhbGxvdXQtaWNvblwiXG4gICAgICAgICAgICAgICAgICBocmVmPXtwcm9wcy5pdGVtLnR3aXR0ZXJVcmx9XG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFR3aXR0ZXIgLz5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1vYmlsZS1sb2dvc19fZnVydGhlci1leHBsb3JhdGlvbi1jYWxsb3V0LWljb25cIlxuICAgICAgICAgICAgICAgICAgaHJlZj17cHJvcHMuaXRlbS5pbnN0YWdyYW1Vcmx9XG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgcmVsPVwibm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEluc3RhZ3JhbSAvPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibW9iaWxlLWxvZ29zX19mdXJ0aGVyLWV4cGxvcmF0aW9uLWNhbGxvdXQtaWNvblwiXG4gICAgICAgICAgICAgICAgICBocmVmPXtwcm9wcy5pdGVtLmZhY2Vib29rVXJsfVxuICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgIHJlbD1cIm5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxGYWNlYm9vayAvPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgRnV0aGVyRXhwbG9yYXRpb25DYXJkIGZyb20gJy4uL0Z1cnRoZXJFeHBsb3JhdGlvbkNhcmQvRnVydGhlckV4cGxvcmF0aW9uQ2FyZCc7XG5cbmNvbnN0IEZ1cnRoZXJFeHBsb3JhdGlvbkNhbGxvdXQgPSAoe2RhdGF9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJjLWZ1cnRoZXJFeHBsb3JhdGlvbkNhbGxvdXRcIj5cbiAgICAgIHtkYXRhLm1hcCgoaXRlbSwgaWR4KSA9PiA8RnV0aGVyRXhwbG9yYXRpb25DYXJkIGl0ZW09e2l0ZW19IGtleT17aWR4fSAvPil9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuZXhwb3J0IGRlZmF1bHQgRnVydGhlckV4cGxvcmF0aW9uQ2FsbG91dDtcblxuRnVydGhlckV4cGxvcmF0aW9uQ2FsbG91dC5wcm9wVHlwZXMgPSB7XG4gIGRhdGE6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBleWVicm93OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgdHdpdHRlclVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGluc3RhZ3JhbVVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGZhY2Vib29rVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsaW5rOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgaW1hZ2U6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSlcbiAgKSxcbn07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBIb21lR3JpZENhcmQgZnJvbSAnLi4vSG9tZUdyaWRDYXJkL0hvbWVHcmlkQ2FyZCc7XG5pbXBvcnQgeyBoYW5kbGVJbWFnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hhbmRsZUltYWdlcyc7XG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnO1xuaW1wb3J0IHsgZ2V0Q2FyZERhdGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlVGltZSc7XG5pbXBvcnQgQ3RhVGV4dEFycm93IGZyb20gJy4uL0N0YVRleHRBcnJvdy9DdGFUZXh0QXJyb3cnO1xuaW1wb3J0IE9yZ0xpbmsgZnJvbSAnLi4vT3JnTGluay9PcmdMaW5rJztcbmltcG9ydCBCcmFuY2hCb3R0b21JbWcgZnJvbSAnLi4vLi4vaW1hZ2VzL2JyYW5jaC1ib3R0b20ucG5nJztcbmltcG9ydCBJblZpZXdXYXRjaGVyIGZyb20gJy4uL0luVmlld1dhdGNoZXIvSW5WaWV3V2F0Y2hlcic7XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG9tZUNvbHVtbnMoe29uVmlldywgZXZlbnRzLCBmZWF0dXJlZEV2ZW50RGF0YT1udWxsfSkge1xuXG4gIGNvbnN0IHRvZGF5ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdG9kYXlVdGNEYXRlU3RyaW5nID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyB0aW1lWm9uZTogJ1VUQycgfSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRvZGF5VXRjRGF0ZVN0cmluZykuZ2V0VGltZSgpO1xuICB9LCBbXSk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlRGF0ZShkYXRlKSB7XG4gICAgY29uc3QgdXRjRGF0ZVN0cmluZyA9IG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IHRpbWVab25lOiAnVVRDJyB9KTtcbiAgICByZXR1cm4gbmV3IERhdGUodXRjRGF0ZVN0cmluZykuZ2V0VGltZSgpXG4gIH1cbmZ1bmN0aW9uIGRlY29kZUhUTUwoaHRtbCkge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY29uc3QgdHh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICAgIHR4dC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybi
1B0eHQudmFsdWU7XG4gIH1cbiAgcmV0dXJuIGh0bWw7IC8vIGZhbGxiYWNrIGZvciBTU1Jcbn1cblxuICBsZXQgc29ydGVkRXZlbnRzID0gW107XG4gIGxldCBmZWF0dXJlZEV2ZW50O1xuXG4gIGV2ZW50cy5tYXAoZXZlbnQgPT4ge1xuICAgIGNvbnN0IGV2ZW50RGF0ZSA9IGhhbmRsZURhdGUoZXZlbnQubm9kZS5maWVsZF9ldmVudF9kYXRlc1swXS52YWx1ZSlcbiAgICBpZiAoZXZlbnREYXRlID49IHRvZGF5KSB7XG4gICAgICBzb3J0ZWRFdmVudHMucHVzaChldmVudC5ub2RlKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfSlcbiAgXG4gIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHNvcnRlZEV2ZW50cy5zb3J0KChhLCBiKSA9PiAoYS5maWVsZF9ldmVudF9kYXRlc1swXS52YWx1ZSA+IGIuZmllbGRfZXZlbnRfZGF0ZXNbMF0udmFsdWUgPyAxIDogLTEpKTtcbiAgICBpZiAoZmVhdHVyZWRFdmVudERhdGEpIHtcbiAgICAgIC8vIHVzZSBtYW51YWxseSBlbnRlcmVkIGZlYXR1cmVkIGV2ZW50IGlmIGl0IGV4aXN0c1xuICAgICAgZmVhdHVyZWRFdmVudCA9IGZlYXR1cmVkRXZlbnREYXRhXG4gICAgICBzb3J0ZWRFdmVudHMgPSBzb3J0ZWRFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuaWQgIT09IGZlYXR1cmVkRXZlbnREYXRhLmlkKVxuICAgICAgLy8gcmVtb3ZlIGV4dHJhIGl0ZW0gZnJvbSBxdWVyeSwgbGlzdCBzaG91bGQgYmUgbm8gbG9uZ2VyIHRoYW4gM1xuICAgICAgaWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICAgIHNvcnRlZEV2ZW50cy5wb3AoKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2Ugc29vbmVzdCBldmVudCBhcyBmZWF0dXJlZCBldmVudFxuICAgICAgZmVhdHVyZWRFdmVudCA9IHNvcnRlZEV2ZW50cy5zaGlmdCgpO1xuICAgIH1cbiAgfVxuICBjb25zdCBmZWF0dXJlZE9uVmlldyA9IG9uVmlldy5yZWxhdGlvbnNoaXBzLmZpZWxkX2ZlYXR1cmVkX29uX3ZpZXdfaXRlbTtcbiAgY29uc3Qgb25WaWV3TGlzdCA9IG9uVmlldy5yZWxhdGlvbnNoaXBzLmZpZWxkX29uX3ZpZXdfbGlzdDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWNvbHVtbnMgby1iYXNpYy1ncmlkXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZS1jb2x1bW5zX19vbi12aWV3XCI+XG4gICAgICAgIDxoMiBjbGFzc05hbWU9XCJmLWhlYWRpbmctMyBjLWhvbWUtY29sdW1uc19faGVhZGluZ1wiPk9uIFZpZXc8L2gyPlxuICAgICAgICB7ZmVhdHVyZWRPblZpZXcgJiYgKDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWQtY2FyZFwiPlxuICAgICAgICAgIDxIb21lR3JpZENhcmRcbiAgICAgICAgICAgIHR5cGU9e2ZlYXR1cmVkT25WaWV3LnJlbGF0aW9uc2hpcHM/LmZpZWxkX2V4aGliaXRpb25fdHlwZT8ubmFtZX1cbiAgICAgICAgICAgIHRpdGxlPXtmZWF0dXJlZE9uVmlldy5maWVsZF9kaXNwbGF5X3RpdGxlfVxuICAgICAgICAgICAgbGluaz17ZmVhdHVyZWRPblZpZXcucGF0aC5hbGlhc31cbiAgICAgICAgICAgIGltYWdlPXtoYW5kbGVJbWFnZShmZWF0dXJlZE9uVmlldy5yZWxhdGlvbnNoaXBzLmZpZWxkX2ZlYXR1cmVkX2ltYWdlKX1cbiAgICAgICAgICAgIGZlYXR1cmVkPXt0cnVlfVxuICAgICAgICAgICAgb25WaWV3PXt0cnVlfVxuICAgICAgICAgICAgZGF0ZXM9e2ZlYXR1cmVkT25WaWV3LmZpZWxkX2V4aGliaXRpb25fZGF0ZXN9XG4gICAgICAgICAgICBkaXNwbGF5RGF0ZVRleHQ9e2ZlYXR1cmVkT25WaWV3LmZpZWxkX2RhdGVfZGlzcGxheV90ZXh0fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2Pil9XG4gICAgICAgIHtvblZpZXdMaXN0ICYmIChcbiAgICAgICAgPHVsIGNsYXNzTmFtZT1cImMtaG9tZS1jb2x1bW5zX19saXN0XCI+XG4gICAgICAgICAge29uVmlld0xpc3QubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9leGhpYml0aW9uX3R5cGU/Lm5hbWVcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlEYXRlVGV4dCA9IGl0ZW0uZmllbGRfZGF0ZV9kaXNwbGF5X3RleHQ7XG4gICAgICAgICAgICBjb25zdCBkYXRlcyA9IGl0ZW0uZmllbGRfZGlzcGxheV9kYXRlcyAmJiBpdGVtLmZpZWxkX2V4aGliaXRpb25fZGF0ZXMgID8gZ2V0Q2FyZERhdGVzKGl0ZW0uZmllbGRfZXhoaWJpdGlvbl9kYXRlcykgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cImMtaG9tZS1jb2x1bW5zX19saXN0LS1pdGVtXCIga2V5PXtuYW5vaWQoKX0+XG4gICAgICAgICAgICAgICAgPE9yZ0xpbmsgY2xhc3NOYW1lPVwidS1ob3Zlci1wYXJlbnRcIiB0bz17aXRlbS5wYXRoLmFsaWFzfT5cbiAgICAgICAgICAgICAgICB7bGFiZWwgJiYgKDxwIGNsYXNzTmFtZT1cImYtc3VidGFnIGMtaG9tZS1jb2x1bW5zX19saXN0LS1sYWJlbFwiPntsYWJlbH08L3A+KX1cbiAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwiZi1oZWFkaW5nLTUgYy1ob21lLWNvbHVtbnNfX2xpc3QtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInUtaG92ZXItdGV4dCB1LWhvdmVyLXRleHQtLXN0cm9uZ1wiPntpdGVtLmZpZWxkX2Rpc3BsYXlfdGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICB7ZGlzcGxheURhdGVUZXh0ICYmIChcbiAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdmLWJvZHktc20gYy1ob21lLWNvbHVtbnNfX2xpc3QtLWRhdGUnPntkaXNwbGF5RGF0ZVRleHR9PC9wPlxuICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgIHsoZGF0ZXMgJiYgIWRpc3BsYXlEYXRlVGV4dCkgJiYgKFxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdmLWJvZHktc20gYy1ob21lLWNvbHVtbnNfX2xpc3QtLWRhdGUnPntkYXRlcy5zdGFydERhdGV9IC0ge2RhdGVzLmVuZERhdGV9PC9wPlxuICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgIDwvT3JnTGluaz5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgKX0pfVxuICAgICAgICA8L3VsPil9XG4gICAgICAgIDxDdGFUZXh0QXJyb3cgYmxhY2s9e3RydWV9IHRleHQ9XCJTZWUgQWxsIE9uIFZpZXdcIiBsaW5rPVwiL29uLXZpZXdcIiAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWNvbHVtbnNfX2V2ZW50c1wiPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPVwiZi1oZWFkaW5nLTMgYy1ob21lLWNvbHVtbnNfX2hlYWRpbmdcIj5VcGNvbWluZyBFdmVudHM8L2gyPlxuICAgICAgICB7KCFmZWF0dXJlZEV2ZW50ICYmIHNvcnRlZEV2ZW50cy5sZW5ndGggPT0gMCkgJiYgKFxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImYtYm9keVwiPlRoZXJlIGFyZSBubyB1cGNvbWluZyBldmVudHMgYXQgdGhpcyB0aW1lLjwvcD5cbiAgICAgICAgKX1cbiAgICAgICAge2ZlYXR1cmVkRXZlbnQgJiYgKDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWdyaWQtY2FyZFwiPlxuICAgICAgICAgIDxIb21lR3JpZENhcmRcbiAgICAgICAgICAgI
1HRpdGxlPXtmZWF0dXJlZEV2ZW50LmZpZWxkX2Rpc3BsYXlfdGl0bGV9XG4gICAgICAgICAgICBsaW5rPXtmZWF0dXJlZEV2ZW50LnBhdGguYWxpYXN9XG4gICAgICAgICAgICBkYXRlPXtmZWF0dXJlZEV2ZW50LmZpZWxkX2RhdGVfZGlzcGxheV90ZXh0ID8gZmVhdHVyZWRFdmVudC5maWVsZF9kYXRlX2Rpc3BsYXlfdGV4dCA6IGhhbmRsZURhdGUoZmVhdHVyZWRFdmVudC5maWVsZF9ldmVudF9kYXRlc1swXS52YWx1ZSl9XG4gICAgICAgICAgICBpbWFnZT17aGFuZGxlSW1hZ2UoZmVhdHVyZWRFdmVudC5yZWxhdGlvbnNoaXBzLmZpZWxkX2ZlYXR1cmVkX2ltYWdlKX1cbiAgICAgICAgICAgIGZlYXR1cmVkPXt0cnVlfVxuICAgICAgICAgICAgZGF0ZXM9e2ZlYXR1cmVkRXZlbnQuZmllbGRfZXZlbnRfZGF0ZXN9XG4gICAgICAgICAgICBkaXNwbGF5RGF0ZVRleHQ9e2ZlYXR1cmVkRXZlbnQuZmllbGRfZGF0ZV9kaXNwbGF5X3RleHR9XG4gICAgICAgICAgICBldmVudD17dHJ1ZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj4pfVxuXG4gICAgICAgIHtzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImMtaG9tZS1jb2x1bW5zX19saXN0XCI+XG4gICAgICAgICAgICB7c29ydGVkRXZlbnRzLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoaSA+IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZGlzcGxheURhdGVUZXh0ID0gaXRlbS5maWVsZF9kYXRlX2Rpc3BsYXlfdGV4dDtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZUxpc3QgPSBbXVxuICAgICAgICAgICAgICBpdGVtLmZpZWxkX2V2ZW50X2RhdGVzLm1hcChkYXRlID0+IChcbiAgICAgICAgICAgICAgICBkYXRlTGlzdC5wdXNoKGdldENhcmREYXRlcyhkYXRlKSlcbiAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8bGkgY2x
1hc3NOYW1lPVwiYy1ob21lLWNvbHVtbnNfX2xpc3QtLWl0ZW0gIHUtaG92ZXItdGV4dC1wYXJlbnRcIiBrZXk9e25hbm9pZCgpfT5cbiAgICAgICAgICAgICAgICAgIDxPcmdMaW5rIHRvPXtpdGVtLnBhdGguYWxpYXN9PlxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cImYtaGVhZGluZy01IGMtaG9tZS1jb2x1bW5zX19saXN0LS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICBcbiBcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICBjbGFzc05hbWU9XCJ1LWhvdmVyLXRleHQgdS1ob3Zlci10ZXh0LS1zdHJvbmdcIlxuICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGRlY29kZUhUTUwoaXRlbS5maWVsZF9kaXNwbGF5X3RpdGxlKSB9fVxuLz5cbiAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICB7ZGlzcGxheURhdGVUZXh0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSdmLWJvZHktc20gYy1ob21lLWNvbHVtbnNfX2xpc3QtLWRhdGUnPntkaXNwbGF5RGF0ZVRleHR9PC9wPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHsoZGF0ZUxpc3QubGVuZ3RoID4gMCAmJiAhZGlzcGxheURhdGVUZXh0KSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGVMaXN0Lm1hcChkYXRlID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9J2YtYm9keS1zbSBjLWhvbWUtY29sdW1uc19fbGlzdC0tZGF0ZSc+e2RhdGUuc3RhcnREYXRlfSB7ZGF0ZS5zdGFydFRpbWV9IC0ge2RhdGUuZW5kVGltZX08L3A+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9PcmdMaW5rPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvdWw+KX1cbiAgICAgICAgPEN0YVRleHRBcnJvdyBibGFjaz17dHJ1ZX0gdGV4dD1cIlNlZSBBbGwgRXZlbnRzXCIgbGluaz1cIi9ldmVudHNcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZS1jb2x1bW5zX19icmFuY2gtYm90dG9tXCI+XG4gICAgICAgIDxJblZpZXdXYXRjaGVyIC8+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYy1ob21lLWNvbHVtbnNfX2JyYW5jaC1ib3R0b20taW5uZXJcIj5cbiAgICAgICAgICA8aW1nIHNyYz17QnJhbmNoQm90dG9tSW1nfSBhbHQ9XCJcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTGF5b3V0IGZyb20gJy4uL0xheW91dCc7XG5pbXBvcnQgTW9zdExvdmVkIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvTW9zdExvdmVkL01vc3RMb3ZlZCc7XG5pbXBvcnQgSG9tZXBhZ2VTdG9yaWVzIGZyb20gJy4uLy4uL2NvbXBvbmVudHMvSG9tZXBhZ2VTdG9yaWVzL0hvbWVwYWdlU3Rvcmllcyc7XG5pbXBvcnQgSG9tZUdyaWQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Ib21lR3JpZC9Ib21lR3JpZCc7XG5pbXBvcnQgSG9tZXBhZ2VIZXJvUGF0dGVybiBmcm9tICcuLi8uLi9jb21wb25lbnRzL0hvbWVwYWdlSGVyb1BhdHRlcm4nO1xuaW1wb3J0IEZ1cnRoZXJFeHBsb3JhdGlvbkNhbGxvdXQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9GdXJ0aGVyRXhwbG9yYXRpb25DYWxsb3V0L0Z1cnRoZXJFeHBsb3JhdGlvbkNhbGxvdXQnO1xuaW1wb3J0IHsgaGFuZGxlSGVyb0ltYWdlLCBoYW5kbGVJbWFnZSwgY2hvb3NlSW1hZ2VCeUNhcmRUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlSW1hZ2VzJztcbmltcG9ydCBIb21lQ29sdW1ucyBmcm9tICcuLi8uLi9jb21wb25lbnRzL0hvbWVDb2x1bW5zL0hvbWVDb2x1bW5zJztcblxuY29uc3QgSG9tZXBhZ2UgPSAoeyBkYXRhIH0pID0+IHtcbiAgY29uc3QgaG9tZXBhZ2VEYXRhID0gZGF0YT8uYWxsTm9kZUhvbWVwYWdlPy5lZGdlc1swXT8ubm9kZTtcbiAgY29uc3QgaGVhZGVySW1nID0gaGFuZGxlSGVyb0ltYWdlKGhvbWVwYWdlRGF0YSk7XG5cbiAgY29uc3QgaGVybyA9IHtcbiAgICBibG9ja1RleHQ6IGhvbWVwYWdlRGF0YT8uZmllbGRfZGlzcGxheV90aXRsZSxcbiAgICBleWVicm93OiBob21lcGFnZURhdGE/LmZpZWxkX2hvbWVwYWdlX2hlcm9fZXllYnJvd190ZXh0LFxuICAgIGN0YToge1xuICAgICAgdGl0bGU6IGhvbWVwYWdlRGF0YT8uZmllbGRfaG9tZXBhZ2VfaGVyb19saW5rLnRpdGxlLFxuICAgICAgdXJsOiBob21lcGFnZURhdGE/LmZpZWxkX2hvbWVwYWdlX2hlcm9fbGluay51cmlfYWxpYXMsXG4gICAgICBzaXRlOiBob21lcGFnZURhdGE/LmZpZWxkX2hvbWVwYWdlX2hlcm9fbGluay51cmlfc2l0ZSxcbiAgICAgIHR5cGU6IGhvbWVwYWdlRGF0YT8uZmllbGRfaG9tZXBhZ2VfaGVyb19saW5rLnVyaV9idW5kbGUsXG4gICAgfSxcbiAgICBpbWFnZTogaGVhZGVySW1nLmltZ0RhdGE/LmNoaWxkSW1hZ2VTaGFycCAmJiB7XG4gICAgICBpbWdEYXRhOiBoZWFkZXJJbWcuaW1nRGF0YSxcbiAgICAgIGltZ0FsdDogaGVhZGVySW1nLmltZ0FsdCxcbiAgICB9LFxuICB9O1xuXG4gIC8vIGZhbGxiYWNrIGltYWdlc1xuICBjb25zdCBnbG9iYWxGYWxsYmFja0ltZyA9XG4gICAgZGF0YT8uYWxsQmxvY2tDb250ZW50RmFsbGJhY2tJbWFnZXNCeVR5cGU/LmVkZ2VzWzBdPy5ub2RlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9nbG9iYWxfaW1hZ2VfZmFsbGJhY2s7XG5cbiAgY29uc3QgZXhoaWJpdGlvbkZhbGxiYWNrSW1nID0gZGF0YT8uYWxsQmxvY2tDb250ZW50RmFsbGJhY2tJbWFnZXNCeVR5cGU/LmVkZ2VzWzBdPy5ub2RlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9leGhpYml0aW9uX2ZhbGxiYWNrX2ltYWdlO1xuICBjb25zdCBldmVudEZhbGxiYWNrSW1nID0gZGF0YT8uYWxsQmxvY2tDb250ZW50RmFsbGJhY2tJbWFnZXNCeVR5cGU/LmVkZ2VzWzBdPy5ub2RlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9ldmVudF9mYWxsYmFja19pbWFnZTtcbiAgY29uc3QgcG9kY2FzdEZhbGxiYWNrSW1nID0gZGF0YT8uYWxsQmxvY2tDb250ZW50RmFsbGJhY2tJbWFnZXNCeVR5cGU/LmVkZ2VzWzBdPy5ub2RlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9wb2RjYXN0X2ltYWdlX2ZhbGxiYWNrO1xuICBjb25zdCBwb3N0RmFsbGJhY2tJbWcgPSBkYXRhPy5hbGxCbG9ja0NvbnRlbnRGYWxsYmFja0ltYWdlc0J5VHlwZT8uZWRnZXNbMF0/Lm5vZGU/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX3Bvc3RfaW1hZ2VfZmFsbGJhY2s7XG4gIGNvbnN0IHN0b3JlSXRlbUZhbGxiYWNrSW1nID0gZGF0YT8uYWxsQmxvY2tDb250ZW50RmFsbGJhY2tJbWFnZXNCeVR5cGU/LmVkZ2VzWzBdPy5ub2RlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9zdG9yZV9pdGVtX2ltYWdlX2ZhbGxiYWNrO1xuICBjb25zdCB2aWRlb0l0ZW1GYWxsYmFja0ltZyA9IGRhdGE/LmFsbEJsb2NrQ29udGVudEZhbGxiYWNrSW1hZ2VzQnlUeXBlPy5lZGdlc1swXT8ubm9kZT8ucmVsYXRpb25zaGlwcz8uZmllbGRfdmlkZW9faXRlbV9pbWFnZV9mYWxsYmFjaztcblxuICBjb25zdCBmYWxsYmFja0ltZ0xvb2t1cCA9IHtcbiAgICBcIkdsb2JhbFwiOiBnbG9iYWxGYWxsYmFja0ltZyxcbiAgICBcIkV4aGliaXRpb25cIjogZXh
1oaWJpdGlvbkZhbGxiYWNrSW1nLFxuICAgIFwiUG9zdFwiOiBwb3N0RmFsbGJhY2tJbWcsXG4gICAgXCJWaWRlbyBJdGVtXCI6IHZpZGVvSXRlbUZhbGxiYWNrSW1nLFxuICAgIFwiUG9kY2FzdFwiOiBwb2RjYXN0RmFsbGJhY2tJbWcsXG4gICAgXCJGZWF0dXJlZCBPYmplY3RcIjogZ2xvYmFsRmFsbGJhY2tJbWcsXG4gICAgXCJFdmVudFwiOiBldmVudEZhbGxiYWNrSW1nLFxuICAgIFwiU3RvcmUgSXRlbVwiOiBzdG9yZUl0ZW1GYWxsYmFja0ltZyxcbiAgfTtcblxuXG4gIGNvbnN0IGZsZXhpYmxlQ29udGVudCA9IGhvbWVwYWdlRGF0YT8ucmVsYXRpb25zaGlwcz8uZmllbGRfZmxleGlibGVfY29udGVudDtcbiAgY29uc3QgaG9tZXBhZ2VGbGV4aWJsZUNvbXBvbmVudHMgPSBmbGV4aWJsZUNvbnRlbnQgPT4ge1xuICAgIGNvbnN0IGZsZXhpYmxlQ29udGVudENvbXBvbmVudHMgPSBmbGV4aWJsZUNvbnRlbnQubWFwKChmLCBpKSA9PiB7XG4gICAgICBzd2l0Y2ggKGYuaW50ZXJuYWw/LnR5cGUpIHtcbiAgICAgICAgLy8gY2FzZSAncGFyYWdyYXBoX19jYWxsb3V0X2dyaWQnOlxuICAgICAgICAvLyAgIGNvbnN0IGNhcmREYXRhID0gZi5yZWxhdGlvbnNoaXBzLmZpZWxkX2NhbGxvdXRfZ3JpZF9pdGVtcy5tYXAoaXRlbSA9PiB7XG5cbiAgICAgICAgLy8gICAgIC8vIG5lZWQgYWxpYXMgZm9yIGZlYXR1cmVkIG9iamVjdFxuICAgICAgICAvLyAgICAgY29uc3QgaG9tZUdyaWRMaW5rID0gaXRlbS5wYXRoPy5hbGlhcyA/IGl0ZW0ucGF0aC5hbGlhcyA6ICcjJztcbiAgICAgICAgLy8gICAgIGNvbnN0IGdyaWRJbWcgPSBjaG9vc2VJbWFnZUJ5Q2FyZFR5cGUoaXRlbSwgZmFsbGJhY2tJbWdMb29rdXApO1xuICAgICAgICAvLyAgICAgY29uc3QgZ3JpZEltZ1Byb2Nlc3NlZCA9IGhhbmRsZUltYWdlKGdyaWRJbWcpO1xuXG4gICAgICAgIC8vICAgICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgICB0eXBlOiBpdGVtLnJlbGF0aW9uc2hpcHM/Lm5vZGVfdHlwZT8ubmFtZSxcbiAgICAgICAgLy8gICAgICAgdGl0bGU6IGl0ZW0uZmllbGRfZGlzcGxheV90aXRsZSxcbiAgICAgICAgLy8gICAgICAgbGluazogaG9tZUdyaWRMaW5rLFxuICAgICAgICAvLyAgICAgICBoYXBwZW5pbmdOb3c6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICBpbWFnZTogZ3JpZEltZ1Byb2Nlc3NlZC5pbWdEYXRhPy5jaGlsZEltYWdlU2hhcnAgJiYge1xuICAgICAgICAvLyAgICAgICAgIGltZ0RhdGE6IGdyaWRJbWdQcm9jZXNzZWQuaW1nRGF0YSxcbiAgICAgICAgLy8gICAgICAgICBpbWdBbHQ6IGdyaWRJbWdQcm9jZXNzZWQuaW1nQWx0LFxuICAgICAgICAvLyAgICAgICB9LFxuICAgICAgICAvLyAgICAgICBzaXRlOiBpdGVtLnJlbGF0aW9uc2hpcHM/LmZpZWxkX3NpdGUsXG4gICAgICAgIC8vICAgICAgIGxpbmtUeXBlOiBpdGVtLnJlbGF0aW9uc2hpcHM/Lm5vZGVfdHlwZT8uZHJ1cGFsX2ludGVybmFsX190eXBlLFxuICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gICByZXR1cm4gKFxuICAgICAgICAvLyAgICAgPGRpdiBrZXk9e2YuaWR9PlxuICAgICAgICAvLyAgICAgICA8SG9tZUdyaWQgY2FyZERhdGE9e2NhcmREYXRhfSBwb3NpdGlvbj17aX0gLz5cbiAgICAgICAgLy8gICAgIDwvZGl2PlxuICAgICAgICAvLyAgICk7XG4gICAgICAgIGNhc2UgJ3BhcmFncmFwaF9fb25fdmlld19jb2x1bW4nOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxIb21lQ29sdW1ucyBvblZpZXc9e2Z9IGV2ZW50cz17ZGF0YS5hbGxOb2RlRXZlbnQuZWRnZXN9IGZlYXR1cmVkRXZlbnREYXRhPXtmLnJlbGF0aW9uc2hpcHM/LmZpZWxkX2ZlYXR1cmVkX2V2ZW50fSAvPlxuICAgICAgICApO1xuICAgICAgICBjYXNlICdwYXJhZ3JhcGhfX21vc3RfbG92ZWRfY3RhX3NsaWRlcic6XG4gICAgICAgICAgY29uc3QgbW9zdExvdmVkU2xpZGVyRGF0YSA9IGYucmVsYXRpb25zaGlwcy5maWVsZF9tb3N0X2xvdmVkX3NsaWRlcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBsZXQgZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgbGV0IGV4dGVybmFsVGl0bGU7XG4gICAgICAgICAgICBsZXQgZXh0ZXJuYWxJbWFnZTtcbiAgICAgICAgICAgIGlmIChpdGVtLmZpZWxkX2NhbGxvdXQxX2xpbmsgJiYgaXRlbS5yZWxhdGlvbnNoaXBzLmZpZWxkX2ltYWdlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlUHJvY2Vzc2VkID0gaGFuZGxlSW1hZ2UoaXRlbS5yZWxhdGlvbnNoaXBzLmZpZWxkX2ltYWdlKVxuICAgICAgICAgICAgICBleHRlcm5hbExpbmsgPSBpdGVtLmZpZWxkX2NhbGxvdXQxX2xpbmsudXJpO1xuICAgICAgICAgICAgICBleHRlcm5hbFRpdGxlID0gaXRlbS5maWVsZF9jYWxsb3V0MV9saW5rLnRpdGxlO1xuICAgICAgICAgICAgICBleHRlcm5hbEltYWdlID0gaW1hZ2VQcm9jZXNzZWQuaW1nRGF0YT8uY2hpbGRJbWFnZVNoYXJwICYmIHtcbiAgICAgICAgICAgICAgICBpbWdEYXRhOiBpbWFnZVByb2Nlc3NlZC5pbWdEYXRhLFxuICAgICAgICAgICAgICAgIGltZ0FsdDogaW1hZ2VQcm9jZXNzZWQuaW1nQWx0LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0aGlzU2xpZGVySXRlbSA9IGl0ZW0ucmVsYXRpb25zaGlwcz8uZmllbGRfbW9zdF9sb3ZlZF9zbGlkZXJfaXRlbTtcblxuICAgICAgICAgICAgY29uc3QgZ3JpZEltZyA9IGNob29zZUltYWdlQnlDYXJkVHlwZSh0aGlzU2xpZGVySXRlbSwgZmFsbGJhY2tJbWdMb29rdXApO1xuICAgICAgICAgICAgY29uc3QgZ3JpZEltZ1Byb2Nlc3NlZCA9IGhhbmRsZUltYWdlKGdyaWRJbWcpO1xuXG4gICAgICAgICAgICAvLyBuZWVkIGFsaWFzIGZvciBmZWF0dXJlZCBvYmplY3RcbiAgICAgICAgICAgIGNvbnN0IG1vc3RMb3ZlZExpbmsgPSB0aGlzU2xpZGVySXRlbT8ucGF0aD8uYWxpYXNcbiAgICAgICAgICAgICAgPyB0aGlzU2xpZGVySXRlbT8ucGF0aD8uYWxpYXNcbiAgICAgICAgICAgICAgOiAnIyc7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC8vIHR5cGU6IHRoaXNTbGlkZXJJdGVtPy5yZWxhdGlvbnNoaXBzPy5ub2RlX3R5cGU/Lm5hbWUsXG4gICAgICAgICAgICAgI
1HRpdGxlOiBleHRlcm5hbFRpdGxlID8gZXh0ZXJuYWxUaXRsZSA6IHRoaXNTbGlkZXJJdGVtPy5maWVsZF9kaXNwbGF5X3RpdGxlLFxuICAgICAgICAgICAgICBsaW5rOiBleHRlcm5hbExpbmsgPyBleHRlcm5hbExpbmsgOiBtb3N0TG92ZWRMaW5rLFxuICAgICAgICAgICAgICBoYXBwZW5pbmdOb3c6IGZhbHNlLFxuICAgICAgICAgICAgICBpbWFnZTogZXh0ZXJuYWxJbWFnZSA/IHtcbiAgICAgICAgICAgICAgICBpbWdEYXRhOiBleHRlcm5hbEltYWdlLmltZ0RhdGEsXG4gICAgICAgICAgICAgICAgaW1nQWx0OiBleHRlcm5hbEltYWdlLmltZ0FsdCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBpbWdEYXRhOiBncmlkSW1nUHJvY2Vzc2VkLmltZ0RhdGEsXG4gICAgICAgICAgICAgICAgaW1nQWx0OiBncmlkSW1nUHJvY2Vzc2VkLmltZ0FsdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2l0ZTogdGhpc1NsaWRlckl0ZW0/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX3NpdGUsXG4gICAgICAgICAgICAgIGxpbmtUeXBlOiB0aGlzU2xpZGVySXRlbT8ucmVsYXRpb25zaGlwcz8ubm9kZV90eXBlPy5kcnVwYWxfaW50ZXJuYWxfX3R5cGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17Zi5pZH0gY2xhc3NOYW1lPVwiYy1ob21lcGFnZV9fbW9zdC1sb3ZlZFwiPlxuICAgICAgICAgICAgICA8TW9zdExvdmVkXG4gICAgICAgICAgICAgICAgdGl0bGU9e2YuZmllbGRfbW9zdF9sb3ZlZF90aXRsZX1cbiAgICAgICAgICAgICAgICBzdWJoZWFkPXtmLmZpZWxkX21vc3RfbG92ZWRfc3ViaGVhZH1cbiAgICAgICAgICAgICAgICBzbGlkZXJFeWVicm93PXtmLmZpZWxkX21vc3RfbG92ZWRfc2xpZGVyX2V5ZWJyb3dffVxuICAgICAgICAgICAgICAgIHNsaWRlckhlYWRlcj17Zi5maWVsZF9tb3N0X2xvdmVkX3NsaWRlcl9oZWFkZXJ9XG4gICAgICAgICAgICAgICAgY3Rhcz17Zi5maWVsZF9tb3N0X2xvdmVkX2xpbmt9XG4gICAgICAgICAgICAgICAgc2xpZGVyRGF0YT17bW9zdExvdmVkU2xpZGVyRGF0YX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ3BhcmFncmFwaF9faV9tX2ludG9fc3Rvcmllc19zbGlkZXInOlxuICAgICAgICAgIGNvbnN0IHN0b3JpZXNTbGlkZXJEYXRhID0gZi5yZWxhdGlvbnNoaXBzLmZpZWxkX3N0b3JpZXNfc2xpZGVyX2l0ZW1zLm1hcChpdGVtID0+IHtcblxuICAgICAgICAgICAgLy8gbmVlZCBhbGlhcyBmb3IgZmVhdHVyZWQgb2JqZWN0XG4gICAgICAgICAgICBjb25zdCBzdG9yaWVzTGluayA9IGl0ZW0ucGF0aD8uYWxpYXNcblxuICAgICAgICAgICAgbGV0IHN0b3J5VG9waWNzO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5yZWxhdGlvbnNoaXBzLmZpZWxkX3N0b3J5X3RvcGljKSB7XG4gICAgICAgICAgICAgIHN0b3J5VG9waWNzID0gaXRlbS5yZWxhdGlvbnNoaXBzPy5maWVsZF9zdG9yeV90b3BpYy5tYXAodG9waWMgPT4gdG9waWMubmFtZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGdyaWRJbWcgPSBjaG9vc2VJbWFnZUJ5Q2FyZFR5cGUoaXRlbSwgZmFsbGJhY2tJbWdMb29rdXApO1xuICAgICAgICAgICAgY29uc3QgZ3JpZEltZ1Byb2Nlc3NlZCA9IGhhbmRsZUltYWdlKGdyaWRJbWcpO1xuICAgICAgICAgICAgLy8gLy8gZm9yY2UgaW1hZ2UgbGF5b3V0IHRvIGNvbnN0cmFpbmVkIGZvciB0aGlzIHNlY3Rpb25cbiAgICAgICAgICAgIC8vIGdyaWRJbWdQcm9jZXNzZWQuaW1nRGF0YS5jaGlsZEltYWdlU2hhcnAuZ2F0c2J5SW1hZ2VEYXRhLmxheW91dCA9IFwiY29uc3RyYWluZWRcIjtcbiAgICAgICAgICAgIC8vIGdyaWRJbWdQcm9jZXNzZWQuaW1nRGF0YS5jaGlsZEltYWdlU2hhcnAuZ2F0c2J5SW1hZ2VEYXRhLndpZHRoID0gNjAwO1xuICAgICAgICAgICAgLy8gZ3JpZEltZ1Byb2Nlc3NlZC5pbWdEYXRhLmNoaWxkSW1hZ2VTaGFycC5nYXRzYnlJbWFnZURhdGEubGF5b3V0ID0gXCJjb25zdHJhaW5lZFwiO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0eXBlOiBpdGVtLnJlbGF0aW9uc2hpcHM/Lm5vZGVfdHlwZT8ubmFtZSxcbiAgICAgICAgICAgICAgc2l0ZTogaXRlbT8ucmVsYXRpb25zaGlwcz8uZmllbGRfc2l0ZSxcbiAgICAgICAgICAgICAgbGlua1R5cGU6IGl0ZW0/LnJlbGF0aW9uc2hpcHM/Lm5vZGVfdHlwZT8uZHJ1cGFsX2ludGVybmFsX190eXBlLFxuICAgICAgICAgICAgICB0aXRsZTogaXRlbT8uZmllbGRfZGlzcGxheV90aXRsZSxcbiAgICAgICAgICAgICAgbGluazogc3Rvcmllc0xpbmssXG4gICAgICAgICAgICAgIGhhcHBlbmluZ05vdzogZmFsc2UsXG4gICAgICAgICAgICAgIHN0b3J5VGFnOiBzdG9yeVRvcGljcyxcbiAgICAgICAgICAgICAgaW1hZ2U6IGdyaWRJbWdQcm9jZXNzZWQuaW1nRGF0YT8uY2hpbGRJbWFnZVNoYXJwICYmIHtcbiAgICAgICAgICAgICAgICBpbWdEYXRhOiBncmlkSW1nUHJvY2Vzc2VkLmltZ0RhdGEsXG4gICAgICAgICAgICAgICAgaW1nQWx0OiBncmlkSW1nUHJvY2Vzc2VkLmltZ0FsdCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IGFsbFN0b3J5VG9waWNzID0gWydFdmVyeXRoaW5nJ107XG5cbiAgICAgICAgICBzdG9yaWVzU2xpZGVyRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uc3RvcnlUYWcpIHtcbiAgICAgICAgICAgICAgaXRlbS5zdG9yeVRhZy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgaXRlbS5zdG9yeVRhZy5mb3JFYWNoKHRvcGljID0+IGFsbFN0b3J5VG9waWNzLnB1c2godG9waWMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2IGtleT17Zi5pZH0+XG4gICAgICAgICAgICAgIDxIb21lcGFnZVN0b3JpZXNcbiAgICAgICAgICAgICAgICBzdWJ0aXRsZT17Zi5maWVsZF9zdG9yaWVzX3NsaWRlcl9leWVicm93X3RleH1cbiAgICAgICAgICAgICAgICBzbGlkZXJ
1EYXRhPXtzdG9yaWVzU2xpZGVyRGF0YX1cbiAgICAgICAgICAgICAgICB0YWdzPXthbGxTdG9yeVRvcGljc31cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ3BhcmFncmFwaF9fZnVydGhlcl9leHBsb3JhdGlvbl9kdWFsX2NhbGxvdXQnOlxuICAgICAgICAgIGNvbnN0IEZ1cnRoZXJFeHBsb3JhdGlvbkRhdGEgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGltYWdlOlxuICAgICAgICAgICAgICAgIGYucmVsYXRpb25zaGlwcz8uZmllbGRfZl9lX2xlZnRfaW1hZ2U/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX21lZGlhX2ltYWdlPy5sb2NhbEZpbGU/LmNoaWxkSW1hZ2VTaGFycFxuICAgICAgICAgICAgICAgICAgPy5nYXRzYnlJbWFnZURhdGE/LmltYWdlcz8uZmFsbGJhY2s/LnNyYyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGYuZmllbGRfZl9lX2xlZnRfdGV4dD8ucHJvY2Vzc2VkLFxuICAgICAgICAgICAgICBleWVicm93OiBmLmZpZWxkX2ZfZV9sZWZ0X2V5ZWJyb3dfdGV4dCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGltYWdlOlxuICAgICAgICAgICAgICAgIGYucmVsYXRpb25zaGlwcz8uZmllbGRfZl9lX3JpZ2h0X2ltYWdlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9tZWRpYV9pbWFnZT8ubG9jYWxGaWxlXG4gICAgICAgICAgICAgICAgICA/LmNoaWxkSW1hZ2VTaGFycD8uZ2F0c2J5SW1hZ2VEYXRhPy5pbWFnZXM/LmZhbGxiYWNrPy5zcmMsXG4gICAgICAgICAgICAgIGV5ZWJyb3c6IGYuZmllbGRfZl9lX3JpZ2h0X2V5ZWJyb3dfdGV4dCxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGYuZmllbGRfZl9lX3JpZ2h0X3RleHQ/LnByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgdHdpdHRlclVybDogZi5maWVsZF90d2l0dGVyX3VybD8udXJsLFxuICAgICAgICAgICAgICBpbnN0YWdyYW1Vcmw6IGYuZmllbGRfaW5zdGFncmFtX3VybD8udXJsLFxuICAgICAgICAgICAgICBmYWNlYm9va1VybDogZi5maWVsZF9mYWNlYm9va191cmw/LnVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgICByZXR1cm4gPEZ1cnRoZXJFeHBsb3JhdGlvbkNhbGxvdXQga2V5PXtmLmlkfSBkYXRhPXtGdXJ0aGVyRXhwbG9yYXRpb25EYXRhfSAvPjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiBmbGV4aWJsZUNvbnRlbnRDb21wb25lbnRzO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgaXNIb21lPXt0cnVlfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaG9tZXBhZ2UtaGVyb1wiPlxuICAgICAgICA8SG9tZXBhZ2VIZXJvUGF0dGVyblxuICAgICAgICAgIGJsb2NrVGV4dD17aGVyby5ibG9ja1RleHR9XG4gICAgICAgICAgY3RhPXtoZXJvLmN0YX1cbiAgICAgICAgICBpbWFnZT17aGVyby5pbWFnZX1cbiAgICAgICAgICBleWVicm93PXtoZXJvLmV5ZWJyb3d9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtmbGV4aWJsZUNvbnRlbnQgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImMtaG9tZXBhZ2VfX2ZsZXhpYmxlLWNvbnRlbnRcIj5cbiAgICAgICAgICB7aG9tZXBhZ2VGbGV4aWJsZUNvbXBvbmVudHMoZmxleGlibGVDb250ZW50KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvTGF5b3V0PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgSG9tZXBhZ2U7XG4iLCJleHBvcnQge2RlZmF1bHR9IGZyb20gJy4vSG9tZXBhZ2UnO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtncmFwaHFsfSBmcm9tICdnYXRzYnknO1xuaW1wb3J0IFNlbyBmcm9tICcuLi9jb21wb25lbnRzL3Nlbyc7XG5pbXBvcnQgSG9tZXBhZ2UgZnJvbSAnLi4vdGVtcGxhdGVzL0hvbWVwYWdlJztcblxuY29uc3QgSW5kZXhQYWdlID0gKHtkYXRhfSkgPT4ge1xuICBjb25zdCBob21lcGFnZURhdGEgPSBkYXRhPy5hbGxOb2RlSG9tZXBhZ2U/LmVkZ2VzWzBdPy5ub2RlO1xuXG4gIC8vIFNFTyBtZXRhZGF0YVxuICBjb25zdCBmYWxsYmFja1NvY2lhbERhdGEgPSBkYXRhPy5hbGxCbG9ja0NvbnRlbnRGYWxsYmFja1NvY2lhbFRleHQuZWRnZXNbMF0/Lm5vZGU7XG4gIGNvbnN0IHNob3J0RGVzY3JpcHRpb25GYWxsYmFjayA9IGZhbGxiYWNrU29jaWFsRGF0YT8uZmllbGRfc2hvcnRfZGVzY3JpcHRpb25fZmFsbGJhY2s7XG5cbiAgY29uc3QgZmFsbEJhY2tJbWdEYXRhID1cbiAgICBkYXRhPy5hbGxCbG9ja0NvbnRlbnRGYWxsYmFja0ltYWdlc0J5VHlwZT8uZWRnZXNbMF0/Lm5vZGU/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX2dsb2JhbF9pbWFnZV9mYWxsYmFjaz8ucmVsYXRpb25zaGlwcz8uZmllbGRfbWVkaWFfaW1hZ2U/LmxvY2FsRmlsZTtcbiAgY29uc3QgZmFsbEJhY2tJbWdEYXRhU3JjID0gZmFsbEJhY2tJbWdEYXRhID8gZmFsbEJhY2tJbWdEYXRhPy5jaGlsZEltYWdlU2hhcnA/LmdhdHNieUltYWdlRGF0YT8uaW1hZ2VzPy5mYWxsYmFjaz8uc3JjIDogXCJcIjtcblxuICBjb25zdCBzaG9ydERlc2NyaXB0aW9uID0gaG9tZXBhZ2VEYXRhPy5maWVsZF9zaG9ydF9kZXNjcmlwdGlvblxuICAgID8gaG9tZXBhZ2VEYXRhPy5maWVsZF9zaG9ydF9kZXNjcmlwdGlvblxuICAgIDogc2hvcnREZXNjcmlwdGlvbkZhbGxiYWNrO1xuICBjb25zdCBub2RlRmVhdHVyZWRJbWdQYXRoID1cbiAgICBob21lcGFnZURhdGE/LnJlbGF0aW9uc2hpcHM/LmZpZWxkX2ZlYXR1cmVkX2ltYWdlPy5yZWxhdGlvbnNoaXBzPy5maWVsZF9tZWRpYV9pbWFnZT8ubG9jYWxGaWxlXG4gICAgICA/LmNoaWxkSW1hZ2VTaGFycD8uZ2F0c2J5SW1hZ2VEYXRhPy5pbWFnZXM/LmZhbGxiYWNrPy5zcmM7XG4gIGNvbnN0IHNlb0ltYWdlID0gbm9kZUZlYXR1cmVkSW1nUGF0aCA/IG5vZGVGZWF0dXJlZEltZ1BhdGggOiBmYWxsQmFja0ltZ0RhdGFTcmM7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFNlb1xuICAgICAgICB0aXRsZT1cIk3DvHR0ZXIgTXVzZXVtIEhvbWVcIlxuICAgICAgICAvLyB0aXRsZT17bm9kZURhdGE/LmZpZWxkX2Rpc3BsYXlfdGl0bGV9XG4gICAgICAgIGRlc2NyaXB0aW9uPXtzaG9ydERlc2NyaXB0aW9ufVxuICAgICAgICBpbWFnZT17c2VvSW1hZ2V9XG4gICAgICAvPlxuICAgICAgPEhvbWVwYWdlIGRhdGE9e2RhdGF9IC8+XG4gICAgPC8+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBJbmRleFBhZ2U7XG5cbmV4cG9ydCBjb25zdCB
1xdWVyeSA9IGdyYXBocWxgXG4gIHtcbiAgICBhbGxOb2RlSG9tZXBhZ2UoZmlsdGVyOiB7c3RhdHVzOiB7ZXE6IHRydWV9fSkge1xuICAgICAgZWRnZXMge1xuICAgICAgICBub2RlIHtcbiAgICAgICAgICBpZFxuICAgICAgICAgIGRydXBhbF9pbnRlcm5hbF9fbmlkXG4gICAgICAgICAgdGl0bGVcbiAgICAgICAgICBmaWVsZF9kaXNwbGF5X3RpdGxlXG4gICAgICAgICAgZmllbGRfc2hvcnRfZGVzY3JpcHRpb25cbiAgICAgICAgICBmaWVsZF9zb2NpYWxfc2hhcmVfdGV4dFxuICAgICAgICAgIGZpZWxkX2hvbWVwYWdlX2hlcm9fZXllYnJvd190ZXh0XG4gICAgICAgICAgZmllbGRfaG9tZXBhZ2VfaGVyb19saW5rIHtcbiAgICAgICAgICAgIHRpdGxlXG4gICAgICAgICAgICB1cmlfYWxpYXNcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVsYXRpb25zaGlwcyB7XG4gICAgICAgICAgICBmaWVsZF9mZWF0dXJlZF9pbWFnZSB7XG4gICAgICAgICAgICAgIC4uLmFsbE1lZGlhSW1hZ2VGaWVsZHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkX2hlYWRlcl9pbWFnZSB7XG4gICAgICAgICAgICAgIGZpZWxkX21lZGlhX2ltYWdlIHtcbiAgICAgICAgICAgICAgICBhbHRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZWxhdGlvbnNoaXBzIHtcbiAgICAgICAgICAgICAgICBmaWVsZF9tZWRpYV9pbWFnZSB7XG4gICAgICAgICAgICAgICAgICBsb2NhbEZpbGUge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZEltYWdlU2hhcnAge1xuICAgICAgICAgICAgICAgICAgICAgIGdhdHNieUltYWdlRGF0YShwbGFjZWhvbGRlcjogTk9ORSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRfZmxleGlibGVfY29udGVudCB7XG4gICAgICAgICAgICAgIC4uLiBvbiBwYXJhZ3JhcGhfX2Z1cnRoZXJfZXhwbG9yYXRpb25fZHVhbF9jYWxsb3V0IHtcbiAgICAgICAgICAgICAgICAuLi5mdXJ0aGVyRXhwbG9yYXRpb25DYWxsb3V0RmllbGRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLi4uIG9uIHBhcmFncmFwaF9fb25fdmlld19jb2x1bW4ge1xuICAgICAgICAgICAgICAgIC4uLm9uVmlld0NvbHVtbkZpZWxkc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC4uLiBvbiBwYXJhZ3JhcGhfX2lfbV9pbnRvX3N0b3JpZXNfc2xpZGVyIHtcbiAgICAgICAgICAgICAgICAuLi5pbUludG9TdG9yaWVzRmllbGRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLi4uIG9uIHBhcmFncmFwaF9fbW9zdF9sb3ZlZF9jdGFfc2xpZGVyIHtcbiAgICAgICAgICAgICAgICAuLi5tb3N0TG92ZWRDVEFGaWVsZHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBhbGxOb2RlRXZlbnQoXG4gICAgICBzb3J0OiB7ZmllbGRzOiBmaWVsZF9ldmVudF9kYXRlc19fX3ZhbHVlLCBvcmRlcjogREVTQ30sIGxpbWl0OiAzMCkge1xuICAgICAgZWRnZXMge1xuICAgICAgICBub2RlIHtcbiAgICAgICAgICBpZFxuICAgICAgICAgIGRydXBhbF9pbnRlcm5hbF9fbmlkXG4gICAgICAgICAgdGl0bGVcbiAgICAgICAgICBmaWVsZF9kaXNwbGF5X3RpdGxlXG4gICAgICAgICAgZmllbGRfZGF0ZV9kaXNwbGF5X3RleHRcbiAgICAgICAgICBmaWVsZF9ldmVudF9kYXRlcyB7XG4gICAgICAgICAgICBlbmRfdmFsdWUoZm9ybWF0U3RyaW5nOiBcIlwiKVxuICAgICAgICAgICAgdmFsdWUoZm9ybWF0U3RyaW5nOiBcIlwiKVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYXRoIHtcbiAgICAgICAgICAgIGFsaWFzXG4gICAgICAgICAgfVxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMge1xuICAgICAgICAgICAgbm9kZV90eXBlIHtcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICBkcnVwYWxfaW50ZXJuYWxfX3R5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkX2ZlYXR1cmVkX2ltYWdlIHtcbiAgICAgICAgICAgICAgZmllbGRfbWVkaWFfaW1hZ2Uge1xuICAgICAgICAgICAgICAgIGFsdFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGZpZWxkX2ZvY2FsX3BvaW50X3lfcG9zaXRpb25cbiAgICAgICAgICAgICAgZmllbGRfZm9jYWxfcG9pbnRfeF9wb3NpdGlvblxuICAgICAgICAgICAgICByZWxhdGlvbnNoaXBzIHtcbiAgICAgICAgICAgICAgICBmaWVsZF9tZWRpYV9pbWFnZSB7XG4gICAgICAgICAgICAgICAgICBsb2NhbEZpbGUge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZEltYWdlU2hhcnAge1xuICAgICAgICAgICAgICAgICAgICAgIGdhdHNieUltYWdlRGF0YShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBOT05FXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFsbEJsb2NrQ29udGVudEZhbGxiYWNrU29jaWFsVGV4dCB7XG4gICAgICBlZGdlcyB7XG4gICAgICAgIG5vZGUge1xuICAgICAgICAgIGZpZWxkX3Nob3J0X2Rlc2NyaXB0aW9uX2ZhbGxiYWNrXG4gICAgICAgICAgZmllbGRfc29jaWFsX3NoYXJlX3RleHRfZmFsbGJhY2tcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGFsbEJsb2NrQ29udGVudEZhbGxiYWNrSW1hZ2VzQnlUeXBlKGZpbHRlcjoge2RydXBhbF9pbnRlcm5hbF9faWQ6IHtlcTogMTJ9fSkge1xuICAgICAgZWRnZXMge1xuICAgICAgICBub2RlIHtcbiAgICAgICAgICByZWxhdGlvbnNoaXBzIHtcbiAgICAgICAgICAgIGZpZWxkX2V4aGliaXRpb25fZmFsbGJhY2tfaW1hZ2Uge1xuICAgICAgICAgICAgICAuLi5hbGxNZWRpYUltYWdlRmllbGRzRGVmYXVsdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRfZXZlbnRfZmFsbGJhY2tfaW1hZ2Uge1xuICAgICAgICAgICAgICAuLi5hbGxNZWRpYUltYWdlRmllbGRzRGVmYXVsdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRfZ2xvYmFsX2ltYWdlX2ZhbGxiYWNrIHtcbiAgICAgICAgICAgICAgLi4uYWxsTWVkaWFJbWFnZUZpZWxkc0RlZmF1bHRcbiAgICAgICAgICAgI
1H1cbiAgICAgICAgICAgIGZpZWxkX3BlcnNvbl9pbWFnZV9mYWxsYmFjayB7XG4gICAgICAgICAgICAgIC4uLmFsbE1lZGlhSW1hZ2VGaWVsZHNEZWZhdWx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZF9wb2RjYXN0X2ltYWdlX2ZhbGxiYWNrIHtcbiAgICAgICAgICAgICAgLi4uYWxsTWVkaWFJbWFnZUZpZWxkc0RlZmF1bHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkX3Bvc3RfaW1hZ2VfZmFsbGJhY2sge1xuICAgICAgICAgICAgICAuLi5hbGxNZWRpYUltYWdlRmllbGRzRGVmYXVsdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRfc3RvcmVfaXRlbV9pbWFnZV9mYWxsYmFjayB7XG4gICAgICAgICAgICAgIC4uLmFsbE1lZGlhSW1hZ2VGaWVsZHNEZWZhdWx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZF92aWRlb19pdGVtX2ltYWdlX2ZhbGxiYWNrIHtcbiAgICAgICAgICAgICAgLi4uYWxsTWVkaWFJbWFnZUZpZWxkc0RlZmF1bHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJTbGlkZXJBcnJvdyIsIl9yZWYiLCJjb2xvciIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwieG1sbnMiLCJkIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJnZXRDYXJkRGF0ZXMiLCJkYXRlIiwiRGF0ZSIsInZhbHVlIiwiZW5kRCIsImVuZF92YWx1ZSIsInV0Y0RhdGVTdHJpbmciLCJ0b0xvY2FsZURhdGVTdHJpbmciLCJ0aW1lWm9uZSIsImZvcm1hdHRlZCIsInN0YXJ0RGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImVuZERhdGUiLCJzdGFydFRpbWUiLCJ0b0xvY2FsZVRpbWVTdHJpbmciLCJob3VyIiwibWludXRlIiwiZW5kVGltZSIsIkFycm93IiwiT3JnTGluayIsIkdhdHNieUltYWdlIiwiZ2V0SW1hZ2UiLCJIb21lR3JpZENhcmQiLCJ0eXBlIiwidGl0bGUiLCJpbWFnZSIsImRhdGVzIiwiX3JlZiRldmVudCIsImV2ZW50IiwiX3JlZiRvblZpZXciLCJvblZpZXciLCJkaXNwbGF5RGF0ZVRleHQiLCJsaW5rIiwiaGFwcGVuaW5nTm93Iiwic2xpZGVyIiwicXVvdGUiLCJhdHRyaWJ1dGlvbiIsImN0YSIsInNpdGUiLCJsaW5rVHlwZSIsImZlYXR1cmVkIiwiZGF0ZUxpc3QiLCJsZW5ndGgiLCJtYXAiLCJwdXNoIiwiY2xhc3NOYW1lIiwidG8iLCJpbWdEYXRhIiwiYWx0IiwiaW1nQWx0IiwibG9hZGluZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwidXNlRWZmZWN0IiwidXNlUmVmIiwiU3dpcGVyIiwiU3dpcGVyU2xpZGUiLCJTd2lwZXJDb3JlIiwiS2V5Ym9hcmQiLCJNb3VzZXdoZWVsIiwidXNlT25TY3JlZW4iLCJ1c2UiLCJTbGlkZXJTd2lwZXIiLCJwcm9wcyIsInNsaWRlclJlZiIsInNsaWRlck9uU2NyZWVuIiwicGFyYWxsYXhSZWYiLCJzd2lwZXJDb250ZW50Iiwib2JzZXJ2ZXIiLCJvYnNlcnZlUGFyZW50cyIsInBhcmFsbGF4Iiwic3BhY2VCZXR3ZWVuIiwic2xpZGVzUGVyVmlldyIsImZyZWVNb2RlIiwiZnJlZU1vZGVTdGlja3kiLCJrZXlib2FyZCIsImVuYWJsZWQiLCJvbmx5SW5WaWV3cG9ydCIsIm1vdXNld2hlZWwiLCJmb3JjZVRvQXhpcyIsImRhdGEiLCJjYXJkIiwiaSIsImtleSIsIndpbkgiLCJoYWxmSCIsIm9mZnNldCIsInNwZWVkIiwidGlja2luZyIsInNldFZhcmlhYmxlcyIsImN1cnJlbnQiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsIndpbk9uZVRoaXJkIiwiYm94IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidGVzdE9mZnNldCIsImhhbmRsZVNjcm9sbCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBvcyIsInRyYW5zT2Zmc2V0IiwieSIsInN0eWxlIiwidHJhbnNmb3JtIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhc3NpdmUiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVmIiwidXNlU3RhdGUiLCJTbGlkZXJXYXRjaGVyIiwid2F0Y2hlclJlZiIsIndhdGNoZXJPblNjcmVlbiIsIl91c2VTdGF0ZSIsIndhc1NlZW4iLCJzZXRXYXNTZWVuIiwiU2xpZGVyIiwiYnV0dG9uV2hpdGUiLCJzZWxlY3RlZFN0b3J5IiwidXNlUGFyYWxsYXgiLCJTbGlkZXJBcnJvd3MiLCJTcGxpdFRleHQiLCJfcHJvcHMkY29weSIsImNoYXJDb3VudCIsIndvcmRDb3VudCIsImNvcHkiLCJyb2xlIiwic3BsaXQiLCJ3b3JkIiwiaW5kZXgiLCJGcmFnbWVudCIsImNoYXIiLCJpZHgiLCJNb3N0TG92ZWRIZWFydCIsInRvdGFsRnJhbWVzIiwiZnJhbWVSYXRlIiwiYWN0aXZlRnJhbWUiLCJmcmFtZVRpY2siLCJoZWFydEZhZGVDbGFzcyIsInNldEhlYXJ0RmFkZUNsYXNzIiwiX3VzZVN0YXRlMiIsImN1cnJlbnRGcmFtZSIsInNldEN1cnJlbnRGcmFtZSIsImFkdmFuY2VBbmltYXRpb24iLCJvblNjcm9sbCIsIlNtYWxsQXJyb3ciLCJNb3N0TG92ZWRDb250ZW50IiwidGl0bGVSZWYiLCJ0aXRsZU9uU2NyZWVuIiwiYmtnUmVmIiwiYmtnT25TY3JlZW4iLCJia2d3YXNTZWVuIiwic2V0QmtnV2FzU2VlbiIsInN1YmhlYWQiLCJjdGFzIiwidXJpX2FsaWFzIiwidXJpX3NpdGUiLCJ1cmlfYnVuZGxlIiwiTW9zdExvdmVkIiwic2xpZGVyRXllYnJvdyIsInNsaWRlckhlYWRlciIsInNsaWRlckRhdGEiLCJTY2FuVGV4dHVyZVVubWFzayIsInNjYW5TdGF0ZSIsInNldFNjYW5TdGF0ZSIsImluVmlldyIsIkxpbmsiLCJTZWxlY3REcm9wZG93biIsIkhvbWVwYWdlU3RvcmllcyIsInN1YnRpdGxlIiwidGFncyIsInNldFNlbGVjdGVkU3RvcnkiLCJzZWxlY3RTdG9yeSIsImUiLCJjYXJkRGF0YSIsImZpbHRlciIsInN0b3J5IiwiX3N0b3J5JHN0b3J5VGFnIiwic3RvcnlUYWciLCJpbmNsdWRlcyIsImxhcmdlRm9udCIsIkluVmlld1dhdGNoZXIiLCJ3YXRjaFJlZiIsIlZlaW5UZXh0dXJlVW5tYXNrIiwidmVpblN0YXRlIiwic2V0VmVpblN0YXRlIiwiUGFyYWxsYXgiLCJCcmFuY2hCb3R0b21JbWciLCJCbGlua2luZ0V5ZSIsIm5hbm9pZCIsImNhcmRJdGVyYXRvciIsIkhvbWVHcmlkIiwicG9zaXRpb24iLCJsZWZ0RGF0YSIsInJpZ2h0RGF0YSIsImRhdGFMZW5ndGgiLCJwYXJhbGxheEFsbG93ZWQiLCJzZXRQYXJhbGxheEFsbG93ZWQiLCJjaGVja1BhcmFsbGF4U2NyZWVuU2l6ZSIsImlubmVyV2lkdGgiLCJsZWZ0RGF0YUN1dG9mZiIsIk1hdGgiLCJmbG9vciIsImZvckVhY2giLCJkaXNhYmxlZCIsInNyYyIsIkhvbWVwYWdlSGVyb1RpdGxlQ2FyZCIsImNhcmRSZWYiLCJoYW5kbGVUaXRsZUNhcmRTY3JvbGwiLCJzY3JvbGxlZCIsInNjcm9sbFkiLCJ3ZWJraXRUcmFuc2Zvcm0iLCJpblZpZXdUaW1lb3V0Iiwic2V0VGltZW91dCIsImNsYXNzTGlzdCIsImFkZCIsImNsZWFyVGltZW91dCIsImV5ZWJyb3ciLCJibG9ja1RleHQiLCJ1cmwiLCJ0ZXh0RGVjb3JhdGlvbiIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZXllUmVmIiwiZnJhZyIsImZ1bGxWZXJ0IiwiY3JlYXRlUmVnbCIsIkhvbWVwYWdlSWxsdXN0cmF0aW9uIiwiSG9tZXBhZ2VIZXJvRGlzc29sdmVyIiwiSG9tZXBhZ2VIZXJvUGF0dGVybiIsImlzTW9iaWxlIiwic2V0SXNNb2JpbGUiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIm1hdGNoIiwiaW1hZ2VTcmMiLCJjaGlsZEltYWdlU2hhcnAiLCJnYXRzYnlJbWFnZURhdGEiLCJpbWFnZXMiLCJmYWxsYmFjayIsImRlZmF1bHQiLCJUd2l0dGVyIiwiSW5zdGFncmFtIiwiRmFjZWJvb2siLCJGdXRoZXJFeHBsb3JhdGlvbkNhcmQiLCJmYWRlUmVmIiwiZmFkZUluVmlldyIsInRpbGVSZWYiLCJ0aWxlSW5WaWV3IiwiYmFja2dyb3VuZEltYWdlIiwiaXRlbSIsImRlc2NyaXB0aW9uIiwidHdpdHRlclVybCIsImhyZWYiLCJ0YXJnZXQiLCJyZWwiLCJpbnN0YWdyYW1VcmwiLCJmYWNlYm9va1VybCIsIkZ1cnRoZXJFeHBsb3JhdGlvbkNhbGxvdXQiLCJ1c2VNZW1vIiwiaGFuZGxlSW1hZ2UiLCJDdGFUZXh0QXJyb3ciLCJIb21lQ29sdW1ucyIsIl9mZWF0dXJlZE9uVmlldyRyZWxhdCIsIl9mZWF0dXJlZE9uVmlldyRyZWxhdDIiLCJldmVudHMiLCJfcmVmJGZlYXR1cmVkRXZlbnREYXQiLCJmZWF0dXJlZEV2ZW50RGF0YSIsInRvZGF5IiwidG9kYXlVdGNEYXRlU3RyaW5nIiwiZ2V0VGltZSIsImhhbmRsZURhdGUiLCJkZWNvZGVIVE1MIiwiaHRtbCIsInR4dCIsImlubmVySFRNTCIsInNvcnRlZEV2ZW50cyIsImZlYXR1cmVkRXZlbnQiLCJldmVudERhdGUiLCJub2RlIiwiZmllbGRfZXZlbnRfZGF0ZXMiLCJzb3J0IiwiYSIsImIiLCJpZCIsInBvcCIsInNoaWZ0IiwiZmVhdHVyZWRPblZpZXciLCJyZWxhdGlvbnNoaXBzIiwiZmllbGRfZmVhdHVyZWRfb25fdmlld19pdGVtIiwib25WaWV3TGlzdCIsImZpZWxkX29uX3ZpZXdfbGlzdCIsImZpZWxkX2V4aGliaXRpb25fdHlwZSIsIm5hbWUiLCJmaWVsZF9kaXNwbGF5X3RpdGxlIiwicGF0aCIsImFsaWFzIiwiZmllbGRfZmVhdHVyZWRfaW1hZ2UiLCJmaWVsZF9leGhpYml0aW9uX2RhdGVzIiwiZmllbGRfZGF0ZV9kaXNwbGF5X3RleHQiLCJfaXRlbSRyZWxhdGlvbnNoaXBzIiwiX2l0ZW0kcmVsYXRpb25zaGlwcyRmIiwibGFiZWwiLCJmaWVsZF9kaXNwbGF5X2RhdGVzIiwiYmxhY2siLCJ0ZXh0IiwiTGF5b3V0IiwiaGFuZGxlSGVyb0ltYWdlIiwiY2hvb3NlSW1hZ2VCeUNhcmRUeXBlIiwiSG9tZXBhZ2UiLCJfZGF0YSRhbGxOb2RlSG9tZXBhZ2UiLCJfZGF0YSRhbGxOb2RlSG9tZXBhZ2UyIiwiX2hlYWRlckltZyRpbWdEYXRhIiwiX2RhdGEkYWxsQmxvY2tDb250ZW50IiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MiIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDMiLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQ0IiwiX2RhdGEkYWxsQmxvY2tDb250ZW50NSIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDYiLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQ3IiwiX2RhdGEkYWxsQmxvY2tDb250ZW50OCIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDkiLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQwIiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MSIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDEwIiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MTEiLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQxMiIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDEzIiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MTQiLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQxNSIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDE2IiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MTciLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQxOCIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDE5IiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MjAiLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQyMSIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDIyIiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MjMiLCJfZGF0YSRhbGxCbG9ja0NvbnRlbnQyNCIsIl9kYXRhJGFsbEJsb2NrQ29udGVudDI1IiwiX2RhdGEkYWxsQmxvY2tDb250ZW50MjYiLCJfaG9tZXBhZ2VEYXRhJHJlbGF0aW8iLCJob21lcGFnZURhdGEiLCJhbGxOb2RlSG9tZXBhZ2UiLCJlZGdlcyIsImhlYWRlckltZyIsImhlcm8iLCJmaWVsZF9ob21lcGFnZV9oZXJvX2V5ZWJyb3dfdGV4dCIsImZpZWxkX2hvbWVwYWdlX2hlcm9fbGluayIsImdsb2JhbEZhbGxiYWNrSW1nIiwiYWxsQmxvY2tDb250ZW50RmFsbGJhY2tJbWFnZXNCeVR5cGUiLCJmaWVsZF9nbG9iYWxfaW1hZ2VfZmFsbGJhY2siLCJleGhpYml0aW9uRmFsbGJhY2tJbWciLCJmaWVsZF9leGhpYml0aW9uX2ZhbGxiYWNrX2ltYWdlIiwiZXZlbnRGYWxsYmFja0ltZyIsImZpZWxkX2V2ZW50X2ZhbGxiYWNrX2ltYWdlIiwicG9kY2FzdEZhbGxiYWNrSW1nIiwiZmllbGRfcG9kY2FzdF9pbWFnZV9mYWxsYmFjayIsInBvc3RGYWxsYmFja0ltZyIsImZpZWxkX3Bvc3RfaW1hZ2VfZmFsbGJhY2siLCJzdG9yZUl0ZW1GYWxsYmFja0ltZyIsImZpZWxkX3N0b3JlX2l0ZW1faW1hZ2VfZmFsbGJhY2siLCJ2aWRlb0l0ZW1GYWxsYmFja0ltZyIsImZpZWxkX3ZpZGVvX2l0ZW
11faW1hZ2VfZmFsbGJhY2siLCJmYWxsYmFja0ltZ0xvb2t1cCIsImZsZXhpYmxlQ29udGVudCIsImZpZWxkX2ZsZXhpYmxlX2NvbnRlbnQiLCJob21lcGFnZUZsZXhpYmxlQ29tcG9uZW50cyIsImZsZXhpYmxlQ29udGVudENvbXBvbmVudHMiLCJmIiwiX2YkaW50ZXJuYWwiLCJfZiRyZWxhdGlvbnNoaXBzIiwiX2YkcmVsYXRpb25zaGlwczIiLCJfZiRyZWxhdGlvbnNoaXBzMiRmaWUiLCJfZiRyZWxhdGlvbnNoaXBzMiRmaWUyIiwiX2YkcmVsYXRpb25zaGlwczIkZmllMyIsIl9mJHJlbGF0aW9uc2hpcHMyJGZpZTQiLCJfZiRyZWxhdGlvbnNoaXBzMiRmaWU1IiwiX2YkcmVsYXRpb25zaGlwczIkZmllNiIsIl9mJHJlbGF0aW9uc2hpcHMyJGZpZTciLCJfZiRyZWxhdGlvbnNoaXBzMiRmaWU4IiwiX2YkZmllbGRfZl9lX2xlZnRfdGV4IiwiX2YkcmVsYXRpb25zaGlwczMiLCJfZiRyZWxhdGlvbnNoaXBzMyRmaWUiLCJfZiRyZWxhdGlvbnNoaXBzMyRmaWUyIiwiX2YkcmVsYXRpb25zaGlwczMkZmllMyIsIl9mJHJlbGF0aW9uc2hpcHMzJGZpZTQiLCJfZiRyZWxhdGlvbnNoaXBzMyRmaWU1IiwiX2YkcmVsYXRpb25zaGlwczMkZmllNiIsIl9mJHJlbGF0aW9uc2hpcHMzJGZpZTciLCJfZiRyZWxhdGlvbnNoaXBzMyRmaWU4IiwiX2YkZmllbGRfZl9lX3JpZ2h0X3RlIiwiX2YkZmllbGRfdHdpdHRlcl91cmwiLCJfZiRmaWVsZF9pbnN0YWdyYW1fdXIiLCJfZiRmaWVsZF9mYWNlYm9va191cmwiLCJpbnRlcm5hbCIsImFsbE5vZGVFdmVudCIsImZpZWxkX2ZlYXR1cmVkX2V2ZW50IiwibW9zdExvdmVkU2xpZGVyRGF0YSIsImZpZWxkX21vc3RfbG92ZWRfc2xpZGVzIiwiX3RoaXNTbGlkZXJJdGVtJHBhdGgiLCJfdGhpc1NsaWRlckl0ZW0kcGF0aDIiLCJfdGhpc1NsaWRlckl0ZW0kcmVsYXQiLCJfdGhpc1NsaWRlckl0ZW0kcmVsYXQyIiwiX3RoaXNTbGlkZXJJdGVtJHJlbGF0MyIsImV4dGVybmFsTGluayIsImV4dGVybmFsVGl0bGUiLCJleHRlcm5hbEltYWdlIiwiZmllbGRfY2FsbG91dDFfbGluayIsImZpZWxkX2ltYWdlIiwiX2ltYWdlUHJvY2Vzc2VkJGltZ0RhIiwiaW1hZ2VQcm9jZXNzZWQiLCJ1cmkiLCJ0aGlzU2xpZGVySXRlbSIsImZpZWxkX21vc3RfbG92ZWRfc2xpZGVyX2l0ZW0iLCJncmlkSW1nIiwiZ3JpZEltZ1Byb2Nlc3NlZCIsIm1vc3RMb3ZlZExpbmsiLCJmaWVsZF9zaXRlIiwibm9kZV90eXBlIiwiZHJ1cGFsX2ludGVybmFsX190eXBlIiwiZmllbGRfbW9zdF9sb3ZlZF90aXRsZSIsImZpZWxkX21vc3RfbG92ZWRfc3ViaGVhZCIsImZpZWxkX21vc3RfbG92ZWRfc2xpZGVyX2V5ZWJyb3dfIiwiZmllbGRfbW9zdF9sb3ZlZF9zbGlkZXJfaGVhZGVyIiwi
1ZmllbGRfbW9zdF9sb3ZlZF9saW5rIiwic3Rvcmllc1NsaWRlckRhdGEiLCJmaWVsZF9zdG9yaWVzX3NsaWRlcl9pdGVtcyIsIl9pdGVtJHBhdGgiLCJfaXRlbSRyZWxhdGlvbnNoaXBzMyIsIl9pdGVtJHJlbGF0aW9uc2hpcHMzJCIsIl9pdGVtJHJlbGF0aW9uc2hpcHM0IiwiX2l0ZW0kcmVsYXRpb25zaGlwczUiLCJfaXRlbSRyZWxhdGlvbnNoaXBzNSQiLCJfZ3JpZEltZ1Byb2Nlc3NlZCRpbWciLCJzdG9yaWVzTGluayIsInN0b3J5VG9waWNzIiwiZmllbGRfc3RvcnlfdG9waWMiLCJfaXRlbSRyZWxhdGlvbnNoaXBzMiIsInRvcGljIiwiYWxsU3RvcnlUb3BpY3MiLCJmaWVsZF9zdG9yaWVzX3NsaWRlcl9leWVicm93X3RleCIsIkZ1cnRoZXJFeHBsb3JhdGlvbkRhdGEiLCJmaWVsZF9mX2VfbGVmdF9pbWFnZSIsImZpZWxkX21lZGlhX2ltYWdlIiwibG9jYWxGaWxlIiwiZmllbGRfZl9lX2xlZnRfdGV4dCIsInByb2Nlc3NlZCIsImZpZWxkX2ZfZV9sZWZ0X2V5ZWJyb3dfdGV4dCIsImZpZWxkX2ZfZV9yaWdodF9pbWFnZSIsImZpZWxkX2ZfZV9yaWdodF9leWVicm93X3RleHQiLCJmaWVsZF9mX2VfcmlnaHRfdGV4dCIsImZpZWxkX3R3aXR0ZXJfdXJsIiwiZmllbGRfaW5zdGFncmFtX3VybCIsImZpZWxkX2ZhY2Vib29rX3VybCIsImlzSG9tZSIsIlNlbyIsIkluZGV4UGFnZSIsIl9mYWxsQmFja0ltZ0RhdGEkY2hpbCIsIl9mYWxsQmFja0ltZ0RhdGEkY2hpbDIiLCJfZmFsbEJhY2tJbWdEYXRhJGNoaWwzIiwiX2ZhbGxCYWNrSW1nRGF0YSRjaGlsNCIsIl9ob21lcGFnZURhdGEkcmVsYXRpbzIiLCJfaG9tZXBhZ2VEYXRhJHJlbGF0aW8zIiwiX2hvbWVwYWdlRGF0YSRyZWxhdGlvNCIsIl9ob21lcGFnZURhdGEkcmVsYXRpbzUiLCJfaG9tZXBhZ2VEYXRhJHJlbGF0aW82IiwiX2hvbWVwYWdlRGF0YSRyZWxhdGlvNyIsIl9ob21lcGFnZURhdGEkcmVsYXRpbzgiLCJfaG9tZXBhZ2VEYXRhJHJlbGF0aW85IiwiZmFsbGJhY2tTb2NpYWxEYXRhIiwiYWxsQmxvY2tDb250ZW50RmFsbGJhY2tTb2NpYWxUZXh0Iiwic2hvcnREZXNjcmlwdGlvbkZhbGxiYWNrIiwiZmllbGRfc2hvcnRfZGVzY3JpcHRpb25fZmFsbGJhY2siLCJmYWxsQmFja0ltZ0RhdGEiLCJmYWxsQmFja0ltZ0RhdGFTcmMiLCJzaG9ydERlc2NyaXB0aW9uIiwiZmllbGRfc2hvcnRfZGVzY3JpcHRpb24iLCJub2RlRmVhdHVyZWRJbWdQYXRoIiwic2VvSW1hZ2UiLCJxdWVyeSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4959\n")},5840:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\nvar Instagram=function Instagram(_ref){var _ref$color=_ref.color,color=_ref$color===void 0?\'#DB3A2D\':_ref$color;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",{width:"21",height:"21",viewBox:"0 0 21 21",fill:"none",xmlns:"http://www.w3.org/2000/svg"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("g",{clipPath:"url(#clip0)"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{d:"M20.4703 6.52205C20.4235 5.46054 20.2518 4.73076 20.0059 4.09839C19.7523 3.42715 19.362 2.82619 18.8507 2.32661C18.3511 1.81926 17.7462 1.42502 17.0827 1.17531C16.4467 0.929404 15.7207 0.757745 14.6592 0.710942C13.5898 0.660176 13.2503 0.648438 10.5379 0.648438C7.82546 0.648438 7.48596 0.660176 6.42048 0.706979C5.35897 0.753781 4.62919 0.925593 3.99698 1.17134C3.32559 1.42502 2.72463 1.81529 2.22505 2.32661C1.71769 2.82619 1.32361 3.43112 1.07374 4.09458C0.827841 4.73076 0.656182 5.45657 0.60938 6.51809C0.558614 7.58753 0.546875 7.92704 0.546875 10.6394C0.546875 13.3518 0.558614 13.6913 0.605416 14.7568C0.652218 15.8183 0.82403 16.5481 1.06993 17.1805C1.32361 17.8517 1.71769 18.4527 2.22505 18.9523C2.72463 19.4596 3.32955 19.8539 3.99301 20.1036C4.62919 20.3495 5.35501 20.5211 6.41667 20.5679C7.48199 20.6149 7.82165 20.6265 10.534 20.6265C13.2464 20.6265 13.5859 20.6149 14.6514 20.5679C15.7129 20.5211 16.4427 20.3495 17.0749 20.1036C18.4176 19.5845 19.4791 18.523 19.9982 17.1805C20.2439 16.5443 20.4157 15.8183 20.4625 14.7568C20.5093 13.6913 20.5211 13.3518 20.5211 10.6394C20.5211 7.92704 20.5171 7.58753 20.4703 6.52205ZM18.6712 14.6788C18.6282 15.6544 18.4644 16.1813 18.3278 16.5326C17.9921 17.4029 17.3013 18.0937 16.431 18.4294C16.0797 18.5659 15.5491 18.7298 14.5772 18.7727C13.5234 18.8196 13.2074 18.8312 10.5418 18.8312C7.87623 18.8312 7.55623 18.8196 6.50631 18.7727C5.53063 18.7298 5.00376 18.5659 4.65251 18.4294C4.2194 18.2693 3.82517 18.0156 3.50517 17.6839C3.17344 17.3599 2.91976 16.9696 2.75969 16.5365C2.6231 16.1853 2.45921 15.6544 2.41637 14.6827C2.36942 13.629 2.35783 13.3
1128 2.35783 10.6472C2.35783 7.98161 2.36942 7.66162 2.41637 6.61185C2.45921 5.63616 2.6231 5.10929 2.75969 4.75805C2.91976 4.32478 3.17344 3.9307 3.50914 3.61055C3.83294 3.27882 4.22321 3.02514 4.65648 2.86522C5.00772 2.72863 5.53856 2.56474 6.51027 2.52175C7.56401 2.47495 7.88019 2.46321 10.5456 2.46321C13.2152 2.46321 13.5312 2.47495 14.5811 2.52175C15.5568 2.56474 16.0837 2.72863 16.4349 2.86522C16.8681 3.02514 17.2623 3.27882 17.5823 3.61055C17.914 3.93451 18.1677 4.32478 18.3278 4.75805C18.4644 5.10929 18.6282 5.63997 18.6712 6.61185C18.718 7.66558 18.7298 7.98161 18.7298 10.6472C18.7298 13.3128 18.718 13.625 18.6712 14.6788Z",fill:color}),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{d:"M10.5383 5.50757C7.70505 5.50757 5.40625 7.80622 5.40625 10.6397C5.40625 13.4731 7.70505 15.7718 10.5383 15.7718C13.3718 15.7718 15.6704 13.4731 15.6704 10.6397C15.6704 7.80622 13.3718 5.50757 10.5383 5.50757ZM10.5383 13.9687C8.70025 13.9687 7.20928 12.4779 7.20928 10.6397C7.20928 8.80142 8.70025 7.3106 10.5383 7.3106C12.3766 7.3106 13.8674 8.80142 13.8674 10.6397C13.8674 12.4779 12.3766 13.9687 10.5383 13.9687Z",fill:color}),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{d:"M17.0722 5.30431C17.0722 5.96595 16.5357 6.50242 15.8739 6.50242C15.2123 6.50242 14.6758 5.96595 14.6758 5.30431C14.6758 4.64252 15.2123 4.1062 15.8739 4.1062C16.5357 4.1062 17.0722 4.64252 17.0722 5.30431Z",fill:color})),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("defs",null,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("clipPath",{id:"clip0"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("rect",{width:"19.9781",height:"19.9781",fill:"white",transform:"translate(0.511719 0.648438)"}))));};/* harmony default export */ __webpack_exports__.A = (Instagram);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTg0MC5qcyIsIm1hcHBpbmdzIjoiO0FBRUEsR0FBTSxDQUFBQyxTQUFTLENBQUcsUUFBWixDQUFBQSxTQUFTQSxDQUFBQyxJQUFBLE1BQUFDLFVBQUEsQ0FBQUQsSUFBQSxDQUFLRSxLQUFLLENBQUxBLEtBQUssQ0FBQUQsVUFBQSxVQUFHLFNBQVMsQ0FBQUEsVUFBQSxvQkFDbkNILGdEQUFBLFFBQUtNLEtBQUssQ0FBQyxJQUFJLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxXQUFXLENBQUNDLElBQUksQ0FBQyxNQUFNLENBQUNDLEtBQUssQ0FBQyw0QkFBNEIsZUFDNUZWLGdEQUFBLE1BQUdXLFFBQVEsQ0FBQyxhQUFhLGVBQ3ZCWCxnREFBQSxTQUNFWSxDQUFDLENBQUMsMnNFQUEyc0UsQ0FDN3NFSCxJQUFJLENBQUVMLEtBQU0sQ0FDYixDQUFDLGNBQ0ZKLGdEQUFBLFNBQ0VZLENBQUMsQ0FBQyxpYUFBaWEsQ0FDbmFILElBQUksQ0FBRUwsS0FBTSxDQUNiLENBQUMsY0FDRkosZ0RBQUEsU0FDRVksQ0FBQyxDQUFDLGdOQUFnTixDQUNsTkgsSUFBSSxDQUFFTCxLQUFNLENBQ2IsQ0FDQSxDQUFDLGNBQ0pKLGdEQUFBLDBCQUNFQSxnREFBQSxhQUFVYSxFQUFFLENBQUMsT0FBTyxlQUNsQmIsZ0RBQUEsU0FDRU0sS0FBSyxDQUFDLFNBQVMsQ0FDZkMsTUFBTSxDQUFDLFNBQVMsQ0FDaEJFLElBQUksQ0FBQyxPQUFPLENBQ1pLLFNBQVMsQ0FBQyw4QkFBOEIsQ0FDekMsQ0FDTyxDQUNOLENBQ0gsQ0FBQyxFQUNQLENBRUQsc0RBQWViLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvSWNvbnMvSW5zdGFncmFtLmpzPzg3NGMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgSW5zdGFncmFtID0gKHtjb2xvciA9ICcjREIzQTJEJ30pID0+IChcbiAgPHN2ZyB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjFcIiB2aWV3Qm94PVwiMCAwIDIxIDIxXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgPGcgY2xpcFBhdGg9XCJ1cmwoI2NsaXAwKVwiPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0yMC40NzAzIDYuNTIyMDVDMjAuNDIzNSA1LjQ2MDU0IDIwLjI1MTggNC43MzA3NiAyMC4wMDU5IDQuMDk4MzlDMTkuNzUyMyAzLjQyNzE1IDE5LjM2MiAyLjgyNjE5IDE4Ljg1MDcgMi4zMjY2MUMxOC4zNTExIDEuODE5MjYgMTcuNzQ2MiAxLjQyNTAyIDE3LjA4MjcgMS4xNzUzMUMxNi40NDY3IDAuOTI5NDA0IDE1LjcyMDcgMC43NTc3NDUgMTQuNjU5MiAwLjcxMDk0MkMxMy41ODk4IDAuNjYwMTc2IDEzLjI1MDMgMC42NDg0MzggMTAuNTM3OSAwLjY0ODQzOEM3LjgyNTQ2IDAuNjQ4NDM4IDcuNDg1OTYgMC42NjAxNzYgNi40MjA0OCAwLjcwNjk3OUM1LjM1ODk3IDAuNzUzNzgxIDQuNjI5MTkgMC45MjU1OTMgMy45OTY5OCAxLjE3MTM0QzMuMzI1NTkgMS40MjUwMiAyLjcyNDYzIDEuODE1MjkgMi4yMjUwNSAyLjMyNjYxQzEuNzE3NjkgMi44MjYxOSAxLjMyMzYxIDMuNDMxMTIgMS4wNzM3NCA0LjA5NDU4QzAuODI3ODQxIDQuNzMwNzYgMC42NTYxODIgNS40NTY1NyAwLjYwOTM4IDYuNTE4MDlDMC41NTg2MTQgNy41ODc1MyAwLjU0Njg3NSA3LjkyNzA0IDAuNTQ2ODc1IDEwLjYzOTRDMC41NDY4NzUgMTMuMzUxOCAwLjU1ODYxNCAxMy42OTEzIDAuNjA1NDE2IDE0Ljc1NjhDMC42NTIyMTggMTUuODE4MyAwLjgyNDAzIDE2LjU0ODEgMS4wNjk5MyAxNy4xODA1QzEuMzIzNjEgMTcuODUxNyAxLjcxNzY5IDE4LjQ1MjcgMi4yMjUwNSAxOC45NTIzQzIuNzI0NjMgMTkuNDU5NiAzLjMyOTU1IDE5Ljg1MzkgMy45OTMwMSAyMC4xMDM2QzQuNjI5MTkgMjAuMzQ5NSA1LjM1NTAxIDIwLjUyMTEgNi40MTY2NyAyMC41Njc5QzcuNDgxOTkgMjAuNjE0OSA3LjgyMTY1IDIwLjYyNjUgMTAuNTM0IDIwLjYyNjVDMTMuMjQ2NCAyMC42MjY1IDEzLjU4NTkgMjAuNjE0OSAxNC42NTE0IDIwLjU2NzlDMTUuNzEyOSAyMC41MjExIDE2LjQ0MjcgMjAuMzQ5NSAxNy4wNzQ5IDIwLjEwMzZDMTguNDE3NiAxOS41ODQ1IDE5LjQ3OTEgMTguNTIzIDE5Ljk5ODIgMTcuMTgwNUMyMC4yNDM5IDE2LjU0NDMgMjAuNDE1NyAxNS44MTgzIDIwLjQ2MjUgMTQuNzU2OEMyMC41MDkzIDEzLjY5MTMgMjAuNTIxMSAxMy4zNTE4IDIwLjUyMTEgMTAuNjM5NEMyMC4
11MjExIDcuOTI3MDQgMjAuNTE3MSA3LjU4NzUzIDIwLjQ3MDMgNi41MjIwNVpNMTguNjcxMiAxNC42Nzg4QzE4LjYyODIgMTUuNjU0NCAxOC40NjQ0IDE2LjE4MTMgMTguMzI3OCAxNi41MzI2QzE3Ljk5MjEgMTcuNDAyOSAxNy4zMDEzIDE4LjA5MzcgMTYuNDMxIDE4LjQyOTRDMTYuMDc5NyAxOC41NjU5IDE1LjU0OTEgMTguNzI5OCAxNC41NzcyIDE4Ljc3MjdDMTMuNTIzNCAxOC44MTk2IDEzLjIwNzQgMTguODMxMiAxMC41NDE4IDE4LjgzMTJDNy44NzYyMyAxOC44MzEyIDcuNTU2MjMgMTguODE5NiA2LjUwNjMxIDE4Ljc3MjdDNS41MzA2MyAxOC43Mjk4IDUuMDAzNzYgMTguNTY1OSA0LjY1MjUxIDE4LjQyOTRDNC4yMTk0IDE4LjI2OTMgMy44MjUxNyAxOC4wMTU2IDMuNTA1MTcgMTcuNjgzOUMzLjE3MzQ0IDE3LjM1OTkgMi45MTk3NiAxNi45Njk2IDIuNzU5NjkgMTYuNTM2NUMyLjYyMzEgMTYuMTg1MyAyLjQ1OTIxIDE1LjY1NDQgMi40MTYzNyAxNC42ODI3QzIuMzY5NDIgMTMuNjI5IDIuMzU3ODMgMTMuMzEyOCAyLjM1NzgzIDEwLjY0NzJDMi4zNTc4MyA3Ljk4MTYxIDIuMzY5NDIgNy42NjE2MiAyLjQxNjM3IDYuNjExODVDMi40NTkyMSA1LjYzNjE2IDIuNjIzMSA1LjEwOTI5IDIuNzU5NjkgNC43NTgwNUMyLjkxOTc2IDQuMzI0NzggMy4xNzM0NCAzLjkzMDcgMy41MDkxNCAzLjYxMDU1QzMuODMyOTQgMy4yNzg4MiA0LjIyMzIxIDMuMDI1MTQgNC42NTY0OCAyLjg2NTIyQzUuMDA3NzIgMi43Mjg2MyA1LjUzODU2IDIuNTY0NzQgNi41MTAyNyAyLjUyMTc1QzcuNTY0MDEgMi40NzQ5NSA3Ljg4MDE5IDIuNDYzMjEgMTAuNTQ1NiAyLjQ2MzIxQzEzLjIxNTIgMi40NjMyMSAxMy41MzEyIDIuNDc0OTUgMTQuNTgxMSAyLjUyMTc1QzE1LjU1NjggMi41NjQ3NCAxNi4wODM3IDIuNzI4NjMgMTYuNDM0OSAyLjg2NTIyQzE2Ljg2ODEgMy4wMjUxNCAxNy4yNjIzIDMuMjc4ODIgMTcuNTgyMyAzLjYxMDU1QzE3LjkxNCAzLjkzNDUxIDE4LjE2NzcgNC4zMjQ3OCAxOC4zMjc4IDQuNzU4MDVDMTguNDY0NCA1LjEwOTI5IDE4LjYyODIgNS42Mzk5NyAxOC42NzEyIDYuNjExODVDMTguNzE4IDcuNjY1NTggMTguNzI5OCA3Ljk4MTYxIDE4LjcyOTggMTAuNjQ3MkMxOC43Mjk4IDEzLjMxMjggMTguNzE4IDEzLjYyNSAxOC42NzEyIDE0LjY3ODhaXCJcbiAgICAgICAgZmlsbD17Y29sb3J9XG4gICAgICAvPlxuICAgICAgPHBhdGhcbiAgICAgICAgZD1cIk0xMC41MzgzIDUuNTA3NTdDNy43MDUwNSA1LjUwNzU3IDUuNDA2MjUgNy44MDYyMiA1LjQwNjI1IDEwLjYzOTdDNS40MDYyNSAxMy40NzMxIDcuNzA1MDUgMTUuNzcxOCAxMC41MzgzIDE1Ljc3MThDMTMuMzcxOCAxNS43NzE4IDE1LjY3MDQgMTMuNDczMSAxNS42NzA0IDEwLjYzOTdDMTUuNjcwNCA3LjgwNjIyIDEzLjM3MTggNS41MDc1NyAxMC41MzgzIDUuNTA3NTdaTTEwLjUzODMgMTMuOTY4N0M4LjcwMDI1IDEzLjk2ODcgNy4yMDkyOCAxMi40Nzc5IDcuMjA5MjggMTAuNjM5N0M3LjIwOTI4IDguODAxNDIgOC43MDAyNSA3LjMxMDYgMTAuNTM4MyA3LjMxMDZDMTIuMzc2NiA3LjMxMDYgMTMuODY3NCA4LjgwMTQyIDEzLjg2NzQgMTAuNjM5N0MxMy44Njc0IDEyLjQ3NzkgMTIuMzc2NiAxMy45Njg3IDEwLjUzODMgMTMuOTY4N1pcIlxuICAgICAgICBmaWxsPXtjb2xvcn1cbiAgICAgIC8+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTTE3LjA3MjIgNS4zMDQzMUMxNy4wNzIyIDUuOTY1OTUgMTYuNTM1NyA2LjUwMjQyIDE1Ljg3MzkgNi41MDI0MkMxNS4yMTIzIDYuNTAyNDIgMTQuNjc1OCA1Ljk2NTk1IDE0LjY3NTggNS4zMDQzMUMxNC42NzU4IDQuNjQyNTIgMTUuMjEyMyA0LjEwNjIgMTUuODczOSA0LjEwNjJDMTYuNTM1NyA0LjEwNjIgMTcuMDcyMiA0LjY0MjUyIDE3LjA3MjIgNS4zMDQzMVpcIlxuICAgICAgICBmaWxsPXtjb2xvcn1cbiAgICAgIC8+XG4gICAgPC9nPlxuICAgIDxkZWZzPlxuICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBcIj5cbiAgICAgICAgPHJlY3RcbiAgICAgICAgICB3aWR0aD1cIjE5Ljk3ODFcIlxuICAgICAgICAgIGhlaWdodD1cIjE5Ljk3ODFcIlxuICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDAuNTExNzE5IDAuNjQ4NDM4KVwiXG4gICAgICAgIC8+XG4gICAgICA8L2NsaXBQYXRoPlxuICAgIDwvZGVmcz5cbiAgPC9zdmc+XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBJbnN0YWdyYW07XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJJbnN0YWdyYW0iLCJfcmVmIiwiX3JlZiRjb2xvciIsImNvbG9yIiwiY3JlYXRlRWxlbWVudCIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJ4bWxucyIsImNsaXBQYXRoIiwiZCIsImlkIiwidHJhbnNmb3JtIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5840\n')},8294:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ A: function() { return /* binding */ BlinkingEye; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\n/* harmony import */ var _utils_useOnScreen__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4232);\nfunction BlinkingEye(){var eyeRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();var inView=(0,_utils_useOnScreen__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .A)(eyeRef);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"c-blinking-eye"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"c-blinking-eye__inner "+(inView?\'in-view\':\'\'),ref:eyeRef}));}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI5NC5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUllLFFBQVMsQ0FBQUcsV0FBV0EsQ0FBQSxDQUFHLENBQ3BDLEdBQU0sQ0FBQUMsTUFBTSxDQUFHSCw2Q0FBTSxDQUFDLENBQUMsQ0FDdkIsR0FBTSxDQUFBSSxNQUFNLENBQUdILHVFQUFXLENBQUNFLE1BQU0sQ0FBQyxDQUVsQyxtQkFDRUosZ0RBQUEsUUFBS08sU0FBUyxpQkFBbUIsZUFDL0JQLGdEQUFBLFFBQUtPLFNBQVMsMkJBQTJCRixNQUFNLENBQUcsU0FBUyxDQUFHLEVBQUUsQ0FBRyxDQUFDRyxHQU
1FHLENBQUVKLE1BQU8sQ0FBTSxDQUNuRixDQUFDLENBRVYiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvQmxpbmtpbmdFeWUvQmxpbmtpbmdFeWUuanM/ZTA0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZU9uU2NyZWVuIGZyb20gJy4uLy4uL3V0aWxzL3VzZU9uU2NyZWVuJztcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCbGlua2luZ0V5ZSgpIHtcbiAgY29uc3QgZXllUmVmID0gdXNlUmVmKCk7XG4gIGNvbnN0IGluVmlldyA9IHVzZU9uU2NyZWVuKGV5ZVJlZik7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YGMtYmxpbmtpbmctZXllYH0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17YGMtYmxpbmtpbmctZXllX19pbm5lciAke2luVmlldyA/ICdpbi12aWV3JyA6ICcnfWB9IHJlZj17ZXllUmVmfT48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZVJlZiIsInVzZU9uU2NyZWVuIiwiQmxpbmtpbmdFeWUiLCJleWVSZWYiLCJpblZpZXciLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwicmVmIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8294\n')},8819:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){eval('/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6540);\nvar Twitter=function Twitter(_ref){var _ref$color=_ref.color,color=_ref$color===void 0?\'#DB3A2D\':_ref$color;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",{width:"21",height:"19",viewBox:"0 0 21 19",fill:"none",xmlns:"http://www.w3.org/2000/svg"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{d:"M21 2.13548C20.23 2.49548 19.3988 2.74471 18.5238 2.85548C19.4163 2.2924 20.0988 1.40625 20.4225 0.344712C19.5912 0.861635 18.6637 1.2401 17.6838 1.4524C16.8962 0.55702 15.7763 0.00317383 14.5425 0.00317383C11.76 0.00317383 9.72125 2.74471 10.3425 5.58779C6.76375 5.39394 3.5875 3.58471 1.46125 0.833943C0.3325 2.87394 0.875 5.55087 2.79125 6.90779C2.09125 6.8801 1.42625 6.67702 0.84 6.33548C0.79625 8.4401 2.2225 10.4063 4.29625 10.8493C3.6925 11.0247 3.0275 11.0616 2.35375 10.9232C2.905 12.7324 4.48875 14.0432 6.37875 14.0801C4.5675 15.5847 2.28375 16.2493 0 15.9632C1.9075 17.2555 4.17375 18.0032 6.60625 18.0032C14.6038 18.0032 19.1275 10.877 18.8475 4.4801C19.6875 3.84317 20.4225 3.04933 21 2.13548Z",fill:color}));};/* harmony default export */ __webpack_exports__.A = (Twitter);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODgxOS5qcyIsIm1hcHBpbmdzIjoiO0FBRUEsR0FBTSxDQUFBQyxPQUFPLENBQUcsUUFBVixDQUFBQSxPQUFPQSxDQUFBQyxJQUFBLE1BQUFDLFVBQUEsQ0FBQUQsSUFBQSxDQUFLRSxLQUFLLENBQUxBLEtBQUssQ0FBQUQsVUFBQSxVQUFHLFNBQVMsQ0FBQUEsVUFBQSxvQkFDakNILGdEQUFBLFFBQUtNLEtBQUssQ0FBQyxJQUFJLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxXQUFXLENBQUNDLElBQUksQ0FBQyxNQUFNLENBQUNDLEtBQUssQ0FBQyw0QkFBNEIsZUFDNUZWLGdEQUFBLFNBQ0VXLENBQUMsQ0FBQyxzc0JBQXNzQixDQUN4c0JGLElBQUksQ0FBRUwsS0FBTSxDQUNiLENBQ0UsQ0FBQyxFQUNQLENBRUQsc0RBQWVILE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9jcHAtbXV0dGVyLy4vc3JjL2NvbXBvbmVudHMvSWNvbnMvVHdpdHRlci5qcz83MjZiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNvbnN0IFR3aXR0ZXIgPSAoe2NvbG9yID0gJyNEQjNBMkQnfSkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIxOVwiIHZpZXdCb3g9XCIwIDAgMjEgMTlcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cGF0aFxuICAgICAgZD1cIk0yMSAyLjEzNTQ4QzIwLjIzIDIuNDk1NDggMTkuMzk4OCAyLjc0NDcxIDE4LjUyMzggMi44NTU0OEMxOS40MTYzIDIuMjkyNCAyMC4wOTg4IDEuNDA2MjUgMjAuNDIyNSAwLjM0NDcxMkMxOS41OTEyIDAuODYxNjM1IDE4LjY2MzcgMS4yNDAxIDE3LjY4MzggMS40NTI0QzE2Ljg5NjIgMC41NTcwMiAxNS43NzYzIDAuMDAzMTczODMgMTQuNTQyNSAwLjAwMzE3MzgzQzExLjc2IDAuMDAzMTczODMgOS43MjEyNSAyLjc0NDcxIDEwLjM0MjUgNS41ODc3OUM2Ljc2Mzc1IDUuMzkzOTQgMy41ODc1IDMuNTg0NzEgMS40NjEyNSAwLjgzMzk0M0MwLjMzMjUgMi44NzM5NCAwLjg3NSA1LjU1MDg3IDIuNzkxMjUgNi45MDc3OUMyLjA5MTI1IDYuODgwMSAxLjQyNjI1IDYuNjc3MDIgMC44NCA2LjMzNTQ4QzAuNzk2MjUgOC40NDAxIDIuMjIyNSAxMC40MDYzIDQuMjk2MjUgMTAuODQ5M0MzLjY5MjUgMTEuMDI0NyAzLjAyNzUgMTEuMDYxNiAyLjM1Mzc1IDEwLjkyMzJDMi45MDUgMTIuNzMyNCA0LjQ4ODc1IDE0LjA0MzIgNi4zNzg3NSAxNC4wODAxQzQuNTY3NSAxNS41ODQ3IDIuMjgzNzUgMTYuMjQ5MyAwIDE1Ljk2MzJDMS45MDc1IDE3LjI1NTUgNC4xNzM3NSAxOC4wMDMyIDYuNjA2MjUgMTguMDAzMkMxNC42MDM4IDE4LjAwMzIgMTkuMTI3NSAxMC44NzcgMTguODQ3NSA0LjQ4MDFDMTkuNjg3NSAzLjg0MzE3IDIwLjQyMjUgMy4wNDkzMyAyMSAyLjEzNTQ4WlwiXG4gICAgICBmaWxsPXtjb2xvcn1cbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0IFR3aXR0ZXI7XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJUd2l0dGVyIiwiX3JlZiIsIl9yZWYkY29sb3IiLCJjb2xvciIsImNyZWF0ZUVsZW1lbnQiLCJ3aWR0aCIsImhlaWdodCIsInZpZXdCb3giLCJmaWxsIiwieG1sbnMiLCJkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8819\n')}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.