| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/ |
Upload File : |
/*! For license information please see module.bundle.js.LICENSE.txt */
(()=>{var e={68840:(e,t,o)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,r=(n=o(85315))&&n.__esModule?n:{default:n};t.default=function(e,t,o){var n=this,l=e.id,a=e.closable;this.modal=function(e){var t,o=e.id,n=void 0===o?"confirm-modal":o,i=e.confirmTitle,l=e.confirmMessage,a=void 0===l?"":l,s=e.closeButtonLabel,u=void 0===s?"Close":s,c=e.confirmButtonLabel,d=void 0===c?"Accept":c,m=e.confirmButtonClass,h=void 0===m?"btn-primary":m,f=e.customButtons,p=void 0===f?[]:f,g={};return g.container=document.createElement("div"),g.container.classList.add("modal","fade"),g.container.id=n,g.dialog=document.createElement("div"),g.dialog.classList.add("modal-dialog"),g.content=document.createElement("div"),g.content.classList.add("modal-content"),g.header=document.createElement("div"),g.header.classList.add("modal-header"),i&&(g.title=document.createElement("h4"),g.title.classList.add("modal-title"),g.title.innerHTML=i),g.closeIcon=document.createElement("button"),g.closeIcon.classList.add("close"),g.closeIcon.setAttribute("type","button"),g.closeIcon.dataset.dismiss="modal",g.closeIcon.innerHTML="×",g.body=document.createElement("div"),g.body.classList.add("modal-body","text-left","font-weight-normal"),g.message=document.createElement("p"),g.message.classList.add("confirm-message"),g.message.innerHTML=a,g.footer=document.createElement("div"),g.footer.classList.add("modal-footer"),g.closeButton=document.createElement("button"),g.closeButton.setAttribute("type","button"),g.closeButton.classList.add("btn","btn-outline-secondary","btn-lg"),g.closeButton.dataset.dismiss="modal",g.closeButton.innerHTML=u,g.confirmButton=document.createElement("button"),g.confirmButton.setAttribute("type","button"),g.confirmButton.classList.add("btn",h,"btn-lg","btn-confirm-submit"),g.confirmButton.dataset.dismiss="modal",g.confirmButton.innerHTML=d,i?g.header.append(g.title,g.closeIcon):g.header.appendChild(g.closeIcon),g.body.appendChild(g.message),(t=g.footer).append.apply(t,[g.closeButton].concat((0,r.default)(p),[g.confirmButton])),g.content.append(g.header,g.body,g.footer),g.dialog.appendChild(g.content),g.container.appendChild(g.dialog),g}(e),this.$modal=i(this.modal.container),this.show=function(){n.$modal.modal()},this.modal.confirmButton.addEventListener("click",t),this.$modal.modal({backdrop:!!a||"static",keyboard:void 0===a||a,closable:void 0===a||a,show:!1}),this.$modal.on("hidden.bs.modal",(function(){document.querySelector("#"+l).remove(),o&&o()})),document.body.appendChild(this.modal.container)};var i=window.$},60817:(e,t,o)=>{"use strict";var n=o(73609);Object.defineProperty(t,"__esModule",{value:!0});var r=s(o(88902)),i=s(o(99663)),l=s(o(22600)),a=s(o(68840));function s(e){return e&&e.__esModule?e:{default:e}}var u=window.$,c=function(e,t){var o=document.createEvent(t);o.initEvent(e,!0,!0),document.dispatchEvent(o)},d=function(){function e(){(0,i.default)(this,e),this.moduleActionMenuLinkSelector="button.module_action_menu_",this.moduleActionMenuInstallLinkSelector="button.module_action_menu_install",this.moduleActionMenuEnableLinkSelector="button.module_action_menu_enable",this.moduleActionMenuUninstallLinkSelector="button.module_action_menu_uninstall",this.moduleActionMenuDisableLinkSelector="button.module_action_menu_disable",this.moduleActionMenuEnableMobileLinkSelector="button.module_action_menu_enable_mobile",this.moduleActionMenuDisableMobileLinkSelector="button.module_action_menu_disable_mobile",this.moduleActionMenuResetLinkSelector="button.module_action_menu_reset",this.moduleActionMenuUpdateLinkSelector="button.module_action_menu_upgrade",this.moduleItemListSelector=".module-item-list",this.moduleItemGridSelector=".module-item-grid",this.moduleItemActionsSelector=".module-actions",this.moduleActionModalDisableLinkSelector="a.module_action_modal_disable",this.moduleActionModalResetLinkSelector="a.module_action_modal_reset",this.moduleActionModalUninstallLinkSelector="a.module_action_modal_uninstall",this.forceDeletionOption="#force_deletion",this.initActionButtons()}return(0,l.default)(e,[{key:"initActionButtons",value:function(){var e=this;u(document).on("click",this.forceDeletionOption,(function(){var t=u(e.moduleActionModalUninstallLinkSelector,u("div.module-item-list[data-tech-name='"+u(this).attr("data-tech-name")+"']"));!0===u(this).prop("checked")?t.attr("data-deletion","true"):t.removeAttr("data-deletion")})),u(document).on("click",this.moduleActionMenuInstallLinkSelector,(function(){return u("#modal-prestatrust").length&&u("#modal-prestatrust").modal("hide"),e.dispatchPreEvent("install",this)&&e.confirmAction("install",this)&&e.requestToController("install",u(this))})),u(document).on("click",this.moduleActionMenuEnableLinkSelector,(function(){return e.dispatchPreEvent("enable",this)&&e.confirmAction("enable",this)&&e.requestToController("enable",u(this))})),u(document).on("click",this.moduleActionMenuUninstallLinkSelector,(function(){return e.dispatchPreEvent("uninstall",this)&&e.confirmAction("uninstall",this)&&e.requestToController("uninstall",u(this))})),u(document).on("click",this.moduleActionMenuDisableLinkSelector,(function(){return e.dispatchPreEvent("disable",this)&&e.confirmAction("disable",this)&&e.requestToController("disable",u(this))})),u(document).on("click",this.moduleActionMenuEnableMobileLinkSelector,(function(){return e.dispatchPreEvent("enable_mobile",this)&&e.confirmAction("enable_mobile",this)&&e.requestToController("enable_mobile",u(this))})),u(document).on("click",this.moduleActionMenuDisableMobileLinkSelector,(function(){return e.dispatchPreEvent("disable_mobile",this)&&e.confirmAction("disable_mobile",this)&&e.requestToController("disable_mobile",u(this))})),u(document).on("click",this.moduleActionMenuResetLinkSelector,(function(){return e.dispatchPreEvent("reset",this)&&e.confirmAction("reset",this)&&e.requestToController("reset",u(this))})),u(document).on("click",this.moduleActionMenuUpdateLinkSelector,(function(t){var o=this;t.preventDefault();var n=u("#"+u(this).data("confirm_modal")),r=window.isShopMaintenance;if(1===n.length)return e.dispatchPreEvent("update",this)&&e.confirmAction("update",this)&&e.requestToController("update",u(this));var i=document.createElement("a");return i.classList.add("btn","btn-primary","btn-lg"),i.setAttribute("href",window.moduleURLs.maintenancePage),i.innerHTML=window.moduleTranslations.moduleModalUpdateMaintenance,new a.default({id:"confirm-module-update-modal",confirmTitle:window.moduleTranslations.singleModuleModalUpdateTitle,closeButtonLabel:window.moduleTranslations.moduleModalUpdateCancel,confirmButtonLabel:r?window.moduleTranslations.moduleModalUpdateUpgrade:window.moduleTranslations.upgradeAnywayButtonText,confirmButtonClass:r?"btn-primary":"btn-secondary",confirmMessage:r?"":window.moduleTranslations.moduleModalUpdateConfirmMessage,closable:!0,customButtons:r?[]:[i]},(function(){return e.dispatchPreEvent("update",o)&&e.confirmAction("update",o)&&e.requestToController("update",u(o))})).show(),!1})),u(document).on("click",this.moduleActionModalDisableLinkSelector,(function(){return e.requestToController("disable",u(e.moduleActionMenuDisableLinkSelector,u("div.module-item-list[data-tech-name='"+u(this).attr("data-tech-name")+"']")))})),u(document).on("click",this.moduleActionModalResetLinkSelector,(function(){return e.requestToController("reset",u(e.moduleActionMenuResetLinkSelector,u("div.module-item-list[data-tech-name='"+u(this).attr("data-tech-name")+"']")))})),u(document).on("click",this.moduleActionModalUninstallLinkSelector,(function(t){u(t.target).parents(".modal").on("hidden.bs.modal",(function(){return e.requestToController("uninstall",u(e.moduleActionMenuUninstallLinkSelector,u("div.module-item-list[data-tech-name='"+u(t.target).attr("data-tech-name")+"']")),u(t.target).attr("data-deletion"))}))}))}},{key:"getModuleItemSelector",value:function(){return u(this.moduleItemListSelector).length?this.moduleItemListSelector:this.moduleItemGridSelector}},{key:"confirmAction",value:function(e,t){var o=u("#"+u(t).data("confirm_modal"));return 1!==o.length||(o.first().modal("show"),!1)}},{key:"confirmPrestaTrust",value:function(e){var t=this,o=this.replacePrestaTrustPlaceholders(e);o.find(".pstrust-install").off("click").on("click",(function(){var n=u(t.moduleActionMenuInstallLinkSelector,'.module-item[data-tech-name="'+e.module.attributes.name+'"]'),r=n.parent("form");u("<input>").attr({type:"hidden",value:"1",name:"actionParams[confirmPrestaTrust]"}).appendTo(r),n.click(),o.modal("hide")})),o.modal()}},{key:"replacePrestaTrustPlaceholders",value:function(e){var t=u("#modal-prestatrust"),o=e.module.attributes;if("PrestaTrust"!==e.confirmation_subject||!t.length)return!1;var n=o.prestatrust.status?"success":"warning";return o.prestatrust.check_list.property?(t.find("#pstrust-btn-property-ok").show(),t.find("#pstrust-btn-property-nok").hide()):(t.find("#pstrust-btn-property-ok").hide(),t.find("#pstrust-btn-property-nok").show(),t.find("#pstrust-buy").attr("href",o.url).toggle(null!==o.url)),t.find("#pstrust-img").attr({src:o.img,alt:o.name}),t.find("#pstrust-name").text(o.displayName),t.find("#pstrust-author").text(o.author),t.find("#pstrust-label").attr("class","text-"+n).text(o.prestatrust.status?"OK":"KO"),t.find("#pstrust-message").attr("class","alert alert-"+n),t.find("#pstrust-message > p").text(o.prestatrust.message),t}},{key:"dispatchPreEvent",value:function(e,t){var o=n.Event("module_card_action_event");return u(t).trigger(o,[e]),!1===o.isPropagationStopped()&&!1===o.isImmediatePropagationStopped()&&!1!==o.result}},{key:"requestToController",value:function(e,t,o,n,i){var l=this,a=t.closest(this.moduleItemActionsSelector),s=t.closest("form"),d=u('<button class="btn-primary-reverse onclick unbind spinner "></button>'),m="//"+window.location.host+s.attr("action"),h=s.serializeArray();return"true"!==o&&!0!==o||h.push({name:"actionParams[deletion]",value:!0}),"true"!==n&&!0!==n||h.push({name:"actionParams[cacheClearEnabled]",value:0}),u.ajax({url:m,dataType:"json",method:"POST",data:h,beforeSend:function(){a.hide(),a.after(d)}}).done((function(t){if(void 0!==t)if(void 0===t.status||!1!==t.status){var o=(0,r.default)(t)[0];if(!1===t[o].status)return void 0!==t[o].confirmation_subject&&l.confirmPrestaTrust(t[o]),void u.growl.error({message:t[o].msg,fixed:!0});u.growl({message:t[o].msg,duration:6e3});var n=l.getModuleItemSelector().replace(".",""),i=null;"uninstall"===e?((i=a.closest("."+n)).remove(),c("Module Uninstalled","CustomEvent")):"disable"===e?((i=a.closest("."+n)).addClass(n+"-isNotActive"),i.attr("data-active","0"),c("Module Disabled","CustomEvent")):"enable"===e&&((i=a.closest("."+n)).removeClass(n+"-isNotActive"),i.attr("data-active","1"),c("Module Enabled","CustomEvent")),a.replaceWith(t[o].action_menu_html)}else u.growl.error({message:t.msg,fixed:!0});else u.growl.error({message:"No answer received from server",fixed:!0})})).fail((function(){var t=a.closest("module-item-list").data("techName");u.growl.error({message:"Could not perform action "+e+" for module "+t,fixed:!0})})).always((function(){a.fadeIn(),d.remove(),i&&i()})),!1}}]),e}();t.default=d},5774:(e,t,o)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=s(o(88902)),r=s(o(65425)),i=s(o(99663)),l=s(o(22600)),a=s(o(68840));function s(e){return e&&e.__esModule?e:{default:e}}var u=window.$,c=function(){function e(t){(0,i.default)(this,e),this.moduleCardController=t,this.DEFAULT_MAX_RECENTLY_USED=10,this.DEFAULT_MAX_PER_CATEGORIES=6,this.DISPLAY_GRID="grid",this.DISPLAY_LIST="list",this.CATEGORY_RECENTLY_USED="recently-used",this.currentCategoryDisplay={},this.currentDisplay="",this.isCategoryGridDisplayed=!1,this.currentTagsList=[],this.currentRefCategory=null,this.currentRefStatus=null,this.currentSorting=null,this.baseAddonsUrl="https://addons.prestashop.com/",this.pstaggerInput=null,this.lastBulkAction=null,this.isUploadStarted=!1,this.recentlyUsedSelector="#module-recently-used-list .modules-list",this.modulesList=[],this.addonsCardGrid=null,this.addonsCardList=null,this.moduleShortList=".module-short-list",this.seeMoreSelector=".see-more",this.seeLessSelector=".see-less",this.moduleItemGridSelector=".module-item-grid",this.moduleItemListSelector=".module-item-list",this.categorySelectorLabelSelector=".module-category-selector-label",this.categorySelector=".module-category-selector",this.categoryItemSelector=".module-category-menu",this.addonsLoginButtonSelector="#addons_login_btn",this.categoryResetBtnSelector=".module-category-reset",this.moduleInstallBtnSelector="input.module-install-btn",this.moduleSortingDropdownSelector=".module-sorting-author select",this.categoryGridSelector="#modules-categories-grid",this.categoryGridItemSelector=".module-category-item",this.addonItemGridSelector=".module-addons-item-grid",this.addonItemListSelector=".module-addons-item-list",this.upgradeAllSource=".module_action_menu_upgrade_all",this.upgradeContainer="#modules-list-container-update",this.upgradeAllTargets=this.upgradeContainer+" .module_action_menu_upgrade:visible",this.notificationContainer="#modules-list-container-notification",this.bulkActionDropDownSelector=".module-bulk-actions",this.bulkItemSelector=".module-bulk-menu",this.bulkActionCheckboxListSelector=".module-checkbox-bulk-list input",this.bulkActionCheckboxGridSelector=".module-checkbox-bulk-grid input",this.checkedBulkActionListSelector=this.bulkActionCheckboxListSelector+":checked",this.checkedBulkActionGridSelector=this.bulkActionCheckboxGridSelector+":checked",this.bulkActionCheckboxSelector="#module-modal-bulk-checkbox",this.bulkConfirmModalSelector="#module-modal-bulk-confirm",this.bulkConfirmModalActionNameSelector="#module-modal-bulk-confirm-action-name",this.bulkConfirmModalListSelector="#module-modal-bulk-confirm-list",this.bulkConfirmModalAckBtnSelector="#module-modal-confirm-bulk-ack",this.placeholderGlobalSelector=".module-placeholders-wrapper",this.placeholderFailureGlobalSelector=".module-placeholders-failure",this.placeholderFailureMsgSelector=".module-placeholders-failure-msg",this.placeholderFailureRetryBtnSelector="#module-placeholders-failure-retry",this.statusSelectorLabelSelector=".module-status-selector-label",this.statusItemSelector=".module-status-menu",this.statusResetBtnSelector=".module-status-reset",this.addonsConnectModalBtnSelector="#page-header-desc-configuration-addons_connect",this.addonsLogoutModalBtnSelector="#page-header-desc-configuration-addons_logout",this.addonsImportModalBtnSelector="#page-header-desc-configuration-add_module",this.dropZoneModalSelector="#module-modal-import",this.dropZoneModalFooterSelector="#module-modal-import .modal-footer",this.dropZoneImportZoneSelector="#importDropzone",this.addonsConnectModalSelector="#module-modal-addons-connect",this.addonsLogoutModalSelector="#module-modal-addons-logout",this.addonsConnectForm="#addons-connect-form",this.moduleImportModalCloseBtn="#module-modal-import-closing-cross",this.moduleImportStartSelector=".module-import-start",this.moduleImportProcessingSelector=".module-import-processing",this.moduleImportSuccessSelector=".module-import-success",this.moduleImportSuccessConfigureBtnSelector=".module-import-success-configure",this.moduleImportFailureSelector=".module-import-failure",this.moduleImportFailureRetrySelector=".module-import-failure-retry",this.moduleImportFailureDetailsBtnSelector=".module-import-failure-details-action",this.moduleImportSelectFileManualSelector=".module-import-start-select-manual",this.moduleImportFailureMsgDetailsSelector=".module-import-failure-details",this.moduleImportConfirmSelector=".module-import-confirm",this.initSortingDropdown(),this.initBOEventRegistering(),this.initCurrentDisplay(),this.initSortingDisplaySwitch(),this.initBulkDropdown(),this.initSearchBlock(),this.initCategorySelect(),this.initCategoriesGrid(),this.initActionButtons(),this.initAddonsSearch(),this.initAddonsConnect(),this.initAddModuleAction(),this.initDropzone(),this.initPageChangeProtection(),this.initPlaceholderMechanism(),this.initFilterStatusDropdown(),this.fetchModulesList(),this.getNotificationsCount(),this.initializeSeeMore()}return(0,l.default)(e,[{key:"initFilterStatusDropdown",value:function(){var e=this,t=u("body");t.on("click",e.statusItemSelector,(function(){e.currentRefStatus=parseInt(u(this).data("status-ref"),10),u(e.statusSelectorLabelSelector).text(u(this).text()),u(e.statusResetBtnSelector).show(),e.updateModuleVisibility()})),t.on("click",e.statusResetBtnSelector,(function(){u(e.statusSelectorLabelSelector).text(u(this).text()),u(this).hide(),e.currentRefStatus=null,e.updateModuleVisibility()}))}},{key:"initBulkDropdown",value:function(){var e=this,t=u("body");t.on("click",e.getBulkCheckboxesSelector(),(function(){var t=u(e.bulkActionDropDownSelector);u(e.getBulkCheckboxesCheckedSelector()).length>0?t.closest(".module-top-menu-item").removeClass("disabled"):t.closest(".module-top-menu-item").addClass("disabled")})),t.on("click",e.bulkItemSelector,(function(){if(0!==u(e.getBulkCheckboxesCheckedSelector()).length){e.lastBulkAction=u(this).data("ref");var t=e.buildBulkActionModuleList(),o=u(this).find(":checked").text().toLowerCase();u(e.bulkConfirmModalListSelector).html(t),u(e.bulkConfirmModalActionNameSelector).text(o),"bulk-uninstall"===e.lastBulkAction?u(e.bulkActionCheckboxSelector).show():u(e.bulkActionCheckboxSelector).hide(),u(e.bulkConfirmModalSelector).modal("show")}else u.growl.warning({message:window.translate_javascripts["Bulk Action - One module minimum"]})})),t.on("click",this.bulkConfirmModalAckBtnSelector,(function(t){t.preventDefault(),t.stopPropagation(),u(e.bulkConfirmModalSelector).modal("hide"),e.doBulkAction(e.lastBulkAction)}))}},{key:"initBOEventRegistering",value:function(){window.BOEvent.on("Module Disabled",this.onModuleDisabled,this),window.BOEvent.on("Module Uninstalled",this.updateTotalResults,this)}},{key:"onModuleDisabled",value:function(){var e=this;e.getModuleItemSelector(),u(".modules-list").each((function(){e.updateTotalResults()}))}},{key:"initPlaceholderMechanism",value:function(){var e=this;u(e.placeholderGlobalSelector).length&&e.ajaxLoadPage(),u("body").on("click",e.placeholderFailureRetryBtnSelector,(function(){u(e.placeholderFailureGlobalSelector).fadeOut(),u(e.placeholderGlobalSelector).fadeIn(),e.ajaxLoadPage()}))}},{key:"ajaxLoadPage",value:function(){var e=this;u.ajax({method:"GET",url:window.moduleURLs.catalogRefresh}).done((function(t){if(!0===t.status){void 0===t.domElements&&(t.domElements=null),void 0===t.msg&&(t.msg=null);var o=document.styleSheets[0],n="{display: none}",r=".modules-list,.module-sorting-menu";o.insertRule?o.insertRule(r+n,o.cssRules.length):o.addRule&&o.addRule(r,n,-1),u(e.placeholderGlobalSelector).fadeOut(800,(function(){u.each(t.domElements,(function(e,t){u(t.selector).append(t.content)})),u(".modules-list").fadeIn(800).css("display","flex"),u(".module-sorting-menu").fadeIn(800),u('[data-toggle="popover"]').popover(),e.initCurrentDisplay(),e.fetchModulesList()}))}else u(e.placeholderGlobalSelector).fadeOut(800,(function(){u(e.placeholderFailureMsgSelector).text(t.msg),u(e.placeholderFailureGlobalSelector).fadeIn(800)}))})).fail((function(t){u(e.placeholderGlobalSelector).fadeOut(800,(function(){u(e.placeholderFailureMsgSelector).text(t.statusText),u(e.placeholderFailureGlobalSelector).fadeIn(800)}))}))}},{key:"fetchModulesList",value:function(){var e=this,t=void 0,o=void 0;e.modulesList=[],u(".modules-list").each((function(){(t=u(this)).find(".module-item").each((function(){o=u(this),e.modulesList.push({domObject:o,id:o.data("id"),name:o.data("name").toLowerCase(),scoring:parseFloat(o.data("scoring")),logo:o.data("logo"),author:o.data("author").toLowerCase(),version:o.data("version"),description:o.data("description").toLowerCase(),techName:o.data("tech-name").toLowerCase(),childCategories:o.data("child-categories"),categories:String(o.data("categories")).toLowerCase(),type:o.data("type"),price:parseFloat(o.data("price")),active:parseInt(o.data("active"),10),access:o.data("last-access"),display:o.hasClass("module-item-list")?e.DISPLAY_LIST:e.DISPLAY_GRID,container:t}),e.isModulesPage()&&o.remove()}))})),e.addonsCardGrid=u(this.addonItemGridSelector),e.addonsCardList=u(this.addonItemListSelector),e.updateModuleVisibility(),u("body").trigger("moduleCatalogLoaded")}},{key:"updateModuleSorting",value:function(){var e=this;if(e.currentSorting){var t="asc",o=e.currentSorting,n=o.split("-");n.length>1&&(o=n[0],"desc"===n[1]&&(t="desc")),e.modulesList.sort((function(e,t){var n=e[o],i=t[o];return"access"===o&&(n=new Date(n).getTime(),i=new Date(i).getTime(),(n=(0,r.default)(n)?0:n)===(i=(0,r.default)(i)?0:i))?t.name.localeCompare(e.name):n<i?-1:n>i?1:0})),"desc"===t&&e.modulesList.reverse()}}},{key:"updateModuleContainerDisplay",value:function(){var e=this;u(".module-short-list").each((function(){var t=u(this),o=t.find(".module-item").length;e.currentRefCategory&&e.currentRefCategory!==String(t.find(".modules-list").data("name"))||null!==e.currentRefStatus&&0===o||0===o&&String(t.find(".modules-list").data("name"))===e.CATEGORY_RECENTLY_USED||e.currentTagsList.length>0&&0===o?t.hide():(t.show(),t.find(e.seeMoreSelector+", "+e.seeLessSelector).toggle(o>=e.DEFAULT_MAX_PER_CATEGORIES))}))}},{key:"updateModuleVisibility",value:function(){var e=this;e.updateModuleSorting(),e.isModulesPage()&&(u(e.recentlyUsedSelector).find(".module-item").remove(),u(".modules-list").find(".module-item").remove());for(var t=void 0,o=void 0,n=void 0,r=void 0,i=void 0,l=void 0,a=e.modulesList.length,s={},c=function(e,t){i=t.toLowerCase(),r|=-1!==o.name.indexOf(i)||-1!==o.description.indexOf(i)||-1!==o.author.indexOf(i)||-1!==o.techName.indexOf(i)},d=0;d<a;d+=1)(o=e.modulesList[d]).display===e.currentDisplay&&(t=!0,n=e.currentRefCategory===e.CATEGORY_RECENTLY_USED?e.CATEGORY_RECENTLY_USED:o.categories,null!==e.currentRefCategory&&(t&=n===e.currentRefCategory),null!==e.currentRefStatus&&(t&=o.active===e.currentRefStatus),e.currentTagsList.length&&(r=!1,u.each(e.currentTagsList,c),t&=r),e.currentDisplay!==e.DISPLAY_LIST||e.currentTagsList.length||(void 0===e.currentCategoryDisplay[n]&&(e.currentCategoryDisplay[n]=!1),s[n]||(s[n]=0),l=n===e.CATEGORY_RECENTLY_USED?e.DEFAULT_MAX_RECENTLY_USED:e.DEFAULT_MAX_PER_CATEGORIES,s[n]>=l&&(t&=e.currentCategoryDisplay[n]),s[n]+=1),t&&(e.currentRefCategory===e.CATEGORY_RECENTLY_USED?u(e.recentlyUsedSelector).append(o.domObject):o.container.append(o.domObject)));e.updateModuleContainerDisplay(),e.currentTagsList.length&&u(".modules-list").append(this.currentDisplay===e.DISPLAY_GRID?this.addonsCardGrid:this.addonsCardList),e.updateTotalResults()}},{key:"initPageChangeProtection",value:function(){var e=this;u(window).on("beforeunload",(function(){if(!0===e.isUploadStarted)return"It seems some critical operation are running, are you sure you want to change page? It might cause some unexepcted behaviors."}))}},{key:"buildBulkActionModuleList",value:function(){var e=this.getBulkCheckboxesCheckedSelector(),t=this.getModuleItemSelector(),o=0,n="",r=void 0;return u(e).each((function(){return 10===o?(n+="- ...",!1):(r=u(this).closest(t),n+="- "+r.data("name")+"<br/>",o+=1,!0)})),n}},{key:"initAddonsConnect",value:function(){var e=this;"#"===u(e.addonsConnectModalBtnSelector).attr("href")&&(u(e.addonsConnectModalBtnSelector).attr("data-toggle","modal"),u(e.addonsConnectModalBtnSelector).attr("data-target",e.addonsConnectModalSelector)),"#"===u(e.addonsLogoutModalBtnSelector).attr("href")&&(u(e.addonsLogoutModalBtnSelector).attr("data-toggle","modal"),u(e.addonsLogoutModalBtnSelector).attr("data-target",e.addonsLogoutModalSelector)),u("body").on("submit",e.addonsConnectForm,(function(t){t.preventDefault(),t.stopPropagation(),u.ajax({method:"POST",url:u(this).attr("action"),dataType:"json",data:u(this).serialize(),beforeSend:function(){u(e.addonsLoginButtonSelector).show(),u('button.btn[type="submit"]',e.addonsConnectForm).hide()}}).done((function(t){1===t.success?window.location.reload():(u.growl.error({message:t.message}),u(e.addonsLoginButtonSelector).hide(),u('button.btn[type="submit"]',e.addonsConnectForm).fadeIn())}))}))}},{key:"initAddModuleAction",value:function(){var e=u(this.addonsImportModalBtnSelector);e.attr("data-toggle","modal"),e.attr("data-target",this.dropZoneModalSelector)}},{key:"initDropzone",value:function(){var e=this,t=u("body"),o=u(".dropzone");t.on("click",this.moduleImportFailureRetrySelector,(function(){u(e.moduleImportSuccessSelector+","+e.moduleImportFailureSelector+","+e.moduleImportProcessingSelector).fadeOut((function(){setTimeout((function(){u(e.moduleImportStartSelector).fadeIn((function(){u(e.moduleImportFailureMsgDetailsSelector).hide(),u(e.moduleImportSuccessConfigureBtnSelector).hide(),o.removeAttr("style")}))}),550)}))})),t.on("hidden.bs.modal",this.dropZoneModalSelector,(function(){u(e.moduleImportSuccessSelector+", "+e.moduleImportFailureSelector).hide(),u(e.moduleImportStartSelector).show(),o.removeAttr("style"),u(e.moduleImportFailureMsgDetailsSelector).hide(),u(e.moduleImportSuccessConfigureBtnSelector).hide(),u(e.dropZoneModalFooterSelector).html(""),u(e.moduleImportConfirmSelector).hide()})),t.on("click",".dropzone:not("+this.moduleImportSelectFileManualSelector+", "+this.moduleImportSuccessConfigureBtnSelector+")",(function(e,t){void 0===t&&(e.stopPropagation(),e.preventDefault())})),t.on("click",this.moduleImportSelectFileManualSelector,(function(e){e.stopPropagation(),e.preventDefault(),u(".dz-hidden-input").trigger("click",["manual_select"])})),t.on("click",this.moduleImportModalCloseBtn,(function(){!0!==e.isUploadStarted&&u(e.dropZoneModalSelector).modal("hide")})),t.on("click",this.moduleImportSuccessConfigureBtnSelector,(function(e){e.stopPropagation(),e.preventDefault(),window.location=u(this).attr("href")})),t.on("click",this.moduleImportFailureDetailsBtnSelector,(function(){u(e.moduleImportFailureMsgDetailsSelector).slideDown()}));var n={url:window.moduleURLs.moduleImport,acceptedFiles:".zip, .tar",paramName:"file_uploaded",maxFilesize:50,uploadMultiple:!1,addRemoveLinks:!0,dictDefaultMessage:"",hiddenInputContainer:e.dropZoneImportZoneSelector,timeout:0,addedfile:function(){e.animateStartUpload()},processing:function(){},error:function(t,o){e.displayOnUploadError(o)},complete:function(t){if("error"!==t.status){var o=u.parseJSON(t.xhr.response);void 0===o.is_configurable&&(o.is_configurable=null),void 0===o.module_name&&(o.module_name=null),e.displayOnUploadDone(o)}e.isUploadStarted=!1}};o.dropzone(u.extend(n))}},{key:"animateStartUpload",value:function(){var e=this,t=u(".dropzone");e.isUploadStarted=!0,u(e.moduleImportStartSelector).hide(0),t.css("border","none"),u(e.moduleImportProcessingSelector).fadeIn()}},{key:"animateEndUpload",value:function(e){u(this.moduleImportProcessingSelector).finish().fadeOut(e)}},{key:"displayOnUploadDone",value:function(e){var t=this;t.animateEndUpload((function(){if(!0===e.status){if(!0===e.is_configurable){var o=window.moduleURLs.configurationPage.replace(/:number:/,e.module_name);u(t.moduleImportSuccessConfigureBtnSelector).attr("href",o),u(t.moduleImportSuccessConfigureBtnSelector).show()}u(t.moduleImportSuccessSelector).fadeIn()}else void 0!==e.confirmation_subject?t.displayPrestaTrustStep(e):(u(t.moduleImportFailureMsgDetailsSelector).html(e.msg),u(t.moduleImportFailureSelector).fadeIn())}))}},{key:"displayOnUploadError",value:function(e){var t=this;t.animateEndUpload((function(){u(t.moduleImportFailureMsgDetailsSelector).html(e),u(t.moduleImportFailureSelector).fadeIn()}))}},{key:"displayPrestaTrustStep",value:function(e){var t=this,o=t.moduleCardController.replacePrestaTrustPlaceholders(e),n=e.module.attributes.name;u(this.moduleImportConfirmSelector).html(o.find(".modal-body").html()).fadeIn(),u(this.dropZoneModalFooterSelector).html(o.find(".modal-footer").html()).fadeIn(),u(this.dropZoneModalFooterSelector).find(".pstrust-install").off("click").on("click",(function(){u(t.moduleImportConfirmSelector).hide(),u(t.dropZoneModalFooterSelector).html(""),t.animateStartUpload(),u.post(e.module.attributes.urls.install,{"actionParams[confirmPrestaTrust]":"1"}).done((function(e){t.displayOnUploadDone(e[n])})).fail((function(e){t.displayOnUploadError(e[n])})).always((function(){t.isUploadStarted=!1}))}))}},{key:"getBulkCheckboxesSelector",value:function(){return this.currentDisplay===this.DISPLAY_GRID?this.bulkActionCheckboxGridSelector:this.bulkActionCheckboxListSelector}},{key:"getBulkCheckboxesCheckedSelector",value:function(){return this.currentDisplay===this.DISPLAY_GRID?this.checkedBulkActionGridSelector:this.checkedBulkActionListSelector}},{key:"getModuleItemSelector",value:function(){return this.currentDisplay===this.DISPLAY_GRID?this.moduleItemGridSelector:this.moduleItemListSelector}},{key:"getNotificationsCount",value:function(){u.getJSON(window.moduleURLs.notificationsCount,this.updateNotificationsCount).fail((function(){console.error("Could not retrieve module notifications count.")}))}},{key:"updateNotificationsCount",value:function(e){var t={to_configure:u("#subtab-AdminModulesNotifications"),to_update:u("#subtab-AdminModulesUpdates")};(0,n.default)(t).forEach((function(o){0!==t[o].length&&t[o].find(".notification-counter").text(e[o])}))}},{key:"initAddonsSearch",value:function(){var e=this;u("body").on("click",e.addonItemGridSelector+", "+e.addonItemListSelector,(function(){var t="";e.currentTagsList.length&&(t=encodeURIComponent(e.currentTagsList.join(" "))),window.open(e.baseAddonsUrl+"search.php?search_query="+t,"_blank")}))}},{key:"initCategoriesGrid",value:function(){var e=this;u("body").on("click",this.categoryGridItemSelector,(function(t){t.stopPropagation(),t.preventDefault();var o=u(this).data("category-ref");return e.currentTagsList.length&&(e.pstaggerInput.resetTags(!1),e.currentTagsList=[]),u(e.categoryItemSelector+'[data-category-ref="'+o+'"]').length?(!0===e.isCategoryGridDisplayed&&(u(e.categoryGridSelector).fadeOut(),e.isCategoryGridDisplayed=!1),u(e.categoryItemSelector+'[data-category-ref="'+o+'"]').click(),!0):(console.warn("No category with ref ("+o+") seems to exist!"),!1)}))}},{key:"initCurrentDisplay",value:function(){this.currentDisplay=""===this.currentDisplay?this.DISPLAY_LIST:this.DISPLAY_GRID}},{key:"initSortingDropdown",value:function(){var e=this;e.currentSorting=u(this.moduleSortingDropdownSelector).find(":checked").attr("value"),e.currentSorting||(e.currentSorting="access-desc"),u("body").on("change",e.moduleSortingDropdownSelector,(function(){e.currentSorting=u(this).find(":checked").attr("value"),e.updateModuleVisibility()}))}},{key:"doBulkAction",value:function(e){var t=u("#force_bulk_deletion").prop("checked"),o={"bulk-uninstall":"uninstall","bulk-disable":"disable","bulk-enable":"enable","bulk-disable-mobile":"disable_mobile","bulk-enable-mobile":"enable_mobile","bulk-reset":"reset"};if(void 0===o[e])return u.growl.error({message:window.translate_javascripts["Bulk Action - Request not found"].replace("[1]",e)}),!1;var n=this.getBulkCheckboxesCheckedSelector(),r=o[e];if(u(n).length<=0)return console.warn(window.translate_javascripts["Bulk Action - One module minimum"]),!1;var i=[],l=void 0;return u(n).each((function(){l=u(this).data("tech-name"),i.push({techName:l,actionMenuObj:u(this).closest(".module-checkbox-bulk-list").next()})})),this.performModulesAction(i,r,t),!0}},{key:"performModulesAction",value:function(e,t,o){var n=this;if(void 0!==n.moduleCardController){var r,i,l,a=(r=e,i=[],l=void 0,u.each(r,(function(e,o){(l=u(n.moduleCardController.moduleActionMenuLinkSelector+t,o.actionMenuObj)).length>0?i.push(l):u.growl.error({message:window.translate_javascripts["Bulk Action - Request not available for module"].replace("[1]",t).replace("[2]",o.techName)})})),i);if(a.length){var s=a.length-1,c=u('<button class="btn-primary-reverse onclick unbind spinner "></button>');if(a.length>1){u.each(a,(function(e,t){e>=a.length-1||m(t,!0,h)}));var d=a[a.length-1].closest(n.moduleCardController.moduleItemActionsSelector);d.hide(),d.after(c)}else m(a[0])}}function m(e,r,i){n.moduleCardController.requestToController(t,e,o,r,i)}function h(){if((s-=1)<=0){c&&(c.remove(),c=null);var e=a[a.length-1];e.closest(n.moduleCardController.moduleItemActionsSelector).fadeIn(),m(e)}}}},{key:"initActionButtons",value:function(){var e=this,t=this;u("body").on("click",t.moduleInstallBtnSelector,(function(e){var t=u(this),o=u(t.next());e.preventDefault(),t.hide(),o.show(),u.ajax({url:t.data("url"),dataType:"json"}).done((function(){o.fadeOut()}))})),u("body").on("click",t.upgradeAllSource,(function(o){o.preventDefault();var n=window.isShopMaintenance,r=document.createElement("a");return r.classList.add("btn","btn-primary","btn-lg"),r.setAttribute("href",window.moduleURLs.maintenancePage),r.innerHTML=window.moduleTranslations.moduleModalUpdateMaintenance,new a.default({id:"confirm-module-update-modal",confirmTitle:window.moduleTranslations.singleModuleModalUpdateTitle,closeButtonLabel:window.moduleTranslations.moduleModalUpdateCancel,confirmButtonLabel:n?window.moduleTranslations.moduleModalUpdateUpgrade:window.moduleTranslations.upgradeAnywayButtonText,confirmButtonClass:n?"btn-primary":"btn-secondary",confirmMessage:n?"":window.moduleTranslations.moduleModalUpdateConfirmMessage,closable:!0,customButtons:n?[]:[r]},(function(){if(u(t.upgradeAllTargets).length<=0)return console.warn(window.translate_javascripts["Upgrade All Action - One module minimum"]),!1;var o=[],n=void 0;return u(t.upgradeAllTargets).each((function(){var e=u(this).closest(".module-item-list");n=e.data("tech-name"),o.push({techName:n,actionMenuObj:u(".module-actions",e)})})),e.performModulesAction(o,"upgrade"),!0})).show(),!0}))}},{key:"initCategorySelect",value:function(){var e=this,t=u("body");t.on("click",e.categoryItemSelector,(function(){e.currentRefCategory=u(this).data("category-ref"),e.currentRefCategory=e.currentRefCategory?String(e.currentRefCategory).toLowerCase():null,u(e.categorySelectorLabelSelector).text(u(this).data("category-display-name")),u(e.categoryResetBtnSelector).show(),e.updateModuleVisibility()})),t.on("click",e.categoryResetBtnSelector,(function(){var t=u(e.categorySelector).attr("aria-labelledby"),o=t.charAt(0).toUpperCase()+t.slice(1);u(e.categorySelectorLabelSelector).text(o),u(this).hide(),e.currentRefCategory=null,e.updateModuleVisibility()}))}},{key:"initSearchBlock",value:function(){var e=this,t=this;t.pstaggerInput=u("#module-search-bar").pstagger({onTagsChanged:function(e){t.currentTagsList=e,t.updateModuleVisibility()},onResetTags:function(){t.currentTagsList=[],t.updateModuleVisibility()},inputPlaceholder:window.translate_javascripts["Search - placeholder"],closingCross:!0,context:t}),u("body").on("click",".module-addons-search-link",(function(t){t.preventDefault(),t.stopPropagation(),window.open(u(e).attr("href"),"_blank")}))}},{key:"initSortingDisplaySwitch",value:function(){var e=this;u("body").on("click",".module-sort-switch",(function(){var t=u(this).data("switch"),o=u(this).hasClass("active-display");void 0!==t&&!1===o&&(e.switchSortingDisplayTo(t),e.currentDisplay=t)}))}},{key:"switchSortingDisplayTo",value:function(e){e===this.DISPLAY_GRID||e===this.DISPLAY_LIST?(u(".module-sort-switch").removeClass("module-sort-active"),u("#module-sort-"+e).addClass("module-sort-active"),this.currentDisplay=e,this.updateModuleVisibility()):console.error("Can't switch to undefined display property \""+e+'"')}},{key:"initializeSeeMore",value:function(){var e=this;u(e.moduleShortList+" "+e.seeMoreSelector).on("click",(function(){e.currentCategoryDisplay[u(this).data("category")]=!0,u(this).addClass("d-none"),u(this).closest(e.moduleShortList).find(e.seeLessSelector).removeClass("d-none"),e.updateModuleVisibility()})),u(e.moduleShortList+" "+e.seeLessSelector).on("click",(function(){e.currentCategoryDisplay[u(this).data("category")]=!1,u(this).addClass("d-none"),u(this).closest(e.moduleShortList).find(e.seeMoreSelector).removeClass("d-none"),e.updateModuleVisibility()}))}},{key:"updateTotalResults",value:function(){var e=function(e,t){var o=e.text().split(" ");o[0]=t,e.text(o.join(" "))},t=u(".module-short-list");if(t.length>0)t.each((function(){var t=u(this);e(t.find(".module-search-result-wording"),t.next(".modules-list").find(".module-item").length)}));else{var o=u(".modules-list").find(".module-item").length;e(u(".module-search-result-wording"),o);var n=this.currentDisplay===this.DISPLAY_LIST?this.addonItemListSelector:this.addonItemGridSelector;u(n).toggle(o!==this.modulesList.length/2),0===o&&u(".module-addons-search-link").attr("href",this.baseAddonsUrl+"search.php?search_query="+encodeURIComponent(this.currentTagsList.join(" ")))}}},{key:"isModulesPage",value:function(){return 0===u(this.upgradeContainer).length&&0===u(this.notificationContainer).length}}]),e}();t.default=c},71423:(e,t,o)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=i(o(99663)),r=i(o(22600));function i(e){return e&&e.__esModule?e:{default:e}}var l=window.$,a=function(){function e(){(0,n.default)(this,e),e.handleImport(),e.handleEvents()}return(0,r.default)(e,null,[{key:"handleImport",value:function(){var e=l("#module-import");function t(){setTimeout((function(){e.removeClass("onclick"),e.addClass("validate",450,o)}),2250)}function o(){setTimeout((function(){e.removeClass("validate")}),1250)}e.click((function(){e.addClass("onclick",250,t)}))}},{key:"handleEvents",value:function(){l("body").on("click","a.module-read-more-grid-btn, a.module-read-more-list-btn",(function(e){e.preventDefault();var t=l(e.target).data("target");l.get(e.target.href,(function(e){l(t).html(e),l(t).modal()}))}))}}]),e}();t.default=a},24043:(e,t,o)=>{e.exports={default:o(47185),__esModule:!0}},65425:(e,t,o)=>{e.exports={default:o(24334),__esModule:!0}},32242:(e,t,o)=>{e.exports={default:o(33391),__esModule:!0}},88902:(e,t,o)=>{e.exports={default:o(98613),__esModule:!0}},99663:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},22600:(e,t,o)=>{"use strict";t.__esModule=!0;var n,r=(n=o(32242))&&n.__esModule?n:{default:n};t.default=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),(0,r.default)(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}()},85315:(e,t,o)=>{"use strict";t.__esModule=!0;var n,r=(n=o(24043))&&n.__esModule?n:{default:n};t.default=function(e){if(Array.isArray(e)){for(var t=0,o=Array(e.length);t<e.length;t++)o[t]=e[t];return o}return(0,r.default)(e)}},47185:(e,t,o)=>{o(91867),o(2586),e.exports=o(34579).Array.from},24334:(e,t,o)=>{o(22960),e.exports=o(34579).Number.isNaN},33391:(e,t,o)=>{o(31477);var n=o(34579).Object;e.exports=function(e,t,o){return n.defineProperty(e,t,o)}},98613:(e,t,o)=>{o(40961),e.exports=o(34579).Object.keys},85663:e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},12159:(e,t,o)=>{var n=o(36727);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},57428:(e,t,o)=>{var n=o(7932),r=o(78728),i=o(16531);e.exports=function(e){return function(t,o,l){var a,s=n(t),u=r(s.length),c=i(l,u);if(e&&o!=o){for(;u>c;)if((a=s[c++])!=a)return!0}else for(;u>c;c++)if((e||c in s)&&s[c]===o)return e||c||0;return!e&&-1}}},14677:(e,t,o)=>{var n=o(32894),r=o(22939)("toStringTag"),i="Arguments"==n(function(){return arguments}());e.exports=function(e){var t,o,l;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(o=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),r))?o:i?n(t):"Object"==(l=n(t))&&"function"==typeof t.callee?"Arguments":l}},32894:e=>{var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},34579:e=>{var t=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=t)},52445:(e,t,o)=>{"use strict";var n=o(4743),r=o(83101);e.exports=function(e,t,o){t in e?n.f(e,t,r(0,o)):e[t]=o}},19216:(e,t,o)=>{var n=o(85663);e.exports=function(e,t,o){if(n(e),void 0===t)return e;switch(o){case 1:return function(o){return e.call(t,o)};case 2:return function(o,n){return e.call(t,o,n)};case 3:return function(o,n,r){return e.call(t,o,n,r)}}return function(){return e.apply(t,arguments)}}},8333:e=>{e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},89666:(e,t,o)=>{e.exports=!o(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(e,t,o)=>{var n=o(36727),r=o(33938).document,i=n(r)&&n(r.createElement);e.exports=function(e){return i?r.createElement(e):{}}},73338:e=>{e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(e,t,o)=>{var n=o(33938),r=o(34579),i=o(19216),l=o(41818),a=o(27069),s=function(e,t,o){var u,c,d,m=e&s.F,h=e&s.G,f=e&s.S,p=e&s.P,g=e&s.B,v=e&s.W,S=h?r:r[t]||(r[t]={}),b=S.prototype,y=h?n:f?n[t]:(n[t]||{}).prototype;for(u in h&&(o=t),o)(c=!m&&y&&void 0!==y[u])&&a(S,u)||(d=c?y[u]:o[u],S[u]=h&&"function"!=typeof y[u]?o[u]:g&&c?i(d,n):v&&y[u]==d?function(e){var t=function(t,o,n){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,o)}return new e(t,o,n)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(d):p&&"function"==typeof d?i(Function.call,d):d,p&&((S.virtual||(S.virtual={}))[u]=d,e&s.R&&b&&!b[u]&&l(b,u,d)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},7929:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},33938:e=>{var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},27069:e=>{var t={}.hasOwnProperty;e.exports=function(e,o){return t.call(e,o)}},41818:(e,t,o)=>{var n=o(4743),r=o(83101);e.exports=o(89666)?function(e,t,o){return n.f(e,t,r(1,o))}:function(e,t,o){return e[t]=o,e}},54881:(e,t,o)=>{var n=o(33938).document;e.exports=n&&n.documentElement},33758:(e,t,o)=>{e.exports=!o(89666)&&!o(7929)((function(){return 7!=Object.defineProperty(o(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(e,t,o)=>{var n=o(32894);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},45991:(e,t,o)=>{var n=o(15449),r=o(22939)("iterator"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(n.Array===e||i[r]===e)}},36727:e=>{e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},95602:(e,t,o)=>{var n=o(12159);e.exports=function(e,t,o,r){try{return r?t(n(o)[0],o[1]):t(o)}catch(t){var i=e.return;throw void 0!==i&&n(i.call(e)),t}}},33945:(e,t,o)=>{"use strict";var n=o(98989),r=o(83101),i=o(25378),l={};o(41818)(l,o(22939)("iterator"),(function(){return this})),e.exports=function(e,t,o){e.prototype=n(l,{next:r(1,o)}),i(e,t+" Iterator")}},45700:(e,t,o)=>{"use strict";var n=o(16227),r=o(83856),i=o(57470),l=o(41818),a=o(15449),s=o(33945),u=o(25378),c=o(95089),d=o(22939)("iterator"),m=!([].keys&&"next"in[].keys()),h="keys",f="values",p=function(){return this};e.exports=function(e,t,o,g,v,S,b){s(o,t,g);var y,k,C,M=function(e){if(!m&&e in A)return A[e];switch(e){case h:case f:return function(){return new o(this,e)}}return function(){return new o(this,e)}},w=t+" Iterator",_=v==f,L=!1,A=e.prototype,I=A[d]||A["@@iterator"]||v&&A[v],x=I||M(v),T=v?_?M("entries"):x:void 0,D="Array"==t&&A.entries||I;if(D&&(C=c(D.call(new e)))!==Object.prototype&&C.next&&(u(C,w,!0),n||"function"==typeof C[d]||l(C,d,p)),_&&I&&I.name!==f&&(L=!0,x=function(){return I.call(this)}),n&&!b||!m&&!L&&A[d]||l(A,d,x),a[t]=x,a[w]=p,v)if(y={values:_?x:M(f),keys:S?x:M(h),entries:T},b)for(k in y)k in A||i(A,k,y[k]);else r(r.P+r.F*(m||L),t,y);return y}},96630:(e,t,o)=>{var n=o(22939)("iterator"),r=!1;try{var i=[7][n]();i.return=function(){r=!0},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!r)return!1;var o=!1;try{var i=[7],l=i[n]();l.next=function(){return{done:o=!0}},i[n]=function(){return l},e(i)}catch(e){}return o}},15449:e=>{e.exports={}},16227:e=>{e.exports=!0},98989:(e,t,o)=>{var n=o(12159),r=o(57856),i=o(73338),l=o(58989)("IE_PROTO"),a=function(){},s=function(){var e,t=o(97467)("iframe"),n=i.length;for(t.style.display="none",o(54881).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),s=e.F;n--;)delete s.prototype[i[n]];return s()};e.exports=Object.create||function(e,t){var o;return null!==e?(a.prototype=n(e),o=new a,a.prototype=null,o[l]=e):o=s(),void 0===t?o:r(o,t)}},4743:(e,t,o)=>{var n=o(12159),r=o(33758),i=o(33206),l=Object.defineProperty;t.f=o(89666)?Object.defineProperty:function(e,t,o){if(n(e),t=i(t,!0),n(o),r)try{return l(e,t,o)}catch(e){}if("get"in o||"set"in o)throw TypeError("Accessors not supported!");return"value"in o&&(e[t]=o.value),e}},57856:(e,t,o)=>{var n=o(4743),r=o(12159),i=o(46162);e.exports=o(89666)?Object.defineProperties:function(e,t){r(e);for(var o,l=i(t),a=l.length,s=0;a>s;)n.f(e,o=l[s++],t[o]);return e}},95089:(e,t,o)=>{var n=o(27069),r=o(66530),i=o(58989)("IE_PROTO"),l=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=r(e),n(e,i)?e[i]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?l:null}},12963:(e,t,o)=>{var n=o(27069),r=o(7932),i=o(57428)(!1),l=o(58989)("IE_PROTO");e.exports=function(e,t){var o,a=r(e),s=0,u=[];for(o in a)o!=l&&n(a,o)&&u.push(o);for(;t.length>s;)n(a,o=t[s++])&&(~i(u,o)||u.push(o));return u}},46162:(e,t,o)=>{var n=o(12963),r=o(73338);e.exports=Object.keys||function(e){return n(e,r)}},12584:(e,t,o)=>{var n=o(83856),r=o(34579),i=o(7929);e.exports=function(e,t){var o=(r.Object||{})[e]||Object[e],l={};l[e]=t(o),n(n.S+n.F*i((function(){o(1)})),"Object",l)}},83101:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},57470:(e,t,o)=>{e.exports=o(41818)},25378:(e,t,o)=>{var n=o(4743).f,r=o(27069),i=o(22939)("toStringTag");e.exports=function(e,t,o){e&&!r(e=o?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},58989:(e,t,o)=>{var n=o(20250)("keys"),r=o(65730);e.exports=function(e){return n[e]||(n[e]=r(e))}},20250:(e,t,o)=>{var n=o(34579),r=o(33938),i="__core-js_shared__",l=r[i]||(r[i]={});(e.exports=function(e,t){return l[e]||(l[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:o(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},90510:(e,t,o)=>{var n=o(11052),r=o(8333);e.exports=function(e){return function(t,o){var i,l,a=String(r(t)),s=n(o),u=a.length;return s<0||s>=u?e?"":void 0:(i=a.charCodeAt(s))<55296||i>56319||s+1===u||(l=a.charCodeAt(s+1))<56320||l>57343?e?a.charAt(s):i:e?a.slice(s,s+2):l-56320+(i-55296<<10)+65536}}},16531:(e,t,o)=>{var n=o(11052),r=Math.max,i=Math.min;e.exports=function(e,t){return(e=n(e))<0?r(e+t,0):i(e,t)}},11052:e=>{var t=Math.ceil,o=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?o:t)(e)}},7932:(e,t,o)=>{var n=o(50799),r=o(8333);e.exports=function(e){return n(r(e))}},78728:(e,t,o)=>{var n=o(11052),r=Math.min;e.exports=function(e){return e>0?r(n(e),9007199254740991):0}},66530:(e,t,o)=>{var n=o(8333);e.exports=function(e){return Object(n(e))}},33206:(e,t,o)=>{var n=o(36727);e.exports=function(e,t){if(!n(e))return e;var o,r;if(t&&"function"==typeof(o=e.toString)&&!n(r=o.call(e)))return r;if("function"==typeof(o=e.valueOf)&&!n(r=o.call(e)))return r;if(!t&&"function"==typeof(o=e.toString)&&!n(r=o.call(e)))return r;throw TypeError("Can't convert object to primitive value")}},65730:e=>{var t=0,o=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+o).toString(36))}},22939:(e,t,o)=>{var n=o(20250)("wks"),r=o(65730),i=o(33938).Symbol,l="function"==typeof i;(e.exports=function(e){return n[e]||(n[e]=l&&i[e]||(l?i:r)("Symbol."+e))}).store=n},83728:(e,t,o)=>{var n=o(14677),r=o(22939)("iterator"),i=o(15449);e.exports=o(34579).getIteratorMethod=function(e){if(null!=e)return e[r]||e["@@iterator"]||i[n(e)]}},2586:(e,t,o)=>{"use strict";var n=o(19216),r=o(83856),i=o(66530),l=o(95602),a=o(45991),s=o(78728),u=o(52445),c=o(83728);r(r.S+r.F*!o(96630)((function(e){Array.from(e)})),"Array",{from:function(e){var t,o,r,d,m=i(e),h="function"==typeof this?this:Array,f=arguments.length,p=f>1?arguments[1]:void 0,g=void 0!==p,v=0,S=c(m);if(g&&(p=n(p,f>2?arguments[2]:void 0,2)),null==S||h==Array&&a(S))for(o=new h(t=s(m.length));t>v;v++)u(o,v,g?p(m[v],v):m[v]);else for(d=S.call(m),o=new h;!(r=d.next()).done;v++)u(o,v,g?l(d,p,[r.value,v],!0):r.value);return o.length=v,o}})},22960:(e,t,o)=>{var n=o(83856);n(n.S,"Number",{isNaN:function(e){return e!=e}})},31477:(e,t,o)=>{var n=o(83856);n(n.S+n.F*!o(89666),"Object",{defineProperty:o(4743).f})},40961:(e,t,o)=>{var n=o(66530),r=o(46162);o(12584)("keys",(function(){return function(e){return r(n(e))}}))},91867:(e,t,o)=>{"use strict";var n=o(90510)(!0);o(45700)(String,"String",(function(e){this._t=String(e),this._i=0}),(function(){var e,t=this._t,o=this._i;return o>=t.length?{value:void 0,done:!0}:(e=n(t,o),this._i+=e.length,{value:e,done:!1})}))},73609:e=>{"use strict";e.exports=window.jQuery}},t={};function o(n){var r=t[n];if(void 0!==r)return r.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,o),i.exports}(()=>{"use strict";var e=r(o(60817)),t=r(o(5774)),n=r(o(71423));function r(e){return e&&e.__esModule?e:{default:e}}(0,window.$)((function(){var o=new e.default;new n.default,new t.default(o)}))})(),window.module={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL21vZGFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvbW9kdWxlLWNhcmQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvbW9kdWxlL2NvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvbW9kdWxlL2xvYWRlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL2FycmF5L2Zyb20uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9udW1iZXIvaXMtbmFuLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2hlbHBlcnMvY2xhc3NDYWxsQ2hlY2suanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvZnJvbS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL251bWJlci9pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vZXh0ZXJuYWwgXCJqUXVlcnlcIiIsIndlYnBhY2s6Ly9bbmFtZV0vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvcGFnZXMvbW9kdWxlL2luZGV4LmpzIl0sIm5hbWVzIjpbInBhcmFtcyIsImNvbmZpcm1DYWxsYmFjayIsImNhbmNlbENhbGxiYWNrIiwiaWQiLCJjbG9zYWJsZSIsInRoaXMiLCJtb2RhbCIsImNvbmZpcm1UaXRsZSIsImNvbmZpcm1NZXNzYWdlIiwiY2xvc2VCdXR0b25MYWJlbCIsImNvbmZpcm1CdXR0b25MYWJlbCIsImNvbmZpcm1CdXR0b25DbGFzcyIsImN1c3RvbUJ1dHRvbnMiLCJjb250YWluZXIiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJkaWFsb2ciLCJjb250ZW50IiwiaGVhZGVyIiwidGl0bGUiLCJpbm5lckhUTUwiLCJjbG9zZUljb24iLCJzZXRBdHRyaWJ1dGUiLCJkYXRhc2V0IiwiZGlzbWlzcyIsImJvZHkiLCJtZXNzYWdlIiwiZm9vdGVyIiwiY2xvc2VCdXR0b24iLCJjb25maXJtQnV0dG9uIiwiYXBwZW5kIiwiYXBwZW5kQ2hpbGQiLCJNb2RhbCIsIiRtb2RhbCIsIiQiLCJzaG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImJhY2tkcm9wIiwia2V5Ym9hcmQiLCJ1bmRlZmluZWQiLCJvbiIsInF1ZXJ5U2VsZWN0b3IiLCJyZW1vdmUiLCJ3aW5kb3ciLCJCT0V2ZW50IiwiZXZlbnROYW1lIiwiZXZlbnRUeXBlIiwiZXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJNb2R1bGVDYXJkIiwibW9kdWxlQWN0aW9uTWVudUxpbmtTZWxlY3RvciIsIm1vZHVsZUFjdGlvbk1lbnVJbnN0YWxsTGlua1NlbGVjdG9yIiwibW9kdWxlQWN0aW9uTWVudUVuYWJsZUxpbmtTZWxlY3RvciIsIm1vZHVsZUFjdGlvbk1lbnVVbmluc3RhbGxMaW5rU2VsZWN0b3IiLCJtb2R1bGVBY3Rpb25NZW51RGlzYWJsZUxpbmtTZWxlY3RvciIsIm1vZHVsZUFjdGlvbk1lbnVFbmFibGVNb2JpbGVMaW5rU2VsZWN0b3IiLCJtb2R1bGVBY3Rpb25NZW51RGlzYWJsZU1vYmlsZUxpbmtTZWxlY3RvciIsIm1vZHVsZUFjdGlvbk1lbnVSZXNldExpbmtTZWxlY3RvciIsIm1vZHVsZUFjdGlvbk1lbnVVcGRhdGVMaW5rU2VsZWN0b3IiLCJtb2R1bGVJdGVtTGlzdFNlbGVjdG9yIiwibW9kdWxlSXRlbUdyaWRTZWxlY3RvciIsIm1vZHVsZUl0ZW1BY3Rpb25zU2VsZWN0b3IiLCJtb2R1bGVBY3Rpb25Nb2RhbERpc2FibGVMaW5rU2VsZWN0b3IiLCJtb2R1bGVBY3Rpb25Nb2RhbFJlc2V0TGlua1NlbGVjdG9yIiwibW9kdWxlQWN0aW9uTW9kYWxVbmluc3RhbGxMaW5rU2VsZWN0b3IiLCJmb3JjZURlbGV0aW9uT3B0aW9uIiwiaW5pdEFjdGlvbkJ1dHRvbnMiLCJzZWxmIiwiYnRuIiwiYXR0ciIsInByb3AiLCJyZW1vdmVBdHRyIiwibGVuZ3RoIiwiZGlzcGF0Y2hQcmVFdmVudCIsImNvbmZpcm1BY3Rpb24iLCJyZXF1ZXN0VG9Db250cm9sbGVyIiwicHJldmVudERlZmF1bHQiLCJkYXRhIiwiaXNNYWludGVuYW5jZU1vZGUiLCJpc1Nob3BNYWludGVuYW5jZSIsIm1haW50ZW5hbmNlTGluayIsIm1vZHVsZVVSTHMiLCJtYWludGVuYW5jZVBhZ2UiLCJtb2R1bGVUcmFuc2xhdGlvbnMiLCJtb2R1bGVNb2RhbFVwZGF0ZU1haW50ZW5hbmNlIiwiQ29uZmlybU1vZGFsIiwic2luZ2xlTW9kdWxlTW9kYWxVcGRhdGVUaXRsZSIsIm1vZHVsZU1vZGFsVXBkYXRlQ2FuY2VsIiwibW9kdWxlTW9kYWxVcGRhdGVVcGdyYWRlIiwidXBncmFkZUFueXdheUJ1dHRvblRleHQiLCJtb2R1bGVNb2RhbFVwZGF0ZUNvbmZpcm1NZXNzYWdlIiwiZSIsInRhcmdldCIsInBhcmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwiZmlyc3QiLCJyZXN1bHQiLCJ0aGF0IiwicmVwbGFjZVByZXN0YVRydXN0UGxhY2Vob2xkZXJzIiwiZmluZCIsIm9mZiIsImluc3RhbGxCdXR0b24iLCJtb2R1bGUiLCJhdHRyaWJ1dGVzIiwibmFtZSIsImZvcm0iLCJwYXJlbnQiLCJ0eXBlIiwidmFsdWUiLCJhcHBlbmRUbyIsImNsaWNrIiwiY29uZmlybWF0aW9uX3N1YmplY3QiLCJhbGVydENsYXNzIiwicHJlc3RhdHJ1c3QiLCJzdGF0dXMiLCJjaGVja19saXN0IiwicHJvcGVydHkiLCJoaWRlIiwidXJsIiwidG9nZ2xlIiwic3JjIiwiaW1nIiwiYWx0IiwidGV4dCIsImRpc3BsYXlOYW1lIiwiYXV0aG9yIiwialF1ZXJ5IiwiRXZlbnQiLCJ0cmlnZ2VyIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsImZvcmNlRGVsZXRpb24iLCJkaXNhYmxlQ2FjaGVDbGVhciIsImNhbGxiYWNrIiwianFFbGVtZW50T2JqIiwiY2xvc2VzdCIsInNwaW5uZXJPYmoiLCJsb2NhdGlvbiIsImhvc3QiLCJhY3Rpb25QYXJhbXMiLCJzZXJpYWxpemVBcnJheSIsInB1c2giLCJhamF4IiwiZGF0YVR5cGUiLCJtZXRob2QiLCJiZWZvcmVTZW5kIiwiYWZ0ZXIiLCJkb25lIiwibW9kdWxlVGVjaE5hbWUiLCJjb25maXJtUHJlc3RhVHJ1c3QiLCJncm93bCIsImVycm9yIiwibXNnIiwiZml4ZWQiLCJkdXJhdGlvbiIsImFsdGVyZWRTZWxlY3RvciIsImdldE1vZHVsZUl0ZW1TZWxlY3RvciIsInJlcGxhY2UiLCJtYWluRWxlbWVudCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJyZXBsYWNlV2l0aCIsImFjdGlvbl9tZW51X2h0bWwiLCJmYWlsIiwidGVjaE5hbWUiLCJhbHdheXMiLCJmYWRlSW4iLCJBZG1pbk1vZHVsZUNvbnRyb2xsZXIiLCJtb2R1bGVDYXJkQ29udHJvbGxlciIsIkRFRkFVTFRfTUFYX1JFQ0VOVExZX1VTRUQiLCJERUZBVUxUX01BWF9QRVJfQ0FURUdPUklFUyIsIkRJU1BMQVlfR1JJRCIsIkRJU1BMQVlfTElTVCIsIkNBVEVHT1JZX1JFQ0VOVExZX1VTRUQiLCJjdXJyZW50Q2F0ZWdvcnlEaXNwbGF5IiwiY3VycmVudERpc3BsYXkiLCJpc0NhdGVnb3J5R3JpZERpc3BsYXllZCIsImN1cnJlbnRUYWdzTGlzdCIsImN1cnJlbnRSZWZDYXRlZ29yeSIsImN1cnJlbnRSZWZTdGF0dXMiLCJjdXJyZW50U29ydGluZyIsImJhc2VBZGRvbnNVcmwiLCJwc3RhZ2dlcklucHV0IiwibGFzdEJ1bGtBY3Rpb24iLCJpc1VwbG9hZFN0YXJ0ZWQiLCJyZWNlbnRseVVzZWRTZWxlY3RvciIsIm1vZHVsZXNMaXN0IiwiYWRkb25zQ2FyZEdyaWQiLCJhZGRvbnNDYXJkTGlzdCIsIm1vZHVsZVNob3J0TGlzdCIsInNlZU1vcmVTZWxlY3RvciIsInNlZUxlc3NTZWxlY3RvciIsImNhdGVnb3J5U2VsZWN0b3JMYWJlbFNlbGVjdG9yIiwiY2F0ZWdvcnlTZWxlY3RvciIsImNhdGVnb3J5SXRlbVNlbGVjdG9yIiwiYWRkb25zTG9naW5CdXR0b25TZWxlY3RvciIsImNhdGVnb3J5UmVzZXRCdG5TZWxlY3RvciIsIm1vZHVsZUluc3RhbGxCdG5TZWxlY3RvciIsIm1vZHVsZVNvcnRpbmdEcm9wZG93blNlbGVjdG9yIiwiY2F0ZWdvcnlHcmlkU2VsZWN0b3IiLCJjYXRlZ29yeUdyaWRJdGVtU2VsZWN0b3IiLCJhZGRvbkl0ZW1HcmlkU2VsZWN0b3IiLCJhZGRvbkl0ZW1MaXN0U2VsZWN0b3IiLCJ1cGdyYWRlQWxsU291cmNlIiwidXBncmFkZUNvbnRhaW5lciIsInVwZ3JhZGVBbGxUYXJnZXRzIiwibm90aWZpY2F0aW9uQ29udGFpbmVyIiwiYnVsa0FjdGlvbkRyb3BEb3duU2VsZWN0b3IiLCJidWxrSXRlbVNlbGVjdG9yIiwiYnVsa0FjdGlvbkNoZWNrYm94TGlzdFNlbGVjdG9yIiwiYnVsa0FjdGlvbkNoZWNrYm94R3JpZFNlbGVjdG9yIiwiY2hlY2tlZEJ1bGtBY3Rpb25MaXN0U2VsZWN0b3IiLCJjaGVja2VkQnVsa0FjdGlvbkdyaWRTZWxlY3RvciIsImJ1bGtBY3Rpb25DaGVja2JveFNlbGVjdG9yIiwiYnVsa0NvbmZpcm1Nb2RhbFNlbGVjdG9yIiwiYnVsa0NvbmZpcm1Nb2RhbEFjdGlvbk5hbWVTZWxlY3RvciIsImJ1bGtDb25maXJtTW9kYWxMaXN0U2VsZWN0b3IiLCJidWxrQ29uZmlybU1vZGFsQWNrQnRuU2VsZWN0b3IiLCJwbGFjZWhvbGRlckdsb2JhbFNlbGVjdG9yIiwicGxhY2Vob2xkZXJGYWlsdXJlR2xvYmFsU2VsZWN0b3IiLCJwbGFjZWhvbGRlckZhaWx1cmVNc2dTZWxlY3RvciIsInBsYWNlaG9sZGVyRmFpbHVyZVJldHJ5QnRuU2VsZWN0b3IiLCJzdGF0dXNTZWxlY3RvckxhYmVsU2VsZWN0b3IiLCJzdGF0dXNJdGVtU2VsZWN0b3IiLCJzdGF0dXNSZXNldEJ0blNlbGVjdG9yIiwiYWRkb25zQ29ubmVjdE1vZGFsQnRuU2VsZWN0b3IiLCJhZGRvbnNMb2dvdXRNb2RhbEJ0blNlbGVjdG9yIiwiYWRkb25zSW1wb3J0TW9kYWxCdG5TZWxlY3RvciIsImRyb3Bab25lTW9kYWxTZWxlY3RvciIsImRyb3Bab25lTW9kYWxGb290ZXJTZWxlY3RvciIsImRyb3Bab25lSW1wb3J0Wm9uZVNlbGVjdG9yIiwiYWRkb25zQ29ubmVjdE1vZGFsU2VsZWN0b3IiLCJhZGRvbnNMb2dvdXRNb2RhbFNlbGVjdG9yIiwiYWRkb25zQ29ubmVjdEZvcm0iLCJtb2R1bGVJbXBvcnRNb2RhbENsb3NlQnRuIiwibW9kdWxlSW1wb3J0U3RhcnRTZWxlY3RvciIsIm1vZHVsZUltcG9ydFByb2Nlc3NpbmdTZWxlY3RvciIsIm1vZHVsZUltcG9ydFN1Y2Nlc3NTZWxlY3RvciIsIm1vZHVsZUltcG9ydFN1Y2Nlc3NDb25maWd1cmVCdG5TZWxlY3RvciIsIm1vZHVsZUltcG9ydEZhaWx1cmVTZWxlY3RvciIsIm1vZHVsZUltcG9ydEZhaWx1cmVSZXRyeVNlbGVjdG9yIiwibW9kdWxlSW1wb3J0RmFpbHVyZURldGFpbHNCdG5TZWxlY3RvciIsIm1vZHVsZUltcG9ydFNlbGVjdEZpbGVNYW51YWxTZWxlY3RvciIsIm1vZHVsZUltcG9ydEZhaWx1cmVNc2dEZXRhaWxzU2VsZWN0b3IiLCJtb2R1bGVJbXBvcnRDb25maXJtU2VsZWN0b3IiLCJpbml0U29ydGluZ0Ryb3Bkb3duIiwiaW5pdEJPRXZlbnRSZWdpc3RlcmluZyIsImluaXRDdXJyZW50RGlzcGxheSIsImluaXRTb3J0aW5nRGlzcGxheVN3aXRjaCIsImluaXRCdWxrRHJvcGRvd24iLCJpbml0U2VhcmNoQmxvY2siLCJpbml0Q2F0ZWdvcnlTZWxlY3QiLCJpbml0Q2F0ZWdvcmllc0dyaWQiLCJpbml0QWRkb25zU2VhcmNoIiwiaW5pdEFkZG9uc0Nvbm5lY3QiLCJpbml0QWRkTW9kdWxlQWN0aW9uIiwiaW5pdERyb3B6b25lIiwiaW5pdFBhZ2VDaGFuZ2VQcm90ZWN0aW9uIiwiaW5pdFBsYWNlaG9sZGVyTWVjaGFuaXNtIiwiaW5pdEZpbHRlclN0YXR1c0Ryb3Bkb3duIiwiZmV0Y2hNb2R1bGVzTGlzdCIsImdldE5vdGlmaWNhdGlvbnNDb3VudCIsImluaXRpYWxpemVTZWVNb3JlIiwicGFyc2VJbnQiLCJ1cGRhdGVNb2R1bGVWaXNpYmlsaXR5IiwiZ2V0QnVsa0NoZWNrYm94ZXNTZWxlY3RvciIsInNlbGVjdG9yIiwiZ2V0QnVsa0NoZWNrYm94ZXNDaGVja2VkU2VsZWN0b3IiLCJtb2R1bGVzTGlzdFN0cmluZyIsImJ1aWxkQnVsa0FjdGlvbk1vZHVsZUxpc3QiLCJhY3Rpb25TdHJpbmciLCJ0b0xvd2VyQ2FzZSIsImh0bWwiLCJ3YXJuaW5nIiwidHJhbnNsYXRlX2phdmFzY3JpcHRzIiwic3RvcFByb3BhZ2F0aW9uIiwiZG9CdWxrQWN0aW9uIiwib25Nb2R1bGVEaXNhYmxlZCIsInVwZGF0ZVRvdGFsUmVzdWx0cyIsImVhY2giLCJhamF4TG9hZFBhZ2UiLCJmYWRlT3V0IiwiY2F0YWxvZ1JlZnJlc2giLCJyZXNwb25zZSIsImRvbUVsZW1lbnRzIiwic3R5bGVzaGVldCIsInN0eWxlU2hlZXRzIiwic3R5bGVzaGVldFJ1bGUiLCJyZXF1aXJlZFNlbGVjdG9yQ29tYmluYXRpb24iLCJtb2R1bGVHbG9iYWxTZWxlY3RvciIsImluc2VydFJ1bGUiLCJjc3NSdWxlcyIsImFkZFJ1bGUiLCJpbmRleCIsImNzcyIsInBvcG92ZXIiLCJzdGF0dXNUZXh0IiwiJHRoaXMiLCJkb21PYmplY3QiLCJzY29yaW5nIiwicGFyc2VGbG9hdCIsImxvZ28iLCJ2ZXJzaW9uIiwiZGVzY3JpcHRpb24iLCJjaGlsZENhdGVnb3JpZXMiLCJjYXRlZ29yaWVzIiwiU3RyaW5nIiwicHJpY2UiLCJhY3RpdmUiLCJhY2Nlc3MiLCJkaXNwbGF5IiwiaGFzQ2xhc3MiLCJpc01vZHVsZXNQYWdlIiwib3JkZXIiLCJrZXkiLCJzcGxpdHRlZEtleSIsInNwbGl0Iiwic29ydCIsImEiLCJiIiwiYURhdGEiLCJiRGF0YSIsIkRhdGUiLCJnZXRUaW1lIiwibG9jYWxlQ29tcGFyZSIsInJldmVyc2UiLCJuYk1vZHVsZXNJbkNvbnRhaW5lciIsInVwZGF0ZU1vZHVsZVNvcnRpbmciLCJpc1Zpc2libGUiLCJjdXJyZW50TW9kdWxlIiwibW9kdWxlQ2F0ZWdvcnkiLCJ0YWdFeGlzdHMiLCJuZXdWYWx1ZSIsImRlZmF1bHRNYXgiLCJtb2R1bGVzTGlzdExlbmd0aCIsImNvdW50ZXIiLCJjaGVja1RhZyIsImluZGV4T2YiLCJpIiwidXBkYXRlTW9kdWxlQ29udGFpbmVyRGlzcGxheSIsImNoZWNrQm94ZXNTZWxlY3RvciIsIm1vZHVsZUl0ZW1TZWxlY3RvciIsImFscmVhZHlEb25lRmxhZyIsImh0bWxHZW5lcmF0ZWQiLCJjdXJyZW50RWxlbWVudCIsInNlcmlhbGl6ZSIsInN1Y2Nlc3MiLCJyZWxvYWQiLCJhZGRNb2R1bGVCdXR0b24iLCJkcm9wem9uZSIsInNldFRpbWVvdXQiLCJtYW51YWxTZWxlY3QiLCJzbGlkZURvd24iLCJkcm9wem9uZU9wdGlvbnMiLCJtb2R1bGVJbXBvcnQiLCJhY2NlcHRlZEZpbGVzIiwicGFyYW1OYW1lIiwibWF4RmlsZXNpemUiLCJ1cGxvYWRNdWx0aXBsZSIsImFkZFJlbW92ZUxpbmtzIiwiZGljdERlZmF1bHRNZXNzYWdlIiwiaGlkZGVuSW5wdXRDb250YWluZXIiLCJ0aW1lb3V0IiwiYWRkZWRmaWxlIiwiYW5pbWF0ZVN0YXJ0VXBsb2FkIiwicHJvY2Vzc2luZyIsImZpbGUiLCJkaXNwbGF5T25VcGxvYWRFcnJvciIsImNvbXBsZXRlIiwicmVzcG9uc2VPYmplY3QiLCJwYXJzZUpTT04iLCJ4aHIiLCJpc19jb25maWd1cmFibGUiLCJtb2R1bGVfbmFtZSIsImRpc3BsYXlPblVwbG9hZERvbmUiLCJleHRlbmQiLCJmaW5pc2giLCJhbmltYXRlRW5kVXBsb2FkIiwiY29uZmlndXJlTGluayIsImNvbmZpZ3VyYXRpb25QYWdlIiwiZGlzcGxheVByZXN0YVRydXN0U3RlcCIsIm1vZHVsZU5hbWUiLCJwb3N0IiwidXJscyIsImluc3RhbGwiLCJnZXRKU09OIiwibm90aWZpY2F0aW9uc0NvdW50IiwidXBkYXRlTm90aWZpY2F0aW9uc0NvdW50IiwiY29uc29sZSIsImJhZGdlIiwiZGVzdGluYXRpb25UYWJzIiwidG9fY29uZmlndXJlIiwidG9fdXBkYXRlIiwiZm9yRWFjaCIsImRlc3RpbmF0aW9uS2V5Iiwic2VhcmNoUXVlcnkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJqb2luIiwib3BlbiIsInJlZkNhdGVnb3J5IiwicmVzZXRUYWdzIiwid2FybiIsInJlcXVlc3RlZEJ1bGtBY3Rpb24iLCJidWxrQWN0aW9uVG9VcmwiLCJidWxrQWN0aW9uU2VsZWN0ZWRTZWxlY3RvciIsImJ1bGtNb2R1bGVBY3Rpb24iLCJtb2R1bGVzQWN0aW9ucyIsImFjdGlvbk1lbnVPYmoiLCJuZXh0IiwicGVyZm9ybU1vZHVsZXNBY3Rpb24iLCJhY3Rpb25zIiwibWVudUxpbmtzIiwiYWN0aW9uTWVudUxpbmsiLCJhY3Rpb25NZW51TGlua3MiLCJtb2R1bGVEYXRhIiwibW9kdWxlc1JlcXVlc3RlZENvdW50ZG93biIsInJlcXVlc3RNb2R1bGVBY3Rpb24iLCJjb3VudGRvd25Nb2R1bGVzUmVxdWVzdCIsInJlcXVlc3RFbmRDYWxsYmFjayIsImxhc3RNZW51TGluayIsIiRuZXh0IiwibW9kdWxlSXRlbUxpc3QiLCJyYXdUZXh0Iiwib3JpZ2luYWxUZXh0IiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInBzdGFnZ2VyIiwib25UYWdzQ2hhbmdlZCIsInRhZ0xpc3QiLCJvblJlc2V0VGFncyIsImlucHV0UGxhY2Vob2xkZXIiLCJjbG9zaW5nQ3Jvc3MiLCJjb250ZXh0Iiwic3dpdGNoVG8iLCJpc0FscmVhZHlEaXNwbGF5ZWQiLCJzd2l0Y2hTb3J0aW5nRGlzcGxheVRvIiwicmVwbGFjZUZpcnN0V29yZEJ5IiwiZXhwbG9kZWRUZXh0IiwiJHNob3J0TGlzdHMiLCJtb2R1bGVzQ291bnQiLCJzZWxlY3RvclRvVG9nZ2xlIiwiTW9kdWxlTG9hZGVyIiwiaGFuZGxlSW1wb3J0IiwiaGFuZGxlRXZlbnRzIiwidmFsaWRhdGUiLCJtb2R1bGVQb3BwaW4iLCJnZXQiLCJocmVmIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicHJvdG90eXBlIiwiX2Zyb20yIiwiYXJyIiwiQXJyYXkiLCJpc0FycmF5IiwiYXJyMiIsIiRPYmplY3QiLCJpdCIsImRlc2MiLCJkZWZpbmVQcm9wZXJ0eSIsImlzT2JqZWN0IiwidG9JT2JqZWN0IiwidG9MZW5ndGgiLCJ0b0Fic29sdXRlSW5kZXgiLCJJU19JTkNMVURFUyIsImVsIiwiZnJvbUluZGV4IiwiTyIsImNvZiIsIlRBRyIsIkFSRyIsImFyZ3VtZW50cyIsIlQiLCJCIiwidHJ5R2V0IiwiT2JqZWN0IiwiY2FsbGVlIiwidG9TdHJpbmciLCJjYWxsIiwiY29yZSIsIl9fZSIsIiRkZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZURlc2MiLCJvYmplY3QiLCJmIiwiYUZ1bmN0aW9uIiwiZm4iLCJjIiwiYXBwbHkiLCJpcyIsImdsb2JhbCIsImN0eCIsImhhcyIsIiRleHBvcnQiLCJzb3VyY2UiLCJvd24iLCJvdXQiLCJJU19GT1JDRUQiLCJGIiwiSVNfR0xPQkFMIiwiRyIsIklTX1NUQVRJQyIsIlMiLCJJU19QUk9UTyIsIlAiLCJJU19CSU5EIiwiSVNfV1JBUCIsIlciLCJleHBQcm90byIsIkMiLCJGdW5jdGlvbiIsInZpcnR1YWwiLCJSIiwiVSIsImV4ZWMiLCJNYXRoIiwiX19nIiwiaGFzT3duUHJvcGVydHkiLCJkUCIsImRvY3VtZW50RWxlbWVudCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiSXRlcmF0b3JzIiwiSVRFUkFUT1IiLCJBcnJheVByb3RvIiwiYW5PYmplY3QiLCJpdGVyYXRvciIsImVudHJpZXMiLCJyZXQiLCJjcmVhdGUiLCJzZXRUb1N0cmluZ1RhZyIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiTkFNRSIsIkxJQlJBUlkiLCJyZWRlZmluZSIsIiRpdGVyQ3JlYXRlIiwiZ2V0UHJvdG90eXBlT2YiLCJCVUdHWSIsImtleXMiLCJLRVlTIiwiVkFMVUVTIiwicmV0dXJuVGhpcyIsIkJhc2UiLCJERUZBVUxUIiwiSVNfU0VUIiwiRk9SQ0VEIiwibWV0aG9kcyIsImdldE1ldGhvZCIsImtpbmQiLCJwcm90byIsIkRFRl9WQUxVRVMiLCJWQUxVRVNfQlVHIiwiJG5hdGl2ZSIsIiRkZWZhdWx0IiwiJGVudHJpZXMiLCIkYW55TmF0aXZlIiwidmFsdWVzIiwiU0FGRV9DTE9TSU5HIiwicml0ZXIiLCJmcm9tIiwic2tpcENsb3NpbmciLCJzYWZlIiwiaXRlciIsImRQcyIsImVudW1CdWdLZXlzIiwiSUVfUFJPVE8iLCJFbXB0eSIsImNyZWF0ZURpY3QiLCJpZnJhbWVEb2N1bWVudCIsImlmcmFtZSIsInN0eWxlIiwiY29udGVudFdpbmRvdyIsIndyaXRlIiwibHQiLCJjbG9zZSIsIlByb3BlcnRpZXMiLCJJRThfRE9NX0RFRklORSIsInRvUHJpbWl0aXZlIiwiQXR0cmlidXRlcyIsImdldEtleXMiLCJ0b09iamVjdCIsIk9iamVjdFByb3RvIiwiY29uc3RydWN0b3IiLCJhcnJheUluZGV4T2YiLCJuYW1lcyIsIiRrZXlzIiwiZmFpbHMiLCJLRVkiLCJleHAiLCJiaXRtYXAiLCJkZWYiLCJ0YWciLCJzdGF0Iiwic2hhcmVkIiwidWlkIiwiU0hBUkVEIiwic3RvcmUiLCJtb2RlIiwiY29weXJpZ2h0IiwidG9JbnRlZ2VyIiwiZGVmaW5lZCIsIlRPX1NUUklORyIsInBvcyIsInMiLCJsIiwiY2hhckNvZGVBdCIsIm1heCIsIm1pbiIsImNlaWwiLCJmbG9vciIsImlzTmFOIiwiSU9iamVjdCIsInZhbCIsInZhbHVlT2YiLCJweCIsInJhbmRvbSIsImNvbmNhdCIsIlN5bWJvbCIsIlVTRV9TWU1CT0wiLCJjbGFzc29mIiwiaXNBcnJheUl0ZXIiLCJjcmVhdGVQcm9wZXJ0eSIsImdldEl0ZXJGbiIsImFycmF5TGlrZSIsInN0ZXAiLCJhTGVuIiwibWFwZm4iLCJtYXBwaW5nIiwiaXRlckZuIiwibnVtYmVyIiwiJGF0IiwiaXRlcmF0ZWQiLCJfdCIsIl9pIiwicG9pbnQiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sIm1hcHBpbmdzIjoiO3NKQTBDZSxTQUFzQkEsRUFBUUMsRUFBaUJDLEdBQWdCLFdBRXJFQyxFQUFnQkgsRUFBaEJHLEdBQUlDLEVBQVlKLEVBQVpJLFNBQ1hDLEtBQUtDLE1Ba0NQLFlBUUcsVUFQREgsVUFPQyxNQVBJLGdCQU9KLEVBTkRJLEVBTUMsRUFOREEsYUFNQyxJQUxEQyxzQkFLQyxNQUxnQixHQUtoQixNQUpEQyx3QkFJQyxNQUprQixRQUlsQixNQUhEQywwQkFHQyxNQUhvQixTQUdwQixNQUZEQywwQkFFQyxNQUZvQixjQUVwQixNQUREQyxxQkFDQyxNQURlLEdBQ2YsRUFDS04sRUFBUSxHQXlFZCxPQXRFQUEsRUFBTU8sVUFBWUMsU0FBU0MsY0FBYyxPQUN6Q1QsRUFBTU8sVUFBVUcsVUFBVUMsSUFBSSxRQUFTLFFBQ3ZDWCxFQUFNTyxVQUFVVixHQUFLQSxFQUdyQkcsRUFBTVksT0FBU0osU0FBU0MsY0FBYyxPQUN0Q1QsRUFBTVksT0FBT0YsVUFBVUMsSUFBSSxnQkFHM0JYLEVBQU1hLFFBQVVMLFNBQVNDLGNBQWMsT0FDdkNU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LEdBQVksQ0FHakQxTSxRQUFTLElBT1YsT0FIQTRNLEVBQW9CRixHQUFVcmlCLEVBQVFBLEVBQU8yVixRQUFTeU0sR0FHL0NwaUIsRUFBTzJWLFEsbUJDSWYsSSxJQUFBLFUsSUFDQSxTLElBQ0EsVSxvREFJQWxhLEVBRllTLE9BQUxULElBRUwsV0FDQSxJQUFNeUksRUFBdUIsSUFBSXhILFVBQ2pDLElBQUkwWSxVQUNKLElBQUluUixVQUFzQkMsTyIsImZpbGUiOiJtb2R1bGUuYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogQ29uZmlybU1vZGFsIGNvbXBvbmVudFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBpZFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1UaXRsZVxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1NZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gY2xvc2VCdXR0b25MYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1CdXR0b25MYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IGNvbmZpcm1CdXR0b25DbGFzc1xuICogQHBhcmFtIHtBcnJheX0gY3VzdG9tQnV0dG9uc1xuICogQHBhcmFtIHtCb29sZWFufSBjbG9zYWJsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlybUNhbGxiYWNrXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYW5jZWxDYWxsYmFja1xuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ29uZmlybU1vZGFsKHBhcmFtcywgY29uZmlybUNhbGxiYWNrLCBjYW5jZWxDYWxsYmFjaykge1xuICAvLyBDb25zdHJ1Y3QgdGhlIG1vZGFsXG4gIGNvbnN0IHtpZCwgY2xvc2FibGV9ID0gcGFyYW1zO1xuICB0aGlzLm1vZGFsID0gTW9kYWwocGFyYW1zKTtcblxuICAvLyBqUXVlcnkgbW9kYWwgb2JqZWN0XG4gIHRoaXMuJG1vZGFsID0gJCh0aGlzLm1vZGFsLmNvbnRhaW5lcik7XG5cbiAgdGhpcy5zaG93ID0gKCkgPT4ge1xuICAgIHRoaXMuJG1vZGFsLm1vZGFsKCk7XG4gIH07XG5cbiAgdGhpcy5tb2RhbC5jb25maXJtQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybUNhbGxiYWNrKTtcblxuICB0aGlzLiRtb2RhbC5tb2RhbCh7XG4gICAgYmFja2Ryb3A6IGNsb3NhYmxlID8gdHJ1ZSA6ICdzdGF0aWMnLFxuICAgIGtleWJvYXJkOiBjbG9zYWJsZSAhPT0gdW5kZWZpbmVkID8gY2xvc2FibGUgOiB0cnVlLFxuICAgIGNsb3NhYmxlOiBjbG9zYWJsZSAhPT0gdW5kZWZpbmVkID8gY2xvc2FibGUgOiB0cnVlLFxuICAgIHNob3c6IGZhbHNlLFxuICB9KTtcblxuICB0aGlzLiRtb2RhbC5vbignaGlkZGVuLmJzLm1vZGFsJywgKCkgPT4ge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2lkfWApLnJlbW92ZSgpO1xuICAgIGlmIChjYW5jZWxDYWxsYmFjaykge1xuICAgICAgY2FuY2VsQ2FsbGJhY2soKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5tb2RhbC5jb250YWluZXIpO1xufVxuXG4vKipcbiAqIE1vZGFsIGNvbXBvbmVudCB0byBpbXByb3ZlIGxpc2liaWxpdHkgYnkgY29uc3RydWN0aW5nIHRoZSBtb2RhbCBvdXRzaWRlIHRoZSBtYWluIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICpcbiAqL1xuZnVuY3Rpb24gTW9kYWwoe1xuICBpZCA9ICdjb25maXJtLW1vZGFsJyxcbiAgY29uZmlybVRpdGxlLFxuICBjb25maXJtTWVzc2FnZSA9ICcnLFxuICBjbG9zZUJ1dHRvbkxhYmVsID0gJ0Nsb3NlJyxcbiAgY29uZmlybUJ1dHRvbkxhYmVsID0gJ0FjY2VwdCcsXG4gIGNvbmZpcm1CdXR0b25DbGFzcyA9ICdidG4tcHJpbWFyeScsXG4gIGN1c3RvbUJ1dHRvbnMgPSBbXSxcbn0pIHtcbiAgY29uc3QgbW9kYWwgPSB7fTtcblxuICAvLyBNYWluIG1vZGFsIGVsZW1lbnRcbiAgbW9kYWwuY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdtb2RhbCcsICdmYWRlJyk7XG4gIG1vZGFsLmNvbnRhaW5lci5pZCA9IGlkO1xuXG4gIC8vIE1vZGFsIGRpYWxvZyBlbGVtZW50XG4gIG1vZGFsLmRpYWxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5kaWFsb2cuY2xhc3NMaXN0LmFkZCgnbW9kYWwtZGlhbG9nJyk7XG5cbiAgLy8gTW9kYWwgY29udGVudCBlbGVtZW50XG4gIG1vZGFsLmNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbW9kYWwuY29udGVudC5jbGFzc0xpc3QuYWRkKCdtb2RhbC1jb250ZW50Jyk7XG5cbiAgLy8gTW9kYWwgaGVhZGVyIGVsZW1lbnRcbiAgbW9kYWwuaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG1vZGFsLmhlYWRlci5jbGFzc0xpc3QuYWRkKCdtb2RhbC1oZWFkZXInKTtcblxuICAvLyBNb2RhbCB0aXRsZSBlbGVtZW50XG4gIGlmIChjb25maXJtVGl0bGUpIHtcbiAgICBtb2RhbC50aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2g0Jyk7XG4gICAgbW9kYWwudGl0bGUuY2xhc3NMaXN0LmFkZCgnbW9kYWwtdGl0bGUnKTtcbiAgICBtb2RhbC50aXRsZS5pbm5lckhUTUwgPSBjb25maXJtVGl0bGU7XG4gIH1cblxuICAvLyBNb2RhbCBjbG9zZSBidXR0b24gaWNvblxuICBtb2RhbC5jbG9zZUljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgbW9kYWwuY2xvc2VJY29uLmNsYXNzTGlzdC5hZGQoJ2Nsb3NlJyk7XG4gIG1vZGFsLmNsb3NlSWNvbi5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnYnV0dG9uJyk7XG4gIG1vZGFsLmNsb3NlSWNvbi5kYXRhc2V0LmRpc21pc3MgPSAnbW9kYWwnO1xuICBtb2RhbC5jbG9zZUljb24uaW5uZXJIVE1MID0gJ8OXJztcblxuICAvLyBNb2RhbCBib2R5IGVsZW1lbnRcbiAgbW9kYWwuYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5ib2R5LmNsYXNzTGlzdC5hZGQoJ21vZGFsLWJvZHknLCAndGV4dC1sZWZ0JywgJ2ZvbnQtd2VpZ2h0LW5vcm1hbCcpO1xuXG4gIC8vIE1vZGFsIG1lc3NhZ2UgZWxlbWVudFxuICBtb2RhbC5tZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICBtb2RhbC5tZXNzYWdlLmNsYXNzTGlzdC5hZGQoJ2NvbmZpcm0tbWVzc2FnZScpO1xuICBtb2RhbC5tZXNzYWdlLmlubmVySFRNTCA9IGNvbmZpcm1NZXNzYWdlO1xuXG4gIC8vIE1vZGFsIGZvb3RlciBlbGVtZW50XG4gIG1vZGFsLmZvb3RlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBtb2RhbC5mb290ZXIuY2xhc3NMaXN0LmFkZCgnbW9kYWwtZm9vdGVyJyk7XG5cbiAgLy8gTW9kYWwgY2xvc2UgYnV0dG9uIGVsZW1lbnRcbiAgbW9kYWwuY2xvc2VCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgbW9kYWwuY2xvc2VCdXR0b24uc2V0QXR0cmlidXRlKCd0eXBlJywgJ2J1dHRvbicpO1xuICBtb2RhbC5jbG9zZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdidG4nLCAnYnRuLW91dGxpbmUtc2Vjb25kYXJ5JywgJ2J0bi1sZycpO1xuICBtb2RhbC5jbG9zZUJ1dHRvbi5kYXRhc2V0LmRpc21pc3MgPSAnbW9kYWwnO1xuICBtb2RhbC5jbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSBjbG9zZUJ1dHRvbkxhYmVsO1xuXG4gIC8vIE1vZGFsIGNvbmZpcm0gYnV0dG9uIGVsZW1lbnRcbiAgbW9kYWwuY29uZmlybUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICBtb2RhbC5jb25maXJtQnV0dG9uLnNldEF0dHJpYnV0ZSgndHlwZScsICdidXR0b24nKTtcbiAgbW9kYWwuY29uZmlybUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdidG4nLCBjb25maXJtQnV0dG9uQ2xhc3MsICdidG4tbGcnLCAnYnRuLWNvbmZpcm0tc3VibWl0Jyk7XG4gIG1vZGFsLmNvbmZpcm1CdXR0b24uZGF0YXNldC5kaXNtaXNzID0gJ21vZGFsJztcbiAgbW9kYWwuY29uZmlybUJ1dHRvbi5pbm5lckhUTUwgPSBjb25maXJtQnV0dG9uTGFiZWw7XG5cbiAgLy8gQ29uc3RydWN0aW5nIHRoZSBtb2RhbFxuICBpZiAoY29uZmlybVRpdGxlKSB7XG4gICAgbW9kYWwuaGVhZGVyLmFwcGVuZChtb2RhbC50aXRsZSwgbW9kYWwuY2xvc2VJY29uKTtcbiAgfSBlbHNlIHtcbiAgICBtb2RhbC5oZWFkZXIuYXBwZW5kQ2hpbGQobW9kYWwuY2xvc2VJY29uKTtcbiAgfVxuXG4gIG1vZGFsLmJvZHkuYXBwZW5kQ2hpbGQobW9kYWwubWVzc2FnZSk7XG4gIG1vZGFsLmZvb3Rlci5hcHBlbmQobW9kYWwuY2xvc2VCdXR0b24sIC4uLmN1c3RvbUJ1dHRvbnMsIG1vZGFsLmNvbmZpcm1CdXR0b24pO1xuICBtb2RhbC5jb250ZW50LmFwcGVuZChtb2RhbC5oZWFkZXIsIG1vZGFsLmJvZHksIG1vZGFsLmZvb3Rlcik7XG4gIG1vZGFsLmRpYWxvZy5hcHBlbmRDaGlsZChtb2RhbC5jb250ZW50KTtcbiAgbW9kYWwuY29udGFpbmVyLmFwcGVuZENoaWxkKG1vZGFsLmRpYWxvZyk7XG5cbiAgcmV0dXJuIG1vZGFsO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuaW1wb3J0IENvbmZpcm1Nb2RhbCBmcm9tICdAY29tcG9uZW50cy9tb2RhbCc7XG5cbmNvbnN0IHskfSA9IHdpbmRvdztcblxuY29uc3QgQk9FdmVudCA9IHtcbiAgb24oZXZlbnROYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAoZXZlbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29udGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbChjb250ZXh0LCBldmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgZW1pdEV2ZW50KGV2ZW50TmFtZSwgZXZlbnRUeXBlKSB7XG4gICAgY29uc3QgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChldmVudFR5cGUpO1xuICAgIC8vIHRydWUgdmFsdWVzIHN0YW5kIGZvcjogY2FuIGJ1YmJsZSwgYW5kIGlzIGNhbmNlbGxhYmxlXG4gICAgZXZlbnQuaW5pdEV2ZW50KGV2ZW50TmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0sXG59O1xuXG4vKipcbiAqIENsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBNb2R1bGUgQ2FyZCBiZWhhdmlvclxuICpcbiAqIFRoaXMgaXMgYSBwb3J0IG9mIGFkbWluLWRldi90aGVtZXMvZGVmYXVsdC9qcy9idW5kbGUvbW9kdWxlL21vZHVsZV9jYXJkLmpzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZUNhcmQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKiBTZWxlY3RvcnMgZm9yIG1vZHVsZSBhY3Rpb24gbGlua3MgKHVuaW5zdGFsbCwgcmVzZXQsIGV0Yy4uLikgdG8gYWRkIGEgY29uZmlybSBwb3BpbiAqL1xuICAgIHRoaXMubW9kdWxlQWN0aW9uTWVudUxpbmtTZWxlY3RvciA9ICdidXR0b24ubW9kdWxlX2FjdGlvbl9tZW51Xyc7XG4gICAgdGhpcy5tb2R1bGVBY3Rpb25NZW51SW5zdGFsbExpbmtTZWxlY3RvciA9ICdidXR0b24ubW9kdWxlX2FjdGlvbl9tZW51X2luc3RhbGwnO1xuICAgIHRoaXMubW9kdWxlQWN0aW9uTWVudUVuYWJsZUxpbmtTZWxlY3RvciA9ICdidXR0b24ubW9kdWxlX2FjdGlvbl9tZW51X2VuYWJsZSc7XG4gICAgdGhpcy5tb2R1bGVBY3Rpb25NZW51VW5pbnN0YWxsTGlua1NlbGVjdG9yID0gJ2J1dHRvbi5tb2R1bGVfYWN0aW9uX21lbnVfdW5pbnN0YWxsJztcbiAgICB0aGlzLm1vZHVsZUFjdGlvbk1lbnVEaXNhYmxlTGlua1NlbGVjdG9yID0gJ2J1dHRvbi5tb2R1bGVfYWN0aW9uX21lbnVfZGlzYWJsZSc7XG4gICAgdGhpcy5tb2R1bGVBY3Rpb25NZW51RW5hYmxlTW9iaWxlTGlua1NlbGVjdG9yID0gJ2J1dHRvbi5tb2R1bGVfYWN0aW9uX21lbnVfZW5hYmxlX21vYmlsZSc7XG4gICAgdGhpcy5tb2R1bGVBY3Rpb25NZW51RGlzYWJsZU1vYmlsZUxpbmtTZWxlY3RvciA9ICdidXR0b24ubW9kdWxlX2FjdGlvbl9tZW51X2Rpc2FibGVfbW9iaWxlJztcbiAgICB0aGlzLm1vZHVsZUFjdGlvbk1lbnVSZXNldExpbmtTZWxlY3RvciA9ICdidXR0b24ubW9kdWxlX2FjdGlvbl9tZW51X3Jlc2V0JztcbiAgICB0aGlzLm1vZHVsZUFjdGlvbk1lbnVVcGRhdGVMaW5rU2VsZWN0b3IgPSAnYnV0dG9uLm1vZHVsZV9hY3Rpb25fbWVudV91cGdyYWRlJztcbiAgICB0aGlzLm1vZHVsZUl0ZW1MaXN0U2VsZWN0b3IgPSAnLm1vZHVsZS1pdGVtLWxpc3QnO1xuICAgIHRoaXMubW9kdWxlSXRlbUdyaWRTZWxlY3RvciA9ICcubW9kdWxlLWl0ZW0tZ3JpZCc7XG4gICAgdGhpcy5tb2R1bGVJdGVtQWN0aW9uc1NlbGVjdG9yID0gJy5tb2R1bGUtYWN0aW9ucyc7XG5cbiAgICAvKiBTZWxlY3RvcnMgb25seSBmb3IgbW9kYWwgYnV0dG9ucyAqL1xuICAgIHRoaXMubW9kdWxlQWN0aW9uTW9kYWxEaXNhYmxlTGlua1NlbGVjdG9yID0gJ2EubW9kdWxlX2FjdGlvbl9tb2RhbF9kaXNhYmxlJztcbiAgICB0aGlzLm1vZHVsZUFjdGlvbk1vZGFsUmVzZXRMaW5rU2VsZWN0b3IgPSAnYS5tb2R1bGVfYWN0aW9uX21vZGFsX3Jlc2V0JztcbiAgICB0aGlzLm1vZHVsZUFjdGlvbk1vZGFsVW5pbnN0YWxsTGlua1NlbGVjdG9yID0gJ2EubW9kdWxlX2FjdGlvbl9tb2RhbF91bmluc3RhbGwnO1xuICAgIHRoaXMuZm9yY2VEZWxldGlvbk9wdGlvbiA9ICcjZm9yY2VfZGVsZXRpb24nO1xuXG4gICAgdGhpcy5pbml0QWN0aW9uQnV0dG9ucygpO1xuICB9XG5cbiAgaW5pdEFjdGlvbkJ1dHRvbnMoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCB0aGlzLmZvcmNlRGVsZXRpb25PcHRpb24sIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ0biA9ICQoXG4gICAgICAgIHNlbGYubW9kdWxlQWN0aW9uTW9kYWxVbmluc3RhbGxMaW5rU2VsZWN0b3IsXG4gICAgICAgICQoYGRpdi5tb2R1bGUtaXRlbS1saXN0W2RhdGEtdGVjaC1uYW1lPSckeyQodGhpcykuYXR0cignZGF0YS10ZWNoLW5hbWUnKX0nXWApLFxuICAgICAgKTtcblxuICAgICAgaWYgKCQodGhpcykucHJvcCgnY2hlY2tlZCcpID09PSB0cnVlKSB7XG4gICAgICAgIGJ0bi5hdHRyKCdkYXRhLWRlbGV0aW9uJywgJ3RydWUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ0bi5yZW1vdmVBdHRyKCdkYXRhLWRlbGV0aW9uJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCB0aGlzLm1vZHVsZUFjdGlvbk1lbnVJbnN0YWxsTGlua1NlbGVjdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoJCgnI21vZGFsLXByZXN0YXRydXN0JykubGVuZ3RoKSB7XG4gICAgICAgICQoJyNtb2RhbC1wcmVzdGF0cnVzdCcpLm1vZGFsKCdoaWRlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNlbGYuZGlzcGF0Y2hQcmVFdmVudCgnaW5zdGFsbCcsIHRoaXMpXG4gICAgICAgICYmIHNlbGYuY29uZmlybUFjdGlvbignaW5zdGFsbCcsIHRoaXMpXG4gICAgICAgICYmIHNlbGYucmVxdWVzdFRvQ29udHJvbGxlcignaW5zdGFsbCcsICQodGhpcykpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgdGhpcy5tb2R1bGVBY3Rpb25NZW51RW5hYmxlTGlua1NlbGVjdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzZWxmLmRpc3BhdGNoUHJlRXZlbnQoJ2VuYWJsZScsIHRoaXMpXG4gICAgICAgICYmIHNlbGYuY29uZmlybUFjdGlvbignZW5hYmxlJywgdGhpcylcbiAgICAgICAgJiYgc2VsZi5yZXF1ZXN0VG9Db250cm9sbGVyKCdlbmFibGUnLCAkKHRoaXMpKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIHRoaXMubW9kdWxlQWN0aW9uTWVudVVuaW5zdGFsbExpbmtTZWxlY3RvciwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VsZi5kaXNwYXRjaFByZUV2ZW50KCd1bmluc3RhbGwnLCB0aGlzKVxuICAgICAgICAmJiBzZWxmLmNvbmZpcm1BY3Rpb24oJ3VuaW5zdGFsbCcsIHRoaXMpXG4gICAgICAgICYmIHNlbGYucmVxdWVzdFRvQ29udHJvbGxlcigndW5pbnN0YWxsJywgJCh0aGlzKSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCB0aGlzLm1vZHVsZUFjdGlvbk1lbnVEaXNhYmxlTGlua1NlbGVjdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzZWxmLmRpc3BhdGNoUHJlRXZlbnQoJ2Rpc2FibGUnLCB0aGlzKVxuICAgICAgICAmJiBzZWxmLmNvbmZpcm1BY3Rpb24oJ2Rpc2FibGUnLCB0aGlzKVxuICAgICAgICAmJiBzZWxmLnJlcXVlc3RUb0NvbnRyb2xsZXIoJ2Rpc2FibGUnLCAkKHRoaXMpKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIHRoaXMubW9kdWxlQWN0aW9uTWVudUVuYWJsZU1vYmlsZUxpbmtTZWxlY3RvciwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VsZi5kaXNwYXRjaFByZUV2ZW50KCdlbmFibGVfbW9iaWxlJywgdGhpcylcbiAgICAgICAgJiYgc2VsZi5jb25maXJtQWN0aW9uKCdlbmFibGVfbW9iaWxlJywgdGhpcylcbiAgICAgICAgJiYgc2VsZi5yZXF1ZXN0VG9Db250cm9sbGVyKCdlbmFibGVfbW9iaWxlJywgJCh0aGlzKSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCB0aGlzLm1vZHVsZUFjdGlvbk1lbnVEaXNhYmxlTW9iaWxlTGlua1NlbGVjdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzZWxmLmRpc3BhdGNoUHJlRXZlbnQoJ2Rpc2FibGVfbW9iaWxlJywgdGhpcylcbiAgICAgICAgJiYgc2VsZi5jb25maXJtQWN0aW9uKCdkaXNhYmxlX21vYmlsZScsIHRoaXMpXG4gICAgICAgICYmIHNlbGYucmVxdWVzdFRvQ29udHJvbGxlcignZGlzYWJsZV9tb2JpbGUnLCAkKHRoaXMpKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIHRoaXMubW9kdWxlQWN0aW9uTWVudVJlc2V0TGlua1NlbGVjdG9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzZWxmLmRpc3BhdGNoUHJlRXZlbnQoJ3Jlc2V0JywgdGhpcylcbiAgICAgICAgJiYgc2VsZi5jb25maXJtQWN0aW9uKCdyZXNldCcsIHRoaXMpXG4gICAgICAgICYmIHNlbGYucmVxdWVzdFRvQ29udHJvbGxlcigncmVzZXQnLCAkKHRoaXMpKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIHRoaXMubW9kdWxlQWN0aW9uTWVudVVwZGF0ZUxpbmtTZWxlY3RvciwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgbW9kYWwgPSAkKGAjJHskKHRoaXMpLmRhdGEoJ2NvbmZpcm1fbW9kYWwnKX1gKTtcbiAgICAgIGNvbnN0IGlzTWFpbnRlbmFuY2VNb2RlID0gd2luZG93LmlzU2hvcE1haW50ZW5hbmNlO1xuXG4gICAgICBpZiAobW9kYWwubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIC8vIE1vZGFsIGJvZHkgZWxlbWVudFxuICAgICAgICBjb25zdCBtYWludGVuYW5jZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIG1haW50ZW5hbmNlTGluay5jbGFzc0xpc3QuYWRkKCdidG4nLCAnYnRuLXByaW1hcnknLCAnYnRuLWxnJyk7XG4gICAgICAgIG1haW50ZW5hbmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cubW9kdWxlVVJMcy5tYWludGVuYW5jZVBhZ2UpO1xuICAgICAgICBtYWludGVuYW5jZUxpbmsuaW5uZXJIVE1MID0gd2luZG93Lm1vZHVsZVRyYW5zbGF0aW9ucy5tb2R1bGVNb2RhbFVwZGF0ZU1haW50ZW5hbmNlO1xuXG4gICAgICAgIGNvbnN0IHVwZGF0ZUNvbmZpcm1Nb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdjb25maXJtLW1vZHVsZS11cGRhdGUtbW9kYWwnLFxuICAgICAgICAgICAgY29uZmlybVRpdGxlOiB3aW5kb3cubW9kdWxlVHJhbnNsYXRpb25zLnNpbmdsZU1vZHVsZU1vZGFsVXBkYXRlVGl0bGUsXG4gICAgICAgICAgICBjbG9zZUJ1dHRvbkxhYmVsOiB3aW5kb3cubW9kdWxlVHJhbnNsYXRpb25zLm1vZHVsZU1vZGFsVXBkYXRlQ2FuY2VsLFxuICAgICAgICAgICAgY29uZmlybUJ1dHRvbkxhYmVsOiBpc01haW50ZW5hbmNlTW9kZVxuICAgICAgICAgICAgICA/IHdpbmRvdy5tb2R1bGVUcmFuc2xhdGlvbnMubW9kdWxlTW9kYWxVcGRhdGVVcGdyYWRlXG4gICAgICAgICAgICAgIDogd2luZG93Lm1vZHVsZVRyYW5zbGF0aW9ucy51cGdyYWRlQW55d2F5QnV0dG9uVGV4dCxcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25DbGFzczogaXNNYWludGVuYW5jZU1vZGUgPyAnYnRuLXByaW1hcnknIDogJ2J0bi1zZWNvbmRhcnknLFxuICAgICAgICAgICAgY29uZmlybU1lc3NhZ2U6IGlzTWFpbnRlbmFuY2VNb2RlID8gJycgOiB3aW5kb3cubW9kdWxlVHJhbnNsYXRpb25zLm1vZHVsZU1vZGFsVXBkYXRlQ29uZmlybU1lc3NhZ2UsXG4gICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGN1c3RvbUJ1dHRvbnM6IGlzTWFpbnRlbmFuY2VNb2RlID8gW10gOiBbbWFpbnRlbmFuY2VMaW5rXSxcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgKCkgPT4gc2VsZi5kaXNwYXRjaFByZUV2ZW50KCd1cGRhdGUnLCB0aGlzKVxuICAgICAgICAgICAgJiYgc2VsZi5jb25maXJtQWN0aW9uKCd1cGRhdGUnLCB0aGlzKVxuICAgICAgICAgICAgJiYgc2VsZi5yZXF1ZXN0VG9Db250cm9sbGVyKCd1cGRhdGUnLCAkKHRoaXMpKSxcbiAgICAgICAgKTtcblxuICAgICAgICB1cGRhdGVDb25maXJtTW9kYWwuc2hvdygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBzZWxmLmRpc3BhdGNoUHJlRXZlbnQoJ3VwZGF0ZScsIHRoaXMpXG4gICAgICAgICAgJiYgc2VsZi5jb25maXJtQWN0aW9uKCd1cGRhdGUnLCB0aGlzKVxuICAgICAgICAgICYmIHNlbGYucmVxdWVzdFRvQ29udHJvbGxlcigndXBkYXRlJywgJCh0aGlzKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgdGhpcy5tb2R1bGVBY3Rpb25Nb2RhbERpc2FibGVMaW5rU2VsZWN0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzZWxmLnJlcXVlc3RUb0NvbnRyb2xsZXIoXG4gICAgICAgICdkaXNhYmxlJyxcbiAgICAgICAgJChcbiAgICAgICAgICBzZWxmLm1vZHVsZUFjdGlvbk1lbnVEaXNhYmxlTGlua1NlbGVjdG9yLFxuICAgICAgICAgICQoYGRpdi5tb2R1bGUtaXRlbS1saXN0W2RhdGEtdGVjaC1uYW1lPSckeyQodGhpcykuYXR0cignZGF0YS10ZWNoLW5hbWUnKX0nXWApLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIHRoaXMubW9kdWxlQWN0aW9uTW9kYWxSZXNldExpbmtTZWxlY3RvciwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHNlbGYucmVxdWVzdFRvQ29udHJvbGxlcihcbiAgICAgICAgJ3Jlc2V0JyxcbiAgICAgICAgJChcbiAgICAgICAgICBzZWxmLm1vZHVsZUFjdGlvbk1lbnVSZXNldExpbmtTZWxlY3RvcixcbiAgICAgICAgICAkKGBkaXYubW9kdWxlLWl0ZW0tbGlzdFtkYXRhLXRlY2gtbmFtZT0nJHskKHRoaXMpLmF0dHIoJ2RhdGEtdGVjaC1uYW1lJyl9J11gKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCB0aGlzLm1vZHVsZUFjdGlvbk1vZGFsVW5pbnN0YWxsTGlua1NlbGVjdG9yLCAoZSkgPT4ge1xuICAgICAgJChlLnRhcmdldClcbiAgICAgICAgLnBhcmVudHMoJy5tb2RhbCcpXG4gICAgICAgIC5vbignaGlkZGVuLmJzLm1vZGFsJywgKCkgPT4gc2VsZi5yZXF1ZXN0VG9Db250cm9sbGVyKFxuICAgICAgICAgICd1bmluc3RhbGwnLFxuICAgICAgICAgICQoXG4gICAgICAgICAgICBzZWxmLm1vZHVsZUFjdGlvbk1lbnVVbmluc3RhbGxMaW5rU2VsZWN0b3IsXG4gICAgICAgICAgICAkKGBkaXYubW9kdWxlLWl0ZW0tbGlzdFtkYXRhLXRlY2gtbmFtZT0nJHskKGUudGFyZ2V0KS5hdHRyKCdkYXRhLXRlY2gtbmFtZScpfSddYCksXG4gICAgICAgICAgKSxcbiAgICAgICAgICAkKGUudGFyZ2V0KS5hdHRyKCdkYXRhLWRlbGV0aW9uJyksXG4gICAgICAgICksXG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRNb2R1bGVJdGVtU2VsZWN0b3IoKSB7XG4gICAgaWYgKCQodGhpcy5tb2R1bGVJdGVtTGlzdFNlbGVjdG9yKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZHVsZUl0ZW1MaXN0U2VsZWN0b3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubW9kdWxlSXRlbUdyaWRTZWxlY3RvcjtcbiAgfVxuXG4gIGNvbmZpcm1BY3Rpb24oYWN0aW9uLCBlbGVtZW50KSB7XG4gICAgY29uc3QgbW9kYWwgPSAkKGAjJHskKGVsZW1lbnQpLmRhdGEoJ2NvbmZpcm1fbW9kYWwnKX1gKTtcblxuICAgIGlmIChtb2RhbC5sZW5ndGggIT09IDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG1vZGFsLmZpcnN0KCkubW9kYWwoJ3Nob3cnKTtcblxuICAgIHJldHVybiBmYWxzZTsgLy8gZG8gbm90IGFsbG93IGEuaHJlZiB0byByZWxvYWQgdGhlIHBhZ2UuIFRoZSBjb25maXJtIG1vZGFsIGRpYWxvZyB3aWxsIGRvIGl0IGFzeW5jIGlmIG5lZWRlZC5cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGNvbnRlbnQgb2YgYSBtb2RhbCBhc2tpbmcgYSBjb25maXJtYXRpb24gZm9yIFByZXN0YVRydXN0IGFuZCBvcGVuIGl0XG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IHJlc3VsdCBjb250YWluaW5nIG1vZHVsZSBkYXRhXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBjb25maXJtUHJlc3RhVHJ1c3QocmVzdWx0KSB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgY29uc3QgbW9kYWwgPSB0aGlzLnJlcGxhY2VQcmVzdGFUcnVzdFBsYWNlaG9sZGVycyhyZXN1bHQpO1xuXG4gICAgbW9kYWxcbiAgICAgIC5maW5kKCcucHN0cnVzdC1pbnN0YWxsJylcbiAgICAgIC5vZmYoJ2NsaWNrJylcbiAgICAgIC5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgIC8vIEZpbmQgcmVsYXRlZCBmb3JtLCB1cGRhdGUgaXQgYW5kIHN1Ym1pdCBpdFxuICAgICAgICBjb25zdCBpbnN0YWxsQnV0dG9uID0gJChcbiAgICAgICAgICB0aGF0Lm1vZHVsZUFjdGlvbk1lbnVJbnN0YWxsTGlua1NlbGVjdG9yLFxuICAgICAgICAgIGAubW9kdWxlLWl0ZW1bZGF0YS10ZWNoLW5hbWU9XCIke3Jlc3VsdC5tb2R1bGUuYXR0cmlidXRlcy5uYW1lfVwiXWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgZm9ybSA9IGluc3RhbGxCdXR0b24ucGFyZW50KCdmb3JtJyk7XG4gICAgICAgICQoJzxpbnB1dD4nKVxuICAgICAgICAgIC5hdHRyKHtcbiAgICAgICAgICAgIHR5cGU6ICdoaWRkZW4nLFxuICAgICAgICAgICAgdmFsdWU6ICcxJyxcbiAgICAgICAgICAgIG5hbWU6ICdhY3Rpb25QYXJhbXNbY29uZmlybVByZXN0YVRydXN0XScsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYXBwZW5kVG8oZm9ybSk7XG5cbiAgICAgICAgaW5zdGFsbEJ1dHRvbi5jbGljaygpO1xuICAgICAgICBtb2RhbC5tb2RhbCgnaGlkZScpO1xuICAgICAgfSk7XG5cbiAgICBtb2RhbC5tb2RhbCgpO1xuICB9XG5cbiAgcmVwbGFjZVByZXN0YVRydXN0UGxhY2Vob2xkZXJzKHJlc3VsdCkge1xuICAgIGNvbnN0IG1vZGFsID0gJCgnI21vZGFsLXByZXN0YXRydXN0Jyk7XG4gICAgY29uc3QgbW9kdWxlID0gcmVzdWx0Lm1vZHVsZS5hdHRyaWJ1dGVzO1xuXG4gICAgaWYgKHJlc3VsdC5jb25maXJtYXRpb25fc3ViamVjdCAhPT0gJ1ByZXN0YVRydXN0JyB8fCAhbW9kYWwubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYWxlcnRDbGFzcyA9IG1vZHVsZS5wcmVzdGF0cnVzdC5zdGF0dXMgPyAnc3VjY2VzcycgOiAnd2FybmluZyc7XG5cbiAgICBpZiAobW9kdWxlLnByZXN0YXRydXN0LmNoZWNrX2xpc3QucHJvcGVydHkpIHtcbiAgICAgIG1vZGFsLmZpbmQoJyNwc3RydXN0LWJ0bi1wcm9wZXJ0eS1vaycpLnNob3coKTtcbiAgICAgIG1vZGFsLmZpbmQoJyNwc3RydXN0LWJ0bi1wcm9wZXJ0eS1ub2snKS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGFsLmZpbmQoJyNwc3RydXN0LWJ0bi1wcm9wZXJ0eS1vaycpLmhpZGUoKTtcbiAgICAgIG1vZGFsLmZpbmQoJyNwc3RydXN0LWJ0bi1wcm9wZXJ0eS1ub2snKS5zaG93KCk7XG4gICAgICBtb2RhbFxuICAgICAgICAuZmluZCgnI3BzdHJ1c3QtYnV5JylcbiAgICAgICAgLmF0dHIoJ2hyZWYnLCBtb2R1bGUudXJsKVxuICAgICAgICAudG9nZ2xlKG1vZHVsZS51cmwgIT09IG51bGwpO1xuICAgIH1cblxuICAgIG1vZGFsLmZpbmQoJyNwc3RydXN0LWltZycpLmF0dHIoe3NyYzogbW9kdWxlLmltZywgYWx0OiBtb2R1bGUubmFtZX0pO1xuICAgIG1vZGFsLmZpbmQoJyNwc3RydXN0LW5hbWUnKS50ZXh0KG1vZHVsZS5kaXNwbGF5TmFtZSk7XG4gICAgbW9kYWwuZmluZCgnI3BzdHJ1c3QtYXV0aG9yJykudGV4dChtb2R1bGUuYXV0aG9yKTtcbiAgICBtb2RhbFxuICAgICAgLmZpbmQoJyNwc3RydXN0LWxhYmVsJylcbiAgICAgIC5hdHRyKCdjbGFzcycsIGB0ZXh0LSR7YWxlcnRDbGFzc31gKVxuICAgICAgLnRleHQobW9kdWxlLnByZXN0YXRydXN0LnN0YXR1cyA/ICdPSycgOiAnS08nKTtcbiAgICBtb2RhbC5maW5kKCcjcHN0cnVzdC1tZXNzYWdlJykuYXR0cignY2xhc3MnLCBgYWxlcnQgYWxlcnQtJHthbGVydENsYXNzfWApO1xuICAgIG1vZGFsLmZpbmQoJyNwc3RydXN0LW1lc3NhZ2UgPiBwJykudGV4dChtb2R1bGUucHJlc3RhdHJ1c3QubWVzc2FnZSk7XG5cbiAgICByZXR1cm4gbW9kYWw7XG4gIH1cblxuICBkaXNwYXRjaFByZUV2ZW50KGFjdGlvbiwgZWxlbWVudCkge1xuICAgIGNvbnN0IGV2ZW50ID0galF1ZXJ5LkV2ZW50KCdtb2R1bGVfY2FyZF9hY3Rpb25fZXZlbnQnKTtcblxuICAgICQoZWxlbWVudCkudHJpZ2dlcihldmVudCwgW2FjdGlvbl0pO1xuICAgIGlmIChldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICE9PSBmYWxzZSB8fCBldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICE9PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBpZiBhbGwgaGFuZGxlcnMgaGF2ZSBub3QgYmVlbiBjYWxsZWQsIHRoZW4gc3RvcCBwcm9wYWdhdGlvbiBvZiB0aGUgY2xpY2sgZXZlbnQuXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50LnJlc3VsdCAhPT0gZmFsc2U7IC8vIGV4cGxpY2l0IGZhbHNlIG11c3QgYmUgc2V0IGZyb20gaGFuZGxlcnMgdG8gc3RvcCBwcm9wYWdhdGlvbiBvZiB0aGUgY2xpY2sgZXZlbnQuXG4gIH1cblxuICByZXF1ZXN0VG9Db250cm9sbGVyKGFjdGlvbiwgZWxlbWVudCwgZm9yY2VEZWxldGlvbiwgZGlzYWJsZUNhY2hlQ2xlYXIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QganFFbGVtZW50T2JqID0gZWxlbWVudC5jbG9zZXN0KHRoaXMubW9kdWxlSXRlbUFjdGlvbnNTZWxlY3Rvcik7XG4gICAgY29uc3QgZm9ybSA9IGVsZW1lbnQuY2xvc2VzdCgnZm9ybScpO1xuICAgIGNvbnN0IHNwaW5uZXJPYmogPSAkKCc8YnV0dG9uIGNsYXNzPVwiYnRuLXByaW1hcnktcmV2ZXJzZSBvbmNsaWNrIHVuYmluZCBzcGlubmVyIFwiPjwvYnV0dG9uPicpO1xuICAgIGNvbnN0IHVybCA9IGAvLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9JHtmb3JtLmF0dHIoJ2FjdGlvbicpfWA7XG4gICAgY29uc3QgYWN0aW9uUGFyYW1zID0gZm9ybS5zZXJpYWxpemVBcnJheSgpO1xuXG4gICAgaWYgKGZvcmNlRGVsZXRpb24gPT09ICd0cnVlJyB8fCBmb3JjZURlbGV0aW9uID09PSB0cnVlKSB7XG4gICAgICBhY3Rpb25QYXJhbXMucHVzaCh7bmFtZTogJ2FjdGlvblBhcmFtc1tkZWxldGlvbl0nLCB2YWx1ZTogdHJ1ZX0pO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZUNhY2hlQ2xlYXIgPT09ICd0cnVlJyB8fCBkaXNhYmxlQ2FjaGVDbGVhciA9PT0gdHJ1ZSkge1xuICAgICAgYWN0aW9uUGFyYW1zLnB1c2goe25hbWU6ICdhY3Rpb25QYXJhbXNbY2FjaGVDbGVhckVuYWJsZWRdJywgdmFsdWU6IDB9KTtcbiAgICB9XG5cbiAgICAkLmFqYXgoe1xuICAgICAgdXJsLFxuICAgICAgZGF0YVR5cGU6ICdqc29uJyxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgZGF0YTogYWN0aW9uUGFyYW1zLFxuICAgICAgYmVmb3JlU2VuZCgpIHtcbiAgICAgICAganFFbGVtZW50T2JqLmhpZGUoKTtcbiAgICAgICAganFFbGVtZW50T2JqLmFmdGVyKHNwaW5uZXJPYmopO1xuICAgICAgfSxcbiAgICB9KVxuICAgICAgLmRvbmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdObyBhbnN3ZXIgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXInLFxuICAgICAgICAgICAgZml4ZWQ6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQuc3RhdHVzICE9PSAndW5kZWZpbmVkJyAmJiByZXN1bHQuc3RhdHVzID09PSBmYWxzZSkge1xuICAgICAgICAgICQuZ3Jvd2wuZXJyb3Ioe21lc3NhZ2U6IHJlc3VsdC5tc2csIGZpeGVkOiB0cnVlfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kdWxlVGVjaE5hbWUgPSBPYmplY3Qua2V5cyhyZXN1bHQpWzBdO1xuXG4gICAgICAgIGlmIChyZXN1bHRbbW9kdWxlVGVjaE5hbWVdLnN0YXR1cyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdFttb2R1bGVUZWNoTmFtZV0uY29uZmlybWF0aW9uX3N1YmplY3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpcm1QcmVzdGFUcnVzdChyZXN1bHRbbW9kdWxlVGVjaE5hbWVdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiByZXN1bHRbbW9kdWxlVGVjaE5hbWVdLm1zZywgZml4ZWQ6IHRydWV9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAkLmdyb3dsKHtcbiAgICAgICAgICBtZXNzYWdlOiByZXN1bHRbbW9kdWxlVGVjaE5hbWVdLm1zZyxcbiAgICAgICAgICBkdXJhdGlvbjogNjAwMCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYWx0ZXJlZFNlbGVjdG9yID0gc2VsZi5nZXRNb2R1bGVJdGVtU2VsZWN0b3IoKS5yZXBsYWNlKCcuJywgJycpO1xuICAgICAgICBsZXQgbWFpbkVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgIGlmIChhY3Rpb24gPT09ICd1bmluc3RhbGwnKSB7XG4gICAgICAgICAgbWFpbkVsZW1lbnQgPSBqcUVsZW1lbnRPYmouY2xvc2VzdChgLiR7YWx0ZXJlZFNlbGVjdG9yfWApO1xuICAgICAgICAgIG1haW5FbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICAgICAgQk9FdmVudC5lbWl0RXZlbnQoJ01vZHVsZSBVbmluc3RhbGxlZCcsICdDdXN0b21FdmVudCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Rpc2FibGUnKSB7XG4gICAgICAgICAgbWFpbkVsZW1lbnQgPSBqcUVsZW1lbnRPYmouY2xvc2VzdChgLiR7YWx0ZXJlZFNlbGVjdG9yfWApO1xuICAgICAgICAgIG1haW5FbGVtZW50LmFkZENsYXNzKGAke2FsdGVyZWRTZWxlY3Rvcn0taXNOb3RBY3RpdmVgKTtcbiAgICAgICAgICBtYWluRWxlbWVudC5hdHRyKCdkYXRhLWFjdGl2ZScsICcwJyk7XG5cbiAgICAgICAgICBCT0V2ZW50LmVtaXRFdmVudCgnTW9kdWxlIERpc2FibGVkJywgJ0N1c3RvbUV2ZW50Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnZW5hYmxlJykge1xuICAgICAgICAgIG1haW5FbGVtZW50ID0ganFFbGVtZW50T2JqLmNsb3Nlc3QoYC4ke2FsdGVyZWRTZWxlY3Rvcn1gKTtcbiAgICAgICAgICBtYWluRWxlbWVudC5yZW1vdmVDbGFzcyhgJHthbHRlcmVkU2VsZWN0b3J9LWlzTm90QWN0aXZlYCk7XG4gICAgICAgICAgbWFpbkVsZW1lbnQuYXR0cignZGF0YS1hY3RpdmUnLCAnMScpO1xuXG4gICAgICAgICAgQk9FdmVudC5lbWl0RXZlbnQoJ01vZHVsZSBFbmFibGVkJywgJ0N1c3RvbUV2ZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBqcUVsZW1lbnRPYmoucmVwbGFjZVdpdGgocmVzdWx0W21vZHVsZVRlY2hOYW1lXS5hY3Rpb25fbWVudV9odG1sKTtcbiAgICAgIH0pXG4gICAgICAuZmFpbCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZHVsZUl0ZW0gPSBqcUVsZW1lbnRPYmouY2xvc2VzdCgnbW9kdWxlLWl0ZW0tbGlzdCcpO1xuICAgICAgICBjb25zdCB0ZWNoTmFtZSA9IG1vZHVsZUl0ZW0uZGF0YSgndGVjaE5hbWUnKTtcbiAgICAgICAgJC5ncm93bC5lcnJvcih7XG4gICAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBwZXJmb3JtIGFjdGlvbiAke2FjdGlvbn0gZm9yIG1vZHVsZSAke3RlY2hOYW1lfWAsXG4gICAgICAgICAgZml4ZWQ6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5hbHdheXMoKCkgPT4ge1xuICAgICAgICBqcUVsZW1lbnRPYmouZmFkZUluKCk7XG4gICAgICAgIHNwaW5uZXJPYmoucmVtb3ZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbmltcG9ydCBDb25maXJtTW9kYWwgZnJvbSAnQGNvbXBvbmVudHMvbW9kYWwnO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogTW9kdWxlIEFkbWluIFBhZ2UgQ29udHJvbGxlci5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5jbGFzcyBBZG1pbk1vZHVsZUNvbnRyb2xsZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhbGwgbGlzdGVuZXJzIGFuZCBiaW5kIGV2ZXJ5dGhpbmdcbiAgICogQG1ldGhvZCBpbml0XG4gICAqIEBtZW1iZXJvZiBBZG1pbk1vZHVsZVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kdWxlQ2FyZENvbnRyb2xsZXIpIHtcbiAgICB0aGlzLm1vZHVsZUNhcmRDb250cm9sbGVyID0gbW9kdWxlQ2FyZENvbnRyb2xsZXI7XG5cbiAgICB0aGlzLkRFRkFVTFRfTUFYX1JFQ0VOVExZX1VTRUQgPSAxMDtcbiAgICB0aGlzLkRFRkFVTFRfTUFYX1BFUl9DQVRFR09SSUVTID0gNjtcbiAgICB0aGlzLkRJU1BMQVlfR1JJRCA9ICdncmlkJztcbiAgICB0aGlzLkRJU1BMQVlfTElTVCA9ICdsaXN0JztcbiAgICB0aGlzLkNBVEVHT1JZX1JFQ0VOVExZX1VTRUQgPSAncmVjZW50bHktdXNlZCc7XG5cbiAgICB0aGlzLmN1cnJlbnRDYXRlZ29yeURpc3BsYXkgPSB7fTtcbiAgICB0aGlzLmN1cnJlbnREaXNwbGF5ID0gJyc7XG4gICAgdGhpcy5pc0NhdGVnb3J5R3JpZERpc3BsYXllZCA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudFRhZ3NMaXN0ID0gW107XG4gICAgdGhpcy5jdXJyZW50UmVmQ2F0ZWdvcnkgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFJlZlN0YXR1cyA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50U29ydGluZyA9IG51bGw7XG4gICAgdGhpcy5iYXNlQWRkb25zVXJsID0gJ2h0dHBzOi8vYWRkb25zLnByZXN0YXNob3AuY29tLyc7XG4gICAgdGhpcy5wc3RhZ2dlcklucHV0ID0gbnVsbDtcbiAgICB0aGlzLmxhc3RCdWxrQWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmlzVXBsb2FkU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZWNlbnRseVVzZWRTZWxlY3RvciA9ICcjbW9kdWxlLXJlY2VudGx5LXVzZWQtbGlzdCAubW9kdWxlcy1saXN0JztcblxuICAgIC8qKlxuICAgICAqIExvYWRlZCBtb2R1bGVzIGxpc3QuXG4gICAgICogQ29udGFpbmluZyB0aGUgY2FyZCBhbmQgbGlzdCBkaXNwbGF5LlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICB0aGlzLm1vZHVsZXNMaXN0ID0gW107XG4gICAgdGhpcy5hZGRvbnNDYXJkR3JpZCA9IG51bGw7XG4gICAgdGhpcy5hZGRvbnNDYXJkTGlzdCA9IG51bGw7XG5cbiAgICB0aGlzLm1vZHVsZVNob3J0TGlzdCA9ICcubW9kdWxlLXNob3J0LWxpc3QnO1xuICAgIC8vIFNlZSBtb3JlICYgU2VlIGxlc3Mgc2VsZWN0b3JcbiAgICB0aGlzLnNlZU1vcmVTZWxlY3RvciA9ICcuc2VlLW1vcmUnO1xuICAgIHRoaXMuc2VlTGVzc1NlbGVjdG9yID0gJy5zZWUtbGVzcyc7XG5cbiAgICAvLyBTZWxlY3RvcnMgaW50byB2YXJzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNoYW5nZSB0aGVtIHdoaWxlIGtlZXBpbmcgc2FtZSBjb2RlIGxvZ2ljXG4gICAgdGhpcy5tb2R1bGVJdGVtR3JpZFNlbGVjdG9yID0gJy5tb2R1bGUtaXRlbS1ncmlkJztcbiAgICB0aGlzLm1vZHVsZUl0ZW1MaXN0U2VsZWN0b3IgPSAnLm1vZHVsZS1pdGVtLWxpc3QnO1xuICAgIHRoaXMuY2F0ZWdvcnlTZWxlY3RvckxhYmVsU2VsZWN0b3IgPSAnLm1vZHVsZS1jYXRlZ29yeS1zZWxlY3Rvci1sYWJlbCc7XG4gICAgdGhpcy5jYXRlZ29yeVNlbGVjdG9yID0gJy5tb2R1bGUtY2F0ZWdvcnktc2VsZWN0b3InO1xuICAgIHRoaXMuY2F0ZWdvcnlJdGVtU2VsZWN0b3IgPSAnLm1vZHVsZS1jYXRlZ29yeS1tZW51JztcbiAgICB0aGlzLmFkZG9uc0xvZ2luQnV0dG9uU2VsZWN0b3IgPSAnI2FkZG9uc19sb2dpbl9idG4nO1xuICAgIHRoaXMuY2F0ZWdvcnlSZXNldEJ0blNlbGVjdG9yID0gJy5tb2R1bGUtY2F0ZWdvcnktcmVzZXQnO1xuICAgIHRoaXMubW9kdWxlSW5zdGFsbEJ0blNlbGVjdG9yID0gJ2lucHV0Lm1vZHVsZS1pbnN0YWxsLWJ0bic7XG4gICAgdGhpcy5tb2R1bGVTb3J0aW5nRHJvcGRvd25TZWxlY3RvciA9ICcubW9kdWxlLXNvcnRpbmctYXV0aG9yIHNlbGVjdCc7XG4gICAgdGhpcy5jYXRlZ29yeUdyaWRTZWxlY3RvciA9ICcjbW9kdWxlcy1jYXRlZ29yaWVzLWdyaWQnO1xuICAgIHRoaXMuY2F0ZWdvcnlHcmlkSXRlbVNlbGVjdG9yID0gJy5tb2R1bGUtY2F0ZWdvcnktaXRlbSc7XG4gICAgdGhpcy5hZGRvbkl0ZW1HcmlkU2VsZWN0b3IgPSAnLm1vZHVsZS1hZGRvbnMtaXRlbS1ncmlkJztcbiAgICB0aGlzLmFkZG9uSXRlbUxpc3RTZWxlY3RvciA9ICcubW9kdWxlLWFkZG9ucy1pdGVtLWxpc3QnO1xuXG4gICAgLy8gVXBncmFkZSBBbGwgc2VsZWN0b3JzXG4gICAgdGhpcy51cGdyYWRlQWxsU291cmNlID0gJy5tb2R1bGVfYWN0aW9uX21lbnVfdXBncmFkZV9hbGwnO1xuICAgIHRoaXMudXBncmFkZUNvbnRhaW5lciA9ICcjbW9kdWxlcy1saXN0LWNvbnRhaW5lci11cGRhdGUnO1xuICAgIHRoaXMudXBncmFkZUFsbFRhcmdldHMgPSBgJHt0aGlzLnVwZ3JhZGVDb250YWluZXJ9IC5tb2R1bGVfYWN0aW9uX21lbnVfdXBncmFkZTp2aXNpYmxlYDtcblxuICAgIC8vIE5vdGlmaWNhdGlvbiBzZWxlY3RvcnNcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkNvbnRhaW5lciA9ICcjbW9kdWxlcy1saXN0LWNvbnRhaW5lci1ub3RpZmljYXRpb24nO1xuXG4gICAgLy8gQnVsayBhY3Rpb24gc2VsZWN0b3JzXG4gICAgdGhpcy5idWxrQWN0aW9uRHJvcERvd25TZWxlY3RvciA9ICcubW9kdWxlLWJ1bGstYWN0aW9ucyc7XG4gICAgdGhpcy5idWxrSXRlbVNlbGVjdG9yID0gJy5tb2R1bGUtYnVsay1tZW51JztcbiAgICB0aGlzLmJ1bGtBY3Rpb25DaGVja2JveExpc3RTZWxlY3RvciA9ICcubW9kdWxlLWNoZWNrYm94LWJ1bGstbGlzdCBpbnB1dCc7XG4gICAgdGhpcy5idWxrQWN0aW9uQ2hlY2tib3hHcmlkU2VsZWN0b3IgPSAnLm1vZHVsZS1jaGVja2JveC1idWxrLWdyaWQgaW5wdXQnO1xuICAgIHRoaXMuY2hlY2tlZEJ1bGtBY3Rpb25MaXN0U2VsZWN0b3IgPSBgJHt0aGlzLmJ1bGtBY3Rpb25DaGVja2JveExpc3RTZWxlY3Rvcn06Y2hlY2tlZGA7XG4gICAgdGhpcy5jaGVja2VkQnVsa0FjdGlvbkdyaWRTZWxlY3RvciA9IGAke3RoaXMuYnVsa0FjdGlvbkNoZWNrYm94R3JpZFNlbGVjdG9yfTpjaGVja2VkYDtcbiAgICB0aGlzLmJ1bGtBY3Rpb25DaGVja2JveFNlbGVjdG9yID0gJyNtb2R1bGUtbW9kYWwtYnVsay1jaGVja2JveCc7XG4gICAgdGhpcy5idWxrQ29uZmlybU1vZGFsU2VsZWN0b3IgPSAnI21vZHVsZS1tb2RhbC1idWxrLWNvbmZpcm0nO1xuICAgIHRoaXMuYnVsa0NvbmZpcm1Nb2RhbEFjdGlvbk5hbWVTZWxlY3RvciA9ICcjbW9kdWxlLW1vZGFsLWJ1bGstY29uZmlybS1hY3Rpb24tbmFtZSc7XG4gICAgdGhpcy5idWxrQ29uZmlybU1vZGFsTGlzdFNlbGVjdG9yID0gJyNtb2R1bGUtbW9kYWwtYnVsay1jb25maXJtLWxpc3QnO1xuICAgIHRoaXMuYnVsa0NvbmZpcm1Nb2RhbEFja0J0blNlbGVjdG9yID0gJyNtb2R1bGUtbW9kYWwtY29uZmlybS1idWxrLWFjayc7XG5cbiAgICAvLyBQbGFjZWhvbGRlcnNcbiAgICB0aGlzLnBsYWNlaG9sZGVyR2xvYmFsU2VsZWN0b3IgPSAnLm1vZHVsZS1wbGFjZWhvbGRlcnMtd3JhcHBlcic7XG4gICAgdGhpcy5wbGFjZWhvbGRlckZhaWx1cmVHbG9iYWxTZWxlY3RvciA9ICcubW9kdWxlLXBsYWNlaG9sZGVycy1mYWlsdXJlJztcbiAgICB0aGlzLnBsYWNlaG9sZGVyRmFpbHVyZU1zZ1NlbGVjdG9yID0gJy5tb2R1bGUtcGxhY2Vob2xkZXJzLWZhaWx1cmUtbXNnJztcbiAgICB0aGlzLnBsYWNlaG9sZGVyRmFpbHVyZVJldHJ5QnRuU2VsZWN0b3IgPSAnI21vZHVsZS1wbGFjZWhvbGRlcnMtZmFpbHVyZS1yZXRyeSc7XG5cbiAgICAvLyBNb2R1bGUncyBzdGF0dXNlcyBzZWxlY3RvcnNcbiAgICB0aGlzLnN0YXR1c1NlbGVjdG9yTGFiZWxTZWxlY3RvciA9ICcubW9kdWxlLXN0YXR1cy1zZWxlY3Rvci1sYWJlbCc7XG4gICAgdGhpcy5zdGF0dXNJdGVtU2VsZWN0b3IgPSAnLm1vZHVsZS1zdGF0dXMtbWVudSc7XG4gICAgdGhpcy5zdGF0dXNSZXNldEJ0blNlbGVjdG9yID0gJy5tb2R1bGUtc3RhdHVzLXJlc2V0JztcblxuICAgIC8vIFNlbGVjdG9ycyBmb3IgTW9kdWxlIEltcG9ydCBhbmQgQWRkb25zIGNvbm5lY3RcbiAgICB0aGlzLmFkZG9uc0Nvbm5lY3RNb2RhbEJ0blNlbGVjdG9yID0gJyNwYWdlLWhlYWRlci1kZXNjLWNvbmZpZ3VyYXRpb24tYWRkb25zX2Nvbm5lY3QnO1xuICAgIHRoaXMuYWRkb25zTG9nb3V0TW9kYWxCdG5TZWxlY3RvciA9ICcjcGFnZS1oZWFkZXItZGVzYy1jb25maWd1cmF0aW9uLWFkZG9uc19sb2dvdXQnO1xuICAgIHRoaXMuYWRkb25zSW1wb3J0TW9kYWxCdG5TZWxlY3RvciA9ICcjcGFnZS1oZWFkZXItZGVzYy1jb25maWd1cmF0aW9uLWFkZF9tb2R1bGUnO1xuICAgIHRoaXMuZHJvcFpvbmVNb2RhbFNlbGVjdG9yID0gJyNtb2R1bGUtbW9kYWwtaW1wb3J0JztcbiAgICB0aGlzLmRyb3Bab25lTW9kYWxGb290ZXJTZWxlY3RvciA9ICcjbW9kdWxlLW1vZGFsLWltcG9ydCAubW9kYWwtZm9vdGVyJztcbiAgICB0aGlzLmRyb3Bab25lSW1wb3J0Wm9uZVNlbGVjdG9yID0gJyNpbXBvcnREcm9wem9uZSc7XG4gICAgdGhpcy5hZGRvbnNDb25uZWN0TW9kYWxTZWxlY3RvciA9ICcjbW9kdWxlLW1vZGFsLWFkZG9ucy1jb25uZWN0JztcbiAgICB0aGlzLmFkZG9uc0xvZ291dE1vZGFsU2VsZWN0b3IgPSAnI21vZHVsZS1tb2RhbC1hZGRvbnMtbG9nb3V0JztcbiAgICB0aGlzLmFkZG9uc0Nvbm5lY3RGb3JtID0gJyNhZGRvbnMtY29ubmVjdC1mb3JtJztcbiAgICB0aGlzLm1vZHVsZUltcG9ydE1vZGFsQ2xvc2VCdG4gPSAnI21vZHVsZS1tb2RhbC1pbXBvcnQtY2xvc2luZy1jcm9zcyc7XG4gICAgdGhpcy5tb2R1bGVJbXBvcnRTdGFydFNlbGVjdG9yID0gJy5tb2R1bGUtaW1wb3J0LXN0YXJ0JztcbiAgICB0aGlzLm1vZHVsZUltcG9ydFByb2Nlc3NpbmdTZWxlY3RvciA9ICcubW9kdWxlLWltcG9ydC1wcm9jZXNzaW5nJztcbiAgICB0aGlzLm1vZHVsZUltcG9ydFN1Y2Nlc3NTZWxlY3RvciA9ICcubW9kdWxlLWltcG9ydC1zdWNjZXNzJztcbiAgICB0aGlzLm1vZHVsZUltcG9ydFN1Y2Nlc3NDb25maWd1cmVCdG5TZWxlY3RvciA9ICcubW9kdWxlLWltcG9ydC1zdWNjZXNzLWNvbmZpZ3VyZSc7XG4gICAgdGhpcy5tb2R1bGVJbXBvcnRGYWlsdXJlU2VsZWN0b3IgPSAnLm1vZHVsZS1pbXBvcnQtZmFpbHVyZSc7XG4gICAgdGhpcy5tb2R1bGVJbXBvcnRGYWlsdXJlUmV0cnlTZWxlY3RvciA9ICcubW9kdWxlLWltcG9ydC1mYWlsdXJlLXJldHJ5JztcbiAgICB0aGlzLm1vZHVsZUltcG9ydEZhaWx1cmVEZXRhaWxzQnRuU2VsZWN0b3IgPSAnLm1vZHVsZS1pbXBvcnQtZmFpbHVyZS1kZXRhaWxzLWFjdGlvbic7XG4gICAgdGhpcy5tb2R1bGVJbXBvcnRTZWxlY3RGaWxlTWFudWFsU2VsZWN0b3IgPSAnLm1vZHVsZS1pbXBvcnQtc3RhcnQtc2VsZWN0LW1hbnVhbCc7XG4gICAgdGhpcy5tb2R1bGVJbXBvcnRGYWlsdXJlTXNnRGV0YWlsc1NlbGVjdG9yID0gJy5tb2R1bGUtaW1wb3J0LWZhaWx1cmUtZGV0YWlscyc7XG4gICAgdGhpcy5tb2R1bGVJbXBvcnRDb25maXJtU2VsZWN0b3IgPSAnLm1vZHVsZS1pbXBvcnQtY29uZmlybSc7XG5cbiAgICB0aGlzLmluaXRTb3J0aW5nRHJvcGRvd24oKTtcbiAgICB0aGlzLmluaXRCT0V2ZW50UmVnaXN0ZXJpbmcoKTtcbiAgICB0aGlzLmluaXRDdXJyZW50RGlzcGxheSgpO1xuICAgIHRoaXMuaW5pdFNvcnRpbmdEaXNwbGF5U3dpdGNoKCk7XG4gICAgdGhpcy5pbml0QnVsa0Ryb3Bkb3duKCk7XG4gICAgdGhpcy5pbml0U2VhcmNoQmxvY2soKTtcbiAgICB0aGlzLmluaXRDYXRlZ29yeVNlbGVjdCgpO1xuICAgIHRoaXMuaW5pdENhdGVnb3JpZXNHcmlkKCk7XG4gICAgdGhpcy5pbml0QWN0aW9uQnV0dG9ucygpO1xuICAgIHRoaXMuaW5pdEFkZG9uc1NlYXJjaCgpO1xuICAgIHRoaXMuaW5pdEFkZG9uc0Nvbm5lY3QoKTtcbiAgICB0aGlzLmluaXRBZGRNb2R1bGVBY3Rpb24oKTtcbiAgICB0aGlzLmluaXREcm9wem9uZSgpO1xuICAgIHRoaXMuaW5pdFBhZ2VDaGFuZ2VQcm90ZWN0aW9uKCk7XG4gICAgdGhpcy5pbml0UGxhY2Vob2xkZXJNZWNoYW5pc20oKTtcbiAgICB0aGlzLmluaXRGaWx0ZXJTdGF0dXNEcm9wZG93bigpO1xuICAgIHRoaXMuZmV0Y2hNb2R1bGVzTGlzdCgpO1xuICAgIHRoaXMuZ2V0Tm90aWZpY2F0aW9uc0NvdW50KCk7XG4gICAgdGhpcy5pbml0aWFsaXplU2VlTW9yZSgpO1xuICB9XG5cbiAgaW5pdEZpbHRlclN0YXR1c0Ryb3Bkb3duKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgYm9keS5vbignY2xpY2snLCBzZWxmLnN0YXR1c0l0ZW1TZWxlY3RvciwgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gR2V0IGRhdGEgZnJvbSBsaSBET00gaW5wdXRcbiAgICAgIHNlbGYuY3VycmVudFJlZlN0YXR1cyA9IHBhcnNlSW50KCQodGhpcykuZGF0YSgnc3RhdHVzLXJlZicpLCAxMCk7XG4gICAgICAvLyBDaGFuZ2UgZHJvcGRvd24gbGFiZWwgdG8gc2V0IGl0IHRvIHRoZSBjdXJyZW50IHN0YXR1cycgZGlzcGxheW5hbWVcbiAgICAgICQoc2VsZi5zdGF0dXNTZWxlY3RvckxhYmVsU2VsZWN0b3IpLnRleHQoJCh0aGlzKS50ZXh0KCkpO1xuICAgICAgJChzZWxmLnN0YXR1c1Jlc2V0QnRuU2VsZWN0b3IpLnNob3coKTtcbiAgICAgIHNlbGYudXBkYXRlTW9kdWxlVmlzaWJpbGl0eSgpO1xuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCBzZWxmLnN0YXR1c1Jlc2V0QnRuU2VsZWN0b3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgICQoc2VsZi5zdGF0dXNTZWxlY3RvckxhYmVsU2VsZWN0b3IpLnRleHQoJCh0aGlzKS50ZXh0KCkpO1xuICAgICAgJCh0aGlzKS5oaWRlKCk7XG4gICAgICBzZWxmLmN1cnJlbnRSZWZTdGF0dXMgPSBudWxsO1xuICAgICAgc2VsZi51cGRhdGVNb2R1bGVWaXNpYmlsaXR5KCk7XG4gICAgfSk7XG4gIH1cblxuICBpbml0QnVsa0Ryb3Bkb3duKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGJvZHkgPSAkKCdib2R5Jyk7XG5cbiAgICBib2R5Lm9uKCdjbGljaycsIHNlbGYuZ2V0QnVsa0NoZWNrYm94ZXNTZWxlY3RvcigpLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9ICQoc2VsZi5idWxrQWN0aW9uRHJvcERvd25TZWxlY3Rvcik7XG5cbiAgICAgIGlmICgkKHNlbGYuZ2V0QnVsa0NoZWNrYm94ZXNDaGVja2VkU2VsZWN0b3IoKSkubGVuZ3RoID4gMCkge1xuICAgICAgICBzZWxlY3Rvci5jbG9zZXN0KCcubW9kdWxlLXRvcC1tZW51LWl0ZW0nKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdG9yLmNsb3Nlc3QoJy5tb2R1bGUtdG9wLW1lbnUtaXRlbScpLmFkZENsYXNzKCdkaXNhYmxlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCBzZWxmLmJ1bGtJdGVtU2VsZWN0b3IsIGZ1bmN0aW9uIGluaXRpYWxpemVCb2R5Q2hhbmdlKCkge1xuICAgICAgaWYgKCQoc2VsZi5nZXRCdWxrQ2hlY2tib3hlc0NoZWNrZWRTZWxlY3RvcigpKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgJC5ncm93bC53YXJuaW5nKHtcbiAgICAgICAgICBtZXNzYWdlOiB3aW5kb3cudHJhbnNsYXRlX2phdmFzY3JpcHRzWydCdWxrIEFjdGlvbiAtIE9uZSBtb2R1bGUgbWluaW11bSddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZWxmLmxhc3RCdWxrQWN0aW9uID0gJCh0aGlzKS5kYXRhKCdyZWYnKTtcbiAgICAgIGNvbnN0IG1vZHVsZXNMaXN0U3RyaW5nID0gc2VsZi5idWlsZEJ1bGtBY3Rpb25Nb2R1bGVMaXN0KCk7XG4gICAgICBjb25zdCBhY3Rpb25TdHJpbmcgPSAkKHRoaXMpXG4gICAgICAgIC5maW5kKCc6Y2hlY2tlZCcpXG4gICAgICAgIC50ZXh0KClcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAkKHNlbGYuYnVsa0NvbmZpcm1Nb2RhbExpc3RTZWxlY3RvcikuaHRtbChtb2R1bGVzTGlzdFN0cmluZyk7XG4gICAgICAkKHNlbGYuYnVsa0NvbmZpcm1Nb2RhbEFjdGlvbk5hbWVTZWxlY3RvcikudGV4dChhY3Rpb25TdHJpbmcpO1xuXG4gICAgICBpZiAoc2VsZi5sYXN0QnVsa0FjdGlvbiA9PT0gJ2J1bGstdW5pbnN0YWxsJykge1xuICAgICAgICAkKHNlbGYuYnVsa0FjdGlvbkNoZWNrYm94U2VsZWN0b3IpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoc2VsZi5idWxrQWN0aW9uQ2hlY2tib3hTZWxlY3RvcikuaGlkZSgpO1xuICAgICAgfVxuXG4gICAgICAkKHNlbGYuYnVsa0NvbmZpcm1Nb2RhbFNlbGVjdG9yKS5tb2RhbCgnc2hvdycpO1xuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCB0aGlzLmJ1bGtDb25maXJtTW9kYWxBY2tCdG5TZWxlY3RvciwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkKHNlbGYuYnVsa0NvbmZpcm1Nb2RhbFNlbGVjdG9yKS5tb2RhbCgnaGlkZScpO1xuICAgICAgc2VsZi5kb0J1bGtBY3Rpb24oc2VsZi5sYXN0QnVsa0FjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICBpbml0Qk9FdmVudFJlZ2lzdGVyaW5nKCkge1xuICAgIHdpbmRvdy5CT0V2ZW50Lm9uKCdNb2R1bGUgRGlzYWJsZWQnLCB0aGlzLm9uTW9kdWxlRGlzYWJsZWQsIHRoaXMpO1xuICAgIHdpbmRvdy5CT0V2ZW50Lm9uKCdNb2R1bGUgVW5pbnN0YWxsZWQnLCB0aGlzLnVwZGF0ZVRvdGFsUmVzdWx0cywgdGhpcyk7XG4gIH1cblxuICBvbk1vZHVsZURpc2FibGVkKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuZ2V0TW9kdWxlSXRlbVNlbGVjdG9yKCk7XG5cbiAgICAkKCcubW9kdWxlcy1saXN0JykuZWFjaCgoKSA9PiB7XG4gICAgICBzZWxmLnVwZGF0ZVRvdGFsUmVzdWx0cygpO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdFBsYWNlaG9sZGVyTWVjaGFuaXNtKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgaWYgKCQoc2VsZi5wbGFjZWhvbGRlckdsb2JhbFNlbGVjdG9yKS5sZW5ndGgpIHtcbiAgICAgIHNlbGYuYWpheExvYWRQYWdlKCk7XG4gICAgfVxuXG4gICAgLy8gUmV0cnkgbG9hZGluZyBtZWNoYW5pc21cbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgc2VsZi5wbGFjZWhvbGRlckZhaWx1cmVSZXRyeUJ0blNlbGVjdG9yLCAoKSA9PiB7XG4gICAgICAkKHNlbGYucGxhY2Vob2xkZXJGYWlsdXJlR2xvYmFsU2VsZWN0b3IpLmZhZGVPdXQoKTtcbiAgICAgICQoc2VsZi5wbGFjZWhvbGRlckdsb2JhbFNlbGVjdG9yKS5mYWRlSW4oKTtcbiAgICAgIHNlbGYuYWpheExvYWRQYWdlKCk7XG4gICAgfSk7XG4gIH1cblxuICBhamF4TG9hZFBhZ2UoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAkLmFqYXgoe1xuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIHVybDogd2luZG93Lm1vZHVsZVVSTHMuY2F0YWxvZ1JlZnJlc2gsXG4gICAgfSlcbiAgICAgIC5kb25lKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZS5kb21FbGVtZW50cyA9PT0gJ3VuZGVmaW5lZCcpIHJlc3BvbnNlLmRvbUVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLm1zZyA9PT0gJ3VuZGVmaW5lZCcpIHJlc3BvbnNlLm1zZyA9IG51bGw7XG5cbiAgICAgICAgICBjb25zdCBzdHlsZXNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbMF07XG4gICAgICAgICAgY29uc3Qgc3R5bGVzaGVldFJ1bGUgPSAne2Rpc3BsYXk6IG5vbmV9JztcbiAgICAgICAgICBjb25zdCBtb2R1bGVHbG9iYWxTZWxlY3RvciA9ICcubW9kdWxlcy1saXN0JztcbiAgICAgICAgICBjb25zdCBtb2R1bGVTb3J0aW5nU2VsZWN0b3IgPSAnLm1vZHVsZS1zb3J0aW5nLW1lbnUnO1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVkU2VsZWN0b3JDb21iaW5hdGlvbiA9IGAke21vZHVsZUdsb2JhbFNlbGVjdG9yfSwke21vZHVsZVNvcnRpbmdTZWxlY3Rvcn1gO1xuXG4gICAgICAgICAgaWYgKHN0eWxlc2hlZXQuaW5zZXJ0UnVsZSkge1xuICAgICAgICAgICAgc3R5bGVzaGVldC5pbnNlcnRSdWxlKHJlcXVpcmVkU2VsZWN0b3JDb21iaW5hdGlvbiArIHN0eWxlc2hlZXRSdWxlLCBzdHlsZXNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdHlsZXNoZWV0LmFkZFJ1bGUpIHtcbiAgICAgICAgICAgIHN0eWxlc2hlZXQuYWRkUnVsZShyZXF1aXJlZFNlbGVjdG9yQ29tYmluYXRpb24sIHN0eWxlc2hlZXRSdWxlLCAtMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJChzZWxmLnBsYWNlaG9sZGVyR2xvYmFsU2VsZWN0b3IpLmZhZGVPdXQoODAwLCAoKSA9PiB7XG4gICAgICAgICAgICAkLmVhY2gocmVzcG9uc2UuZG9tRWxlbWVudHMsIChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAkKGVsZW1lbnQuc2VsZWN0b3IpLmFwcGVuZChlbGVtZW50LmNvbnRlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkKG1vZHVsZUdsb2JhbFNlbGVjdG9yKVxuICAgICAgICAgICAgICAuZmFkZUluKDgwMClcbiAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsICdmbGV4Jyk7XG4gICAgICAgICAgICAkKG1vZHVsZVNvcnRpbmdTZWxlY3RvcikuZmFkZUluKDgwMCk7XG4gICAgICAgICAgICAkKCdbZGF0YS10b2dnbGU9XCJwb3BvdmVyXCJdJykucG9wb3ZlcigpO1xuICAgICAgICAgICAgc2VsZi5pbml0Q3VycmVudERpc3BsYXkoKTtcbiAgICAgICAgICAgIHNlbGYuZmV0Y2hNb2R1bGVzTGlzdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICQoc2VsZi5wbGFjZWhvbGRlckdsb2JhbFNlbGVjdG9yKS5mYWRlT3V0KDgwMCwgKCkgPT4ge1xuICAgICAgICAgICAgJChzZWxmLnBsYWNlaG9sZGVyRmFpbHVyZU1zZ1NlbGVjdG9yKS50ZXh0KHJlc3BvbnNlLm1zZyk7XG4gICAgICAgICAgICAkKHNlbGYucGxhY2Vob2xkZXJGYWlsdXJlR2xvYmFsU2VsZWN0b3IpLmZhZGVJbig4MDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZhaWwoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICQoc2VsZi5wbGFjZWhvbGRlckdsb2JhbFNlbGVjdG9yKS5mYWRlT3V0KDgwMCwgKCkgPT4ge1xuICAgICAgICAgICQoc2VsZi5wbGFjZWhvbGRlckZhaWx1cmVNc2dTZWxlY3RvcikudGV4dChyZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAkKHNlbGYucGxhY2Vob2xkZXJGYWlsdXJlR2xvYmFsU2VsZWN0b3IpLmZhZGVJbig4MDApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZmV0Y2hNb2R1bGVzTGlzdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgY29udGFpbmVyO1xuICAgIGxldCAkdGhpcztcblxuICAgIHNlbGYubW9kdWxlc0xpc3QgPSBbXTtcbiAgICAkKCcubW9kdWxlcy1saXN0JykuZWFjaChmdW5jdGlvbiBwcmVwYXJlQ29udGFpbmVyKCkge1xuICAgICAgY29udGFpbmVyID0gJCh0aGlzKTtcbiAgICAgIGNvbnRhaW5lci5maW5kKCcubW9kdWxlLWl0ZW0nKS5lYWNoKGZ1bmN0aW9uIHByZXBhcmVNb2R1bGVzKCkge1xuICAgICAgICAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIHNlbGYubW9kdWxlc0xpc3QucHVzaCh7XG4gICAgICAgICAgZG9tT2JqZWN0OiAkdGhpcyxcbiAgICAgICAgICBpZDogJHRoaXMuZGF0YSgnaWQnKSxcbiAgICAgICAgICBuYW1lOiAkdGhpcy5kYXRhKCduYW1lJykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBzY29yaW5nOiBwYXJzZUZsb2F0KCR0aGlzLmRhdGEoJ3Njb3JpbmcnKSksXG4gICAgICAgICAgbG9nbzogJHRoaXMuZGF0YSgnbG9nbycpLFxuICAgICAgICAgIGF1dGhvcjogJHRoaXMuZGF0YSgnYXV0aG9yJykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2ZXJzaW9uOiAkdGhpcy5kYXRhKCd2ZXJzaW9uJyksXG4gICAgICAgICAgZGVzY3JpcHRpb246ICR0aGlzLmRhdGEoJ2Rlc2NyaXB0aW9uJykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB0ZWNoTmFtZTogJHRoaXMuZGF0YSgndGVjaC1uYW1lJykudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICBjaGlsZENhdGVnb3JpZXM6ICR0aGlzLmRhdGEoJ2NoaWxkLWNhdGVnb3JpZXMnKSxcbiAgICAgICAgICBjYXRlZ29yaWVzOiBTdHJpbmcoJHRoaXMuZGF0YSgnY2F0ZWdvcmllcycpKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgIHR5cGU6ICR0aGlzLmRhdGEoJ3R5cGUnKSxcbiAgICAgICAgICBwcmljZTogcGFyc2VGbG9hdCgkdGhpcy5kYXRhKCdwcmljZScpKSxcbiAgICAgICAgICBhY3RpdmU6IHBhcnNlSW50KCR0aGlzLmRhdGEoJ2FjdGl2ZScpLCAxMCksXG4gICAgICAgICAgYWNjZXNzOiAkdGhpcy5kYXRhKCdsYXN0LWFjY2VzcycpLFxuICAgICAgICAgIGRpc3BsYXk6ICR0aGlzLmhhc0NsYXNzKCdtb2R1bGUtaXRlbS1saXN0JykgPyBzZWxmLkRJU1BMQVlfTElTVCA6IHNlbGYuRElTUExBWV9HUklELFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNlbGYuaXNNb2R1bGVzUGFnZSgpKSB7XG4gICAgICAgICAgJHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VsZi5hZGRvbnNDYXJkR3JpZCA9ICQodGhpcy5hZGRvbkl0ZW1HcmlkU2VsZWN0b3IpO1xuICAgIHNlbGYuYWRkb25zQ2FyZExpc3QgPSAkKHRoaXMuYWRkb25JdGVtTGlzdFNlbGVjdG9yKTtcbiAgICBzZWxmLnVwZGF0ZU1vZHVsZVZpc2liaWxpdHkoKTtcbiAgICAkKCdib2R5JykudHJpZ2dlcignbW9kdWxlQ2F0YWxvZ0xvYWRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgc29ydGluZ1xuICAgKlxuICAgKi9cbiAgdXBkYXRlTW9kdWxlU29ydGluZygpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGlmICghc2VsZi5jdXJyZW50U29ydGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1vZHVsZXMgc29ydGluZ1xuICAgIGxldCBvcmRlciA9ICdhc2MnO1xuICAgIGxldCBrZXkgPSBzZWxmLmN1cnJlbnRTb3J0aW5nO1xuICAgIGNvbnN0IHNwbGl0dGVkS2V5ID0ga2V5LnNwbGl0KCctJyk7XG5cbiAgICBpZiAoc3BsaXR0ZWRLZXkubGVuZ3RoID4gMSkge1xuICAgICAga2V5ID0gc3BsaXR0ZWRLZXlbMF07XG4gICAgICBpZiAoc3BsaXR0ZWRLZXlbMV0gPT09ICdkZXNjJykge1xuICAgICAgICBvcmRlciA9ICdkZXNjJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q29tcGFyZSA9IChhLCBiKSA9PiB7XG4gICAgICBsZXQgYURhdGEgPSBhW2tleV07XG4gICAgICBsZXQgYkRhdGEgPSBiW2tleV07XG5cbiAgICAgIGlmIChrZXkgPT09ICdhY2Nlc3MnKSB7XG4gICAgICAgIGFEYXRhID0gbmV3IERhdGUoYURhdGEpLmdldFRpbWUoKTtcbiAgICAgICAgYkRhdGEgPSBuZXcgRGF0ZShiRGF0YSkuZ2V0VGltZSgpO1xuICAgICAgICBhRGF0YSA9IE51bWJlci5pc05hTihhRGF0YSkgPyAwIDogYURhdGE7XG4gICAgICAgIGJEYXRhID0gTnVtYmVyLmlzTmFOKGJEYXRhKSA/IDAgOiBiRGF0YTtcbiAgICAgICAgaWYgKGFEYXRhID09PSBiRGF0YSkge1xuICAgICAgICAgIHJldHVybiBiLm5hbWUubG9jYWxlQ29tcGFyZShhLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhRGF0YSA8IGJEYXRhKSByZXR1cm4gLTE7XG4gICAgICBpZiAoYURhdGEgPiBiRGF0YSkgcmV0dXJuIDE7XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH07XG5cbiAgICBzZWxmLm1vZHVsZXNMaXN0LnNvcnQoY3VycmVudENvbXBhcmUpO1xuICAgIGlmIChvcmRlciA9PT0gJ2Rlc2MnKSB7XG4gICAgICBzZWxmLm1vZHVsZXNMaXN0LnJldmVyc2UoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVNb2R1bGVDb250YWluZXJEaXNwbGF5KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgJCgnLm1vZHVsZS1zaG9ydC1saXN0JykuZWFjaChmdW5jdGlvbiBzZXRTaG9ydExpc3RWaXNpYmlsaXR5KCkge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gJCh0aGlzKTtcbiAgICAgIGNvbnN0IG5iTW9kdWxlc0luQ29udGFpbmVyID0gY29udGFpbmVyLmZpbmQoJy5tb2R1bGUtaXRlbScpLmxlbmd0aDtcblxuICAgICAgaWYgKFxuICAgICAgICAoc2VsZi5jdXJyZW50UmVmQ2F0ZWdvcnkgJiYgc2VsZi5jdXJyZW50UmVmQ2F0ZWdvcnkgIT09IFN0cmluZyhjb250YWluZXIuZmluZCgnLm1vZHVsZXMtbGlzdCcpLmRhdGEoJ25hbWUnKSkpXG4gICAgICAgIHx8IChzZWxmLmN1cnJlbnRSZWZTdGF0dXMgIT09IG51bGwgJiYgbmJNb2R1bGVzSW5Db250YWluZXIgPT09IDApXG4gICAgICAgIHx8IChuYk1vZHVsZXNJbkNvbnRhaW5lciA9PT0gMFxuICAgICAgICAgICYmIFN0cmluZyhjb250YWluZXIuZmluZCgnLm1vZHVsZXMtbGlzdCcpLmRhdGEoJ25hbWUnKSkgPT09IHNlbGYuQ0FURUdPUllfUkVDRU5UTFlfVVNFRClcbiAgICAgICAgfHwgKHNlbGYuY3VycmVudFRhZ3NMaXN0Lmxlbmd0aCA+IDAgJiYgbmJNb2R1bGVzSW5Db250YWluZXIgPT09IDApXG4gICAgICApIHtcbiAgICAgICAgY29udGFpbmVyLmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb250YWluZXIuc2hvdygpO1xuICAgICAgY29udGFpbmVyXG4gICAgICAgIC5maW5kKGAke3NlbGYuc2VlTW9yZVNlbGVjdG9yfSwgJHtzZWxmLnNlZUxlc3NTZWxlY3Rvcn1gKVxuICAgICAgICAudG9nZ2xlKG5iTW9kdWxlc0luQ29udGFpbmVyID49IHNlbGYuREVGQVVMVF9NQVhfUEVSX0NBVEVHT1JJRVMpO1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlTW9kdWxlVmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIHNlbGYudXBkYXRlTW9kdWxlU29ydGluZygpO1xuXG4gICAgaWYgKHNlbGYuaXNNb2R1bGVzUGFnZSgpKSB7XG4gICAgICAkKHNlbGYucmVjZW50bHlVc2VkU2VsZWN0b3IpXG4gICAgICAgIC5maW5kKCcubW9kdWxlLWl0ZW0nKVxuICAgICAgICAucmVtb3ZlKCk7XG4gICAgICAkKCcubW9kdWxlcy1saXN0JylcbiAgICAgICAgLmZpbmQoJy5tb2R1bGUtaXRlbScpXG4gICAgICAgIC5yZW1vdmUoKTtcbiAgICB9XG5cbiAgICAvLyBNb2R1bGVzIHZpc2liaWxpdHkgbWFuYWdlbWVudFxuICAgIGxldCBpc1Zpc2libGU7XG4gICAgbGV0IGN1cnJlbnRNb2R1bGU7XG4gICAgbGV0IG1vZHVsZUNhdGVnb3J5O1xuICAgIGxldCB0YWdFeGlzdHM7XG4gICAgbGV0IG5ld1ZhbHVlO1xuICAgIGxldCBkZWZhdWx0TWF4O1xuXG4gICAgY29uc3QgbW9kdWxlc0xpc3RMZW5ndGggPSBzZWxmLm1vZHVsZXNMaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBjb3VudGVyID0ge307XG4gICAgY29uc3QgY2hlY2tUYWcgPSAoaW5kZXgsIHZhbHVlKSA9PiB7XG4gICAgICBuZXdWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICB0YWdFeGlzdHNcbiAgICAgICAgfD0gY3VycmVudE1vZHVsZS5uYW1lLmluZGV4T2YobmV3VmFsdWUpICE9PSAtMVxuICAgICAgICB8fCBjdXJyZW50TW9kdWxlLmRlc2NyaXB0aW9uLmluZGV4T2YobmV3VmFsdWUpICE9PSAtMVxuICAgICAgICB8fCBjdXJyZW50TW9kdWxlLmF1dGhvci5pbmRleE9mKG5ld1ZhbHVlKSAhPT0gLTFcbiAgICAgICAgfHwgY3VycmVudE1vZHVsZS50ZWNoTmFtZS5pbmRleE9mKG5ld1ZhbHVlKSAhPT0gLTE7XG4gICAgfTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kdWxlc0xpc3RMZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY3VycmVudE1vZHVsZSA9IHNlbGYubW9kdWxlc0xpc3RbaV07XG4gICAgICBpZiAoY3VycmVudE1vZHVsZS5kaXNwbGF5ID09PSBzZWxmLmN1cnJlbnREaXNwbGF5KSB7XG4gICAgICAgIGlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgbW9kdWxlQ2F0ZWdvcnkgPSBzZWxmLmN1cnJlbnRSZWZDYXRlZ29yeSA9PT0gc2VsZi5DQVRFR09SWV9SRUNFTlRMWV9VU0VEXG4gICAgICAgICAgPyBzZWxmLkNBVEVHT1JZX1JFQ0VOVExZX1VTRURcbiAgICAgICAgICA6IGN1cnJlbnRNb2R1bGUuY2F0ZWdvcmllcztcblxuICAgICAgICAvLyBDaGVjayBmb3Igc2FtZSBjYXRlZ29yeVxuICAgICAgICBpZiAoc2VsZi5jdXJyZW50UmVmQ2F0ZWdvcnkgIT09IG51bGwpIHtcbiAgICAgICAgICBpc1Zpc2libGUgJj0gbW9kdWxlQ2F0ZWdvcnkgPT09IHNlbGYuY3VycmVudFJlZkNhdGVnb3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIHNhbWUgc3RhdHVzXG4gICAgICAgIGlmIChzZWxmLmN1cnJlbnRSZWZTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgICAgICBpc1Zpc2libGUgJj0gY3VycmVudE1vZHVsZS5hY3RpdmUgPT09IHNlbGYuY3VycmVudFJlZlN0YXR1cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciB0YWcgbGlzdFxuICAgICAgICBpZiAoc2VsZi5jdXJyZW50VGFnc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgdGFnRXhpc3RzID0gZmFsc2U7XG4gICAgICAgICAgJC5lYWNoKHNlbGYuY3VycmVudFRhZ3NMaXN0LCBjaGVja1RhZyk7XG4gICAgICAgICAgaXNWaXNpYmxlICY9IHRhZ0V4aXN0cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBsaXN0IGRpc3BsYXkgd2l0aG91dCBzZWFyY2ggd2UgbXVzdCBkaXNwbGF5IG9ubHkgdGhlIGZpcnN0IDUgbW9kdWxlc1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNlbGYuY3VycmVudERpc3BsYXkgPT09IHNlbGYuRElTUExBWV9MSVNUICYmICFzZWxmLmN1cnJlbnRUYWdzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50Q2F0ZWdvcnlEaXNwbGF5W21vZHVsZUNhdGVnb3J5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRDYXRlZ29yeURpc3BsYXlbbW9kdWxlQ2F0ZWdvcnldID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFjb3VudGVyW21vZHVsZUNhdGVnb3J5XSkge1xuICAgICAgICAgICAgY291bnRlclttb2R1bGVDYXRlZ29yeV0gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRlZmF1bHRNYXggPSBtb2R1bGVDYXRlZ29yeSA9PT0gc2VsZi5DQVRFR09SWV9SRUNFTlRMWV9VU0VEXG4gICAgICAgICAgICA/IHNlbGYuREVGQVVMVF9NQVhfUkVDRU5UTFlfVVNFRFxuICAgICAgICAgICAgOiBzZWxmLkRFRkFVTFRfTUFYX1BFUl9DQVRFR09SSUVTO1xuICAgICAgICAgIGlmIChjb3VudGVyW21vZHVsZUNhdGVnb3J5XSA+PSBkZWZhdWx0TWF4KSB7XG4gICAgICAgICAgICBpc1Zpc2libGUgJj0gc2VsZi5jdXJyZW50Q2F0ZWdvcnlEaXNwbGF5W21vZHVsZUNhdGVnb3J5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb3VudGVyW21vZHVsZUNhdGVnb3J5XSArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdmlzaWJsZSwgZGlzcGxheSAoVGh4IGNhcHRhaW4gb2J2aW91cylcbiAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICAgIGlmIChzZWxmLmN1cnJlbnRSZWZDYXRlZ29yeSA9PT0gc2VsZi5DQVRFR09SWV9SRUNFTlRMWV9VU0VEKSB7XG4gICAgICAgICAgICAkKHNlbGYucmVjZW50bHlVc2VkU2VsZWN0b3IpLmFwcGVuZChjdXJyZW50TW9kdWxlLmRvbU9iamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRNb2R1bGUuY29udGFpbmVyLmFwcGVuZChjdXJyZW50TW9kdWxlLmRvbU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2VsZi51cGRhdGVNb2R1bGVDb250YWluZXJEaXNwbGF5KCk7XG5cbiAgICBpZiAoc2VsZi5jdXJyZW50VGFnc0xpc3QubGVuZ3RoKSB7XG4gICAgICAkKCcubW9kdWxlcy1saXN0JykuYXBwZW5kKHRoaXMuY3VycmVudERpc3BsYXkgPT09IHNlbGYuRElTUExBWV9HUklEID8gdGhpcy5hZGRvbnNDYXJkR3JpZCA6IHRoaXMuYWRkb25zQ2FyZExpc3QpO1xuICAgIH1cblxuICAgIHNlbGYudXBkYXRlVG90YWxSZXN1bHRzKCk7XG4gIH1cblxuICBpbml0UGFnZUNoYW5nZVByb3RlY3Rpb24oKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAkKHdpbmRvdykub24oJ2JlZm9yZXVubG9hZCcsICgpID0+IHtcbiAgICAgIGlmIChzZWxmLmlzVXBsb2FkU3RhcnRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICdJdCBzZWVtcyBzb21lIGNyaXRpY2FsIG9wZXJhdGlvbiBhcmUgcnVubmluZywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNoYW5nZSBwYWdlPyAnXG4gICAgICAgICAgKyAnSXQgbWlnaHQgY2F1c2Ugc29tZSB1bmV4ZXBjdGVkIGJlaGF2aW9ycy4nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBidWlsZEJ1bGtBY3Rpb25Nb2R1bGVMaXN0KCkge1xuICAgIGNvbnN0IGNoZWNrQm94ZXNTZWxlY3RvciA9IHRoaXMuZ2V0QnVsa0NoZWNrYm94ZXNDaGVja2VkU2VsZWN0b3IoKTtcbiAgICBjb25zdCBtb2R1bGVJdGVtU2VsZWN0b3IgPSB0aGlzLmdldE1vZHVsZUl0ZW1TZWxlY3RvcigpO1xuICAgIGxldCBhbHJlYWR5RG9uZUZsYWcgPSAwO1xuICAgIGxldCBodG1sR2VuZXJhdGVkID0gJyc7XG4gICAgbGV0IGN1cnJlbnRFbGVtZW50O1xuXG4gICAgJChjaGVja0JveGVzU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24gcHJlcGFyZUNoZWNrYm94ZXMoKSB7XG4gICAgICBpZiAoYWxyZWFkeURvbmVGbGFnID09PSAxMCkge1xuICAgICAgICAvLyBCcmVhayBlYWNoXG4gICAgICAgIGh0bWxHZW5lcmF0ZWQgKz0gJy0gLi4uJztcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50RWxlbWVudCA9ICQodGhpcykuY2xvc2VzdChtb2R1bGVJdGVtU2VsZWN0b3IpO1xuICAgICAgaHRtbEdlbmVyYXRlZCArPSBgLSAke2N1cnJlbnRFbGVtZW50LmRhdGEoJ25hbWUnKX08YnIvPmA7XG4gICAgICBhbHJlYWR5RG9uZUZsYWcgKz0gMTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaHRtbEdlbmVyYXRlZDtcbiAgfVxuXG4gIGluaXRBZGRvbnNDb25uZWN0KCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgLy8gTWFrZSBhZGRvbnMgY29ubmVjdCBtb2RhbCByZWFkeSB0byBiZSBjbGlja2VkXG4gICAgaWYgKCQoc2VsZi5hZGRvbnNDb25uZWN0TW9kYWxCdG5TZWxlY3RvcikuYXR0cignaHJlZicpID09PSAnIycpIHtcbiAgICAgICQoc2VsZi5hZGRvbnNDb25uZWN0TW9kYWxCdG5TZWxlY3RvcikuYXR0cignZGF0YS10b2dnbGUnLCAnbW9kYWwnKTtcbiAgICAgICQoc2VsZi5hZGRvbnNDb25uZWN0TW9kYWxCdG5TZWxlY3RvcikuYXR0cignZGF0YS10YXJnZXQnLCBzZWxmLmFkZG9uc0Nvbm5lY3RNb2RhbFNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICBpZiAoJChzZWxmLmFkZG9uc0xvZ291dE1vZGFsQnRuU2VsZWN0b3IpLmF0dHIoJ2hyZWYnKSA9PT0gJyMnKSB7XG4gICAgICAkKHNlbGYuYWRkb25zTG9nb3V0TW9kYWxCdG5TZWxlY3RvcikuYXR0cignZGF0YS10b2dnbGUnLCAnbW9kYWwnKTtcbiAgICAgICQoc2VsZi5hZGRvbnNMb2dvdXRNb2RhbEJ0blNlbGVjdG9yKS5hdHRyKCdkYXRhLXRhcmdldCcsIHNlbGYuYWRkb25zTG9nb3V0TW9kYWxTZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgJCgnYm9keScpLm9uKCdzdWJtaXQnLCBzZWxmLmFkZG9uc0Nvbm5lY3RGb3JtLCBmdW5jdGlvbiBpbml0aWFsaXplQm9keVN1Ym1pdChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAkLmFqYXgoe1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgdXJsOiAkKHRoaXMpLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICBkYXRhOiAkKHRoaXMpLnNlcmlhbGl6ZSgpLFxuICAgICAgICBiZWZvcmVTZW5kOiAoKSA9PiB7XG4gICAgICAgICAgJChzZWxmLmFkZG9uc0xvZ2luQnV0dG9uU2VsZWN0b3IpLnNob3coKTtcbiAgICAgICAgICAkKCdidXR0b24uYnRuW3R5cGU9XCJzdWJtaXRcIl0nLCBzZWxmLmFkZG9uc0Nvbm5lY3RGb3JtKS5oaWRlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KS5kb25lKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyA9PT0gMSkge1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHttZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlfSk7XG4gICAgICAgICAgJChzZWxmLmFkZG9uc0xvZ2luQnV0dG9uU2VsZWN0b3IpLmhpZGUoKTtcbiAgICAgICAgICAkKCdidXR0b24uYnRuW3R5cGU9XCJzdWJtaXRcIl0nLCBzZWxmLmFkZG9uc0Nvbm5lY3RGb3JtKS5mYWRlSW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpbml0QWRkTW9kdWxlQWN0aW9uKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGFkZE1vZHVsZUJ1dHRvbiA9ICQoc2VsZi5hZGRvbnNJbXBvcnRNb2RhbEJ0blNlbGVjdG9yKTtcbiAgICBhZGRNb2R1bGVCdXR0b24uYXR0cignZGF0YS10b2dnbGUnLCAnbW9kYWwnKTtcbiAgICBhZGRNb2R1bGVCdXR0b24uYXR0cignZGF0YS10YXJnZXQnLCBzZWxmLmRyb3Bab25lTW9kYWxTZWxlY3Rvcik7XG4gIH1cblxuICBpbml0RHJvcHpvbmUoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgYm9keSA9ICQoJ2JvZHknKTtcbiAgICBjb25zdCBkcm9wem9uZSA9ICQoJy5kcm9wem9uZScpO1xuXG4gICAgLy8gUmVzZXQgbW9kYWwgd2hlbiBjbGljayBvbiBSZXRyeSBpbiBjYXNlIG9mIGZhaWx1cmVcbiAgICBib2R5Lm9uKCdjbGljaycsIHRoaXMubW9kdWxlSW1wb3J0RmFpbHVyZVJldHJ5U2VsZWN0b3IsICgpID0+IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbiAgICAgICQoXG4gICAgICAgIGAke3NlbGYubW9kdWxlSW1wb3J0U3VjY2Vzc1NlbGVjdG9yfSwke3NlbGYubW9kdWxlSW1wb3J0RmFpbHVyZVNlbGVjdG9yfSwke3NlbGYubW9kdWxlSW1wb3J0UHJvY2Vzc2luZ1NlbGVjdG9yfWAsXG4gICAgICApLmZhZGVPdXQoKCkgPT4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogQWRkZWQgdGltZW91dCBmb3IgYSBiZXR0ZXIgcmVuZGVyIG9mIGFuaW1hdGlvblxuICAgICAgICAgKiBhbmQgYXZvaWQgdG8gaGF2ZSBkaXNwbGF5ZWQgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgICAgKi9cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgJChzZWxmLm1vZHVsZUltcG9ydFN0YXJ0U2VsZWN0b3IpLmZhZGVJbigoKSA9PiB7XG4gICAgICAgICAgICAkKHNlbGYubW9kdWxlSW1wb3J0RmFpbHVyZU1zZ0RldGFpbHNTZWxlY3RvcikuaGlkZSgpO1xuICAgICAgICAgICAgJChzZWxmLm1vZHVsZUltcG9ydFN1Y2Nlc3NDb25maWd1cmVCdG5TZWxlY3RvcikuaGlkZSgpO1xuICAgICAgICAgICAgZHJvcHpvbmUucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgNTUwKTtcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG4gICAgfSk7XG5cbiAgICAvLyBSZWluaXQgbW9kYWwgb24gZXhpdCwgYnV0IGNoZWNrIGlmIG5vdCBhbHJlYWR5IHByb2Nlc3Npbmcgc29tZXRoaW5nXG4gICAgYm9keS5vbignaGlkZGVuLmJzLm1vZGFsJywgdGhpcy5kcm9wWm9uZU1vZGFsU2VsZWN0b3IsICgpID0+IHtcbiAgICAgICQoYCR7c2VsZi5tb2R1bGVJbXBvcnRTdWNjZXNzU2VsZWN0b3J9LCAke3NlbGYubW9kdWxlSW1wb3J0RmFpbHVyZVNlbGVjdG9yfWApLmhpZGUoKTtcbiAgICAgICQoc2VsZi5tb2R1bGVJbXBvcnRTdGFydFNlbGVjdG9yKS5zaG93KCk7XG5cbiAgICAgIGRyb3B6b25lLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XG4gICAgICAkKHNlbGYubW9kdWxlSW1wb3J0RmFpbHVyZU1zZ0RldGFpbHNTZWxlY3RvcikuaGlkZSgpO1xuICAgICAgJChzZWxmLm1vZHVsZUltcG9ydFN1Y2Nlc3NDb25maWd1cmVCdG5TZWxlY3RvcikuaGlkZSgpO1xuICAgICAgJChzZWxmLmRyb3Bab25lTW9kYWxGb290ZXJTZWxlY3RvcikuaHRtbCgnJyk7XG4gICAgICAkKHNlbGYubW9kdWxlSW1wb3J0Q29uZmlybVNlbGVjdG9yKS5oaWRlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBDaGFuZ2UgdGhlIHdheSBEcm9wem9uZS5qcyBsaWIgaGFuZGxlIGZpbGUgaW5wdXQgdHJpZ2dlclxuICAgIGJvZHkub24oXG4gICAgICAnY2xpY2snLFxuICAgICAgYC5kcm9wem9uZTpub3QoJHt0aGlzLm1vZHVsZUltcG9ydFNlbGVjdEZpbGVNYW51YWxTZWxlY3Rvcn0sICR7dGhpcy5tb2R1bGVJbXBvcnRTdWNjZXNzQ29uZmlndXJlQnRuU2VsZWN0b3J9KWAsXG4gICAgICAoZXZlbnQsIG1hbnVhbFNlbGVjdCkgPT4ge1xuICAgICAgICAvLyBpZiBjbGljayBjb21lcyBmcm9tIC5tb2R1bGUtaW1wb3J0LXN0YXJ0LXNlbGVjdC1tYW51YWwsIHN0b3AgZXZlcnl0aGluZ1xuICAgICAgICBpZiAodHlwZW9mIG1hbnVhbFNlbGVjdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBib2R5Lm9uKCdjbGljaycsIHRoaXMubW9kdWxlSW1wb3J0U2VsZWN0RmlsZU1hbnVhbFNlbGVjdG9yLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8qKlxuICAgICAgICogVHJpZ2dlciBjbGljayBvbiBoaWRkZW4gZmlsZSBpbnB1dCwgYW5kIHBhc3MgZXh0cmEgZGF0YVxuICAgICAgICogdG8gLmRyb3B6b25lIGNsaWNrIGhhbmRsZXIgZnJvIGl0IHRvIG5vdGljZSBpdCBjb21lcyBmcm9tIGhlcmVcbiAgICAgICAqL1xuICAgICAgJCgnLmR6LWhpZGRlbi1pbnB1dCcpLnRyaWdnZXIoJ2NsaWNrJywgWydtYW51YWxfc2VsZWN0J10pO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIG1vZGFsIGNsb3N1cmVcbiAgICBib2R5Lm9uKCdjbGljaycsIHRoaXMubW9kdWxlSW1wb3J0TW9kYWxDbG9zZUJ0biwgKCkgPT4ge1xuICAgICAgaWYgKHNlbGYuaXNVcGxvYWRTdGFydGVkICE9PSB0cnVlKSB7XG4gICAgICAgICQoc2VsZi5kcm9wWm9uZU1vZGFsU2VsZWN0b3IpLm1vZGFsKCdoaWRlJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGaXggaXNzdWUgb24gY2xpY2sgY29uZmlndXJlIGJ1dHRvblxuICAgIGJvZHkub24oJ2NsaWNrJywgdGhpcy5tb2R1bGVJbXBvcnRTdWNjZXNzQ29uZmlndXJlQnRuU2VsZWN0b3IsIGZ1bmN0aW9uIGluaXRpYWxpemVCb2R5Q2xpY2tPbk1vZHVsZUltcG9ydChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgd2luZG93LmxvY2F0aW9uID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XG4gICAgfSk7XG5cbiAgICAvLyBPcGVuIGZhaWx1cmUgbWVzc2FnZSBkZXRhaWxzIGJveFxuICAgIGJvZHkub24oJ2NsaWNrJywgdGhpcy5tb2R1bGVJbXBvcnRGYWlsdXJlRGV0YWlsc0J0blNlbGVjdG9yLCAoKSA9PiB7XG4gICAgICAkKHNlbGYubW9kdWxlSW1wb3J0RmFpbHVyZU1zZ0RldGFpbHNTZWxlY3Rvcikuc2xpZGVEb3duKCk7XG4gICAgfSk7XG5cbiAgICAvLyBAc2VlOiBkcm9wem9uZS5qc1xuICAgIGNvbnN0IGRyb3B6b25lT3B0aW9ucyA9IHtcbiAgICAgIHVybDogd2luZG93Lm1vZHVsZVVSTHMubW9kdWxlSW1wb3J0LFxuICAgICAgYWNjZXB0ZWRGaWxlczogJy56aXAsIC50YXInLFxuICAgICAgLy8gVGhlIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdHJhbnNmZXIgdGhlIGZpbGVcbiAgICAgIHBhcmFtTmFtZTogJ2ZpbGVfdXBsb2FkZWQnLFxuICAgICAgbWF4RmlsZXNpemU6IDUwLCAvLyBjYW4ndCBiZSBncmVhdGVyIHRoYW4gNTBNYiBiZWNhdXNlIGl0J3MgYW4gYWRkb25zIGxpbWl0YXRpb25cbiAgICAgIHVwbG9hZE11bHRpcGxlOiBmYWxzZSxcbiAgICAgIGFkZFJlbW92ZUxpbmtzOiB0cnVlLFxuICAgICAgZGljdERlZmF1bHRNZXNzYWdlOiAnJyxcbiAgICAgIGhpZGRlbklucHV0Q29udGFpbmVyOiBzZWxmLmRyb3Bab25lSW1wb3J0Wm9uZVNlbGVjdG9yLFxuICAgICAgLyoqXG4gICAgICAgKiBBZGQgdW5saW1pdGVkIHRpbWVvdXQuIE90aGVyd2lzZSBkcm9wem9uZSB0aW1lb3V0IGlzIDMwIHNlY29uZHNcbiAgICAgICAqICBhbmQgaWYgYSBtb2R1bGUgaXMgbG9uZyB0byBpbnN0YWxsLCBpdCBpcyBub3QgcG9zc2libGUgdG8gaW5zdGFsbCB0aGUgbW9kdWxlLlxuICAgICAgICovXG4gICAgICB0aW1lb3V0OiAwLFxuICAgICAgYWRkZWRmaWxlOiAoKSA9PiB7XG4gICAgICAgIHNlbGYuYW5pbWF0ZVN0YXJ0VXBsb2FkKCk7XG4gICAgICB9LFxuICAgICAgcHJvY2Vzc2luZzogKCkgPT4ge1xuICAgICAgICAvLyBMZWF2ZSBpdCBlbXB0eSBzaW5jZSB3ZSBkb24ndCByZXF1aXJlIGFueXRoaW5nIHdoaWxlIHByb2Nlc3NpbmcgdXBsb2FkXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChmaWxlLCBtZXNzYWdlKSA9PiB7XG4gICAgICAgIHNlbGYuZGlzcGxheU9uVXBsb2FkRXJyb3IobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgY29tcGxldGU6IChmaWxlKSA9PiB7XG4gICAgICAgIGlmIChmaWxlLnN0YXR1cyAhPT0gJ2Vycm9yJykge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gJC5wYXJzZUpTT04oZmlsZS54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZU9iamVjdC5pc19jb25maWd1cmFibGUgPT09ICd1bmRlZmluZWQnKSByZXNwb25zZU9iamVjdC5pc19jb25maWd1cmFibGUgPSBudWxsO1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VPYmplY3QubW9kdWxlX25hbWUgPT09ICd1bmRlZmluZWQnKSByZXNwb25zZU9iamVjdC5tb2R1bGVfbmFtZSA9IG51bGw7XG5cbiAgICAgICAgICBzZWxmLmRpc3BsYXlPblVwbG9hZERvbmUocmVzcG9uc2VPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN0YXRlIHRoYXQgd2UgaGF2ZSBmaW5pc2ggdGhlIHByb2Nlc3MgdG8gdW5sb2NrIHNvbWUgYWN0aW9uc1xuICAgICAgICBzZWxmLmlzVXBsb2FkU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgZHJvcHpvbmUuZHJvcHpvbmUoJC5leHRlbmQoZHJvcHpvbmVPcHRpb25zKSk7XG4gIH1cblxuICBhbmltYXRlU3RhcnRVcGxvYWQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgZHJvcHpvbmUgPSAkKCcuZHJvcHpvbmUnKTtcbiAgICAvLyBTdGF0ZSB0aGF0IHdlIHN0YXJ0IG1vZHVsZSB1cGxvYWRcbiAgICBzZWxmLmlzVXBsb2FkU3RhcnRlZCA9IHRydWU7XG4gICAgJChzZWxmLm1vZHVsZUltcG9ydFN0YXJ0U2VsZWN0b3IpLmhpZGUoMCk7XG4gICAgZHJvcHpvbmUuY3NzKCdib3JkZXInLCAnbm9uZScpO1xuICAgICQoc2VsZi5tb2R1bGVJbXBvcnRQcm9jZXNzaW5nU2VsZWN0b3IpLmZhZGVJbigpO1xuICB9XG5cbiAgYW5pbWF0ZUVuZFVwbG9hZChjYWxsYmFjaykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICQoc2VsZi5tb2R1bGVJbXBvcnRQcm9jZXNzaW5nU2VsZWN0b3IpXG4gICAgICAuZmluaXNoKClcbiAgICAgIC5mYWRlT3V0KGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gY2FsbCBmb3IgdXBsb2FkIG1vZGFsLCB3aGVuIHRoZSBhamF4IGNhbGwgd2VudCB3ZWxsLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IHJlc3VsdCBjb250YWluaW5nIHRoZSBzZXJ2ZXIgcmVzcG9uc2VcbiAgICovXG4gIGRpc3BsYXlPblVwbG9hZERvbmUocmVzdWx0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5hbmltYXRlRW5kVXBsb2FkKCgpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSB0cnVlKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNfY29uZmlndXJhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgY29uZmlndXJlTGluayA9IHdpbmRvdy5tb2R1bGVVUkxzLmNvbmZpZ3VyYXRpb25QYWdlLnJlcGxhY2UoLzpudW1iZXI6LywgcmVzdWx0Lm1vZHVsZV9uYW1lKTtcbiAgICAgICAgICAkKHNlbGYubW9kdWxlSW1wb3J0U3VjY2Vzc0NvbmZpZ3VyZUJ0blNlbGVjdG9yKS5hdHRyKCdocmVmJywgY29uZmlndXJlTGluayk7XG4gICAgICAgICAgJChzZWxmLm1vZHVsZUltcG9ydFN1Y2Nlc3NDb25maWd1cmVCdG5TZWxlY3Rvcikuc2hvdygpO1xuICAgICAgICB9XG4gICAgICAgICQoc2VsZi5tb2R1bGVJbXBvcnRTdWNjZXNzU2VsZWN0b3IpLmZhZGVJbigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0LmNvbmZpcm1hdGlvbl9zdWJqZWN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWxmLmRpc3BsYXlQcmVzdGFUcnVzdFN0ZXAocmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQoc2VsZi5tb2R1bGVJbXBvcnRGYWlsdXJlTXNnRGV0YWlsc1NlbGVjdG9yKS5odG1sKHJlc3VsdC5tc2cpO1xuICAgICAgICAkKHNlbGYubW9kdWxlSW1wb3J0RmFpbHVyZVNlbGVjdG9yKS5mYWRlSW4oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gY2FsbCBmb3IgdXBsb2FkIG1vZGFsLCB3aGVuIHRoZSBhamF4IGNhbGwgd2VudCB3cm9uZyBvciB3aGVuIHRoZSBhY3Rpb24gcmVxdWVzdGVkIGNvdWxkIG5vdFxuICAgKiBzdWNjZWVkIGZvciBzb21lIHJlYXNvbi5cbiAgICpcbiAgICogQHBhcmFtIHN0cmluZyBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlIGVycm9yLlxuICAgKi9cbiAgZGlzcGxheU9uVXBsb2FkRXJyb3IobWVzc2FnZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuYW5pbWF0ZUVuZFVwbG9hZCgoKSA9PiB7XG4gICAgICAkKHNlbGYubW9kdWxlSW1wb3J0RmFpbHVyZU1zZ0RldGFpbHNTZWxlY3RvcikuaHRtbChtZXNzYWdlKTtcbiAgICAgICQoc2VsZi5tb2R1bGVJbXBvcnRGYWlsdXJlU2VsZWN0b3IpLmZhZGVJbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIFByZXN0YVRydXN0IG5lZWRzIHRvIGJlIGNvbmZpcm1lZCwgd2UgYXNrIGZvciB0aGUgY29uZmlybWF0aW9uXG4gICAqIG1vZGFsIGNvbnRlbnQgYW5kIHdlIGRpc3BsYXkgaXQgaW4gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgb25lLlxuICAgKiBXZSBhbHNvIGdlbmVyYXRlIHRoZSBhamF4IGNhbGwgdG8gdHJpZ2dlciBvbmNlIHdlIGNvbmZpcm0gd2Ugd2FudCB0byBpbnN0YWxsXG4gICAqIHRoZSBtb2R1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBQcmV2aW91cyBzZXJ2ZXIgcmVzcG9uc2UgcmVzdWx0XG4gICAqL1xuICBkaXNwbGF5UHJlc3RhVHJ1c3RTdGVwKHJlc3VsdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IG1vZGFsID0gc2VsZi5tb2R1bGVDYXJkQ29udHJvbGxlci5yZXBsYWNlUHJlc3RhVHJ1c3RQbGFjZWhvbGRlcnMocmVzdWx0KTtcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gcmVzdWx0Lm1vZHVsZS5hdHRyaWJ1dGVzLm5hbWU7XG5cbiAgICAkKHRoaXMubW9kdWxlSW1wb3J0Q29uZmlybVNlbGVjdG9yKVxuICAgICAgLmh0bWwobW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS5odG1sKCkpXG4gICAgICAuZmFkZUluKCk7XG4gICAgJCh0aGlzLmRyb3Bab25lTW9kYWxGb290ZXJTZWxlY3RvcilcbiAgICAgIC5odG1sKG1vZGFsLmZpbmQoJy5tb2RhbC1mb290ZXInKS5odG1sKCkpXG4gICAgICAuZmFkZUluKCk7XG5cbiAgICAkKHRoaXMuZHJvcFpvbmVNb2RhbEZvb3RlclNlbGVjdG9yKVxuICAgICAgLmZpbmQoJy5wc3RydXN0LWluc3RhbGwnKVxuICAgICAgLm9mZignY2xpY2snKVxuICAgICAgLm9uKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgJChzZWxmLm1vZHVsZUltcG9ydENvbmZpcm1TZWxlY3RvcikuaGlkZSgpO1xuICAgICAgICAkKHNlbGYuZHJvcFpvbmVNb2RhbEZvb3RlclNlbGVjdG9yKS5odG1sKCcnKTtcbiAgICAgICAgc2VsZi5hbmltYXRlU3RhcnRVcGxvYWQoKTtcblxuICAgICAgICAvLyBJbnN0YWxsIGFqYXggY2FsbFxuICAgICAgICAkLnBvc3QocmVzdWx0Lm1vZHVsZS5hdHRyaWJ1dGVzLnVybHMuaW5zdGFsbCwge1xuICAgICAgICAgICdhY3Rpb25QYXJhbXNbY29uZmlybVByZXN0YVRydXN0XSc6ICcxJyxcbiAgICAgICAgfSlcbiAgICAgICAgICAuZG9uZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgc2VsZi5kaXNwbGF5T25VcGxvYWREb25lKGRhdGFbbW9kdWxlTmFtZV0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZhaWwoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHNlbGYuZGlzcGxheU9uVXBsb2FkRXJyb3IoZGF0YVttb2R1bGVOYW1lXSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWx3YXlzKCgpID0+IHtcbiAgICAgICAgICAgIHNlbGYuaXNVcGxvYWRTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldEJ1bGtDaGVja2JveGVzU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudERpc3BsYXkgPT09IHRoaXMuRElTUExBWV9HUklEXG4gICAgICA/IHRoaXMuYnVsa0FjdGlvbkNoZWNrYm94R3JpZFNlbGVjdG9yXG4gICAgICA6IHRoaXMuYnVsa0FjdGlvbkNoZWNrYm94TGlzdFNlbGVjdG9yO1xuICB9XG5cbiAgZ2V0QnVsa0NoZWNrYm94ZXNDaGVja2VkU2VsZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudERpc3BsYXkgPT09IHRoaXMuRElTUExBWV9HUklEXG4gICAgICA/IHRoaXMuY2hlY2tlZEJ1bGtBY3Rpb25HcmlkU2VsZWN0b3JcbiAgICAgIDogdGhpcy5jaGVja2VkQnVsa0FjdGlvbkxpc3RTZWxlY3RvcjtcbiAgfVxuXG4gIGdldE1vZHVsZUl0ZW1TZWxlY3RvcigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RGlzcGxheSA9PT0gdGhpcy5ESVNQTEFZX0dSSUQgPyB0aGlzLm1vZHVsZUl0ZW1HcmlkU2VsZWN0b3IgOiB0aGlzLm1vZHVsZUl0ZW1MaXN0U2VsZWN0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb2R1bGUgbm90aWZpY2F0aW9ucyBjb3VudCBhbmQgZGlzcGxheXMgaXQgYXMgYSBiYWRnZSBvbiB0aGUgbm90aWZpY2F0aW9uIHRhYlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGdldE5vdGlmaWNhdGlvbnNDb3VudCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAkLmdldEpTT04od2luZG93Lm1vZHVsZVVSTHMubm90aWZpY2F0aW9uc0NvdW50LCBzZWxmLnVwZGF0ZU5vdGlmaWNhdGlvbnNDb3VudCkuZmFpbCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgcmV0cmlldmUgbW9kdWxlIG5vdGlmaWNhdGlvbnMgY291bnQuJyk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVOb3RpZmljYXRpb25zQ291bnQoYmFkZ2UpIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvblRhYnMgPSB7XG4gICAgICB0b19jb25maWd1cmU6ICQoJyNzdWJ0YWItQWRtaW5Nb2R1bGVzTm90aWZpY2F0aW9ucycpLFxuICAgICAgdG9fdXBkYXRlOiAkKCcjc3VidGFiLUFkbWluTW9kdWxlc1VwZGF0ZXMnKSxcbiAgICB9O1xuXG4gICAgT2JqZWN0LmtleXMoZGVzdGluYXRpb25UYWJzKS5mb3JFYWNoKChkZXN0aW5hdGlvbktleSkgPT4ge1xuICAgICAgaWYgKGRlc3RpbmF0aW9uVGFic1tkZXN0aW5hdGlvbktleV0ubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uVGFic1tkZXN0aW5hdGlvbktleV0uZmluZCgnLm5vdGlmaWNhdGlvbi1jb3VudGVyJykudGV4dChiYWRnZVtkZXN0aW5hdGlvbktleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdEFkZG9uc1NlYXJjaCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgYCR7c2VsZi5hZGRvbkl0ZW1HcmlkU2VsZWN0b3J9LCAke3NlbGYuYWRkb25JdGVtTGlzdFNlbGVjdG9yfWAsICgpID0+IHtcbiAgICAgIGxldCBzZWFyY2hRdWVyeSA9ICcnO1xuXG4gICAgICBpZiAoc2VsZi5jdXJyZW50VGFnc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgIHNlYXJjaFF1ZXJ5ID0gZW5jb2RlVVJJQ29tcG9uZW50KHNlbGYuY3VycmVudFRhZ3NMaXN0LmpvaW4oJyAnKSk7XG4gICAgICB9XG5cbiAgICAgIHdpbmRvdy5vcGVuKGAke3NlbGYuYmFzZUFkZG9uc1VybH1zZWFyY2gucGhwP3NlYXJjaF9xdWVyeT0ke3NlYXJjaFF1ZXJ5fWAsICdfYmxhbmsnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRDYXRlZ29yaWVzR3JpZCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCB0aGlzLmNhdGVnb3J5R3JpZEl0ZW1TZWxlY3RvciwgZnVuY3Rpb24gaW5pdGlsYWl6ZUdyaWRCb2R5Q2xpY2soZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHJlZkNhdGVnb3J5ID0gJCh0aGlzKS5kYXRhKCdjYXRlZ29yeS1yZWYnKTtcblxuICAgICAgLy8gSW4gY2FzZSB3ZSBoYXZlIHNvbWUgdGFncyB3ZSBuZWVkIHRvIHJlc2V0IGl0ICFcbiAgICAgIGlmIChzZWxmLmN1cnJlbnRUYWdzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgc2VsZi5wc3RhZ2dlcklucHV0LnJlc2V0VGFncyhmYWxzZSk7XG4gICAgICAgIHNlbGYuY3VycmVudFRhZ3NMaXN0ID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBtZW51Q2F0ZWdvcnlUb1RyaWdnZXIgPSAkKGAke3NlbGYuY2F0ZWdvcnlJdGVtU2VsZWN0b3J9W2RhdGEtY2F0ZWdvcnktcmVmPVwiJHtyZWZDYXRlZ29yeX1cIl1gKTtcblxuICAgICAgaWYgKCFtZW51Q2F0ZWdvcnlUb1RyaWdnZXIubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgTm8gY2F0ZWdvcnkgd2l0aCByZWYgKCR7cmVmQ2F0ZWdvcnl9KSBzZWVtcyB0byBleGlzdCFgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIGN1cnJlbnQgY2F0ZWdvcnkgZ3JpZFxuICAgICAgaWYgKHNlbGYuaXNDYXRlZ29yeUdyaWREaXNwbGF5ZWQgPT09IHRydWUpIHtcbiAgICAgICAgJChzZWxmLmNhdGVnb3J5R3JpZFNlbGVjdG9yKS5mYWRlT3V0KCk7XG4gICAgICAgIHNlbGYuaXNDYXRlZ29yeUdyaWREaXNwbGF5ZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gVHJpZ2dlciBjbGljayBvbiByaWdodCBjYXRlZ29yeVxuICAgICAgJChgJHtzZWxmLmNhdGVnb3J5SXRlbVNlbGVjdG9yfVtkYXRhLWNhdGVnb3J5LXJlZj1cIiR7cmVmQ2F0ZWdvcnl9XCJdYCkuY2xpY2soKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaW5pdEN1cnJlbnREaXNwbGF5KCkge1xuICAgIHRoaXMuY3VycmVudERpc3BsYXkgPSB0aGlzLmN1cnJlbnREaXNwbGF5ID09PSAnJyA/IHRoaXMuRElTUExBWV9MSVNUIDogdGhpcy5ESVNQTEFZX0dSSUQ7XG4gIH1cblxuICBpbml0U29ydGluZ0Ryb3Bkb3duKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgc2VsZi5jdXJyZW50U29ydGluZyA9ICQodGhpcy5tb2R1bGVTb3J0aW5nRHJvcGRvd25TZWxlY3RvcilcbiAgICAgIC5maW5kKCc6Y2hlY2tlZCcpXG4gICAgICAuYXR0cigndmFsdWUnKTtcbiAgICBpZiAoIXNlbGYuY3VycmVudFNvcnRpbmcpIHtcbiAgICAgIHNlbGYuY3VycmVudFNvcnRpbmcgPSAnYWNjZXNzLWRlc2MnO1xuICAgIH1cblxuICAgICQoJ2JvZHknKS5vbignY2hhbmdlJywgc2VsZi5tb2R1bGVTb3J0aW5nRHJvcGRvd25TZWxlY3RvciwgZnVuY3Rpb24gaW5pdGlhbGl6ZUJvZHlTb3J0aW5nQ2hhbmdlKCkge1xuICAgICAgc2VsZi5jdXJyZW50U29ydGluZyA9ICQodGhpcylcbiAgICAgICAgLmZpbmQoJzpjaGVja2VkJylcbiAgICAgICAgLmF0dHIoJ3ZhbHVlJyk7XG4gICAgICBzZWxmLnVwZGF0ZU1vZHVsZVZpc2liaWxpdHkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRvQnVsa0FjdGlvbihyZXF1ZXN0ZWRCdWxrQWN0aW9uKSB7XG4gICAgLy8gVGhpcyBvYmplY3QgaXMgdXNlZCB0byBjaGVjayBpZiByZXF1ZXN0ZWQgYnVsa0FjdGlvbiBpcyBhdmFpbGFibGUgYW5kIGdpdmUgcHJvcGVyXG4gICAgLy8gdXJsIHNlZ21lbnQgdG8gYmUgY2FsbGVkIGZvciBpdFxuICAgIGNvbnN0IGZvcmNlRGVsZXRpb24gPSAkKCcjZm9yY2VfYnVsa19kZWxldGlvbicpLnByb3AoJ2NoZWNrZWQnKTtcblxuICAgIGNvbnN0IGJ1bGtBY3Rpb25Ub1VybCA9IHtcbiAgICAgICdidWxrLXVuaW5zdGFsbCc6ICd1bmluc3RhbGwnLFxuICAgICAgJ2J1bGstZGlzYWJsZSc6ICdkaXNhYmxlJyxcbiAgICAgICdidWxrLWVuYWJsZSc6ICdlbmFibGUnLFxuICAgICAgJ2J1bGstZGlzYWJsZS1tb2JpbGUnOiAnZGlzYWJsZV9tb2JpbGUnLFxuICAgICAgJ2J1bGstZW5hYmxlLW1vYmlsZSc6ICdlbmFibGVfbW9iaWxlJyxcbiAgICAgICdidWxrLXJlc2V0JzogJ3Jlc2V0JyxcbiAgICB9O1xuXG4gICAgLy8gTm90ZSBubyBncmlkIHNlbGVjdG9yIHVzZWQgeWV0IHNpbmNlIHdlIGRvIG5vdCBuZWVkZWQgaXQgYXQgZGV2IHRpbWVcbiAgICAvLyBNYXliZSB1c2VmdWwgdG8gaW1wbGVtZW50IHRoaXMga2luZCBvZiB0aGluZ3MgbGF0ZXIgaWYgaW50ZW5kZWQgdG9cbiAgICAvLyB1c2UgdGhpcyBmdW5jdGlvbmFsaXR5IGVsc2V3aGVyZSBidXQgXCJtYW5hZ2UgbXkgbW9kdWxlXCIgc2VjdGlvblxuICAgIGlmICh0eXBlb2YgYnVsa0FjdGlvblRvVXJsW3JlcXVlc3RlZEJ1bGtBY3Rpb25dID09PSAndW5kZWZpbmVkJykge1xuICAgICAgJC5ncm93bC5lcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IHdpbmRvdy50cmFuc2xhdGVfamF2YXNjcmlwdHNbJ0J1bGsgQWN0aW9uIC0gUmVxdWVzdCBub3QgZm91bmQnXS5yZXBsYWNlKCdbMV0nLCByZXF1ZXN0ZWRCdWxrQWN0aW9uKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIExvb3Agb3ZlciBhbGwgY2hlY2tlZCBidWxrIGNoZWNrYm94ZXNcbiAgICBjb25zdCBidWxrQWN0aW9uU2VsZWN0ZWRTZWxlY3RvciA9IHRoaXMuZ2V0QnVsa0NoZWNrYm94ZXNDaGVja2VkU2VsZWN0b3IoKTtcbiAgICBjb25zdCBidWxrTW9kdWxlQWN0aW9uID0gYnVsa0FjdGlvblRvVXJsW3JlcXVlc3RlZEJ1bGtBY3Rpb25dO1xuXG4gICAgaWYgKCQoYnVsa0FjdGlvblNlbGVjdGVkU2VsZWN0b3IpLmxlbmd0aCA8PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4od2luZG93LnRyYW5zbGF0ZV9qYXZhc2NyaXB0c1snQnVsayBBY3Rpb24gLSBPbmUgbW9kdWxlIG1pbmltdW0nXSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kdWxlc0FjdGlvbnMgPSBbXTtcbiAgICBsZXQgbW9kdWxlVGVjaE5hbWU7XG4gICAgJChidWxrQWN0aW9uU2VsZWN0ZWRTZWxlY3RvcikuZWFjaChmdW5jdGlvbiBidWxrQWN0aW9uU2VsZWN0b3IoKSB7XG4gICAgICBtb2R1bGVUZWNoTmFtZSA9ICQodGhpcykuZGF0YSgndGVjaC1uYW1lJyk7XG4gICAgICBtb2R1bGVzQWN0aW9ucy5wdXNoKHtcbiAgICAgICAgdGVjaE5hbWU6IG1vZHVsZVRlY2hOYW1lLFxuICAgICAgICBhY3Rpb25NZW51T2JqOiAkKHRoaXMpXG4gICAgICAgICAgLmNsb3Nlc3QoJy5tb2R1bGUtY2hlY2tib3gtYnVsay1saXN0JylcbiAgICAgICAgICAubmV4dCgpLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnBlcmZvcm1Nb2R1bGVzQWN0aW9uKG1vZHVsZXNBY3Rpb25zLCBidWxrTW9kdWxlQWN0aW9uLCBmb3JjZURlbGV0aW9uKTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcGVyZm9ybU1vZHVsZXNBY3Rpb24obW9kdWxlc0FjdGlvbnMsIGJ1bGtNb2R1bGVBY3Rpb24sIGZvcmNlRGVsZXRpb24pIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGlmICh0eXBlb2Ygc2VsZi5tb2R1bGVDYXJkQ29udHJvbGxlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaXJzdCBsZXQncyBmaWx0ZXIgbW9kdWxlcyB0aGF0IGNhbid0IHBlcmZvcm0gdGhpcyBhY3Rpb25cbiAgICBjb25zdCBhY3Rpb25NZW51TGlua3MgPSBmaWx0ZXJBbGxvd2VkQWN0aW9ucyhtb2R1bGVzQWN0aW9ucyk7XG5cbiAgICBpZiAoIWFjdGlvbk1lbnVMaW5rcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbW9kdWxlc1JlcXVlc3RlZENvdW50ZG93biA9IGFjdGlvbk1lbnVMaW5rcy5sZW5ndGggLSAxO1xuICAgIGxldCBzcGlubmVyT2JqID0gJCgnPGJ1dHRvbiBjbGFzcz1cImJ0bi1wcmltYXJ5LXJldmVyc2Ugb25jbGljayB1bmJpbmQgc3Bpbm5lciBcIj48L2J1dHRvbj4nKTtcblxuICAgIGlmIChhY3Rpb25NZW51TGlua3MubGVuZ3RoID4gMSkge1xuICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgbW9kdWxlcyBleGNlcHQgdGhlIGxhc3Qgb25lIHdoaWNoIHdhaXRzIGZvciBvdGhlclxuICAgICAgLy8gcmVxdWVzdHMgYW5kIHRoZW4gY2FsbCBpdHMgcmVxdWVzdCB3aXRoIGNhY2hlIGNsZWFyIGVuYWJsZWRcbiAgICAgICQuZWFjaChhY3Rpb25NZW51TGlua3MsIChpbmRleCwgYWN0aW9uTWVudUxpbmspID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID49IGFjdGlvbk1lbnVMaW5rcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcXVlc3RNb2R1bGVBY3Rpb24oYWN0aW9uTWVudUxpbmssIHRydWUsIGNvdW50ZG93bk1vZHVsZXNSZXF1ZXN0KTtcbiAgICAgIH0pO1xuICAgICAgLy8gRGlzcGxheSBhIHNwaW5uZXIgZm9yIHRoZSBsYXN0IG1vZHVsZVxuICAgICAgY29uc3QgbGFzdE1lbnVMaW5rID0gYWN0aW9uTWVudUxpbmtzW2FjdGlvbk1lbnVMaW5rcy5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IGFjdGlvbk1lbnVPYmogPSBsYXN0TWVudUxpbmsuY2xvc2VzdChzZWxmLm1vZHVsZUNhcmRDb250cm9sbGVyLm1vZHVsZUl0ZW1BY3Rpb25zU2VsZWN0b3IpO1xuICAgICAgYWN0aW9uTWVudU9iai5oaWRlKCk7XG4gICAgICBhY3Rpb25NZW51T2JqLmFmdGVyKHNwaW5uZXJPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0TW9kdWxlQWN0aW9uKGFjdGlvbk1lbnVMaW5rc1swXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVxdWVzdE1vZHVsZUFjdGlvbihhY3Rpb25NZW51TGluaywgZGlzYWJsZUNhY2hlQ2xlYXIsIHJlcXVlc3RFbmRDYWxsYmFjaykge1xuICAgICAgc2VsZi5tb2R1bGVDYXJkQ29udHJvbGxlci5yZXF1ZXN0VG9Db250cm9sbGVyKFxuICAgICAgICBidWxrTW9kdWxlQWN0aW9uLFxuICAgICAgICBhY3Rpb25NZW51TGluayxcbiAgICAgICAgZm9yY2VEZWxldGlvbixcbiAgICAgICAgZGlzYWJsZUNhY2hlQ2xlYXIsXG4gICAgICAgIHJlcXVlc3RFbmRDYWxsYmFjayxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY291bnRkb3duTW9kdWxlc1JlcXVlc3QoKSB7XG4gICAgICBtb2R1bGVzUmVxdWVzdGVkQ291bnRkb3duIC09IDE7XG4gICAgICAvLyBOb3cgdGhhdCBhbGwgb3RoZXIgbW9kdWxlcyBoYXZlIHBlcmZvcm1lZCB0aGVpciBhY3Rpb24gV0lUSE9VVCBjYWNoZSBjbGVhciwgd2VcbiAgICAgIC8vIGNhbiByZXF1ZXN0IHRoZSBsYXN0IG1vZHVsZSByZXF1ZXN0IFdJVEggY2FjaGUgY2xlYXJcbiAgICAgIGlmIChtb2R1bGVzUmVxdWVzdGVkQ291bnRkb3duIDw9IDApIHtcbiAgICAgICAgaWYgKHNwaW5uZXJPYmopIHtcbiAgICAgICAgICBzcGlubmVyT2JqLnJlbW92ZSgpO1xuICAgICAgICAgIHNwaW5uZXJPYmogPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdE1lbnVMaW5rID0gYWN0aW9uTWVudUxpbmtzW2FjdGlvbk1lbnVMaW5rcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgYWN0aW9uTWVudU9iaiA9IGxhc3RNZW51TGluay5jbG9zZXN0KHNlbGYubW9kdWxlQ2FyZENvbnRyb2xsZXIubW9kdWxlSXRlbUFjdGlvbnNTZWxlY3Rvcik7XG4gICAgICAgIGFjdGlvbk1lbnVPYmouZmFkZUluKCk7XG4gICAgICAgIHJlcXVlc3RNb2R1bGVBY3Rpb24obGFzdE1lbnVMaW5rKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJBbGxvd2VkQWN0aW9ucyhhY3Rpb25zKSB7XG4gICAgICBjb25zdCBtZW51TGlua3MgPSBbXTtcbiAgICAgIGxldCBhY3Rpb25NZW51TGluaztcbiAgICAgICQuZWFjaChhY3Rpb25zLCAoaW5kZXgsIG1vZHVsZURhdGEpID0+IHtcbiAgICAgICAgYWN0aW9uTWVudUxpbmsgPSAkKFxuICAgICAgICAgIHNlbGYubW9kdWxlQ2FyZENvbnRyb2xsZXIubW9kdWxlQWN0aW9uTWVudUxpbmtTZWxlY3RvciArIGJ1bGtNb2R1bGVBY3Rpb24sXG4gICAgICAgICAgbW9kdWxlRGF0YS5hY3Rpb25NZW51T2JqLFxuICAgICAgICApO1xuICAgICAgICBpZiAoYWN0aW9uTWVudUxpbmsubGVuZ3RoID4gMCkge1xuICAgICAgICAgIG1lbnVMaW5rcy5wdXNoKGFjdGlvbk1lbnVMaW5rKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkLmdyb3dsLmVycm9yKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHdpbmRvdy50cmFuc2xhdGVfamF2YXNjcmlwdHNbJ0J1bGsgQWN0aW9uIC0gUmVxdWVzdCBub3QgYXZhaWxhYmxlIGZvciBtb2R1bGUnXVxuICAgICAgICAgICAgICAucmVwbGFjZSgnWzFdJywgYnVsa01vZHVsZUFjdGlvbilcbiAgICAgICAgICAgICAgLnJlcGxhY2UoJ1syXScsIG1vZHVsZURhdGEudGVjaE5hbWUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG1lbnVMaW5rcztcbiAgICB9XG4gIH1cblxuICBpbml0QWN0aW9uQnV0dG9ucygpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgc2VsZi5tb2R1bGVJbnN0YWxsQnRuU2VsZWN0b3IsIGZ1bmN0aW9uIGluaXRpYWxpemVBY3Rpb25CdXR0b25zQ2xpY2soZXZlbnQpIHtcbiAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGNvbnN0ICRuZXh0ID0gJCgkdGhpcy5uZXh0KCkpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgJHRoaXMuaGlkZSgpO1xuICAgICAgJG5leHQuc2hvdygpO1xuXG4gICAgICAkLmFqYXgoe1xuICAgICAgICB1cmw6ICR0aGlzLmRhdGEoJ3VybCcpLFxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgfSkuZG9uZSgoKSA9PiB7XG4gICAgICAgICRuZXh0LmZhZGVPdXQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gXCJVcGdyYWRlIEFsbFwiIGJ1dHRvbiBoYW5kbGVyXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsIHNlbGYudXBncmFkZUFsbFNvdXJjZSwgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgaXNNYWludGVuYW5jZU1vZGUgPSB3aW5kb3cuaXNTaG9wTWFpbnRlbmFuY2U7XG5cbiAgICAgIC8vIE1vZGFsIGJvZHkgZWxlbWVudFxuICAgICAgY29uc3QgbWFpbnRlbmFuY2VMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgbWFpbnRlbmFuY2VMaW5rLmNsYXNzTGlzdC5hZGQoJ2J0bicsICdidG4tcHJpbWFyeScsICdidG4tbGcnKTtcbiAgICAgIG1haW50ZW5hbmNlTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB3aW5kb3cubW9kdWxlVVJMcy5tYWludGVuYW5jZVBhZ2UpO1xuICAgICAgbWFpbnRlbmFuY2VMaW5rLmlubmVySFRNTCA9IHdpbmRvdy5tb2R1bGVUcmFuc2xhdGlvbnMubW9kdWxlTW9kYWxVcGRhdGVNYWludGVuYW5jZTtcblxuICAgICAgY29uc3QgdXBkYXRlQWxsQ29uZmlybU1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbChcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnY29uZmlybS1tb2R1bGUtdXBkYXRlLW1vZGFsJyxcbiAgICAgICAgICBjb25maXJtVGl0bGU6IHdpbmRvdy5tb2R1bGVUcmFuc2xhdGlvbnMuc2luZ2xlTW9kdWxlTW9kYWxVcGRhdGVUaXRsZSxcbiAgICAgICAgICBjbG9zZUJ1dHRvbkxhYmVsOiB3aW5kb3cubW9kdWxlVHJhbnNsYXRpb25zLm1vZHVsZU1vZGFsVXBkYXRlQ2FuY2VsLFxuICAgICAgICAgIGNvbmZpcm1CdXR0b25MYWJlbDogaXNNYWludGVuYW5jZU1vZGVcbiAgICAgICAgICAgID8gd2luZG93Lm1vZHVsZVRyYW5zbGF0aW9ucy5tb2R1bGVNb2RhbFVwZGF0ZVVwZ3JhZGVcbiAgICAgICAgICAgIDogd2luZG93Lm1vZHVsZVRyYW5zbGF0aW9ucy51cGdyYWRlQW55d2F5QnV0dG9uVGV4dCxcbiAgICAgICAgICBjb25maXJtQnV0dG9uQ2xhc3M6IGlzTWFpbnRlbmFuY2VNb2RlID8gJ2J0bi1wcmltYXJ5JyA6ICdidG4tc2Vjb25kYXJ5JyxcbiAgICAgICAgICBjb25maXJtTWVzc2FnZTogaXNNYWludGVuYW5jZU1vZGUgPyAnJyA6IHdpbmRvdy5tb2R1bGVUcmFuc2xhdGlvbnMubW9kdWxlTW9kYWxVcGRhdGVDb25maXJtTWVzc2FnZSxcbiAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjdXN0b21CdXR0b25zOiBpc01haW50ZW5hbmNlTW9kZSA/IFtdIDogW21haW50ZW5hbmNlTGlua10sXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAoJChzZWxmLnVwZ3JhZGVBbGxUYXJnZXRzKS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKHdpbmRvdy50cmFuc2xhdGVfamF2YXNjcmlwdHNbJ1VwZ3JhZGUgQWxsIEFjdGlvbiAtIE9uZSBtb2R1bGUgbWluaW11bSddKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtb2R1bGVzQWN0aW9ucyA9IFtdO1xuICAgICAgICAgIGxldCBtb2R1bGVUZWNoTmFtZTtcbiAgICAgICAgICAkKHNlbGYudXBncmFkZUFsbFRhcmdldHMpLmVhY2goZnVuY3Rpb24gYnVsa0FjdGlvblNlbGVjdG9yKCkge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlSXRlbUxpc3QgPSAkKHRoaXMpLmNsb3Nlc3QoJy5tb2R1bGUtaXRlbS1saXN0Jyk7XG4gICAgICAgICAgICBtb2R1bGVUZWNoTmFtZSA9IG1vZHVsZUl0ZW1MaXN0LmRhdGEoJ3RlY2gtbmFtZScpO1xuICAgICAgICAgICAgbW9kdWxlc0FjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIHRlY2hOYW1lOiBtb2R1bGVUZWNoTmFtZSxcbiAgICAgICAgICAgICAgYWN0aW9uTWVudU9iajogJCgnLm1vZHVsZS1hY3Rpb25zJywgbW9kdWxlSXRlbUxpc3QpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLnBlcmZvcm1Nb2R1bGVzQWN0aW9uKG1vZHVsZXNBY3Rpb25zLCAndXBncmFkZScpO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICB1cGRhdGVBbGxDb25maXJtTW9kYWwuc2hvdygpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRDYXRlZ29yeVNlbGVjdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBib2R5ID0gJCgnYm9keScpO1xuICAgIGJvZHkub24oJ2NsaWNrJywgc2VsZi5jYXRlZ29yeUl0ZW1TZWxlY3RvciwgZnVuY3Rpb24gaW5pdGlhbGl6ZUNhdGVnb3J5U2VsZWN0Q2xpY2soKSB7XG4gICAgICAvLyBHZXQgZGF0YSBmcm9tIGxpIERPTSBpbnB1dFxuICAgICAgc2VsZi5jdXJyZW50UmVmQ2F0ZWdvcnkgPSAkKHRoaXMpLmRhdGEoJ2NhdGVnb3J5LXJlZicpO1xuICAgICAgc2VsZi5jdXJyZW50UmVmQ2F0ZWdvcnkgPSBzZWxmLmN1cnJlbnRSZWZDYXRlZ29yeSA/IFN0cmluZyhzZWxmLmN1cnJlbnRSZWZDYXRlZ29yeSkudG9Mb3dlckNhc2UoKSA6IG51bGw7XG4gICAgICAvLyBDaGFuZ2UgZHJvcGRvd24gbGFiZWwgdG8gc2V0IGl0IHRvIHRoZSBjdXJyZW50IGNhdGVnb3J5J3MgZGlzcGxheW5hbWVcbiAgICAgICQoc2VsZi5jYXRlZ29yeVNlbGVjdG9yTGFiZWxTZWxlY3RvcikudGV4dCgkKHRoaXMpLmRhdGEoJ2NhdGVnb3J5LWRpc3BsYXktbmFtZScpKTtcbiAgICAgICQoc2VsZi5jYXRlZ29yeVJlc2V0QnRuU2VsZWN0b3IpLnNob3coKTtcbiAgICAgIHNlbGYudXBkYXRlTW9kdWxlVmlzaWJpbGl0eSgpO1xuICAgIH0pO1xuXG4gICAgYm9keS5vbignY2xpY2snLCBzZWxmLmNhdGVnb3J5UmVzZXRCdG5TZWxlY3RvciwgZnVuY3Rpb24gaW5pdGlhbGl6ZUNhdGVnb3J5UmVzZXRCdXR0b25DbGljaygpIHtcbiAgICAgIGNvbnN0IHJhd1RleHQgPSAkKHNlbGYuY2F0ZWdvcnlTZWxlY3RvcikuYXR0cignYXJpYS1sYWJlbGxlZGJ5Jyk7XG4gICAgICBjb25zdCB1cHBlckZpcnN0TGV0dGVyID0gcmF3VGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcbiAgICAgIGNvbnN0IHJlbW92ZWRGaXJzdExldHRlciA9IHJhd1RleHQuc2xpY2UoMSk7XG4gICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSB1cHBlckZpcnN0TGV0dGVyICsgcmVtb3ZlZEZpcnN0TGV0dGVyO1xuXG4gICAgICAkKHNlbGYuY2F0ZWdvcnlTZWxlY3RvckxhYmVsU2VsZWN0b3IpLnRleHQob3JpZ2luYWxUZXh0KTtcbiAgICAgICQodGhpcykuaGlkZSgpO1xuICAgICAgc2VsZi5jdXJyZW50UmVmQ2F0ZWdvcnkgPSBudWxsO1xuICAgICAgc2VsZi51cGRhdGVNb2R1bGVWaXNpYmlsaXR5KCk7XG4gICAgfSk7XG4gIH1cblxuICBpbml0U2VhcmNoQmxvY2soKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5wc3RhZ2dlcklucHV0ID0gJCgnI21vZHVsZS1zZWFyY2gtYmFyJykucHN0YWdnZXIoe1xuICAgICAgb25UYWdzQ2hhbmdlZDogKHRhZ0xpc3QpID0+IHtcbiAgICAgICAgc2VsZi5jdXJyZW50VGFnc0xpc3QgPSB0YWdMaXN0O1xuICAgICAgICBzZWxmLnVwZGF0ZU1vZHVsZVZpc2liaWxpdHkoKTtcbiAgICAgIH0sXG4gICAgICBvblJlc2V0VGFnczogKCkgPT4ge1xuICAgICAgICBzZWxmLmN1cnJlbnRUYWdzTGlzdCA9IFtdO1xuICAgICAgICBzZWxmLnVwZGF0ZU1vZHVsZVZpc2liaWxpdHkoKTtcbiAgICAgIH0sXG4gICAgICBpbnB1dFBsYWNlaG9sZGVyOiB3aW5kb3cudHJhbnNsYXRlX2phdmFzY3JpcHRzWydTZWFyY2ggLSBwbGFjZWhvbGRlciddLFxuICAgICAgY2xvc2luZ0Nyb3NzOiB0cnVlLFxuICAgICAgY29udGV4dDogc2VsZixcbiAgICB9KTtcblxuICAgICQoJ2JvZHknKS5vbignY2xpY2snLCAnLm1vZHVsZS1hZGRvbnMtc2VhcmNoLWxpbmsnLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHdpbmRvdy5vcGVuKCQodGhpcykuYXR0cignaHJlZicpLCAnX2JsYW5rJyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkaXNwbGF5IHN3aXRjaGluZyBiZXR3ZWVuIExpc3Qgb3IgR3JpZFxuICAgKi9cbiAgaW5pdFNvcnRpbmdEaXNwbGF5U3dpdGNoKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcubW9kdWxlLXNvcnQtc3dpdGNoJywgZnVuY3Rpb24gc3dpdGNoU29ydCgpIHtcbiAgICAgIGNvbnN0IHN3aXRjaFRvID0gJCh0aGlzKS5kYXRhKCdzd2l0Y2gnKTtcbiAgICAgIGNvbnN0IGlzQWxyZWFkeURpc3BsYXllZCA9ICQodGhpcykuaGFzQ2xhc3MoJ2FjdGl2ZS1kaXNwbGF5Jyk7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3dpdGNoVG8gIT09ICd1bmRlZmluZWQnICYmIGlzQWxyZWFkeURpc3BsYXllZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2VsZi5zd2l0Y2hTb3J0aW5nRGlzcGxheVRvKHN3aXRjaFRvKTtcbiAgICAgICAgc2VsZi5jdXJyZW50RGlzcGxheSA9IHN3aXRjaFRvO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3dpdGNoU29ydGluZ0Rpc3BsYXlUbyhzd2l0Y2hUbykge1xuICAgIGlmIChzd2l0Y2hUbyAhPT0gdGhpcy5ESVNQTEFZX0dSSUQgJiYgc3dpdGNoVG8gIT09IHRoaXMuRElTUExBWV9MSVNUKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBDYW4ndCBzd2l0Y2ggdG8gdW5kZWZpbmVkIGRpc3BsYXkgcHJvcGVydHkgXCIke3N3aXRjaFRvfVwiYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgJCgnLm1vZHVsZS1zb3J0LXN3aXRjaCcpLnJlbW92ZUNsYXNzKCdtb2R1bGUtc29ydC1hY3RpdmUnKTtcbiAgICAkKGAjbW9kdWxlLXNvcnQtJHtzd2l0Y2hUb31gKS5hZGRDbGFzcygnbW9kdWxlLXNvcnQtYWN0aXZlJyk7XG4gICAgdGhpcy5jdXJyZW50RGlzcGxheSA9IHN3aXRjaFRvO1xuICAgIHRoaXMudXBkYXRlTW9kdWxlVmlzaWJpbGl0eSgpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVNlZU1vcmUoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAkKGAke3NlbGYubW9kdWxlU2hvcnRMaXN0fSAke3NlbGYuc2VlTW9yZVNlbGVjdG9yfWApLm9uKCdjbGljaycsIGZ1bmN0aW9uIHNlZU1vcmUoKSB7XG4gICAgICBzZWxmLmN1cnJlbnRDYXRlZ29yeURpc3BsYXlbJCh0aGlzKS5kYXRhKCdjYXRlZ29yeScpXSA9IHRydWU7XG4gICAgICAkKHRoaXMpLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgICQodGhpcylcbiAgICAgICAgLmNsb3Nlc3Qoc2VsZi5tb2R1bGVTaG9ydExpc3QpXG4gICAgICAgIC5maW5kKHNlbGYuc2VlTGVzc1NlbGVjdG9yKVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgc2VsZi51cGRhdGVNb2R1bGVWaXNpYmlsaXR5KCk7XG4gICAgfSk7XG5cbiAgICAkKGAke3NlbGYubW9kdWxlU2hvcnRMaXN0fSAke3NlbGYuc2VlTGVzc1NlbGVjdG9yfWApLm9uKCdjbGljaycsIGZ1bmN0aW9uIHNlZU1vcmUoKSB7XG4gICAgICBzZWxmLmN1cnJlbnRDYXRlZ29yeURpc3BsYXlbJCh0aGlzKS5kYXRhKCdjYXRlZ29yeScpXSA9IGZhbHNlO1xuICAgICAgJCh0aGlzKS5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAkKHRoaXMpXG4gICAgICAgIC5jbG9zZXN0KHNlbGYubW9kdWxlU2hvcnRMaXN0KVxuICAgICAgICAuZmluZChzZWxmLnNlZU1vcmVTZWxlY3RvcilcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgICAgIHNlbGYudXBkYXRlTW9kdWxlVmlzaWJpbGl0eSgpO1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlVG90YWxSZXN1bHRzKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHJlcGxhY2VGaXJzdFdvcmRCeSA9IChlbGVtZW50LCB2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgZXhwbG9kZWRUZXh0ID0gZWxlbWVudC50ZXh0KCkuc3BsaXQoJyAnKTtcbiAgICAgIGV4cGxvZGVkVGV4dFswXSA9IHZhbHVlO1xuICAgICAgZWxlbWVudC50ZXh0KGV4cGxvZGVkVGV4dC5qb2luKCcgJykpO1xuICAgIH07XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgc29tZSBzaG9ydGxpc3Q6IGVhY2ggc2hvcnRsaXN0IGNvdW50IHRoZSBtb2R1bGVzIG9uIHRoZSBuZXh0IGNvbnRhaW5lci5cbiAgICBjb25zdCAkc2hvcnRMaXN0cyA9ICQoJy5tb2R1bGUtc2hvcnQtbGlzdCcpO1xuXG4gICAgaWYgKCRzaG9ydExpc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICRzaG9ydExpc3RzLmVhY2goZnVuY3Rpb24gc2hvcnRMaXN0cygpIHtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICByZXBsYWNlRmlyc3RXb3JkQnkoXG4gICAgICAgICAgJHRoaXMuZmluZCgnLm1vZHVsZS1zZWFyY2gtcmVzdWx0LXdvcmRpbmcnKSxcbiAgICAgICAgICAkdGhpcy5uZXh0KCcubW9kdWxlcy1saXN0JykuZmluZCgnLm1vZHVsZS1pdGVtJykubGVuZ3RoLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHNob3J0bGlzdDogdGhlIHdvcmRpbmcgZGlyZWN0bHkgdXBkYXRlIGZyb20gdGhlIG9ubHkgbW9kdWxlIGNvbnRhaW5lci5cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbW9kdWxlc0NvdW50ID0gJCgnLm1vZHVsZXMtbGlzdCcpLmZpbmQoJy5tb2R1bGUtaXRlbScpLmxlbmd0aDtcbiAgICAgIHJlcGxhY2VGaXJzdFdvcmRCeSgkKCcubW9kdWxlLXNlYXJjaC1yZXN1bHQtd29yZGluZycpLCBtb2R1bGVzQ291bnQpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IHNlbGVjdG9yVG9Ub2dnbGUgPVxuICAgICAgICBzZWxmLmN1cnJlbnREaXNwbGF5ID09PSBzZWxmLkRJU1BMQVlfTElTVCA/IHRoaXMuYWRkb25JdGVtTGlzdFNlbGVjdG9yIDogdGhpcy5hZGRvbkl0ZW1HcmlkU2VsZWN0b3I7XG4gICAgICAkKHNlbGVjdG9yVG9Ub2dnbGUpLnRvZ2dsZShtb2R1bGVzQ291bnQgIT09IHRoaXMubW9kdWxlc0xpc3QubGVuZ3RoIC8gMik7XG5cbiAgICAgIGlmIChtb2R1bGVzQ291bnQgPT09IDApIHtcbiAgICAgICAgJCgnLm1vZHVsZS1hZGRvbnMtc2VhcmNoLWxpbmsnKS5hdHRyKFxuICAgICAgICAgICdocmVmJyxcbiAgICAgICAgICBgJHt0aGlzLmJhc2VBZGRvbnNVcmx9c2VhcmNoLnBocD9zZWFyY2hfcXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5jdXJyZW50VGFnc0xpc3Quam9pbignICcpKX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzTW9kdWxlc1BhZ2UoKSB7XG4gICAgcmV0dXJuICQodGhpcy51cGdyYWRlQ29udGFpbmVyKS5sZW5ndGggPT09IDAgJiYgJCh0aGlzLm5vdGlmaWNhdGlvbkNvbnRhaW5lcikubGVuZ3RoID09PSAwO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFkbWluTW9kdWxlQ29udHJvbGxlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4vKipcbiAqIE1vZHVsZSBBZG1pbiBQYWdlIExvYWRlci5cbiAqIEBjb25zdHJ1Y3RvclxuICovXG5jbGFzcyBNb2R1bGVMb2FkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBNb2R1bGVMb2FkZXIuaGFuZGxlSW1wb3J0KCk7XG4gICAgTW9kdWxlTG9hZGVyLmhhbmRsZUV2ZW50cygpO1xuICB9XG5cbiAgc3RhdGljIGhhbmRsZUltcG9ydCgpIHtcbiAgICBjb25zdCBtb2R1bGVJbXBvcnQgPSAkKCcjbW9kdWxlLWltcG9ydCcpO1xuICAgIG1vZHVsZUltcG9ydC5jbGljaygoKSA9PiB7XG4gICAgICBtb2R1bGVJbXBvcnQuYWRkQ2xhc3MoJ29uY2xpY2snLCAyNTAsIHZhbGlkYXRlKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKCkge1xuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIG1vZHVsZUltcG9ydC5yZW1vdmVDbGFzcygnb25jbGljaycpO1xuICAgICAgICAgIG1vZHVsZUltcG9ydC5hZGRDbGFzcygndmFsaWRhdGUnLCA0NTAsIGNhbGxiYWNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgMjI1MCxcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIG1vZHVsZUltcG9ydC5yZW1vdmVDbGFzcygndmFsaWRhdGUnKTtcbiAgICAgICAgfSxcbiAgICAgICAgMTI1MCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGhhbmRsZUV2ZW50cygpIHtcbiAgICAkKCdib2R5Jykub24oXG4gICAgICAnY2xpY2snLFxuICAgICAgJ2EubW9kdWxlLXJlYWQtbW9yZS1ncmlkLWJ0biwgYS5tb2R1bGUtcmVhZC1tb3JlLWxpc3QtYnRuJyxcbiAgICAgIChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBtb2R1bGVQb3BwaW4gPSAkKGV2ZW50LnRhcmdldCkuZGF0YSgndGFyZ2V0Jyk7XG5cbiAgICAgICAgJC5nZXQoZXZlbnQudGFyZ2V0LmhyZWYsIChkYXRhKSA9PiB7XG4gICAgICAgICAgJChtb2R1bGVQb3BwaW4pLmh0bWwoZGF0YSk7XG4gICAgICAgICAgJChtb2R1bGVQb3BwaW4pLm1vZGFsKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZHVsZUxvYWRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9hcnJheS9mcm9tXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL251bWJlci9pcy1uYW5cIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eVwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9vYmplY3Qva2V5c1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9mcm9tID0gcmVxdWlyZShcIi4uL2NvcmUtanMvYXJyYXkvZnJvbVwiKTtcblxudmFyIF9mcm9tMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zyb20pO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoMCwgX2Zyb20yLmRlZmF1bHQpKGFycik7XG4gIH1cbn07IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5mcm9tO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuTnVtYmVyLmlzTmFOO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xudmFyICRPYmplY3QgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKSB7XG4gIHJldHVybiAkT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Qua2V5cztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHRydWU7XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvd1tcImpRdWVyeVwiXTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgTW9kdWxlQ2FyZCBmcm9tICdAY29tcG9uZW50cy9tb2R1bGUtY2FyZCc7XG5pbXBvcnQgQWRtaW5Nb2R1bGVDb250cm9sbGVyIGZyb20gJ0BwYWdlcy9tb2R1bGUvY29udHJvbGxlcic7XG5pbXBvcnQgTW9kdWxlTG9hZGVyIGZyb20gJ0BwYWdlcy9tb2R1bGUvbG9hZGVyJztcblxuY29uc3QgeyR9ID0gd2luZG93O1xuXG4kKCgpID0+IHtcbiAgY29uc3QgbW9kdWxlQ2FyZENvbnRyb2xsZXIgPSBuZXcgTW9kdWxlQ2FyZCgpO1xuICBuZXcgTW9kdWxlTG9hZGVyKCk7XG4gIG5ldyBBZG1pbk1vZHVsZUNvbnRyb2xsZXIobW9kdWxlQ2FyZENvbnRyb2xsZXIpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9