????
Current Path : /home/darkwebsol/acrepairkwt.com/wp-content/plugins/feeds-for-youtube/js/ |
Current File : /home/darkwebsol/acrepairkwt.com/wp-content/plugins/feeds-for-youtube/js/customizer.min.js |
(()=>{"use strict";const e=function(e){return"string"!=typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)},t=function(e){return"string"!=typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)},o=function(o,n){return function(i,s,r,c=10){const a=o[n];if(!t(i))return;if(!e(s))return;if("function"!=typeof r)return void console.error("The hook callback must be a function.");if("number"!=typeof c)return void console.error("If specified, the hook priority must be a number.");const l={callback:r,priority:c,namespace:s};if(a[i]){const e=a[i].handlers;let t;for(t=e.length;t>0&&!(c>=e[t-1].priority);t--);t===e.length?e[t]=l:e.splice(t,0,l),a.__current.forEach((e=>{e.name===i&&e.currentIndex>=t&&e.currentIndex++}))}else a[i]={handlers:[l],runs:0};"hookAdded"!==i&&o.doAction("hookAdded",i,s,r,c)}},n=function(o,n,i=!1){return function(s,r){const c=o[n];if(!t(s))return;if(!i&&!e(r))return;if(!c[s])return 0;let a=0;if(i)a=c[s].handlers.length,c[s]={runs:c[s].runs,handlers:[]};else{const e=c[s].handlers;for(let t=e.length-1;t>=0;t--)e[t].namespace===r&&(e.splice(t,1),a++,c.__current.forEach((e=>{e.name===s&&e.currentIndex>=t&&e.currentIndex--})))}return"hookRemoved"!==s&&o.doAction("hookRemoved",s,r),a}},i=function(e,t){return function(o,n){const i=e[t];return void 0!==n?o in i&&i[o].handlers.some((e=>e.namespace===n)):o in i}},s=function(e,t,o=!1){return function(n,...i){const s=e[t];s[n]||(s[n]={handlers:[],runs:0}),s[n].runs++;const r=s[n].handlers;if(!r||!r.length)return o?i[0]:void 0;const c={name:n,currentIndex:0};for(s.__current.push(c);c.currentIndex<r.length;){const e=r[c.currentIndex].callback.apply(null,i);o&&(i[0]=e),c.currentIndex++}return s.__current.pop(),o?i[0]:void 0}},r=function(e,t){return function(){var o;const n=e[t];return null!==(o=n.__current[n.__current.length-1]?.name)&&void 0!==o?o:null}},c=function(e,t){return function(o){const n=e[t];return void 0===o?void 0!==n.__current[0]:!!n.__current[0]&&o===n.__current[0].name}},a=function(e,o){return function(n){const i=e[o];if(t(n))return i[n]&&i[n].runs?i[n].runs:0}};class l{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=o(this,"actions"),this.addFilter=o(this,"filters"),this.removeAction=n(this,"actions"),this.removeFilter=n(this,"filters"),this.hasAction=i(this,"actions"),this.hasFilter=i(this,"filters"),this.removeAllActions=n(this,"actions",!0),this.removeAllFilters=n(this,"filters",!0),this.doAction=s(this,"actions"),this.applyFilters=s(this,"filters",!0),this.currentAction=r(this,"actions"),this.currentFilter=r(this,"filters"),this.doingAction=c(this,"actions"),this.doingFilter=c(this,"filters"),this.didAction=a(this,"actions"),this.didFilter=a(this,"filters")}}const u=new l,{addAction:d,addFilter:h,removeAction:f,removeFilter:m,hasAction:p,hasFilter:g,removeAllActions:b,removeAllFilters:y,doAction:_,applyFilters:v,currentAction:F,currentFilter:S,doingAction:w,doingFilter:A,didAction:P,didFilter:k,actions:C,filters:z}=u;function D(e){return D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},D(e)}function x(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function E(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?x(Object(o),!0).forEach((function(t){I(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):x(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function I(e,t,o){return(t=function(e){var t=function(e,t){if("object"!=D(e)||!e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var n=o.call(e,"string");if("object"!=D(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==D(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}SB_Customizer.initPromise=new Promise((function(e){SB_Customizer.extraData=E(E({},SB_Customizer.extraData),{},{allFeedsScreen:sbc_builder.allFeedsScreen,feedsList:sbc_builder.feeds,legacyFeedsList:sbc_builder.legacyFeeds,tooltipContent:sbc_builder.feedtypesTooltipContent,feedSettingsDomOptions:null,selectedFeedModel:{channel:sbc_builder.prefilledChannelId,playlist:"",favorites:sbc_builder.prefilledChannelId,search:"",live:sbc_builder.prefilledChannelId,single:"",apiKey:"",accessToken:""},youtubeAccountConnectURL:sbc_builder.youtubeAccountConnectURL,connectSiteParameters:sbc_builder.youtubeAccountConnectParameters,prefilledChannelId:sbc_builder.prefilledChannelId,dismissLite:sbc_builder.youtube_feed_dismiss_lite,shouldShowFeedAPIForm:!1,shouldShowManualConnect:!1,showShowYTAccountWarning:!1,sw_feed:!1,sw_feed_id:!1}),SB_Customizer.extraMethods=E(E({},SB_Customizer.extraMethods),{},{changeSettingValue:function(e,t){var o=arguments.length>3&&void 0!==arguments[3]&&arguments[3],n=this;(!(arguments.length>2&&void 0!==arguments[2])||arguments[2])&&(n.customizerFeedData.settings[e]=t),!1!==o&&n.customizerControlAjaxAction(o,e),n.regenerateLayout(e)},checkExtensionActive:function(e){return this.activeExtensions[e]},shouldShowOverlay:function(e){var t=this;return t.sbyIsPro&&!t.sbyLicenseNoticeActive&&("call_to_action"!=e.checkExtensionPopup&&"advancedFilters"!=e.checkExtensionPopup||t.hasFeature("call_to_actions")&&t.hasFeature("advancedFilters"))?(null!=e.condition||null!=e.checkExtension||null!=e.checkExtensionDimmed)&&!t.checkControlCondition(e.condition,e.checkExtension,e.checkExtensionDimmed):null!=e.checkExtensionPopup||(null!=e.condition||null!=e.checkExtension||null!=e.checkExtensionDimmed)&&!t.checkControlCondition(e.condition,e.checkExtension,e.checkExtensionDimmed)},shouldShowTogglesetCover:function(e){var t=this;return!(t.sbyIsPro&&!t.sbyLicenseNoticeActive||null==e.checkExtension||t.checkExtensionActive(e.checkExtension))},togglesetExtPopup:function(e){this.viewsActive.extensionsPopupElement=e.checkExtension},regenerateLayout:function(e){var t=this;["layout","carouselarrows","carouselpag","carouselautoplay","carouseltime","carouselloop","carouselrows","cols","colstablet","colsmobile","imagepadding"].includes(e)&&setTimeout((function(){t.setShortcodeGlobalSettings(!0)}),200)},backToAllFeeds:function(){var e=this;JSON.stringify(e.customizerFeedDataInitial)===JSON.stringify(e.customizerFeedData)?window.location=e.builderUrl:e.openDialogBox("backAllToFeed")},openDialogBox:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=this,n=o.dialogBoxPopupScreen[e].heading,i=o.dialogBoxPopupScreen[e].description,s=o.dialogBoxPopupScreen[e].customButtons;"deleteSingleFeed"===e&&(o.feedToDelete=t,n=n.replace("#",o.feedToDelete.feed_name)),o.dialogBox={active:!0,type:e,heading:n,description:i,customButtons:s},window.event.stopPropagation()},confirmDialogAction:function(){var e=this;switch(e.dialogBox.type){case"deleteSingleFeed":e.feedActionDelete([e.feedToDelete.id]);break;case"deleteMultipleFeeds":e.feedActionDelete(e.feedsSelected);break;case"backAllToFeed":window.location=e.builderUrl}},feedActionDelete:function(e){var t=this,o={action:"sby_feed_saver_manager_delete_feeds",feeds_ids:e};t.ajaxPost(o,(function(e){var o=e.data;t.feedsList=Object.values(Object.assign({},o)),t.feedsSelected=[]}))},showColorPickerPospup:function(e){this.customizerScreens.activeColorPicker=e},hideColorPickerPopup:function(){this.customizerScreens.activeColorPicker=null},getPaletteClass:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=this,o=t.customizerFeedData.settings.colorpalette;if(t.checkNotEmpty(o)){var n="custom"===o?"_"+t.customizerFeedData.feed_info.id:"";return console.log("inherit"!==o?" sby"+e+"_palette_"+o+n:""),"inherit"!==o?" sby"+e+"_palette_"+o+n:""}return""},checkNotEmpty:function(e){return null!=e&&""!=e.replace(/ /gi,"")},getFeedContainerClasses:function(){var e=this;return["sb_youtube","sby_layout_"+e.customizerFeedData.settings.layout,"sby_col_"+e.getColSettings(),"sby_mob_col_"+e.getMobColSettings(),"sby_palette_"+e.getColorPaletteClass()].join(" ")},getColorPaletteClass:function(){var e=this;return"custom"==e.customizerFeedData.settings.colorpalette?e.customizerFeedData.settings.colorpalette+"_"+e.customizerFeedData.feed_info.id:e.customizerFeedData.settings.colorpalette},getColSettings:function(){var e=this;return"list"==e.customizerFeedData.settings.layout||"mobile"===e.customizerScreens.previewScreen?0:e.customizerFeedData.settings.cols?e.customizerFeedData.settings.cols:0},getMobColSettings:function(){var e=this;return"list"==e.customizerFeedData.settings.layout?0:e.customizerFeedData.settings.colsmobile?e.customizerFeedData.settings.colsmobile:0},checkShouldShowSubscribers:function(){return 1==this.customizerFeedData.settings.showsubscribe?"shown":""},valueIsEnabled:function(e){return 1==e||1==e||"true"==e||"on"==e},changeSwitcherSettingValue:function(e,t,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4?arguments[4]:void 0,s=this;console.log(i),Object.keys(s.inActiveExtensions).includes(e)&&(s.viewsActive.extensionsPopupElement=s.inActiveExtensions[e]),s.customizerFeedData.settings[e]=s.customizerFeedData.settings[e]==t?o:t,!1!==n&&s.customizerControlAjaxAction(n),s.regenerateLayout(e)},jsonParse:function(e){try{return JSON.parse(e)}catch(e){return!1}},getCustomHeaderText:function(){return this.customizerFeedData.settings.customheadertext},shouldShowStandardHeader:function(){return this.customizerFeedData.settings.showheader&&"standard"===this.customizerFeedData.settings.headerstyle},shouldShowTextHeader:function(){return this.customizerFeedData.settings.showheader&&"text"===this.customizerFeedData.settings.headerstyle},getFlagsAttr:function(){var e=this,t=[];return e.customizerFeedData.settings.disable_resize&&t.push("resizeDisable"),e.customizerFeedData.settings.favor_local&&t.push("favorLocal"),e.customizerFeedData.settings.disable_js_image_loading&&t.push("imageLoadDisable"),e.customizerFeedData.settings.ajax_post_load&&t.push("ajaxPostLoad"),"3:4"===e.customizerFeedData.settings.playerratio&&t.push("narrowPlayer"),e.customizerFeedData.settings.disablecdn&&t.push("disablecdn"),t.toString()},shouldShowPlayer:function(){if("gallery"==this.customizerFeedData.settings.layout)return!0},switchToVideosSection:function(){var e=this;e.customizerScreens.parentActiveSection=null,e.customizerScreens.parentActiveSectionData=null,e.customizerScreens.activeSection="customize_videos",e.customizerScreens.activeSectionData=e.customizerSidebarBuilder.customize.sections.customize_videos},setShortcodeGlobalSettings:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this,o=jQuery("html").find(".sb_youtube"),n=t.jsonParse(o.attr("data-options")),i=t.customizerFeedData.settings;if(o.length){if("carousel"===i.layout){var s=t.valueIsEnabled(i.carouselarrows),r=t.valueIsEnabled(i.carouselpag),c=t.valueIsEnabled(i.carouselautoplay),a=!!c&&parseInt(i.carouseltime),l=!t.checkNotEmpty(i.carouselloop)||"rewind"===i.carouselloop,u=i.carouselrows?Math.min(parseInt(i.carouselrows),2):1;delete n.gallery,delete n.masonry,delete n.grid,n.carousel=[s,r,c,a,l,u]}else"grid"==i.layout?(delete n.gallery,delete n.masonry):"masonry"==i.layout?(delete n.gallery,delete n.grid):"gallery"==i.layout&&(delete n.masonry,delete n.grid);"carousel"!==i.layout&&delete n.carousel,o.attr("data-options",JSON.stringify(n)),void 0!==window.sby_init&&e&&window.sby_init()}},showManualConnect:function(){this.shouldShowManualConnect=!0,this.shouldShowFeedAPIBackBtn=!0},showFeedSourceManualConnect:function(){this.viewsActive.accountAPIPopup=!0,this.shouldShowManualConnect=!0},showAPIConnectForm:function(){this.shouldShowFeedAPIForm=!0,this.shouldShowFeedAPIBackBtn=!0},showYTAccountLimitations:function(){this.showShowYTAccountWarning=!0},backToApiPopup:function(){var e=this;e.showShowYTAccountWarning=!1,e.shouldShowManualConnect=!1,e.shouldShowFeedAPIForm=!1,e.shouldShowFeedAPIBackBtn=!1},hideAPIConnectForm:function(){var e=this;e.shouldShowManualConnect=!1,e.shouldShowFeedAPIForm=!1,e.shouldShowFeedAPIBackBtn=!1},addAPIKey:function(){if((e=this).selectedFeedModel.apiKey){var e,t={action:"sby_add_api_key",api:(e=this).selectedFeedModel.apiKey};e.apiKeyBtnLoader=!0,e.ajaxPost(t,(function(t){t.data,e.apiKeyBtnLoader=!1,e.apiKeyError=!1,e.apiKeyStatus=!0,e.activateView("accountAPIPopup")}))}else e.apiKeyError=!0},addAccessToken:function(){if((e=this).selectedFeedModel.accessToken){var e,t={action:"sby_manual_access_token",sby_access_token:(e=this).selectedFeedModel.accessToken};e.apiKeyBtnLoader=!0,e.ajaxPost(t,(function(t){t.data,e.apiKeyBtnLoader=!1,e.accessTokenError=!1,e.apiKeyStatus=!0,e.activateView("accountAPIPopup")}))}else e.accessTokenError=!0},submitNewFeed:function(){var e=this,t={action:"sby_feed_saver_manager_builder_update",feedtype:e.selectedFeed,feedtemplate:e.selectedFeedTemplate,selectedFeedModel:e.selectedFeedModel,new_insert:"true"};e.fullScreenLoader=!0,e.ajaxPost(t,(function(t){var o=t.data;o.feed_id&&o.success&&(window.location=e.builderUrl+"&feed_id="+o.feed_id+e.sw_feed_params())}))},fieldCustomClickAction:function(e){"clearCommentCache"===e&&this.clearCommentCache()},clearCommentCache:function(){var e=this;e.loadingBar=!0,e.ajaxPost({action:"sby_feed_saver_clear_comments_cache"},(function(t){"success"===t.data?e.processNotification("commentCacheCleared"):e.processNotification("unkownError")}))}}),e(SB_Customizer)}))})(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFtQixDQWlCMUIsRUFPQUMsY0FBZ0IsV0FDZixJQUFJaEosRUFBTzlELEtBQ1YrTSxFQUFjLENBQ2I3RixPQUFTLHdDQUNUOEYsU0FBV2xKLEVBQUttSixhQUNoQkMsYUFBZXBKLEVBQUtxSixxQkFDcEIvSyxrQkFBb0IwQixFQUFLMUIsa0JBQ3pCZ0wsV0FBYSxRQUVmdEosRUFBS3VKLGtCQUFtQixFQUN4QnZKLEVBQUtxRCxTQUFTNEYsR0FBYSxTQUFTM0YsR0FDbkMsSUFBSUMsRUFBT0QsRUFBS0MsS0FDYkEsRUFBS2lHLFNBQVdqRyxFQUFLa0csVUFDdkIzSCxPQUFPQyxTQUFXL0IsRUFBS2dDLFdBQWEsWUFBY3VCLEVBQUtpRyxRQUFVeEosRUFBSzBKLGlCQUV4RSxHQUNELEVBT0FDLHVCQUF5QixTQUFVQyxHQUc1QixzQkFERUEsR0FERzFOLEtBR0oyTixtQkFHUixFQU9BQSxrQkFBb0IsV0FDbkIsSUFBSTdKLEVBQU85RCxLQUNYOEQsRUFBSzhKLFlBQWEsRUFJbEI5SixFQUFLcUQsU0FIdUIsQ0FDM0JELE9BQVMsd0NBRTJCLFNBQVNFLEdBRWhDLFlBREZBLEVBQUtDLEtBRWZ2RCxFQUFLK0osb0JBQW9CLHVCQUV6Qi9KLEVBQUsrSixvQkFBb0IsY0FFM0IsR0FDRCxJQUVEck0sRUFBUUgsY0FDVCxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS92YWxpZGF0ZU5hbWVzcGFjZS5qcyIsIndlYnBhY2s6Ly95b3V0dWJlLWZlZWQtcHJvLy4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvaG9va3MvYnVpbGQtbW9kdWxlL3ZhbGlkYXRlSG9va05hbWUuanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVBZGRIb29rLmpzIiwid2VicGFjazovL3lvdXR1YmUtZmVlZC1wcm8vLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9ob29rcy9idWlsZC1tb2R1bGUvY3JlYXRlUmVtb3ZlSG9vay5qcyIsIndlYnBhY2s6Ly95b3V0dWJlLWZlZWQtcHJvLy4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvaG9va3MvYnVpbGQtbW9kdWxlL2NyZWF0ZUhhc0hvb2suanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVSdW5Ib29rLmpzIiwid2VicGFjazovL3lvdXR1YmUtZmVlZC1wcm8vLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9ob29rcy9idWlsZC1tb2R1bGUvY3JlYXRlQ3VycmVudEhvb2suanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVEb2luZ0hvb2suanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9jcmVhdGVEaWRIb29rLmpzIiwid2VicGFjazovL3lvdXR1YmUtZmVlZC1wcm8vLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9ob29rcy9idWlsZC1tb2R1bGUvY3JlYXRlSG9va3MuanMiLCJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2hvb2tzL2J1aWxkLW1vZHVsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly95b3V0dWJlLWZlZWQtcHJvLy4vanMvY3VzdG9taXplci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhbGlkYXRlIGEgbmFtZXNwYWNlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgdG8gdmFsaWRhdGUgLSBzaG91bGQgdGFrZSB0aGUgZm9ybVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBgdmVuZG9yL3BsdWdpbi9mdW5jdGlvbmAuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgbmFtZXNwYWNlIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU5hbWVzcGFjZShuYW1lc3BhY2UpIHtcbiAgaWYgKCdzdHJpbmcnICE9PSB0eXBlb2YgbmFtZXNwYWNlIHx8ICcnID09PSBuYW1lc3BhY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBuYW1lc3BhY2UgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghL15bYS16QS1aXVthLXpBLVowLTlfLlxcLVxcL10qJC8udGVzdChuYW1lc3BhY2UpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKCdUaGUgbmFtZXNwYWNlIGNhbiBvbmx5IGNvbnRhaW4gbnVtYmVycywgbGV0dGVycywgZGFzaGVzLCBwZXJpb2RzLCB1bmRlcnNjb3JlcyBhbmQgc2xhc2hlcy4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZU5hbWVzcGFjZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbGlkYXRlTmFtZXNwYWNlLmpzLm1hcCIsIi8qKlxuICogVmFsaWRhdGUgYSBob29rTmFtZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lIFRoZSBob29rIG5hbWUgdG8gdmFsaWRhdGUuIFNob3VsZCBiZSBhIG5vbiBlbXB0eSBzdHJpbmcgY29udGFpbmluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgbnVtYmVycywgbGV0dGVycywgZGFzaGVzLCBwZXJpb2RzIGFuZCB1bmRlcnNjb3Jlcy4gQWxzbyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaG9vayBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoIGBfX2AuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaG9vayBuYW1lIGlzIHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUhvb2tOYW1lKGhvb2tOYW1lKSB7XG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGhvb2tOYW1lIHx8ICcnID09PSBob29rTmFtZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcignVGhlIGhvb2sgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZy4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKC9eX18vLnRlc3QoaG9va05hbWUpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKCdUaGUgaG9vayBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoIGBfX2AuJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghL15bYS16QS1aXVthLXpBLVowLTlfLi1dKiQvLnRlc3QoaG9va05hbWUpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmVycm9yKCdUaGUgaG9vayBuYW1lIGNhbiBvbmx5IGNvbnRhaW4gbnVtYmVycywgbGV0dGVycywgZGFzaGVzLCBwZXJpb2RzIGFuZCB1bmRlcnNjb3Jlcy4nKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZUhvb2tOYW1lO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsaWRhdGVIb29rTmFtZS5qcy5tYXAiLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgdmFsaWRhdGVOYW1lc3BhY2UgZnJvbSAnLi92YWxpZGF0ZU5hbWVzcGFjZS5qcyc7XG5pbXBvcnQgdmFsaWRhdGVIb29rTmFtZSBmcm9tICcuL3ZhbGlkYXRlSG9va05hbWUuanMnO1xuXG4vKipcbiAqIEBjYWxsYmFjayBBZGRIb29rXG4gKlxuICogQWRkcyB0aGUgaG9vayB0byB0aGUgYXBwcm9wcmlhdGUgaG9va3MgY29udGFpbmVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSAgICAgICAgICAgICAgIGhvb2tOYW1lICAgICAgTmFtZSBvZiBob29rIHRvIGFkZFxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgICAgICAgbmFtZXNwYWNlICAgICBUaGUgdW5pcXVlIG5hbWVzcGFjZSBpZGVudGlmeWluZyB0aGUgY2FsbGJhY2sgaW4gdGhlIGZvcm0gYHZlbmRvci9wbHVnaW4vZnVuY3Rpb25gLlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5DYWxsYmFja30gY2FsbGJhY2sgICAgICBGdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGhvb2sgaXMgcnVuXG4gKiBAcGFyYW0ge251bWJlcn0gICAgICAgICAgICAgICBbcHJpb3JpdHk9MTBdIFByaW9yaXR5IG9mIHRoaXMgaG9va1xuICovXG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGludm9rZWQsIHdpbGwgYWRkIGEgaG9vay5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLkhvb2tzfSAgICBob29rcyAgICBIb29rcyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuU3RvcmVLZXl9IHN0b3JlS2V5XG4gKlxuICogQHJldHVybiB7QWRkSG9va30gRnVuY3Rpb24gdGhhdCBhZGRzIGEgbmV3IGhvb2suXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFkZEhvb2soaG9va3MsIHN0b3JlS2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBhZGRIb29rKGhvb2tOYW1lLCBuYW1lc3BhY2UsIGNhbGxiYWNrLCBwcmlvcml0eSA9IDEwKSB7XG4gICAgY29uc3QgaG9va3NTdG9yZSA9IGhvb2tzW3N0b3JlS2V5XTtcbiAgICBpZiAoIXZhbGlkYXRlSG9va05hbWUoaG9va05hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdmFsaWRhdGVOYW1lc3BhY2UobmFtZXNwYWNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJ2Z1bmN0aW9uJyAhPT0gdHlwZW9mIGNhbGxiYWNrKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcignVGhlIGhvb2sgY2FsbGJhY2sgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG51bWVyaWMgcHJpb3JpdHlcbiAgICBpZiAoJ251bWJlcicgIT09IHR5cGVvZiBwcmlvcml0eSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0lmIHNwZWNpZmllZCwgdGhlIGhvb2sgcHJpb3JpdHkgbXVzdCBiZSBhIG51bWJlci4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGFuZGxlciA9IHtcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgcHJpb3JpdHksXG4gICAgICBuYW1lc3BhY2VcbiAgICB9O1xuICAgIGlmIChob29rc1N0b3JlW2hvb2tOYW1lXSkge1xuICAgICAgLy8gRmluZCB0aGUgY29ycmVjdCBpbnNlcnQgaW5kZXggb2YgdGhlIG5ldyBob29rLlxuICAgICAgY29uc3QgaGFuZGxlcnMgPSBob29rc1N0b3JlW2hvb2tOYW1lXS5oYW5kbGVycztcblxuICAgICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgICBsZXQgaTtcbiAgICAgIGZvciAoaSA9IGhhbmRsZXJzLmxlbmd0aDsgaSA+IDA7IGktLSkge1xuICAgICAgICBpZiAocHJpb3JpdHkgPj0gaGFuZGxlcnNbaSAtIDFdLnByaW9yaXR5KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBoYW5kbGVycy5sZW5ndGgpIHtcbiAgICAgICAgLy8gSWYgYXBwZW5kLCBvcGVyYXRlIHZpYSBkaXJlY3QgYXNzaWdubWVudC5cbiAgICAgICAgaGFuZGxlcnNbaV0gPSBoYW5kbGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpbnNlcnQgYmVmb3JlIGluZGV4IHZpYSBzcGxpY2UuXG4gICAgICAgIGhhbmRsZXJzLnNwbGljZShpLCAwLCBoYW5kbGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgbWF5IGFsc28gYmUgY3VycmVudGx5IGV4ZWN1dGluZyB0aGlzIGhvb2suICBJZiB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdlJ3JlIGFkZGluZyB3b3VsZCBjb21lIGFmdGVyIHRoZSBjdXJyZW50IGNhbGxiYWNrLCB0aGVyZSdzIG5vXG4gICAgICAvLyBwcm9ibGVtOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgZXhlY3V0aW9uIGluZGV4IG9mXG4gICAgICAvLyBhbnkgb3RoZXIgcnVucyBieSAxIHRvIGFjY291bnQgZm9yIHRoZSBhZGRlZCBlbGVtZW50LlxuICAgICAgaG9va3NTdG9yZS5fX2N1cnJlbnQuZm9yRWFjaChob29rSW5mbyA9PiB7XG4gICAgICAgIGlmIChob29rSW5mby5uYW1lID09PSBob29rTmFtZSAmJiBob29rSW5mby5jdXJyZW50SW5kZXggPj0gaSkge1xuICAgICAgICAgIGhvb2tJbmZvLmN1cnJlbnRJbmRleCsrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBvZiBpdHMgdHlwZS5cbiAgICAgIGhvb2tzU3RvcmVbaG9va05hbWVdID0ge1xuICAgICAgICBoYW5kbGVyczogW2hhbmRsZXJdLFxuICAgICAgICBydW5zOiAwXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoaG9va05hbWUgIT09ICdob29rQWRkZWQnKSB7XG4gICAgICBob29rcy5kb0FjdGlvbignaG9va0FkZGVkJywgaG9va05hbWUsIG5hbWVzcGFjZSwgY2FsbGJhY2ssIHByaW9yaXR5KTtcbiAgICB9XG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVBZGRIb29rO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlQWRkSG9vay5qcy5tYXAiLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgdmFsaWRhdGVOYW1lc3BhY2UgZnJvbSAnLi92YWxpZGF0ZU5hbWVzcGFjZS5qcyc7XG5pbXBvcnQgdmFsaWRhdGVIb29rTmFtZSBmcm9tICcuL3ZhbGlkYXRlSG9va05hbWUuanMnO1xuXG4vKipcbiAqIEBjYWxsYmFjayBSZW1vdmVIb29rXG4gKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgKG9yIGFsbCBjYWxsYmFja3MpIGZyb20gdGhlIGhvb2sgd2l0aCBhIGdpdmVuIGhvb2tOYW1lXG4gKiBhbmQgbmFtZXNwYWNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBob29rTmFtZSAgVGhlIG5hbWUgb2YgdGhlIGhvb2sgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzcGFjZSBUaGUgdW5pcXVlIG5hbWVzcGFjZSBpZGVudGlmeWluZyB0aGUgY2FsbGJhY2sgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gYHZlbmRvci9wbHVnaW4vZnVuY3Rpb25gLlxuICpcbiAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gVGhlIG51bWJlciBvZiBjYWxsYmFja3MgcmVtb3ZlZC5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBpbnZva2VkLCB3aWxsIHJlbW92ZSBhIHNwZWNpZmllZCBob29rIG9yIGFsbFxuICogaG9va3MgYnkgdGhlIGdpdmVuIG5hbWUuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5Ib29rc30gICAgaG9va3MgICAgICAgICAgICAgSG9va3MgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLlN0b3JlS2V5fSBzdG9yZUtleVxuICogQHBhcmFtIHtib29sZWFufSAgICAgICAgICAgICAgW3JlbW92ZUFsbD1mYWxzZV0gV2hldGhlciB0byByZW1vdmUgYWxsIGNhbGxiYWNrcyBmb3IgYSBob29rTmFtZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgcmVnYXJkIHRvIG5hbWVzcGFjZS4gVXNlZCB0byBjcmVhdGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGByZW1vdmVBbGwqYCBmdW5jdGlvbnMuXG4gKlxuICogQHJldHVybiB7UmVtb3ZlSG9va30gRnVuY3Rpb24gdGhhdCByZW1vdmVzIGhvb2tzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZW1vdmVIb29rKGhvb2tzLCBzdG9yZUtleSwgcmVtb3ZlQWxsID0gZmFsc2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlbW92ZUhvb2soaG9va05hbWUsIG5hbWVzcGFjZSkge1xuICAgIGNvbnN0IGhvb2tzU3RvcmUgPSBob29rc1tzdG9yZUtleV07XG4gICAgaWYgKCF2YWxpZGF0ZUhvb2tOYW1lKGhvb2tOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXJlbW92ZUFsbCAmJiAhdmFsaWRhdGVOYW1lc3BhY2UobmFtZXNwYWNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEJhaWwgaWYgbm8gaG9va3MgZXhpc3QgYnkgdGhpcyBuYW1lLlxuICAgIGlmICghaG9va3NTdG9yZVtob29rTmFtZV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBsZXQgaGFuZGxlcnNSZW1vdmVkID0gMDtcbiAgICBpZiAocmVtb3ZlQWxsKSB7XG4gICAgICBoYW5kbGVyc1JlbW92ZWQgPSBob29rc1N0b3JlW2hvb2tOYW1lXS5oYW5kbGVycy5sZW5ndGg7XG4gICAgICBob29rc1N0b3JlW2hvb2tOYW1lXSA9IHtcbiAgICAgICAgcnVuczogaG9va3NTdG9yZVtob29rTmFtZV0ucnVucyxcbiAgICAgICAgaGFuZGxlcnM6IFtdXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUcnkgdG8gZmluZCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIHRvIHJlbW92ZS5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gaG9va3NTdG9yZVtob29rTmFtZV0uaGFuZGxlcnM7XG4gICAgICBmb3IgKGxldCBpID0gaGFuZGxlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLm5hbWVzcGFjZSA9PT0gbmFtZXNwYWNlKSB7XG4gICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGhhbmRsZXJzUmVtb3ZlZCsrO1xuICAgICAgICAgIC8vIFRoaXMgY2FsbGJhY2sgbWF5IGFsc28gYmUgcGFydCBvZiBhIGhvb2sgdGhhdCBpc1xuICAgICAgICAgIC8vIGN1cnJlbnRseSBleGVjdXRpbmcuICBJZiB0aGUgY2FsbGJhY2sgd2UncmUgcmVtb3ZpbmdcbiAgICAgICAgICAvLyBjb21lcyBhZnRlciB0aGUgY3VycmVudCBjYWxsYmFjaywgdGhlcmUncyBubyBwcm9ibGVtO1xuICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGRlY3JlYXNlIHRoZSBleGVjdXRpb24gaW5kZXggb2YgYW55XG4gICAgICAgICAgLy8gb3RoZXIgcnVucyBieSAxIHRvIGFjY291bnQgZm9yIHRoZSByZW1vdmVkIGVsZW1lbnQuXG4gICAgICAgICAgaG9va3NTdG9yZS5fX2N1cnJlbnQuZm9yRWFjaChob29rSW5mbyA9PiB7XG4gICAgICAgICAgICBpZiAoaG9va0luZm8ubmFtZSA9PT0gaG9va05hbWUgJiYgaG9va0luZm8uY3VycmVudEluZGV4ID49IGkpIHtcbiAgICAgICAgICAgICAgaG9va0luZm8uY3VycmVudEluZGV4LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhvb2tOYW1lICE9PSAnaG9va1JlbW92ZWQnKSB7XG4gICAgICBob29rcy5kb0FjdGlvbignaG9va1JlbW92ZWQnLCBob29rTmFtZSwgbmFtZXNwYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhbmRsZXJzUmVtb3ZlZDtcbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJlbW92ZUhvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVSZW1vdmVIb29rLmpzLm1hcCIsIi8qKlxuICogQGNhbGxiYWNrIEhhc0hvb2tcbiAqXG4gKiBSZXR1cm5zIHdoZXRoZXIgYW55IGhhbmRsZXJzIGFyZSBhdHRhY2hlZCBmb3IgdGhlIGdpdmVuIGhvb2tOYW1lIGFuZCBvcHRpb25hbCBuYW1lc3BhY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lICAgIFRoZSBuYW1lIG9mIHRoZSBob29rIHRvIGNoZWNrIGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZXNwYWNlXSBPcHRpb25hbC4gVGhlIHVuaXF1ZSBuYW1lc3BhY2UgaWRlbnRpZnlpbmcgdGhlIGNhbGxiYWNrXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGZvcm0gYHZlbmRvci9wbHVnaW4vZnVuY3Rpb25gLlxuICpcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFdoZXRoZXIgdGhlcmUgYXJlIGhhbmRsZXJzIHRoYXQgYXJlIGF0dGFjaGVkIHRvIHRoZSBnaXZlbiBob29rLlxuICovXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBpbnZva2VkLCB3aWxsIHJldHVybiB3aGV0aGVyIGFueSBoYW5kbGVycyBhcmVcbiAqIGF0dGFjaGVkIHRvIGEgcGFydGljdWxhciBob29rLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuSG9va3N9ICAgIGhvb2tzICAgIEhvb2tzIGluc3RhbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5TdG9yZUtleX0gc3RvcmVLZXlcbiAqXG4gKiBAcmV0dXJuIHtIYXNIb29rfSBGdW5jdGlvbiB0aGF0IHJldHVybnMgd2hldGhlciBhbnkgaGFuZGxlcnMgYXJlXG4gKiAgICAgICAgICAgICAgICAgICBhdHRhY2hlZCB0byBhIHBhcnRpY3VsYXIgaG9vayBhbmQgb3B0aW9uYWwgbmFtZXNwYWNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVIYXNIb29rKGhvb2tzLCBzdG9yZUtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gaGFzSG9vayhob29rTmFtZSwgbmFtZXNwYWNlKSB7XG4gICAgY29uc3QgaG9va3NTdG9yZSA9IGhvb2tzW3N0b3JlS2V5XTtcblxuICAgIC8vIFVzZSB0aGUgbmFtZXNwYWNlIGlmIHByb3ZpZGVkLlxuICAgIGlmICgndW5kZWZpbmVkJyAhPT0gdHlwZW9mIG5hbWVzcGFjZSkge1xuICAgICAgcmV0dXJuIGhvb2tOYW1lIGluIGhvb2tzU3RvcmUgJiYgaG9va3NTdG9yZVtob29rTmFtZV0uaGFuZGxlcnMuc29tZShob29rID0+IGhvb2submFtZXNwYWNlID09PSBuYW1lc3BhY2UpO1xuICAgIH1cbiAgICByZXR1cm4gaG9va05hbWUgaW4gaG9va3NTdG9yZTtcbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhhc0hvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVIYXNIb29rLmpzLm1hcCIsIi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGludm9rZWQsIHdpbGwgZXhlY3V0ZSBhbGwgY2FsbGJhY2tzXG4gKiByZWdpc3RlcmVkIHRvIGEgaG9vayBvZiB0aGUgc3BlY2lmaWVkIHR5cGUsIG9wdGlvbmFsbHkgcmV0dXJuaW5nIHRoZSBmaW5hbFxuICogdmFsdWUgb2YgdGhlIGNhbGwgY2hhaW4uXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5Ib29rc30gICAgaG9va3MgICAgICAgICAgICAgICAgICBIb29rcyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuU3RvcmVLZXl9IHN0b3JlS2V5XG4gKiBAcGFyYW0ge2Jvb2xlYW59ICAgICAgICAgICAgICBbcmV0dXJuRmlyc3RBcmc9ZmFsc2VdIFdoZXRoZXIgZWFjaCBob29rIGNhbGxiYWNrIGlzIGV4cGVjdGVkIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdHMgZmlyc3QgYXJndW1lbnQuXG4gKlxuICogQHJldHVybiB7KGhvb2tOYW1lOnN0cmluZywgLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmRlZmluZWR8dW5rbm93bn0gRnVuY3Rpb24gdGhhdCBydW5zIGhvb2sgY2FsbGJhY2tzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSdW5Ib29rKGhvb2tzLCBzdG9yZUtleSwgcmV0dXJuRmlyc3RBcmcgPSBmYWxzZSkge1xuICByZXR1cm4gZnVuY3Rpb24gcnVuSG9va3MoaG9va05hbWUsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBob29rc1N0b3JlID0gaG9va3Nbc3RvcmVLZXldO1xuICAgIGlmICghaG9va3NTdG9yZVtob29rTmFtZV0pIHtcbiAgICAgIGhvb2tzU3RvcmVbaG9va05hbWVdID0ge1xuICAgICAgICBoYW5kbGVyczogW10sXG4gICAgICAgIHJ1bnM6IDBcbiAgICAgIH07XG4gICAgfVxuICAgIGhvb2tzU3RvcmVbaG9va05hbWVdLnJ1bnMrKztcbiAgICBjb25zdCBoYW5kbGVycyA9IGhvb2tzU3RvcmVbaG9va05hbWVdLmhhbmRsZXJzO1xuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGlzIHN0cmlwcGVkIGZyb20gcHJvZHVjdGlvbiBidWlsZHMuXG4gICAgaWYgKCdwcm9kdWN0aW9uJyAhPT0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYpIHtcbiAgICAgIC8vIEhhbmRsZSBhbnkgJ2FsbCcgaG9va3MgcmVnaXN0ZXJlZC5cbiAgICAgIGlmICgnaG9va0FkZGVkJyAhPT0gaG9va05hbWUgJiYgaG9va3NTdG9yZS5hbGwpIHtcbiAgICAgICAgaGFuZGxlcnMucHVzaCguLi5ob29rc1N0b3JlLmFsbC5oYW5kbGVycyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJldHVybkZpcnN0QXJnID8gYXJnc1swXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgaG9va0luZm8gPSB7XG4gICAgICBuYW1lOiBob29rTmFtZSxcbiAgICAgIGN1cnJlbnRJbmRleDogMFxuICAgIH07XG4gICAgaG9va3NTdG9yZS5fX2N1cnJlbnQucHVzaChob29rSW5mbyk7XG4gICAgd2hpbGUgKGhvb2tJbmZvLmN1cnJlbnRJbmRleCA8IGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzW2hvb2tJbmZvLmN1cnJlbnRJbmRleF07XG4gICAgICBjb25zdCByZXN1bHQgPSBoYW5kbGVyLmNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgaWYgKHJldHVybkZpcnN0QXJnKSB7XG4gICAgICAgIGFyZ3NbMF0gPSByZXN1bHQ7XG4gICAgICB9XG4gICAgICBob29rSW5mby5jdXJyZW50SW5kZXgrKztcbiAgICB9XG4gICAgaG9va3NTdG9yZS5fX2N1cnJlbnQucG9wKCk7XG4gICAgaWYgKHJldHVybkZpcnN0QXJnKSB7XG4gICAgICByZXR1cm4gYXJnc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVJ1bkhvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVSdW5Ib29rLmpzLm1hcCIsIi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoLCB3aGVuIGludm9rZWQsIHdpbGwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZVxuICogY3VycmVudGx5IHJ1bm5pbmcgaG9vaywgb3IgYG51bGxgIGlmIG5vIGhvb2sgb2YgdGhlIGdpdmVuIHR5cGUgaXMgY3VycmVudGx5XG4gKiBydW5uaW5nLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuSG9va3N9ICAgIGhvb2tzICAgIEhvb2tzIGluc3RhbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5TdG9yZUtleX0gc3RvcmVLZXlcbiAqXG4gKiBAcmV0dXJuIHsoKSA9PiBzdHJpbmcgfCBudWxsfSBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgaG9vayBuYW1lIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN1cnJlbnRIb29rKGhvb2tzLCBzdG9yZUtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY3VycmVudEhvb2soKSB7XG4gICAgdmFyIF9ob29rc1N0b3JlJF9fY3VycmVudDtcbiAgICBjb25zdCBob29rc1N0b3JlID0gaG9va3Nbc3RvcmVLZXldO1xuICAgIHJldHVybiAoX2hvb2tzU3RvcmUkX19jdXJyZW50ID0gaG9va3NTdG9yZS5fX2N1cnJlbnRbaG9va3NTdG9yZS5fX2N1cnJlbnQubGVuZ3RoIC0gMV0/Lm5hbWUpICE9PSBudWxsICYmIF9ob29rc1N0b3JlJF9fY3VycmVudCAhPT0gdm9pZCAwID8gX2hvb2tzU3RvcmUkX19jdXJyZW50IDogbnVsbDtcbiAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUN1cnJlbnRIb29rO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlQ3VycmVudEhvb2suanMubWFwIiwiLyoqXG4gKiBAY2FsbGJhY2sgRG9pbmdIb29rXG4gKiBSZXR1cm5zIHdoZXRoZXIgYSBob29rIGlzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW2hvb2tOYW1lXSBUaGUgbmFtZSBvZiB0aGUgaG9vayB0byBjaGVjayBmb3IuICBJZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb21pdHRlZCwgd2lsbCBjaGVjayBmb3IgYW55IGhvb2sgYmVpbmcgZXhlY3V0ZWQuXG4gKlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaG9vayBpcyBiZWluZyBleGVjdXRlZC5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCwgd2hlbiBpbnZva2VkLCB3aWxsIHJldHVybiB3aGV0aGVyIGEgaG9vayBpc1xuICogY3VycmVudGx5IGJlaW5nIGV4ZWN1dGVkLlxuICpcbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuSG9va3N9ICAgIGhvb2tzICAgIEhvb2tzIGluc3RhbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoJy4nKS5TdG9yZUtleX0gc3RvcmVLZXlcbiAqXG4gKiBAcmV0dXJuIHtEb2luZ0hvb2t9IEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB3aGV0aGVyIGEgaG9vayBpcyBjdXJyZW50bHlcbiAqICAgICAgICAgICAgICAgICAgICAgYmVpbmcgZXhlY3V0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURvaW5nSG9vayhob29rcywgc3RvcmVLZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRvaW5nSG9vayhob29rTmFtZSkge1xuICAgIGNvbnN0IGhvb2tzU3RvcmUgPSBob29rc1tzdG9yZUtleV07XG5cbiAgICAvLyBJZiB0aGUgaG9va05hbWUgd2FzIG5vdCBwYXNzZWQsIGNoZWNrIGZvciBhbnkgY3VycmVudCBob29rLlxuICAgIGlmICgndW5kZWZpbmVkJyA9PT0gdHlwZW9mIGhvb2tOYW1lKSB7XG4gICAgICByZXR1cm4gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBob29rc1N0b3JlLl9fY3VycmVudFswXTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhlIF9fY3VycmVudCBob29rLlxuICAgIHJldHVybiBob29rc1N0b3JlLl9fY3VycmVudFswXSA/IGhvb2tOYW1lID09PSBob29rc1N0b3JlLl9fY3VycmVudFswXS5uYW1lIDogZmFsc2U7XG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVEb2luZ0hvb2s7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVEb2luZ0hvb2suanMubWFwIiwiLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IHZhbGlkYXRlSG9va05hbWUgZnJvbSAnLi92YWxpZGF0ZUhvb2tOYW1lLmpzJztcblxuLyoqXG4gKiBAY2FsbGJhY2sgRGlkSG9va1xuICpcbiAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lcyBhbiBhY3Rpb24gaGFzIGJlZW4gZmlyZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lIFRoZSBob29rIG5hbWUgdG8gY2hlY2suXG4gKlxuICogQHJldHVybiB7bnVtYmVyIHwgdW5kZWZpbmVkfSBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBob29rIGhhcyBydW4uXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2gsIHdoZW4gaW52b2tlZCwgd2lsbCByZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lcyBhXG4gKiBob29rIGhhcyBiZWVuIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLicpLkhvb2tzfSAgICBob29rcyAgICBIb29rcyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuJykuU3RvcmVLZXl9IHN0b3JlS2V5XG4gKlxuICogQHJldHVybiB7RGlkSG9va30gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgaG9vaydzIGNhbGwgY291bnQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpZEhvb2soaG9va3MsIHN0b3JlS2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBkaWRIb29rKGhvb2tOYW1lKSB7XG4gICAgY29uc3QgaG9va3NTdG9yZSA9IGhvb2tzW3N0b3JlS2V5XTtcbiAgICBpZiAoIXZhbGlkYXRlSG9va05hbWUoaG9va05hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBob29rc1N0b3JlW2hvb2tOYW1lXSAmJiBob29rc1N0b3JlW2hvb2tOYW1lXS5ydW5zID8gaG9va3NTdG9yZVtob29rTmFtZV0ucnVucyA6IDA7XG4gIH07XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVEaWRIb29rO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlRGlkSG9vay5qcy5tYXAiLCIvKipcbiAqIEludGVybmFsIGRlcGVuZGVuY2llc1xuICovXG5pbXBvcnQgY3JlYXRlQWRkSG9vayBmcm9tICcuL2NyZWF0ZUFkZEhvb2snO1xuaW1wb3J0IGNyZWF0ZVJlbW92ZUhvb2sgZnJvbSAnLi9jcmVhdGVSZW1vdmVIb29rJztcbmltcG9ydCBjcmVhdGVIYXNIb29rIGZyb20gJy4vY3JlYXRlSGFzSG9vayc7XG5pbXBvcnQgY3JlYXRlUnVuSG9vayBmcm9tICcuL2NyZWF0ZVJ1bkhvb2snO1xuaW1wb3J0IGNyZWF0ZUN1cnJlbnRIb29rIGZyb20gJy4vY3JlYXRlQ3VycmVudEhvb2snO1xuaW1wb3J0IGNyZWF0ZURvaW5nSG9vayBmcm9tICcuL2NyZWF0ZURvaW5nSG9vayc7XG5pbXBvcnQgY3JlYXRlRGlkSG9vayBmcm9tICcuL2NyZWF0ZURpZEhvb2snO1xuXG4vKipcbiAqIEludGVybmFsIGNsYXNzIGZvciBjb25zdHJ1Y3RpbmcgaG9va3MuIFVzZSBgY3JlYXRlSG9va3MoKWAgZnVuY3Rpb25cbiAqXG4gKiBOb3RlLCBpdCBpcyBuZWNlc3NhcnkgdG8gZXhwb3NlIHRoaXMgY2xhc3MgdG8gbWFrZSBpdHMgdHlwZSBwdWJsaWMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIF9Ib29rcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuJykuU3RvcmV9IGFjdGlvbnMgKi9cbiAgICB0aGlzLmFjdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuYWN0aW9ucy5fX2N1cnJlbnQgPSBbXTtcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuJykuU3RvcmV9IGZpbHRlcnMgKi9cbiAgICB0aGlzLmZpbHRlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuZmlsdGVycy5fX2N1cnJlbnQgPSBbXTtcbiAgICB0aGlzLmFkZEFjdGlvbiA9IGNyZWF0ZUFkZEhvb2sodGhpcywgJ2FjdGlvbnMnKTtcbiAgICB0aGlzLmFkZEZpbHRlciA9IGNyZWF0ZUFkZEhvb2sodGhpcywgJ2ZpbHRlcnMnKTtcbiAgICB0aGlzLnJlbW92ZUFjdGlvbiA9IGNyZWF0ZVJlbW92ZUhvb2sodGhpcywgJ2FjdGlvbnMnKTtcbiAgICB0aGlzLnJlbW92ZUZpbHRlciA9IGNyZWF0ZVJlbW92ZUhvb2sodGhpcywgJ2ZpbHRlcnMnKTtcbiAgICB0aGlzLmhhc0FjdGlvbiA9IGNyZWF0ZUhhc0hvb2sodGhpcywgJ2FjdGlvbnMnKTtcbiAgICB0aGlzLmhhc0ZpbHRlciA9IGNyZWF0ZUhhc0hvb2sodGhpcywgJ2ZpbHRlcnMnKTtcbiAgICB0aGlzLnJlbW92ZUFsbEFjdGlvbnMgPSBjcmVhdGVSZW1vdmVIb29rKHRoaXMsICdhY3Rpb25zJywgdHJ1ZSk7XG4gICAgdGhpcy5yZW1vdmVBbGxGaWx0ZXJzID0gY3JlYXRlUmVtb3ZlSG9vayh0aGlzLCAnZmlsdGVycycsIHRydWUpO1xuICAgIHRoaXMuZG9BY3Rpb24gPSBjcmVhdGVSdW5Ib29rKHRoaXMsICdhY3Rpb25zJyk7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMgPSBjcmVhdGVSdW5Ib29rKHRoaXMsICdmaWx0ZXJzJywgdHJ1ZSk7XG4gICAgdGhpcy5jdXJyZW50QWN0aW9uID0gY3JlYXRlQ3VycmVudEhvb2sodGhpcywgJ2FjdGlvbnMnKTtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXIgPSBjcmVhdGVDdXJyZW50SG9vayh0aGlzLCAnZmlsdGVycycpO1xuICAgIHRoaXMuZG9pbmdBY3Rpb24gPSBjcmVhdGVEb2luZ0hvb2sodGhpcywgJ2FjdGlvbnMnKTtcbiAgICB0aGlzLmRvaW5nRmlsdGVyID0gY3JlYXRlRG9pbmdIb29rKHRoaXMsICdmaWx0ZXJzJyk7XG4gICAgdGhpcy5kaWRBY3Rpb24gPSBjcmVhdGVEaWRIb29rKHRoaXMsICdhY3Rpb25zJyk7XG4gICAgdGhpcy5kaWRGaWx0ZXIgPSBjcmVhdGVEaWRIb29rKHRoaXMsICdmaWx0ZXJzJyk7XG4gIH1cbn1cblxuLyoqIEB0eXBlZGVmIHtfSG9va3N9IEhvb2tzICovXG5cbi8qKlxuICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgaG9va3Mgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge0hvb2tzfSBBIEhvb2tzIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVIb29rcygpIHtcbiAgcmV0dXJuIG5ldyBfSG9va3MoKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUhvb2tzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlSG9va3MuanMubWFwIiwiLyoqXG4gKiBJbnRlcm5hbCBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0IGNyZWF0ZUhvb2tzIGZyb20gJy4vY3JlYXRlSG9va3MnO1xuXG4vKiogQHR5cGVkZWYgeyguLi5hcmdzOiBhbnlbXSk9PmFueX0gQ2FsbGJhY2sgKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBIYW5kbGVyXG4gKiBAcHJvcGVydHkge0NhbGxiYWNrfSBjYWxsYmFjayAgVGhlIGNhbGxiYWNrXG4gKiBAcHJvcGVydHkge3N0cmluZ30gICBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZVxuICogQHByb3BlcnR5IHtudW1iZXJ9ICAgcHJpb3JpdHkgIFRoZSBuYW1lc3BhY2VcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEhvb2tcbiAqIEBwcm9wZXJ0eSB7SGFuZGxlcltdfSBoYW5kbGVycyBBcnJheSBvZiBoYW5kbGVyc1xuICogQHByb3BlcnR5IHtudW1iZXJ9ICAgIHJ1bnMgICAgIFJ1biBjb3VudGVyXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBDdXJyZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZSAgICAgICAgIEhvb2sgbmFtZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGN1cnJlbnRJbmRleCBUaGUgaW5kZXhcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBIb29rPiAmIHtfX2N1cnJlbnQ6IEN1cnJlbnRbXX19IFN0b3JlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7J2FjdGlvbnMnIHwgJ2ZpbHRlcnMnfSBTdG9yZUtleVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9jcmVhdGVIb29rcycpLkhvb2tzfSBIb29rc1xuICovXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0SG9va3MgPSBjcmVhdGVIb29rcygpO1xuY29uc3Qge1xuICBhZGRBY3Rpb24sXG4gIGFkZEZpbHRlcixcbiAgcmVtb3ZlQWN0aW9uLFxuICByZW1vdmVGaWx0ZXIsXG4gIGhhc0FjdGlvbixcbiAgaGFzRmlsdGVyLFxuICByZW1vdmVBbGxBY3Rpb25zLFxuICByZW1vdmVBbGxGaWx0ZXJzLFxuICBkb0FjdGlvbixcbiAgYXBwbHlGaWx0ZXJzLFxuICBjdXJyZW50QWN0aW9uLFxuICBjdXJyZW50RmlsdGVyLFxuICBkb2luZ0FjdGlvbixcbiAgZG9pbmdGaWx0ZXIsXG4gIGRpZEFjdGlvbixcbiAgZGlkRmlsdGVyLFxuICBhY3Rpb25zLFxuICBmaWx0ZXJzXG59ID0gZGVmYXVsdEhvb2tzO1xuZXhwb3J0IHsgY3JlYXRlSG9va3MsIGFkZEFjdGlvbiwgYWRkRmlsdGVyLCByZW1vdmVBY3Rpb24sIHJlbW92ZUZpbHRlciwgaGFzQWN0aW9uLCBoYXNGaWx0ZXIsIHJlbW92ZUFsbEFjdGlvbnMsIHJlbW92ZUFsbEZpbHRlcnMsIGRvQWN0aW9uLCBhcHBseUZpbHRlcnMsIGN1cnJlbnRBY3Rpb24sIGN1cnJlbnRGaWx0ZXIsIGRvaW5nQWN0aW9uLCBkb2luZ0ZpbHRlciwgZGlkQWN0aW9uLCBkaWRGaWx0ZXIsIGFjdGlvbnMsIGZpbHRlcnMgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7YWRkRmlsdGVyLCBhZGRBY3Rpb259IGZyb20gXCJAd29yZHByZXNzL2hvb2tzXCI7XHJcblxyXG5cclxuU0JfQ3VzdG9taXplci5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcblx0U0JfQ3VzdG9taXplci5leHRyYURhdGEgPSB7XHJcblx0XHQuLi5TQl9DdXN0b21pemVyLmV4dHJhRGF0YSxcclxuXHRcdGFsbEZlZWRzU2NyZWVuIDogc2JjX2J1aWxkZXIuYWxsRmVlZHNTY3JlZW4sXHJcblx0XHRmZWVkc0xpc3QgOiBzYmNfYnVpbGRlci5mZWVkcyxcclxuXHRcdGxlZ2FjeUZlZWRzTGlzdDogc2JjX2J1aWxkZXIubGVnYWN5RmVlZHMsXHJcblx0XHR0b29sdGlwQ29udGVudCA6IHNiY19idWlsZGVyLmZlZWR0eXBlc1Rvb2x0aXBDb250ZW50LFxyXG5cdFx0ZmVlZFNldHRpbmdzRG9tT3B0aW9ucyA6IG51bGwsXHJcblx0XHRzZWxlY3RlZEZlZWRNb2RlbCA6IHtcclxuXHRcdFx0Y2hhbm5lbDogc2JjX2J1aWxkZXIucHJlZmlsbGVkQ2hhbm5lbElkLFxyXG5cdFx0XHRwbGF5bGlzdDogJycsXHJcblx0XHRcdGZhdm9yaXRlczogc2JjX2J1aWxkZXIucHJlZmlsbGVkQ2hhbm5lbElkLFxyXG5cdFx0XHRzZWFyY2g6ICcnLFxyXG5cdFx0XHRsaXZlOiBzYmNfYnVpbGRlci5wcmVmaWxsZWRDaGFubmVsSWQsXHJcblx0XHRcdHNpbmdsZTogJycsXHJcblx0XHRcdGFwaUtleTogJycsXHJcblx0XHRcdGFjY2Vzc1Rva2VuOiAnJ1xyXG5cdFx0fSxcclxuXHRcdHlvdXR1YmVBY2NvdW50Q29ubmVjdFVSTCA6IHNiY19idWlsZGVyLnlvdXR1YmVBY2NvdW50Q29ubmVjdFVSTCxcclxuXHRcdGNvbm5lY3RTaXRlUGFyYW1ldGVyczogc2JjX2J1aWxkZXIueW91dHViZUFjY291bnRDb25uZWN0UGFyYW1ldGVycyxcclxuXHRcdHByZWZpbGxlZENoYW5uZWxJZDogc2JjX2J1aWxkZXIucHJlZmlsbGVkQ2hhbm5lbElkLFxyXG5cdFx0ZGlzbWlzc0xpdGU6IHNiY19idWlsZGVyLnlvdXR1YmVfZmVlZF9kaXNtaXNzX2xpdGUsXHJcblx0XHRzaG91bGRTaG93RmVlZEFQSUZvcm0gOiBmYWxzZSxcclxuXHRcdHNob3VsZFNob3dNYW51YWxDb25uZWN0IDogZmFsc2UsXHJcblx0XHRzaG93U2hvd1lUQWNjb3VudFdhcm5pbmcgOiBmYWxzZSxcclxuXHJcblx0XHRzd19mZWVkOiBmYWxzZSxcclxuXHRcdHN3X2ZlZWRfaWQ6IGZhbHNlXHJcblx0fVxyXG5cclxuXHRTQl9DdXN0b21pemVyLmV4dHJhTWV0aG9kcyA9IHtcclxuXHRcdC4uLlNCX0N1c3RvbWl6ZXIuZXh0cmFNZXRob2RzLFxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGFuZ2UgU2V0dGluZ3MgVmFsdWVcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdGNoYW5nZVNldHRpbmdWYWx1ZSA6IGZ1bmN0aW9uKHNldHRpbmdJRCwgdmFsdWUsIGRvUHJvY2VzcyA9IHRydWUsIGFqYXhBY3Rpb24gPSBmYWxzZSkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdGlmKGRvUHJvY2Vzcyl7XHJcblx0XHRcdFx0c2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3Nbc2V0dGluZ0lEXSA9IHZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmKGFqYXhBY3Rpb24gIT09IGZhbHNlKXtcclxuXHRcdFx0XHRzZWxmLmN1c3RvbWl6ZXJDb250cm9sQWpheEFjdGlvbihhamF4QWN0aW9uLCBzZXR0aW5nSUQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHNlbGYucmVnZW5lcmF0ZUxheW91dChzZXR0aW5nSUQpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjaGVja0V4dGVuc2lvbkFjdGl2ZSA6IGZ1bmN0aW9uKGV4dGVuc2lvbil7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0cmV0dXJuIHNlbGYuYWN0aXZlRXh0ZW5zaW9uc1tleHRlbnNpb25dO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3VsZCBzaG93IG92ZXJsYXkgZm9yIHRoZSBzaWRlYmFyIGVsZW1lbnRzIG9uIHRvcFxyXG5cdFx0ICogXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHNob3VsZFNob3dPdmVybGF5KGNvbnRyb2wpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRpZiAoICFzZWxmLnNieUlzUHJvIHx8IFxyXG5cdFx0XHRcdFx0c2VsZi5zYnlMaWNlbnNlTm90aWNlQWN0aXZlIHx8IFxyXG5cdFx0XHRcdFx0KCAoIGNvbnRyb2wuY2hlY2tFeHRlbnNpb25Qb3B1cCA9PSAnY2FsbF90b19hY3Rpb24nIHx8IGNvbnRyb2wuY2hlY2tFeHRlbnNpb25Qb3B1cCA9PSAnYWR2YW5jZWRGaWx0ZXJzJyApICYmIFxyXG5cdFx0XHRcdFx0KCAhc2VsZi5oYXNGZWF0dXJlKCdjYWxsX3RvX2FjdGlvbnMnKSB8fCAhc2VsZi5oYXNGZWF0dXJlKCdhZHZhbmNlZEZpbHRlcnMnKSApXHJcblx0XHRcdFx0XHQpIFxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdHJldHVybiBjb250cm9sLmNoZWNrRXh0ZW5zaW9uUG9wdXAgIT0gdW5kZWZpbmVkIHx8IChcclxuXHRcdFx0XHRcdGNvbnRyb2wuY29uZGl0aW9uICE9IHVuZGVmaW5lZCB8fCBcclxuXHRcdFx0XHRcdGNvbnRyb2wuY2hlY2tFeHRlbnNpb24gIT0gdW5kZWZpbmVkIHx8IFxyXG5cdFx0XHRcdFx0Y29udHJvbC5jaGVja0V4dGVuc2lvbkRpbW1lZCAhPSB1bmRlZmluZWQgID8gXHJcblx0XHRcdFx0XHQhc2VsZi5jaGVja0NvbnRyb2xDb25kaXRpb24oY29udHJvbC5jb25kaXRpb24sIGNvbnRyb2wuY2hlY2tFeHRlbnNpb24sIGNvbnRyb2wuY2hlY2tFeHRlbnNpb25EaW1tZWQpIDogXHJcblx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5jb25kaXRpb24gIT0gdW5kZWZpbmVkIHx8IFxyXG5cdFx0XHRcdFx0Y29udHJvbC5jaGVja0V4dGVuc2lvbiAhPSB1bmRlZmluZWQgfHwgXHJcblx0XHRcdFx0XHRjb250cm9sLmNoZWNrRXh0ZW5zaW9uRGltbWVkICE9IHVuZGVmaW5lZCAgPyBcclxuXHRcdFx0XHRcdCFzZWxmLmNoZWNrQ29udHJvbENvbmRpdGlvbihjb250cm9sLmNvbmRpdGlvbiwgY29udHJvbC5jaGVja0V4dGVuc2lvbiwgY29udHJvbC5jaGVja0V4dGVuc2lvbkRpbW1lZCkgOiBcclxuXHRcdFx0XHRcdGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2hvdWxkIHNob3cgdG9nZ2xlc2V0IHR5cGUgY292ZXJcclxuXHRcdCAqIFxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRzaG91bGRTaG93VG9nZ2xlc2V0Q292ZXIgOiBmdW5jdGlvbih0b2dnbGUpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRpZiAoICFzZWxmLnNieUlzUHJvIHx8IHNlbGYuc2J5TGljZW5zZU5vdGljZUFjdGl2ZSApIHtcclxuXHRcdFx0XHRyZXR1cm4gdG9nZ2xlLmNoZWNrRXh0ZW5zaW9uICE9IHVuZGVmaW5lZCAmJiAhc2VsZi5jaGVja0V4dGVuc2lvbkFjdGl2ZSh0b2dnbGUuY2hlY2tFeHRlbnNpb24pXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBPcGVuIGV4dGVuc2lvbiBwb3B1cCBmcm9tIHRvZ2dsZXNldCBjb3ZlclxyXG5cdFx0ICogXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHRvZ2dsZXNldEV4dFBvcHVwIDogZnVuY3Rpb24odG9nZ2xlKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi52aWV3c0FjdGl2ZS5leHRlbnNpb25zUG9wdXBFbGVtZW50ID0gdG9nZ2xlLmNoZWNrRXh0ZW5zaW9uO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3J0Y29kZSBHbG9iYWwgTGF5b3V0IFNldHRpbmdzXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRyZWdlbmVyYXRlTGF5b3V0IDogZnVuY3Rpb24oc2V0dGluZ0lEKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHRyZWdlbmVyYXRlRmVlZEhUTUwgPSBcdFtcclxuXHRcdFx0XHRcdCdsYXlvdXQnXHJcblx0XHRcdFx0XSxcclxuXHRcdFx0XHRyZWxheW91dEZlZWQgPSBbXHJcblx0XHRcdFx0XHQnbGF5b3V0JyxcclxuXHRcdFx0XHRcdCdjYXJvdXNlbGFycm93cycsXHJcblx0XHRcdFx0XHQnY2Fyb3VzZWxwYWcnLFxyXG5cdFx0XHRcdFx0J2Nhcm91c2VsYXV0b3BsYXknLFxyXG5cdFx0XHRcdFx0J2Nhcm91c2VsdGltZScsXHJcblx0XHRcdFx0XHQnY2Fyb3VzZWxsb29wJyxcclxuXHRcdFx0XHRcdCdjYXJvdXNlbHJvd3MnLFxyXG5cdFx0XHRcdFx0J2NvbHMnLFxyXG5cdFx0XHRcdFx0J2NvbHN0YWJsZXQnLFxyXG5cdFx0XHRcdFx0J2NvbHNtb2JpbGUnLFxyXG5cdFx0XHRcdFx0J2ltYWdlcGFkZGluZydcclxuXHRcdFx0XHRdO1xyXG5cdFx0XHRpZiggcmVsYXlvdXRGZWVkLmluY2x1ZGVzKCBzZXR0aW5nSUQgKSApe1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdHNlbGYuc2V0U2hvcnRjb2RlR2xvYmFsU2V0dGluZ3ModHJ1ZSk7XHJcblx0XHRcdFx0fSwgMjAwKVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQmFjayB0byBhbGwgZmVlZHNcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdGJhY2tUb0FsbEZlZWRzIDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0aWYgKCBKU09OLnN0cmluZ2lmeShzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YUluaXRpYWwpID09PSBKU09OLnN0cmluZ2lmeShzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YSkgKSB7XHJcblx0XHRcdFx0d2luZG93LmxvY2F0aW9uID0gc2VsZi5idWlsZGVyVXJsO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHNlbGYub3BlbkRpYWxvZ0JveCgnYmFja0FsbFRvRmVlZCcpO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogT3BlbiBEaWFsb2cgQm94XHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRvcGVuRGlhbG9nQm94IDogZnVuY3Rpb24odHlwZSwgYXJncyA9IFtdKXtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxyXG5cdFx0XHRcdGhlYWRpbmcgPSBzZWxmLmRpYWxvZ0JveFBvcHVwU2NyZWVuW3R5cGVdLmhlYWRpbmcsXHJcblx0XHRcdFx0ZGVzY3JpcHRpb24gPSBzZWxmLmRpYWxvZ0JveFBvcHVwU2NyZWVuW3R5cGVdLmRlc2NyaXB0aW9uLFxyXG5cdFx0XHRcdGN1c3RvbUJ1dHRvbnMgPSBzZWxmLmRpYWxvZ0JveFBvcHVwU2NyZWVuW3R5cGVdLmN1c3RvbUJ1dHRvbnM7XHJcblx0XHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJkZWxldGVTaW5nbGVGZWVkXCI6XHJcblx0XHRcdFx0XHRzZWxmLmZlZWRUb0RlbGV0ZSA9IGFyZ3M7XHJcblx0XHRcdFx0XHRoZWFkaW5nID0gaGVhZGluZy5yZXBsYWNlKFwiI1wiLCBzZWxmLmZlZWRUb0RlbGV0ZS5mZWVkX25hbWUpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0c2VsZi5kaWFsb2dCb3ggPSB7XHJcblx0XHRcdFx0YWN0aXZlIDogdHJ1ZSxcclxuXHRcdFx0XHR0eXBlIDogdHlwZSxcclxuXHRcdFx0XHRoZWFkaW5nIDogaGVhZGluZyxcclxuXHRcdFx0XHRkZXNjcmlwdGlvbiA6IGRlc2NyaXB0aW9uLFxyXG5cdFx0XHRcdGN1c3RvbUJ1dHRvbnMgOiBjdXN0b21CdXR0b25zXHJcblx0XHRcdH07XHJcblx0XHRcdHdpbmRvdy5ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDb25maXJtIERpYWxvZyBCb3ggQWN0aW9uc1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0Y29uZmlybURpYWxvZ0FjdGlvbiA6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c3dpdGNoIChzZWxmLmRpYWxvZ0JveC50eXBlKSB7XHJcblx0XHRcdFx0Y2FzZSAnZGVsZXRlU2luZ2xlRmVlZCc6XHJcblx0XHRcdFx0XHRzZWxmLmZlZWRBY3Rpb25EZWxldGUoW3NlbGYuZmVlZFRvRGVsZXRlLmlkXSk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlICdkZWxldGVNdWx0aXBsZUZlZWRzJzpcclxuXHRcdFx0XHRcdHNlbGYuZmVlZEFjdGlvbkRlbGV0ZShzZWxmLmZlZWRzU2VsZWN0ZWQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnYmFja0FsbFRvRmVlZCc6XHJcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24gPSBzZWxmLmJ1aWxkZXJVcmw7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIERlbGV0ZSBGZWVkXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRmZWVkQWN0aW9uRGVsZXRlIDogZnVuY3Rpb24oZmVlZHNfaWRzKXtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxyXG5cdFx0XHRcdGZlZWRzRGVsZXRlRGF0YSA9IHtcclxuXHRcdFx0XHRcdGFjdGlvbiA6ICdzYnlfZmVlZF9zYXZlcl9tYW5hZ2VyX2RlbGV0ZV9mZWVkcycsXHJcblx0XHRcdFx0XHRmZWVkc19pZHMgOiBmZWVkc19pZHNcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRzZWxmLmFqYXhQb3N0KGZlZWRzRGVsZXRlRGF0YSwgZnVuY3Rpb24oX3JlZil7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBfcmVmLmRhdGE7XHJcblx0XHRcdFx0c2VsZi5mZWVkc0xpc3QgPSBPYmplY3QudmFsdWVzKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpKTtcclxuXHRcdFx0XHRzZWxmLmZlZWRzU2VsZWN0ZWQgPSBbXTtcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogRW5hYmxlICYgU2hvdyBDb2xvciBQaWNrZXJcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHNob3dDb2xvclBpY2tlclBvc3B1cCA6IGZ1bmN0aW9uKGNvbnRyb2xJZCl7XHJcblx0XHRcdHRoaXMuY3VzdG9taXplclNjcmVlbnMuYWN0aXZlQ29sb3JQaWNrZXIgPSBjb250cm9sSWQ7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogSGlkZSBDb2xvciBQaWNrZXJcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdGhpZGVDb2xvclBpY2tlclBvcHVwIDogZnVuY3Rpb24oKXtcclxuXHRcdFx0dGhpcy5jdXN0b21pemVyU2NyZWVucy5hY3RpdmVDb2xvclBpY2tlciA9IG51bGw7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IEZlZWQgUHJldmlldyBHbG9iYWwgQ1NTIENsYXNzXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICogQHJldHVybiBTdHJpbmdcclxuXHRcdCAqL1xyXG5cdFx0Z2V0UGFsZXR0ZUNsYXNzIDogZnVuY3Rpb24oY29udGV4dCA9ICcnKXtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxyXG5cdFx0XHRcdGNvbG9yUGFsZXR0ZSA9IHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLmNvbG9ycGFsZXR0ZTtcclxuXHJcblx0XHRcdGlmKHNlbGYuY2hlY2tOb3RFbXB0eSggY29sb3JQYWxldHRlICkpe1xyXG5cdFx0XHRcdHZhciBmZWVkSUQgPSBjb2xvclBhbGV0dGUgPT09ICdjdXN0b20nICA/ICgnXycgKyBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5mZWVkX2luZm8uaWQpICA6ICcnO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGNvbG9yUGFsZXR0ZSAhPT0gJ2luaGVyaXQnID8gJyBzYnknICsgY29udGV4dCArICdfcGFsZXR0ZV8nICsgY29sb3JQYWxldHRlICsgZmVlZElEOiAnJyk7XHJcblx0XHRcdFx0cmV0dXJuIGNvbG9yUGFsZXR0ZSAhPT0gJ2luaGVyaXQnID8gJyBzYnknICsgY29udGV4dCArICdfcGFsZXR0ZV8nICsgY29sb3JQYWxldHRlICsgZmVlZElEOiAnJztcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ2hlY2sgaWYgVmFsdWUgaXMgRW1wdHlcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKlxyXG5cdFx0ICogQHJldHVybiBib29sZWFuXHJcblx0XHQgKi9cclxuXHRcdGNoZWNrTm90RW1wdHkgOiBmdW5jdGlvbih2YWx1ZSl7XHJcblx0XHRcdHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHZhbHVlLnJlcGxhY2UoLyAvZ2ksJycpICE9ICcnO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCBmZWVkIGNvbnRhaW5lciBjbGFzc1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJucyBzdHJpbmdcclxuXHRcdCAqL1xyXG5cdFx0Z2V0RmVlZENvbnRhaW5lckNsYXNzZXM6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRsZXQgc2VsZiA9IHRoaXM7XHJcblx0XHRcdGxldCBjbGFzc2VzID0gW1xyXG5cdFx0XHRcdCdzYl95b3V0dWJlJyxcclxuXHRcdFx0XHQnc2J5X2xheW91dF8nICsgc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3MubGF5b3V0LFxyXG5cdFx0XHRcdCdzYnlfY29sXycgKyBzZWxmLmdldENvbFNldHRpbmdzKCksXHJcblx0XHRcdFx0J3NieV9tb2JfY29sXycgKyBzZWxmLmdldE1vYkNvbFNldHRpbmdzKCksXHJcblx0XHRcdFx0J3NieV9wYWxldHRlXycgKyBzZWxmLmdldENvbG9yUGFsZXR0ZUNsYXNzKCksXHJcblx0XHRcdF07XHJcblx0XHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0Q29sb3JQYWxldHRlQ2xhc3MgOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0bGV0IHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLmNvbG9ycGFsZXR0ZSA9PSAnY3VzdG9tJyApIHtcclxuXHRcdFx0XHRyZXR1cm4gc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3MuY29sb3JwYWxldHRlICsgJ18nICsgc2VsZi5jdXN0b21pemVyRmVlZERhdGEuZmVlZF9pbmZvLmlkO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5jb2xvcnBhbGV0dGU7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgQ29sIFNldHRpbmdzXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRnZXRDb2xTZXR0aW5nczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGxldCBzZWxmID0gdGhpcztcclxuXHJcblx0XHRcdGlmICggc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3NbJ2xheW91dCddID09ICdsaXN0JyB8fCBzZWxmLmN1c3RvbWl6ZXJTY3JlZW5zLnByZXZpZXdTY3JlZW4gPT09ICdtb2JpbGUnICkge1xyXG5cdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydjb2xzJ10gKSB7XHJcblx0XHRcdFx0cmV0dXJuIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydjb2xzJ107XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEdldCBNb2IgQ29sIFNldHRpbmdzXHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRnZXRNb2JDb2xTZXR0aW5nczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdGxldCBzZWxmID0gdGhpcztcclxuXHJcblx0XHRcdGlmICggc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3NbJ2xheW91dCddID09ICdsaXN0JyApIHtcclxuXHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydjb2xzbW9iaWxlJ10gKSB7XHJcblx0XHRcdFx0cmV0dXJuIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydjb2xzbW9iaWxlJ107XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHJldHVybiAwO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENoZWNrIGlmIGhlYWRlciBzdWJzY3JpYmVycyBuZWVkcyB0byBzaG93XHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRjaGVja1Nob3VsZFNob3dTdWJzY3JpYmVyczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5zaG93c3Vic2NyaWJlID09IHRydWUgPyBcInNob3duXCIgOiAnJztcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDaGVjayBpZiBEYXRhIFNldHRpbmcgaXMgRW5hYmxlZFxyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIGJvb2xlYW5cclxuXHRcdCAqL1xyXG5cdFx0dmFsdWVJc0VuYWJsZWQgOiBmdW5jdGlvbih2YWx1ZSl7XHJcblx0XHRcdHJldHVybiB2YWx1ZSA9PSAxIHx8IHZhbHVlID09IHRydWUgfHwgdmFsdWUgPT0gJ3RydWUnIHx8IHZhbHVlID09ICdvbic7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8vQ2hhbmdlIFN3aXRjaGVyIFNldHRpbmdzXHJcblx0XHRjaGFuZ2VTd2l0Y2hlclNldHRpbmdWYWx1ZSA6IGZ1bmN0aW9uKHNldHRpbmdJRCwgb25WYWx1ZSwgb2ZmVmFsdWUsIGFqYXhBY3Rpb24gPSBmYWxzZSwgZXh0ZW5zaW9uKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0Y29uc29sZS5sb2coZXh0ZW5zaW9uKTtcclxuXHRcdFx0aWYgKE9iamVjdC5rZXlzKHNlbGYuaW5BY3RpdmVFeHRlbnNpb25zKS5pbmNsdWRlcyhzZXR0aW5nSUQpKSB7XHJcblx0XHRcdFx0c2VsZi52aWV3c0FjdGl2ZS5leHRlbnNpb25zUG9wdXBFbGVtZW50ID0gc2VsZi5pbkFjdGl2ZUV4dGVuc2lvbnNbc2V0dGluZ0lEXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1tzZXR0aW5nSURdID0gc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3Nbc2V0dGluZ0lEXSA9PSBvblZhbHVlID8gb2ZmVmFsdWUgOiBvblZhbHVlO1xyXG5cdFx0XHRpZihhamF4QWN0aW9uICE9PSBmYWxzZSl7XHJcblx0XHRcdFx0c2VsZi5jdXN0b21pemVyQ29udHJvbEFqYXhBY3Rpb24oYWpheEFjdGlvbik7XHJcblx0XHRcdH1cclxuXHRcdFx0c2VsZi5yZWdlbmVyYXRlTGF5b3V0KHNldHRpbmdJRCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogUGFyc2UgSlNPTlxyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqXHJcblx0XHQgKiBAcmV0dXJuIGpzb25PYmplY3QgLyBCb29sZWFuXHJcblx0XHQgKi9cclxuXHRcdGpzb25QYXJzZSA6IGZ1bmN0aW9uKGpzb25TdHJpbmcpe1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xyXG5cdFx0XHR9IGNhdGNoKGUpIHtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBHZXQgY3VzdG9tIGhlYWRlciB0ZXh0XHJcblx0XHQgKlxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRnZXRDdXN0b21IZWFkZXJUZXh0IDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5jdXN0b21oZWFkZXJ0ZXh0O1xyXG5cdFx0fSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHNob3cgdGhlIHN0YW5kYXJkIGhlYWRlclxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHNpbmNlIDIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3VsZFNob3dTdGFuZGFyZEhlYWRlcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLnNob3doZWFkZXIgJiYgc2VsZi5jdXN0b21pemVyRmVlZERhdGEuc2V0dGluZ3MuaGVhZGVyc3R5bGUgPT09ICdzdGFuZGFyZCc7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogU2hvdWxkIHNob3cgdGhlIHRleHQgc3R5bGUgaGVhZGVyXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKiBAc2luY2UgMi4wXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgc2hvdWxkU2hvd1RleHRIZWFkZXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5ncy5zaG93aGVhZGVyICYmIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLmhlYWRlcnN0eWxlID09PSAndGV4dCc7XHJcbiAgICAgICAgfSxcclxuXHJcblxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogR2V0IGZsYWdzIGF0dHJpYnV0ZXNcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdGdldEZsYWdzQXR0ciA6IGZ1bmN0aW9uKCApIHtcclxuXHRcdFx0bGV0IHNlbGYgPSB0aGlzLFxyXG5cdFx0XHRcdGZsYWdzID0gW107XHJcblxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydkaXNhYmxlX3Jlc2l6ZSddICkge1xyXG5cdFx0XHRcdGZsYWdzLnB1c2goJ3Jlc2l6ZURpc2FibGUnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydmYXZvcl9sb2NhbCddICkge1xyXG5cdFx0XHRcdGZsYWdzLnB1c2goJ2Zhdm9yTG9jYWwnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydkaXNhYmxlX2pzX2ltYWdlX2xvYWRpbmcnXSApIHtcclxuXHRcdFx0XHRmbGFncy5wdXNoKCdpbWFnZUxvYWREaXNhYmxlJyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCBzZWxmLmN1c3RvbWl6ZXJGZWVkRGF0YS5zZXR0aW5nc1snYWpheF9wb3N0X2xvYWQnXSApIHtcclxuXHRcdFx0XHRmbGFncy5wdXNoKCdhamF4UG9zdExvYWQnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydwbGF5ZXJyYXRpbyddID09PSAnMzo0JyApIHtcclxuXHRcdFx0XHRmbGFncy5wdXNoKCduYXJyb3dQbGF5ZXInKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzWydkaXNhYmxlY2RuJ10gKSB7XHJcblx0XHRcdFx0ZmxhZ3MucHVzaCgnZGlzYWJsZWNkbicpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gZmxhZ3MudG9TdHJpbmcoKTtcclxuXHRcdH0sXHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIFNob3VsZCBzaG93IGdhbGxlcnkgbGF5b3V0IHBsYXllclxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogQHNpbmNlIDIuMFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHNob3VsZFNob3dQbGF5ZXIgOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoIHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzLmxheW91dCAhPSAnZ2FsbGVyeScgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFN3aXRjaCB0byBWaWRlb3Mgc2VjdGlvbnNcclxuXHRcdCAqIEZyb20gRmVlZCBMYXlvdXQgc2VjdGlvbiBib3R0b20gbGlua1xyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0c3dpdGNoVG9WaWRlb3NTZWN0aW9uOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRzZWxmLmN1c3RvbWl6ZXJTY3JlZW5zLnBhcmVudEFjdGl2ZVNlY3Rpb24gPSBudWxsO1xyXG5cdFx0XHRzZWxmLmN1c3RvbWl6ZXJTY3JlZW5zLnBhcmVudEFjdGl2ZVNlY3Rpb25EYXRhID0gbnVsbDtcclxuXHRcdFx0c2VsZi5jdXN0b21pemVyU2NyZWVucy5hY3RpdmVTZWN0aW9uID0gJ2N1c3RvbWl6ZV92aWRlb3MnO1xyXG5cdFx0XHRzZWxmLmN1c3RvbWl6ZXJTY3JlZW5zLmFjdGl2ZVNlY3Rpb25EYXRhID0gc2VsZi5jdXN0b21pemVyU2lkZWJhckJ1aWxkZXIuY3VzdG9taXplLnNlY3Rpb25zLmN1c3RvbWl6ZV92aWRlb3M7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogU2hvcnRjb2RlIEdsb2JhbCBMYXlvdXQgU2V0dGluZ3NcclxuXHRcdCAqXHJcblx0XHQgKiBAc2luY2UgMi4wXHJcblx0XHQgKi9cclxuXHRcdHNldFNob3J0Y29kZUdsb2JhbFNldHRpbmdzIDogZnVuY3Rpb24oZmx5UHJldmlldyA9IGZhbHNlKXtcclxuXHRcdFx0bGV0IHNlbGYgPSB0aGlzLFxyXG5cdFx0XHRcdHlvdXR1YmVGZWVkID0galF1ZXJ5KFwiaHRtbFwiKS5maW5kKFwiLnNiX3lvdXR1YmVcIiksXHJcblx0XHRcdFx0ZmVlZFNldHRpbmdzID0gc2VsZi5qc29uUGFyc2UoeW91dHViZUZlZWQuYXR0cignZGF0YS1vcHRpb25zJykpLFxyXG5cdFx0XHRcdGN1c3RvbWl6ZXJTZXR0aW5ncyA9IHNlbGYuY3VzdG9taXplckZlZWREYXRhLnNldHRpbmdzO1xyXG5cclxuXHRcdFx0XHRpZiAoICF5b3V0dWJlRmVlZC5sZW5ndGggKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRpZiggY3VzdG9taXplclNldHRpbmdzLmxheW91dCA9PT0gJ2Nhcm91c2VsJyApe1xyXG5cdFx0XHRcdGxldCBhcnJvd3MgXHRcdD0gc2VsZi52YWx1ZUlzRW5hYmxlZCggY3VzdG9taXplclNldHRpbmdzWydjYXJvdXNlbGFycm93cyddICksXHJcblx0XHRcdFx0XHRwYWcgXHRcdD0gc2VsZi52YWx1ZUlzRW5hYmxlZCggY3VzdG9taXplclNldHRpbmdzWydjYXJvdXNlbHBhZyddICksXHJcblx0XHRcdFx0XHRhdXRvcGxheSBcdD0gc2VsZi52YWx1ZUlzRW5hYmxlZCggY3VzdG9taXplclNldHRpbmdzWydjYXJvdXNlbGF1dG9wbGF5J10gKSxcclxuXHRcdFx0XHRcdHRpbWUgXHRcdD0gYXV0b3BsYXkgPyBwYXJzZUludChjdXN0b21pemVyU2V0dGluZ3NbJ2Nhcm91c2VsdGltZSddKSA6IGZhbHNlLFxyXG5cdFx0XHRcdFx0bG9vcCBcdFx0PSBzZWxmLmNoZWNrTm90RW1wdHkoY3VzdG9taXplclNldHRpbmdzWydjYXJvdXNlbGxvb3AnXSkgJiYgY3VzdG9taXplclNldHRpbmdzWydjYXJvdXNlbGxvb3AnXSAhPT0gJ3Jld2luZCcgPyBmYWxzZSA6IHRydWUsXHJcblx0XHRcdFx0XHRyb3dzIFx0XHQ9IGN1c3RvbWl6ZXJTZXR0aW5nc1snY2Fyb3VzZWxyb3dzJ10gID8gTWF0aC5taW4oIHBhcnNlSW50KGN1c3RvbWl6ZXJTZXR0aW5nc1snY2Fyb3VzZWxyb3dzJ10pLCAyKSA6IDE7XHJcblx0XHRcdFx0ZGVsZXRlIGZlZWRTZXR0aW5nc1snZ2FsbGVyeSddO1xyXG5cdFx0XHRcdGRlbGV0ZSBmZWVkU2V0dGluZ3NbJ21hc29ucnknXTtcclxuXHRcdFx0XHRkZWxldGUgZmVlZFNldHRpbmdzWydncmlkJ107XHJcblx0XHRcdFx0ZmVlZFNldHRpbmdzWydjYXJvdXNlbCddID0gW2Fycm93cywgcGFnLCBhdXRvcGxheSwgdGltZSwgbG9vcCwgcm93c107XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZihjdXN0b21pemVyU2V0dGluZ3MubGF5b3V0ID09ICdncmlkJyl7XHJcblx0XHRcdFx0ZGVsZXRlIGZlZWRTZXR0aW5nc1snZ2FsbGVyeSddO1xyXG5cdFx0XHRcdGRlbGV0ZSBmZWVkU2V0dGluZ3NbJ21hc29ucnknXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIGlmKGN1c3RvbWl6ZXJTZXR0aW5ncy5sYXlvdXQgPT0gJ21hc29ucnknKXtcclxuXHRcdFx0XHRkZWxldGUgZmVlZFNldHRpbmdzWydnYWxsZXJ5J107XHJcblx0XHRcdFx0ZGVsZXRlIGZlZWRTZXR0aW5nc1snZ3JpZCddO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYoY3VzdG9taXplclNldHRpbmdzLmxheW91dCA9PSAnZ2FsbGVyeScpe1xyXG5cdFx0XHRcdGRlbGV0ZSBmZWVkU2V0dGluZ3NbJ21hc29ucnknXTtcclxuXHRcdFx0XHRkZWxldGUgZmVlZFNldHRpbmdzWydncmlkJ107XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmKGN1c3RvbWl6ZXJTZXR0aW5ncy5sYXlvdXQgIT09ICdjYXJvdXNlbCcpe1xyXG5cdFx0XHRcdGRlbGV0ZSBmZWVkU2V0dGluZ3NbJ2Nhcm91c2VsJ107XHJcblx0XHRcdH1cclxuXHRcdFx0eW91dHViZUZlZWQuYXR0cihcImRhdGEtb3B0aW9uc1wiLCBKU09OLnN0cmluZ2lmeShmZWVkU2V0dGluZ3MpKTtcclxuXHJcblx0XHRcdGlmICggdHlwZW9mIHdpbmRvdy5zYnlfaW5pdCAhPT0gJ3VuZGVmaW5lZCcgJiYgZmx5UHJldmlldyApIHtcclxuXHRcdFx0XHQvL3NldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuXHRcdFx0XHRcdHdpbmRvdy5zYnlfaW5pdCgpO1xyXG5cdFx0XHRcdC8vfSwgMjAwMClcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3VsZCBTaG93IE1hbnVhbCBDb25uZWN0XHJcblx0XHQgKiBcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0c2hvd01hbnVhbENvbm5lY3QgOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRzZWxmLnNob3VsZFNob3dNYW51YWxDb25uZWN0ID0gdHJ1ZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93RmVlZEFQSUJhY2tCdG4gPSB0cnVlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3VsZCBTaG93IE1hbnVhbCBDb25uZWN0XHJcblx0XHQgKiBcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0c2hvd0ZlZWRTb3VyY2VNYW51YWxDb25uZWN0IDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi52aWV3c0FjdGl2ZS5hY2NvdW50QVBJUG9wdXAgPSB0cnVlO1xyXG5cdFx0XHRzZWxmLnNob3VsZFNob3dNYW51YWxDb25uZWN0ID0gdHJ1ZTtcclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTaG93IEFQSSBjb25uZWN0IGZvcm0gaW4gZmVlZCBjcmVhdGlvbiBmbG93XHJcblx0XHQgKi9cclxuXHRcdHNob3dBUElDb25uZWN0Rm9ybSA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHNlbGYuc2hvdWxkU2hvd0ZlZWRBUElGb3JtID0gdHJ1ZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93RmVlZEFQSUJhY2tCdG4gPSB0cnVlO1xyXG5cdFx0fSxcclxuXHRcclxuXHRcdC8qKlxyXG5cdFx0ICogU2hvdyB0aGUgbGltaXRhdGlvbnMgb2YgY29ubmVjdGluZyB3aXRoIFlvdVR1YmUgQWNjb3VudFxyXG5cdFx0ICogQHNpbmNlIDIuM1xyXG5cdFx0ICovXHJcblx0XHRzaG93WVRBY2NvdW50TGltaXRhdGlvbnMgOiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzO1xyXG5cdFx0XHRzZWxmLnNob3dTaG93WVRBY2NvdW50V2FybmluZyA9IHRydWU7XHJcblx0XHR9LFxyXG5cclxuXHRcdGJhY2tUb0FwaVBvcHVwIDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi5zaG93U2hvd1lUQWNjb3VudFdhcm5pbmcgPSBmYWxzZTtcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93TWFudWFsQ29ubmVjdCA9IGZhbHNlO1xyXG5cdFx0XHRzZWxmLnNob3VsZFNob3dGZWVkQVBJRm9ybSA9IGZhbHNlO1xyXG5cdFx0XHRzZWxmLnNob3VsZFNob3dGZWVkQVBJQmFja0J0biA9IGZhbHNlO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNob3cgQVBJIGNvbm5lY3QgZm9ybSBpbiBmZWVkIGNyZWF0aW9uIGZsb3dcclxuXHRcdCAqL1xyXG5cdFx0aGlkZUFQSUNvbm5lY3RGb3JtIDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi5zaG91bGRTaG93TWFudWFsQ29ubmVjdCA9IGZhbHNlO1xyXG5cdFx0XHRzZWxmLnNob3VsZFNob3dGZWVkQVBJRm9ybSA9IGZhbHNlO1xyXG5cdFx0XHRzZWxmLnNob3VsZFNob3dGZWVkQVBJQmFja0J0biA9IGZhbHNlO1xyXG5cdFx0fSxcclxuXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBBZGQgQVBJIEtleSBmcm9tIHRoZSBzZWxlY3QgZmVlZCBmbG93XHJcblx0XHQgKiBcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0YWRkQVBJS2V5IDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHJcblx0XHRcdGlmICggIXNlbGYuc2VsZWN0ZWRGZWVkTW9kZWwuYXBpS2V5ICkge1xyXG5cdFx0XHRcdHNlbGYuYXBpS2V5RXJyb3IgPSB0cnVlO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dmFyIHNlbGYgPSB0aGlzLFxyXG5cdFx0XHRcdGFkZEFQSUtleURhdGEgPSB7XHJcblx0XHRcdFx0XHRhY3Rpb24gOiAnc2J5X2FkZF9hcGlfa2V5JyxcclxuXHRcdFx0XHRcdGFwaSA6IHNlbGYuc2VsZWN0ZWRGZWVkTW9kZWwuYXBpS2V5XHJcblx0XHRcdFx0fTtcclxuXHRcdFx0c2VsZi5hcGlLZXlCdG5Mb2FkZXIgPSB0cnVlO1xyXG5cdFx0XHRzZWxmLmFqYXhQb3N0KGFkZEFQSUtleURhdGEsIGZ1bmN0aW9uKF9yZWYpe1xyXG5cdFx0XHRcdHZhciBkYXRhID0gX3JlZi5kYXRhO1xyXG5cdFx0XHRcdHNlbGYuYXBpS2V5QnRuTG9hZGVyID0gZmFsc2U7XHJcblx0XHRcdFx0c2VsZi5hcGlLZXlFcnJvciA9IGZhbHNlO1xyXG5cdFx0XHRcdHNlbGYuYXBpS2V5U3RhdHVzID0gdHJ1ZTtcclxuXHRcdFx0XHRzZWxmLmFjdGl2YXRlVmlldygnYWNjb3VudEFQSVBvcHVwJyk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIEFkZCBBY2Nlc3MgVG9rb2VuIGZyb20gdGhlIHNlbGVjdCBmZWVkIGZsb3dcclxuXHRcdCAqIFxyXG5cdFx0ICogQHNpbmNlIDIuMFxyXG5cdFx0ICovXHJcblx0XHRhZGRBY2Nlc3NUb2tlbiA6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG5cdFx0XHRpZiAoICFzZWxmLnNlbGVjdGVkRmVlZE1vZGVsLmFjY2Vzc1Rva2VuICkge1xyXG5cdFx0XHRcdHNlbGYuYWNjZXNzVG9rZW5FcnJvciA9IHRydWU7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXMsXHJcblx0XHRcdFx0YWRkQVBJS2V5RGF0YSA9IHtcclxuXHRcdFx0XHRcdGFjdGlvbiA6ICdzYnlfbWFudWFsX2FjY2Vzc190b2tlbicsXHJcblx0XHRcdFx0XHRzYnlfYWNjZXNzX3Rva2VuIDogc2VsZi5zZWxlY3RlZEZlZWRNb2RlbC5hY2Nlc3NUb2tlblxyXG5cdFx0XHRcdH07XHJcblx0XHRcdHNlbGYuYXBpS2V5QnRuTG9hZGVyID0gdHJ1ZTtcclxuXHRcdFx0c2VsZi5hamF4UG9zdChhZGRBUElLZXlEYXRhLCBmdW5jdGlvbihfcmVmKXtcclxuXHRcdFx0XHR2YXIgZGF0YSA9IF9yZWYuZGF0YTtcclxuXHRcdFx0XHRzZWxmLmFwaUtleUJ0bkxvYWRlciA9IGZhbHNlO1xyXG5cdFx0XHRcdHNlbGYuYWNjZXNzVG9rZW5FcnJvciA9IGZhbHNlO1xyXG5cdFx0XHRcdHNlbGYuYXBpS2V5U3RhdHVzID0gdHJ1ZTtcclxuXHRcdFx0XHRzZWxmLmFjdGl2YXRlVmlldygnYWNjb3VudEFQSVBvcHVwJyk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIENyZWF0ZSAmIFN1Ym1pdCBOZXcgRmVlZFxyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjBcclxuXHRcdCAqL1xyXG5cdFx0c3VibWl0TmV3RmVlZCA6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcyxcclxuXHRcdFx0XHRuZXdGZWVkRGF0YSA9IHtcclxuXHRcdFx0XHRcdGFjdGlvbiA6ICdzYnlfZmVlZF9zYXZlcl9tYW5hZ2VyX2J1aWxkZXJfdXBkYXRlJyxcclxuXHRcdFx0XHRcdGZlZWR0eXBlIDogc2VsZi5zZWxlY3RlZEZlZWQsXHJcblx0XHRcdFx0XHRmZWVkdGVtcGxhdGUgOiBzZWxmLnNlbGVjdGVkRmVlZFRlbXBsYXRlLFxyXG5cdFx0XHRcdFx0c2VsZWN0ZWRGZWVkTW9kZWwgOiBzZWxmLnNlbGVjdGVkRmVlZE1vZGVsLFxyXG5cdFx0XHRcdFx0bmV3X2luc2VydCA6ICd0cnVlJyxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRzZWxmLmZ1bGxTY3JlZW5Mb2FkZXIgPSB0cnVlO1xyXG5cdFx0XHRzZWxmLmFqYXhQb3N0KG5ld0ZlZWREYXRhLCBmdW5jdGlvbihfcmVmKXtcclxuXHRcdFx0XHR2YXIgZGF0YSA9IF9yZWYuZGF0YTtcclxuXHRcdFx0XHRpZihkYXRhLmZlZWRfaWQgJiYgZGF0YS5zdWNjZXNzKXtcclxuXHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbiA9IHNlbGYuYnVpbGRlclVybCArICcmZmVlZF9pZD0nICsgZGF0YS5mZWVkX2lkICsgc2VsZi5zd19mZWVkX3BhcmFtcygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICogQ3VzdG9tIGZpZWxkIGNsaWNrIGFjdGlvblxyXG5cdFx0ICogQWN0aW9uXHJcblx0XHQgKiBAc2luY2UgMi4zLjNcclxuXHRcdCAqL1xyXG5cdFx0ZmllbGRDdXN0b21DbGlja0FjdGlvbiA6IGZ1bmN0aW9uKCBjbGlja0FjdGlvbiApe1xyXG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHN3aXRjaCAoY2xpY2tBY3Rpb24pIHtcclxuXHRcdFx0XHRjYXNlICdjbGVhckNvbW1lbnRDYWNoZSc6XHJcblx0XHRcdFx0XHRzZWxmLmNsZWFyQ29tbWVudENhY2hlKCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBDbGVhciBjb21tZW50IGNhY2hlIGFjdGlvblxyXG5cdFx0ICpcclxuXHRcdCAqIEBzaW5jZSAyLjMuM1xyXG5cdFx0ICovXHJcblx0XHRjbGVhckNvbW1lbnRDYWNoZSA6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHZhciBzZWxmID0gdGhpcztcclxuXHRcdFx0c2VsZi5sb2FkaW5nQmFyID0gdHJ1ZTtcclxuXHRcdFx0dmFyIGNsZWFyQ29tbWVudENhY2hlRGF0YSA9IHtcclxuXHRcdFx0XHRhY3Rpb24gOiAnc2J5X2ZlZWRfc2F2ZXJfY2xlYXJfY29tbWVudHNfY2FjaGUnLFxyXG5cdFx0XHR9O1xyXG5cdFx0XHRzZWxmLmFqYXhQb3N0KGNsZWFyQ29tbWVudENhY2hlRGF0YSwgZnVuY3Rpb24oX3JlZil7XHJcblx0XHRcdFx0dmFyIGRhdGEgPSBfcmVmLmRhdGE7XHJcblx0XHRcdFx0aWYoIGRhdGEgPT09ICdzdWNjZXNzJyApe1xyXG5cdFx0XHRcdFx0c2VsZi5wcm9jZXNzTm90aWZpY2F0aW9uKFwiY29tbWVudENhY2hlQ2xlYXJlZFwiKTtcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHNlbGYucHJvY2Vzc05vdGlmaWNhdGlvbihcInVua293bkVycm9yXCIpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cdH1cclxuXHRyZXNvbHZlKFNCX0N1c3RvbWl6ZXIpO1xyXG59KTsiXSwibmFtZXMiOlsibmFtZXNwYWNlIiwiY29uc29sZSIsImVycm9yIiwidGVzdCIsImhvb2tOYW1lIiwiaG9va3MiLCJzdG9yZUtleSIsImNhbGxiYWNrIiwicHJpb3JpdHkiLCJob29rc1N0b3JlIiwiaGFuZGxlciIsImhhbmRsZXJzIiwiaSIsImxlbmd0aCIsInNwbGljZSIsIl9fY3VycmVudCIsImZvckVhY2giLCJob29rSW5mbyIsIm5hbWUiLCJjdXJyZW50SW5kZXgiLCJydW5zIiwiZG9BY3Rpb24iLCJyZW1vdmVBbGwiLCJoYW5kbGVyc1JlbW92ZWQiLCJzb21lIiwiaG9vayIsInJldHVybkZpcnN0QXJnIiwiYXJncyIsInVuZGVmaW5lZCIsInB1c2giLCJyZXN1bHQiLCJhcHBseSIsInBvcCIsIl9ob29rc1N0b3JlJF9fY3VycmVudCIsIl9Ib29rcyIsImNvbnN0cnVjdG9yIiwidGhpcyIsImFjdGlvbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJmaWx0ZXJzIiwiYWRkQWN0aW9uIiwiYWRkRmlsdGVyIiwicmVtb3ZlQWN0aW9uIiwicmVtb3ZlRmlsdGVyIiwiaGFzQWN0aW9uIiwiaGFzRmlsdGVyIiwicmVtb3ZlQWxsQWN0aW9ucyIsInJlbW92ZUFsbEZpbHRlcnMiLCJhcHBseUZpbHRlcnMiLCJjdXJyZW50QWN0aW9uIiwiY3VycmVudEZpbHRlciIsImRvaW5nQWN0aW9uIiwiZG9pbmdGaWx0ZXIiLCJkaWRBY3Rpb24iLCJkaWRGaWx0ZXIiLCJkZWZhdWx0SG9va3MiLCJTQl9DdXN0b21pemVyIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImV4dHJhRGF0YSIsIl9vYmplY3RTcHJlYWQiLCJhbGxGZWVkc1NjcmVlbiIsInNiY19idWlsZGVyIiwiZmVlZHNMaXN0IiwiZmVlZHMiLCJsZWdhY3lGZWVkc0xpc3QiLCJsZWdhY3lGZWVkcyIsInRvb2x0aXBDb250ZW50IiwiZmVlZHR5cGVzVG9vbHRpcENvbnRlbnQiLCJmZWVkU2V0dGluZ3NEb21PcHRpb25zIiwic2VsZWN0ZWRGZWVkTW9kZWwiLCJjaGFubmVsIiwicHJlZmlsbGVkQ2hhbm5lbElkIiwicGxheWxpc3QiLCJmYXZvcml0ZXMiLCJzZWFyY2giLCJsaXZlIiwic2luZ2xlIiwiYXBpS2V5IiwiYWNjZXNzVG9rZW4iLCJ5b3V0dWJlQWNjb3VudENvbm5lY3RVUkwiLCJjb25uZWN0U2l0ZVBhcmFtZXRlcnMiLCJ5b3V0dWJlQWNjb3VudENvbm5lY3RQYXJhbWV0ZXJzIiwiZGlzbWlzc0xpdGUiLCJ5b3V0dWJlX2ZlZWRfZGlzbWlzc19saXRlIiwic2hvdWxkU2hvd0ZlZWRBUElGb3JtIiwic2hvdWxkU2hvd01hbnVhbENvbm5lY3QiLCJzaG93U2hvd1lUQWNjb3VudFdhcm5pbmciLCJzd19mZWVkIiwic3dfZmVlZF9pZCIsImV4dHJhTWV0aG9kcyIsImNoYW5nZVNldHRpbmdWYWx1ZSIsInNldHRpbmdJRCIsInZhbHVlIiwiYWpheEFjdGlvbiIsImFyZ3VtZW50cyIsInNlbGYiLCJjdXN0b21pemVyRmVlZERhdGEiLCJzZXR0aW5ncyIsImN1c3RvbWl6ZXJDb250cm9sQWpheEFjdGlvbiIsInJlZ2VuZXJhdGVMYXlvdXQiLCJjaGVja0V4dGVuc2lvbkFjdGl2ZSIsImV4dGVuc2lvbiIsImFjdGl2ZUV4dGVuc2lvbnMiLCJzaG91bGRTaG93T3ZlcmxheSIsImNvbnRyb2wiLCJzYnlJc1BybyIsInNieUxpY2Vuc2VOb3RpY2VBY3RpdmUiLCJjaGVja0V4dGVuc2lvblBvcHVwIiwiaGFzRmVhdHVyZSIsImNvbmRpdGlvbiIsImNoZWNrRXh0ZW5zaW9uIiwiY2hlY2tFeHRlbnNpb25EaW1tZWQiLCJjaGVja0NvbnRyb2xDb25kaXRpb24iLCJzaG91bGRTaG93VG9nZ2xlc2V0Q292ZXIiLCJ0b2dnbGUiLCJ0b2dnbGVzZXRFeHRQb3B1cCIsInZpZXdzQWN0aXZlIiwiZXh0ZW5zaW9uc1BvcHVwRWxlbWVudCIsImluY2x1ZGVzIiwic2V0VGltZW91dCIsInNldFNob3J0Y29kZUdsb2JhbFNldHRpbmdzIiwiYmFja1RvQWxsRmVlZHMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9taXplckZlZWREYXRhSW5pdGlhbCIsIndpbmRvdyIsImxvY2F0aW9uIiwiYnVpbGRlclVybCIsIm9wZW5EaWFsb2dCb3giLCJ0eXBlIiwiaGVhZGluZyIsImRpYWxvZ0JveFBvcHVwU2NyZWVuIiwiZGVzY3JpcHRpb24iLCJjdXN0b21CdXR0b25zIiwiZmVlZFRvRGVsZXRlIiwicmVwbGFjZSIsImZlZWRfbmFtZSIsImRpYWxvZ0JveCIsImFjdGl2ZSIsImV2ZW50Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29uZmlybURpYWxvZ0FjdGlvbiIsImZlZWRBY3Rpb25EZWxldGUiLCJpZCIsImZlZWRzU2VsZWN0ZWQiLCJmZWVkc19pZHMiLCJmZWVkc0RlbGV0ZURhdGEiLCJhY3Rpb24iLCJhamF4UG9zdCIsIl9yZWYiLCJkYXRhIiwidmFsdWVzIiwiYXNzaWduIiwic2hvd0NvbG9yUGlja2VyUG9zcHVwIiwiY29udHJvbElkIiwiY3VzdG9taXplclNjcmVlbnMiLCJhY3RpdmVDb2xvclBpY2tlciIsImhpZGVDb2xvclBpY2tlclBvcHVwIiwiZ2V0UGFsZXR0ZUNsYXNzIiwiY29udGV4dCIsImNvbG9yUGFsZXR0ZSIsImNvbG9ycGFsZXR0ZSIsImNoZWNrTm90RW1wdHkiLCJmZWVkSUQiLCJmZWVkX2luZm8iLCJsb2ciLCJnZXRGZWVkQ29udGFpbmVyQ2xhc3NlcyIsImxheW91dCIsImdldENvbFNldHRpbmdzIiwiZ2V0TW9iQ29sU2V0dGluZ3MiLCJnZXRDb2xvclBhbGV0dGVDbGFzcyIsImpvaW4iLCJwcmV2aWV3U2NyZWVuIiwiY2hlY2tTaG91bGRTaG93U3Vic2NyaWJlcnMiLCJzaG93c3Vic2NyaWJlIiwidmFsdWVJc0VuYWJsZWQiLCJjaGFuZ2VTd2l0Y2hlclNldHRpbmdWYWx1ZSIsIm9uVmFsdWUiLCJvZmZWYWx1ZSIsImtleXMiLCJpbkFjdGl2ZUV4dGVuc2lvbnMiLCJqc29uUGFyc2UiLCJqc29uU3RyaW5nIiwicGFyc2UiLCJlIiwiZ2V0Q3VzdG9tSGVhZGVyVGV4dCIsImN1c3RvbWhlYWRlcnRleHQiLCJzaG91bGRTaG93U3RhbmRhcmRIZWFkZXIiLCJzaG93aGVhZGVyIiwiaGVhZGVyc3R5bGUiLCJzaG91bGRTaG93VGV4dEhlYWRlciIsImdldEZsYWdzQXR0ciIsImZsYWdzIiwidG9TdHJpbmciLCJzaG91bGRTaG93UGxheWVyIiwic3dpdGNoVG9WaWRlb3NTZWN0aW9uIiwicGFyZW50QWN0aXZlU2VjdGlvbiIsInBhcmVudEFjdGl2ZVNlY3Rpb25EYXRhIiwiYWN0aXZlU2VjdGlvbiIsImFjdGl2ZVNlY3Rpb25EYXRhIiwiY3VzdG9taXplclNpZGViYXJCdWlsZGVyIiwiY3VzdG9taXplIiwic2VjdGlvbnMiLCJjdXN0b21pemVfdmlkZW9zIiwiZmx5UHJldmlldyIsInlvdXR1YmVGZWVkIiwialF1ZXJ5IiwiZmluZCIsImZlZWRTZXR0aW5ncyIsImF0dHIiLCJjdXN0b21pemVyU2V0dGluZ3MiLCJhcnJvd3MiLCJwYWciLCJhdXRvcGxheSIsInRpbWUiLCJwYXJzZUludCIsImxvb3AiLCJyb3dzIiwiTWF0aCIsIm1pbiIsInNieV9pbml0Iiwic2hvd01hbnVhbENvbm5lY3QiLCJzaG91bGRTaG93RmVlZEFQSUJhY2tCdG4iLCJzaG93RmVlZFNvdXJjZU1hbnVhbENvbm5lY3QiLCJhY2NvdW50QVBJUG9wdXAiLCJzaG93QVBJQ29ubmVjdEZvcm0iLCJzaG93WVRBY2NvdW50TGltaXRhdGlvbnMiLCJiYWNrVG9BcGlQb3B1cCIsImhpZGVBUElDb25uZWN0Rm9ybSIsImFkZEFQSUtleSIsImFkZEFQSUtleURhdGEiLCJhcGkiLCJhcGlLZXlCdG5Mb2FkZXIiLCJhcGlLZXlFcnJvciIsImFwaUtleVN0YXR1cyIsImFjdGl2YXRlVmlldyIsImFkZEFjY2Vzc1Rva2VuIiwic2J5X2FjY2Vzc190b2tlbiIsImFjY2Vzc1Rva2VuRXJyb3IiLCJzdWJtaXROZXdGZWVkIiwibmV3RmVlZERhdGEiLCJmZWVkdHlwZSIsInNlbGVjdGVkRmVlZCIsImZlZWR0ZW1wbGF0ZSIsInNlbGVjdGVkRmVlZFRlbXBsYXRlIiwibmV3X2luc2VydCIsImZ1bGxTY3JlZW5Mb2FkZXIiLCJmZWVkX2lkIiwic3VjY2VzcyIsInN3X2ZlZWRfcGFyYW1zIiwiZmllbGRDdXN0b21DbGlja0FjdGlvbiIsImNsaWNrQWN0aW9uIiwiY2xlYXJDb21tZW50Q2FjaGUiLCJsb2FkaW5nQmFyIiwicHJvY2Vzc05vdGlmaWNhdGlvbiJdLCJzb3VyY2VSb290IjoiIn0=