From 1c410bdd46cf32089991abbb499bbb8880065221 Mon Sep 17 00:00:00 2001 From: Boris Serebrov Date: Sun, 13 Oct 2019 16:51:36 +0300 Subject: [PATCH] Build 6.1.2 --- dist/emoji-mart.js | 2 +- docs/bundle.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/dist/emoji-mart.js b/dist/emoji-mart.js index a5509108..ca620e8b 100644 --- a/dist/emoji-mart.js +++ b/dist/emoji-mart.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vue")):"function"==typeof define&&define.amd?define(["vue"],t):"object"==typeof exports?exports.EmojiMart=t(require("vue")):e.EmojiMart=t(e.Vue)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=14)}([function(e,t,i){var n=i(9);e.exports=function(e){for(var t=1;t0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var i=e.indexOf("rv:");return parseInt(e.substring(i+3,e.indexOf(".",i)),10)}var n=e.indexOf("Edge/");return n>0?parseInt(e.substring(n+5,e.indexOf(".",n)),10):-1}())}var s={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"resize-observer",attrs:{tabindex:"-1"}})},staticRenderFns:[],_scopeId:"data-v-b329ee4c",name:"resize-observer",methods:{compareAndNotify:function(){this._w===this.$el.offsetWidth&&this._h===this.$el.offsetHeight||(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.$emit("notify"))},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject&&this._resizeObject.onload&&(!r&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),delete this._resizeObject.onload)}},mounted:function(){var e=this;o(),this.$nextTick(function(){e._w=e.$el.offsetWidth,e._h=e.$el.offsetHeight});var t=document.createElement("object");this._resizeObject=t,t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex",-1),t.onload=this.addResizeHandlers,t.type="text/html",r&&this.$el.appendChild(t),t.data="about:blank",r||this.$el.appendChild(t)},beforeDestroy:function(){this.removeResizeHandlers()}};var a={version:"0.4.5",install:function(e){e.component("resize-observer",s),e.component("ResizeObserver",s)}},c=null;"undefined"!=typeof window?c=window.Vue:void 0!==e&&(c=e.Vue),c&&c.use(a);var l="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},u=(function(){function e(e){this.value=e}function t(t){var i,n;function r(i,n){try{var s=t[i](n),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?r(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};n?n=n.next=a:(i=n=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),h=function(){function e(e,t){for(var i=0;i1?t-1:0),c=1;c=l.threshold;if(i===l.oldResult)return;l.oldResult=i,l.callback(i,t),i&&l.options.once&&(l.frozen=!0,l.destroyObserver())}},this.options.intersection),t.context.$nextTick(function(){l.observer.observe(l.el)}))}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&this.options.intersection.threshold||0}}]),e}();function f(e,t,i){var n=t.value;if("undefined"==typeof IntersectionObserver)console.warn("[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill");else{var r=new m(e,n,i);e._vue_visibilityState=r}}var v={bind:f,update:function(e,t,i){var n=t.value;if(!function e(t,i){if(t===i)return!0;if("object"===(void 0===t?"undefined":l(t))){for(var n in t)if(!e(t[n],i[n]))return!1;return!0}return!1}(n,t.oldValue)){var r=e._vue_visibilityState;r?r.createObserver(n,i):f(e,{value:n},i)}},unbind:function(e){var t=e._vue_visibilityState;t&&(t.destroyObserver(),delete e._vue_visibilityState)}};var p={version:"0.4.3",install:function(e){e.directive("observe-visibility",v)}},y=null;"undefined"!=typeof window?y=window.Vue:void 0!==e&&(y=e.Vue),y&&y.use(p);var g="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};var j,_=(function(e){var t,i;t=g,i=function(){var e=/(auto|scroll)/,t=function(e,i){return null===e.parentNode?i:t(e.parentNode,i.concat([e]))},i=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},n=function(t){return e.test(function(e){return i(e,"overflow")+i(e,"overflow-y")+i(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var i=t(e.parentNode,[]),r=0;r1&&void 0!==arguments[1]&&arguments[1],i=this.$_unusedViews,n=e.nr.type,r=i.get(n);r||(r=[],i.set(n,r)),r.push(e),t||(e.nr.used=!1,e.position=-9999,this.$_views.delete(e.nr.key))},handleResize:function(){this.$emit("resize"),this.ready&&this.updateVisibleItems(!1)},handleScroll:function(e){var t=this;this.$_scrollDirty||(this.$_scrollDirty=!0,requestAnimationFrame(function(){t.$_scrollDirty=!1,t.updateVisibleItems(!1).continuous||(clearTimeout(t.$_refreshTimout),t.$_refreshTimout=setTimeout(t.handleScroll,100))}))},handleVisibilityChange:function(e,t){var i=this;this.ready&&(e||0!==t.boundingClientRect.width||0!==t.boundingClientRect.height?(this.$emit("visible"),requestAnimationFrame(function(){i.updateVisibleItems(!1)})):this.$emit("hidden"))},updateVisibleItems:function(e){var t=this.itemSize,i=this.typeField,r=this.simpleArray?null:this.keyField,o=this.items,s=o.length,a=this.sizes,c=this.$_views,l=this.$_unusedViews,u=this.pool,h=void 0,d=void 0,m=void 0;if(s)if(this.$isServer)h=0,d=this.prerender,m=null;else{var f=this.getScroll(),v=this.buffer;if(f.start-=v,f.end+=v,null===t){var p=0,y=s-1,g=~~(s/2),j=void 0;do{j=g,a[g].accumulatorf.start&&(y=g),g=~~((p+y)/2)}while(g!==j);for(g<0&&(g=0),h=g,m=a[s-1].accumulator,d=g;ds&&(d=s)}else(h=~~(f.start/t))<0&&(h=0),(d=Math.ceil(f.end/t))>s&&(d=s),m=s*t}else h=d=m=0;d-h>n.itemsLimit&&this.itemsLimitError(),this.totalSize=m;var _=void 0,w=h<=this.$_endIndex&&d>=this.$_startIndex,b=void 0;if(this.$_continuous!==w){if(w){c.clear(),l.clear();for(var S=0,k=u.length;S=d)&&this.unuseView(_));w||(b=new Map);for(var E=void 0,z=void 0,$=void 0,O=void 0,P=h;Pr&&(s=r-o),i={start:o,end:o+s}}else i=t?{start:e.scrollTop,end:e.scrollTop+e.clientHeight}:{start:e.scrollLeft,end:e.scrollLeft+e.clientWidth};return i},applyPageMode:function(){this.pageMode?this.addListeners():this.removeListeners()},addListeners:function(){this.listenerTarget=this.getListenerTarget(),this.listenerTarget.addEventListener("scroll",this.handleScroll,!!C&&{passive:!0}),this.listenerTarget.addEventListener("resize",this.handleResize)},removeListeners:function(){this.listenerTarget&&(this.listenerTarget.removeEventListener("scroll",this.handleScroll),this.listenerTarget.removeEventListener("resize",this.handleResize),this.listenerTarget=null)},scrollToItem:function(e){var t=void 0;t=null===this.itemSize?e>0?this.sizes[e-1].accumulator:0:e*this.itemSize,this.scrollToPosition(t)},scrollToPosition:function(e){"vertical"===this.direction?this.$el.scrollTop=e:this.$el.scrollLeft=e},itemsLimitError:function(){var e=this;throw setTimeout(function(){console.log("It seems the scroller element isn't scrolling, so it tries to render all the items at once.","Scroller:",e.$el),console.log("Make sure the scroller has a fixed height (or width) and 'overflow-y' (or 'overflow-x') set to 'auto' so it can scroll correctly and only render the items visible in the scroll viewport.")}),new Error("Rendered items limit reached")}}},O={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("RecycleScroller",e._g(e._b({ref:"scroller",attrs:{items:e.itemsWithSize,"min-item-size":e.minItemSize,direction:e.direction,"key-field":"id"},on:{resize:e.onScrollerResize,visible:e.onScrollerVisible},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.item,n=t.index,r=t.active;return[e._t("default",null,null,{item:i.item,index:n,active:r,itemWithSize:i})]}}])},"RecycleScroller",e.$attrs,!1),e.listeners),[i("template",{slot:"before"},[e._t("before")],2),e._v(" "),i("template",{slot:"after"},[e._t("after")],2)],2)},staticRenderFns:[],name:"DynamicScroller",components:{RecycleScroller:$},inheritAttrs:!1,provide:function(){return{vscrollData:this.vscrollData,vscrollParent:this}},props:S({},k,{minItemSize:{type:[Number,String],required:!0}}),data:function(){return{vscrollData:{active:!0,sizes:{},validSizes:{},keyField:this.keyField,simpleArray:!1}}},computed:{simpleArray:x,itemsWithSize:function(){for(var e=[],t=this.items,i=this.keyField,n=this.simpleArray,r=this.vscrollData.sizes,o=0;o0&&void 0!==arguments[0])||arguments[0]||this.simpleArray)&&(this.vscrollData.validSizes={}),this.$emit("vscroll:update",{force:!0})},scrollToItem:function(e){var t=this.$refs.scroller;t&&t.scrollToItem(e)},getItemSize:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this.simpleArray?null!=t?t:this.items.indexOf(e):e[this.keyField];return this.vscrollData.sizes[i]||0},scrollToBottom:function(){var e=this;if(!this.$_scrollingToBottom){this.$_scrollingToBottom=!0;var t=this.$el;this.$nextTick(function(){requestAnimationFrame(function i(){t.scrollTop=t.scrollHeight,0===e.$_undefinedSizes?e.$_scrollingToBottom=!1:requestAnimationFrame(i)})})}}}},P={name:"DynamicScrollerItem",inject:["vscrollData","vscrollParent"],props:{item:{required:!0},watchData:{type:Boolean,default:!1},active:{type:Boolean,required:!0},index:{type:Number,default:void 0},sizeDependencies:{type:[Array,Object],default:null},emitResize:{type:Boolean,default:!1},tag:{type:String,default:"div"}},computed:{id:function(){return this.vscrollData.simpleArray?this.index:this.item[this.vscrollData.keyField]},size:function(){return this.vscrollData.validSizes[this.id]&&this.vscrollData.sizes[this.id]||0}},watch:{watchData:"updateWatchData",id:function(){this.size||this.onDataUpdate()},active:function(e){e&&this.$_pendingVScrollUpdate===this.id&&this.updateSize()}},created:function(){var e=this;if(!this.$isServer){this.$_forceNextVScrollUpdate=null,this.updateWatchData();var t=function(t){e.$watch(function(){return e.sizeDependencies[t]},e.onDataUpdate)};for(var i in this.sizeDependencies)t(i);this.vscrollParent.$on("vscroll:update",this.onVscrollUpdate),this.vscrollParent.$on("vscroll:update-size",this.onVscrollUpdateSize)}},mounted:function(){this.vscrollData.active&&this.updateSize()},beforeDestroy:function(){this.vscrollParent.$off("vscroll:update",this.onVscrollUpdate),this.vscrollParent.$off("vscroll:update-size",this.onVscrollUpdateSize)},methods:{updateSize:function(){this.active&&this.vscrollData.active?this.$_pendingSizeUpdate!==this.id&&(this.$_pendingSizeUpdate=this.id,this.$_forceNextVScrollUpdate=null,this.$_pendingVScrollUpdate=null,this.active&&this.vscrollData.active&&this.computeSize(this.id)):this.$_forceNextVScrollUpdate=this.id},getBounds:function(){return this.$el.getBoundingClientRect()},updateWatchData:function(){var e=this;this.watchData?this.$_watchData=this.$watch("data",function(){e.onDataUpdate()},{deep:!0}):this.$_watchData&&(this.$_watchData(),this.$_watchData=null)},onVscrollUpdate:function(e){var t=e.force;!this.active&&t&&(this.$_pendingVScrollUpdate=this.id),this.$_forceNextVScrollUpdate!==this.id&&!t&&this.size||this.updateSize()},onDataUpdate:function(){this.updateSize()},computeSize:function(e){var t=this;this.$nextTick(function(){if(t.id===e){var i=t.getBounds(),n=Math.round("vertical"===t.vscrollParent.direction?i.height:i.width);n&&t.size!==n&&(t.vscrollParent.$_undefinedMap[e]&&(t.vscrollParent.$_undefinedSizes--,t.vscrollParent.$_undefinedMap[e]=void 0),t.$set(t.vscrollData.sizes,t.id,n),t.$set(t.vscrollData.validSizes,t.id,!0),t.emitResize&&t.$emit("resize",t.id))}t.$_pendingSizeUpdate=null})}},render:function(e){return e(this.tag,this.$slots.default)}};var T={version:"1.0.0-rc.2",install:function(e,t){var i=Object.assign({},{installComponents:!0,componentsPrefix:""},t);for(var r in i)void 0!==i[r]&&(n[r]=i[r]);i.installComponents&&function(e,t){e.component(t+"recycle-scroller",$),e.component(t+"RecycleScroller",$),e.component(t+"dynamic-scroller",O),e.component(t+"DynamicScroller",O),e.component(t+"dynamic-scroller-item",P),e.component(t+"DynamicScrollerItem",P)}(e,i.componentsPrefix)}},A=null;"undefined"!=typeof window?A=window.Vue:void 0!==e&&(A=e.Vue),A&&A.use(T)}).call(this,i(13))},function(e,t,i){var n=i(6),r={name:"a",unified:"b",non_qualified:"c",has_img_apple:"d",has_img_google:"e",has_img_twitter:"f",has_img_emojione:"g",has_img_facebook:"h",has_img_messenger:"i",keywords:"j",sheet:"k",emoticons:"l",text:"m",short_names:"n",added_in:"o"},o=function(e){var t=[],i=function(e,i){e&&(Array.isArray(e)?e:[e]).forEach(function(e){(i?e.split(/[-|_|\s]+/):[e]).forEach(function(e){e=e.toLowerCase(),-1==t.indexOf(e)&&t.push(e)})})};return i(e.short_names,!0),i(e.name,!0),i(e.keywords,!1),i(e.emoticons,!1),t.join(",")};e.exports={buildSearch:o,compress:function(e){for(var t in e.short_names=e.short_names.filter(function(t){return t!==e.short_name}),delete e.short_name,e.sheet=[e.sheet_x,e.sheet_y],delete e.sheet_x,delete e.sheet_y,e.added_in=parseInt(e.added_in),6===e.added_in&&delete e.added_in,r)e[r[t]]=e[t],delete e[t];for(var i in e){var n=e[i];Array.isArray(n)&&!n.length?delete e[i]:"string"!=typeof n||n.length?null===n&&delete e[i]:delete e[i]}},uncompress:function(e){if(!e.compressed)return e;for(var t in e.compressed=!1,e.emojis){var i=e.emojis[t];for(var s in r)i[s]=i[r[s]],delete i[r[s]];i.short_names||(i.short_names=[]),i.short_names.unshift(t),i.sheet_x=i.sheet[0],i.sheet_y=i.sheet[1],delete i.sheet,i.text||(i.text=""),i.added_in||(i.added_in=6),i.added_in=i.added_in.toFixed(1),i.search=o(i)}return e=function e(t){var i=Object.getOwnPropertyNames(t),r=!0,o=!1,s=void 0;try{for(var a,c=i[Symbol.iterator]();!(r=(a=c.next()).done);r=!0){var l=a.value,u=t[l];t[l]=u&&"object"===n(u)?e(u):u}}catch(e){o=!0,s=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw s}}return Object.freeze(t)}(e)}}},function(e,t,i){var n=i(10),r=i(11),o=i(12);e.exports=function(e){return n(e)||r(e)||o()}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function i(e,t){for(var i=0;i',custom:'',flags:'',foods:'',nature:'',objects:'',people:'',places:'',recent:'',symbols:''};function g(e,t,i,n,r,o,s,a){var c,l="function"==typeof e?e.options:e;if(t&&(l.render=t,l.staticRenderFns=i,l._compiled=!0),n&&(l.functional=!0),o&&(l._scopeId="data-v-"+o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},l._ssrRegister=c):r&&(c=a?function(){r.call(this,this.$root.$options.shadowRoot)}:r),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(e,t){return c.call(t),u(e,t)}}else{var h=l.beforeCreate;l.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:l}}var j=g({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},created:function(){this.svgs=y}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-anchors"},e._l(e.categories,function(t){return i("span",{key:t.id,class:{"emoji-mart-anchor":!0,"emoji-mart-anchor-selected":t.id==e.activeCategory.id},style:{color:t.id==e.activeCategory.id?e.color:""},attrs:{"data-title":e.i18n.categories[t.id]},on:{click:function(i){return e.$emit("click",t)}}},[i("div",{domProps:{innerHTML:e._s(e.svgs[t.id])}}),e._v(" "),i("span",{staticClass:"emoji-mart-anchor-bar",style:{backgroundColor:e.color}})])}),0)},[],!1,null,null,null).exports,_=i(4),w=i.n(_),b=i(5),S=i.n(b),k=i(6),x=i.n(k),C=String.fromCodePoint||function(){var e,t,i=[],n=-1,r=arguments.length;if(!r)return"";for(var o="";++n1114111||Math.floor(s)!=s)throw RangeError("Invalid code point: "+s);s<=65535?i.push(s):(e=55296+((s-=65536)>>10),t=s%1024+56320,i.push(e,t)),(n+1===r||i.length>16384)&&(o+=String.fromCharCode.apply(null,i),i.length=0)}return o};function E(e){var t=e.split("-").map(function(e){return"0x".concat(e)});return C.apply(null,t)}function z(e){return e.reduce(function(e,t){return-1===e.indexOf(t)&&e.push(t),e},[])}function $(e,t){var i={};for(var n in e){var r=e[n],o=r;t.hasOwnProperty(n)&&(o=t[n]),"object"===x()(o)&&(o=$(r,o)),i[n]=o}return i}function O(){if("undefined"==typeof document)return 0;var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}var P=/^(?:\:([^\:]+)\:)(?:\:skin-tone-(\d)\:)?$/,T=["1F3FA","1F3FB","1F3FC","1F3FD","1F3FE","1F3FF"],A=function(){function e(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,r=i.include,o=i.exclude,s=i.custom,a=i.recent,c=i.recentLength,l=void 0===c?20:c;w()(this,e),this._data=Object(d.uncompress)(t),this._emojisFilter=n||null,this._include=r||null,this._exclude=o||null,this._custom=s||[],this._recent=a||p.get(l),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:"recent",name:"Recent",emojis:[]},this._customCategory={id:"custom",name:"Custom",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}return S()(e,[{key:"buildIndex",value:function(){var e=this;if(this._data.categories.forEach(function(t){if(e.isCategoryNeeded(t)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach(function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)}),i.emojis.length&&e._categories.push(i)}}),this.isCategoryNeeded("custom")){if(this._custom.length>0){var t=!0,i=!1,n=void 0;try{for(var r,o=this._custom[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var s=r.value;this.addCustomEmoji(s)}}catch(e){i=!0,n=e}finally{try{t||null==o.return||o.return()}finally{if(i)throw n}}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded("recent")&&(this._recent.length&&this._recent.map(function(t){var i=!0,n=!1,r=void 0;try{for(var o,s=e._customCategory.emojis[Symbol.iterator]();!(i=(o=s.next()).done);i=!0){var a=o.value;if(a.id===t)return void e._recentCategory.emojis.push(a)}}catch(e){n=!0,r=e}finally{try{i||null==s.return||s.return()}finally{if(n)throw r}}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))}),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:"findEmoji",value:function(e,t){var i=e.match(P);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"categories",value:function(){return this._categories}},{key:"emoji",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error("Can not find emoji by id: "+e);return t}},{key:"hasEmoji",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:"nativeEmoji",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"search",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if("-"==e||"-1"==e)return[this.emoji("-1")];var n,r=e.toLowerCase().split(/[\s|,|\-|_]+/);r.length>2&&(r=[r[0],r[1]]);var o=null;return(o=(n=r.map(function(e){for(var t=i._emojis,n=i._searchIndex,r=0,o=0;o1?function(e,t){var i=z(e),n=z(t);return i.filter(function(e){return n.indexOf(e)>=0})}.apply(null,n):n.length?n[0]:[])&&o.length>t&&(o=o.slice(0,t)),o}},{key:"addCustomEmoji",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=Object(d.buildSearch)(t));var i=new M(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:"addEmoji",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new M(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var r in n._skins){var o=n._skins[r];o.native&&(this._nativeEmojis[o.native]=o)}return n.emoticons&&n.emoticons.forEach(function(i){t._emoticons[i]||(t._emoticons[i]=e)}),n}},{key:"isCategoryNeeded",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e.id)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e.id)>-1;return!(!t||i)}},{key:"isEmojiNeeded",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}]),e}(),M=function(){function e(t){if(w()(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],T){var n=T[i],r=this._data.skin_variations[n],o=Object.assign({},t);for(var s in r)o[s]=r[s];delete o.skin_variations,this._skins.push(new e(o))}for(var a in this._sanitized=I(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}return S()(e,[{key:"getSkin",value:function(e){return e&&"native"!=e&&this._skins?this._skins[e-1]:this}},{key:"getPosition",value:function(){var e=Math.round(100/51*this._data.sheet_x*100)/100,t=Math.round(100/51*this._data.sheet_y*100)/100;return"".concat(e,"% ").concat(t,"%")}}]),e}(),F=function(){function e(t,i,n,r,o,s,a){w()(this,e),this._emoji=t,this._native=r,this._skin=i,this._set=n,this._fallback=o,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===s?t.short_name:null,Object.freeze(this)}return S()(e,[{key:"getEmoji",value:function(){return this._emoji.getSkin(this._skin)}},{key:"_canRender",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:"_cssClass",value:function(){return["emoji-set-"+this._set,"emoji-type-"+this._emojiType()]}},{key:"_cssStyle",value:function(e){var t={};return this._isCustom()?t={backgroundImage:"url("+this.getEmoji()._data.imageUrl+")",backgroundSize:"100%",width:e+"px",height:e+"px"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.8*e*10)/10+"px"}):Object.assign(t,{width:e+"px",height:e+"px"})),t}},{key:"_content",value:function(){return this._isCustom()?"":this._isNative()?this.getEmoji().native:this._hasEmoji()?"":this._fallback?this._fallback(this.getEmoji()):null}},{key:"_isNative",value:function(){return this._native}},{key:"_isCustom",value:function(){return this.getEmoji().custom}},{key:"_hasEmoji",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data["has_img_"+this._set];return void 0===e||e}},{key:"_emojiType",value:function(){return this._isCustom()?"custom":this._isNative()?"native":this._hasEmoji()?"image":"fallback"}}]),e}();function I(e){var t=e.name,i=e.short_names,n=e.skin_tone,r=e.skin_variations,o=e.emoticons,s=e.unified,a=e.custom,c=e.imageUrl,l=e.id||i[0],u=":".concat(l,":");return a?{id:l,name:t,colons:u,emoticons:o,custom:a,imageUrl:c}:(n&&(u+=":skin-tone-".concat(n,":")),{id:l,name:t,colons:u,emoticons:o,unified:s.toLowerCase(),skin:n||(r?1:null),native:E(s)})}var D=i(0),V=i.n(D),R={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:"apple"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null}},N={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:"Emoji Martâ„¢"},emoji:{type:String,default:"department_store"},color:{type:String,default:"#ae65c5"},set:{type:String,default:"apple"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}},L=g({props:V()({},R,{data:{type:Object,required:!0}}),computed:{view:function(){return new F(this.emojiObject,this.skin,this.set,this.native,this.fallback,this.tooltip,this.size)},sanitizedData:function(){return this.emojiObject._sanitized},title:function(){return this.tooltip?this.emojiObject.short_name:null},emojiObject:function(){return"string"==typeof this.emoji?this.data.findEmoji(this.emoji):this.emoji}},created:function(){},methods:{onClick:function(){this.$emit("click",this.emojiObject)},onMouseEnter:function(){this.$emit("mouseenter",this.emojiObject)},onMouseLeave:function(){this.$emit("mouseleave",this.emojiObject)}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.view.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{title:e.view.title,"data-title":e.title},on:{mouseenter:e.onMouseEnter,mouseleave:e.onMouseLeave,click:e.onClick}},[i("span",{class:e.view.cssClass,style:e.view.cssStyle},[e._v(e._s(e.view.content))])]):e._e()},[],!1,null,null,null).exports,q=g({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},id:{type:String,required:!0},name:{type:String,required:!0},emojis:{type:Array},emojiProps:{type:Object,required:!0}},computed:{isVisible:function(){return!!this.emojis},isSearch:function(){return"Search"==this.name},hasResults:function(){return this.emojis.length>0},emojiObjects:function(){var e=this;return this.emojis.map(function(t){return{emojiObject:t,emojiView:new F(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}})}},components:{Emoji:L}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible&&(e.isSearch||e.hasResults)?i("div",{class:{"emoji-mart-category":!0,"emoji-mart-no-results":!e.hasResults}},[i("div",{staticClass:"emoji-mart-category-label"},[i("span",[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(" "),e._l(e.emojiObjects,function(t){var n=t.emojiObject,r=t.emojiView;return[r.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{"data-title":n.short_name,title:r.title},on:{mouseenter:function(t){e.emojiProps.onEnter(r.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(r.getEmoji())},click:function(t){e.emojiProps.onClick(r.getEmoji())}}},[i("span",{class:r.cssClass,style:r.cssStyle},[e._v(e._s(r.content))])]):e._e()]}),e._v(" "),e.hasResults?e._e():i("div",[i("emoji",{attrs:{data:e.data,emoji:"sleuth_or_spy",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(" "),i("div",{staticClass:"emoji-mart-no-results-label"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()},[],!1,null,null,null).exports,U=g({props:{skin:{type:Number,required:!0}},data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit("change",e),this.opened=!this.opened}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:{"emoji-mart-skin-swatches":!0,"emoji-mart-skin-swatches-opened":e.opened}},e._l(6,function(t){return i("span",{key:t,class:{"emoji-mart-skin-swatch":!0,"emoji-mart-skin-swatch-selected":e.skin==t}},[i("span",{class:"emoji-mart-skin emoji-mart-skin-tone-"+t,on:{click:function(i){return e.onClick(t)}}})])}),0)},[],!1,null,null,null).exports,B=g({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:L,Skins:U}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-preview"},[e.emoji?[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("div",{staticClass:"emoji-mart-preview-name"},[e._v(e._s(e.emoji.name))]),e._v(" "),i("div",{staticClass:"emoji-mart-preview-shortnames"},e._l(e.emojiShortNames,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-shortname"},[e._v(":"+e._s(t)+":")])}),0),e._v(" "),i("div",{staticClass:"emoji-mart-preview-emoticons"},e._l(e.emojiEmoticons,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-emoticon"},[e._v(e._s(t))])}),0)])]:[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("span",{staticClass:"emoji-mart-title-label"},[e._v(e._s(e.title))])]),e._v(" "),e.showSkinTones?i("div",{staticClass:"emoji-mart-preview-skins"},[i("skins",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)},[],!1,null,null,null).exports,H=g({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0}},data:function(){return{value:""}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit("search",this.value)}},methods:{clear:function(){this.value=""}},mounted:function(){var e=this.$el.querySelector("input");this.autoFocus&&e.focus()}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-search"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"text",placeholder:e.i18n.search},domProps:{value:e.value},on:{input:function(t){t.target.composing||(e.value=t.target.value)}}})])},[],!1,null,null,null).exports,W=i(3),K=i.n(W),X=(i(7),i(1)),J={search:"Search",notfound:"No Emoji Found",categories:{search:"Search Results",recent:"Frequently Used",people:"Smileys & People",nature:"Animals & Nature",foods:"Food & Drink",activity:"Activity",places:"Travel & Places",objects:"Objects",symbols:"Symbols",flags:"Flags",custom:"Custom"}},G=g({props:V()({},N,{data:{type:Object,required:!0}}),data:function(){return{activeSkin:this.skin||h.get("skin")||this.defaultSkin,activeCategory:null,previewEmoji:null,searchEmojis:null}},computed:{customStyles:function(){return V()({width:this.calculateWidth+"px"},this.pickerStyles)},emojiProps:function(){return{native:this.native,skin:this.activeSkin,set:this.set,emojiTooltip:this.emojiTooltip,emojiSize:this.emojiSize,onEnter:this.onEmojiEnter.bind(this),onLeave:this.onEmojiLeave.bind(this),onClick:this.onEmojiClick.bind(this)}},skinProps:function(){return{skin:this.activeSkin}},calculateWidth:function(){return this.perLine*(this.emojiSize+12)+12+2+O()},scrollerCategories:function(){var e=this,t=0;return this.categories.map(function(i){return{id:t++,category:i,show:!e.searchEmojis&&(e.infiniteScroll||i==e.activeCategory),mergedI18n:e.mergedI18n,data:e.data,emojisLength:i.emojis.length,emojiProps:e.emojiProps}})},mergedI18n:function(){return Object.freeze($(J,this.i18n))},idleEmoji:function(){return this.data.emoji(this.emoji)}},created:function(){var e;this.categories=[],(e=this.categories).push.apply(e,K()(this.data.categories())),this.categories=this.categories.filter(function(e){return e.emojis.length>0}),this.categories[0].first=!0,Object.freeze(this.categories),this.activeCategory=this.categories[0],this.skipScrollUpdate=!1},methods:{onScrollUpdate:function(e,t){this.skipScrollUpdate?this.skipScrollUpdate=!1:this.activeCategory=this.categories[t-1]},onAnchorClick:function(e){var t=this.categories.indexOf(e);this.$refs.dynScroller.scrollToItem(t),this.activeCategory=this.categories[t],this.skipScrollUpdate=!0},onSearch:function(e){var t=this.data.search(e,this.maxSearchResults);this.searchEmojis=t},onEmojiEnter:function(e){this.previewEmoji=e},onEmojiLeave:function(e){this.previewEmoji=null},onEmojiClick:function(e){this.$emit("select",e),p.add(e)},onSkinChange:function(e){this.activeSkin=e,h.update({skin:e}),this.$emit("skin-change",e)}},components:{Anchors:j,Category:q,Preview:B,Search:H,DynamicScroller:X.a,DynamicScrollerItem:X.b}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart",style:e.customStyles},[e.showCategories?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-anchors"},[i("anchors",{attrs:{data:e.data,i18n:e.mergedI18n,color:e.color,categories:e.categories,"active-category":e.activeCategory},on:{click:e.onAnchorClick}})],1):e._e(),e._v(" "),e._t("searchTemplate",[e.showSearch?i("search",{ref:"search",attrs:{data:e.data,i18n:e.mergedI18n,"auto-focus":e.autoFocus,"on-search":e.onSearch},on:{search:e.onSearch}}):e._e()],{data:e.data,i18n:e.i18n,autoFocus:e.autoFocus,onSearch:e.onSearch}),e._v(" "),i("category",{directives:[{name:"show",rawName:"v-show",value:e.searchEmojis,expression:"searchEmojis"}],staticClass:"emoji-mart-search-results",attrs:{data:e.data,i18n:e.mergedI18n,id:"search",name:"Search",emojis:e.searchEmojis,"emoji-props":e.emojiProps}}),e._v(" "),i("DynamicScroller",{directives:[{name:"show",rawName:"v-show",value:!e.searchEmojis,expression:"!searchEmojis"}],ref:"dynScroller",staticClass:"scroller",attrs:{items:e.scrollerCategories,"min-item-size":60,buffer:400,"key-field":"id","emit-update":!0},on:{update:e.onScrollUpdate},scopedSlots:e._u([{key:"default",fn:function(e){var t=e.item,n=e.active,r=e.index;return[i("DynamicScrollerItem",{attrs:{item:t,active:n,"data-index":r}},[i("category",{directives:[{name:"show",rawName:"v-show",value:t.show,expression:"item.show"}],key:t.category.id,ref:"categories",attrs:{data:t.data,i18n:t.mergedI18n,id:t.category.id,name:t.category.name,emojis:t.category.emojis,"emoji-props":t.emojiProps}})],1)]}}])}),e._v(" "),e._t("previewTemplate",[e.showPreview?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-preview"},[i("preview",{attrs:{data:e.data,title:e.title,emoji:e.previewEmoji,"idle-emoji":e.idleEmoji,"show-skin-tones":e.showSkinTones,"emoji-props":e.emojiProps,"skin-props":e.skinProps,"on-skin-change":e.onSkinChange}})],1):e._e()],{data:e.data,title:e.title,emoji:e.previewEmoji,idleEmoji:e.idleEmoji,showSkinTones:e.showSkinTones,emojiProps:e.emojiProps,skinProps:e.skinProps,onSkinChange:e.onSkinChange})],2)},[],!1,null,null,null).exports,Y={search:"Search",notfound:"No Emoji Found",categories:{search:"Search Results",recent:"Frequently Used",people:"Smileys & People",nature:"Animals & Nature",foods:"Food & Drink",activity:"Activity",places:"Travel & Places",objects:"Objects",symbols:"Symbols",flags:"Flags",custom:"Custom"}},Q=g({props:V()({},N,{data:{type:Object,required:!0}}),data:function(){return{activeSkin:this.skin||h.get("skin")||this.defaultSkin,activeCategory:null,previewEmoji:null,searchEmojis:null}},computed:{customStyles:function(){return V()({width:this.calculateWidth+"px"},this.pickerStyles)},emojiProps:function(){return{native:this.native,skin:this.activeSkin,set:this.set,emojiTooltip:this.emojiTooltip,emojiSize:this.emojiSize,onEnter:this.onEmojiEnter.bind(this),onLeave:this.onEmojiLeave.bind(this),onClick:this.onEmojiClick.bind(this)}},skinProps:function(){return{skin:this.activeSkin}},calculateWidth:function(){return this.perLine*(this.emojiSize+12)+12+2+O()},filteredCategories:function(){var e=this;return this.categories.filter(function(t){var i=!e.include||!e.include.length||e.include.indexOf(t.id)>-1,n=!(!e.exclude||!e.exclude.length)&&e.exclude.indexOf(t.id)>-1,r=t.emojis.length>0;return e.emojisToShowFilter&&(r=t.emojis.some(function(t){return e.emojisToShowFilter(e.data.emojis[t]||t)})),i&&!n&&r})},mergedI18n:function(){return Object.freeze($(Y,this.i18n))},idleEmoji:function(){return this.data.emoji(this.emoji)}},created:function(){var e;this.categories=[],(e=this.categories).push.apply(e,K()(this.data.categories())),this.categories=this.categories.filter(function(e){return e.emojis.length>0}),this.categories[0].first=!0,Object.freeze(this.categories),this.activeCategory=this.categories[0],this.skipScrollUpdate=!1},methods:{onScroll:function(){this.infiniteScroll&&!this.waitingForPaint&&(this.waitingForPaint=!0,window.requestAnimationFrame(this.onScrollPaint.bind(this)))},onScrollPaint:function(){this.waitingForPaint=!1;for(var e=this.$refs.scroll.scrollTop,t=this.filteredCategories[0],i=0,n=this.filteredCategories.length;ie)break;t=r}this.activeCategory=t},onAnchorClick:function(e){var t=this,i=this.filteredCategories.indexOf(e),n=this.$refs.categories[i],r=function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t.$refs.scroll.scrollTop=i}};this.searchEmojis?(this.onSearch(null),this.$refs.search.clear(),this.$nextTick(r)):this.infiniteScroll?r():this.activeCategory=this.filteredCategories[i]},onSearch:function(e){var t=this.data.search(e,this.maxSearchResults);this.searchEmojis=t},onEmojiEnter:function(e){this.previewEmoji=e},onEmojiLeave:function(e){this.previewEmoji=null},onEmojiClick:function(e){this.$emit("select",e),p.add(e)},onSkinChange:function(e){this.activeSkin=e,h.update({skin:e}),this.$emit("skin-change",e)}},components:{Anchors:j,Category:q,Preview:B,Search:H,DynamicScroller:X.a,DynamicScrollerItem:X.b}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart emoji-mart-static",style:e.customStyles},[e.showCategories?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-anchors"},[i("anchors",{attrs:{data:e.data,i18n:e.mergedI18n,color:e.color,categories:e.categories,"active-category":e.activeCategory},on:{click:e.onAnchorClick}})],1):e._e(),e._v(" "),e._t("searchTemplate",[e.showSearch?i("search",{ref:"search",attrs:{data:e.data,i18n:e.mergedI18n,"auto-focus":e.autoFocus,"on-search":e.onSearch},on:{search:e.onSearch}}):e._e()],{data:e.data,i18n:e.i18n,autoFocus:e.autoFocus,onSearch:e.onSearch}),e._v(" "),i("div",{ref:"scroll",staticClass:"emoji-mart-scroll",on:{scroll:e.onScroll}},[i("category",{directives:[{name:"show",rawName:"v-show",value:e.searchEmojis,expression:"searchEmojis"}],attrs:{data:e.data,i18n:e.mergedI18n,id:"search",name:"Search",emojis:e.searchEmojis,"emoji-props":e.emojiProps}}),e._v(" "),e._l(e.filteredCategories,function(t){return i("category",{directives:[{name:"show",rawName:"v-show",value:!e.searchEmojis&&(e.infiniteScroll||t==e.activeCategory),expression:"!searchEmojis && (infiniteScroll || category == activeCategory)"}],key:t.id,ref:"categories",refInFor:!0,attrs:{data:e.data,i18n:e.mergedI18n,id:t.id,name:t.name,emojis:t.emojis,"emoji-props":e.emojiProps}})})],2),e._v(" "),e._t("previewTemplate",[e.showPreview?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-preview"},[i("preview",{attrs:{data:e.data,title:e.title,emoji:e.previewEmoji,"idle-emoji":e.idleEmoji,"show-skin-tones":e.showSkinTones,"emoji-props":e.emojiProps,"skin-props":e.skinProps,"on-skin-change":e.onSkinChange}})],1):e._e()],{data:e.data,title:e.title,emoji:e.previewEmoji,idleEmoji:e.idleEmoji,showSkinTones:e.showSkinTones,emojiProps:e.emojiProps,skinProps:e.skinProps,onSkinChange:e.onSkinChange})],2)},[],!1,null,null,null).exports;i.d(t,"Picker",function(){return G}),i.d(t,"StaticPicker",function(){return Q}),i.d(t,"Emoji",function(){return L}),i.d(t,"Anchors",function(){return j}),i.d(t,"Preview",function(){return B}),i.d(t,"Search",function(){return H}),i.d(t,"Category",function(){return q}),i.d(t,"Skins",function(){return U}),i.d(t,"EmojiIndex",function(){return A}),i.d(t,"EmojiView",function(){return F}),i.d(t,"EmojiData",function(){return M}),i.d(t,"sanitize",function(){return I}),i.d(t,"uncompress",function(){return d.uncompress}),i.d(t,"store",function(){return h}),i.d(t,"frequently",function(){return p})}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("vue")):"function"==typeof define&&define.amd?define(["vue"],t):"object"==typeof exports?exports.EmojiMart=t(require("vue")):e.EmojiMart=t(e.Vue)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=14)}([function(e,t,i){var n=i(9);e.exports=function(e){for(var t=1;t0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var i=e.indexOf("rv:");return parseInt(e.substring(i+3,e.indexOf(".",i)),10)}var n=e.indexOf("Edge/");return n>0?parseInt(e.substring(n+5,e.indexOf(".",n)),10):-1}())}var s={render:function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"resize-observer",attrs:{tabindex:"-1"}})},staticRenderFns:[],_scopeId:"data-v-b329ee4c",name:"resize-observer",methods:{compareAndNotify:function(){this._w===this.$el.offsetWidth&&this._h===this.$el.offsetHeight||(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.$emit("notify"))},addResizeHandlers:function(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers:function(){this._resizeObject&&this._resizeObject.onload&&(!r&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),delete this._resizeObject.onload)}},mounted:function(){var e=this;o(),this.$nextTick(function(){e._w=e.$el.offsetWidth,e._h=e.$el.offsetHeight});var t=document.createElement("object");this._resizeObject=t,t.setAttribute("aria-hidden","true"),t.setAttribute("tabindex",-1),t.onload=this.addResizeHandlers,t.type="text/html",r&&this.$el.appendChild(t),t.data="about:blank",r||this.$el.appendChild(t)},beforeDestroy:function(){this.removeResizeHandlers()}};var a={version:"0.4.5",install:function(e){e.component("resize-observer",s),e.component("ResizeObserver",s)}},c=null;"undefined"!=typeof window?c=window.Vue:void 0!==e&&(c=e.Vue),c&&c.use(a);var l="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},u=(function(){function e(e){this.value=e}function t(t){var i,n;function r(i,n){try{var s=t[i](n),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?r(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};n?n=n.next=a:(i=n=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),h=function(){function e(e,t){for(var i=0;i1?t-1:0),c=1;c=l.threshold;if(i===l.oldResult)return;l.oldResult=i,l.callback(i,t),i&&l.options.once&&(l.frozen=!0,l.destroyObserver())}},this.options.intersection),t.context.$nextTick(function(){l.observer.observe(l.el)}))}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&this.options.intersection.threshold||0}}]),e}();function f(e,t,i){var n=t.value;if("undefined"==typeof IntersectionObserver)console.warn("[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill");else{var r=new m(e,n,i);e._vue_visibilityState=r}}var v={bind:f,update:function(e,t,i){var n=t.value;if(!function e(t,i){if(t===i)return!0;if("object"===(void 0===t?"undefined":l(t))){for(var n in t)if(!e(t[n],i[n]))return!1;return!0}return!1}(n,t.oldValue)){var r=e._vue_visibilityState;r?r.createObserver(n,i):f(e,{value:n},i)}},unbind:function(e){var t=e._vue_visibilityState;t&&(t.destroyObserver(),delete e._vue_visibilityState)}};var p={version:"0.4.3",install:function(e){e.directive("observe-visibility",v)}},y=null;"undefined"!=typeof window?y=window.Vue:void 0!==e&&(y=e.Vue),y&&y.use(p);var g="undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{};var j,_=(function(e){var t,i;t=g,i=function(){var e=/(auto|scroll)/,t=function(e,i){return null===e.parentNode?i:t(e.parentNode,i.concat([e]))},i=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},n=function(t){return e.test(function(e){return i(e,"overflow")+i(e,"overflow-y")+i(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var i=t(e.parentNode,[]),r=0;r1&&void 0!==arguments[1]&&arguments[1],i=this.$_unusedViews,n=e.nr.type,r=i.get(n);r||(r=[],i.set(n,r)),r.push(e),t||(e.nr.used=!1,e.position=-9999,this.$_views.delete(e.nr.key))},handleResize:function(){this.$emit("resize"),this.ready&&this.updateVisibleItems(!1)},handleScroll:function(e){var t=this;this.$_scrollDirty||(this.$_scrollDirty=!0,requestAnimationFrame(function(){t.$_scrollDirty=!1,t.updateVisibleItems(!1).continuous||(clearTimeout(t.$_refreshTimout),t.$_refreshTimout=setTimeout(t.handleScroll,100))}))},handleVisibilityChange:function(e,t){var i=this;this.ready&&(e||0!==t.boundingClientRect.width||0!==t.boundingClientRect.height?(this.$emit("visible"),requestAnimationFrame(function(){i.updateVisibleItems(!1)})):this.$emit("hidden"))},updateVisibleItems:function(e){var t=this.itemSize,i=this.typeField,r=this.simpleArray?null:this.keyField,o=this.items,s=o.length,a=this.sizes,c=this.$_views,l=this.$_unusedViews,u=this.pool,h=void 0,d=void 0,m=void 0;if(s)if(this.$isServer)h=0,d=this.prerender,m=null;else{var f=this.getScroll(),v=this.buffer;if(f.start-=v,f.end+=v,null===t){var p=0,y=s-1,g=~~(s/2),j=void 0;do{j=g,a[g].accumulatorf.start&&(y=g),g=~~((p+y)/2)}while(g!==j);for(g<0&&(g=0),h=g,m=a[s-1].accumulator,d=g;ds&&(d=s)}else(h=~~(f.start/t))<0&&(h=0),(d=Math.ceil(f.end/t))>s&&(d=s),m=s*t}else h=d=m=0;d-h>n.itemsLimit&&this.itemsLimitError(),this.totalSize=m;var _=void 0,w=h<=this.$_endIndex&&d>=this.$_startIndex,b=void 0;if(this.$_continuous!==w){if(w){c.clear(),l.clear();for(var S=0,k=u.length;S=d)&&this.unuseView(_));w||(b=new Map);for(var E=void 0,z=void 0,$=void 0,O=void 0,P=h;Pr&&(s=r-o),i={start:o,end:o+s}}else i=t?{start:e.scrollTop,end:e.scrollTop+e.clientHeight}:{start:e.scrollLeft,end:e.scrollLeft+e.clientWidth};return i},applyPageMode:function(){this.pageMode?this.addListeners():this.removeListeners()},addListeners:function(){this.listenerTarget=this.getListenerTarget(),this.listenerTarget.addEventListener("scroll",this.handleScroll,!!C&&{passive:!0}),this.listenerTarget.addEventListener("resize",this.handleResize)},removeListeners:function(){this.listenerTarget&&(this.listenerTarget.removeEventListener("scroll",this.handleScroll),this.listenerTarget.removeEventListener("resize",this.handleResize),this.listenerTarget=null)},scrollToItem:function(e){var t=void 0;t=null===this.itemSize?e>0?this.sizes[e-1].accumulator:0:e*this.itemSize,this.scrollToPosition(t)},scrollToPosition:function(e){"vertical"===this.direction?this.$el.scrollTop=e:this.$el.scrollLeft=e},itemsLimitError:function(){var e=this;throw setTimeout(function(){console.log("It seems the scroller element isn't scrolling, so it tries to render all the items at once.","Scroller:",e.$el),console.log("Make sure the scroller has a fixed height (or width) and 'overflow-y' (or 'overflow-x') set to 'auto' so it can scroll correctly and only render the items visible in the scroll viewport.")}),new Error("Rendered items limit reached")}}},O={render:function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("RecycleScroller",e._g(e._b({ref:"scroller",attrs:{items:e.itemsWithSize,"min-item-size":e.minItemSize,direction:e.direction,"key-field":"id"},on:{resize:e.onScrollerResize,visible:e.onScrollerVisible},scopedSlots:e._u([{key:"default",fn:function(t){var i=t.item,n=t.index,r=t.active;return[e._t("default",null,null,{item:i.item,index:n,active:r,itemWithSize:i})]}}])},"RecycleScroller",e.$attrs,!1),e.listeners),[i("template",{slot:"before"},[e._t("before")],2),e._v(" "),i("template",{slot:"after"},[e._t("after")],2)],2)},staticRenderFns:[],name:"DynamicScroller",components:{RecycleScroller:$},inheritAttrs:!1,provide:function(){return{vscrollData:this.vscrollData,vscrollParent:this}},props:S({},k,{minItemSize:{type:[Number,String],required:!0}}),data:function(){return{vscrollData:{active:!0,sizes:{},validSizes:{},keyField:this.keyField,simpleArray:!1}}},computed:{simpleArray:x,itemsWithSize:function(){for(var e=[],t=this.items,i=this.keyField,n=this.simpleArray,r=this.vscrollData.sizes,o=0;o0&&void 0!==arguments[0])||arguments[0]||this.simpleArray)&&(this.vscrollData.validSizes={}),this.$emit("vscroll:update",{force:!0})},scrollToItem:function(e){var t=this.$refs.scroller;t&&t.scrollToItem(e)},getItemSize:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=this.simpleArray?null!=t?t:this.items.indexOf(e):e[this.keyField];return this.vscrollData.sizes[i]||0},scrollToBottom:function(){var e=this;if(!this.$_scrollingToBottom){this.$_scrollingToBottom=!0;var t=this.$el;this.$nextTick(function(){requestAnimationFrame(function i(){t.scrollTop=t.scrollHeight,0===e.$_undefinedSizes?e.$_scrollingToBottom=!1:requestAnimationFrame(i)})})}}}},P={name:"DynamicScrollerItem",inject:["vscrollData","vscrollParent"],props:{item:{required:!0},watchData:{type:Boolean,default:!1},active:{type:Boolean,required:!0},index:{type:Number,default:void 0},sizeDependencies:{type:[Array,Object],default:null},emitResize:{type:Boolean,default:!1},tag:{type:String,default:"div"}},computed:{id:function(){return this.vscrollData.simpleArray?this.index:this.item[this.vscrollData.keyField]},size:function(){return this.vscrollData.validSizes[this.id]&&this.vscrollData.sizes[this.id]||0}},watch:{watchData:"updateWatchData",id:function(){this.size||this.onDataUpdate()},active:function(e){e&&this.$_pendingVScrollUpdate===this.id&&this.updateSize()}},created:function(){var e=this;if(!this.$isServer){this.$_forceNextVScrollUpdate=null,this.updateWatchData();var t=function(t){e.$watch(function(){return e.sizeDependencies[t]},e.onDataUpdate)};for(var i in this.sizeDependencies)t(i);this.vscrollParent.$on("vscroll:update",this.onVscrollUpdate),this.vscrollParent.$on("vscroll:update-size",this.onVscrollUpdateSize)}},mounted:function(){this.vscrollData.active&&this.updateSize()},beforeDestroy:function(){this.vscrollParent.$off("vscroll:update",this.onVscrollUpdate),this.vscrollParent.$off("vscroll:update-size",this.onVscrollUpdateSize)},methods:{updateSize:function(){this.active&&this.vscrollData.active?this.$_pendingSizeUpdate!==this.id&&(this.$_pendingSizeUpdate=this.id,this.$_forceNextVScrollUpdate=null,this.$_pendingVScrollUpdate=null,this.active&&this.vscrollData.active&&this.computeSize(this.id)):this.$_forceNextVScrollUpdate=this.id},getBounds:function(){return this.$el.getBoundingClientRect()},updateWatchData:function(){var e=this;this.watchData?this.$_watchData=this.$watch("data",function(){e.onDataUpdate()},{deep:!0}):this.$_watchData&&(this.$_watchData(),this.$_watchData=null)},onVscrollUpdate:function(e){var t=e.force;!this.active&&t&&(this.$_pendingVScrollUpdate=this.id),this.$_forceNextVScrollUpdate!==this.id&&!t&&this.size||this.updateSize()},onDataUpdate:function(){this.updateSize()},computeSize:function(e){var t=this;this.$nextTick(function(){if(t.id===e){var i=t.getBounds(),n=Math.round("vertical"===t.vscrollParent.direction?i.height:i.width);n&&t.size!==n&&(t.vscrollParent.$_undefinedMap[e]&&(t.vscrollParent.$_undefinedSizes--,t.vscrollParent.$_undefinedMap[e]=void 0),t.$set(t.vscrollData.sizes,t.id,n),t.$set(t.vscrollData.validSizes,t.id,!0),t.emitResize&&t.$emit("resize",t.id))}t.$_pendingSizeUpdate=null})}},render:function(e){return e(this.tag,this.$slots.default)}};var T={version:"1.0.0-rc.2",install:function(e,t){var i=Object.assign({},{installComponents:!0,componentsPrefix:""},t);for(var r in i)void 0!==i[r]&&(n[r]=i[r]);i.installComponents&&function(e,t){e.component(t+"recycle-scroller",$),e.component(t+"RecycleScroller",$),e.component(t+"dynamic-scroller",O),e.component(t+"DynamicScroller",O),e.component(t+"dynamic-scroller-item",P),e.component(t+"DynamicScrollerItem",P)}(e,i.componentsPrefix)}},A=null;"undefined"!=typeof window?A=window.Vue:void 0!==e&&(A=e.Vue),A&&A.use(T)}).call(this,i(13))},function(e,t,i){var n=i(6),r={name:"a",unified:"b",non_qualified:"c",has_img_apple:"d",has_img_google:"e",has_img_twitter:"f",has_img_emojione:"g",has_img_facebook:"h",has_img_messenger:"i",keywords:"j",sheet:"k",emoticons:"l",text:"m",short_names:"n",added_in:"o"},o=function(e){var t=[],i=function(e,i){e&&(Array.isArray(e)?e:[e]).forEach(function(e){(i?e.split(/[-|_|\s]+/):[e]).forEach(function(e){e=e.toLowerCase(),-1==t.indexOf(e)&&t.push(e)})})};return i(e.short_names,!0),i(e.name,!0),i(e.keywords,!1),i(e.emoticons,!1),t.join(",")};e.exports={buildSearch:o,compress:function(e){for(var t in e.short_names=e.short_names.filter(function(t){return t!==e.short_name}),delete e.short_name,e.sheet=[e.sheet_x,e.sheet_y],delete e.sheet_x,delete e.sheet_y,e.added_in=parseInt(e.added_in),6===e.added_in&&delete e.added_in,r)e[r[t]]=e[t],delete e[t];for(var i in e){var n=e[i];Array.isArray(n)&&!n.length?delete e[i]:"string"!=typeof n||n.length?null===n&&delete e[i]:delete e[i]}},uncompress:function(e){if(!e.compressed)return e;for(var t in e.compressed=!1,e.emojis){var i=e.emojis[t];for(var s in r)i[s]=i[r[s]],delete i[r[s]];i.short_names||(i.short_names=[]),i.short_names.unshift(t),i.sheet_x=i.sheet[0],i.sheet_y=i.sheet[1],delete i.sheet,i.text||(i.text=""),i.added_in||(i.added_in=6),i.added_in=i.added_in.toFixed(1),i.search=o(i)}return e=function e(t){var i=Object.getOwnPropertyNames(t),r=!0,o=!1,s=void 0;try{for(var a,c=i[Symbol.iterator]();!(r=(a=c.next()).done);r=!0){var l=a.value,u=t[l];t[l]=u&&"object"===n(u)?e(u):u}}catch(e){o=!0,s=e}finally{try{r||null==c.return||c.return()}finally{if(o)throw s}}return Object.freeze(t)}(e)}}},function(e,t,i){var n=i(10),r=i(11),o=i(12);e.exports=function(e){return n(e)||r(e)||o()}},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function i(e,t){for(var i=0;i',custom:'',flags:'',foods:'',nature:'',objects:'',people:'',places:'',recent:'',symbols:''};function g(e,t,i,n,r,o,s,a){var c,l="function"==typeof e?e.options:e;if(t&&(l.render=t,l.staticRenderFns=i,l._compiled=!0),n&&(l.functional=!0),o&&(l._scopeId="data-v-"+o),s?(c=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),r&&r.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(s)},l._ssrRegister=c):r&&(c=a?function(){r.call(this,this.$root.$options.shadowRoot)}:r),c)if(l.functional){l._injectStyles=c;var u=l.render;l.render=function(e,t){return c.call(t),u(e,t)}}else{var h=l.beforeCreate;l.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:l}}var j=g({props:{i18n:{type:Object,required:!0},color:{type:String},categories:{type:Array,required:!0},activeCategory:{type:Object,default:function(){return{}}}},created:function(){this.svgs=y}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-anchors"},e._l(e.categories,function(t){return i("span",{key:t.id,class:{"emoji-mart-anchor":!0,"emoji-mart-anchor-selected":t.id==e.activeCategory.id},style:{color:t.id==e.activeCategory.id?e.color:""},attrs:{"data-title":e.i18n.categories[t.id]},on:{click:function(i){return e.$emit("click",t)}}},[i("div",{domProps:{innerHTML:e._s(e.svgs[t.id])}}),e._v(" "),i("span",{staticClass:"emoji-mart-anchor-bar",style:{backgroundColor:e.color}})])}),0)},[],!1,null,null,null).exports,_=i(4),w=i.n(_),b=i(5),S=i.n(b),k=i(6),x=i.n(k),C=String.fromCodePoint||function(){var e,t,i=[],n=-1,r=arguments.length;if(!r)return"";for(var o="";++n1114111||Math.floor(s)!=s)throw RangeError("Invalid code point: "+s);s<=65535?i.push(s):(e=55296+((s-=65536)>>10),t=s%1024+56320,i.push(e,t)),(n+1===r||i.length>16384)&&(o+=String.fromCharCode.apply(null,i),i.length=0)}return o};function E(e){var t=e.split("-").map(function(e){return"0x".concat(e)});return C.apply(null,t)}function z(e){return e.reduce(function(e,t){return-1===e.indexOf(t)&&e.push(t),e},[])}function $(e,t){var i={};for(var n in e){var r=e[n],o=r;t.hasOwnProperty(n)&&(o=t[n]),"object"===x()(o)&&(o=$(r,o)),i[n]=o}return i}function O(){if("undefined"==typeof document)return 0;var e=document.createElement("div");e.style.width="100px",e.style.height="100px",e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",document.body.appendChild(e);var t=e.offsetWidth-e.clientWidth;return document.body.removeChild(e),t}var P=/^(?:\:([^\:]+)\:)(?:\:skin-tone-(\d)\:)?$/,T=["1F3FA","1F3FB","1F3FC","1F3FD","1F3FE","1F3FF"],A=function(){function e(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i.emojisToShowFilter,r=i.include,o=i.exclude,s=i.custom,a=i.recent,c=i.recentLength,l=void 0===c?20:c;w()(this,e),this._data=Object(d.uncompress)(t),this._emojisFilter=n||null,this._include=r||null,this._exclude=o||null,this._custom=s||[],this._recent=a||p.get(l),this._emojis={},this._nativeEmojis={},this._emoticons={},this._categories=[],this._recentCategory={id:"recent",name:"Recent",emojis:[]},this._customCategory={id:"custom",name:"Custom",emojis:[]},this._searchIndex={},this.buildIndex(),Object.freeze(this)}return S()(e,[{key:"buildIndex",value:function(){var e=this;if(this._data.categories.forEach(function(t){if(e.isCategoryNeeded(t.id)){var i={id:t.id,name:t.name,emojis:[]};t.emojis.forEach(function(t){var n=e.addEmoji(t);n&&i.emojis.push(n)}),i.emojis.length&&e._categories.push(i)}}),this.isCategoryNeeded("custom")){if(this._custom.length>0){var t=!0,i=!1,n=void 0;try{for(var r,o=this._custom[Symbol.iterator]();!(t=(r=o.next()).done);t=!0){var s=r.value;this.addCustomEmoji(s)}}catch(e){i=!0,n=e}finally{try{t||null==o.return||o.return()}finally{if(i)throw n}}}this._customCategory.emojis.length&&this._categories.push(this._customCategory)}this.isCategoryNeeded("recent")&&(this._recent.length&&this._recent.map(function(t){var i=!0,n=!1,r=void 0;try{for(var o,s=e._customCategory.emojis[Symbol.iterator]();!(i=(o=s.next()).done);i=!0){var a=o.value;if(a.id===t)return void e._recentCategory.emojis.push(a)}}catch(e){n=!0,r=e}finally{try{i||null==s.return||s.return()}finally{if(n)throw r}}e.hasEmoji(t)&&e._recentCategory.emojis.push(e.emoji(t))}),this._recentCategory.emojis.length&&this._categories.unshift(this._recentCategory))}},{key:"findEmoji",value:function(e,t){var i=e.match(P);if(i&&(e=i[1],i[2]&&(t=parseInt(i[2],10))),this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),this._emojis.hasOwnProperty(e)){var n=this._emojis[e];return t?n.getSkin(t):n}return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"categories",value:function(){return this._categories}},{key:"emoji",value:function(e){this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]);var t=this._emojis[e];if(!t)throw new Error("Can not find emoji by id: "+e);return t}},{key:"hasEmoji",value:function(e){return this._data.aliases.hasOwnProperty(e)&&(e=this._data.aliases[e]),!!this._emojis[e]}},{key:"nativeEmoji",value:function(e){return this._nativeEmojis.hasOwnProperty(e)?this._nativeEmojis[e]:null}},{key:"search",value:function(e,t){var i=this;if(t||(t=75),!e.length)return null;if("-"==e||"-1"==e)return[this.emoji("-1")];var n,r=e.toLowerCase().split(/[\s|,|\-|_]+/);r.length>2&&(r=[r[0],r[1]]);var o=null;return(o=(n=r.map(function(e){for(var t=i._emojis,n=i._searchIndex,r=0,o=0;o1?function(e,t){var i=z(e),n=z(t);return i.filter(function(e){return n.indexOf(e)>=0})}.apply(null,n):n.length?n[0]:[])&&o.length>t&&(o=o.slice(0,t)),o}},{key:"addCustomEmoji",value:function(e){var t=Object.assign({},e,{id:e.short_names[0],custom:!0});t.search||(t.search=Object(d.buildSearch)(t));var i=new M(t);return this._emojis[i.id]=i,this._customCategory.emojis.push(i),i}},{key:"addEmoji",value:function(e){var t=this,i=this._data.emojis[e];if(!this.isEmojiNeeded(i))return!1;var n=new M(i);if(this._emojis[e]=n,n.native&&(this._nativeEmojis[n.native]=n),n._skins)for(var r in n._skins){var o=n._skins[r];o.native&&(this._nativeEmojis[o.native]=o)}return n.emoticons&&n.emoticons.forEach(function(i){t._emoticons[i]||(t._emoticons[i]=e)}),n}},{key:"isCategoryNeeded",value:function(e){var t=!this._include||!this._include.length||this._include.indexOf(e)>-1,i=!(!this._exclude||!this._exclude.length)&&this._exclude.indexOf(e)>-1;return!(!t||i)}},{key:"isEmojiNeeded",value:function(e){return!this._emojisFilter||this._emojisFilter(e)}}]),e}(),M=function(){function e(t){if(w()(this,e),this._data=Object.assign({},t),this._skins=null,this._data.skin_variations)for(var i in this._skins=[],T){var n=T[i],r=this._data.skin_variations[n],o=Object.assign({},t);for(var s in r)o[s]=r[s];delete o.skin_variations,this._skins.push(new e(o))}for(var a in this._sanitized=I(this._data),this._sanitized)this[a]=this._sanitized[a];this.short_names=this._data.short_names,this.short_name=this._data.short_names[0],Object.freeze(this)}return S()(e,[{key:"getSkin",value:function(e){return e&&"native"!=e&&this._skins?this._skins[e-1]:this}},{key:"getPosition",value:function(){var e=Math.round(100/51*this._data.sheet_x*100)/100,t=Math.round(100/51*this._data.sheet_y*100)/100;return"".concat(e,"% ").concat(t,"%")}}]),e}(),F=function(){function e(t,i,n,r,o,s,a){w()(this,e),this._emoji=t,this._native=r,this._skin=i,this._set=n,this._fallback=o,this.canRender=this._canRender(),this.cssClass=this._cssClass(),this.cssStyle=this._cssStyle(a),this.content=this._content(),this.title=!0===s?t.short_name:null,Object.freeze(this)}return S()(e,[{key:"getEmoji",value:function(){return this._emoji.getSkin(this._skin)}},{key:"_canRender",value:function(){return this._isCustom()||this._isNative()||this._hasEmoji()||this._fallback}},{key:"_cssClass",value:function(){return["emoji-set-"+this._set,"emoji-type-"+this._emojiType()]}},{key:"_cssStyle",value:function(e){var t={};return this._isCustom()?t={backgroundImage:"url("+this.getEmoji()._data.imageUrl+")",backgroundSize:"100%",width:e+"px",height:e+"px"}:this._hasEmoji()&&!this._isNative()&&(t={backgroundPosition:this.getEmoji().getPosition()}),e&&(t=this._isNative()?Object.assign(t,{fontSize:Math.round(.8*e*10)/10+"px"}):Object.assign(t,{width:e+"px",height:e+"px"})),t}},{key:"_content",value:function(){return this._isCustom()?"":this._isNative()?this.getEmoji().native:this._hasEmoji()?"":this._fallback?this._fallback(this.getEmoji()):null}},{key:"_isNative",value:function(){return this._native}},{key:"_isCustom",value:function(){return this.getEmoji().custom}},{key:"_hasEmoji",value:function(){if(!this.getEmoji()._data)return!1;var e=this.getEmoji()._data["has_img_"+this._set];return void 0===e||e}},{key:"_emojiType",value:function(){return this._isCustom()?"custom":this._isNative()?"native":this._hasEmoji()?"image":"fallback"}}]),e}();function I(e){var t=e.name,i=e.short_names,n=e.skin_tone,r=e.skin_variations,o=e.emoticons,s=e.unified,a=e.custom,c=e.imageUrl,l=e.id||i[0],u=":".concat(l,":");return a?{id:l,name:t,colons:u,emoticons:o,custom:a,imageUrl:c}:(n&&(u+=":skin-tone-".concat(n,":")),{id:l,name:t,colons:u,emoticons:o,unified:s.toLowerCase(),skin:n||(r?1:null),native:E(s)})}var D=i(0),V=i.n(D),R={native:{type:Boolean,default:!1},tooltip:{type:Boolean,default:!1},fallback:{type:Function},skin:{type:Number,default:1},set:{type:String,default:"apple"},emoji:{type:[String,Object],required:!0},size:{type:Number,default:null}},N={perLine:{type:Number,default:9},maxSearchResults:{type:Number,default:75},emojiSize:{type:Number,default:24},title:{type:String,default:"Emoji Martâ„¢"},emoji:{type:String,default:"department_store"},color:{type:String,default:"#ae65c5"},set:{type:String,default:"apple"},skin:{type:Number,default:null},defaultSkin:{type:Number,default:1},native:{type:Boolean,default:!1},emojiTooltip:{type:Boolean,default:!1},autoFocus:{type:Boolean,default:!1},i18n:{type:Object,default:function(){return{}}},showPreview:{type:Boolean,default:!0},showSearch:{type:Boolean,default:!0},showCategories:{type:Boolean,default:!0},showSkinTones:{type:Boolean,default:!0},infiniteScroll:{type:Boolean,default:!0},pickerStyles:{type:Object,default:function(){return{}}}},L=g({props:V()({},R,{data:{type:Object,required:!0}}),computed:{view:function(){return new F(this.emojiObject,this.skin,this.set,this.native,this.fallback,this.tooltip,this.size)},sanitizedData:function(){return this.emojiObject._sanitized},title:function(){return this.tooltip?this.emojiObject.short_name:null},emojiObject:function(){return"string"==typeof this.emoji?this.data.findEmoji(this.emoji):this.emoji}},created:function(){},methods:{onClick:function(){this.$emit("click",this.emojiObject)},onMouseEnter:function(){this.$emit("mouseenter",this.emojiObject)},onMouseLeave:function(){this.$emit("mouseleave",this.emojiObject)}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.view.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{title:e.view.title,"data-title":e.title},on:{mouseenter:e.onMouseEnter,mouseleave:e.onMouseLeave,click:e.onClick}},[i("span",{class:e.view.cssClass,style:e.view.cssStyle},[e._v(e._s(e.view.content))])]):e._e()},[],!1,null,null,null).exports,q=g({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},id:{type:String,required:!0},name:{type:String,required:!0},emojis:{type:Array},emojiProps:{type:Object,required:!0}},computed:{isVisible:function(){return!!this.emojis},isSearch:function(){return"Search"==this.name},hasResults:function(){return this.emojis.length>0},emojiObjects:function(){var e=this;return this.emojis.map(function(t){return{emojiObject:t,emojiView:new F(t,e.emojiProps.skin,e.emojiProps.set,e.emojiProps.native,e.emojiProps.fallback,e.emojiProps.emojiTooltip,e.emojiProps.emojiSize)}})}},components:{Emoji:L}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return e.isVisible&&(e.isSearch||e.hasResults)?i("div",{class:{"emoji-mart-category":!0,"emoji-mart-no-results":!e.hasResults}},[i("div",{staticClass:"emoji-mart-category-label"},[i("span",[e._v(e._s(e.i18n.categories[e.id]))])]),e._v(" "),e._l(e.emojiObjects,function(t){var n=t.emojiObject,r=t.emojiView;return[r.canRender?i("span",{staticClass:"emoji-mart-emoji",attrs:{"data-title":n.short_name,title:r.title},on:{mouseenter:function(t){e.emojiProps.onEnter(r.getEmoji())},mouseleave:function(t){e.emojiProps.onLeave(r.getEmoji())},click:function(t){e.emojiProps.onClick(r.getEmoji())}}},[i("span",{class:r.cssClass,style:r.cssStyle},[e._v(e._s(r.content))])]):e._e()]}),e._v(" "),e.hasResults?e._e():i("div",[i("emoji",{attrs:{data:e.data,emoji:"sleuth_or_spy",native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}}),e._v(" "),i("div",{staticClass:"emoji-mart-no-results-label"},[e._v(e._s(e.i18n.notfound))])],1)],2):e._e()},[],!1,null,null,null).exports,U=g({props:{skin:{type:Number,required:!0}},data:function(){return{opened:!1}},methods:{onClick:function(e){this.opened&&e!=this.skin&&this.$emit("change",e),this.opened=!this.opened}}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{class:{"emoji-mart-skin-swatches":!0,"emoji-mart-skin-swatches-opened":e.opened}},e._l(6,function(t){return i("span",{key:t,class:{"emoji-mart-skin-swatch":!0,"emoji-mart-skin-swatch-selected":e.skin==t}},[i("span",{class:"emoji-mart-skin emoji-mart-skin-tone-"+t,on:{click:function(i){return e.onClick(t)}}})])}),0)},[],!1,null,null,null).exports,B=g({props:{data:{type:Object,required:!0},title:{type:String,required:!0},emoji:{type:[String,Object]},idleEmoji:{type:[String,Object],required:!0},showSkinTones:{type:Boolean,default:!0},emojiProps:{type:Object,required:!0},skinProps:{type:Object,required:!0},onSkinChange:{type:Function,required:!0}},computed:{emojiData:function(){return this.emoji?this.emoji:{}},emojiShortNames:function(){return this.emojiData.short_names},emojiEmoticons:function(){return this.emojiData.emoticons}},components:{Emoji:L,Skins:U}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-preview"},[e.emoji?[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.emoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("div",{staticClass:"emoji-mart-preview-name"},[e._v(e._s(e.emoji.name))]),e._v(" "),i("div",{staticClass:"emoji-mart-preview-shortnames"},e._l(e.emojiShortNames,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-shortname"},[e._v(":"+e._s(t)+":")])}),0),e._v(" "),i("div",{staticClass:"emoji-mart-preview-emoticons"},e._l(e.emojiEmoticons,function(t){return i("span",{key:t,staticClass:"emoji-mart-preview-emoticon"},[e._v(e._s(t))])}),0)])]:[i("div",{staticClass:"emoji-mart-preview-emoji"},[i("emoji",{attrs:{data:e.data,emoji:e.idleEmoji,native:e.emojiProps.native,skin:e.emojiProps.skin,set:e.emojiProps.set}})],1),e._v(" "),i("div",{staticClass:"emoji-mart-preview-data"},[i("span",{staticClass:"emoji-mart-title-label"},[e._v(e._s(e.title))])]),e._v(" "),e.showSkinTones?i("div",{staticClass:"emoji-mart-preview-skins"},[i("skins",{attrs:{skin:e.skinProps.skin},on:{change:function(t){return e.onSkinChange(t)}}})],1):e._e()]],2)},[],!1,null,null,null).exports,H=g({props:{data:{type:Object,required:!0},i18n:{type:Object,required:!0},autoFocus:{type:Boolean,default:!1},onSearch:{type:Function,required:!0}},data:function(){return{value:""}},computed:{emojiIndex:function(){return this.data}},watch:{value:function(){this.$emit("search",this.value)}},methods:{clear:function(){this.value=""}},mounted:function(){var e=this.$el.querySelector("input");this.autoFocus&&e.focus()}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart-search"},[i("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"text",placeholder:e.i18n.search},domProps:{value:e.value},on:{input:function(t){t.target.composing||(e.value=t.target.value)}}})])},[],!1,null,null,null).exports,W=i(3),K=i.n(W),X=(i(7),i(1)),J={search:"Search",notfound:"No Emoji Found",categories:{search:"Search Results",recent:"Frequently Used",people:"Smileys & People",nature:"Animals & Nature",foods:"Food & Drink",activity:"Activity",places:"Travel & Places",objects:"Objects",symbols:"Symbols",flags:"Flags",custom:"Custom"}},G=g({props:V()({},N,{data:{type:Object,required:!0}}),data:function(){return{activeSkin:this.skin||h.get("skin")||this.defaultSkin,activeCategory:null,previewEmoji:null,searchEmojis:null}},computed:{customStyles:function(){return V()({width:this.calculateWidth+"px"},this.pickerStyles)},emojiProps:function(){return{native:this.native,skin:this.activeSkin,set:this.set,emojiTooltip:this.emojiTooltip,emojiSize:this.emojiSize,onEnter:this.onEmojiEnter.bind(this),onLeave:this.onEmojiLeave.bind(this),onClick:this.onEmojiClick.bind(this)}},skinProps:function(){return{skin:this.activeSkin}},calculateWidth:function(){return this.perLine*(this.emojiSize+12)+12+2+O()},scrollerCategories:function(){var e=this,t=0;return this.categories.map(function(i){return{id:t++,category:i,show:!e.searchEmojis&&(e.infiniteScroll||i==e.activeCategory),mergedI18n:e.mergedI18n,data:e.data,emojisLength:i.emojis.length,emojiProps:e.emojiProps}})},mergedI18n:function(){return Object.freeze($(J,this.i18n))},idleEmoji:function(){return this.data.emoji(this.emoji)}},created:function(){var e;this.categories=[],(e=this.categories).push.apply(e,K()(this.data.categories())),this.categories=this.categories.filter(function(e){return e.emojis.length>0}),this.categories[0].first=!0,Object.freeze(this.categories),this.activeCategory=this.categories[0],this.skipScrollUpdate=!1},methods:{onScrollUpdate:function(e,t){this.skipScrollUpdate?this.skipScrollUpdate=!1:this.activeCategory=this.categories[t-1]},onAnchorClick:function(e){var t=this.categories.indexOf(e);this.$refs.dynScroller.scrollToItem(t),this.activeCategory=this.categories[t],this.skipScrollUpdate=!0},onSearch:function(e){var t=this.data.search(e,this.maxSearchResults);this.searchEmojis=t},onEmojiEnter:function(e){this.previewEmoji=e},onEmojiLeave:function(e){this.previewEmoji=null},onEmojiClick:function(e){this.$emit("select",e),p.add(e)},onSkinChange:function(e){this.activeSkin=e,h.update({skin:e}),this.$emit("skin-change",e)}},components:{Anchors:j,Category:q,Preview:B,Search:H,DynamicScroller:X.a,DynamicScrollerItem:X.b}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart",style:e.customStyles},[e.showCategories?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-anchors"},[i("anchors",{attrs:{data:e.data,i18n:e.mergedI18n,color:e.color,categories:e.categories,"active-category":e.activeCategory},on:{click:e.onAnchorClick}})],1):e._e(),e._v(" "),e._t("searchTemplate",[e.showSearch?i("search",{ref:"search",attrs:{data:e.data,i18n:e.mergedI18n,"auto-focus":e.autoFocus,"on-search":e.onSearch},on:{search:e.onSearch}}):e._e()],{data:e.data,i18n:e.i18n,autoFocus:e.autoFocus,onSearch:e.onSearch}),e._v(" "),i("category",{directives:[{name:"show",rawName:"v-show",value:e.searchEmojis,expression:"searchEmojis"}],staticClass:"emoji-mart-search-results",attrs:{data:e.data,i18n:e.mergedI18n,id:"search",name:"Search",emojis:e.searchEmojis,"emoji-props":e.emojiProps}}),e._v(" "),i("DynamicScroller",{directives:[{name:"show",rawName:"v-show",value:!e.searchEmojis,expression:"!searchEmojis"}],ref:"dynScroller",staticClass:"scroller",attrs:{items:e.scrollerCategories,"min-item-size":60,buffer:400,"key-field":"id","emit-update":!0},on:{update:e.onScrollUpdate},scopedSlots:e._u([{key:"default",fn:function(e){var t=e.item,n=e.active,r=e.index;return[i("DynamicScrollerItem",{attrs:{item:t,active:n,"data-index":r}},[i("category",{directives:[{name:"show",rawName:"v-show",value:t.show,expression:"item.show"}],key:t.category.id,ref:"categories",attrs:{data:t.data,i18n:t.mergedI18n,id:t.category.id,name:t.category.name,emojis:t.category.emojis,"emoji-props":t.emojiProps}})],1)]}}])}),e._v(" "),e._t("previewTemplate",[e.showPreview?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-preview"},[i("preview",{attrs:{data:e.data,title:e.title,emoji:e.previewEmoji,"idle-emoji":e.idleEmoji,"show-skin-tones":e.showSkinTones,"emoji-props":e.emojiProps,"skin-props":e.skinProps,"on-skin-change":e.onSkinChange}})],1):e._e()],{data:e.data,title:e.title,emoji:e.previewEmoji,idleEmoji:e.idleEmoji,showSkinTones:e.showSkinTones,emojiProps:e.emojiProps,skinProps:e.skinProps,onSkinChange:e.onSkinChange})],2)},[],!1,null,null,null).exports,Y={search:"Search",notfound:"No Emoji Found",categories:{search:"Search Results",recent:"Frequently Used",people:"Smileys & People",nature:"Animals & Nature",foods:"Food & Drink",activity:"Activity",places:"Travel & Places",objects:"Objects",symbols:"Symbols",flags:"Flags",custom:"Custom"}},Q=g({props:V()({},N,{data:{type:Object,required:!0}}),data:function(){return{activeSkin:this.skin||h.get("skin")||this.defaultSkin,activeCategory:null,previewEmoji:null,searchEmojis:null}},computed:{customStyles:function(){return V()({width:this.calculateWidth+"px"},this.pickerStyles)},emojiProps:function(){return{native:this.native,skin:this.activeSkin,set:this.set,emojiTooltip:this.emojiTooltip,emojiSize:this.emojiSize,onEnter:this.onEmojiEnter.bind(this),onLeave:this.onEmojiLeave.bind(this),onClick:this.onEmojiClick.bind(this)}},skinProps:function(){return{skin:this.activeSkin}},calculateWidth:function(){return this.perLine*(this.emojiSize+12)+12+2+O()},filteredCategories:function(){var e=this;return this.categories.filter(function(t){var i=!e.include||!e.include.length||e.include.indexOf(t.id)>-1,n=!(!e.exclude||!e.exclude.length)&&e.exclude.indexOf(t.id)>-1,r=t.emojis.length>0;return e.emojisToShowFilter&&(r=t.emojis.some(function(t){return e.emojisToShowFilter(e.data.emojis[t]||t)})),i&&!n&&r})},mergedI18n:function(){return Object.freeze($(Y,this.i18n))},idleEmoji:function(){return this.data.emoji(this.emoji)}},created:function(){var e;this.categories=[],(e=this.categories).push.apply(e,K()(this.data.categories())),this.categories=this.categories.filter(function(e){return e.emojis.length>0}),this.categories[0].first=!0,Object.freeze(this.categories),this.activeCategory=this.categories[0],this.skipScrollUpdate=!1},methods:{onScroll:function(){this.infiniteScroll&&!this.waitingForPaint&&(this.waitingForPaint=!0,window.requestAnimationFrame(this.onScrollPaint.bind(this)))},onScrollPaint:function(){this.waitingForPaint=!1;for(var e=this.$refs.scroll.scrollTop,t=this.filteredCategories[0],i=0,n=this.filteredCategories.length;ie)break;t=r}this.activeCategory=t},onAnchorClick:function(e){var t=this,i=this.filteredCategories.indexOf(e),n=this.$refs.categories[i],r=function(){if(n){var i=n.$el.offsetTop;e.first&&(i=0),t.$refs.scroll.scrollTop=i}};this.searchEmojis?(this.onSearch(null),this.$refs.search.clear(),this.$nextTick(r)):this.infiniteScroll?r():this.activeCategory=this.filteredCategories[i]},onSearch:function(e){var t=this.data.search(e,this.maxSearchResults);this.searchEmojis=t},onEmojiEnter:function(e){this.previewEmoji=e},onEmojiLeave:function(e){this.previewEmoji=null},onEmojiClick:function(e){this.$emit("select",e),p.add(e)},onSkinChange:function(e){this.activeSkin=e,h.update({skin:e}),this.$emit("skin-change",e)}},components:{Anchors:j,Category:q,Preview:B,Search:H,DynamicScroller:X.a,DynamicScrollerItem:X.b}},function(){var e=this,t=e.$createElement,i=e._self._c||t;return i("div",{staticClass:"emoji-mart emoji-mart-static",style:e.customStyles},[e.showCategories?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-anchors"},[i("anchors",{attrs:{data:e.data,i18n:e.mergedI18n,color:e.color,categories:e.categories,"active-category":e.activeCategory},on:{click:e.onAnchorClick}})],1):e._e(),e._v(" "),e._t("searchTemplate",[e.showSearch?i("search",{ref:"search",attrs:{data:e.data,i18n:e.mergedI18n,"auto-focus":e.autoFocus,"on-search":e.onSearch},on:{search:e.onSearch}}):e._e()],{data:e.data,i18n:e.i18n,autoFocus:e.autoFocus,onSearch:e.onSearch}),e._v(" "),i("div",{ref:"scroll",staticClass:"emoji-mart-scroll",on:{scroll:e.onScroll}},[i("category",{directives:[{name:"show",rawName:"v-show",value:e.searchEmojis,expression:"searchEmojis"}],attrs:{data:e.data,i18n:e.mergedI18n,id:"search",name:"Search",emojis:e.searchEmojis,"emoji-props":e.emojiProps}}),e._v(" "),e._l(e.filteredCategories,function(t){return i("category",{directives:[{name:"show",rawName:"v-show",value:!e.searchEmojis&&(e.infiniteScroll||t==e.activeCategory),expression:"!searchEmojis && (infiniteScroll || category == activeCategory)"}],key:t.id,ref:"categories",refInFor:!0,attrs:{data:e.data,i18n:e.mergedI18n,id:t.id,name:t.name,emojis:t.emojis,"emoji-props":e.emojiProps}})})],2),e._v(" "),e._t("previewTemplate",[e.showPreview?i("div",{staticClass:"emoji-mart-bar emoji-mart-bar-preview"},[i("preview",{attrs:{data:e.data,title:e.title,emoji:e.previewEmoji,"idle-emoji":e.idleEmoji,"show-skin-tones":e.showSkinTones,"emoji-props":e.emojiProps,"skin-props":e.skinProps,"on-skin-change":e.onSkinChange}})],1):e._e()],{data:e.data,title:e.title,emoji:e.previewEmoji,idleEmoji:e.idleEmoji,showSkinTones:e.showSkinTones,emojiProps:e.emojiProps,skinProps:e.skinProps,onSkinChange:e.onSkinChange})],2)},[],!1,null,null,null).exports;i.d(t,"Picker",function(){return G}),i.d(t,"StaticPicker",function(){return Q}),i.d(t,"Emoji",function(){return L}),i.d(t,"Anchors",function(){return j}),i.d(t,"Preview",function(){return B}),i.d(t,"Search",function(){return H}),i.d(t,"Category",function(){return q}),i.d(t,"Skins",function(){return U}),i.d(t,"EmojiIndex",function(){return A}),i.d(t,"EmojiView",function(){return F}),i.d(t,"EmojiData",function(){return M}),i.d(t,"sanitize",function(){return I}),i.d(t,"uncompress",function(){return d.uncompress}),i.d(t,"store",function(){return h}),i.d(t,"frequently",function(){return p})}])}); \ No newline at end of file diff --git a/docs/bundle.js b/docs/bundle.js index 1ebd34dc..b09f16b1 100644 --- a/docs/bundle.js +++ b/docs/bundle.js @@ -18098,7 +18098,7 @@ function () { var _this = this; this._data.categories.forEach(function (categoryData) { - if (!_this.isCategoryNeeded(categoryData)) { + if (!_this.isCategoryNeeded(categoryData.id)) { return; } @@ -18437,15 +18437,15 @@ function () { /** * Check if we need to include given category. * - * @param {object} category - The category object. + * @param {string} category_id - The category id. * @return {boolean} - Whether to include the emoji. */ }, { key: "isCategoryNeeded", - value: function isCategoryNeeded(category) { - var isIncluded = this._include && this._include.length ? this._include.indexOf(category.id) > -1 : true; - var isExcluded = this._exclude && this._exclude.length ? this._exclude.indexOf(category.id) > -1 : false; + value: function isCategoryNeeded(category_id) { + var isIncluded = this._include && this._include.length ? this._include.indexOf(category_id) > -1 : true; + var isExcluded = this._exclude && this._exclude.length ? this._exclude.indexOf(category_id) > -1 : false; if (!isIncluded || isExcluded) { return false; @@ -19131,4 +19131,4 @@ isWindowAvailable && function () { /******/ }); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9FbW9qaU1hcnQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0Vtb2ppTWFydC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3M/YzlmYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9kb2NzL2FwcC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzdlZTAiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzRjYTMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlP2NlNjciLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvZG9jcy9hcHAudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9FbW9qaS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL1BpY2tlci52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL1N0YXRpY1BpY2tlci52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9zZWFyY2gudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC91bWQvcXVhc2FyLm1hdC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzg3M2QiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvcXVhc2FyLWZyYW1ld29yay9kaXN0L3VtZC9xdWFzYXIubWF0LmNzcz8xZTJhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL2RvY3MvYXBwLnZ1ZT85M2MwIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZT8wNTQ1Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL1BpY2tlci52dWU/YzNkNyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9TdGF0aWNQaWNrZXIudnVlP2YwOWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvYW5jaG9ycy52dWU/MzRkYSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWU/NDI0YSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9wcmV2aWV3LnZ1ZT9mNzE4Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWU/MmQyYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9za2lucy52dWU/YzM0OSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL2RvY3MvYXBwLnZ1ZT9hOTY4Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2xpc3RUb1N0eWxlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvdnVlLXZpcnR1YWwtc2Nyb2xsZXIvZGlzdC92dWUtdmlydHVhbC1zY3JvbGxlci5lc20uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5ydW50aW1lLmVzbS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9FbW9qaS52dWU/YzIxYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9FbW9qaS52dWU/OTRhZCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9QaWNrZXIudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL1BpY2tlci52dWU/MmRkNyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9QaWNrZXIudnVlP2YwZjIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvU3RhdGljUGlja2VyLnZ1ZSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9TdGF0aWNQaWNrZXIudnVlPzRjMDMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvU3RhdGljUGlja2VyLnZ1ZT83YzBhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlP2QxYTUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvYW5jaG9ycy52dWU/MWI5OCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzNlMzUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzczYjUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWU/NWVkMyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9wcmV2aWV3LnZ1ZT9lMzU5Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZT9mNTJkIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWU/ZTU4NiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzhiZWIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzk5NWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9wb2x5ZmlsbHMvc3RyaW5nRnJvbUNvZGVQb2ludC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvc3Zncy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZW1vamktZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZnJlcXVlbnRseS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3V0aWxzL3NoYXJlZC1wcm9wcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvc3RvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3ZlbmRvci9yYWYtcG9seWZpbGwuanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiUXVhc2FyIiwiZWwiLCJyZW5kZXIiLCJoIiwiQXBwIiwiX1N0cmluZyIsIlN0cmluZyIsImZyb21Db2RlUG9pbnQiLCJzdHJpbmdGcm9tQ29kZVBvaW50IiwiTUFYX1NJWkUiLCJjb2RlVW5pdHMiLCJoaWdoU3Vycm9nYXRlIiwibG93U3Vycm9nYXRlIiwiaW5kZXgiLCJsZW5ndGgiLCJhcmd1bWVudHMiLCJyZXN1bHQiLCJjb2RlUG9pbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk1hdGgiLCJmbG9vciIsIlJhbmdlRXJyb3IiLCJwdXNoIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJTVkdzIiwiYWN0aXZpdHkiLCJjdXN0b20iLCJmbGFncyIsImZvb2RzIiwibmF0dXJlIiwib2JqZWN0cyIsInBlb3BsZSIsInBsYWNlcyIsInJlY2VudCIsInN5bWJvbHMiLCJtYXBwaW5nIiwibmFtZSIsInVuaWZpZWQiLCJub25fcXVhbGlmaWVkIiwiaGFzX2ltZ19hcHBsZSIsImhhc19pbWdfZ29vZ2xlIiwiaGFzX2ltZ190d2l0dGVyIiwiaGFzX2ltZ19lbW9qaW9uZSIsImhhc19pbWdfZmFjZWJvb2siLCJoYXNfaW1nX21lc3NlbmdlciIsImtleXdvcmRzIiwic2hlZXQiLCJlbW90aWNvbnMiLCJ0ZXh0Iiwic2hvcnRfbmFtZXMiLCJhZGRlZF9pbiIsImJ1aWxkU2VhcmNoIiwiZW1vamkiLCJzZWFyY2giLCJhZGRUb1NlYXJjaCIsInN0cmluZ3MiLCJzcGxpdCIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJzdHJpbmciLCJzIiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwiam9pbiIsImNvbXByZXNzIiwiZmlsdGVyIiwic2hvcnRfbmFtZSIsInNoZWV0X3giLCJzaGVldF95IiwicGFyc2VJbnQiLCJrZXkiLCJ2YWx1ZSIsImRlZXBGcmVlemUiLCJvYmplY3QiLCJwcm9wTmFtZXMiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZnJlZXplIiwidW5jb21wcmVzcyIsImRhdGEiLCJjb21wcmVzc2VkIiwiaWQiLCJlbW9qaXMiLCJ1bnNoaWZ0IiwidG9GaXhlZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJTSEVFVF9DT0xVTU5TIiwiQ09MT05TX1JFR0VYIiwiU0tJTlMiLCJFbW9qaUluZGV4IiwiZW1vamlzVG9TaG93RmlsdGVyIiwiaW5jbHVkZSIsImV4Y2x1ZGUiLCJyZWNlbnRMZW5ndGgiLCJfZGF0YSIsIl9lbW9qaXNGaWx0ZXIiLCJfaW5jbHVkZSIsIl9leGNsdWRlIiwiX2N1c3RvbSIsIl9yZWNlbnQiLCJmcmVxdWVudGx5IiwiZ2V0IiwiX2Vtb2ppcyIsIl9uYXRpdmVFbW9qaXMiLCJfZW1vdGljb25zIiwiX2NhdGVnb3JpZXMiLCJfcmVjZW50Q2F0ZWdvcnkiLCJfY3VzdG9tQ2F0ZWdvcnkiLCJfc2VhcmNoSW5kZXgiLCJidWlsZEluZGV4IiwiY2F0ZWdvcmllcyIsImNhdGVnb3J5RGF0YSIsImlzQ2F0ZWdvcnlOZWVkZWQiLCJjYXRlZ29yeSIsImVtb2ppSWQiLCJhZGRFbW9qaSIsImN1c3RvbUVtb2ppIiwiYWRkQ3VzdG9tRW1vamkiLCJtYXAiLCJoYXNFbW9qaSIsInNraW4iLCJtYXRjaGVzIiwibWF0Y2giLCJhbGlhc2VzIiwiaGFzT3duUHJvcGVydHkiLCJlbW9qaU9iamVjdCIsImdldFNraW4iLCJFcnJvciIsInVuaWNvZGVFbW9qaSIsIm1heFJlc3VsdHMiLCJ2YWx1ZXMiLCJhbGxSZXN1bHRzIiwiY3VycmVudEluZGV4IiwiY2hhckluZGV4IiwiY2hhciIsInJlc3VsdHMiLCJzY29yZXMiLCJzdWIiLCJzdWJzdHIiLCJzdWJJbmRleCIsInNjb3JlIiwic29ydCIsImEiLCJiIiwiYVNjb3JlIiwiYlNjb3JlIiwiaW50ZXJzZWN0Iiwic2xpY2UiLCJlbW9qaURhdGEiLCJhc3NpZ24iLCJFbW9qaURhdGEiLCJpc0Vtb2ppTmVlZGVkIiwibmF0aXZlIiwiX3NraW5zIiwiaWR4IiwiZW1vdGljb24iLCJpc0luY2x1ZGVkIiwiaXNFeGNsdWRlZCIsInNraW5fdmFyaWF0aW9ucyIsInNraW5JZHgiLCJza2luS2V5IiwidmFyaWF0aW9uRGF0YSIsInNraW5EYXRhIiwiayIsIl9zYW5pdGl6ZWQiLCJzYW5pdGl6ZSIsIm11bHRpcGx5IiwieCIsInJvdW5kIiwieSIsIkVtb2ppVmlldyIsInNldCIsImZhbGxiYWNrIiwiZW1vamlUb29sdGlwIiwiZW1vamlTaXplIiwiX2Vtb2ppIiwiX25hdGl2ZSIsIl9za2luIiwiX3NldCIsIl9mYWxsYmFjayIsImNhblJlbmRlciIsIl9jYW5SZW5kZXIiLCJjc3NDbGFzcyIsIl9jc3NDbGFzcyIsImNzc1N0eWxlIiwiX2Nzc1N0eWxlIiwiY29udGVudCIsIl9jb250ZW50IiwidGl0bGUiLCJfaXNDdXN0b20iLCJfaXNOYXRpdmUiLCJfaGFzRW1vamkiLCJfZW1vamlUeXBlIiwiYmFja2dyb3VuZEltYWdlIiwiZ2V0RW1vamkiLCJpbWFnZVVybCIsImJhY2tncm91bmRTaXplIiwid2lkdGgiLCJoZWlnaHQiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJnZXRQb3NpdGlvbiIsImZvbnRTaXplIiwiaGFzSW1hZ2UiLCJ1bmRlZmluZWQiLCJza2luX3RvbmUiLCJjb2xvbnMiLCJ1bmlmaWVkVG9OYXRpdmUiLCJERUZBVUxUUyIsImluaXRpYWxpemVkIiwiZGVmYXVsdHMiLCJpbml0Iiwic3RvcmUiLCJhZGQiLCJtYXhOdW1iZXIiLCJkZWZhdWx0TGVuZ3RoIiwibWluIiwiaSIsInF1YW50aXR5IiwiZnJlcXVlbnRseUtleXMiLCJzb3J0ZWQiLCJyZXZlcnNlIiwic2xpY2VkIiwibGFzdCIsInBvcCIsInVuaWNvZGVzIiwiY29kZVBvaW50cyIsInUiLCJ1bmlxIiwiYXJyIiwicmVkdWNlIiwiYWNjIiwiaXRlbSIsInVuaXFBIiwidW5pcUIiLCJkZWVwTWVyZ2UiLCJvIiwib3JpZ2luYWxWYWx1ZSIsIm1lYXN1cmVTY3JvbGxiYXIiLCJkb2N1bWVudCIsImRpdiIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsIm92ZXJmbG93IiwicG9zaXRpb24iLCJ0b3AiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJzY3JvbGxiYXJXaWR0aCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsIkVtb2ppUHJvcHMiLCJ0eXBlIiwiQm9vbGVhbiIsImRlZmF1bHQiLCJ0b29sdGlwIiwiRnVuY3Rpb24iLCJyZXF1aXJlZCIsInNpemUiLCJQaWNrZXJQcm9wcyIsInBlckxpbmUiLCJtYXhTZWFyY2hSZXN1bHRzIiwiY29sb3IiLCJkZWZhdWx0U2tpbiIsImF1dG9Gb2N1cyIsImkxOG4iLCJzaG93UHJldmlldyIsInNob3dTZWFyY2giLCJzaG93Q2F0ZWdvcmllcyIsInNob3dTa2luVG9uZXMiLCJpbmZpbml0ZVNjcm9sbCIsInBpY2tlclN0eWxlcyIsIk5BTUVTUEFDRSIsIl9KU09OIiwiSlNPTiIsImlzTG9jYWxTdG9yYWdlU3VwcG9ydGVkIiwid2luZG93IiwiZ2V0dGVyIiwic2V0dGVyIiwic2V0SGFuZGxlcnMiLCJoYW5kbGVycyIsInNldE5hbWVzcGFjZSIsIm5hbWVzcGFjZSIsInVwZGF0ZSIsInN0YXRlIiwibG9jYWxTdG9yYWdlIiwic3RyaW5naWZ5IiwiZSIsInBhcnNlIiwiaXNXaW5kb3dBdmFpbGFibGUiLCJsYXN0VGltZSIsInZlbmRvcnMiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImNhbGxiYWNrIiwiZWxlbWVudCIsImN1cnJUaW1lIiwiRGF0ZSIsImdldFRpbWUiLCJ0aW1lVG9DYWxsIiwibWF4Iiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVB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QUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiwyQkFBMkIsR0FBRyxxQkFBcUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxjQUFjLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsb0JBQW9CLDhCQUE4QixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGNBQWMsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxlQUFlLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcscUJBQXFCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiwyQkFBMkIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLGVBQWUsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFH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QWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixnQ0FBZ0MsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsa0JBQWtCLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLFlBQVksbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsZ0NBQWdDLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxZQUFZLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLGdDQUFnQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLGdDQUFnQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxzQkFBc0IseUVBQXlFLEdBQUcsYUFBYSx1R0FBdUcsR0FBRyxnQkFBZ0IsMEdBQTBHLEdBQUcsYUFBYSx1R0FBdUcsR0FBRyxnQkFBZ0IsMEdBQTBHLEdBQUcsYUFBYSx1R0FBdUcsR0FBRyxnQkFBZ0IsMEdBQTBHLEdBQUcsYUFBYSx3R0FBd0csR0FBRyxnQkFBZ0IsMkdBQTJHLEdBQUcsYUFBYSx3R0FBd0csR0FBRyxnQkFBZ0IsMkdBQTJHLEdBQUcsYUFBYSx5R0FBeUcsR0FBRyxnQkFBZ0IsNEdBQTRHLEdBQUcsYUFBYSxpSEFBaUgsR0FBRyxnQkFBZ0Isb0hBQW9ILEdBQUcsYUFBYSxpSEFBaUgsR0FBRyxnQkFBZ0Isb0hBQW9ILEdBQUcsYUFBYSxpSEFBaUgsR0FBRyxnQkFBZ0Isb0hBQW9ILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxrSEFBa0gsR0FBRyxpQkFBaUIscUhBQXFILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxtSEFBbUgsR0FBRyxpQkFBaUIsc0hBQXNILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsY0FBYyxvSEFBb0gsR0FBRyxpQkFBaUIsdUhBQXVILEdBQUcsMEJBQTBCLGdDQUFnQyxHQUFHLGlCQUFpQixnRUFBZ0UsR0FBRyxnQkFBZ0Isa0JBQWtCLEdBQUcsYUFBYSxrQkFBa0IsR0FBRyxpQkFBaUIsa0JBQWtCLEdBQUcsY0FBYyxnQ0FBZ0MsR0FBRywwQkFBMEIseUJBQXlCLGtCQUFrQix3QkFBd0Isd0JBQXdCLEdBQUcsK0NBQStDLGdDQUFnQyx5QkFBeUIsR0FBRyxnQkFBZ0Isb0NBQW9DLGdDQUFnQyxHQUFHLFdBQVcsK0JBQStCLDJCQUEyQixHQUFHLG1CQUFtQix1Q0FBdUMsbUNBQW1DLEdBQUcsU0FBUyx3QkFBd0Isd0JBQXdCLEdBQUcsWUFBWSwwQkFBMEIsMEJBQTBCLEdBQUcsaUJBQWlCLGdDQUFnQyxnQ0FBZ0MsR0FBRyxnQkFBZ0IsMkJBQTJCLHNCQUFzQixHQUFHLGVBQWUsMEJBQTBCLHFCQUFxQixHQUFHLGVBQWUsc0JBQXNCLGlCQUFpQixHQUFHLGtCQUFrQix5QkFBeUIsb0NBQW9DLEdBQUcsZ0JBQWdCLHVCQUF1QixrQ0FBa0MsR0FBRyxrQ0FBa0MsMEJBQTBCLGdDQUFnQyxHQUFHLG9CQUFvQiwyQkFBMkIsdUNBQXVDLEdBQUcsbUJBQW1CLDhCQUE4QixzQ0FBc0MsR0FBRyxnQkFBZ0IsMEJBQTBCLGdDQUFnQyxHQUFHLGNBQWMsd0JBQXdCLDhCQUE4QixHQUFHLGdDQUFnQywyQkFBMkIsNEJBQTRCLEdBQUcsbUJBQW1CLDZCQUE2Qiw4QkFBOEIsR0FBRyxrQkFBa0IsNEJBQTRCLDZCQUE2QixHQUFHLGtCQUFrQiw4QkFBOEIsa0NBQWtDLEdBQUcsZ0JBQWdCLDRCQUE0QixnQ0FBZ0MsR0FBRyxtQkFBbUIsK0JBQStCLDhCQUE4QixHQUFHLG9CQUFvQixnQ0FBZ0MsK0JBQStCLEdBQUcsb0JBQW9CLGdDQUFnQyxxQ0FBcUMsR0FBRyxtQkFBbUIsbUNBQW1DLG9DQUFvQyxHQUFHLGVBQWUsK0JBQStCLCtCQUErQixHQUFHLGFBQWEsNkJBQTZCLDZCQUE2QixHQUFHLGdCQUFnQixnQ0FBZ0MsbUNBQW1DLDJCQUEyQixHQUFHLGtCQUFrQixrQ0FBa0MsNkJBQTZCLEdBQUcsaUJBQWlCLGlDQUFpQyxvQ0FBb0MsNEJBQTRCLEdBQUcsaUNBQWlDLG1CQUFtQixHQUFHLDZDQUE2QyxvQkFBb0IsR0FBRyxpQ0FBaUMsa0JBQWtCLEdBQUcsNkNBQTZDLG1CQUFtQixHQUFHLDZCQUE2QixzQkFBc0IsR0FBRyx5Q0FBeUMsc0JBQXNCLEdBQUcsNkJBQTZCLHFCQUFxQixHQUFHLHlDQUF5QyxxQkFBcUIsR0FBRyw2QkFBNkIsdUJBQXVCLEdBQUcseUNBQXlDLHVCQUF1QixHQUFHLDZCQUE2QixzQkFBc0IsR0FBRyx5Q0FBeUMsc0JBQXNCLEdBQUcsNkJBQTZCLHVCQUF1QixHQUFHLHlDQUF5Qyx1QkFBdUIsR0FBRyw2QkFBNkIsc0JBQXNCLEdBQUcseUNBQXlDLHNCQUFzQixHQUFHLDZCQUE2Qix1QkFBdUIsR0FBRyx5Q0FBeUMsdUJBQXVCLEdBQUcsNkJBQTZCLHNCQUFzQixHQUFHLHlDQUF5QyxzQkFBc0IsR0FBRyw2QkFBNkIsdUJBQXVCLEdBQUcseUNBQXlDLHVCQUF1QixHQUFHLDZCQUE2QixzQkFBc0IsR0FBRyx5Q0FBeUMsc0JBQXNCLEdBQUcseUJBQXlCLDZ4Q0FBNnhDLGtCQUFrQixtQkFBbUIsc0JBQXNCLEtBQUssNjNDQUE2M0MsbUJBQW1CLG9CQUFvQix1QkFBdUIsS0FBSyxzQkFBc0IsMkJBQTJCLDJCQUEyQixLQUFLLDJXQUEyVyx5QkFBeUIseUJBQXlCLEtBQUssZ0NBQWdDLHlCQUF5Qix5QkFBeUIsS0FBSyx3Q0FBd0MsbUJBQW1CLGdCQUFnQixLQUFLLDhDQUE4QyxzQkFBc0IsS0FBSyw4Q0FBOEMsaUJBQWlCLGtCQUFrQixLQUFLLHdDQUF3QyxtQkFBbUIscUJBQXFCLEtBQUssOENBQThDLDJCQUEyQixLQUFLLDhDQUE4QyxzQkFBc0Isa0JBQWtCLEtBQUssd0NBQXdDLG1CQUFtQixzQkFBc0IsS0FBSyw4Q0FBOEMsNEJBQTRCLEtBQUssOENBQThDLHVCQUF1QixrQkFBa0IsS0FBSyx3Q0FBd0MsbUJBQW1CLGlCQUFpQixLQUFLLDhDQUE4Qyx1QkFBdUIsS0FBSyw4Q0FBOEMsa0JBQWtCLGtCQUFrQixLQUFLLHdDQUF3QyxtQkFBbUIsc0JBQXNCLEtBQUssOENBQThDLDRCQUE0QixLQUFLLDhDQUE4Qyx1QkFBdUIsa0JBQWtCLEtBQUssd0NBQXdDLG1CQUFtQixzQkFBc0IsS0FBSyw4Q0FBOEMsNEJBQTRCLEtBQUssOENBQThDLHVCQUF1QixrQkFBa0IsS0FBSyx3Q0FBd0MsbUJBQW1CLGlCQUFpQixLQUFLLDhDQUE4Qyx1QkFBdUIsS0FBSyw4Q0FBOEMsa0JBQWtCLGtCQUFrQixLQUFLLHdDQUF3QyxtQkFBbUIsc0JBQXNCLEtBQUssOENBQThDLDRCQUE0QixLQUFLLDhDQUE4Qyx1QkFBdUIsa0JBQWtCLEtBQUssd0NBQXdDLG1CQUFtQixzQkFBc0IsS0FBSyw4Q0FBOEMsNEJBQTRCLEtBQUssOENBQThDLHVCQUF1QixrQkFBa0IsS0FBSyx3Q0FBd0MsbUJBQW1CLGlCQUFpQixLQUFLLDhDQUE4Qyx1QkFBdUIsS0FBSyw4Q0FBOEMsa0JBQWtCLGtCQUFrQixLQUFLLDBDQUEwQyxtQkFBbUIsc0JBQXNCLEtBQUssZ0RBQWdELDRCQUE0QixLQUFLLGdEQUFnRCx1QkFBdUIsa0JBQWtCLEtBQUssMENBQTBDLG1CQUFtQixzQkFBc0IsS0FBSyxnREFBZ0QsNEJBQTRCLEtBQUssZ0RBQWdELHVCQUF1QixrQkFBa0IsS0FBSywwQ0FBMEMsbUJBQW1CLGtCQUFrQixLQUFLLGdEQUFnRCx3QkFBd0IsS0FBSyxnREFBZ0QsbUJBQW1CLGtCQUFrQixLQUFLLEdBQUcsNkJBQTZCLCtyQkFBK3JCLGtCQUFrQixtQkFBbUIsc0JBQXNCLEtBQUssK3VCQUErdUIsbUJBQW1CLG9CQUFvQix1QkFBdUIsS0FBSyxhQUFhLDJCQUEyQiwyQkFBMkIsS0FBSywyTUFBMk0seUJBQXlCLHlCQUF5QixLQUFLLGtCQUFrQix5QkFBeUIseUJBQXlCLEtBQUssc0JBQXNCLG1CQUFtQixnQkFBZ0IsS0FBSyx5QkFBeUIsc0JBQXNCLEtBQUsseUJBQXlCLGlCQUFpQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHFCQUFxQixLQUFLLHlCQUF5QiwyQkFBMkIsS0FBSyx5QkFBeUIsc0JBQXNCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLHNCQUFzQixLQUFLLDBCQUEwQiw0QkFBNEIsS0FBSywwQkFBMEIsdUJBQXVCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsc0JBQXNCLEtBQUssMEJBQTBCLDRCQUE0QixLQUFLLDBCQUEwQix1QkFBdUIsa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixrQkFBa0IsS0FBSywwQkFBMEIsd0JBQXdCLEtBQUssMEJBQTBCLG1CQUFtQixrQkFBa0IsS0FBSyxHQUFHLDZCQUE2QiwrckJBQStyQixrQkFBa0IsbUJBQW1CLHNCQUFzQixLQUFLLCt1QkFBK3VCLG1CQUFtQixvQkFBb0IsdUJBQXVCLEtBQUssYUFBYSwyQkFBMkIsMkJBQTJCLEtBQUssMk1BQTJNLHlCQUF5Qix5QkFBeUIsS0FBSyxrQkFBa0IseUJBQXlCLHlCQUF5QixLQUFLLHNCQUFzQixtQkFBbUIsZ0JBQWdCLEtBQUsseUJBQXlCLHNCQUFzQixLQUFLLHlCQUF5QixpQkFBaUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixxQkFBcUIsS0FBSyx5QkFBeUIsMkJBQTJCLEtBQUsseUJBQXlCLHNCQUFzQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsaUJBQWlCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHlCQUF5QixrQkFBa0Isa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsaUJBQWlCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHlCQUF5QixrQkFBa0Isa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsaUJBQWlCLEtBQUsseUJBQXlCLHVCQUF1QixLQUFLLHlCQUF5QixrQkFBa0Isa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixzQkFBc0IsS0FBSywwQkFBMEIsNEJBQTRCLEtBQUssMEJBQTBCLHVCQUF1QixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLHNCQUFzQixLQUFLLDBCQUEwQiw0QkFBNEIsS0FBSywwQkFBMEIsdUJBQXVCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsa0JBQWtCLEtBQUssMEJBQTBCLHdCQUF3QixLQUFLLDBCQUEwQixtQkFBbUIsa0JBQWtCLEtBQUssR0FBRyw2QkFBNkIsK3JCQUErckIsa0JBQWtCLG1CQUFtQixzQkFBc0IsS0FBSywrdUJBQSt1QixtQkFBbUIsb0JBQW9CLHVCQUF1QixLQUFLLGFBQWEsMkJBQTJCLDJCQUEyQixLQUFLLDJNQUEyTSx5QkFBeUIseUJBQXlCLEtBQUssa0JBQWtCLHlCQUF5Qix5QkFBeUIsS0FBSyxzQkFBc0IsbUJBQW1CLGdCQUFnQixLQUFLLHlCQUF5QixzQkFBc0IsS0FBSyx5QkFBeUIsaUJBQWlCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIscUJBQXFCLEtBQUsseUJBQXlCLDJCQUEyQixLQUFLLHlCQUF5QixzQkFBc0Isa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLGlCQUFpQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx5QkFBeUIsa0JBQWtCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLGlCQUFpQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx5QkFBeUIsa0JBQWtCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixzQkFBc0IsS0FBSyx5QkFBeUIsNEJBQTRCLEtBQUsseUJBQXlCLHVCQUF1QixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLGlCQUFpQixLQUFLLHlCQUF5Qix1QkFBdUIsS0FBSyx5QkFBeUIsa0JBQWtCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsc0JBQXNCLEtBQUssMEJBQTBCLDRCQUE0QixLQUFLLDBCQUEwQix1QkFBdUIsa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixzQkFBc0IsS0FBSywwQkFBMEIsNEJBQTRCLEtBQUssMEJBQTBCLHVCQUF1QixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLGtCQUFrQixLQUFLLDBCQUEwQix3QkFBd0IsS0FBSywwQkFBMEIsbUJBQW1CLGtCQUFrQixLQUFLLEdBQUcsOEJBQThCLCtyQkFBK3JCLGtCQUFrQixtQkFBbUIsc0JBQXNCLEtBQUssK3VCQUErdUIsbUJBQW1CLG9CQUFvQix1QkFBdUIsS0FBSyxhQUFhLDJCQUEyQiwyQkFBMkIsS0FBSywyTUFBMk0seUJBQXlCLHlCQUF5QixLQUFLLGtCQUFrQix5QkFBeUIseUJBQXlCLEtBQUssc0JBQXNCLG1CQUFtQixnQkFBZ0IsS0FBSyx5QkFBeUIsc0JBQXNCLEtBQUsseUJBQXlCLGlCQUFpQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHFCQUFxQixLQUFLLHlCQUF5QiwyQkFBMkIsS0FBSyx5QkFBeUIsc0JBQXNCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyxzQkFBc0IsbUJBQW1CLHNCQUFzQixLQUFLLHlCQUF5Qiw0QkFBNEIsS0FBSyx5QkFBeUIsdUJBQXVCLGtCQUFrQixLQUFLLHNCQUFzQixtQkFBbUIsc0JBQXNCLEtBQUsseUJBQXlCLDRCQUE0QixLQUFLLHlCQUF5Qix1QkFBdUIsa0JBQWtCLEtBQUssc0JBQXNCLG1CQUFtQixpQkFBaUIsS0FBSyx5QkFBeUIsdUJBQXVCLEtBQUsseUJBQXlCLGtCQUFrQixrQkFBa0IsS0FBSyx1QkFBdUIsbUJBQW1CLHNCQUFzQixLQUFLLDBCQUEwQiw0QkFBNEIsS0FBSywwQkFBMEIsdUJBQXVCLGtCQUFrQixLQUFLLHVCQUF1QixtQkFBbUIsc0JBQXNCLEtBQUssMEJBQTBCLDRCQUE0QixLQUFLLDBCQUEwQix1QkFBdUIsa0JBQWtCLEtBQUssdUJBQXVCLG1CQUFtQixrQkFBa0IsS0FBSywwQkFBMEIsd0JBQXdCLEtBQUssMEJBQTBCLG1CQUFtQixrQkFBa0IsS0FBSyxHQUFHLGFBQWEsa0JBQWtCLG9CQUFvQixXQUFXLGFBQWEsY0FBYyxZQUFZLGlCQUFpQixrQkFBa0IsNEJBQTRCLHlDQUF5QyxHQUFHLG9CQUFvQixtQkFBbUIsZ0NBQWdDLEdBQUcsa0JBQWtCLGtDQUFrQyxHQUFHLGdDQUFnQyxnQkFBZ0IsR0FBRyxrQkFBa0IsZ0NBQWdDLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLFdBQVcsb0pBQW9KLEdBQUcsNkNBQTZDLG1CQUFtQixpQkFBaUIsR0FBRyxvQ0FBb0MsbUJBQW1CLGlCQUFpQixHQUFHLHdDQUF3QyxtQkFBbUIsaUJBQWlCLEdBQUcscURBQXFELGdDQUFnQyxHQUFHLHVCQUF1QiwwQ0FBMEMsR0FBRyxtR0FBbUcsNkJBQTZCLGNBQWMsR0FBRyxZQUFZLGVBQWUsbUJBQW1CLDBCQUEwQixHQUFHLHVCQUF1QixpREFBaUQsR0FBRyx1QkFBdUIsK0NBQStDLEdBQUcsdUJBQXVCLHlCQUF5QixHQUFHLHlDQUF5QywwREFBMEQsR0FBRyx5QkFBeUIsaUNBQWlDLEdBQUcsa0JBQWtCLG9FQUFvRSxHQUFHLGdCQUFnQiwyQ0FBMkMsR0FBRyxrQkFBa0IsNkNBQTZDLEdBQUcsaUJBQWlCLDRDQUE0QyxHQUFHLG1CQUFtQixxREFBcUQsR0FBRyxrQkFBa0IsNkJBQTZCLGdFQUFnRSxHQUFHLDJDQUEyQyw4REFBOEQsR0FBRyxtREFBbUQsbUVBQW1FLEdBQUcsdUJBQXVCLG1EQUFtRCxvREFBb0QsR0FBRyxxQkFBcUIsaURBQWlELHVEQUF1RCxHQUFHLHNCQUFzQiw0RkFBNEYsR0FBRyx1QkFBdUIsNkZBQTZGLEdBQUcsYUFBYSwyQkFBMkIsOEJBQThCLEdBQUcsc0JBQXNCLHdDQUF3QyxHQUFHLG1CQUFtQiwyQkFBMkIsR0FBRyxzRkFBc0YsOEJBQThCLEdBQUcsbUJBQW1CLHlDQUF5Qyx5Q0FBeUMseUNBQXlDLHlDQUF5QyxHQUFHLFdBQVcsbUJBQW1CLEdBQUcsbUNBQW1DLHNDQUFzQyxpQ0FBaUMsR0FBRyxhQUFhLHFCQUFxQixHQUFHLGFBQWEscUJBQXFCLEdBQUcsY0FBYyxnQ0FBZ0MsR0FBRyxzQkFBc0Isb0NBQW9DLEdBQUcsdUJBQXVCLG1DQUFtQyxHQUFHLG1CQUFtQiwrQkFBK0IsR0FBRyx1QkFBdUIsbUNBQW1DLEdBQUcsbUJBQW1CLCtCQUErQixHQUFHLGNBQWMsOENBQThDLEdBQUcsY0FBYyw4Q0FBOEMsR0FBRyxlQUFlLCtDQUErQyxHQUFHLGVBQWUsK0NBQStDLEdBQUcsZUFBZSwrQ0FBK0MsR0FBRyxlQUFlLCtDQUErQyxHQUFHLGVBQWUsK0NBQStDLEdBQUcsb0JBQW9CLDRCQUE0QixHQUFHLGtCQUFrQiw0QkFBNEIsR0FBRyxlQUFlLGdCQUFnQixHQUFHLGdCQUFnQixpQkFBaUIsR0FBRyxzQkFBc0IsdUJBQXVCLEdBQUcsa0xBQWtMLG9CQUFvQixHQUFHLG1OQUFtTix1QkFBdUIsR0FBRyw4QkFBOEIsV0FBVyxZQUFZLGFBQWEsR0FBRyxrQ0FBa0MsV0FBVyxhQUFhLGNBQWMsR0FBRyxvQ0FBb0MsYUFBYSxjQUFjLFlBQVksR0FBRyxnQ0FBZ0MsV0FBVyxjQUFjLFlBQVksR0FBRyx3Q0FBd0MsV0FBVyxZQUFZLEdBQUcsMENBQTBDLFdBQVcsYUFBYSxHQUFHLDhDQUE4QyxjQUFjLFlBQVksR0FBRyxnREFBZ0QsY0FBYyxhQUFhLEdBQUcsZUFBZSxrQkFBa0IsZ0NBQWdDLHFCQUFxQixzQkFBc0IsR0FBRyxnQ0FBZ0MsV0FBVyxhQUFhLGNBQWMsWUFBWSxHQUFHLG9DQUFvQyxhQUFhLGNBQWMscUNBQXFDLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLG9CQUFvQixzQ0FBc0MsR0FBRyxvQkFBb0Isc0NBQXNDLEdBQUcsWUFBWSx1QkFBdUIsR0FBRyxhQUFhLHNCQUFzQixHQUFHLHVCQUF1QixXQUFXLFlBQVksZ0JBQWdCLGlCQUFpQix1QkFBdUIsbUJBQW1CLDJCQUEyQixxQkFBcUIsZUFBZSx5QkFBeUIsR0FBRyx1QkFBdUIsV0FBVyw2QkFBNkIsZUFBZSxtQkFBbUIsdUJBQXVCLHVCQUF1Qiw2QkFBNkIsK0dBQStHLHlCQUF5QixxQkFBcUIsb0NBQW9DLEdBQUcsNkJBQTZCLHFCQUFxQixHQUFHLCtCQUErQixrQkFBa0IsR0FBRyxvQkFBb0IscUJBQXFCLHVCQUF1Qix5QkFBeUIsdUJBQXVCLGNBQWMsZUFBZSxnQkFBZ0IsaUJBQWlCLEdBQUcsMEJBQTBCLGdCQUFnQixtQkFBbUIsdUJBQXVCLFdBQVcsWUFBWSxhQUFhLGNBQWMsb0ZBQW9GLGlDQUFpQyw2QkFBNkIsNkJBQTZCLGVBQWUsMkNBQTJDLEdBQUcsaUNBQWlDLDJCQUEyQixpQkFBaUIsbUJBQW1CLEdBQUcsU0FBUyxtQkFBbUIsdUJBQXVCLHVCQUF1Qix1QkFBdUIsd0JBQXdCLEdBQUcsUUFBUSwyQkFBMkIsNEJBQTRCLEdBQUcsZ0JBQWdCLDRCQUE0QixHQUFHLGVBQWUsMkJBQTJCLDhCQUE4QiwrQkFBK0IsR0FBRyxrQkFBa0IsNkJBQTZCLGdDQUFnQyw2QkFBNkIsR0FBRyxpQkFBaUIsOEJBQThCLCtCQUErQiw0QkFBNEIsR0FBRyxVQUFVLDhCQUE4QixHQUFHLGlCQUFpQixxQ0FBcUMsR0FBRyxjQUFjLGlCQUFpQixHQUFHLDJCQUEyQixvQkFBb0IsR0FBRywyQkFBMkIscUJBQXFCLEdBQUcsMkJBQTJCLG1CQUFtQixHQUFHLDJCQUEyQixzQkFBc0IsR0FBRyxjQUFjLGdCQUFnQixHQUFHLDJCQUEyQixtQkFBbUIsR0FBRywyQkFBMkIsb0JBQW9CLEdBQUcsMkJBQTJCLGtCQUFrQixHQUFHLDJCQUEyQixxQkFBcUIsR0FBRyxZQUFZLHFCQUFxQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLG9CQUFvQixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyx1QkFBdUIsc0JBQXNCLEdBQUcsdUJBQXVCLG9CQUFvQixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyxZQUFZLHFCQUFxQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLG9CQUFvQixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyx1QkFBdUIsc0JBQXNCLEdBQUcsdUJBQXVCLG9CQUFvQixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRyxZQUFZLHVCQUF1QixHQUFHLHVCQUF1Qix1QkFBdUIsR0FBRyx1QkFBdUIsd0JBQXdCLEdBQUcsdUJBQXVCLHNCQUFzQixHQUFHLHVCQUF1Qix5QkFBeUIsR0FBRyxZQUFZLHNCQUFzQixHQUFHLHVCQUF1QixzQkFBc0IsR0FBRyx1QkFBdUIsdUJBQXVCLEdBQUcsdUJBQXVCLHFCQUFxQixHQUFHLHVCQUF1Qix3QkFBd0IsR0FBRywyQkFBMkIsc0JBQXNCLEdBQUcsMkJBQTJCLHVCQUF1QixHQUFHLGNBQWMscUJBQXFCLHVCQUF1QixHQUFHLFlBQVksOEJBQThCLDhCQUE4Qiw4QkFBOEIsOEJBQThCLG9CQUFvQiwyQkFBMkIsNEJBQTRCLEdBQUcsY0FBYyw0QkFBNEIsNEJBQTRCLEdBQUcsY0FBYyw0QkFBNEIsNEJBQTRCLEdBQUcsUUFBUSxxQkFBcUIsMkZBQTJGLCtCQUErQixtQ0FBbUMsd0NBQXdDLHVDQUF1QyxnQ0FBZ0MscUJBQXFCLG1CQUFtQixzQkFBc0IsR0FBRyxNQUFNLHFCQUFxQixxQkFBcUIsc0JBQXNCLDRCQUE0QixHQUFHLHdDQUF3QyxRQUFRLHdCQUF3QixLQUFLLEdBQUcsTUFBTSxvQkFBb0IscUJBQXFCLHNCQUFzQiw0QkFBNEIsR0FBRyx3Q0FBd0MsUUFBUSx3QkFBd0IsS0FBSyxHQUFHLE1BQU0sb0JBQW9CLHFCQUFxQixzQkFBc0IsMkJBQTJCLEdBQUcsd0NBQXdDLFFBQVEsc0JBQXNCLEtBQUssR0FBRyxNQUFNLG9CQUFvQixxQkFBcUIsc0JBQXNCLDJCQUEyQixHQUFHLHdDQUF3QyxRQUFRLHdCQUF3QixLQUFLLEdBQUcsTUFBTSxvQkFBb0IscUJBQXFCLHNCQUFzQiwyQkFBMkIsR0FBRyx3Q0FBd0MsUUFBUSxzQ0FBc0MsS0FBSyxHQUFHLE1BQU0sb0JBQW9CLHFCQUFxQixzQkFBc0IsMkJBQTJCLEdBQUcsd0NBQXdDLFFBQVEsc0JBQXNCLEtBQUssR0FBRyx3QkFBd0Isa0JBQWtCLEdBQUcsZ0JBQWdCLHFCQUFxQixxQkFBcUIsc0JBQXNCLDRCQUE0QixHQUFHLHdCQUF3QixrQkFBa0IsR0FBRyxnQkFBZ0Isb0JBQW9CLHFCQUFxQixzQkFBc0IsNEJBQTRCLEdBQUcsd0JBQXdCLGtCQUFrQixHQUFHLGdCQUFnQixvQkFBb0IscUJBQXFCLHNCQUFzQiwyQkFBMkIsR0FBRyx3QkFBd0Isa0JBQWtCLEdBQUcsZ0JBQWdCLG9CQUFvQixxQkFBcUIsc0JBQXNCLDJCQUEyQixHQUFHLHVCQUF1QixrQkFBa0IsR0FBRyxlQUFlLG9CQUFvQixxQkFBcUIsc0JBQXNCLDJCQUEyQixHQUFHLG9CQUFvQixrQkFBa0IsR0FBRyxZQUFZLG9CQUFvQixxQkFBcUIsc0JBQXNCLDJCQUEyQixHQUFHLHlCQUF5QixrQkFBa0IsR0FBRyxpQkFBaUIsb0JBQW9CLHFCQUFxQixHQUFHLHFCQUFxQixrQkFBa0IsR0FBRyxhQUFhLG9CQUFvQixxQkFBcUIsR0FBRyxxQkFBcUIsa0JBQWtCLEdBQUcsYUFBYSxvQkFBb0IscUJBQXFCLEdBQUcsc0JBQXNCLGtCQUFrQixHQUFHLGNBQWMsb0JBQW9CLHFCQUFxQixHQUFHLEtBQUsscUJBQXFCLEdBQUcsWUFBWSxtQkFBbUIsc0JBQXNCLHNCQUFzQixlQUFlLHFCQUFxQixHQUFHLGNBQWMsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxlQUFlLCtCQUErQixHQUFHLGdCQUFnQix1QkFBdUIsR0FBRyxjQUFjLHFCQUFxQixHQUFHLGVBQWUsc0JBQXNCLEdBQUcsaUJBQWlCLHdCQUF3QiwwQkFBMEIsMEJBQTBCLDBCQUEwQixHQUFHLGdCQUFnQix1QkFBdUIsR0FBRyxjQUFjLHNCQUFzQixHQUFHLGlCQUFpQix3QkFBd0IsR0FBRyxxQkFBcUIscUJBQXFCLEdBQUcsc0JBQXNCLHFCQUFxQixHQUFHLHdCQUF3QixxQkFBcUIsR0FBRyx1QkFBdUIscUJBQXFCLEdBQUcscUJBQXFCLHFCQUFxQixHQUFHLHVCQUF1QixxQkFBcUIsR0FBRyxTQUFTLG1CQUFtQixHQUFHLE9BQU8sb0JBQW9CLEdBQUcsT0FBTyxvQkFBb0IsR0FBRyxPQUFPLGdCQUFnQixHQUFHLGNBQWMsc0JBQXNCLGNBQWMsb0JBQW9CLG1DQUFtQyxrREFBa0QsR0FBRyx5QkFBeUIsd0JBQXdCLG9CQUFvQixvQ0FBb0MsbURBQW1ELG1CQUFtQixzQkFBc0IsR0FBRyxvQkFBb0IsbUJBQW1CLHFCQUFxQixnQkFBZ0IsZ0NBQWdDLEdBQUcsMkJBQTJCLDZCQUE2QixHQUFHLFVBQVUsdUJBQXVCLHFCQUFxQixtQ0FBbUMsa0RBQWtELEdBQUcscUJBQXFCLHdCQUF3QixvQkFBb0Isb0NBQW9DLG1EQUFtRCxtQkFBbUIsc0JBQXNCLEdBQUcsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLG1CQUFtQixHQUFHLFdBQVcscUJBQXFCLEdBQUcsTUFBTSxrQkFBa0Isd0JBQXdCLEdBQUcsb0JBQW9CLGdCQUFnQixlQUFlLGdCQUFnQixzQkFBc0IscUJBQXFCLDRCQUE0Qix3QkFBd0IsR0FBRyxvQkFBb0IscUJBQXFCLEdBQUcsMEJBQTBCLGdCQUFnQixvQkFBb0IsbUJBQW1CLGlCQUFpQixnQkFBZ0IsaUNBQWlDLEdBQUcsZ0JBQWdCLHVDQUF1QyxHQUFHLGNBQWMseUJBQXlCLEdBQUcsZUFBZSwwQkFBMEIsR0FBRyxjQUFjLHlCQUF5QixHQUFHLHFCQUFxQixnQ0FBZ0MsR0FBRyxrQkFBa0IsZ0NBQWdDLEdBQUcsZUFBZSwwQkFBMEIsR0FBRyxhQUFhLDRCQUE0Qix3QkFBd0IscUJBQXFCLEdBQUcseUNBQXlDLHFCQUFxQix5QkFBeUIsR0FBRyxxQkFBcUIsMEJBQTBCLEdBQUcscUJBQXFCLDBCQUEwQixHQUFHLGFBQWEsK0JBQStCLEdBQUcsdURBQXVELG1DQUFtQyxHQUFHLDBCQUEwQiw0QkFBNEIsR0FBRyxXQUFXLDZCQUE2QixHQUFHLGNBQWMsa0NBQWtDLEdBQUcsZ0JBQWdCLHVDQUF1QyxHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxvQkFBb0IsZ0NBQWdDLEdBQUcsc0JBQXNCLGtDQUFrQyxHQUFHLHVDQUF1QyxnQkFBZ0IsdUJBQXVCLFdBQVcsYUFBYSxjQUFjLFlBQVksR0FBRyxpQkFBaUIsMkNBQTJDLEdBQUcsdUJBQXVCLGlEQUFpRCxHQUFHLFVBQVUsNkJBQTZCLEdBQUcsVUFBVSw2QkFBNkIsR0FBRyxpRUFBaUUsNkJBQTZCLEdBQUcsNkRBQTZELDZCQUE2QixHQUFHLGlFQUFpRSw2QkFBNkIsR0FBRyxxRUFBcUUsNkJBQTZCLEdBQUcsaURBQWlELDZCQUE2QixHQUFHLGlEQUFpRCw2QkFBNkIsR0FBRyx5REFBeUQsNkJBQTZCLEdBQUcseUZBQXlGLDZCQUE2QixHQUFHLHFGQUFxRiw2QkFBNkIsR0FBRyxxR0FBcUcsNkJBQTZCLEdBQUcsMENBQTBDLDRCQUE0QiwrQkFBK0IsS0FBSyxHQUFHLDJDQUEyQywyQkFBMkIsK0JBQStCLEtBQUssR0FBRyxpQkFBaUIsaUJBQWlCLCtCQUErQixLQUFLLEdBQUcsZ0JBQWdCLGlCQUFpQiwrQkFBK0IsS0FBSyxHQUFHLDZCQUE2QiwwRkFBMEYsK0JBQStCLEtBQUssR0FBRyxvREFBb0QsMEZBQTBGLCtCQUErQixLQUFLLEdBQUcsb0RBQW9ELDBGQUEwRiwrQkFBK0IsS0FBSyxHQUFHLHFEQUFxRCwwRkFBMEYsK0JBQStCLEtBQUssR0FBRyw4QkFBOEIsMEZBQTBGLCtCQUErQixLQUFLLEdBQUcsbUJBQW1CLHVCQUF1QixXQUFXLDZCQUE2QixnQkFBZ0IsaUJBQWlCLHlCQUF5QiwyQkFBMkIsa0JBQWtCLHNFQUFzRSxHQUFHLDJCQUEyQix1QkFBdUIsR0FBRyx5QkFBeUIsdUJBQXVCLEdBQUcscUdBQXFHLDZCQUE2QixHQUFHLGdEQUFnRCw2QkFBNkIsaUJBQWlCLEdBQUcsNEVBQTRFLHlCQUF5QixvQ0FBb0MsMkJBQTJCLGtDQUFrQywyQkFBMkIsS0FBSyxpREFBaUQsb0NBQW9DLDJCQUEyQixLQUFLLHNEQUFzRCxzQkFBc0IsNkNBQTZDLG9DQUFvQyxLQUFLLDRCQUE0QixxQkFBcUIsS0FBSyx3QkFBd0IsZUFBZSxLQUFLLCtDQUErQyxxQkFBcUIsMEJBQTBCLEtBQUssa0VBQWtFLGtCQUFrQixLQUFLLHVCQUF1QixzQkFBc0IsS0FBSyxpQ0FBaUMsb0NBQW9DLDJCQUEyQixLQUFLLDJDQUEyQyxxQkFBcUIsS0FBSywrQkFBK0Isa0JBQWtCLEtBQUsseUJBQXlCLG9DQUFvQywyQkFBMkIsS0FBSywrREFBK0QsZ0NBQWdDLEtBQUsscUZBQXFGLGdDQUFnQyxLQUFLLHVHQUF1RyxnQ0FBZ0MsS0FBSyxpSkFBaUosZ0JBQWdCLEtBQUssZ0VBQWdFLHdCQUF3QixLQUFLLG9CQUFvQiw0QkFBNEIsS0FBSyxpQ0FBaUMsMEJBQTBCLEtBQUssOERBQThELHFCQUFxQiwwQkFBMEIsS0FBSyxrQkFBa0IscUJBQXFCLEtBQUssbUNBQW1DLHNCQUFzQix1QkFBdUIsS0FBSyxxQkFBcUIsa0NBQWtDLHVCQUF1QixLQUFLLEdBQUcsbUNBQW1DLHlCQUF5QixvQ0FBb0MsMkJBQTJCLGtDQUFrQywyQkFBMkIsS0FBSyxpREFBaUQsb0NBQW9DLDJCQUEyQixLQUFLLHNEQUFzRCxzQkFBc0IsNkNBQTZDLG9DQUFvQyxLQUFLLDRCQUE0QixxQkFBcUIsS0FBSyx3QkFBd0IsZUFBZSxLQUFLLCtDQUErQyxxQkFBcUIsMEJBQTBCLEtBQUssa0VBQWtFLGtCQUFrQixLQUFLLHVCQUF1QixzQkFBc0IsS0FBSyxpQ0FBaUMsb0NBQW9DLDJCQUEyQixLQUFLLDJDQUEyQyxxQkFBcUIsS0FBSywrQkFBK0Isa0JBQWtCLEtBQUsseUJBQXlCLG9DQUFvQywyQkFBMkIsS0FBSywrREFBK0QsZ0NBQWdDLEtBQUsscUZBQXFGLGdDQUFnQyxLQUFLLHVHQUF1RyxnQ0FBZ0MsS0FBSyxpSkFBaUosZ0JBQWdCLEtBQUssZ0VBQWdFLHdCQUF3QixLQUFLLG9CQUFvQiw0QkFBNEIsS0FBSyxpQ0FBaUMsMEJBQTBCLEtBQUssOERBQThELHFCQUFxQiwwQkFBMEIsS0FBSyxrQkFBa0IscUJBQXFCLEtBQUssbUNBQW1DLHNCQUFzQix1QkFBdUIsS0FBSyxxQkFBcUIsa0NBQWtDLHVCQUF1QixLQUFLLEdBQUcsaUNBQWlDLFFBQVEsOEJBQThCLHFCQUFxQixLQUFLLEdBQUcsa0NBQWtDLFFBQVEsOEJBQThCLEtBQUssR0FBRyx1Q0FBdUMsUUFBUSxpQkFBaUIsa0JBQWtCLEtBQUssU0FBUyxpQkFBaUIsa0JBQWtCLEtBQUssVUFBVSxpQkFBaUIsa0JBQWtCLEtBQUssR0FBRyw2Q0FBNkMsUUFBUSxrQkFBa0Isa0JBQWtCLEtBQUssU0FBUyxpQkFBaUIsaUJBQWlCLEtBQUssVUFBVSxpQkFBaUIsaUJBQWlCLEtBQUssR0FBRyxpQ0FBaUMsVUFBVSxrQ0FBa0MsS0FBSyxRQUFRLCtCQUErQixLQUFLLEdBQUcseUJBQXlCLFFBQVEsK0JBQStCLDJCQUEyQixLQUFLLFNBQVMsZ0NBQWdDLCtCQUErQixLQUFLLFVBQVUsZ0NBQWdDLGdDQUFnQyxLQUFLLEdBQUcsMEJBQTBCLFFBQVEsMEJBQTBCLEtBQUssVUFBVSw4QkFBOEIsS0FBSyxHQUFHLHVCQUF1QixRQUFRLDRDQUE0QyxLQUFLLFNBQVMsZ0RBQWdELEtBQUssU0FBUyxpREFBaUQsS0FBSyxTQUFTLGlEQUFpRCxLQUFLLFVBQVUsaURBQWlELEtBQUssR0FBRyxzQkFBc0IsUUFBUSx5QkFBeUIsS0FBSyxHQUFHLHFCQUFxQixRQUFRLCtDQUErQyxLQUFLLFVBQVUsaURBQWlELEtBQUssR0FBRyxvQkFBb0IsUUFBUSxpQkFBaUIsNEJBQTRCLEtBQUssU0FBUyxpQkFBaUIsNkJBQTZCLEtBQUssVUFBVSwwQkFBMEIsS0FBSyxHQUFHLHFCQUFxQixRQUFRLGlCQUFpQixLQUFLLFVBQVUsaUJBQWlCLEtBQUssR0FBRyxzQkFBc0IsUUFBUSxpQkFBaUIsNEJBQTRCLEtBQUssVUFBVSxpQkFBaUIsMEJBQTBCLEtBQUssR0FBRyx1QkFBdUIsNkJBQTZCLCtCQUErQixLQUFLLFNBQVMsbUNBQW1DLEtBQUssU0FBUyxtQ0FBbUMsS0FBSyxHQUFHLHNCQUFzQixRQUFRLDBCQUEwQixLQUFLLFNBQVMsNkJBQTZCLEtBQUssVUFBVSwwQkFBMEIsS0FBSyxHQUFHLDJCQUEyQixRQUFRLGlCQUFpQiwrQ0FBK0MsMkJBQTJCLEtBQUssU0FBUyxpQkFBaUIsS0FBSyxHQUFHLHlCQUF5QixRQUFRLGlCQUFpQiw4Q0FBOEMsMkJBQTJCLEtBQUssU0FBUyxpQkFBaUIsS0FBSyxHQUFHLDJCQUEyQixRQUFRLGtDQUFrQyxLQUFLLEdBQUcsNEJBQTRCLFFBQVEsaUNBQWlDLEtBQUssR0FBRzs7QUFFbDAyTDs7Ozs7Ozs7Ozs7O0FDUEEsMkJBQTJCLG1CQUFPLENBQUMsNkZBQTRDO0FBQy9FOzs7QUFHQTtBQUNBLGNBQWMsUUFBUyx1Q0FBdUMsdUJBQXVCLEdBQUcsMkJBQTJCLHlCQUF5Qix1QkFBdUIseUNBQXlDLHFCQUFxQixlQUFlLG9CQUFvQixHQUFHLHFDQUFxQywwQkFBMEIsb0JBQW9CLEdBQUcsMkJBQTJCLGVBQWUsR0FBRywyTkFBMk4sZUFBZSxxQkFBcUIsR0FBRyx1Q0FBdUMscUJBQXFCLEdBQUcsdUJBQXVCLHlCQUF5QixvQkFBb0IsR0FBRyx1QkFBdUIseUJBQXlCLHVCQUF1QixxQkFBcUIsR0FBRyw4QkFBOEIsbUJBQW1CLEdBQUcsZ0NBQWdDLG9CQUFvQixHQUFHLCtCQUErQixvQkFBb0IsR0FBRyxnQ0FBZ0MsbUJBQW1CLHFCQUFxQixHQUFHLDRDQUE0QyxvQkFBb0IsR0FBRzs7QUFFaHFDOzs7Ozs7Ozs7Ozs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxjQUFjOztBQUVsRTtBQUNBOzs7Ozs7Ozs7Ozs7QUMzRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVTs7Ozs7Ozs7Ozs7OztBQ3ZMdEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRixZQUFZLGVBQWU7QUFDM0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7O0FBTUE7QUFDQSxrQkFBa0IsWUFBWSxFQUFFO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQSxNQUFNLEtBQWdELEVBQUUsRUFFckQsVUFBVSxLQUFxQjtBQUNsQztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0EsbUNBQW1DLFdBQVc7O0FBRTlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7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LEtBQUs7OztBQUdMO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDRCQUE0Qiw4REFBOEQ7QUFDMUY7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsMkNBQTJDLFVBQVU7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQkFBZ0I7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QixtQkFBbUIsNEJBQTRCLDRCQUE0Qiw0Q0FBNEMsMEJBQTBCLDhHQUE4RyxPQUFPLG1FQUFtRSx3QkFBd0I7QUFDalc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTLEVBQUUsSUFBSSwwRUFBMEUsaUJBQWlCLHVEQUF1RCxnQkFBZ0I7QUFDakwsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsa0JBQWtCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxvQ0FBb0MsZUFBZTtBQUNuRDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUZBQW1GO0FBQ25GO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQSxlQUFlLDJDQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTOztBQUVUO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsY0FBYztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFMEU7QUFDM0QscUVBQU0sRUFBQzs7Ozs7Ozs7Ozs7Ozs7QUMvdER0QjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0M7O0FBRWxDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsK0JBQStCO0FBQ3JELHNCQUFzQixpQkFBaUI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsaUNBQWlDLEVBQUU7QUFDckYsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsY0FBYzs7QUFFM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFVBQVU7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQyxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGFBQW9COztBQUVyQztBQUNBO0FBQ0E7QUFDQSxZQUFZLGFBQW9COztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixxQkFBcUI7QUFDeEMsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQztBQUNwQzs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsdUNBQXVDLHdCQUF3QixFQUFFO0FBQ2pFLDBCQUEwQjs7QUFFMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQyxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQSx3Q0FBd0MsRUFBRTtBQUMxQztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixvQkFBb0IsRUFBRTtBQUNyRDtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQixTQUFTLHFCQUFxQjs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxPQUFPO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsS0FBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsT0FBTztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFxQztBQUN6QztBQUNBO0FB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VUFBVSxJQUFxQztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxPQUFPO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUVRO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkMscUNBQXFDLEVBQUU7QUFDcEY7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG9DQUFvQyx5Q0FBeUMs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QUFDQSwyQkFBMkIsdUJBQXVCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsSUFBcUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsU0FBUztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxPQUFPO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjs7QUFFMUIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIscUJBQXFCO0FBQ3hDO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHlCQUF5QjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix5QkFBeUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiwwQkFBMEI7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLG9CQUFvQixFQUFFOztBQUVwRDtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVSxLQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsS0FBcUM7QUFDekQ7QUFDQSxNQUFNLFNBQUU7QUFDUjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUMscUJBQXFCLCtCQUErQjtBQUNwRDtBQUNBO0FBQ0EsR0FBRztBQUNILHlCQUF5QjtBQUN6QjtBQUNBLHNCQUFzQixpQ0FBaUM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxNQUFNLEVBRU47QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssVUFBVSxJQUFxQztBQUNwRDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQkFBb0I7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLDhCQUE4QjtBQUM5QixNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0EsS0FBSyxNQUFNLEVBRU47QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixlQUFlO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNFQUFzRTtBQUN0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxZQUFZLEtBQXFDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7Ozs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsMkJBQTJCLEVBQUU7QUFDdkUsS0FBSztBQUNMO0FBQ0EsMENBQTBDLDRCQUE0QixFQUFFO0FBQ3hFLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZUFBZTtBQUM5QyxNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3RELGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyw2Q0FBNkMsRUFBRTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix3QkFBd0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELDRCQUE0QixFQUFFO0FBQ2xGLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELCtCQUErQixFQUFFO0FBQ3JGLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsYUFBYTs7QUFFM0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxLQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxxQ0FBcUM7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1Q0FBdUMsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsMkNBQTJDLEVBQUU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLDhCQUE4QixFQUFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDLHVDQUF1Qzs7QUFFekUscUNBQXFDLDBCQUEwQjs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNB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QUNBNkcsTUFBTSxDQUFDZSxPQUFPLENBQUM1SCxDQUFELENBQVAsR0FBYSw2QkFBZCxDQUZSO0FBR0Q7O0FBRUQsTUFBSSxDQUFDNkcsTUFBTSxDQUFDZ0IscUJBQVosRUFDRWhCLE1BQU0sQ0FBQ2dCLHFCQUFQLEdBQStCLFVBQVNFLFFBQVQsRUFBbUJDLE9BQW5CLEVBQTRCO0FBQ3pELFFBQUlDLFFBQVEsR0FBRyxJQUFJQyxJQUFKLEdBQVdDLE9BQVgsRUFBZjtBQUNBLFFBQUlDLFVBQVUsR0FBRzNSLElBQUksQ0FBQzRSLEdBQUwsQ0FBUyxDQUFULEVBQVksTUFBTUosUUFBUSxHQUFHTixRQUFqQixDQUFaLENBQWpCO0FBQ0EsUUFBSWxOLEVBQUUsR0FBR29NLE1BQU0sQ0FBQ3lCLFVBQVAsQ0FBa0IsWUFBVztBQUNwQ1AsY0FBUSxDQUFDRSxRQUFRLEdBQUdHLFVBQVosQ0FBUjtBQUNELEtBRlEsRUFFTkEsVUFGTSxDQUFUO0FBSUFULFlBQVEsR0FBR00sUUFBUSxHQUFHRyxVQUF0QjtBQUNBLFdBQU8zTixFQUFQO0FBQ0QsR0FURDtBQVdGLE1BQUksQ0FBQ29NLE1BQU0sQ0FBQ2lCLG9CQUFaLEVBQ0VqQixNQUFNLENBQUNpQixvQkFBUCxHQUE4QixVQUFTck4sRUFBVCxFQUFhO0FBQ3pDOE4sZ0JBQVksQ0FBQzlOLEVBQUQsQ0FBWjtBQUNELEdBRkQ7QUFHSCxDQTVCRCxFQURGLEMiLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiRW1vamlNYXJ0XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkVtb2ppTWFydFwiXSA9IGZhY3RvcnkoKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9kb2NzL2luZGV4LmpzXCIpO1xuIiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9lbW9qaS1tYXJ0LmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI2ZjBlMGY4Y1wiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2Vtb2ppLW1hcnQuY3NzXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9lbW9qaS1tYXJ0LmNzc1wiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI0ZmJjNzM1YlwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzRmYmM3MzViJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzRmYmM3MzViJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRmYmM3MzViJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJkb2NzL2FwcC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmXCIiLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBBcHAgZnJvbSAnLi9hcHAnXG5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcXVhc2FyZnJhbWV3b3JrL3F1YXNhci9pc3N1ZXMvMTU3NlxuLy8gZm9yIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBRdWFzYXIgaW50ZWdyYXRpb24gaW50byBleGlzdGluZyBhcHAuXG5pbXBvcnQgJ3F1YXNhci1mcmFtZXdvcmsvZGlzdC91bWQvcXVhc2FyLm1hdC5jc3MnXG5pbXBvcnQgUXVhc2FyIGZyb20gJ3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbSdcblZ1ZS51c2UoUXVhc2FyKVxuXG5uZXcgVnVlKHtcblx0ZWw6ICcjYXBwJyxcblx0cmVuZGVyOiAoaCkgPT4gaChBcHApLFxufSlcbiIsImZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL2RlZmluZVByb3BlcnR5XCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFNwcmVhZDsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7IiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiYXBwXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGgxPkVtb2ppIE1hcnQgVnVlIPCfj6w8L2gxPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxlbW9qaSA6ZGF0YT1cImluZGV4XCIgZW1vamk9XCI6c2FudGE6OnNraW4tdG9uZS0zOlwiIDpzaXplPVwiMzJcIiAvPlxuICAgICAgPGVtb2ppIDpkYXRhPVwiaW5kZXhcIiBlbW9qaT1cInNhbnRhXCIgc2V0PVwiZW1vamlvbmVcIiA6c2l6ZT1cIjMyXCIgLz5cbiAgICAgIDxlbW9qaSA6ZGF0YT1cImluZGV4XCIgOmVtb2ppPVwic2FudGFFbW9qaU9iamVjdFwiIDpzaXplPVwiMzJcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ0b2dnbGVWaXNpYmxlXCI+U2hvdyAvIGhpZGUgdGhlIHBpY2tlcjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ0b2dnbGVWaXNpYmxlXCIgdi1odG1sPVwic21pbGVcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDx0ZW1wbGF0ZVxuICAgICAgICB2LWZvcj1cInNldCBpbiBbXG4gICAgICAgICAgJ25hdGl2ZScsXG4gICAgICAgICAgJ2FwcGxlJyxcbiAgICAgICAgICAnZ29vZ2xlJyxcbiAgICAgICAgICAndHdpdHRlcicsXG4gICAgICAgICAgJ2Vtb2ppb25lJyxcbiAgICAgICAgICAnbWVzc2VuZ2VyJyxcbiAgICAgICAgICAnZmFjZWJvb2snLFxuICAgICAgICBdXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIDprZXk9XCJzZXRcIlxuICAgICAgICAgIEBjbGljaz1cImFjdGl2ZVNldCA9IHNldFwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiYWN0aXZlU2V0ID09IHNldFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzZXQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiB2LWlmPVwiaXNWaXNpYmxlXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxwaWNrZXJcbiAgICAgICAgOmRhdGE9XCJpbmRleFwiXG4gICAgICAgIDpzZXQ9XCJhY3RpdmVTZXRcIlxuICAgICAgICA6bmF0aXZlPVwibmF0aXZlXCJcbiAgICAgICAgOmVtb2ppPVwiZW1vamlcIlxuICAgICAgICA6ZW1vamlUb29sdGlwPVwidHJ1ZVwiXG4gICAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgICAgOmVtb2ppU2l6ZT1cIjMwXCJcbiAgICAgICAgQHNlbGVjdD1cInNob3dFbW9qaVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPnt7IGVtb2ppc091dHB1dCB9fTwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdy1zbWFsbFwiPlxuICAgICAgPGlmcmFtZVxuICAgICAgICBzcmM9XCJodHRwczovL2doYnRucy5jb20vZ2l0aHViLWJ0bi5odG1sP3VzZXI9c2VyZWJyb3YmcmVwbz1lbW9qaS1tYXJ0LXZ1ZSZ0eXBlPXN0YXImY291bnQ9dHJ1ZVwiXG4gICAgICAgIGZyYW1lQm9yZGVyPVwiMFwiXG4gICAgICAgIHNjcm9sbGluZz1cIjBcIlxuICAgICAgICB3aWR0aD1cIjkwcHhcIlxuICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgID48L2lmcmFtZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48L2Rpdj5cbiAgICA8aDI+UURpYWxvZyBFeGFtcGxlPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8cS1idG4gbGFiZWw9XCJPcGVuIFFEaWFsb2dcIiBAY2xpY2s9XCJlbW9qaVBpY2tlckRpYWxvZyA9IHRydWVcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPHEtZGlhbG9nIHYtbW9kZWw9XCJlbW9qaVBpY2tlckRpYWxvZ1wiPlxuICAgICAgPHRlbXBsYXRlIHYtc2xvdDpib2R5IHN0eWxlPVwiaGVpZ2h0OjQ1MHB4XCI+XG4gICAgICAgIDxwaWNrZXIgOmRhdGE9XCJpbmRleFwiIDplbW9qaVNpemU9XCIyNFwiIDpuYXRpdmU9XCJ0cnVlXCI+PC9waWNrZXI+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvcS1kaWFsb2c+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PC9kaXY+XG4gICAgPGgyPkN1c3RvbSBTZWFyY2ggQW5kIFByZXZpZXcgVGVtcGxhdGVzIEV4YW1wbGU8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIEFsc28gaGVyZSB3ZSB1c2UgXCJTdGF0aWNQaWNrZXJcIiB3aGljaCBkb2VzIG5vdCB1c2UgdmlydHVhbCBzY3JvbGxlciAoaXQgaXNcbiAgICAgIHNsb3dlciwgYnV0IGVhc2llciB0byBjdXN0b21pemUgd2l0aCBjc3MpXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFN0YXRpY1BpY2tlciA6ZGF0YT1cImluZGV4XCIgOm5hdGl2ZT1cInRydWVcIj5cbiAgICAgICAgPHRlbXBsYXRlIHNsb3Q9XCJzZWFyY2hUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIDpwbGFjZWhvbGRlcj1cInNsb3RQcm9wcy5pMThuLnNlYXJjaFwiXG4gICAgICAgICAgICB2LW9uOmlucHV0PVwic2xvdFByb3BzLm9uU2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgc2xvdD1cInByZXZpZXdUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICAgICAgICAgIDxFbW9qaVxuICAgICAgICAgICAgICAgIDpkYXRhPVwic2xvdFByb3BzLmRhdGFcIlxuICAgICAgICAgICAgICAgIDplbW9qaT1cInNsb3RQcm9wcy5lbW9qaSA/IHNsb3RQcm9wcy5lbW9qaSA6ICdwb2ludF91cCdcIlxuICAgICAgICAgICAgICAgIDpuYXRpdmU9XCJzbG90UHJvcHMuZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICAgICAgICAgIDpza2luPVwic2xvdFByb3BzLmVtb2ppUHJvcHMuc2tpblwiXG4gICAgICAgICAgICAgICAgOnNldD1cInNsb3RQcm9wcy5lbW9qaVByb3BzLnNldFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppXG4gICAgICAgICAgICAgICAgICAgID8gJ34nICsgc2xvdFByb3BzLmVtb2ppLm5hbWUgKyAnfidcbiAgICAgICAgICAgICAgICAgICAgOiAnQ2hvb3NlLi4uJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZXNcIj5cbiAgICAgICAgICAgICAgICB7eyBzbG90UHJvcHMuZW1vamkgPyBzbG90UHJvcHMuZW1vamkuY29sb25zIDogJycgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvU3RhdGljUGlja2VyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjwvZGl2PlxuICAgIDxoMj5GaWx0ZXJlZCBwaWNrZXIgZXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFBpY2tlclxuICAgICAgICA6bmF0aXZlPVwidHJ1ZVwiXG4gICAgICAgIGVtb2ppPVwiZmxhZy10ZlwiXG4gICAgICAgIDplbW9qaVNpemU9XCIxOFwiXG4gICAgICAgIDpkYXRhPVwiaW5kZXhGaWx0ZXJlZFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgZGF0YSBmcm9tICcuLi9kYXRhL2FsbC5qc29uJ1xuaW1wb3J0IHsgUGlja2VyLCBTdGF0aWNQaWNrZXIsIEVtb2ppLCBFbW9qaUluZGV4IH0gZnJvbSAnLi4vc3JjJ1xuaW1wb3J0ICcuLi9jc3MvZW1vamktbWFydC5jc3MnXG5cbmltcG9ydCB7IFFCdG4sIFFEaWFsb2cgfSBmcm9tICdxdWFzYXItZnJhbWV3b3JrL2Rpc3QvcXVhc2FyLm1hdC5lc20nXG5cbmNvbnN0IENVU1RPTV9FTU9KSVMgPSBbXG4gIHtcbiAgICBuYW1lOiAnUGFydHkgUGFycm90JyxcbiAgICBzaG9ydF9uYW1lczogWydwYXJyb3QnXSxcbiAgICBrZXl3b3JkczogWydwYXJ0eSddLFxuICAgIGltYWdlVXJsOiAnLi9pbWFnZXMvcGFycm90LmdpZicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnT2N0b2NhdCcsXG4gICAgc2hvcnRfbmFtZXM6IFsnb2N0b2NhdCddLFxuICAgIGtleXdvcmRzOiBbJ2dpdGh1YiddLFxuICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9pbWFnZXMvaWNvbnMvZW1vamkvb2N0b2NhdC5wbmcnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NxdWlycmVsJyxcbiAgICBzaG9ydF9uYW1lczogWydzaGlwaXQnLCAnc3F1aXJyZWwnXSxcbiAgICBrZXl3b3JkczogWydnaXRodWInXSxcbiAgICBpbWFnZVVybDogJ2h0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vaW1hZ2VzL2ljb25zL2Vtb2ppL3NoaXBpdC5wbmcnLFxuICB9LFxuXVxuXG5sZXQgaW5kZXggPSBuZXcgRW1vamlJbmRleChkYXRhLCB7XG4gIGN1c3RvbTogQ1VTVE9NX0VNT0pJUyxcbn0pXG5cbmxldCBpbmRleEZpbHRlcmVkID0gbmV3IEVtb2ppSW5kZXgoZGF0YSwge1xuICBjdXN0b206IENVU1RPTV9FTU9KSVMsXG4gIGVtb2ppc1RvU2hvd0ZpbHRlcjogKGVtb2ppKSA9PiB7XG4gICAgcmV0dXJuIGVtb2ppLnNob3J0X25hbWVzWzBdLm1hdGNoKC9eZmxhZy4qLykgIT09IG51bGxcbiAgfSxcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgaW5kZXhGaWx0ZXJlZDogaW5kZXhGaWx0ZXJlZCxcbiAgICAgIGFjdGl2ZVNldDogJ25hdGl2ZScsXG4gICAgICBlbW9qaTogJ3BvaW50X3VwJyxcbiAgICAgIHRpdGxlOiAnUGljayB5b3VyIGVtb2pp4oCmJyxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGVtb2ppUGlja2VyRGlhbG9nOiBmYWxzZSxcbiAgICAgIGVtb2ppc091dHB1dDogJycsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIG5hdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVNldCA9PSAnbmF0aXZlJ1xuICAgIH0sXG4gICAgc21pbGUoKSB7XG4gICAgICAvLyBTdGF0aWMgZW1vamkgZXhhbXBsZVxuICAgICAgbGV0IGVtb2ppID0gaW5kZXguZmluZEVtb2ppKCc6c21pbGU6JylcbiAgICAgIC8vIE5vdGUsIHRoYXQgcG9zaXRpb24gaW4gdGhlIGVtb2ppIHNoZWV0IGlzIGNhbGN1bGF0ZWQgYnlcbiAgICAgIC8vIGBlbW9qaWAgb2JqZWN0XG4gICAgICBsZXQgc3R5bGUgPSBgYmFja2dyb3VuZC1wb3NpdGlvbjogJHtlbW9qaS5nZXRQb3NpdGlvbigpfTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtZW1vamlvbmVANC4wLjQvaW1nL2Vtb2ppb25lL3NoZWV0cy0yNTYvNjQucG5nKTsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kLXNpemU6IDUyMDAlYFxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdlbW9qaScgc3R5bGU9XCIke3N0eWxlfVwiPjwvZGl2PmBcbiAgICB9LFxuICAgIHNhbnRhRW1vamlPYmplY3QoKSB7XG4gICAgICByZXR1cm4gaW5kZXguZmluZEVtb2ppKCc6c2FudGE6JylcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdG9nZ2xlVmlzaWJsZSgpIHtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gIXRoaXMuaXNWaXNpYmxlXG4gICAgfSxcbiAgICBzaG93RW1vamkoZW1vamkpIHtcbiAgICAgIHRoaXMuZW1vamlzT3V0cHV0ID0gdGhpcy5lbW9qaXNPdXRwdXQgKyBlbW9qaS5uYXRpdmVcbiAgICB9LFxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgUGlja2VyLFxuICAgIFN0YXRpY1BpY2tlcixcbiAgICBFbW9qaSxcbiAgICBRQnRuLFxuICAgIFFEaWFsb2csXG4gIH0sXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbmJ1dHRvbiArIGJ1dHRvbiB7XG4gIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbn1cbmJ1dHRvbiB7XG4gIHBhZGRpbmc6IDAuNGVtIDAuNmVtO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgb3V0bGluZTogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5idXR0b25bZGlzYWJsZWRdIHtcbiAgYm9yZGVyLWNvbG9yOiAjYWU2NWM1O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5tb2RhbCB7XG4gIGNvbG9yOiByZWQ7XG59XG5cbi8qKlxuICogU2VlIGh0dHBzOi8vdnVlLWxvYWRlci52dWVqcy5vcmcvZ3VpZGUvc2NvcGVkLWNzcy5odG1sI2RlZXAtc2VsZWN0b3JzXG4gKiB0aGUgYD4+PmAgYWxsb3dzIHRvIGFwcGx5IHNjb3BlZCBjc3MgdG8gY2hpbGQgZWxlbWVudCB0aGF0IGlzIGdlbmVyYXRlZFxuICogZHluYW1pY2FsbHlcbioqL1xuLm1vZGFsID4+PiAubW9kYWwtc2Nyb2xsIHtcbiAgY29sb3I6IHJlZDtcbiAgbWF4LWhlaWdodDogbm9uZTtcbn1cbi5tb2RhbCAubW9kYWwtYm9keSB7XG4gIG1heC1oZWlnaHQ6IG5vbmU7XG59XG5cbmgxIHtcbiAgZm9udC1mYW1pbHk6IENvdXJpZXI7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbn1cblxuaDIge1xuICBmb250LWZhbWlseTogQ291cmllcjtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBtYXJnaW4tdG9wOiAycmVtO1xufVxuXG4uYXBwIC5yb3cge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLnJvdyArIC5yb3cge1xuICBtYXJnaW4tdG9wOiAyZW07XG59XG5cbi5yb3ctc21hbGwge1xuICBtYXJnaW4tdG9wOiAxZW07XG59XG5cbi5lbW9qaS1tYXJ0IHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5lbW9qaS1tYXJ0LXRpdGxlLWxhYmVsIHtcbiAgZm9udC1zaXplOiAyMXB4O1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHNwYW5cbiAgICB2LWlmPVwidmlldy5jYW5SZW5kZXJcIlxuICAgIDp0aXRsZT1cInZpZXcudGl0bGVcIlxuICAgIDpkYXRhLXRpdGxlPVwidGl0bGVcIlxuICAgIGNsYXNzPVwiZW1vamktbWFydC1lbW9qaVwiXG4gICAgQG1vdXNlZW50ZXI9XCJvbk1vdXNlRW50ZXJcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Nb3VzZUxlYXZlXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgPlxuICAgIDxzcGFuIDpjbGFzcz1cInZpZXcuY3NzQ2xhc3NcIiA6c3R5bGU9XCJ2aWV3LmNzc1N0eWxlXCI+e3tcbiAgICAgIHZpZXcuY29udGVudFxuICAgIH19PC9zcGFuPlxuICA8L3NwYW4+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgRW1vamlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL3NoYXJlZC1wcm9wcydcbmltcG9ydCB7IEVtb2ppVmlldyB9IGZyb20gJy4uL3V0aWxzL2Vtb2ppLWRhdGEnXG5cbmNvbnN0IFNIRUVUX0NPTFVNTlMgPSA1MlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgLi4uRW1vamlQcm9wcyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gbmV3IEVtb2ppVmlldyhcbiAgICAgICAgdGhpcy5lbW9qaU9iamVjdCxcbiAgICAgICAgdGhpcy5za2luLFxuICAgICAgICB0aGlzLnNldCxcbiAgICAgICAgdGhpcy5uYXRpdmUsXG4gICAgICAgIHRoaXMuZmFsbGJhY2ssXG4gICAgICAgIHRoaXMudG9vbHRpcCxcbiAgICAgICAgdGhpcy5zaXplLFxuICAgICAgKVxuICAgIH0sXG4gICAgc2FuaXRpemVkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppT2JqZWN0Ll9zYW5pdGl6ZWRcbiAgICB9LFxuICAgIHRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCA/IHRoaXMuZW1vamlPYmplY3Quc2hvcnRfbmFtZSA6IG51bGxcbiAgICB9LFxuICAgIGVtb2ppT2JqZWN0KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtb2ppID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmluZEVtb2ppKHRoaXMuZW1vamkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5lbW9qaVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7fSxcbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLiRlbWl0KCdjbGljaycsIHRoaXMuZW1vamlPYmplY3QpXG4gICAgfSxcbiAgICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdtb3VzZWVudGVyJywgdGhpcy5lbW9qaU9iamVjdClcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ21vdXNlbGVhdmUnLCB0aGlzLmVtb2ppT2JqZWN0KVxuICAgIH0sXG4gIH0sXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnRcIiA6c3R5bGU9XCJjdXN0b21TdHlsZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIHYtaWY9XCJzaG93Q2F0ZWdvcmllc1wiPlxuICAgICAgPGFuY2hvcnNcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmNvbG9yPVwiY29sb3JcIlxuICAgICAgICA6Y2F0ZWdvcmllcz1cImNhdGVnb3JpZXNcIlxuICAgICAgICA6YWN0aXZlLWNhdGVnb3J5PVwiYWN0aXZlQ2F0ZWdvcnlcIlxuICAgICAgICBAY2xpY2s9XCJvbkFuY2hvckNsaWNrXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8c2xvdFxuICAgICAgbmFtZT1cInNlYXJjaFRlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6aTE4bj1cImkxOG5cIlxuICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgOm9uLXNlYXJjaD1cIm9uU2VhcmNoXCJcbiAgICA+XG4gICAgICA8c2VhcmNoXG4gICAgICAgIHYtaWY9XCJzaG93U2VhcmNoXCJcbiAgICAgICAgcmVmPVwic2VhcmNoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgICA6b24tc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgICBAc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L3Nsb3Q+XG5cbiAgICA8Y2F0ZWdvcnlcbiAgICAgIHYtc2hvdz1cInNlYXJjaEVtb2ppc1wiXG4gICAgICBjbGFzcz1cImVtb2ppLW1hcnQtc2VhcmNoLXJlc3VsdHNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDppMThuPVwibWVyZ2VkSTE4blwiXG4gICAgICBpZD1cInNlYXJjaFwiXG4gICAgICBuYW1lPVwiU2VhcmNoXCJcbiAgICAgIDplbW9qaXM9XCJzZWFyY2hFbW9qaXNcIlxuICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgLz5cbiAgICA8RHluYW1pY1Njcm9sbGVyXG4gICAgICB2LXNob3c9XCIhc2VhcmNoRW1vamlzXCJcbiAgICAgIHJlZj1cImR5blNjcm9sbGVyXCJcbiAgICAgIDppdGVtcz1cInNjcm9sbGVyQ2F0ZWdvcmllc1wiXG4gICAgICA6bWluLWl0ZW0tc2l6ZT1cIjYwXCJcbiAgICAgIGNsYXNzPVwic2Nyb2xsZXJcIlxuICAgICAgOmJ1ZmZlcj1cIjQwMFwiXG4gICAgICBrZXktZmllbGQ9XCJpZFwiXG4gICAgICA6ZW1pdC11cGRhdGU9XCJ0cnVlXCJcbiAgICAgIEB1cGRhdGU9XCJvblNjcm9sbFVwZGF0ZVwiXG4gICAgPlxuICAgICAgPHRlbXBsYXRlIHNsb3Qtc2NvcGU9XCJ7IGl0ZW0sIGFjdGl2ZSwgaW5kZXggfVwiPlxuICAgICAgICA8RHluYW1pY1Njcm9sbGVySXRlbSA6aXRlbT1cIml0ZW1cIiA6YWN0aXZlPVwiYWN0aXZlXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICAgIDxjYXRlZ29yeVxuICAgICAgICAgICAgdi1zaG93PVwiaXRlbS5zaG93XCJcbiAgICAgICAgICAgIHJlZj1cImNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgOmtleT1cIml0ZW0uY2F0ZWdvcnkuaWRcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgICAgICAgOmkxOG49XCJpdGVtLm1lcmdlZEkxOG5cIlxuICAgICAgICAgICAgOmlkPVwiaXRlbS5jYXRlZ29yeS5pZFwiXG4gICAgICAgICAgICA6bmFtZT1cIml0ZW0uY2F0ZWdvcnkubmFtZVwiXG4gICAgICAgICAgICA6ZW1vamlzPVwiaXRlbS5jYXRlZ29yeS5lbW9qaXNcIlxuICAgICAgICAgICAgOmVtb2ppLXByb3BzPVwiaXRlbS5lbW9qaVByb3BzXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0R5bmFtaWNTY3JvbGxlckl0ZW0+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvRHluYW1pY1Njcm9sbGVyPlxuXG4gICAgPHNsb3RcbiAgICAgIG5hbWU9XCJwcmV2aWV3VGVtcGxhdGVcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgIDplbW9qaT1cInByZXZpZXdFbW9qaVwiXG4gICAgICA6aWRsZS1lbW9qaT1cImlkbGVFbW9qaVwiXG4gICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICA6ZW1vamktcHJvcHM9XCJlbW9qaVByb3BzXCJcbiAgICAgIDpza2luLXByb3BzPVwic2tpblByb3BzXCJcbiAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtYmFyIGVtb2ppLW1hcnQtYmFyLXByZXZpZXdcIiB2LWlmPVwic2hvd1ByZXZpZXdcIj5cbiAgICAgICAgPHByZXZpZXdcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgICAgICA6ZW1vamk9XCJwcmV2aWV3RW1vamlcIlxuICAgICAgICAgIDppZGxlLWVtb2ppPVwiaWRsZUVtb2ppXCJcbiAgICAgICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAgICAgOnNraW4tcHJvcHM9XCJza2luUHJvcHNcIlxuICAgICAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Nsb3Q+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCAnLi4vdmVuZG9yL3JhZi1wb2x5ZmlsbCdcbmltcG9ydCBzdG9yZSBmcm9tICcuLi91dGlscy9zdG9yZSdcbmltcG9ydCBmcmVxdWVudGx5IGZyb20gJy4uL3V0aWxzL2ZyZXF1ZW50bHknXG5pbXBvcnQgeyBkZWVwTWVyZ2UsIG1lYXN1cmVTY3JvbGxiYXIgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IFBpY2tlclByb3BzIH0gZnJvbSAnLi4vdXRpbHMvc2hhcmVkLXByb3BzJ1xuaW1wb3J0IEFuY2hvcnMgZnJvbSAnLi9hbmNob3JzJ1xuaW1wb3J0IENhdGVnb3J5IGZyb20gJy4vY2F0ZWdvcnknXG5pbXBvcnQgUHJldmlldyBmcm9tICcuL3ByZXZpZXcnXG5pbXBvcnQgU2VhcmNoIGZyb20gJy4vc2VhcmNoJ1xuXG4vKlxuICogTm90ZSBhYm91dCBgYnVmZmVyYCBzZXR0aW5nIGZvciBEeW5hbWljU2Nyb2xsZXI6IHRoaXMgaXMgYVxuICogZml4IGZvciAjNDkgLSB3aGVuIGNsaWNraW5nIG9uIHRoZSBcIkZsYWdzXCIgY2F0ZWdvcnkgZm9yIHRoZSBmaXJzdFxuICogdGltZSwgdGhlIGNhdGVnb3J5IGlzIG5vdCBzY3JvbGxlZCB0byB0aGUgdG9wIG9mIHRoZSBjb21wb25lbnQuXG4gKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxhc3QgY2F0ZWdvcnkgc2l6ZSBpcyBub3QgY2FsY3VsYXRlZCB5ZXQgYW5kXG4gKiB2aXJ0dWFsIHNjcm9sbGVyIHRha2VzICdtaW5JdGVtU2l6ZScgYXMgY2F0ZWdvcnkgaGVpZ2h0LlxuICpcbiAqIFZpcnR1YWwgc2Nyb2xsZXIgKFJlY3ljbGVTY3JvbGxlciBjb21wb25lbnQpIHVzZXMgYGJ1ZmZlcmAgdmFsdWVcbiAqIHRvICBkZWNpZGUgaG93IG1hbnkgY29tcG9uZW50cyB0byByZW5kZXIgaW50aXRpYWxseSBkZXBlbmRpbmcgb25cbiAqIHRoZSBzY3JvbGwgYXJlYSBzaXplICsgYnVmZmVyKjIgKGFuZCBhbGwgY2F0ZWdvcmllcyBpbml0aWFsbHlcbiAqIGhhdmUgbWluIHNpemUsIDYwcHgpLlxuICpcbiAqIEJ5IGluY3JlYXNpbmcgYnVmZmVyIHRvIDQwMHB4LCB3ZSBtYWtlIHRoZSBzY3JvbGxlciB0byBwZXJmb3JtXG4gKiBzaXplIGNhbGN1bGF0aW9uIGZvciBhbGwgY2F0ZWdvcmllcyBhbmQgdGhlIGZvbGxvd2luZ1xuICogc2Nyb2xsVG9JdGVtKCkgY2FsbHMgd29yayBjb3JyZWN0bHkuXG4gKi9cblxuaW1wb3J0IHsgRHluYW1pY1Njcm9sbGVyLCBEeW5hbWljU2Nyb2xsZXJJdGVtIH0gZnJvbSAndnVlLXZpcnR1YWwtc2Nyb2xsZXInXG4vLyBpbXBvcnQgJ3Z1ZS12aXJ0dWFsLXNjcm9sbGVyL2Rpc3QvdnVlLXZpcnR1YWwtc2Nyb2xsZXIuY3NzJ1xuXG5jb25zdCBJMThOID0ge1xuICBzZWFyY2g6ICdTZWFyY2gnLFxuICBub3Rmb3VuZDogJ05vIEVtb2ppIEZvdW5kJyxcbiAgY2F0ZWdvcmllczoge1xuICAgIHNlYXJjaDogJ1NlYXJjaCBSZXN1bHRzJyxcbiAgICByZWNlbnQ6ICdGcmVxdWVudGx5IFVzZWQnLFxuICAgIHBlb3BsZTogJ1NtaWxleXMgJiBQZW9wbGUnLFxuICAgIG5hdHVyZTogJ0FuaW1hbHMgJiBOYXR1cmUnLFxuICAgIGZvb2RzOiAnRm9vZCAmIERyaW5rJyxcbiAgICBhY3Rpdml0eTogJ0FjdGl2aXR5JyxcbiAgICBwbGFjZXM6ICdUcmF2ZWwgJiBQbGFjZXMnLFxuICAgIG9iamVjdHM6ICdPYmplY3RzJyxcbiAgICBzeW1ib2xzOiAnU3ltYm9scycsXG4gICAgZmxhZ3M6ICdGbGFncycsXG4gICAgY3VzdG9tOiAnQ3VzdG9tJyxcbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIC4uLlBpY2tlclByb3BzLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZVNraW46IHRoaXMuc2tpbiB8fCBzdG9yZS5nZXQoJ3NraW4nKSB8fCB0aGlzLmRlZmF1bHRTa2luLFxuICAgICAgYWN0aXZlQ2F0ZWdvcnk6IG51bGwsXG4gICAgICBwcmV2aWV3RW1vamk6IG51bGwsXG4gICAgICBzZWFyY2hFbW9qaXM6IG51bGwsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGN1c3RvbVN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0aGlzLmNhbGN1bGF0ZVdpZHRoICsgJ3B4JyxcbiAgICAgICAgLi4udGhpcy5waWNrZXJTdHlsZXMsXG4gICAgICB9XG4gICAgfSxcbiAgICBlbW9qaVByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmF0aXZlOiB0aGlzLm5hdGl2ZSxcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgICAgICBlbW9qaVRvb2x0aXA6IHRoaXMuZW1vamlUb29sdGlwLFxuICAgICAgICBlbW9qaVNpemU6IHRoaXMuZW1vamlTaXplLFxuICAgICAgICBvbkVudGVyOiB0aGlzLm9uRW1vamlFbnRlci5iaW5kKHRoaXMpLFxuICAgICAgICBvbkxlYXZlOiB0aGlzLm9uRW1vamlMZWF2ZS5iaW5kKHRoaXMpLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uRW1vamlDbGljay5iaW5kKHRoaXMpLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2tpblByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgfVxuICAgIH0sXG4gICAgY2FsY3VsYXRlV2lkdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wZXJMaW5lICogKHRoaXMuZW1vamlTaXplICsgMTIpICsgMTIgKyAyICsgbWVhc3VyZVNjcm9sbGJhcigpXG4gICAgfSxcbiAgICBzY3JvbGxlckNhdGVnb3JpZXMoKSB7XG4gICAgICBsZXQgaWQgPSAwXG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogaWQrKyxcbiAgICAgICAgICBjYXRlZ29yeTogY2F0ZWdvcnksXG4gICAgICAgICAgc2hvdzpcbiAgICAgICAgICAgICF0aGlzLnNlYXJjaEVtb2ppcyAmJlxuICAgICAgICAgICAgKHRoaXMuaW5maW5pdGVTY3JvbGwgfHwgY2F0ZWdvcnkgPT0gdGhpcy5hY3RpdmVDYXRlZ29yeSksXG4gICAgICAgICAgbWVyZ2VkSTE4bjogdGhpcy5tZXJnZWRJMThuLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICBlbW9qaXNMZW5ndGg6IGNhdGVnb3J5LmVtb2ppcy5sZW5ndGgsXG4gICAgICAgICAgZW1vamlQcm9wczogdGhpcy5lbW9qaVByb3BzLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG4gICAgbWVyZ2VkSTE4bigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJlZXplKGRlZXBNZXJnZShJMThOLCB0aGlzLmkxOG4pKVxuICAgIH0sXG4gICAgaWRsZUVtb2ppKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5lbW9qaSh0aGlzLmVtb2ppKVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jYXRlZ29yaWVzID0gW11cbiAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCguLi50aGlzLmRhdGEuY2F0ZWdvcmllcygpKVxuICAgIHRoaXMuY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoKGNhdGVnb3J5KSA9PiB7XG4gICAgICByZXR1cm4gY2F0ZWdvcnkuZW1vamlzLmxlbmd0aCA+IDBcbiAgICB9KVxuXG4gICAgdGhpcy5jYXRlZ29yaWVzWzBdLmZpcnN0ID0gdHJ1ZVxuICAgIE9iamVjdC5mcmVlemUodGhpcy5jYXRlZ29yaWVzKVxuICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNbMF1cbiAgICB0aGlzLnNraXBTY3JvbGxVcGRhdGUgPSBmYWxzZVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25TY3JvbGxVcGRhdGUoc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLnNraXBTY3JvbGxVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5za2lwU2Nyb2xsVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNbZW5kSW5kZXggLSAxXVxuICAgICAgfVxuICAgIH0sXG4gICAgb25BbmNob3JDbGljayhjYXRlZ29yeSkge1xuICAgICAgbGV0IGkgPSB0aGlzLmNhdGVnb3JpZXMuaW5kZXhPZihjYXRlZ29yeSlcbiAgICAgIHRoaXMuJHJlZnMuZHluU2Nyb2xsZXIuc2Nyb2xsVG9JdGVtKGkpXG4gICAgICB0aGlzLmFjdGl2ZUNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yaWVzW2ldXG4gICAgICB0aGlzLnNraXBTY3JvbGxVcGRhdGUgPSB0cnVlXG4gICAgfSxcbiAgICBvblNlYXJjaCh2YWx1ZSkge1xuICAgICAgbGV0IGVtb2ppcyA9IHRoaXMuZGF0YS5zZWFyY2godmFsdWUsIHRoaXMubWF4U2VhcmNoUmVzdWx0cylcbiAgICAgIHRoaXMuc2VhcmNoRW1vamlzID0gZW1vamlzXG4gICAgfSxcbiAgICBvbkVtb2ppRW50ZXIoZW1vamkpIHtcbiAgICAgIHRoaXMucHJldmlld0Vtb2ppID0gZW1vamlcbiAgICB9LFxuICAgIG9uRW1vamlMZWF2ZShlbW9qaSkge1xuICAgICAgdGhpcy5wcmV2aWV3RW1vamkgPSBudWxsXG4gICAgfSxcbiAgICBvbkVtb2ppQ2xpY2soZW1vamkpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcsIGVtb2ppKVxuICAgICAgZnJlcXVlbnRseS5hZGQoZW1vamkpXG4gICAgfSxcbiAgICBvblNraW5DaGFuZ2Uoc2tpbikge1xuICAgICAgdGhpcy5hY3RpdmVTa2luID0gc2tpblxuICAgICAgc3RvcmUudXBkYXRlKHsgc2tpbiB9KVxuXG4gICAgICB0aGlzLiRlbWl0KCdza2luLWNoYW5nZScsIHNraW4pXG4gICAgfSxcbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIEFuY2hvcnMsXG4gICAgQ2F0ZWdvcnksXG4gICAgUHJldmlldyxcbiAgICBTZWFyY2gsXG4gICAgRHluYW1pY1Njcm9sbGVyLFxuICAgIER5bmFtaWNTY3JvbGxlckl0ZW0sXG4gIH0sXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQgZW1vamktbWFydC1zdGF0aWNcIiA6c3R5bGU9XCJjdXN0b21TdHlsZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIHYtaWY9XCJzaG93Q2F0ZWdvcmllc1wiPlxuICAgICAgPGFuY2hvcnNcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmNvbG9yPVwiY29sb3JcIlxuICAgICAgICA6Y2F0ZWdvcmllcz1cImNhdGVnb3JpZXNcIlxuICAgICAgICA6YWN0aXZlLWNhdGVnb3J5PVwiYWN0aXZlQ2F0ZWdvcnlcIlxuICAgICAgICBAY2xpY2s9XCJvbkFuY2hvckNsaWNrXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8c2xvdFxuICAgICAgbmFtZT1cInNlYXJjaFRlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6aTE4bj1cImkxOG5cIlxuICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgOm9uLXNlYXJjaD1cIm9uU2VhcmNoXCJcbiAgICA+XG4gICAgICA8c2VhcmNoXG4gICAgICAgIHYtaWY9XCJzaG93U2VhcmNoXCJcbiAgICAgICAgcmVmPVwic2VhcmNoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgICA6b24tc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgICBAc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L3Nsb3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zY3JvbGxcIiByZWY9XCJzY3JvbGxcIiBAc2Nyb2xsPVwib25TY3JvbGxcIj5cbiAgICAgIDxjYXRlZ29yeVxuICAgICAgICB2LXNob3c9XCJzZWFyY2hFbW9qaXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6aTE4bj1cIm1lcmdlZEkxOG5cIlxuICAgICAgICBpZD1cInNlYXJjaFwiXG4gICAgICAgIG5hbWU9XCJTZWFyY2hcIlxuICAgICAgICA6ZW1vamlzPVwic2VhcmNoRW1vamlzXCJcbiAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAvPlxuICAgICAgPGNhdGVnb3J5XG4gICAgICAgIHYtZm9yPVwiY2F0ZWdvcnkgaW4gZmlsdGVyZWRDYXRlZ29yaWVzXCJcbiAgICAgICAgdi1zaG93PVwiIXNlYXJjaEVtb2ppcyAmJiAoaW5maW5pdGVTY3JvbGwgfHwgY2F0ZWdvcnkgPT0gYWN0aXZlQ2F0ZWdvcnkpXCJcbiAgICAgICAgcmVmPVwiY2F0ZWdvcmllc1wiXG4gICAgICAgIDprZXk9XCJjYXRlZ29yeS5pZFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDppMThuPVwibWVyZ2VkSTE4blwiXG4gICAgICAgIDppZD1cImNhdGVnb3J5LmlkXCJcbiAgICAgICAgOm5hbWU9XCJjYXRlZ29yeS5uYW1lXCJcbiAgICAgICAgOmVtb2ppcz1cImNhdGVnb3J5LmVtb2ppc1wiXG4gICAgICAgIDplbW9qaS1wcm9wcz1cImVtb2ppUHJvcHNcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxzbG90XG4gICAgICBuYW1lPVwicHJldmlld1RlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgICA6ZW1vamk9XCJwcmV2aWV3RW1vamlcIlxuICAgICAgOmlkbGUtZW1vamk9XCJpZGxlRW1vamlcIlxuICAgICAgOnNob3ctc2tpbi10b25lcz1cInNob3dTa2luVG9uZXNcIlxuICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICA6c2tpbi1wcm9wcz1cInNraW5Qcm9wc1wiXG4gICAgICA6b24tc2tpbi1jaGFuZ2U9XCJvblNraW5DaGFuZ2VcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1wcmV2aWV3XCIgdi1pZj1cInNob3dQcmV2aWV3XCI+XG4gICAgICAgIDxwcmV2aWV3XG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgICAgICAgOmVtb2ppPVwicHJldmlld0Vtb2ppXCJcbiAgICAgICAgICA6aWRsZS1lbW9qaT1cImlkbGVFbW9qaVwiXG4gICAgICAgICAgOnNob3ctc2tpbi10b25lcz1cInNob3dTa2luVG9uZXNcIlxuICAgICAgICAgIDplbW9qaS1wcm9wcz1cImVtb2ppUHJvcHNcIlxuICAgICAgICAgIDpza2luLXByb3BzPVwic2tpblByb3BzXCJcbiAgICAgICAgICA6b24tc2tpbi1jaGFuZ2U9XCJvblNraW5DaGFuZ2VcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9zbG90PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgJy4uL3ZlbmRvci9yYWYtcG9seWZpbGwnXG5pbXBvcnQgc3RvcmUgZnJvbSAnLi4vdXRpbHMvc3RvcmUnXG5pbXBvcnQgZnJlcXVlbnRseSBmcm9tICcuLi91dGlscy9mcmVxdWVudGx5J1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBtZWFzdXJlU2Nyb2xsYmFyIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBQaWNrZXJQcm9wcyB9IGZyb20gJy4uL3V0aWxzL3NoYXJlZC1wcm9wcydcbmltcG9ydCBBbmNob3JzIGZyb20gJy4vYW5jaG9ycydcbmltcG9ydCBDYXRlZ29yeSBmcm9tICcuL2NhdGVnb3J5J1xuaW1wb3J0IFByZXZpZXcgZnJvbSAnLi9wcmV2aWV3J1xuaW1wb3J0IFNlYXJjaCBmcm9tICcuL3NlYXJjaCdcblxuLypcbiAqIE5vdGUgYWJvdXQgYGJ1ZmZlcmAgc2V0dGluZyBmb3IgRHluYW1pY1Njcm9sbGVyOiB0aGlzIGlzIGFcbiAqIGZpeCBmb3IgIzQ5IC0gd2hlbiBjbGlja2luZyBvbiB0aGUgXCJGbGFnc1wiIGNhdGVnb3J5IGZvciB0aGUgZmlyc3RcbiAqIHRpbWUsIHRoZSBjYXRlZ29yeSBpcyBub3Qgc2Nyb2xsZWQgdG8gdGhlIHRvcCBvZiB0aGUgY29tcG9uZW50LlxuICogVGhpcyBpcyBiZWNhdXNlIHRoZSBsYXN0IGNhdGVnb3J5IHNpemUgaXMgbm90IGNhbGN1bGF0ZWQgeWV0IGFuZFxuICogdmlydHVhbCBzY3JvbGxlciB0YWtlcyAnbWluSXRlbVNpemUnIGFzIGNhdGVnb3J5IGhlaWdodC5cbiAqXG4gKiBWaXJ0dWFsIHNjcm9sbGVyIChSZWN5Y2xlU2Nyb2xsZXIgY29tcG9uZW50KSB1c2VzIGBidWZmZXJgIHZhbHVlXG4gKiB0byAgZGVjaWRlIGhvdyBtYW55IGNvbXBvbmVudHMgdG8gcmVuZGVyIGludGl0aWFsbHkgZGVwZW5kaW5nIG9uXG4gKiB0aGUgc2Nyb2xsIGFyZWEgc2l6ZSArIGJ1ZmZlcioyIChhbmQgYWxsIGNhdGVnb3JpZXMgaW5pdGlhbGx5XG4gKiBoYXZlIG1pbiBzaXplLCA2MHB4KS5cbiAqXG4gKiBCeSBpbmNyZWFzaW5nIGJ1ZmZlciB0byA0MDBweCwgd2UgbWFrZSB0aGUgc2Nyb2xsZXIgdG8gcGVyZm9ybVxuICogc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYWxsIGNhdGVnb3JpZXMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqIHNjcm9sbFRvSXRlbSgpIGNhbGxzIHdvcmsgY29ycmVjdGx5LlxuICovXG5cbmltcG9ydCB7IER5bmFtaWNTY3JvbGxlciwgRHluYW1pY1Njcm9sbGVySXRlbSB9IGZyb20gJ3Z1ZS12aXJ0dWFsLXNjcm9sbGVyJ1xuLy8gaW1wb3J0ICd2dWUtdmlydHVhbC1zY3JvbGxlci9kaXN0L3Z1ZS12aXJ0dWFsLXNjcm9sbGVyLmNzcydcblxuY29uc3QgSTE4TiA9IHtcbiAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgbm90Zm91bmQ6ICdObyBFbW9qaSBGb3VuZCcsXG4gIGNhdGVnb3JpZXM6IHtcbiAgICBzZWFyY2g6ICdTZWFyY2ggUmVzdWx0cycsXG4gICAgcmVjZW50OiAnRnJlcXVlbnRseSBVc2VkJyxcbiAgICBwZW9wbGU6ICdTbWlsZXlzICYgUGVvcGxlJyxcbiAgICBuYXR1cmU6ICdBbmltYWxzICYgTmF0dXJlJyxcbiAgICBmb29kczogJ0Zvb2QgJiBEcmluaycsXG4gICAgYWN0aXZpdHk6ICdBY3Rpdml0eScsXG4gICAgcGxhY2VzOiAnVHJhdmVsICYgUGxhY2VzJyxcbiAgICBvYmplY3RzOiAnT2JqZWN0cycsXG4gICAgc3ltYm9sczogJ1N5bWJvbHMnLFxuICAgIGZsYWdzOiAnRmxhZ3MnLFxuICAgIGN1c3RvbTogJ0N1c3RvbScsXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICAuLi5QaWNrZXJQcm9wcyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmVTa2luOiB0aGlzLnNraW4gfHwgc3RvcmUuZ2V0KCdza2luJykgfHwgdGhpcy5kZWZhdWx0U2tpbixcbiAgICAgIGFjdGl2ZUNhdGVnb3J5OiBudWxsLFxuICAgICAgcHJldmlld0Vtb2ppOiBudWxsLFxuICAgICAgc2VhcmNoRW1vamlzOiBudWxsLFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBjdXN0b21TdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogdGhpcy5jYWxjdWxhdGVXaWR0aCArICdweCcsXG4gICAgICAgIC4uLnRoaXMucGlja2VyU3R5bGVzLFxuICAgICAgfVxuICAgIH0sXG4gICAgZW1vamlQcm9wcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hdGl2ZTogdGhpcy5uYXRpdmUsXG4gICAgICAgIHNraW46IHRoaXMuYWN0aXZlU2tpbixcbiAgICAgICAgc2V0OiB0aGlzLnNldCxcbiAgICAgICAgZW1vamlUb29sdGlwOiB0aGlzLmVtb2ppVG9vbHRpcCxcbiAgICAgICAgZW1vamlTaXplOiB0aGlzLmVtb2ppU2l6ZSxcbiAgICAgICAgb25FbnRlcjogdGhpcy5vbkVtb2ppRW50ZXIuYmluZCh0aGlzKSxcbiAgICAgICAgb25MZWF2ZTogdGhpcy5vbkVtb2ppTGVhdmUuYmluZCh0aGlzKSxcbiAgICAgICAgb25DbGljazogdGhpcy5vbkVtb2ppQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHNraW5Qcm9wcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNraW46IHRoaXMuYWN0aXZlU2tpbixcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbGN1bGF0ZVdpZHRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGVyTGluZSAqICh0aGlzLmVtb2ppU2l6ZSArIDEyKSArIDEyICsgMiArIG1lYXN1cmVTY3JvbGxiYXIoKVxuICAgIH0sXG4gICAgZmlsdGVyZWRDYXRlZ29yaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgIGxldCBpc0luY2x1ZGVkID1cbiAgICAgICAgICB0aGlzLmluY2x1ZGUgJiYgdGhpcy5pbmNsdWRlLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmluY2x1ZGUuaW5kZXhPZihjYXRlZ29yeS5pZCkgPiAtMVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgIGxldCBpc0V4Y2x1ZGVkID1cbiAgICAgICAgICB0aGlzLmV4Y2x1ZGUgJiYgdGhpcy5leGNsdWRlLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmV4Y2x1ZGUuaW5kZXhPZihjYXRlZ29yeS5pZCkgPiAtMVxuICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICBsZXQgaGFzRW1vamlzID0gY2F0ZWdvcnkuZW1vamlzLmxlbmd0aCA+IDBcbiAgICAgICAgaWYgKHRoaXMuZW1vamlzVG9TaG93RmlsdGVyKSB7XG4gICAgICAgICAgaGFzRW1vamlzID0gY2F0ZWdvcnkuZW1vamlzLnNvbWUoKGVtb2ppKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbW9qaXNUb1Nob3dGaWx0ZXIodGhpcy5kYXRhLmVtb2ppc1tlbW9qaV0gfHwgZW1vamkpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNJbmNsdWRlZCAmJiAhaXNFeGNsdWRlZCAmJiBoYXNFbW9qaXNcbiAgICAgIH0pXG4gICAgfSxcbiAgICBtZXJnZWRJMThuKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZGVlcE1lcmdlKEkxOE4sIHRoaXMuaTE4bikpXG4gICAgfSxcbiAgICBpZGxlRW1vamkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmVtb2ppKHRoaXMuZW1vamkpXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXVxuICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKC4uLnRoaXMuZGF0YS5jYXRlZ29yaWVzKCkpXG4gICAgdGhpcy5jYXRlZ29yaWVzID0gdGhpcy5jYXRlZ29yaWVzLmZpbHRlcigoY2F0ZWdvcnkpID0+IHtcbiAgICAgIHJldHVybiBjYXRlZ29yeS5lbW9qaXMubGVuZ3RoID4gMFxuICAgIH0pXG5cbiAgICB0aGlzLmNhdGVnb3JpZXNbMF0uZmlyc3QgPSB0cnVlXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNhdGVnb3JpZXMpXG4gICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllc1swXVxuICAgIHRoaXMuc2tpcFNjcm9sbFVwZGF0ZSA9IGZhbHNlXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvblNjcm9sbCgpIHtcbiAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsICYmICF0aGlzLndhaXRpbmdGb3JQYWludCkge1xuICAgICAgICB0aGlzLndhaXRpbmdGb3JQYWludCA9IHRydWVcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLm9uU2Nyb2xsUGFpbnQuYmluZCh0aGlzKSlcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uU2Nyb2xsUGFpbnQoKSB7XG4gICAgICB0aGlzLndhaXRpbmdGb3JQYWludCA9IGZhbHNlXG4gICAgICBsZXQgc2Nyb2xsVG9wID0gdGhpcy4kcmVmcy5zY3JvbGwuc2Nyb2xsVG9wLFxuICAgICAgICBhY3RpdmVDYXRlZ29yeSA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzWzBdXG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBsZXQgY2F0ZWdvcnkgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1tpXSxcbiAgICAgICAgICBjb21wb25lbnQgPSB0aGlzLiRyZWZzLmNhdGVnb3JpZXNbaV1cbiAgICAgICAgLy8gVGhlIGAtNTBgIG9mZnNldCBzd2l0Y2hlcyBhY3RpdmUgY2F0ZWdvcnkgKHNlbGVjdGVkIGluIHRoZVxuICAgICAgICAvLyBhbmNob3JzIGJhcikgYSBiaXQgZWFyaWxlciwgYmVmb3JlIGl0IGFjdHVhbGx5IHJlYWNoZXMgdGhlIHRvcC5cbiAgICAgICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuJGVsLm9mZnNldFRvcCAtIDUwID4gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmVDYXRlZ29yeSA9IGNhdGVnb3J5XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUNhdGVnb3J5ID0gYWN0aXZlQ2F0ZWdvcnlcbiAgICB9LFxuICAgIG9uQW5jaG9yQ2xpY2soY2F0ZWdvcnkpIHtcbiAgICAgIGxldCBpID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMuaW5kZXhPZihjYXRlZ29yeSksXG4gICAgICAgIGNvbXBvbmVudCA9IHRoaXMuJHJlZnMuY2F0ZWdvcmllc1tpXSxcbiAgICAgICAgc2Nyb2xsVG9Db21wb25lbnQgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgbGV0IHRvcCA9IGNvbXBvbmVudC4kZWwub2Zmc2V0VG9wXG4gICAgICAgICAgICBpZiAoY2F0ZWdvcnkuZmlyc3QpIHtcbiAgICAgICAgICAgICAgdG9wID0gMFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kcmVmcy5zY3JvbGwuc2Nyb2xsVG9wID0gdG9wXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbW9qaXMpIHtcbiAgICAgICAgdGhpcy5vblNlYXJjaChudWxsKVxuICAgICAgICB0aGlzLiRyZWZzLnNlYXJjaC5jbGVhcigpXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKHNjcm9sbFRvQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgIHNjcm9sbFRvQ29tcG9uZW50KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1tpXVxuICAgICAgfVxuICAgIH0sXG4gICAgb25TZWFyY2godmFsdWUpIHtcbiAgICAgIGxldCBlbW9qaXMgPSB0aGlzLmRhdGEuc2VhcmNoKHZhbHVlLCB0aGlzLm1heFNlYXJjaFJlc3VsdHMpXG4gICAgICB0aGlzLnNlYXJjaEVtb2ppcyA9IGVtb2ppc1xuICAgIH0sXG4gICAgb25FbW9qaUVudGVyKGVtb2ppKSB7XG4gICAgICB0aGlzLnByZXZpZXdFbW9qaSA9IGVtb2ppXG4gICAgfSxcbiAgICBvbkVtb2ppTGVhdmUoZW1vamkpIHtcbiAgICAgIHRoaXMucHJldmlld0Vtb2ppID0gbnVsbFxuICAgIH0sXG4gICAgb25FbW9qaUNsaWNrKGVtb2ppKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnLCBlbW9qaSlcbiAgICAgIGZyZXF1ZW50bHkuYWRkKGVtb2ppKVxuICAgIH0sXG4gICAgb25Ta2luQ2hhbmdlKHNraW4pIHtcbiAgICAgIHRoaXMuYWN0aXZlU2tpbiA9IHNraW5cbiAgICAgIHN0b3JlLnVwZGF0ZSh7IHNraW4gfSlcblxuICAgICAgdGhpcy4kZW1pdCgnc2tpbi1jaGFuZ2UnLCBza2luKVxuICAgIH0sXG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBBbmNob3JzLFxuICAgIENhdGVnb3J5LFxuICAgIFByZXZpZXcsXG4gICAgU2VhcmNoLFxuICAgIER5bmFtaWNTY3JvbGxlcixcbiAgICBEeW5hbWljU2Nyb2xsZXJJdGVtLFxuICB9LFxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LWFuY2hvcnNcIj5cbiAgPHNwYW5cbiAgICB2LWZvcj1cImNhdGVnb3J5IGluIGNhdGVnb3JpZXNcIlxuICAgIDprZXk9XCJjYXRlZ29yeS5pZFwiXG4gICAgOmNsYXNzPVwieyAnZW1vamktbWFydC1hbmNob3InOiB0cnVlLCAnZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWQnOiBjYXRlZ29yeS5pZCA9PSBhY3RpdmVDYXRlZ29yeS5pZCB9XCJcbiAgICA6c3R5bGU9XCJ7ICdjb2xvcic6IChjYXRlZ29yeS5pZCA9PSBhY3RpdmVDYXRlZ29yeS5pZCA/IGNvbG9yIDogJycpIH1cIlxuICAgIDpkYXRhLXRpdGxlPVwiaTE4bi5jYXRlZ29yaWVzW2NhdGVnb3J5LmlkXVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2NsaWNrJywgY2F0ZWdvcnkpXCI+XG4gICAgPGRpdiB2LWh0bWw9XCJzdmdzW2NhdGVnb3J5LmlkXVwiLz5cbiAgICA8c3BhbiBjbGFzcz1cImVtb2ppLW1hcnQtYW5jaG9yLWJhclwiIDpzdHlsZT1cInsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9XCI+PC9zcGFuPlxuICA8L3NwYW4+XG48L2Rpdj5cblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IHN2Z3MgZnJvbSAnLi4vc3ZncydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGkxOG46IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBjYXRlZ29yaWVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBhY3RpdmVDYXRlZ29yeToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc3ZncyA9IHN2Z3NcbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cblxuPGRpdiA6Y2xhc3M9XCJ7ICdlbW9qaS1tYXJ0LWNhdGVnb3J5JzogdHJ1ZSwgJ2Vtb2ppLW1hcnQtbm8tcmVzdWx0cyc6ICFoYXNSZXN1bHRzIH1cIiB2LWlmPVwiaXNWaXNpYmxlICYmIChpc1NlYXJjaCB8fCBoYXNSZXN1bHRzKVwiPlxuICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1jYXRlZ29yeS1sYWJlbFwiPlxuICAgIDxzcGFuPnt7IGkxOG4uY2F0ZWdvcmllc1tpZF0gfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDx0ZW1wbGF0ZSB2LWZvcj1cInsgZW1vamlPYmplY3QsIGVtb2ppVmlld30gaW4gZW1vamlPYmplY3RzXCI+XG4gICAgPHNwYW5cbiAgICAgIHYtaWY9XCJlbW9qaVZpZXcuY2FuUmVuZGVyXCJcbiAgICAgIDpkYXRhLXRpdGxlPVwiZW1vamlPYmplY3Quc2hvcnRfbmFtZVwiXG4gICAgICA6dGl0bGU9XCJlbW9qaVZpZXcudGl0bGVcIlxuICAgICAgY2xhc3M9XCJlbW9qaS1tYXJ0LWVtb2ppXCJcbiAgICAgIEBtb3VzZWVudGVyPVwiZW1vamlQcm9wcy5vbkVudGVyKGVtb2ppVmlldy5nZXRFbW9qaSgpKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cImVtb2ppUHJvcHMub25MZWF2ZShlbW9qaVZpZXcuZ2V0RW1vamkoKSlcIlxuICAgICAgQGNsaWNrPVwiZW1vamlQcm9wcy5vbkNsaWNrKGVtb2ppVmlldy5nZXRFbW9qaSgpKVwiPlxuICAgICAgPHNwYW4gIDpjbGFzcz1cImVtb2ppVmlldy5jc3NDbGFzc1wiIDpzdHlsZT1cImVtb2ppVmlldy5jc3NTdHlsZVwiPnt7ZW1vamlWaWV3LmNvbnRlbnR9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvdGVtcGxhdGU+XG5cbiAgPGRpdiB2LWlmPVwiIWhhc1Jlc3VsdHNcIj5cbiAgICA8ZW1vamlcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICBlbW9qaT1cInNsZXV0aF9vcl9zcHlcIlxuICAgICAgOm5hdGl2ZT1cImVtb2ppUHJvcHMubmF0aXZlXCJcbiAgICAgIDpza2luPVwiZW1vamlQcm9wcy5za2luXCJcbiAgICAgIDpzZXQ9XCJlbW9qaVByb3BzLnNldFwiXG4gICAgLz5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1uby1yZXN1bHRzLWxhYmVsXCI+e3sgaTE4bi5ub3Rmb3VuZCB9fTwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgeyBFbW9qaVZpZXcgfSBmcm9tICcuLi91dGlscy9lbW9qaS1kYXRhJ1xuaW1wb3J0IEVtb2ppIGZyb20gJy4vRW1vamknXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBpMThuOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaWQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZW1vamlzOiB7XG4gICAgICB0eXBlOiBBcnJheVxuICAgIH0sXG4gICAgZW1vamlQcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5lbW9qaXNcbiAgICB9LFxuICAgIGlzU2VhcmNoKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZSA9PSAnU2VhcmNoJ1xuICAgIH0sXG4gICAgaGFzUmVzdWx0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppcy5sZW5ndGggPiAwXG4gICAgfSxcbiAgICBlbW9qaU9iamVjdHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbW9qaXMubWFwKChlbW9qaSkgPT4ge1xuICAgICAgICAgIGxldCBlbW9qaU9iamVjdCA9IGVtb2ppXG4gICAgICAgICAgbGV0IGVtb2ppVmlldyA9IG5ldyBFbW9qaVZpZXcoXG4gICAgICAgICAgICBlbW9qaSxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLnNldCxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5uYXRpdmUsXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuZmFsbGJhY2ssXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuZW1vamlUb29sdGlwLFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLmVtb2ppU2l6ZSxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHsgZW1vamlPYmplY3QsIGVtb2ppVmlldyB9XG4gICAgICB9KVxuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIEVtb2ppXG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXdcIj5cbiAgPHRlbXBsYXRlIHYtaWY9XCJlbW9qaVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiPlxuICAgICAgICA8ZW1vamlcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDplbW9qaT1cImVtb2ppXCJcbiAgICAgICAgICA6bmF0aXZlPVwiZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICAgIDpza2luPVwiZW1vamlQcm9wcy5za2luXCJcbiAgICAgICAgICA6c2V0PVwiZW1vamlQcm9wcy5zZXRcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj57eyBlbW9qaS5uYW1lIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lc1wiPlxuICAgICAgICAgIDxzcGFuIHYtZm9yPVwic2hvcnROYW1lIGluIGVtb2ppU2hvcnROYW1lc1wiIDprZXk9XCJzaG9ydE5hbWVcIiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVcIj46e3sgc2hvcnROYW1lIH19Ojwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25zXCI+XG4gICAgICAgICAgPHNwYW4gdi1mb3I9XCJlbW90aWNvbiBpbiBlbW9qaUVtb3RpY29uc1wiIDprZXk9XCJlbW90aWNvblwiIGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb3RpY29uXCI+e3sgZW1vdGljb24gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIDwvdGVtcGxhdGU+XG5cbiAgPHRlbXBsYXRlIHYtZWxzZT5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICA8ZW1vamlcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmVtb2ppPVwiaWRsZUVtb2ppXCJcbiAgICAgICAgOm5hdGl2ZT1cImVtb2ppUHJvcHMubmF0aXZlXCJcbiAgICAgICAgOnNraW49XCJlbW9qaVByb3BzLnNraW5cIlxuICAgICAgICA6c2V0PVwiZW1vamlQcm9wcy5zZXRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJlbW9qaS1tYXJ0LXRpdGxlLWxhYmVsXCI+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IHYtaWY9XCJzaG93U2tpblRvbmVzXCIgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctc2tpbnNcIj5cbiAgICAgIDxza2lucyA6c2tpbj1cInNraW5Qcm9wcy5za2luXCIgQGNoYW5nZT1cIm9uU2tpbkNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cbjwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgRW1vamkgZnJvbSAnLi9FbW9qaSdcbmltcG9ydCBTa2lucyBmcm9tICcuL3NraW5zJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgZGF0YToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZW1vamk6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cbiAgICB9LFxuICAgIGlkbGVFbW9qaToge1xuICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBzaG93U2tpblRvbmVzOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgZW1vamlQcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHNraW5Qcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIG9uU2tpbkNoYW5nZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBlbW9qaURhdGEoKSB7XG4gICAgICBpZiAodGhpcy5lbW9qaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbW9qaVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG4gICAgfSxcbiAgICBlbW9qaVNob3J0TmFtZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbW9qaURhdGEuc2hvcnRfbmFtZXNcbiAgICB9LFxuICAgIGVtb2ppRW1vdGljb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1vamlEYXRhLmVtb3RpY29uc1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIEVtb2ppLFxuICAgIFNraW5zXG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXNlYXJjaFwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIDpwbGFjZWhvbGRlcj1cImkxOG4uc2VhcmNoXCIgdi1tb2RlbD1cInZhbHVlXCI+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBpMThuOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgYXV0b0ZvY3VzOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG9uU2VhcmNoOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogJydcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZW1vamlJbmRleCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzZWFyY2gnLCB0aGlzLnZhbHVlKVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIGxldCAkaW5wdXQgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG5cbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgICRpbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuXG48ZGl2IDpjbGFzcz1cInsgJ2Vtb2ppLW1hcnQtc2tpbi1zd2F0Y2hlcyc6IHRydWUsICdlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkJzogb3BlbmVkIH1cIj5cbiAgPHNwYW4gdi1mb3I9XCJza2luVG9uZSBpbiA2XCIgOmtleT1cInNraW5Ub25lXCIgOmNsYXNzPVwieyAnZW1vamktbWFydC1za2luLXN3YXRjaCc6IHRydWUsICdlbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkJzogc2tpbiA9PSBza2luVG9uZSB9XCI+XG4gICAgPHNwYW4gOmNsYXNzPVwiJ2Vtb2ppLW1hcnQtc2tpbiBlbW9qaS1tYXJ0LXNraW4tdG9uZS0nICsgc2tpblRvbmVcIiBAY2xpY2s9XCJvbkNsaWNrKHNraW5Ub25lKVwiPjwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBza2luOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soc2tpblRvbmUpIHtcbiAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICBpZiAoc2tpblRvbmUgIT0gdGhpcy5za2luKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgc2tpblRvbmUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5vcGVuZWQgPSAhdGhpcy5vcGVuZWRcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjUnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikgaWYgKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpIFRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi4yIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5lbW9qaS1tYXJ0LFxcbi5lbW9qaS1tYXJ0ICoge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjE1O1xcbn1cXG5cXG4uZW1vamktbWFydCB7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgLyogZGlzcGxheTogaW5saW5lLWJsb2NrOyAqL1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGhlaWdodDogNDIwcHg7XFxuICBjb2xvcjogIzIyMjQyNztcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkOWQ5ZDk7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG5cXG4uZW1vamktbWFydC1lbW9qaSB7XFxuICBwYWRkaW5nOiA2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWVtb2ppIHNwYW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb2ppIC5lbW9qaS1tYXJ0LWVtb2ppIHNwYW4ge1xcbiAgd2lkdGg6IDM4cHg7XFxuICBoZWlnaHQ6IDM4cHg7XFxuICBmb250LXNpemU6IDMycHg7XFxufVxcblxcbi5lbW9qaS10eXBlLW5hdGl2ZSB7XFxuICBmb250LWZhbWlseTogXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJUd2Vtb2ppIE1vemlsbGFcXFwiLCBcXFwiTm90byBDb2xvciBFbW9qaVxcXCIsIFxcXCJFbW9qaU9uZSBDb2xvclxcXCIsIFxcXCJBbmRyb2lkIEVtb2ppXFxcIjtcXG4gIHdvcmQtYnJlYWs6IGtlZXAtYWxsO1xcbn1cXG5cXG4uZW1vamktdHlwZS1pbWFnZSB7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDUyMDAlO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtZW1vamlvbmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWVtb2ppb25lQDQuMC40L2ltZy9lbW9qaW9uZS9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtbWVzc2VuZ2VyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaHR0cHM6Ly91bnBrZy5jb20vZW1vamktZGF0YXNvdXJjZS1tZXNzZW5nZXJANC4wLjQvaW1nL21lc3Nlbmdlci9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtYXBwbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWFwcGxlQDQuMC40L2ltZy9hcHBsZS9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtZmFjZWJvb2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWZhY2Vib29rQDQuMC40L2ltZy9mYWNlYm9vay9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtZ29vZ2xlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaHR0cHM6Ly91bnBrZy5jb20vZW1vamktZGF0YXNvdXJjZS1nb29nbGVANC4wLjQvaW1nL2dvb2dsZS9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtdHdpdHRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtdHdpdHRlckA0LjAuNC9pbWcvdHdpdHRlci9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG5cXG4uZW1vamktbWFydC1iYXIge1xcbiAgYm9yZGVyOiAwIHNvbGlkICNkOWQ5ZDk7XFxufVxcbi5lbW9qaS1tYXJ0LWJhcjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xcbn1cXG4uZW1vamktbWFydC1iYXI6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1zY3JvbGwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbiAgLW1zLWZsZXg6IDE7XFxuICAgICAgZmxleDogMTtcXG4gIHBhZGRpbmc6IDAgNnB4IDZweCA2cHg7XFxuICB6LWluZGV4OiAwOyAvKiBGaXggZm9yIHJlbmRlcmluZyBzdGlja3kgcG9zaXRpb25lZCBjYXRlZ29yeSBsYWJlbHMgb24gQ2hyb21lICovXFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOyAvKiBhdm9pZHMgXFxcInJlcGFpbnRzIG9uIHNjcm9sbFxcXCIgaW4gbW9iaWxlIENocm9tZSAqL1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3JzIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbiAgY29sb3I6ICM4NTg1ODU7XFxuICBsaW5lLWhlaWdodDogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtYW5jaG9yIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgcGFkZGluZzogMTJweCA0cHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgLjFzIGVhc2Utb3V0O1xcbn1cXG4uZW1vamktbWFydC1hbmNob3I6aG92ZXIsXFxuLmVtb2ppLW1hcnQtYW5jaG9yLXNlbGVjdGVkIHtcXG4gIGNvbG9yOiAjNDY0NjQ2O1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWQgLmVtb2ppLW1hcnQtYW5jaG9yLWJhciB7XFxuICBib3R0b206IDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvci1iYXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAtM3B4OyBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7IGhlaWdodDogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ2NDY0NjtcXG59XFxuXFxuLmVtb2ppLW1hcnQtYW5jaG9ycyBpIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAyMnB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3JzIHN2ZyB7XFxuICBmaWxsOiBjdXJyZW50Q29sb3I7XFxuICBtYXgtaGVpZ2h0OiAxOHB4O1xcbn1cXG5cXG4uZW1vamktbWFydCAuc2Nyb2xsZXIge1xcbiAgaGVpZ2h0OiAyNTBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC1tcy1mbGV4OiAxO1xcbiAgICAgIGZsZXg6IDE7XFxuICBwYWRkaW5nOiAwIDZweCA2cHggNnB4O1xcbiAgei1pbmRleDogMDsgLyogRml4IGZvciByZW5kZXJpbmcgc3RpY2t5IHBvc2l0aW9uZWQgY2F0ZWdvcnkgbGFiZWxzIG9uIENocm9tZSAqL1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsgLyogYXZvaWRzIFxcXCJyZXBhaW50cyBvbiBzY3JvbGxcXFwiIGluIG1vYmlsZSBDaHJvbWUgKi9cXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2VhcmNoIHtcXG4gIG1hcmdpbi10b3A6IDZweDtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbn1cXG4uZW1vamktbWFydC1zZWFyY2ggaW5wdXQge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IC4yZW0gLjZlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDI1cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDlkOWQ5O1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmVtb2ppLW1hcnQtc2VhcmNoLXJlc3VsdHMge1xcbiAgaGVpZ2h0OiAyNTBweDtcXG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtY2F0ZWdvcnkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeSAuZW1vamktbWFydC1lbW9qaSBzcGFuIHtcXG4gIHotaW5kZXg6IDE7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5IC5lbW9qaS1tYXJ0LWVtb2ppOmhvdmVyOmJlZm9yZSB7XFxuICB6LWluZGV4OiAwO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7IGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeSAuZW1vamktbWFydC1lbW9qaTpob3ZlcjpiZWZvcmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWwge1xcbiAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5O1xcbiAgcG9zaXRpb246IHN0aWNreTtcXG4gIHRvcDogMDtcXG59XFxuLmVtb2ppLW1hcnQtc3RhdGljIC5lbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsIHtcXG4gIHotaW5kZXg6IDI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKiBwb3NpdGlvbjogc3RpY2t5OyAqL1xcbiAgLyogcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OyAqL1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeS1sYWJlbCBzcGFuIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgcGFkZGluZzogNXB4IDZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC45NSk7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWVtb2ppIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtbm8tcmVzdWx0cyB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwYWRkaW5nLXRvcDogNzBweDtcXG4gIGNvbG9yOiAjODU4NTg1O1xcbn1cXG4uZW1vamktbWFydC1uby1yZXN1bHRzIC5lbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5lbW9qaS1tYXJ0LW5vLXJlc3VsdHMgLmVtb2ppLW1hcnQtbm8tcmVzdWx0cy1sYWJlbCB7XFxuICBtYXJnaW4tdG9wOiAuMmVtO1xcbn1cXG4uZW1vamktbWFydC1uby1yZXN1bHRzIC5lbW9qaS1tYXJ0LWVtb2ppOmhvdmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBub25lO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogNzBweDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1lbW9qaSxcXG4uZW1vamktbWFydC1wcmV2aWV3LWRhdGEsXFxuLmVtb2ppLW1hcnQtcHJldmlldy1za2lucyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb2ppIHtcXG4gIGxlZnQ6IDEycHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZGF0YSB7XFxuICBsZWZ0OiA2OHB4OyByaWdodDogMTJweDtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1za2lucyB7XFxuICByaWdodDogMzBweDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LW5hbWUge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogIzg4ODtcXG59XFxuLmVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWUgKyAuZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSxcXG4uZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSArIC5lbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb24sXFxuLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbiArIC5lbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb24ge1xcbiAgbWFyZ2luLWxlZnQ6IC41ZW07XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb24ge1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6ICNiYmI7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXRpdGxlIHNwYW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtdGl0bGUgLmVtb2ppLW1hcnQtZW1vamkge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtdGl0bGUtbGFiZWwge1xcbiAgY29sb3I6ICM5OTlBOUM7XFxuICBmb250LXNpemU6IDIxcHg7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaGVzIHtcXG4gIGZvbnQtc2l6ZTogMDtcXG4gIHBhZGRpbmc6IDJweCAwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2Q5ZDlkOTtcXG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaGVzLW9wZW5lZCAuZW1vamktbWFydC1za2luLXN3YXRjaCB7XFxuICB3aWR0aDogMTZweDtcXG4gIHBhZGRpbmc6IDAgMnB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaGVzLW9wZW5lZCAuZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZDphZnRlciB7XFxuICBvcGFjaXR5OiAuNzU7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAwO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHdpZHRoLCBwYWRkaW5nO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjEyNXM7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1vdXQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCgxKSB7IHRyYW5zaXRpb24tZGVsYXk6IDBzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoMikgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMDNzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoMykgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMDZzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoNCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMDlzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoNSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMTJzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoNikgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMTVzIH1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTZweDtcXG4gIHBhZGRpbmc6IDAgMnB4O1xcbn1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZDphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlOyBsZWZ0OiA1MCU7XFxuICB3aWR0aDogNHB4OyBoZWlnaHQ6IDRweDtcXG4gIG1hcmdpbjogLTJweCAwIDAgLTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMnMgZWFzZS1vdXQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7IHBhZGRpbmctdG9wOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTEgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjOTNhIH1cXG4uZW1vamktbWFydC1za2luLXRvbmUtMiB7IGJhY2tncm91bmQtY29sb3I6ICNmYWRjYmMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS0zIHsgYmFja2dyb3VuZC1jb2xvcjogI2UwYmI5NSB9XFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjYmY4ZjY4IH1cXG4uZW1vamktbWFydC1za2luLXRvbmUtNSB7IGJhY2tncm91bmQtY29sb3I6ICM5YjY0M2QgfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS02IHsgYmFja2dyb3VuZC1jb2xvcjogIzU5NDUzOSB9XFxuXFxuXFxuLyogdnVlLXZpcnR1YWwtc2Nyb2xsZXIvZGlzdC92dWUtdmlydHVhbC1zY3JvbGxlci5jc3MgKi9cXG4udnVlLXJlY3ljbGUtc2Nyb2xsZXJ7cG9zaXRpb246cmVsYXRpdmV9LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi12ZXJ0aWNhbDpub3QoLnBhZ2UtbW9kZSl7b3ZlcmZsb3cteTphdXRvfS52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbDpub3QoLnBhZ2UtbW9kZSl7b3ZlcmZsb3cteDphdXRvfS52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbHtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0udnVlLXJlY3ljbGUtc2Nyb2xsZXJfX3Nsb3R7LW1zLWZsZXg6YXV0byAwIDBweDtmbGV4OmF1dG8gMCAwfS52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS13cmFwcGVyey1tcy1mbGV4OjE7ZmxleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLnJlYWR5IC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi12ZXJ0aWNhbCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlcnt3aWR0aDoxMDAlfS52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlcntoZWlnaHQ6MTAwJX0udnVlLXJlY3ljbGUtc2Nyb2xsZXIucmVhZHkuZGlyZWN0aW9uLXZlcnRpY2FsIC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3e3dpZHRoOjEwMCV9LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLnJlYWR5LmRpcmVjdGlvbi1ob3Jpem9udGFsIC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3e2hlaWdodDoxMDAlfS5yZXNpemUtb2JzZXJ2ZXJbZGF0YS12LWIzMjllZTRjXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7ei1pbmRleDotMTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtvcGFjaXR5OjB9LnJlc2l6ZS1vYnNlcnZlcltkYXRhLXYtYjMyOWVlNGNdIG9iamVjdHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6LTF9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qXFxuICogUXVhc2FyIEZyYW1ld29yayB2MC4xNy4yMFxcbiAqIChjKSAyMDE2LXByZXNlbnQgUmF6dmFuIFN0b2VuZXNjdVxcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cXG4gKi9cXG4qLFxcbio6YmVmb3JlLFxcbio6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogaW5oZXJpdDtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAtbW96LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5odG1sLFxcbmJvZHksXFxuI3EtYXBwIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxufVxcbmh0bWwsXFxuYm9keSB7XFxuICBtYXJnaW46IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5pbnB1dFt0eXBlPSd0ZXh0J10sXFxuaW5wdXRbdHlwZT0nZW1haWwnXSxcXG5pbnB1dFt0eXBlPSdzZWFyY2gnXSxcXG5pbnB1dFt0eXBlPSdwYXNzd29yZCddIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZSAvKiBtb2JpbGUgZmlyZWZveCB0b28hICovO1xcbn1cXG5hcnRpY2xlLFxcbmFzaWRlLFxcbmRldGFpbHMsXFxuZmlnY2FwdGlvbixcXG5maWd1cmUsXFxuZm9vdGVyLFxcbmhlYWRlcixcXG5tYWluLFxcbm1lbnUsXFxubmF2LFxcbnNlY3Rpb24sXFxuc3VtbWFyeSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuYXVkaW86bm90KFtjb250cm9sc10pIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBoZWlnaHQ6IDA7XFxufVxcbmFiYnJbdGl0bGVdIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxufVxcbmRmbiB7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7XFxufVxcbmltZyB7XFxuICBib3JkZXItc3R5bGU6IG5vbmU7XFxufVxcbnN2Zzpub3QoOnJvb3QpIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbmNvZGUsXFxua2JkLFxcbnByZSxcXG5zYW1wIHtcXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbn1cXG5ociB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGhlaWdodDogMDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5idXR0b24sXFxuaW5wdXQsXFxuc2VsZWN0LFxcbnRleHRhcmVhIHtcXG4gIGZvbnQ6IGluaGVyaXQ7XFxuICBtYXJnaW46IDA7XFxufVxcbm9wdGdyb3VwIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5idXR0b24sXFxuaW5wdXQsXFxuc2VsZWN0IHtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgYm9yZGVyOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxcbmlucHV0Oi1tb3otZm9jdXNyaW5nIHtcXG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcXG59XFxudGV4dGFyZWEge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcbmlucHV0W3R5cGU9J3NlYXJjaCddIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbn1cXG5pbnB1dFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcXG5pbnB1dFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbi5xLWljb24ge1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgd29yZC13cmFwOiBub3JtYWw7XFxuICBkaXJlY3Rpb246IGx0cjtcXG59XFxuLnEtaWNvbixcXG4ubWF0ZXJpYWwtaWNvbnMge1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGN1cnNvcjogaW5oZXJpdDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLnEtYWN0aW9uc2hlZXQtdGl0bGUge1xcbiAgbWluLWhlaWdodDogNTZweDtcXG4gIHBhZGRpbmc6IDAgMTZweDtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ib2R5IHtcXG4gIG1heC1oZWlnaHQ6IDUwMHB4O1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkIHtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkIC5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudCB7XFxuICBtYXJnaW46IDI0cHggMDtcXG59XFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIHtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW06aG92ZXIsXFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNkMGQwZDA7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gaSxcXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gaW1nIHtcXG4gIGZvbnQtc2l6ZTogNDhweDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIC5hdmF0YXIge1xcbiAgd2lkdGg6IDQ4cHg7XFxuICBoZWlnaHQ6IDQ4cHg7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbSBzcGFuIHtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG4ucS1sb2FkaW5nLWJhciB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiA5OTk4O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSksIG9wYWNpdHkgMC41cztcXG59XFxuLnEtbG9hZGluZy1iYXIudG9wIHtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIHJpZ2h0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtbG9hZGluZy1iYXIuYm90dG9tIHtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIHJpZ2h0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtbG9hZGluZy1iYXIucmlnaHQge1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWxvYWRpbmctYmFyLmxlZnQge1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtYWxlcnQge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtYWxlcnQgLmF2YXRhciB7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG59XFxuLnEtYWxlcnQtc2lkZSxcXG4ucS1hbGVydC1jb250ZW50IHtcXG4gIHBhZGRpbmc6IDEycHg7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG4ucS1hbGVydC1zaWRlIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLnEtYWxlcnQtYWN0aW9ucyB7XFxuICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCAwO1xcbn1cXG4ucS1hbGVydC1kZXRhaWwge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG4ucS1icmVhZGNydW1icyAucS1pY29uLFxcbi5xLWJyZWFkY3J1bWJzIC5xLWJyZWFkY3J1bWJzLXNlcGFyYXRvciB7XFxuICBmb250LXNpemU6IDE1MCU7XFxufVxcbi5xLWJyZWFkY3J1bWJzLWxhc3QgYSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuW2Rpcj1ydGxdIC5xLWJyZWFkY3J1bWJzLXNlcGFyYXRvciAucS1pY29uIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1idG4ge1xcbiAgb3V0bGluZTogMDtcXG4gIGJvcmRlcjogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBwYWRkaW5nOiA0cHggMTZweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICBtaW4taGVpZ2h0OiAyLjU3MmVtO1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuYnV0dG9uLnEtYnRuIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xcbn1cXG5hLnEtYnRuIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG4ucS1idG4gLnEtaWNvbixcXG4ucS1idG4gLnEtc3Bpbm5lciB7XFxuICBmb250LXNpemU6IDEuNGVtO1xcbn1cXG4ucS1idG4gLnEtYnRuLWlubmVyIHtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC42cztcXG59XFxuLnEtYnRuIC5xLWJ0bi1pbm5lci0taGlkZGVuIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLWJ0biAucS1idG4taW5uZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbn1cXG4ucS1idG4uZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC43ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWJ0bjpub3QoLmRpc2FibGVkKTpub3QoLnEtYnRuLWZsYXQpOm5vdCgucS1idG4tb3V0bGluZSk6bm90KC5xLWJ0bi1wdXNoKTpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgei1pbmRleDogLTE7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLWJ0bjpub3QoLmRpc2FibGVkKTpub3QoLnEtYnRuLWZsYXQpOm5vdCgucS1idG4tb3V0bGluZSk6bm90KC5xLWJ0bi1wdXNoKTphY3RpdmU6YmVmb3JlLFxcbi5xLWJ0bjpub3QoLmRpc2FibGVkKTpub3QoLnEtYnRuLWZsYXQpOm5vdCgucS1idG4tb3V0bGluZSk6bm90KC5xLWJ0bi1wdXNoKS5hY3RpdmU6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtYnRuLXByb2dyZXNzIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjI1KTtcXG59XFxuLnEtYnRuLXByb2dyZXNzLnEtYnRuLWRhcmstcHJvZ3Jlc3Mge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjIpO1xcbn1cXG4ucS1idG4tbm8tdXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG4ucS1idG4tcmVjdGFuZ2xlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtYnRuLW91dGxpbmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgY3VycmVudENvbG9yO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG59XFxuLnEtYnRuLXB1c2gge1xcbiAgYm9yZGVyLXJhZGl1czogN3B4O1xcbiAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7XFxufVxcbi5xLWJ0bi1wdXNoOmFjdGl2ZTpub3QoLmRpc2FibGVkKSxcXG4ucS1idG4tcHVzaC5hY3RpdmU6bm90KC5kaXNhYmxlZCkge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLWJ0bi1wdXNoIC5xLWZvY3VzLWhlbHBlcixcXG4ucS1idG4tcHVzaCAucS1yaXBwbGUtY29udGFpbmVyIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIGJvdHRvbTogLTNweDtcXG59XFxuLnEtYnRuLXJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMjhweDtcXG59XFxuLnEtYnRuLXJvdW5kIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAzZW07XFxuICB3aWR0aDogM2VtO1xcbn1cXG4ucS1idG4tZmxhdCxcXG4ucS1idG4tb3V0bGluZSB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1idG4tZGVuc2Uge1xcbiAgcGFkZGluZzogMC4yODVlbTtcXG4gIG1pbi1oZWlnaHQ6IDJlbTtcXG59XFxuLnEtYnRuLWRlbnNlLnEtYnRuLXJvdW5kIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IDIuNGVtO1xcbiAgd2lkdGg6IDIuNGVtO1xcbn1cXG4ucS1idG4tZGVuc2UgLm9uLWxlZnQge1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxufVxcbi5xLWJ0bi1kZW5zZSAub24tcmlnaHQge1xcbiAgbWFyZ2luLWxlZnQ6IDZweDtcXG59XFxuLnEtYnRuLWZhYiAucS1pY29uLFxcbi5xLWJ0bi1mYWItbWluaSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuLnEtYnRuLWZhYiB7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogNTZweDtcXG59XFxuLnEtYnRuLWZhYi1taW5pIHtcXG4gIGhlaWdodDogNDBweDtcXG4gIHdpZHRoOiA0MHB4O1xcbn1cXG4ucS10cmFuc2l0aW9uLS1mYWRlLWxlYXZlLWFjdGl2ZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5xLXRyYW5zaXRpb24tLWZhZGUtZW50ZXItYWN0aXZlLFxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUtYWN0aXZlIHtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlLW91dDtcXG59XFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1lbnRlcixcXG4ucS10cmFuc2l0aW9uLS1mYWRlLWxlYXZlLFxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtYnRuLWRyb3Bkb3duLXNwbGl0IC5xLWJ0bi1kcm9wZG93bi1hcnJvdyB7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMpO1xcbn1cXG4ucS1idG4tZ3JvdXAge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4taXRlbSB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4tZ3JvdXAgPiAucS1idG46Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1ncm91cCA+IC5xLWJ0bjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5xLWJ0bjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAucS1idG46bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWl0ZW0gKyAucS1idG4taXRlbSB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuLnEtYnRuLWdyb3VwLXB1c2gge1xcbiAgYm9yZGVyLXJhZGl1czogN3B4O1xcbn1cXG4ucS1idG4tZ3JvdXAtcHVzaCA+IC5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lciB7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2g6YWN0aXZlOm5vdCguZGlzYWJsZWQpLFxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2guYWN0aXZlOm5vdCguZGlzYWJsZWQpIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwwLDAsMC4xNSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxufVxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2g6YWN0aXZlOm5vdCguZGlzYWJsZWQpIC5xLWJ0bi1pbm5lcixcXG4ucS1idG4tZ3JvdXAtcHVzaCA+IC5xLWJ0bi1wdXNoLmFjdGl2ZTpub3QoLmRpc2FibGVkKSAucS1idG4taW5uZXIge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxufVxcbi5xLWJ0bi1ncm91cC1yb3VuZGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDI4cHg7XFxufVxcbi5xLWJ0bi1ncm91cC1mbGF0LFxcbi5xLWJ0bi1ncm91cC1vdXRsaW5lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5xLWJ0bi1ncm91cC1vdXRsaW5lID4gLnEtYnRuLWl0ZW0gKyAucS1idG4taXRlbSB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLnEtYnRuLWdyb3VwLW91dGxpbmUgPiAucS1idG4taXRlbTpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIGJvcmRlci1yaWdodDogMDtcXG59XFxuLnEtY2FyZCB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcbi5xLWNhcmQgPiBkaXY6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS1jYXJkID4gZGl2Omxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS1jYXJkID4gLnEtbGlzdCB7XFxuICBib3JkZXI6IDA7XFxufVxcbi5xLWNhcmQtc2VwYXJhdG9yIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG4gIGhlaWdodDogMXB4O1xcbn1cXG4ucS1jYXJkLXNlcGFyYXRvci5pbnNldCB7XFxuICBtYXJnaW46IDAgMTZweDtcXG59XFxuLnEtY2FyZC1jb250YWluZXIge1xcbiAgcGFkZGluZzogMTZweDtcXG59XFxuLnEtY2FyZC10aXRsZSB7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAycmVtO1xcbn1cXG4ucS1jYXJkLXRpdGxlOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWNhcmQtc3VidGl0bGUsXFxuLnEtY2FyZC10aXRsZS1leHRyYSB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjQpO1xcbn1cXG4ucS1jYXJkLXN1YnRpdGxlIC5xLWljb24sXFxuLnEtY2FyZC10aXRsZS1leHRyYSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuLnEtY2FyZC1tYWluIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG59XFxuLnEtY2FyZC1wcmltYXJ5ICsgLnEtY2FyZC1tYWluIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1jYXJkLWFjdGlvbnMge1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG4ucS1jYXJkLWFjdGlvbnMgLnEtYnRuIHtcXG4gIHBhZGRpbmc6IDAgOHB4O1xcbn1cXG4ucS1jYXJkLWFjdGlvbnMtaG9yaXogLnEtYnRuOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLWNhcmQtYWN0aW9ucy12ZXJ0IC5xLWJ0biArIC5xLWJ0biB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxufVxcbi5xLWNhcmQtbWVkaWEge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtY2FyZC1tZWRpYSA+IGltZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG4ucS1jYXJkLW1lZGlhLW92ZXJsYXkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNDcpO1xcbn1cXG4ucS1jYXJkLW1lZGlhLW92ZXJsYXkgLnEtY2FyZC1zdWJ0aXRsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtY2FyZC1kYXJrIC5xLWNhcmQtc2VwYXJhdG9yIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtcXG59XFxuLnEtY2FyZC1kYXJrIC5xLWNhcmQtc3VidGl0bGUsXFxuLnEtY2FyZC1kYXJrIC5xLWNhcmQtdGl0bGUtZXh0cmEge1xcbiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTtcXG59XFxuLnEtY2Fyb3VzZWwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtY2Fyb3VzZWwtaW5uZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1jYXJvdXNlbC1zbGlkZSB7XFxuICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICAgICAgZmxleDogMCAwIDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAxOHB4O1xcbn1cXG4ucS1jYXJvdXNlbC10cmFjayB7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtY2Fyb3VzZWwtdHJhY2suaW5maW5pdGUtbGVmdCA+IGRpdjpudGgtbGFzdC1jaGlsZCgyKSB7XFxuICAtbXMtZmxleC1vcmRlcjogLTEwMDA7XFxuICAgICAgb3JkZXI6IC0xMDAwO1xcbiAgbWFyZ2luLWxlZnQ6IC0xMDAlO1xcbn1cXG4ucS1jYXJvdXNlbC10cmFjay5pbmZpbml0ZS1yaWdodCA+IGRpdjpudGgtY2hpbGQoMikge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEwMDA7XFxuICAgICAgb3JkZXI6IDEwMDA7XFxufVxcbi5xLWNhcm91c2VsLWxlZnQtYXJyb3csXFxuLnEtY2Fyb3VzZWwtcmlnaHQtYXJyb3cge1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7XFxufVxcbi5xLWNhcm91c2VsLWxlZnQtYXJyb3cge1xcbiAgbGVmdDogNXB4O1xcbn1cXG4ucS1jYXJvdXNlbC1yaWdodC1hcnJvdyB7XFxuICByaWdodDogNXB4O1xcbn1cXG4ucS1jYXJvdXNlbC1xdWljay1uYXYge1xcbiAgcGFkZGluZzogMnB4IDA7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7XFxufVxcbi5xLWNhcm91c2VsLXF1aWNrLW5hdiAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1jYXJvdXNlbC1xdWljay1uYXYgLnEtYnRuLmluYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuLnEtY2Fyb3VzZWwtcXVpY2stbmF2IC5xLWJ0bi5pbmFjdGl2ZSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMTRweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzIHtcXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDUlKTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgbWF4LWhlaWdodDogNjAlO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgcGFkZGluZzogMC41cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgYm94LXNoYWRvdzogMCAtM3B4IDZweCByZ2JhKDAsMCwwLDAuMTYpLCAwIC01cHggNnB4IHJnYmEoMCwwLDAsMC4yMyk7XFxufVxcbi5xLWNhcm91c2VsLXRodW1ibmFpbHMuYWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyBpbWcge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIHdpbGwtY2hhbmdlOiBvcGFjaXR5O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyA+IGRpdiA+IGRpdiB7XFxuICAtbXMtZmxleDogMCAwIDEwOHB4O1xcbiAgICAgIGZsZXg6IDAgMCAxMDhweDtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyA+IGRpdiA+IGRpdi5hY3RpdmUgaW1nLFxcbi5xLWNhcm91c2VsLXRodW1ibmFpbHMgPiBkaXYgPiBkaXYgaW1nLmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZmO1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWwtYnRuIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG4gIHRvcDogNXB4O1xcbiAgcmlnaHQ6IDVweDtcXG59XFxuYm9keS5kZXNrdG9wIC5xLWNhcm91c2VsLXRodW1ibmFpbHMgaW1nOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLW1lc3NhZ2UtbmFtZSxcXG4ucS1tZXNzYWdlLXN0YW1wLFxcbi5xLW1lc3NhZ2UtbGFiZWwge1xcbiAgZm9udC1zaXplOiBzbWFsbDtcXG59XFxuLnEtbWVzc2FnZS1sYWJlbCB7XFxuICBtYXJnaW46IDI0cHggMDtcXG59XFxuLnEtbWVzc2FnZS1zdGFtcCB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLW1lc3NhZ2UtYXZhdGFyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiA0OHB4O1xcbiAgaGVpZ2h0OiA0OHB4O1xcbn1cXG4ucS1tZXNzYWdlIHtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuLnEtbWVzc2FnZTpmaXJzdC1jaGlsZCAucS1tZXNzYWdlLWxhYmVsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5xLW1lc3NhZ2UtcmVjZWl2ZWQgLnEtbWVzc2FnZS1hdmF0YXIge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLW1lc3NhZ2UtcmVjZWl2ZWQgLnEtbWVzc2FnZS10ZXh0IHtcXG4gIGNvbG9yOiAjODFjNzg0O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAzcHggMDtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZDpiZWZvcmUge1xcbiAgcmlnaHQ6IDEwMCU7XFxuICBib3JkZXItcmlnaHQ6IDAgc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLXRleHQtY29udGVudCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtbmFtZSB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtYXZhdGFyIHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi5xLW1lc3NhZ2Utc2VudCAucS1tZXNzYWdlLWNvbnRhaW5lciB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS10ZXh0IHtcXG4gIGNvbG9yOiAjZTBlMGUwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDNweDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtdGV4dDpsYXN0LWNoaWxkOmJlZm9yZSB7XFxuICBsZWZ0OiAxMDAlO1xcbiAgYm9yZGVyLWxlZnQ6IDAgc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1ib3R0b206IDhweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLW1lc3NhZ2Utc2VudCAucS1tZXNzYWdlLXRleHQtY29udGVudCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtbWVzc2FnZS10ZXh0IHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIHBhZGRpbmc6IDhweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG59XFxuLnEtbWVzc2FnZS10ZXh0ICsgLnEtbWVzc2FnZS10ZXh0IHtcXG4gIG1hcmdpbi10b3A6IDNweDtcXG59XFxuLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQge1xcbiAgbWluLWhlaWdodDogNDhweDtcXG59XFxuLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQgLnEtbWVzc2FnZS1zdGFtcCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQ6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxufVxcbi5xLWNoZWNrYm94LWljb24ge1xcbiAgaGVpZ2h0OiAyMXB4O1xcbiAgd2lkdGg6IDIxcHg7XFxuICBmb250LXNpemU6IDIxcHg7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1jaGlwIHtcXG4gIG1pbi1oZWlnaHQ6IDMycHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBib3JkZXI6ICNlMGUwZTA7XFxuICBib3JkZXItcmFkaXVzOiAycmVtO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgYmFja2dyb3VuZDogI2VlZTtcXG59XFxuLnEtY2hpcDpmb2N1cyAucS1jaGlwLWNsb3NlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuLnEtY2hpcCAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG4ucS1jaGlwLW1haW4ge1xcbiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxufVxcbi5xLWNoaXAtc2lkZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBoZWlnaHQ6IDMycHg7XFxuICB3aWR0aDogMzJweDtcXG4gIG1pbi13aWR0aDogMzJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLWNoaXAtc2lkZSBpbWcge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWNoaXAtbGVmdCB7XFxuICBtYXJnaW4tbGVmdDogLTEycHg7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtY2hpcC1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogMnB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAtMTJweDtcXG59XFxuLnEtY2hpcC1zcXVhcmUge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG4ucS1jaGlwLWZsb2F0aW5nIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTAuM2VtO1xcbiAgcmlnaHQ6IC0wLjNlbTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgei1pbmRleDogMTtcXG59XFxuLnEtY2hpcC10YWcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZy1sZWZ0OiAxLjdyZW07XFxufVxcbi5xLWNoaXAtdGFnOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwLjVyZW07XFxuICBtYXJnaW4tdG9wOiAtMC4yNXJlbTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICB3aWR0aDogMC41cmVtO1xcbiAgaGVpZ2h0OiAwLjVyZW07XFxuICBib3gtc2hhZG93OiAwIC0xcHggMXB4IDAgcmdiYSgwLDAsMCwwLjMpO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDA7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmc6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgei1pbmRleDogLTE7XFxuICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctdXAge1xcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLXVwOmJlZm9yZSB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtMjIlKSByb3RhdGUoNDVkZWcpO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLWRvd24ge1xcbiAgbWFyZ2luLWJvdHRvbTogMC44cmVtO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLWRvd246YmVmb3JlIHtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgdG9wOiAxMDAlO1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTc4JSkgcm90YXRlKDQ1ZGVnKTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1yaWdodCB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuOHJlbTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1yaWdodDpiZWZvcmUge1xcbiAgdG9wOiA1MCU7XFxuICByaWdodDogMnB4O1xcbiAgYm90dG9tOiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMyUpIHRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDQ1ZGVnKTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1sZWZ0IHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjhyZW07XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctbGVmdDpiZWZvcmUge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAycHg7XFxuICBib3R0b206IGF1dG87XFxuICByaWdodDogYXV0bztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzMlKSB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyk7XFxufVxcbi5xLWNoaXAtZGV0YWlsIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG4gIG9wYWNpdHk6IDAuODtcXG4gIHBhZGRpbmc6IDAgNXB4O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcbi5xLWNoaXAtc21hbGwge1xcbiAgbWluLWhlaWdodDogMjZweDtcXG59XFxuLnEtY2hpcC1zbWFsbCAucS1jaGlwLW1haW4ge1xcbiAgcGFkZGluZzogNHB4IDFweDtcXG4gIGxpbmUtaGVpZ2h0OiBpbml0aWFsO1xcbn1cXG4ucS1jaGlwLXNtYWxsIC5xLWNoaXAtc2lkZSB7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICB3aWR0aDogMjZweDtcXG4gIG1pbi13aWR0aDogMjZweDtcXG59XFxuLnEtY2hpcC1zbWFsbCAucS1jaGlwLWljb24ge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlIHtcXG4gIG1pbi1oZWlnaHQ6IDFweDtcXG4gIHBhZGRpbmc6IDAgM3B4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlLnEtY2hpcC10YWcge1xcbiAgcGFkZGluZy1sZWZ0OiAxLjNyZW07XFxufVxcbi5xLWNoaXAtZGVuc2UucS1jaGlwLXBvaW50aW5nOmJlZm9yZSB7XFxuICB3aWR0aDogOXB4O1xcbiAgaGVpZ2h0OiA5cHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtY2hpcC1tYWluIHtcXG4gIHBhZGRpbmc6IDFweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLXNpZGUge1xcbiAgaGVpZ2h0OiAxOHB4O1xcbiAgd2lkdGg6IDE4cHg7XFxuICBtaW4td2lkdGg6IDE2cHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtY2hpcC1sZWZ0IHtcXG4gIG1hcmdpbi1sZWZ0OiAtM3B4O1xcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtY2hpcC1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogMnB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbn1cXG4ucS1pbnB1dC1jaGlwcyB7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuLnEtaW5wdXQtY2hpcHMgLnEtY2hpcCB7XFxuICBtYXJnaW46IDFweDtcXG59XFxuLnEtaW5wdXQtY2hpcHMgaW5wdXQucS1pbnB1dC10YXJnZXQge1xcbiAgbWluLXdpZHRoOiA3MHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXN1Yi1pdGVtIHtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1zdWItaXRlbS5pbmRlbnQge1xcbiAgcGFkZGluZy1sZWZ0OiA0OHB4O1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG59XFxuLnEtY29sbGFwc2libGUtc3ViLWl0ZW0gLnEtY2FyZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS5yb3V0ZXItbGluay1hY3RpdmUgPiAucS1pdGVtIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTg5LDE4OSwxODksMC40KTtcXG59XFxuLnEtY29sbGFwc2libGUge1xcbiAgdHJhbnNpdGlvbjogcGFkZGluZyAwLjVzO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQge1xcbiAgcGFkZGluZzogMCAxNXB4O1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQgLnEtY29sbGFwc2libGUtaW5uZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtY2xvc2VkICsgLnEtY29sbGFwc2libGUtcG9wdXAtY2xvc2VkIC5xLWNvbGxhcHNpYmxlLWlubmVyIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLW9wZW5lZCB7XFxuICBwYWRkaW5nOiAxNXB4IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLW9wZW5lZCAucS1jb2xsYXBzaWJsZS1pbm5lciB7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkICsgLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkLFxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLW9wZW5lZDpmaXJzdC1jaGlsZCB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkOmxhc3QtY2hpbGQge1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLWN1cnNvci1wb2ludGVyID4gLnEtY29sbGFwc2libGUtaW5uZXIgPiAucS1pdGVtIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtY29sbGFwc2libGUtdG9nZ2xlLWljb24ge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgd2lkdGg6IDFlbTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnEtY29sb3Ige1xcbiAgbWF4LXdpZHRoOiAxMDB2dztcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEyM3B4O1xcbn1cXG4ucS1jb2xvci1zYXR1cmF0aW9uLXdoaXRlIHtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2ZmZiwgcmdiYSgyNTUsMjU1LDI1NSwwKSk7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24tYmxhY2sge1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgIzAwMCwgcmdiYSgwLDAsMCwwKSk7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24tY2lyY2xlIHtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMS41cHggI2ZmZiwgaW5zZXQgMCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjMpLCAwIDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNCk7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNXB4LCAtNXB4KTtcXG59XFxuLnEtY29sb3Itc3dhdGNoLFxcbi5xLWNvbG9yLWFscGhhIC5xLXNsaWRlci10cmFjayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWdBQUFBSUNBWUFBQURFRDc2TEFBQUFIMGxFUVZRb1UyTmtZR0F3WmtBRlo1RzVqUFJSZ09ZRVZEZUIzRUJqQlFCT1p3VFZ1Z0lHeUFBQUFBQkpSVTVFcmtKZ2dnPT1cXFwiKSAhaW1wb3J0YW50O1xcbn1cXG4ucS1jb2xvci1zd2F0Y2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG59XFxuLnEtY29sb3ItaHVlIC5xLXNsaWRlci10cmFjayB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNmMDAgMCUsICNmZjAgMTclLCAjMGYwIDMzJSwgIzBmZiA1MCUsICMwMGYgNjclLCAjZjBmIDgzJSwgI2YwMCAxMDAlKTtcXG4gIG9wYWNpdHk6IDE7XFxuICBoZWlnaHQ6IDhweDtcXG59XFxuLnEtY29sb3ItaHVlIC5xLXNsaWRlci10cmFjay5hY3RpdmUtdHJhY2sge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBvcGFjaXR5OiAxO1xcbiAgaGVpZ2h0OiA4cHg7XFxufVxcbi5xLWNvbG9yLWFscGhhIC5xLXNsaWRlci10cmFjazphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwKSwgIzc1NzU3NSk7XFxufVxcbi5xLWNvbG9yLWFscGhhIC5xLXNsaWRlci10cmFjay5hY3RpdmUtdHJhY2sge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtY29sb3Itc2xpZGVycyB7XFxuICBoZWlnaHQ6IDU2cHg7XFxufVxcbi5xLWNvbG9yLXNsaWRlcnMgLnEtc2xpZGVyIHtcXG4gIGhlaWdodDogMjBweDtcXG59XFxuLnEtY29sb3Itc2xpZGVycyAucS1zbGlkZXItaGFuZGxlIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4zNyk7XFxufVxcbi5xLWNvbG9yLXNsaWRlcnMgLnEtc2xpZGVyLXJpbmcge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtY29sb3ItaW5wdXRzIHtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucS1jb2xvci1pbnB1dHMgaW5wdXQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLWNvbG9yLXBhZGRpbmcge1xcbiAgcGFkZGluZzogMCAycHg7XFxufVxcbi5xLWNvbG9yLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiA0cHg7XFxufVxcbi5xLWNvbG9yLWRhcmsge1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MjQyNDI7XFxufVxcbi5xLWNvbG9yLWRhcmsgaW5wdXQge1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXEtY29sb3ItZGFyayk7XFxufVxcbi5xLWNvbG9yLWRhcmsgLnEtY29sb3ItaW5wdXRzIHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbn1cXG4ucS1jb2xvci1kYXJrIC5xLWNvbG9yLXN3YXRjaCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjNDI0MjQyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuLnEtZGF0ZXRpbWUtaW5wdXQge1xcbiAgbWluLXdpZHRoOiA3MHB4O1xcbn1cXG4ucS1kYXRldGltZS1jb250cm9scyB7XFxuICBwYWRkaW5nOiAwIDEwcHggOHB4O1xcbn1cXG4ucS1kYXRldGltZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XFxufVxcbi5xLWRhdGV0aW1lIC5tb2RhbC1idXR0b25zIHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5xLWRhdGV0aW1lOm5vdCgubm8tYm9yZGVyKTpub3QoLnEtZGF0ZXRpbWUtZGFyaykgLnEtZGF0ZXRpbWUtY29udGVudCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1kYXRldGltZTpub3QoLm5vLWJvcmRlcikucS1kYXRldGltZS1kYXJrIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MjQyNDI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG4ucS1kYXRldGltZS1oZWFkZXIge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1oZWFkZXIgPiBkaXYge1xcbiAgY29sb3I6ICNmZmY7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLm1vZGFsLWNvbnRlbnQgPiAucS1kYXRldGltZSA+IC5xLWRhdGV0aW1lLWhlYWRlcixcXG4ucS1wb3BvdmVyID4gLnEtZGF0ZXRpbWUgPiAucS1kYXRldGltZS1oZWFkZXIge1xcbiAgbWluLXdpZHRoOiAxNzVweDtcXG59XFxuLnEtZGF0ZXRpbWUtd2Vla2RheXN0cmluZyB7XFxuICBmb250LXNpemU6IDAuOHJlbTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG4gIHBhZGRpbmc6IDVweCAwO1xcbn1cXG4ucS1kYXRldGltZS10aW1lIHtcXG4gIHBhZGRpbmc6IDEwcHggMDtcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuLnEtZGF0ZXRpbWUtYW1wbSB7XFxuICBmb250LXNpemU6IDAuOXJlbTtcXG4gIHBhZGRpbmc6IDVweDtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyB7XFxuICBwYWRkaW5nOiAxMHB4IDA7XFxufVxcbi5xLWRhdGV0aW1lLWRhdGVzdHJpbmcgLnEtZGF0ZXRpbWUtbGluayB7XFxuICBmb250LXNpemU6IDIuN3JlbTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rIHNwYW4ge1xcbiAgcGFkZGluZzogMCA1cHg7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rLnNtYWxsIHtcXG4gIG1hcmdpbjogMCA1cHg7XFxuICBmb250LXNpemU6IDEuMnJlbTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rLnNtYWxsIHNwYW4ge1xcbiAgcGFkZGluZzogNXB4O1xcbn1cXG4ucS1kYXRldGltZS1saW5rIHtcXG4gIG9wYWNpdHk6IDAuNjtcXG59XFxuLnEtZGF0ZXRpbWUtbGluayA+IHNwYW4ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtZGF0ZXRpbWUtbGluay5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2tzdHJpbmcge1xcbiAgbWluLXdpZHRoOiAyMTBweDtcXG4gIGZvbnQtc2l6ZTogMi43cmVtO1xcbiAgZGlyZWN0aW9uOiBsdHIgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtc2VsZWN0b3Ige1xcbiAgbWluLXdpZHRoOiAyOTBweDtcXG4gIGhlaWdodDogMzEwcHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuLnEtZGF0ZXRpbWUtdmlldy1kYXkge1xcbiAgd2lkdGg6IDI1MHB4O1xcbiAgaGVpZ2h0OiAyODVweDtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1kYXRldGltZS12aWV3LXllYXIgPiAucS1idG46bm90KC5hY3RpdmUpLFxcbi5xLWRhdGV0aW1lLXZpZXctbW9udGggPiAucS1idG46bm90KC5hY3RpdmUpIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1kYXRldGltZS1tb250aC1zdGFtcCB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5xLWRhdGV0aW1lLXdlZWtkYXlzIHtcXG4gIG1hcmdpbi1ib3R0b206IDVweDtcXG59XFxuLnEtZGF0ZXRpbWUtd2Vla2RheXMgZGl2IHtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIHdpZHRoOiAzNXB4O1xcbiAgaGVpZ2h0OiAzNXB4O1xcbiAgbGluZS1oZWlnaHQ6IDM1cHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG4ucS1kYXRldGltZS1kYXlzIGRpdiB7XFxuICBtYXJnaW46IDFweDtcXG4gIGxpbmUtaGVpZ2h0OiAzM3B4O1xcbiAgd2lkdGg6IDMzcHg7XFxuICBoZWlnaHQ6IDMzcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSA+IHNwYW4ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LXRvZGF5IHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2Om5vdCgucS1kYXRldGltZS1maWxsZXJkYXkpOm5vdCguZGlzYWJsZWQpOm5vdCgucS1kYXRldGltZS1kYXktYWN0aXZlKTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiAjZTBlMGUwO1xcbn1cXG4ucS1kYXRldGltZS1idG4ge1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG59XFxuLnEtZGF0ZXRpbWUtYnRuLmFjdGl2ZSB7XFxuICBmb250LXNpemU6IDEuNXJlbTtcXG4gIHBhZGRpbmctdG9wOiAxcmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrIHtcXG4gIHdpZHRoOiAyNTBweDtcXG4gIGhlaWdodDogMjUwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjZTBlMGUwO1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stY2lyY2xlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFuaW1hdGlvbjogcS1wb3AgMC41cyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1jZW50ZXIge1xcbiAgaGVpZ2h0OiA2cHg7XFxuICB3aWR0aDogNnB4O1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9pbnRlciB7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA1MCU7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXIgLyogcnRsOmlnbm9yZSAqLztcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvaW50ZXIgc3BhbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB3aWR0aDogOHB4O1xcbiAgaGVpZ2h0OiA4cHg7XFxuICBib3R0b206IC04cHg7XFxuICBsZWZ0OiAwO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1hcnJvdyB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayB7XFxuICBiYWNrZ3JvdW5kOiAjNDI0MjQyO1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1hcnJvdyB7XFxuICBjb2xvcjogI2JkYmRiZDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWxpZ2h0KTtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1oZWFkZXIsXFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1jbG9jayB7XFxuICBiYWNrZ3JvdW5kOiAjNjE2MTYxO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLXZpZXctZGF5IHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLXZpZXcteWVhciA+IC5xLWJ0bjpub3QoLmFjdGl2ZSksXFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS12aWV3LW1vbnRoID4gLnEtYnRuOm5vdCguYWN0aXZlKSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1kYXlzIGRpdi5xLWRhdGV0aW1lLWRheS1hY3RpdmUgPiBzcGFuLFxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtZGF5cyBkaXY6bm90KC5xLWRhdGV0aW1lLWZpbGxlcmRheSk6bm90KC5kaXNhYmxlZCk6bm90KC5xLWRhdGV0aW1lLWRheS1hY3RpdmUpOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb246bm90KC5hY3RpdmUpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuYm9keS5kZXNrdG9wIC5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb246bm90KC5hY3RpdmUpOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBtaW4taGVpZ2h0OiAzMnB4O1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSAvKiBydGw6aWdub3JlICovO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSkge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb246bm90KC5hY3RpdmUpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbi5hY3RpdmUge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbi5hY3RpdmUgPiBzcGFuIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMCB7XFxuICB0b3A6IDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xIHtcXG4gIHRvcDogNi43JTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMiB7XFxuICB0b3A6IDI1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0zIHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMTAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy01IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiA3NSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTYge1xcbiAgdG9wOiAxMDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy03IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTgge1xcbiAgdG9wOiA3NSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy05IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEwIHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogNi43JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTEge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogMjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMiB7XFxuICB0b3A6IDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xLmZtdDI0IHtcXG4gIHRvcDogNi43JTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMi5mbXQyNCB7XFxuICB0b3A6IDI1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0zLmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMTAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNC5mbXQyNCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy01LmZtdDI0IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiA3NSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTYuZm10MjQge1xcbiAgdG9wOiAxMDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy03LmZtdDI0IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTguZm10MjQge1xcbiAgdG9wOiA3NSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy05LmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEwLmZtdDI0IHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogNi43JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTEuZm10MjQge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogMjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMi5mbXQyNCB7XFxuICB0b3A6IDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMy5mbXQyNCB7XFxuICB0b3A6IDE5LjY5JTtcXG4gIGxlZnQ6IDY3LjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNC5mbXQyNCB7XFxuICB0b3A6IDMyLjUlO1xcbiAgbGVmdDogODAuMzElIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNS5mbXQyNCB7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDg1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTYuZm10MjQge1xcbiAgdG9wOiA2Ny41JTtcXG4gIGxlZnQ6IDgwLjMxJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTcuZm10MjQge1xcbiAgdG9wOiA4MC4zMSU7XFxuICBsZWZ0OiA2Ny41JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTguZm10MjQge1xcbiAgdG9wOiA4NSU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTE5LmZtdDI0IHtcXG4gIHRvcDogODAuMzElO1xcbiAgbGVmdDogMzIuNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIwLmZtdDI0IHtcXG4gIHRvcDogNjcuNSU7XFxuICBsZWZ0OiAxOS42OSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIxLmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMTUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yMi5mbXQyNCB7XFxuICB0b3A6IDMyLjUlO1xcbiAgbGVmdDogMTkuNjklIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yMy5mbXQyNCB7XFxuICB0b3A6IDE5LjY5JTtcXG4gIGxlZnQ6IDMyLjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0wLmZtdDI0IHtcXG4gIHRvcDogMTUlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLXJhbmdlLnJvdyAucS1kYXRldGltZS1yYW5nZS1sZWZ0IHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcbi5xLWRhdGV0aW1lLXJhbmdlLnJvdyAucS1kYXRldGltZS1yYW5nZS1yaWdodCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuLnEtZGF0ZXRpbWUtcmFuZ2UuY29sdW1uID4gZGl2ICsgZGl2IHtcXG4gIG1hcmdpbi10b3A6IDEwcHg7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtZGF0ZXRpbWUge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLnEtZGF0ZXRpbWUtaGVhZGVyIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgICAgZmxleDogMSAxIGF1dG87XFxuICB9XFxuICAucS1kYXRldGltZS1jb250ZW50IHtcXG4gICAgLW1zLWZsZXg6IDIgMiBhdXRvO1xcbiAgICAgICAgZmxleDogMiAyIGF1dG87XFxuICB9XFxufVxcbi5xLWRvdCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0ycHg7XFxuICByaWdodDogLTEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICNmNDQzMzY7XFxuICBvcGFjaXR5OiAwLjg7XFxufVxcbi5xLWVkaXRvciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucS1lZGl0b3IuZGlzYWJsZWQge1xcbiAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XFxufVxcbi5xLWVkaXRvci5mdWxsc2NyZWVuIHtcXG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xcbn1cXG4ucS1lZGl0b3ItY29udGVudCB7XFxuICBvdXRsaW5lOiAwO1xcbiAgcGFkZGluZzogMTBweDtcXG4gIG1pbi1oZWlnaHQ6IDEwZW07XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG4ucS1lZGl0b3ItY29udGVudCBociB7XFxuICBib3JkZXI6IDA7XFxuICBvdXRsaW5lOiAwO1xcbiAgbWFyZ2luOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJhY2tncm91bmQ6ICNjY2M7XFxufVxcbi5xLWVkaXRvci10b29sYmFyLXBhZGRpbmcge1xcbiAgcGFkZGluZzogNHB4O1xcbn1cXG4ucS1lZGl0b3ItdG9vbGJhciB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTA7XFxuICBtaW4taGVpZ2h0OiAzN3B4O1xcbn1cXG4ucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXIgLnEtYnRuLWdyb3VwICsgLnEtYnRuLWdyb3VwIHtcXG4gIG1hcmdpbi1sZWZ0OiA1cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyLXNlcGFyYXRvciAucS1idG4tZ3JvdXAgKyAucS1idG4tZ3JvdXAge1xcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyLXNlcGFyYXRvciAucS1idG4tZ3JvdXAgKyAucS1idG4tZ3JvdXA6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxcHg7XFxuICBiYWNrZ3JvdW5kOiAjY2NjO1xcbn1cXG4ucS1lZGl0b3ItaW5wdXQgaW5wdXQge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcbi5xLWZhYiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uei1mYWIge1xcbiAgei1pbmRleDogOTkwO1xcbn1cXG4ucS1mYWItb3BlbmVkIC5xLWZhYi1hY3Rpb25zIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgxKSBzY2FsZVkoMSkgdHJhbnNsYXRlWCgwKSB0cmFuc2xhdGVZKDApO1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG59XFxuLnEtZmFiLW9wZW5lZCAucS1mYWItaWNvbiB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIDE4MGRlZyk7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1mYWItb3BlbmVkIC5xLWZhYi1hY3RpdmUtaWNvbiB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIDBkZWcpO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtZmFiLWljb24sXFxuLnEtZmFiLWFjdGl2ZS1pY29uIHtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cywgdHJhbnNmb3JtIDAuNHM7XFxufVxcbi5xLWZhYi1pY29uIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIDBkZWcpO1xcbn1cXG4ucS1mYWItYWN0aXZlLWljb24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgLTE4MGRlZyk7XFxufVxcbi5xLWZhYi1hY3Rpb25zIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLWZhYi1hY3Rpb25zIC5xLWJ0biB7XFxuICBtYXJnaW46IDVweDtcXG59XFxuLnEtZmFiLXJpZ2h0IHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWCgtMTAwJSk7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAxMjAlO1xcbn1cXG4ucS1mYWItbGVmdCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjQpIHNjYWxlWSgwLjQpIHRyYW5zbGF0ZVgoMTAwJSk7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMTIwJTtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcbi5xLWZhYi11cCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjQpIHNjYWxlWSgwLjQpIHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYm90dG9tOiAxMjAlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4ucS1mYWItZG93biB7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjQpIHNjYWxlWSgwLjQpIHRyYW5zbGF0ZVkoLTEwMCUpO1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgdG9wOiAxMjAlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4ucS1maWVsZC1pY29uIHtcXG4gIHdpZHRoOiAyOHB4O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgbWluLXdpZHRoOiAyOHB4O1xcbiAgZm9udC1zaXplOiAyOHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxufVxcbi5xLWZpZWxkLWxhYmVsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gIGNvbG9yOiAjOTc5Nzk3O1xcbn1cXG4ucS1maWVsZC1sYWJlbC1pbm5lciB7XFxuICBtaW4taGVpZ2h0OiAyOHB4O1xcbn1cXG4ucS1maWVsZC1sYWJlbC1oaW50IHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4ucS1maWVsZC1ib3R0b20ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG4gIGNvbG9yOiAjOTc5Nzk3O1xcbn1cXG4ucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1ib3R0b20ge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLWZpZWxkLWNvdW50ZXIge1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG59XFxuLnEtZmllbGQtZGFyayAucS1maWVsZC1sYWJlbCxcXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLWljb24sXFxuLnEtZmllbGQtZGFyayAucS1maWVsZC1jb3VudGVyLFxcbi5xLWZpZWxkLWRhcmsgLnEtZmllbGQtYm90dG9tIHtcXG4gIGNvbG9yOiAjYTdhN2E3O1xcbn1cXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLWJvdHRvbSB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgIzk3OTc5NztcXG59XFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1pY29uLFxcbi5xLWZpZWxkLXdpdGgtZXJyb3IgLnEtZmllbGQtbGFiZWwsXFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1ib3R0b20ge1xcbiAgY29sb3I6ICNkYjI4Mjg7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLWZpZWxkLXdpdGgtZXJyb3IgLnEtZmllbGQtbm8taW5wdXQgLnEtZmllbGQtYm90dG9tIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGIyODI4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbn1cXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtaWNvbixcXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtbGFiZWwsXFxuLnEtZmllbGQtd2l0aC13YXJuaW5nIC5xLWZpZWxkLWJvdHRvbSB7XFxuICBjb2xvcjogI2YyYzAzNztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpO1xcbn1cXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtbm8taW5wdXQgLnEtZmllbGQtYm90dG9tIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjJjMDM3O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXEtY29sb3Itd2FybmluZyk7XFxufVxcbi5xLWZpZWxkLW1hcmdpbiB7XFxuICBtYXJnaW4tdG9wOiA1cHg7XFxufVxcbi5xLWZpZWxkLWZsb2F0aW5nIC5xLWZpZWxkLW1hcmdpbiB7XFxuICBtYXJnaW4tdG9wOiAyM3B4O1xcbn1cXG4ucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1tYXJnaW4ge1xcbiAgbWFyZ2luLXRvcDogM3B4O1xcbn1cXG4ucS1maWVsZC1jb250ZW50IC5xLWlmLnEtaWYtaGFzLWxhYmVsOm5vdCgucS1pZi1zdGFuZGFyZCkge1xcbiAgbWFyZ2luLXRvcDogOXB4O1xcbn1cXG4ucS1maWVsZC1jb250ZW50IC5xLWlmLXN0YW5kYXJkOm5vdCgucS1pZi1oYXMtbGFiZWwpIHtcXG4gIHBhZGRpbmctdG9wOiA2cHg7XFxufVxcbi5xLWZpZWxkLWNvbnRlbnQgLnEtb3B0aW9uLWdyb3VwIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1jb250ZW50IHtcXG4gIHBhZGRpbmctdG9wOiA2cHg7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtZmllbGQtbWFyZ2luIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtaWYtc3RhbmRhcmQ6bm90KC5xLWlmLWhhcy1sYWJlbCkge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtaWYucS1pZi1oYXMtbGFiZWw6bm90KC5xLWlmLXN0YW5kYXJkKSB7XFxuICBtYXJnaW4tdG9wOiAwcHg7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsLnEtZmllbGQtbm8tbGFiZWwgLnEtZmllbGQtbGFiZWwge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XFxuICAucS1maWVsZC1yZXNwb25zaXZlOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtZmllbGQtbWFyZ2luIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gIH1cXG4gIC5xLWZpZWxkLXJlc3BvbnNpdmU6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1pZi1zdGFuZGFyZDpub3QoLnEtaWYtaGFzLWxhYmVsKSB7XFxuICAgIHBhZGRpbmctdG9wOiAwO1xcbiAgfVxcbiAgLnEtZmllbGQtcmVzcG9uc2l2ZTpub3QoLnEtZmllbGQtbm8tbGFiZWwpIC5xLWlmLnEtaWYtaGFzLWxhYmVsOm5vdCgucS1pZi1zdGFuZGFyZCkge1xcbiAgICBtYXJnaW4tdG9wOiAwcHg7XFxuICB9XFxuICAucS1maWVsZC1yZXNwb25zaXZlLnEtZmllbGQtbm8tbGFiZWwgLnEtZmllbGQtbGFiZWwge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG4ucS1pbm5lci1sb2FkaW5nIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTtcXG59XFxuLnEtaW5uZXItbG9hZGluZy5kYXJrIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40KTtcXG59XFxuLnEtaWYsXFxuLnEtaWY6YmVmb3JlLFxcbi5xLWlmLWxhYmVsLFxcbi5xLWlmLWFkZG9uLFxcbi5xLWZpZWxkLWljb24sXFxuLnEtZmllbGQtbGFiZWwsXFxuLnEtaWYtY29udHJvbCxcXG4ucS1maWVsZC1ib3R0b20ge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuNDVzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSwgZGlzcGxheSAwcyAwcztcXG59XFxuLnEtaWYucS1pZi1oaWRlLXVuZGVybGluZTpiZWZvcmUsXFxuLnEtaWYucS1pZi1pbnZlcnRlZDpiZWZvcmUsXFxuLnEtaWYucS1pZi1oaWRlLXVuZGVybGluZTphZnRlcixcXG4ucS1pZi5xLWlmLWludmVydGVkOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcbi5xLWlmLWludmVydGVkIHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1pbm5lciB7XFxuICBtYXJnaW4tdG9wOiA3cHg7XFxuICBtYXJnaW4tYm90dG9tOiA3cHg7XFxufVxcbi5xLWlmLWludmVydGVkLnEtaWYtaGFzLWxhYmVsIC5xLWlmLWlubmVyIHtcXG4gIG1hcmdpbi10b3A6IDI1cHg7XFxufVxcbi5xLWlmOmJlZm9yZSxcXG4ucS1pZjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3JkZXI6IDFweCBoaWRkZW4gY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY29udGVudDogJyc7XFxufVxcbi5xLWlmOmJlZm9yZSB7XFxuICBjb2xvcjogI2JkYmRiZDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWxpZ2h0KTtcXG59XFxuLnEtaWY6YWZ0ZXIge1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlciAwO1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7XFxufVxcbi5xLWlmOm5vdCgucS1pZi1kaXNhYmxlZCk6bm90KC5xLWlmLWVycm9yKTpub3QoLnEtaWYtd2FybmluZyk6aG92ZXI6YmVmb3JlLFxcbi5xLWlmLnEtaWYtcmVhZG9ubHk6bm90KC5xLWlmLWVycm9yKTpub3QoLnEtaWYtd2FybmluZyk6YWZ0ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWlmLWRhcmsucS1pZjpub3QoLnEtaWYtZGlzYWJsZWQpOm5vdCgucS1pZi1lcnJvcik6bm90KC5xLWlmLXdhcm5pbmcpOmhvdmVyOmJlZm9yZSxcXG4ucS1pZi1kYXJrLnEtaWYucS1pZi1yZWFkb25seTpub3QoLnEtaWYtZXJyb3IpOm5vdCgucS1pZi13YXJuaW5nKTphZnRlciB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtaWYtZm9jdXNlZDphZnRlciB7XFxuICBib3JkZXItd2lkdGg6IDJweDtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNDVzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSwgYm9yZGVyLWxlZnQtd2lkdGggMHMgMC40NXMsIGJvcmRlci1yaWdodC13aWR0aCAwcyAwLjQ1cztcXG59XFxuLnEtaWYge1xcbiAgb3V0bGluZTogMDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG59XFxuLnEtaWYgLnEtaWYtaW5uZXIge1xcbiAgbWluLWhlaWdodDogMjRweDtcXG59XFxuLnEtaWYtc3RhbmRhcmQge1xcbiAgcGFkZGluZy10b3A6IDdweDtcXG4gIHBhZGRpbmctYm90dG9tOiA3cHg7XFxufVxcbi5xLWlmLXN0YW5kYXJkLnEtaWYtaGFzLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiAyNXB4O1xcbn1cXG4ucS1pZi1oaWRlLXVuZGVybGluZSB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS1pZi1oaWRlLXVuZGVybGluZS5xLWlmLWhhcy1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogMThweDtcXG59XFxuLnEtaWYtc3RhbmRhcmQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XFxufVxcbi5xLWlmLXN0YW5kYXJkIC5xLWlmLWxhYmVsLnEtaWYtbGFiZWwtYWJvdmUsXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwucS1pZi1sYWJlbC1hYm92ZSB7XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTAwJSk7XFxuICBsaW5lLWhlaWdodDogMThweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQge1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlmLWxhYmVsIHtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTIxcHgpO1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbC5xLWlmLWxhYmVsLWFib3ZlIHtcXG4gIHRvcDogNHB4O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTEyNSUpO1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pbnB1dC10YXJnZXQge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcbi5xLWlmLWZvY3VzZWQ6bm90KC5xLWlmLXJlYWRvbmx5KSAucS1pZi1sYWJlbCxcXG4ucS1pZi1mb2N1c2VkOm5vdCgucS1pZi1yZWFkb25seSkgLnEtaWYtYWRkb24sXFxuLnEtaWYtZm9jdXNlZDpub3QoLnEtaWYtcmVhZG9ubHkpIC5xLWlmLWNvbnRyb2wge1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtaWYtd2FybmluZzpiZWZvcmUsXFxuLnEtaWYtd2FybmluZzphZnRlcixcXG4ucS1pZi13YXJuaW5nOm5vdCgucS1pZi1pbnZlcnRlZCkgLnEtaWYtbGFiZWwge1xcbiAgY29sb3I6ICNmMmMwMzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nKTtcXG59XFxuLnEtaWYtd2FybmluZzpob3ZlcjpiZWZvcmUge1xcbiAgY29sb3I6ICNmOGRkOTM7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nLWwpO1xcbn1cXG4ucS1pZi1lcnJvcjpiZWZvcmUsXFxuLnEtaWYtZXJyb3I6YWZ0ZXIsXFxuLnEtaWYtZXJyb3I6bm90KC5xLWlmLWludmVydGVkKSAucS1pZi1sYWJlbCB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG59XFxuLnEtaWYtZXJyb3I6aG92ZXI6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZWM4YjhiO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUtbCk7XFxufVxcbi5xLWlmLWRpc2FibGVkIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBvcGFjaXR5OiAwLjY7XFxufVxcbi5xLWlmLWRpc2FibGVkIC5xLWlmLWxhYmVsLFxcbi5xLWlmLWRpc2FibGVkIC5xLWlmLWNvbnRyb2wsXFxuLnEtaWYtZGlzYWJsZWQgLnEtaW5wdXQtdGFyZ2V0LFxcbi5xLWlmLWRpc2FibGVkIC5xLWNoaXAge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnEtaWYtZGFyazpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDpub3QoLnEtaW5wdXQtdGFyZ2V0LXBsYWNlaG9sZGVyKSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtaWYtZm9jdXNhYmxlIHtcXG4gIG91dGxpbmU6IDA7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLWlmLWxhYmVsLFxcbi5xLWlucHV0LXRhcmdldCxcXG4ucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIge1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxufVxcbi5xLWlmLWNvbnRyb2wge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLWlmLWNvbnRyb2wgKyAucS1pZi1jb250cm9sLFxcbi5xLWlmLWNvbnRyb2wgKyAucS1pZi1pbm5lcixcXG4ucS1pZi1pbm5lciArIC5xLWlmLWNvbnRyb2wge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnEtaWYtY29udHJvbDpob3ZlciB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLWlmLWJhc2VsaW5lIHtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgd2lkdGg6IDA7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLWlmLWxhYmVsLWlubmVyLFxcbi5xLWlmLWxhYmVsLXNwYWNlcixcXG4ucS1pZi1iYXNlbGluZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcbi5xLWlmLWxhYmVsLXNwYWNlciB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxufVxcbi5xLWlmLWxhYmVsIHtcXG4gIGN1cnNvcjogdGV4dDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLWlmLWxhYmVsLFxcbi5xLWlmLWFkZG9uLFxcbi5xLWlmLWNvbnRyb2wge1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtYWRkb24sXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogI2RkZDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQtbGlnaHQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtaW52ZXJ0ZWQtbGlnaHQgLnEtaWYtYWRkb24sXFxuLnEtaWYtaW52ZXJ0ZWQtbGlnaHQgLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogIzY1NjU2NTtcXG59XFxuLnEtaWYtYWRkb24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogaW5oZXJpdDtcXG59XFxuLnEtaWYtYWRkb246bm90KC5xLWlmLWFkZG9uLXZpc2libGUpIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWlmLWFkZG9uLWxlZnQge1xcbiAgcGFkZGluZy1yaWdodDogMXB4O1xcbn1cXG4ucS1pZi1hZGRvbi1yaWdodCB7XFxuICBwYWRkaW5nLWxlZnQ6IDFweDtcXG59XFxuLnEtaWYtYWRkb24tdmlzaWJsZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQsXFxuLnEtaW5wdXQtc2hhZG93IHtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIHJlc2l6ZTogbm9uZTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6LXdlYmtpdC1hdXRvZmlsbCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiB3ZWJraXQtYXV0b2ZpbGwtb247XFxuICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XFxufVxcbi5xLWlucHV0LXRhcmdldC5xLWlucHV0LWF1dG9maWxsOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCkge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogd2Via2l0LWF1dG9maWxsLW9mZjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0OjotbXMtY2xlYXIsXFxuLnEtaW5wdXQtdGFyZ2V0OjotbXMtcmV2ZWFsIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0OmludmFsaWQge1xcbiAgYm94LXNoYWRvdzogaW5oZXJpdDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0OmJlZm9yZSB7XFxuICBjb250ZW50OiAnfCc7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIHdpZHRoOiAwO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5pbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgb3V0bGluZTogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuLnEtaWYgLnEtaW5wdXQtdGFyZ2V0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmIC5xLWlucHV0LXRhcmdldDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZiAucS1pbnB1dC10YXJnZXQ6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM5Nzk3OTcgIWltcG9ydGFudDtcXG59XFxuLnEtaWYgLnEtaW5wdXQtdGFyZ2V0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM5Nzk3OTcgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQ6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjZGRkICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlucHV0LXNoYWRvdyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG4ucS1qdW1ib3Ryb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMnJlbSAxcmVtO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xcbn1cXG4ucS1qdW1ib3Ryb24tZGFyayB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NTc1NzU7XFxufVxcbi5xLWp1bWJvdHJvbi1kYXJrIGhyLnEtaHIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjM2KTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucS1qdW1ib3Ryb24ge1xcbiAgICBwYWRkaW5nOiA0cmVtIDJyZW07XFxuICB9XFxufVxcbi5xLWtub2IsXFxuLnEta25vYiA+IGRpdiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5xLWtub2IgPiBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWtub2ItbGFiZWwge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEta25vYi1sYWJlbCBpIHtcXG4gIGZvbnQtc2l6ZTogMTMwJTtcXG59XFxuLnEtbGF5b3V0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcbi5xLWxheW91dC1jb250YWluZXIgLnEtbGF5b3V0IHtcXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWxheW91dC1jb250YWluZXIgPiBkaXYge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG59XFxuLnEtbGF5b3V0LWNvbnRhaW5lciA+IGRpdiA+IGRpdiB7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgbWF4LWhlaWdodDogMTAwJTtcXG59XFxuLnEtbGF5b3V0LWhlYWRlciB7XFxuICBib3gtc2hhZG93OiAwIDFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIDNweCA0cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtbGF5b3V0LWhlYWRlci1oaWRkZW4ge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMTAlKTtcXG59XFxuLnEtbGF5b3V0LWZvb3RlciB7XFxuICBib3gtc2hhZG93OiAwIC0xcHggOHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtM3B4IDRweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggM3B4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtbGF5b3V0LWZvb3Rlci1oaWRkZW4ge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDExMCUpO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICB6LWluZGV4OiAxMDAwO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLm9uLXRvcCB7XFxuICB6LWluZGV4OiAzMDAwO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLWRlbGltaXRlciB7XFxuICBib3gtc2hhZG93OiAwIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNXB4IDhweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDFweCAxNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbGVmdCB7XFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1yaWdodCB7XFxuICByaWdodDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXG59XFxuLnEtbGF5b3V0LFxcbi5xLWxheW91dC1oZWFkZXIsXFxuLnEtbGF5b3V0LWZvb3RlcixcXG4ucS1sYXlvdXQtcGFnZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5xLWxheW91dC1oZWFkZXIsXFxuLnEtbGF5b3V0LWZvb3RlciB7XFxuICB6LWluZGV4OiAyMDAwO1xcbn1cXG4ucS1sYXlvdXQtYmFja2Ryb3Age1xcbiAgei1pbmRleDogMjk5OSAhaW1wb3J0YW50O1xcbiAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtY29sb3I7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbWluaSB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLXNpZGUge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtbWluaS1kcmF3ZXItaGlkZSxcXG4ucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtY29sbGFwc2libGUtaW5uZXIgPiBkaXY6bGFzdC1vZi10eXBlLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1saXN0LWhlYWRlcixcXG4ucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtaXRlbS1tYWluLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLXNpZGUtcmlnaHQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1ub3JtYWwgLnEtbWluaS1kcmF3ZXItb25seSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW1vYmlsZSAucS1taW5pLWRyYXdlci1vbmx5LFxcbi5xLWxheW91dC1kcmF3ZXItbW9iaWxlIC5xLW1pbmktZHJhd2VyLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1vcGVuZXIge1xcbiAgei1pbmRleDogMjAwMTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxNXB4O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLnEtcGFnZS1zdGlja3ktc2hyaW5rIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS1wYWdlLXN0aWNreS1zaHJpbmsgPiBzcGFuIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nIC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMiksXFxuYm9keS5xLWlvcy1zdGF0dXNiYXItcGFkZGluZyAucS1sYXlvdXQgLnEtbGF5b3V0LWhlYWRlciA+IC5xLXRhYnM6bnRoLWNoaWxkKDIpIC5xLXRhYnMtaGVhZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nIC5xLWxheW91dCAucS1sYXlvdXQtZHJhd2VyLnRvcC1wYWRkaW5nLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmcgLm1vZGFsOm5vdCgubWluaW1pemVkKSAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMSkge1xcbiAgcGFkZGluZy10b3A6IDIwcHg7XFxuICBtaW4taGVpZ2h0OiA3MHB4O1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMiksXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1sYXlvdXQgLnEtbGF5b3V0LWhlYWRlciA+IC5xLXRhYnM6bnRoLWNoaWxkKDIpIC5xLXRhYnMtaGVhZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZHJhd2VyLnRvcC1wYWRkaW5nLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLm1vZGFsOm5vdCgubWluaW1pemVkKSAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMSkge1xcbiAgcGFkZGluZy10b3A6IGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKTtcXG59XFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1sYXlvdXQgLnEtbGF5b3V0LWZvb3RlciA+IC5xLXRvb2xiYXI6bGFzdC1jaGlsZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZm9vdGVyID4gLnEtdGFiczpsYXN0LWNoaWxkIC5xLXRhYnMtaGVhZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZHJhd2VyLnRvcC1wYWRkaW5nLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLm1vZGFsOm5vdCgubWluaW1pemVkKSAucS1sYXlvdXQtZm9vdGVyID4gLnEtdG9vbGJhcjpsYXN0LWNoaWxkIHtcXG4gIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XFxuICBtaW4taGVpZ2h0OiA3MHB4O1xcbn1cXG4ucS1sYXlvdXQtYW5pbWF0ZSAucS1sYXlvdXQtdHJhbnNpdGlvbiB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xMnMgZWFzZS1pbiAhaW1wb3J0YW50O1xcbn1cXG4ucS1ib2R5LWRyYXdlci10b2dnbGUge1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuICFpbXBvcnRhbnQ7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLmxheW91dC1wYWRkaW5nIHtcXG4gICAgcGFkZGluZzogMS41cmVtIDAuNXJlbTtcXG4gIH1cXG4gIC5sYXlvdXQtcGFkZGluZy5ob3Jpem9udGFsIHtcXG4gICAgcGFkZGluZzogMCAwLjVyZW07XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gMnJlbTtcXG4gICAgbWFyZ2luOiBhdXRvO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDJyZW07XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xcbiAgLmxheW91dC1wYWRkaW5nIHtcXG4gICAgcGFkZGluZzogMi41cmVtIDNyZW07XFxuICAgIG1hcmdpbjogYXV0bztcXG4gIH1cXG4gIC5sYXlvdXQtcGFkZGluZy5ob3Jpem9udGFsIHtcXG4gICAgcGFkZGluZzogMCAzcmVtO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAzcmVtIDRyZW07XFxuICAgIG1hcmdpbjogYXV0bztcXG4gIH1cXG4gIC5sYXlvdXQtcGFkZGluZy5ob3Jpem9udGFsIHtcXG4gICAgcGFkZGluZzogMCA0cmVtO1xcbiAgfVxcbn1cXG4ucS1pdGVtLXN0YW1wIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuOHJlbTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBtYXJnaW46IDAuM3JlbSAwO1xcbn1cXG4ucS1pdGVtLXNpZGUge1xcbiAgY29sb3I6ICM3MzczNzM7XFxuICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgICAgZmxleDogMCAwIGF1dG87XFxuICBtaW4td2lkdGg6IDM4cHg7XFxufVxcbi5xLWl0ZW0tc2lkZS1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnEtaXRlbS1hdmF0YXIsXFxuLnEtaXRlbS1hdmF0YXIgaW1nIHtcXG4gIHdpZHRoOiAzOHB4O1xcbiAgaGVpZ2h0OiAzOHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4ucS1pdGVtLWxldHRlcixcXG4ucS1pdGVtLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1pdGVtLWludmVydGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZDogIzczNzM3MztcXG4gIGhlaWdodDogMzhweDtcXG4gIHdpZHRoOiAzOHB4O1xcbn1cXG4ucS1pdGVtLWludmVydGVkLFxcbi5xLWl0ZW0taW52ZXJ0ZWQgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDIwcHg7XFxufVxcbi5xLWl0ZW0tbWFpbiB7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxuICBtaW4td2lkdGg6IDA7XFxufVxcbi5xLWl0ZW0tbWFpbi1pbnNldCB7XFxuICBtYXJnaW4tbGVmdDogNDhweDtcXG59XFxuLnEtaXRlbS1sYWJlbCB7XFxuICBsaW5lLWhlaWdodDogMS4yO1xcbn1cXG4ucS1pdGVtLWxhYmVsID4gc3BhbiB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnEtaXRlbS1zdWJsYWJlbCB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgbWFyZ2luLXRvcDogMC4ycmVtO1xcbn1cXG4ucS1pdGVtLXN1YmxhYmVsID4gc3BhbiB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG4ucS1pdGVtLXNlY3Rpb24gKyAucS1pdGVtLXNlY3Rpb24ge1xcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XFxufVxcbi5xLWl0ZW0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbiAgbWluLWhlaWdodDogNDBweDtcXG59XFxuLnEtaXRlbS5hY3RpdmUsXFxuLnEtaXRlbS5yb3V0ZXItbGluay1hY3RpdmUsXFxuLnEtaXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDE4OSwxODksMTg5LDAuNCk7XFxufVxcbi5xLWl0ZW06Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtaXRlbS1pbWFnZSB7XFxuICBtaW4td2lkdGg6IDExNHB4O1xcbiAgbWF4LXdpZHRoOiAxMTRweDtcXG4gIG1heC1oZWlnaHQ6IDExNHB4O1xcbn1cXG4ucS1saXN0LW11bHRpbGluZSA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1tdWx0aWxpbmUge1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG4ucS1saXN0LWxpbmsgPiAucS1pdGVtLFxcbi5xLWl0ZW0tbGluayB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLWxpc3QtaGlnaGxpZ2h0ID4gLnEtaXRlbTpob3ZlcixcXG4ucS1pdGVtLWhpZ2hsaWdodDpob3ZlcixcXG4ucS1saXN0LWxpbmsgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWl0ZW0tbGluazpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDE4OSwxODksMTg5LDAuNSk7XFxufVxcbi5xLWxpc3Qtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb24sXFxuLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tc2VwYXJhdG9yIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1saXN0LWluc2V0LXNlcGFyYXRvciA+IC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWRpdmlzaW9uOmFmdGVyLFxcbi5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWluc2V0LXNlcGFyYXRvcjphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogNjRweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZDogI2UwZTBlMDtcXG59XFxuLnEtbGlzdC1kZW5zZSA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1kZW5zZSB7XFxuICBwYWRkaW5nOiAzcHggMTZweDtcXG4gIG1pbi1oZWlnaHQ6IDhweDtcXG59XFxuLnEtbGlzdC1zcGFyc2UgPiAucS1pdGVtLFxcbi5xLWl0ZW0tc3BhcnNlIHtcXG4gIHBhZGRpbmc6IDIyLjRweCAxNnB4O1xcbiAgbWluLWhlaWdodDogNTZweDtcXG59XFxuLnEtbGlzdC1zdHJpcGVkID4gLnEtaXRlbTpudGgtY2hpbGQoZXZlbikge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODksMTg5LDE4OSwwLjY1KTtcXG59XFxuLnEtbGlzdC1zdHJpcGVkLW9kZCA+IC5xLWl0ZW06bnRoLWNoaWxkKG9kZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODksMTg5LDE4OSwwLjY1KTtcXG59XFxuLnEtbGlzdCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgcGFkZGluZzogOHB4IDA7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudCB7XFxuICBtYXJnaW46IDhweCAwO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBib3JkZXI6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwO1xcbn1cXG4ucS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnQ6bGFzdC1jaGlsZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnQgKyAucS1saXN0LWhlYWRlciB7XFxuICBtYXJnaW4tdG9wOiAtOHB4O1xcbn1cXG4ucS1pdGVtLXNlcGFyYXRvci1pbnNldC1jb21wb25lbnQge1xcbiAgbWFyZ2luLWxlZnQ6IDY0cHg7XFxufVxcbi5xLWxpc3QtaGVhZGVyIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIHBhZGRpbmc6IDE1cHggMTZweDtcXG59XFxuLnEtbGlzdC1oZWFkZXItaW5zZXQge1xcbiAgcGFkZGluZy1sZWZ0OiA2NHB4O1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1zaWRlLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLXNpZGUge1xcbiAgY29sb3I6ICNiYmI7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWludmVydGVkLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLWludmVydGVkIHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgYmFja2dyb3VuZDogI2JiYjtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tbGFiZWwgPiBzcGFuLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLWxhYmVsID4gc3BhbixcXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1zdWJsYWJlbCxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbS1zdWJsYWJlbCB7XFxuICBjb2xvcjogI2JkYmRiZDtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0sXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLmFjdGl2ZSxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbS5hY3RpdmUsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0ucm91dGVyLWxpbmstYWN0aXZlLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLnJvdXRlci1saW5rLWFjdGl2ZSxcXG4ucS1saXN0LWRhcmsgLnEtaXRlbTpmb2N1cyxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDExNywxMTcsMTE3LDAuMik7XFxufVxcbi5xLWxpc3QtZGFyayB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMzIpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LXNlcGFyYXRvciA+IC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWRpdmlzaW9uLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1zZXBhcmF0b3Ige1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3QtaW5zZXQtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb246YWZ0ZXIsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWluc2V0LXNlcGFyYXRvcjphZnRlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMzIpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LXN0cmlwZWQgPiAucS1pdGVtOm50aC1jaGlsZChldmVuKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExNywxMTcsMTE3LDAuNDUpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LXN0cmlwZWQtb2RkID4gLnEtaXRlbTpudGgtY2hpbGQob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExNywxMTcsMTE3LDAuNDUpO1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1zZXBhcmF0b3ItY29tcG9uZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyayAucS1saXN0LWhlYWRlciB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjY0KTtcXG59XFxuLnEtbGlzdC1kYXJrLnEtbGlzdC1oaWdobGlnaHQgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWhpZ2hsaWdodDpob3ZlcixcXG4ucS1saXN0LWRhcmsucS1saXN0LWxpbmsgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWxpbms6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgxMTcsMTE3LDExNywwLjMpO1xcbn1cXG5ib2R5LndpdGgtbG9hZGluZyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1sb2FkaW5nIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40KTtcXG59XFxuLnEtbG9hZGluZyA+IGRpdiB7XFxuICBtYXJnaW46IDQwcHggMjBweCAwO1xcbiAgbWF4LXdpZHRoOiA0NTBweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtc2hhZG93OiAwIDAgN3B4ICMwMDA7XFxufVxcbi5tb2RhbC1iYWNrZHJvcCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNCk7XFxufVxcbi5tb2RhbC5tYXhpbWl6ZWQgLm1vZGFsLWJhY2tkcm9wIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICB3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xcbiAgbWluLXdpZHRoOiAyODBweDtcXG4gIG1heC1oZWlnaHQ6IDgwdmg7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5tb2RhbCB7XFxuICB6LWluZGV4OiA1MDAwO1xcbn1cXG4ubW9kYWwubWluaW1pemVkIC5tb2RhbC1jb250ZW50IHtcXG4gIG1heC13aWR0aDogODB2dztcXG4gIG1heC1oZWlnaHQ6IDgwdmg7XFxufVxcbi5tb2RhbC5tYXhpbWl6ZWQgLm1vZGFsLWNvbnRlbnQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuLm1vZGFsLm1heGltaXplZCAubW9kYWwtY29udGVudCAucS1sYXlvdXQtY29udGFpbmVyIHtcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XFxufVxcbi5xLW1vZGFsLWVudGVyLFxcbi5xLW1vZGFsLWxlYXZlLWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5tb2RhbDpub3QoLm1heGltaXplZCkucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcXG4gIH1cXG4gIC5tb2RhbDpub3QoLm1heGltaXplZCkucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XFxuICB9XFxuICAubW9kYWwubWF4aW1pemVkLnEtbW9kYWwtZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuICAubW9kYWwubWF4aW1pemVkLnEtbW9kYWwtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwJSk7XFxuICB9XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtcmVzcG9uc2l2ZS1tb2RhbCB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxuICAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5tb2RhbC1jb250ZW50IHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgfVxcbiAgLm1vZGFsOm5vdCgubWluaW1pemVkKSAubW9kYWwtY29udGVudCAucS1sYXlvdXQtY29udGFpbmVyIHtcXG4gICAgbWluLWhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tb2RhbDpub3QoLm1pbmltaXplZCkucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCxcXG4gIC5tb2RhbDpub3QoLm1pbmltaXplZCkucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzAlKTtcXG4gIH1cXG4gIC5tb2RhbC5taW5pbWl6ZWQucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcXG4gIH1cXG4gIC5tb2RhbC5taW5pbWl6ZWQucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XFxuICB9XFxufVxcbi5xLW1heGltaXplZC1tb2RhbCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ubW9kYWwsXFxuLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XFxufVxcbi5tb2RhbC1oZWFkZXIge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHBhZGRpbmc6IDI0cHggMjRweCAxMHB4IDI0cHg7XFxuICBmb250LXNpemU6IDEuNnJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi5tb2RhbC1ib2R5IHtcXG4gIHBhZGRpbmc6IDEwcHggMjRweDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7XFxufVxcbi5zbWFsbC1tb2RhbC1zY3JvbGwsXFxuLm1vZGFsLXNjcm9sbCxcXG4uYmlnLW1vZGFsLXNjcm9sbCB7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxufVxcbi5zbWFsbC1tb2RhbC1zY3JvbGwge1xcbiAgbWF4LWhlaWdodDogMTU2cHg7XFxufVxcbi5tb2RhbC1zY3JvbGwge1xcbiAgbWF4LWhlaWdodDogMjQwcHg7XFxufVxcbi5iaWctbW9kYWwtc2Nyb2xsIHtcXG4gIG1heC1oZWlnaHQ6IDQ4MHB4O1xcbn1cXG4ubW9kYWwtYnV0dG9ucyB7XFxuICBwYWRkaW5nOiAyMnB4IDhweCA4cHg7XFxuICAtbXMtZmxleC1wYWNrOiBlbmQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIGNvbG9yOiAjMDI3YmUzO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxufVxcbi5tb2RhbC1idXR0b25zLnJvdyAucS1idG4gKyAucS1idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLm1vZGFsLWJ1dHRvbnMuY29sdW1uIHtcXG4gIC1tcy1mbGV4LWFsaWduOiBlbmQ7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG4ubW9kYWwtYnV0dG9ucy5jb2x1bW4gLnEtYnRuICsgLnEtYnRuIHtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLnEtbW9kYWwtYm90dG9tLWVudGVyLFxcbi5xLW1vZGFsLWJvdHRvbS1sZWF2ZS1hY3RpdmUge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtbW9kYWwtYm90dG9tLWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLWJvdHRvbS1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwJSk7XFxufVxcbi5xLW1vZGFsLXRvcC1lbnRlcixcXG4ucS1tb2RhbC10b3AtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLW1vZGFsLXRvcC1lbnRlciAubW9kYWwtY29udGVudCxcXG4ucS1tb2RhbC10b3AtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMzAlKTtcXG59XFxuLnEtbW9kYWwtcmlnaHQtZW50ZXIsXFxuLnEtbW9kYWwtcmlnaHQtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLW1vZGFsLXJpZ2h0LWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLXJpZ2h0LWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzAlKTtcXG59XFxuLnEtbW9kYWwtbGVmdC1lbnRlcixcXG4ucS1tb2RhbC1sZWZ0LWxlYXZlLWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1tb2RhbC1sZWZ0LWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLWxlZnQtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzAlKTtcXG59XFxuLnEtbm90aWZpY2F0aW9ucyA+IGRpdiB7XFxuICB6LWluZGV4OiA5NTAwO1xcbn1cXG4ucS1ub3RpZmljYXRpb24tbGlzdCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0LWNlbnRlciB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0LXRvcCB7XFxuICB0b3A6IDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0LWJvdHRvbSB7XFxuICBib3R0b206IDA7XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtY2VudGVyLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtdG9wIHtcXG4gIHRvcDogZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLW5vdGlmaWNhdGlvbi1saXN0LWNlbnRlcixcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLW5vdGlmaWNhdGlvbi1saXN0LWJvdHRvbSB7XFxuICBib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcXG59XFxuLnEtbm90aWZpY2F0aW9uIHtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW46IDEwcHggMTBweCAwO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMXM7XFxuICB6LWluZGV4OiA5NTAwO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlZnQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWZ0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi10b3AtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tdG9wLXJpZ2h0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi10b3AtcmlnaHQtbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTBweCk7XFxuICB6LWluZGV4OiA5NDk5O1xcbn1cXG4ucS1ub3RpZmljYXRpb24tbGVmdC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tbGVmdC1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tY2VudGVyLWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItbGVhdmUtdG8sXFxuLnEtbm90aWZpY2F0aW9uLXJpZ2h0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1yaWdodC1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1MHB4KTtcXG4gIHotaW5kZXg6IDk0OTk7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi10b3AtbGVmdC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1yaWdodC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWxlZnQtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1yaWdodC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0LWxlYXZlLWFjdGl2ZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB6LWluZGV4OiA5NDk5O1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi10b3AtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItbGVhdmUtYWN0aXZlIHtcXG4gIHRvcDogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0LWxlYXZlLWFjdGl2ZSB7XFxuICBib3R0b206IDA7XFxufVxcbi5xLW9wdGlvbi1pbm5lciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBsaW5lLWhlaWdodDogMDtcXG59XFxuLnEtb3B0aW9uLWlubmVyICsgLnEtb3B0aW9uLWxhYmVsIHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi5xLW9wdGlvbiB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1vcHRpb24gaW5wdXQge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4ucS1vcHRpb24ucmV2ZXJzZSAucS1vcHRpb24taW5uZXIgKyAucS1vcHRpb24tbGFiZWwge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuLnEtb3B0aW9uLWdyb3VwLWlubGluZS1vcHRzID4gZGl2IHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG4ucS1vcHRpb24tZ3JvdXAge1xcbiAgbWFyZ2luOiAtNXB4O1xcbiAgcGFkZGluZzogNXB4IDA7XFxufVxcbi5xLXBhZ2luYXRpb24gaW5wdXQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS1wYWdpbmF0aW9uIC5xLWJ0biB7XFxuICBwYWRkaW5nOiAwIDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1wYWdpbmF0aW9uIC5xLWJ0bi5kaXNhYmxlZCB7XFxuICBjb2xvcjogIzc3NztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWZhZGVkKTtcXG59XFxuLnEtcGFyYWxsYXgge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtcGFyYWxsYXgtbWVkaWEgPiBpbWcsXFxuLnEtcGFyYWxsYXgtbWVkaWEgPiB2aWRlbyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiA1MCU7XFxuICBib3R0b206IDA7XFxuICBtaW4td2lkdGg6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiAxMDAlO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG59XFxuLnEtcGFyYWxsYXgtdGV4dCB7XFxuICB0ZXh0LXNoYWRvdzogMCAwIDVweCAjZmZmO1xcbn1cXG4ucS1wb3BvdmVyIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIHotaW5kZXg6IDgwMDA7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgbWF4LXdpZHRoOiAxMDB2dztcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLXBvcG92ZXIgPiAucS1saXN0Om9ubHktY2hpbGQge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5ib2R5IGRpdiAucS1wb3BvdmVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXByb2dyZXNzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogNXB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbCB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmFuaW1hdGUge1xcbiAgYW5pbWF0aW9uOiBxLXByb2dyZXNzLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbDpub3QoLmluZGV0ZXJtaW5hdGUpIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgbGluZWFyO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbC5pbmRldGVybWluYXRlOmJlZm9yZSxcXG4ucS1wcm9ncmVzcy1tb2RlbC5pbmRldGVybWluYXRlOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYmFja2dyb3VuZDogaW5oZXJpdDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWxsLWNoYW5nZTogbGVmdCwgcmlnaHQ7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YmVmb3JlIHtcXG4gIGFuaW1hdGlvbjogcS1wcm9ncmVzcy1pbmRldGVybWluYXRlIDIuMXMgY3ViaWMtYmV6aWVyKDAuNjUsIDAuODE1LCAwLjczNSwgMC4zOTUpIGluZmluaXRlO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbC5pbmRldGVybWluYXRlOmFmdGVyIHtcXG4gIGFuaW1hdGlvbjogcS1wcm9ncmVzcy1pbmRldGVybWluYXRlLXNob3J0IDIuMXMgY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKSBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbi1kZWxheTogMS4xNXM7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLnN0cmlwZSxcXG4ucS1wcm9ncmVzcy1tb2RlbC5zdHJpcGU6YmVmb3JlLFxcbi5xLXByb2dyZXNzLW1vZGVsLnN0cmlwZTphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHggIWltcG9ydGFudDtcXG59XFxuLnEtcHJvZ3Jlc3MtdHJhY2sge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgbGluZWFyO1xcbn1cXG4ucS1wcm9ncmVzcy1idWZmZXIge1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBoZWlnaHQ6IDRweDtcXG4gIHJpZ2h0OiAwO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxuICAtd2Via2l0LW1hc2s6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJajgrQ2p4emRtY2dkMmxrZEdnOUlqRXlJaUJvWldsbmFIUTlJalFpSUhacFpYZFFiM0owUFNJd0lEQWdNVElnTkNJZ2RtVnljMmx2YmowaU1TNHhJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lQZ29nSUR4bGJHeHBjSE5sSUdONFBTSXlJaUJqZVQwaU1pSWdjbmc5SWpJaUlISjVQU0l5SWo0S0lDQWdJRHhoYm1sdFlYUmxJR0YwZEhKcFluVjBaVTVoYldVOUltTjRJaUJtY205dFBTSXlJaUIwYnowaUxURXdJaUJrZFhJOUlqQXVObk1pSUhKbGNHVmhkRU52ZFc1MFBTSnBibVJsWm1sdWFYUmxJaUF2UGdvZ0lEd3ZaV3hzYVhCelpUNEtJQ0E4Wld4c2FYQnpaU0JqZUQwaU1UUWlJR041UFNJeUlpQnllRDBpTWlJZ2NuazlJaklpSUdOc1lYTnpQU0pzYjJGa1pYSWlQZ29nSUNBZ1BHRnVhVzFoZEdVZ1lYUjBjbWxpZFhSbFRtRnRaVDBpWTNnaUlHWnliMjA5SWpFMElpQjBiejBpTWlJZ1pIVnlQU0l3TGpaeklpQnlaWEJsWVhSRGIzVnVkRDBpYVc1a1pXWnBibWwwWlNJZ0x6NEtJQ0E4TDJWc2JHbHdjMlUrQ2p3dmMzWm5QZ289XFxcIik7XFxuICAgICAgICAgIG1hc2s6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJajgrQ2p4emRtY2dkMmxrZEdnOUlqRXlJaUJvWldsbmFIUTlJalFpSUhacFpYZFFiM0owUFNJd0lEQWdNVElnTkNJZ2RtVnljMmx2YmowaU1TNHhJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lQZ29nSUR4bGJHeHBjSE5sSUdONFBTSXlJaUJqZVQwaU1pSWdjbmc5SWpJaUlISjVQU0l5SWo0S0lDQWdJRHhoYm1sdFlYUmxJR0YwZEhKcFluVjBaVTVoYldVOUltTjRJaUJtY205dFBTSXlJaUIwYnowaUxURXdJaUJrZFhJOUlqQXVObk1pSUhKbGNHVmhkRU52ZFc1MFBTSnBibVJsWm1sdWFYUmxJaUF2UGdvZ0lEd3ZaV3hzYVhCelpUNEtJQ0E4Wld4c2FYQnpaU0JqZUQwaU1UUWlJR041UFNJeUlpQnllRDBpTWlJZ2NuazlJaklpSUdOc1lYTnpQU0pzYjJGa1pYSWlQZ29nSUNBZ1BHRnVhVzFoZEdVZ1lYUjBjbWxpZFhSbFRtRnRaVDBpWTNnaUlHWnliMjA5SWpFMElpQjBiejBpTWlJZ1pIVnlQU0l3TGpaeklpQnlaWEJsWVhSRGIzVnVkRDBpYVc1a1pXWnBibWwwWlNJZ0x6NEtJQ0E4TDJWc2JHbHdjMlUrQ2p3dmMzWm5QZ289XFxcIik7XFxufVxcbi5xLXByb2dyZXNzLXRyYWNrLFxcbi5xLXByb2dyZXNzLWJ1ZmZlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5wdWxsLXRvLXJlZnJlc2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucHVsbC10by1yZWZyZXNoLW1lc3NhZ2Uge1xcbiAgaGVpZ2h0OiA2NXB4O1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbn1cXG4ucHVsbC10by1yZWZyZXNoLW1lc3NhZ2UgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDJyZW07XFxuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcXG59XFxuLnEtcmFkaW8tdW5jaGVja2VkLFxcbi5xLXJhZGlvLWNoZWNrZWQsXFxuLnEtcmFkaW8gLnEtb3B0aW9uLWlubmVyIHtcXG4gIGhlaWdodDogMjFweDtcXG4gIHdpZHRoOiAyMXB4O1xcbiAgbWluLXdpZHRoOiAyMXB4O1xcbiAgZm9udC1zaXplOiAyMXB4O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNDVzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLXJhZGlvLXVuY2hlY2tlZCB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1yYWRpby1jaGVja2VkIHtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCUgMDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxufVxcbi5xLXJhZGlvIC5xLW9wdGlvbi1pbm5lci5hY3RpdmUgLnEtcmFkaW8tdW5jaGVja2VkIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLXJhZGlvIC5xLW9wdGlvbi1pbm5lci5hY3RpdmUgLnEtcmFkaW8tY2hlY2tlZCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbn1cXG4ucS1yYXRpbmcge1xcbiAgY29sb3I6ICNmZmViM2I7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1yYXRpbmcgc3BhbiB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGRpc3BsYXk6IGluaGVyaXQ7XFxufVxcbi5xLXJhdGluZyBpIHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxuICB0ZXh0LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xMiksIDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMjQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgb3BhY2l0eTogMC40O1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG59XFxuLnEtcmF0aW5nIGkuaG92ZXJlZCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7XFxufVxcbi5xLXJhdGluZyBpLmV4c2VsZWN0ZWQge1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG4ucS1yYXRpbmcgaS5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtcmF0aW5nIGkgKyBpIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjNyZW07XFxufVxcbi5xLXJhdGluZy5lZGl0YWJsZSBpIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtcmF0aW5nOm5vdCguZWRpdGFibGUpIHNwYW4sXFxuLnEtcmF0aW5nIGkge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtc2Nyb2xsYXJlYS10aHVtYiB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICByaWdodDogMDtcXG4gIG9wYWNpdHk6IDAuMjtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcztcXG59XFxuLnEtc2Nyb2xsYXJlYS10aHVtYi5pbnZpc2libGUtdGh1bWIge1xcbiAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuLnEtc2Nyb2xsYXJlYS10aHVtYjphY3RpdmUge1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS10b29sYmFyIC5xLXNlYXJjaCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpO1xcbn1cXG4ucS1zbGlkZXItdHJhY2ssXFxuLnEtc2xpZGVyLW1hcmsge1xcbiAgb3BhY2l0eTogMC40O1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1zbGlkZXItdHJhY2sge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgaGVpZ2h0OiAycHg7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrOm5vdCguZHJhZ2dpbmcpIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XFxufVxcbi5xLXNsaWRlci10cmFjay5hY3RpdmUtdHJhY2sge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrLnRyYWNrLWRyYWdnYWJsZS5kcmFnZ2luZyB7XFxuICBoZWlnaHQ6IDRweDtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGVhc2U7XFxufVxcbi5xLXNsaWRlci10cmFjay5oYW5kbGUtYXQtbWluaW11bSB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtc2xpZGVyLW1hcmsge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMnB4O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUtY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG1hcmdpbi1sZWZ0OiA2cHg7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG59XFxuLnEtc2xpZGVyLWxhYmVsIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDZweDtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKSBzY2FsZSgwKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzO1xcbiAgcGFkZGluZzogMnB4IDRweDtcXG59XFxuLnEtc2xpZGVyLWxhYmVsLmxhYmVsLWFsd2F5cyB7XFxuICBvcGFjaXR5OiAxO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTEzOSUpIHNjYWxlKDEpO1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNTAlLCAtNTAlLCAwKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XFxuICB3aWR0aDogMTJweDtcXG4gIGhlaWdodDogMTJweDtcXG4gIG91dGxpbmU6IDA7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUgLnEtY2hpcCB7XFxuICBtYXgtd2lkdGg6IHVuc2V0O1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlLmRyYWdnaW5nIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTUwJSwgLTUwJSwgMCkgc2NhbGUoMS4zKTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlO1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlLmRyYWdnaW5nIC5xLXNsaWRlci1sYWJlbCB7XFxuICBvcGFjaXR5OiAxO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTEzOSUpIHNjYWxlKDEpO1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlLmhhbmRsZS1hdC1taW5pbXVtIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuaGFuZGxlLWF0LW1pbmltdW06YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBib3JkZXI6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlci1yaW5nIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTUwJTtcXG4gIGxlZnQ6IC01MCU7XFxuICB3aWR0aDogMjAwJTtcXG4gIGhlaWdodDogMjAwJTtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbjtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyOm5vdCguZGlzYWJsZWQpOm5vdCgucmVhZG9ubHkpIC5xLXNsaWRlci1oYW5kbGUuZHJhZ2dpbmcgLnEtc2xpZGVyLXJpbmcsXFxuLnEtc2xpZGVyOm5vdCguZGlzYWJsZWQpOm5vdCgucmVhZG9ubHkpIC5xLXNsaWRlci1oYW5kbGU6Zm9jdXMgLnEtc2xpZGVyLXJpbmcsXFxuYm9keS5kZXNrdG9wIC5xLXNsaWRlcjpub3QoLmRpc2FibGVkKTpub3QoLnJlYWRvbmx5KTpob3ZlciAucS1zbGlkZXItcmluZyB7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbn1cXG4ucS1zbGlkZXIuZGlzYWJsZWQgLnEtc2xpZGVyLWhhbmRsZSB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xcbn1cXG4ucS1zbGlkZXIuZGlzYWJsZWQgLnEtc2xpZGVyLWhhbmRsZS5oYW5kbGUtYXQtbWluaW11bSB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlciB7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGNvbG9yOiAjMDI3YmUzO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXNsaWRlci5sYWJlbC1hbHdheXMsXFxuLnEtc2xpZGVyLndpdGgtcGFkZGluZyB7XFxuICBwYWRkaW5nOiAzNnB4IDAgOHB4O1xcbiAgaGVpZ2h0OiA2NHB4O1xcbn1cXG4ucS1zbGlkZXIuaGFzLWVycm9yIHtcXG4gIGNvbG9yOiAjZGIyODI4O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbn1cXG4ucS1zbGlkZXIuaGFzLXdhcm5pbmcge1xcbiAgY29sb3I6ICNmMmMwMzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nKTtcXG59XFxuLnEtc3Bpbm5lciB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1zcGlubmVyLW1hdCB7XFxuICBhbmltYXRpb246IHEtc3BpbiAycyBsaW5lYXIgaW5maW5pdGUgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXIgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtc3Bpbm5lci1tYXQgLnBhdGgge1xcbiAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwO1xcbiAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICBzdHJva2UtbGluZWNhcDogcm91bmQ7XFxuICBhbmltYXRpb246IHEtbWF0LWRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1zdGVwcGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1zdGVwcGVyLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG59XFxuLnEtc3RlcHBlci1zdWJ0aXRsZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXN0ZXBwZXItZG90IHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXN0ZXBwZXItZG90IHNwYW4ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLXN0ZXBwZXItdGFiIHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjI4cywgYmFja2dyb3VuZCAwLjI4cztcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC13YWl0aW5nIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1zdGVwcGVyLXRhYi5zdGVwLXdhaXRpbmcgLnEtc3RlcHBlci1kb3Qge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC40Mik7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtbmF2aWdhdGlvbiB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS1zdGVwcGVyLXRhYi5zdGVwLWNvbG9yIHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtYWN0aXZlIC5xLXN0ZXBwZXItdGl0bGUge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC40Mik7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZXJyb3Ige1xcbiAgY29sb3I6ICNkYjI4Mjg7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZXJyb3IgLnEtc3RlcHBlci1kb3Qge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZXJyb3IgLnEtc3RlcHBlci1kb3Qgc3BhbiB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIge1xcbiAgbWluLWhlaWdodDogNzJweDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXI6bm90KC5hbHRlcm5hdGl2ZS1sYWJlbHMpIC5xLXN0ZXBwZXItdGFiIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXI6bm90KC5hbHRlcm5hdGl2ZS1sYWJlbHMpIC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXN0ZXBwZXItaGVhZGVyLmFsdGVybmF0aXZlLWxhYmVscyB7XFxuICBtaW4taGVpZ2h0OiAxMDRweDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItdGFiIHtcXG4gIHBhZGRpbmc6IDI0cHggMzJweDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItZG90IHtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItbGFiZWwge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1sYWJlbDpiZWZvcmUsXFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItbGFiZWw6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci1zdGVwLWNvbnRlbnQge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItdGFiIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZmlyc3QgLnEtc3RlcHBlci1kb3Q6YmVmb3JlLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGFzdCAucS1zdGVwcGVyLWxhYmVsOmFmdGVyLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGFzdCAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWxpbmU6YmVmb3JlLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGluZTphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGhlaWdodDogMXB4O1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1sYWJlbDphZnRlcixcXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIGxlZnQ6IDEwMCU7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWRvdDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICByaWdodDogMTAwJTtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLW5hdiB7XFxuICBtYXJnaW46IDAgMTZweCA4cHg7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItc3RlcCAucS1zdGVwcGVyLW5hdiB7XFxuICBtYXJnaW46IDE2cHggMCAwO1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLXN0ZXAgLnEtc3RlcHBlci1uYXYgPiBkaXYuY29sIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItc3RlcC1jb250ZW50ID4gLnEtc3RlcHBlci1zdGVwLWlubmVyIHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwge1xcbiAgcGFkZGluZzogOHB4IDAgMThweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItbmF2IHtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLW5hdiA+IGRpdi5jb2wge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci1zdGVwLWNvbnRlbnQgPiAucS1zdGVwcGVyLXN0ZXAtaW5uZXIge1xcbiAgcGFkZGluZzogMCAyNHB4IDI0cHggNDhweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItdGFiIHtcXG4gIHBhZGRpbmc6IDEycHggMTZweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItdGFiIC5xLXN0ZXBwZXItZG90OmJlZm9yZSxcXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiA1MCU7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWRvdDpiZWZvcmUge1xcbiAgYm90dG9tOiAxMDAlO1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgdG9wOiAxMDAlO1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogNHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1sYWJlbCAucS1zdGVwcGVyLXRpdGxlIHtcXG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIucS1zdGVwcGVyLWZpcnN0IC5xLXN0ZXBwZXItZG90OmJlZm9yZSxcXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIucS1zdGVwcGVyLWxhc3QgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXN0ZXBwZXItdGFiLnN0ZXAtbmF2aWdhdGlvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDUpO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5xLXN0ZXBwZXItaG9yaXpvbnRhbC5xLXN0ZXBwZXItY29udHJhY3RhYmxlID4gLnEtc3RlcHBlci1oZWFkZXIge1xcbiAgICBtaW4taGVpZ2h0OiA3MnB4O1xcbiAgfVxcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLXRhYiB7XFxuICAgIHBhZGRpbmc6IDI0cHggMDtcXG4gIH1cXG4gIC5xLXN0ZXBwZXItaG9yaXpvbnRhbC5xLXN0ZXBwZXItY29udHJhY3RhYmxlID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci10YWI6bm90KDpsYXN0LWNoaWxkKSAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucS1zdGVwcGVyLWhvcml6b250YWwucS1zdGVwcGVyLWNvbnRyYWN0YWJsZSA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZG90IHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWxhYmVsIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuLnEtdGFicyB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcbi5xLWxheW91dC1tYXJnaW5hbCAucS10YWJzIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcbi5xLXRhYnMtc2Nyb2xsZXIge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtdGFiLXBhbmUge1xcbiAgcGFkZGluZzogMTJweDtcXG59XFxuLnEtdGFicy1wYW5lczplbXB0eSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10YWJzLW5vcm1hbCAucS10YWItaWNvbixcXG4ucS10YWJzLW5vcm1hbCAucS10YWItbGFiZWwge1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG4ucS10YWIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcywgYmFja2dyb3VuZCAwLjNzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiA4cHggMTBweDtcXG4gIG1pbi1oZWlnaHQ6IDQ4cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG4ucS10YWIgLnEtdGFiLWljb24tcGFyZW50ICsgLnEtdGFiLWxhYmVsLXBhcmVudCB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxufVxcbi5xLXRhYiAucS1jaGlwIHtcXG4gIHRvcDogLThweDtcXG4gIHJpZ2h0OiAtMTBweDtcXG4gIGxlZnQ6IGF1dG87XFxuICBtaW4taGVpZ2h0OiBhdXRvO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCw2Nyw1NCwwLjc1KTtcXG59XFxuLnEtdGFiLmFjdGl2ZSAucS10YWItaWNvbixcXG4ucS10YWIuYWN0aXZlIC5xLXRhYi1sYWJlbCB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS10YWItbGFiZWwge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS10YWItaWNvbiB7XFxuICBmb250LXNpemU6IDI3cHg7XFxufVxcbi5xLXRhYi1mb2N1cy1oZWxwZXIge1xcbiAgei1pbmRleDogLTE7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS10YWItZm9jdXMtaGVscGVyOmZvY3VzIHtcXG4gIHotaW5kZXg6IHVuc2V0O1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgb3BhY2l0eTogMC4xO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5xLXRhYi5oaWRlLWljb24gLnEtdGFiLWljb24tcGFyZW50LFxcbiAgLnEtdGFiLmhpZGUtbGFiZWwgLnEtdGFiLWxhYmVsLXBhcmVudCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5xLXRhYi5oaWRlLWljb24gLnEtdGFiLWxhYmVsIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gIH1cXG4gIC5xLXRhYi1mdWxsLmhpZGUtbm9uZSAucS10YWItbGFiZWwtcGFyZW50IC5xLXRhYi1tZXRhIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucS10YWItZnVsbCAucS10YWItbGFiZWwtcGFyZW50IC5xLXRhYi1tZXRhIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAucS10YWJzLWhlYWQ6bm90KC5zY3JvbGxhYmxlKSAucS10YWJzLXNjcm9sbGVyLFxcbiAgLnEtdGFicy1oZWFkOm5vdCguc2Nyb2xsYWJsZSkgLnEtdGFiIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgICAgZmxleDogMSAxIGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLnEtdGFiIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAyNXB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAyNXB4O1xcbiAgfVxcbiAgLnEtbGF5b3V0LW1hcmdpbmFsIC5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxMnB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xcbiAgfVxcbn1cXG4ucS10YWJzLWhlYWQge1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBmb250LXNpemU6IDAuOTVyZW07XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xOHMgZWFzZS1pbiwgYm94LXNoYWRvdyAwLjE4cyBlYXNlLWluO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS10YWJzLWhlYWQ6bm90KC5zY3JvbGxhYmxlKSAucS10YWJzLWxlZnQtc2Nyb2xsLFxcbi5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIC5xLXRhYnMtcmlnaHQtc2Nyb2xsIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbCxcXG4ucS10YWJzLXJpZ2h0LXNjcm9sbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRvcDogMDtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbCAucS1pY29uLFxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsIC5xLWljb24ge1xcbiAgdGV4dC1zaGFkb3c6IDAgMCAxMHB4ICMwMDA7XFxuICBmb250LXNpemU6IDMyLjRweDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbC5kaXNhYmxlZCxcXG4ucS10YWJzLXJpZ2h0LXNjcm9sbC5kaXNhYmxlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10YWJzOmhvdmVyIC5xLXRhYnMtbGVmdC1zY3JvbGwgLnEtaWNvbixcXG4ucS10YWJzOmhvdmVyIC5xLXRhYnMtcmlnaHQtc2Nyb2xsIC5xLWljb24ge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbCB7XFxuICBsZWZ0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsIHtcXG4gIHJpZ2h0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXRhYnMtYWxpZ24tanVzdGlmeSAucS10YWJzLXNjcm9sbGVyLFxcbi5xLXRhYnMtYWxpZ24tanVzdGlmeSAucS10YWIge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xcbn1cXG4ucS10YWJzLWFsaWduLWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5xLXRhYnMtYWxpZ24tcmlnaHQge1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcbi5xLXRhYnMtYmFyIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci13aWR0aDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG59XFxuLnEtdGFicy1nbG9iYWwtYmFyIHtcXG4gIHdpZHRoOiAxcHg7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1cztcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtcXG59XFxuLnEtdGFicy1nbG9iYWwtYmFyLmNvbnRyYWN0IHtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzO1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xcbn1cXG4ucS10YWJzLWdsb2JhbC1iYXItY29udGFpbmVyLmhpZ2hsaWdodCA+IC5xLXRhYnMtZ2xvYmFsLWJhciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10YWJzLXR3by1saW5lcyAucS10YWIge1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG59XFxuLnEtdGFicy10d28tbGluZXMgLnEtdGFiIC5xLXRhYi1sYWJlbCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XFxufVxcbi5xLXRhYnMtcG9zaXRpb24tdG9wID4gLnEtdGFicy1oZWFkIC5xLXRhYnMtYmFyIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcXG59XFxuLnEtdGFicy1wb3NpdGlvbi1ib3R0b20gPiAucS10YWJzLWhlYWQgLnEtdGFicy1iYXIge1xcbiAgdG9wOiAwO1xcbiAgYm9yZGVyLXRvcC13aWR0aDogMnB4O1xcbn1cXG4ucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYnMtcGFuZXMge1xcbiAgLW1zLWZsZXgtb3JkZXI6IC0xO1xcbiAgICAgIG9yZGVyOiAtMTtcXG59XFxuLnEtdGFicy1pbnZlcnRlZCAucS10YWJzLWhlYWQge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG59XFxuLnEtdGFicy1pbnZlcnRlZC5xLXRhYnMtcG9zaXRpb24tdG9wID4gLnEtdGFicy1wYW5lcyB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG4ucS10YWJzLWludmVydGVkLnEtdGFicy1wb3NpdGlvbi10b3AgPiAucS10YWItcGFuZSB7XFxuICBib3JkZXItdG9wOiAwO1xcbn1cXG4ucS10YWJzLWludmVydGVkLnEtdGFicy1wb3NpdGlvbi1ib3R0b20gPiAucS10YWJzLXBhbmVzIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7XFxufVxcbi5xLXRhYnMtaW52ZXJ0ZWQucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYi1wYW5lIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcbmJvZHkubW9iaWxlIC5xLXRhYnMtc2Nyb2xsZXIge1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxufVxcbmJvZHkuZGVza3RvcCAucS10YWI6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG9wYWNpdHk6IDAuMTtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRhYjpob3ZlcjpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxufVxcbi5xLXRhYmxlLWNvbnRhaW5lciB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtdGFibGUtY29udGFpbmVyLmZ1bGxzY3JlZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG59XFxuLnEtdGFibGUtdG9wIHtcXG4gIG1pbi1oZWlnaHQ6IDY0cHg7XFxuICBwYWRkaW5nOiA4cHggMjRweDtcXG59XFxuLnEtdGFibGUtdG9wOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgdHJhbnNpdGlvbjogMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjUsIDEpO1xcbn1cXG4ucS10YWJsZS10b3AgLnEtdGFibGUtY29udHJvbCB7XFxuICBtaW4taGVpZ2h0OiAzNnB4O1xcbiAgcGFkZGluZzogOHB4IDA7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG59XFxuLnEtdGFibGUtdGl0bGUge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDA1ZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4ucS10YWJsZS1zZXBhcmF0b3Ige1xcbiAgbWluLXdpZHRoOiA4cHggIWltcG9ydGFudDtcXG59XFxuLnEtdGFibGUtbm9kYXRhIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyMDAlO1xcbiAgcGFkZGluZy1yaWdodDogMTVweDtcXG59XFxuLnEtdGFibGUtcHJvZ3Jlc3Mge1xcbiAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLXRhYmxlLXByb2dyZXNzIHRkIHtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJsZS1wcm9ncmVzcyAucS1wcm9ncmVzcyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDJweDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtdGFibGUtbWlkZGxlIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuLnEtdGFibGUtYm90dG9tIHtcXG4gIG1pbi1oZWlnaHQ6IDQ4cHg7XFxuICBwYWRkaW5nOiA0cHggMTRweCA0cHggMjRweDtcXG59XFxuLnEtdGFibGUtYm90dG9tLFxcbi5xLXRhYmxlLWJvdHRvbSAucS1pZiB7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5xLXRhYmxlLWJvdHRvbSAucS10YWJsZS1jb250cm9sIHtcXG4gIG1pbi1oZWlnaHQ6IDI0cHg7XFxufVxcbi5xLXRhYmxlLWNvbnRyb2wge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4ucS10YWJsZS1zb3J0LWljb24ge1xcbiAgdHJhbnNpdGlvbjogMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjUsIDEpO1xcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHksIHRyYW5zZm9ybTtcXG4gIG9wYWNpdHk6IDA7XFxuICBmb250LXNpemU6IDEyMCU7XFxufVxcbi5xLXRhYmxlLXNvcnQtaWNvbi1sZWZ0LFxcbi5xLXRhYmxlLXNvcnQtaWNvbi1jZW50ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnEtdGFibGUtc29ydC1pY29uLXJpZ2h0IHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4ucS10YWJsZSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICBib3JkZXItc3BhY2luZzogMDtcXG59XFxuLnEtdGFibGUgdGhlYWQgdHIge1xcbiAgaGVpZ2h0OiA1NnB4O1xcbn1cXG4ucS10YWJsZSB0aCB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgdHJhbnNpdGlvbjogMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjUsIDEpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLnEtdGFibGUgdGguc29ydGFibGUge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0YWJsZTpob3ZlciAucS10YWJsZS1zb3J0LWljb24ge1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0ZWQgLnEtdGFibGUtc29ydC1pY29uIHtcXG4gIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcXG59XFxuLnEtdGFibGUgdGguc29ydC1kZXNjIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0ciB7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICB3aWxsLWNoYW5nZTogYmFja2dyb3VuZDtcXG59XFxuLnEtdGFibGUgdGgsXFxuLnEtdGFibGUgdGQge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHBhZGRpbmc6IDdweCAyNHB4O1xcbn1cXG4ucS10YWJsZSB0aGVhZCxcXG4ucS10YWJsZSB0ZCxcXG4ucS10YWJsZSB0aCB7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0ZCB7XFxuICBoZWlnaHQ6IDQ4cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbn1cXG4ucS10YWJsZS1jb2wtYXV0by13aWR0aCB7XFxuICB3aWR0aDogMXB4O1xcbn1cXG4ucS10YWJsZS1ib3R0b20taXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxufVxcbi5xLXRhYmxlLWdyaWQge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtdGFibGUtZ3JpZCAucS10YWJsZS1ib3R0b20ge1xcbiAgYm9yZGVyLXRvcDogMDtcXG59XFxuLnEtdGFibGUtZ3JpZCAucS10YWJsZSB7XFxuICBoZWlnaHQ6IDJweDtcXG59XFxuLnEtdGFibGUtZ3JpZCAucS10YWJsZSB0aGVhZCB7XFxuICBib3JkZXI6IDA7XFxufVxcbi5xLXRhYmxlLWhvcml6b250YWwtc2VwYXJhdG9yIHRoZWFkLFxcbi5xLXRhYmxlLWhvcml6b250YWwtc2VwYXJhdG9yIHRib2R5IHRkIHtcXG4gIGJvcmRlci13aWR0aDogMCAwIDFweCAwO1xcbn1cXG4ucS10YWJsZS12ZXJ0aWNhbC1zZXBhcmF0b3IgdGhlYWQge1xcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4IDA7XFxufVxcbi5xLXRhYmxlLXZlcnRpY2FsLXNlcGFyYXRvciB0ZCB7XFxuICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcXG59XFxuLnEtdGFibGUtdmVydGljYWwtc2VwYXJhdG9yIHRkOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbn1cXG4ucS10YWJsZS1jZWxsLXNlcGFyYXRvciB0ZCB7XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG59XFxuLnEtdGFibGUtY2VsbC1zZXBhcmF0b3IgdGQ6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxufVxcbi5xLXRhYmxlLWNlbGwtc2VwYXJhdG9yIHRkOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS10b3Age1xcbiAgbWluLWhlaWdodDogNDhweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtdG9wLFxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLWJvdHRvbSB7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtYm90dG9tIHtcXG4gIG1pbi1oZWlnaHQ6IDQycHg7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICBmb250LXNpemU6IDExMCU7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlIHRoLFxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IDRweCA4cHg7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlIHRoZWFkIHRyIHtcXG4gIGhlaWdodDogNDBweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGJvZHkgdGQge1xcbiAgaGVpZ2h0OiAyOHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS1ib3R0b20taXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAucS10YWJsZS10b3Age1xcbiAgICBtaW4taGVpZ2h0OiA0OHB4O1xcbiAgfVxcbiAgLnEtdGFibGUtdG9wLFxcbiAgLnEtdGFibGUtYm90dG9tIHtcXG4gICAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gIH1cXG4gIC5xLXRhYmxlLWJvdHRvbSB7XFxuICAgIG1pbi1oZWlnaHQ6IDQycHg7XFxuICB9XFxuICAucS10YWJsZS1zb3J0LWljb24ge1xcbiAgICBmb250LXNpemU6IDExMCU7XFxuICB9XFxuICAucS10YWJsZSB0aCxcXG4gIC5xLXRhYmxlIHRkIHtcXG4gICAgcGFkZGluZzogNHB4IDhweDtcXG4gIH1cXG4gIC5xLXRhYmxlIHRoZWFkIHRyIHtcXG4gICAgaGVpZ2h0OiA0MHB4O1xcbiAgfVxcbiAgLnEtdGFibGUgdGJvZHkgdGQge1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuICB9XFxuICAucS10YWJsZS1ib3R0b20taXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogOHB4O1xcbiAgfVxcbn1cXG4ucS10YWJsZS1ib3R0b20ge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtdGFibGUge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC44Nyk7XFxufVxcbi5xLXRhYmxlIHRoZWFkLFxcbi5xLXRhYmxlIHRyLFxcbi5xLXRhYmxlIHRoLFxcbi5xLXRhYmxlIHRkIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtdGFibGUgdGgge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxufVxcbi5xLXRhYmxlIHRoLnNvcnRhYmxlOmhvdmVyLFxcbi5xLXRhYmxlIHRoLnNvcnRlZCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjg3KTtcXG59XFxuLnEtdGFibGUgdGJvZHkgdHIuc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA2KTtcXG59XFxuLnEtdGFibGUgdGJvZHkgdHI6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjAzKTtcXG59XFxuLnEtdGFibGUtZGFyayB7XFxuICBjb2xvcjogI2VlZTtcXG59XFxuLnEtdGFibGUtZGFyayAucS10YWJsZS1ib3R0b20sXFxuLnEtdGFibGUtZGFyayAucS10YWJsZS10b3Age1xcbiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42NCk7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKTtcXG59XFxuLnEtdGFibGUtZGFyayB0aGVhZCxcXG4ucS10YWJsZS1kYXJrIHRyLFxcbi5xLXRhYmxlLWRhcmsgdGgsXFxuLnEtdGFibGUtZGFyayB0ZCB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xMik7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGgge1xcbiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42NCk7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGguc29ydGFibGU6aG92ZXIsXFxuLnEtdGFibGUtZGFyayB0aC5zb3J0ZWQge1xcbiAgY29sb3I6ICNlZWU7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGJvZHkgdHIuc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIpO1xcbn1cXG4ucS10YWJsZS1kYXJrIHRib2R5IHRyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xKTtcXG59XFxuLnEtdGltZWxpbmUge1xcbiAgcGFkZGluZzogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuLnEtdGltZWxpbmUgaDYge1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcbi5xLXRpbWVsaW5lLXRpdGxlIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbn1cXG4ucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcbi5xLXRpbWVsaW5lLWRvdCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDE1cHg7XFxufVxcbi5xLXRpbWVsaW5lLWRvdDpiZWZvcmUsXFxuLnEtdGltZWxpbmUtZG90OmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5xLXRpbWVsaW5lLWRvdDpiZWZvcmUge1xcbiAgYm9yZGVyOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbiAgaGVpZ2h0OiAxNXB4O1xcbiAgd2lkdGg6IDE1cHg7XFxuICB0b3A6IDRweDtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3MgZWFzZS1pbi1vdXQsIGJvcmRlciAwLjNzIGVhc2UtaW4tb3V0O1xcbn1cXG4ucS10aW1lbGluZS1kb3Q6YWZ0ZXIge1xcbiAgd2lkdGg6IDNweDtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRvcDogMjRweDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDZweDtcXG59XFxuLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWRvdCB7XFxuICB3aWR0aDogMzFweDtcXG4gIGxlZnQ6IC04cHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1kb3Q6YmVmb3JlIHtcXG4gIGhlaWdodDogMzFweDtcXG4gIHdpZHRoOiAzMXB4O1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtZG90OmFmdGVyIHtcXG4gIHRvcDogNDFweDtcXG4gIGxlZnQ6IDE0cHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbn1cXG4ucS10aW1lbGluZS1kb3QgLnEtaWNvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGhlaWdodDogMzhweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlLWluLW91dDtcXG59XFxuLnEtdGltZWxpbmUtZGFyayB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtdGltZWxpbmUtZGFyayAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5IHtcXG4gIHBhZGRpbmctbGVmdDogNDBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeTpsYXN0LWNoaWxkIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeTpsYXN0LWNoaWxkIC5xLXRpbWVsaW5lLWRvdDphZnRlciB7XFxuICBjb250ZW50OiBub25lO1xcbn1cXG4ucS10aW1lbGluZS1ob3ZlciAucS10aW1lbGluZS1lbnRyeTpob3ZlciAucS10aW1lbGluZS1kb3Q6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAzcHggc29saWQgY3VycmVudENvbG9yO1xcbn1cXG4ucS10aW1lbGluZS1ob3ZlciAucS10aW1lbGluZS1lbnRyeS5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbjpob3ZlciAucS10aW1lbGluZS1kb3QgLnEtaWNvbiB7XFxuICBjb2xvcjogY3VycmVudENvbG9yO1xcbn1cXG4ucS10aW1lbGluZS1jb250ZW50IHtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtdGltZWxpbmUtaGVhZGluZzpmaXJzdC1jaGlsZCAucS10aW1lbGluZS1oZWFkaW5nLXRpdGxlIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nOmxhc3QtY2hpbGQgLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMDtcXG59XFxuLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICBwYWRkaW5nOiAzMnB4IDA7XFxuICBtYXJnaW46IDA7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWhlYWRpbmcge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XFxuICAgIGZvbnQtc2l6ZTogMjAwJTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZyA+IGRpdiB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWhlYWRpbmctdGl0bGUge1xcbiAgICBtYXJnaW4tbGVmdDogLTUwcHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lIHtcXG4gICAgZGlzcGxheTogdGFibGU7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93O1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtc3VidGl0bGUge1xcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcXG4gICAgd2lkdGg6IDM1JTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90IHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIHBhZGRpbmctdG9wOiA4cHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gICAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWhlYWRpbmctdGl0bGUge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtc3VidGl0bGUsXFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWRvdCxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIHBhZGRpbmc6IDA7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWRvdCB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogLTcuMTVweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWRvdCB7XFxuICAgIGxlZnQ6IDUwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LWxlZnQgLnEtdGltZWxpbmUtY29udGVudCxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktcmlnaHQgLnEtdGltZWxpbmUtc3VidGl0bGUge1xcbiAgICBmbG9hdDogbGVmdDtcXG4gICAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LWxlZnQgLnEtdGltZWxpbmUtc3VidGl0bGUsXFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LXJpZ2h0IC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBmbG9hdDogcmlnaHQ7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIHBhZGRpbmctbGVmdDogMzBweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBwYWRkaW5nLXRvcDogOHB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcbn1cXG4ucS10b2dnbGUtYmFzZSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEycHg7XFxuICBib3JkZXItcmFkaXVzOiAzMHB4O1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS10b2dnbGUtaGFuZGxlIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjU7XFxuICB0cmFuc2l0aW9uOiBhbGwgNDUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDIxcHg7XFxuICBoZWlnaHQ6IDIxcHg7XFxuICBsaW5lLWhlaWdodDogMjFweDtcXG59XFxuLnEtdG9nZ2xlIC5xLW9wdGlvbi1pbm5lciB7XFxuICBoZWlnaHQ6IDIxcHg7XFxuICB3aWR0aDogNDBweDtcXG4gIG1pbi13aWR0aDogNDBweDtcXG4gIHBhZGRpbmc6IDVweCAwO1xcbn1cXG4ucS10b2dnbGUgLnEtb3B0aW9uLWlubmVyLmFjdGl2ZSAucS10b2dnbGUtaGFuZGxlIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIGxlZnQ6IDE5cHg7XFxufVxcbi5xLXRvZ2dsZSAucS1vcHRpb24taW5uZXIuYWN0aXZlIC5xLXRvZ2dsZS1pY29uIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS10b29sYmFyIHtcXG4gIHBhZGRpbmc6IDRweCAxMnB4O1xcbiAgbWluLWhlaWdodDogNTBweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtdG9vbGJhci1pbnZlcnRlZCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG4ucS10b29sYmFyLXRpdGxlIHtcXG4gIC1tcy1mbGV4OiAxIDEgMCU7XFxuICAgICAgZmxleDogMSAxIDAlO1xcbiAgbWluLXdpZHRoOiAxcHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbn1cXG4ucS10b29sYmFyLXN1YnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtdG9vbGJhci10aXRsZSxcXG4ucS10b29sYmFyLXN1YnRpdGxlIHtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6ICNmYWZhZmE7XFxuICBiYWNrZ3JvdW5kOiAjNzQ3NDc0O1xcbiAgei1pbmRleDogOTAwMDtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXRyZWUtbm9kZSB7XFxuICBtYXJnaW46IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAwIDAgM3B4IDIycHg7XFxufVxcbi5xLXRyZWUtbm9kZTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTNweDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxcHg7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IC0xM3B4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRyZWUtbm9kZTpsYXN0LWNoaWxkOmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRyZWUtbm9kZS1oZWFkZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtM3B4O1xcbiAgYm90dG9tOiA1MCU7XFxuICB3aWR0aDogMzVweDtcXG4gIGxlZnQ6IC0zNXB4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY3VycmVudENvbG9yO1xcbn1cXG4ucS10cmVlLWNoaWxkcmVuIHtcXG4gIHBhZGRpbmctbGVmdDogMjVweDtcXG59XFxuLnEtdHJlZS1jaGlsZHJlbi5kaXNhYmxlZCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnEtdHJlZS1ub2RlLWJvZHkge1xcbiAgcGFkZGluZzogNXB4IDAgOHB4IDVweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCB7XFxuICBwYWRkaW5nLWxlZnQ6IDJweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCA+IC5xLXRyZWUtbm9kZS1oZWFkZXI6YmVmb3JlIHtcXG4gIHdpZHRoOiAxNXB4O1xcbiAgbGVmdDogLTE1cHg7XFxufVxcbi5xLXRyZWUtbm9kZS1wYXJlbnQgPiAucS10cmVlLW5vZGUtY29sbGFwc2libGUgPiAucS10cmVlLW5vZGUtYm9keSB7XFxuICBwYWRkaW5nOiA1cHggMCA4cHggMjdweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCA+IC5xLXRyZWUtbm9kZS1jb2xsYXBzaWJsZSA+IC5xLXRyZWUtbm9kZS1ib2R5OmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgbGVmdDogMTJweDtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgY3VycmVudENvbG9yO1xcbiAgYm90dG9tOiA1MHB4O1xcbn1cXG4ucS10cmVlLW5vZGUtbGluayB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXRyZWUtbm9kZS1zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTUpO1xcbn1cXG4ucS10cmVlLWRhcmsgLnEtdHJlZS1ub2RlLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC40KTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRyZWUtbm9kZS1saW5rOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRyZWUtZGFyayAucS10cmVlLW5vZGUtbGluazpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMyk7XFxufVxcbi5xLXRyZWUtbm9kZS1oZWFkZXIge1xcbiAgcGFkZGluZzogNHB4O1xcbiAgbWFyZ2luLXRvcDogM3B4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG4ucS10cmVlLW5vZGUtaGVhZGVyLmRpc2FibGVkIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS10cmVlLWljb24ge1xcbiAgZm9udC1zaXplOiAxLjVlbTtcXG59XFxuLnEtdHJlZS1pbWcge1xcbiAgaGVpZ2h0OiAzZW07XFxufVxcbi5xLXRyZWUtaW1nLmF2YXRhciB7XFxuICB3aWR0aDogMmVtO1xcbiAgaGVpZ2h0OiAyZW07XFxufVxcbi5xLXRyZWUtYXJyb3cge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxufVxcbi5xLXRyZWUtYXJyb3ctcm90YXRlIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG59XFxuW2Rpcj1ydGxdIC5xLXRyZWUtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG5bZGlyPXJ0bF0gLnEtdHJlZS1hcnJvdy1yb3RhdGUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXRyZWUgPiAucS10cmVlLW5vZGUge1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnEtdHJlZSA+IC5xLXRyZWUtbm9kZTphZnRlcixcXG4ucS10cmVlID4gLnEtdHJlZS1ub2RlID4gLnEtdHJlZS1ub2RlLWhlYWRlcjpiZWZvcmUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtdHJlZSA+IC5xLXRyZWUtbm9kZS1jaGlsZCA+IC5xLXRyZWUtbm9kZS1oZWFkZXIge1xcbiAgcGFkZGluZy1sZWZ0OiAyNHB4O1xcbn1cXG4ucS11cGxvYWRlci1leHBhbmRlZCAucS1pZiB7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcbi5xLXVwbG9hZGVyLWlucHV0IHtcXG4gIG9wYWNpdHk6IDA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMDtcXG59XFxuLnEtdXBsb2FkZXItcGljay1idXR0b25bZGlzYWJsZWRdIC5xLXVwbG9hZGVyLWlucHV0IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXVwbG9hZGVyLWZpbGVzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBtYXgtaGVpZ2h0OiA1MDBweDtcXG59XFxuLnEtdXBsb2FkZXItZmlsZXMtbm8tYm9yZGVyIC5xLXVwbG9hZGVyLWZpbGVzIHtcXG4gIGJvcmRlci10b3A6IDAgIWltcG9ydGFudDtcXG59XFxuLnEtdXBsb2FkZXItZmlsZTpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS11cGxvYWRlci1wcm9ncmVzcy1iZyxcXG4ucS11cGxvYWRlci1wcm9ncmVzcy10ZXh0IHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS11cGxvYWRlci1wcm9ncmVzcy1iZyB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBvcGFjaXR5OiAwLjI7XFxufVxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLXRleHQge1xcbiAgZm9udC1zaXplOiA0MHB4O1xcbiAgb3BhY2l0eTogMC4xO1xcbiAgcmlnaHQ6IDQ0cHg7XFxuICBib3R0b206IDA7XFxufVxcbi5xLXVwbG9hZGVyLWRuZCB7XFxuICBvdXRsaW5lOiAycHggZGFzaGVkIGN1cnJlbnRDb2xvcjtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtNnB4O1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjYpO1xcbn1cXG4ucS11cGxvYWRlci1kbmQuaW52ZXJ0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLWZpbGVzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2E3YTdhNztcXG59XFxuLnEtdXBsb2FkZXItZGFyayAucS11cGxvYWRlci1iZyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtdXBsb2FkZXItZGFyayAucS11cGxvYWRlci1wcm9ncmVzcy10ZXh0IHtcXG4gIG9wYWNpdHk6IDAuMjtcXG59XFxuLnEtdXBsb2FkZXItZGFyayAucS11cGxvYWRlci1maWxlOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MjQyNDI7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuaW1nLnJlc3BvbnNpdmUge1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG5pbWcuYXZhdGFyIHtcXG4gIHdpZHRoOiA1MHB4O1xcbiAgaGVpZ2h0OiA1MHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS12aWRlbyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtdmlkZW8gaWZyYW1lLFxcbi5xLXZpZGVvIG9iamVjdCxcXG4ucS12aWRlbyBlbWJlZCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuOnJvb3Qge1xcbiAgLS1xLWNvbG9yLXByaW1hcnk6ICMwMjdiZTM7XFxuICAtLXEtY29sb3Itc2Vjb25kYXJ5OiAjMjZhNjlhO1xcbiAgLS1xLWNvbG9yLXRlcnRpYXJ5OiAjNTU1O1xcbiAgLS1xLWNvbG9yLXBvc2l0aXZlOiAjMjFiYTQ1O1xcbiAgLS1xLWNvbG9yLW5lZ2F0aXZlOiAjZGIyODI4O1xcbiAgLS1xLWNvbG9yLW5lZ2F0aXZlLWw6ICNlYzhiOGI7XFxuICAtLXEtY29sb3ItaW5mbzogIzMxY2NlYztcXG4gIC0tcS1jb2xvci13YXJuaW5nOiAjZjJjMDM3O1xcbiAgLS1xLWNvbG9yLXdhcm5pbmctbDogI2Y4ZGQ5MztcXG4gIC0tcS1jb2xvci1saWdodDogI2JkYmRiZDtcXG4gIC0tcS1jb2xvci1saWdodC1kOiAjYWFhO1xcbiAgLS1xLWNvbG9yLWZhZGVkOiAjNzc3O1xcbiAgLS1xLWNvbG9yLWRhcms6ICM0MjQyNDI7XFxufVxcbi50ZXh0LXByaW1hcnkge1xcbiAgY29sb3I6ICMwMjdiZTMgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXByaW1hcnkpICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wcmltYXJ5IHtcXG4gIGJhY2tncm91bmQ6ICMwMjdiZTMgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItcHJpbWFyeSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtc2Vjb25kYXJ5IHtcXG4gIGNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1zZWNvbmRhcnkpICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1zZWNvbmRhcnkge1xcbiAgYmFja2dyb3VuZDogIzI2YTY5YSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1zZWNvbmRhcnkpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlcnRpYXJ5IHtcXG4gIGNvbG9yOiAjNTU1ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci10ZXJ0aWFyeSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlcnRpYXJ5IHtcXG4gIGJhY2tncm91bmQ6ICM1NTUgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItdGVydGlhcnkpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWZhZGVkIHtcXG4gIGNvbG9yOiAjNzc3ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCkgIWltcG9ydGFudDtcXG59XFxuLmJnLWZhZGVkIHtcXG4gIGJhY2tncm91bmQ6ICM3NzcgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItZmFkZWQpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBvc2l0aXZlIHtcXG4gIGNvbG9yOiAjMjFiYTQ1ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1wb3NpdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXBvc2l0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMyMWJhNDUgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItcG9zaXRpdmUpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW5lZ2F0aXZlIHtcXG4gIGNvbG9yOiAjZGIyODI4ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLmJnLW5lZ2F0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICNkYjI4MjggIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZm8ge1xcbiAgY29sb3I6ICMzMWNjZWMgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWluZm8pICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmZvIHtcXG4gIGJhY2tncm91bmQ6ICMzMWNjZWMgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItaW5mbykgIWltcG9ydGFudDtcXG59XFxuLnRleHQtd2FybmluZyB7XFxuICBjb2xvcjogI2YyYzAzNyAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3Itd2FybmluZykgIWltcG9ydGFudDtcXG59XFxuLmJnLXdhcm5pbmcge1xcbiAgYmFja2dyb3VuZDogI2YyYzAzNyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci13YXJuaW5nKSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC13aGl0ZSB7XFxuICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctd2hpdGUge1xcbiAgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibGFjayB7XFxuICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmxhY2sge1xcbiAgYmFja2dyb3VuZDogIzAwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodCB7XFxuICBjb2xvcjogI2JkYmRiZCAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodCB7XFxuICBiYWNrZ3JvdW5kOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLWxpZ2h0KSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kYXJrIHtcXG4gIGNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1kYXJrKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGFyayB7XFxuICBiYWNrZ3JvdW5kOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLWRhcmspICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRyYW5zcGFyZW50IHtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdHJhbnNwYXJlbnQge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkIHtcXG4gIGNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xIHtcXG4gIGNvbG9yOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0yIHtcXG4gIGNvbG9yOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0zIHtcXG4gIGNvbG9yOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC00IHtcXG4gIGNvbG9yOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC01IHtcXG4gIGNvbG9yOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC02IHtcXG4gIGNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC03IHtcXG4gIGNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC04IHtcXG4gIGNvbG9yOiAjZDMyZjJmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC05IHtcXG4gIGNvbG9yOiAjYzYyODI4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xMCB7XFxuICBjb2xvcjogI2I3MWMxYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQtMTEge1xcbiAgY29sb3I6ICNmZjhhODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEyIHtcXG4gIGNvbG9yOiAjZmY1MjUyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xMyB7XFxuICBjb2xvcjogI2ZmMTc0NCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQtMTQge1xcbiAgY29sb3I6ICNkNTAwMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluayB7XFxuICBjb2xvcjogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEge1xcbiAgY29sb3I6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0yIHtcXG4gIGNvbG9yOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMyB7XFxuICBjb2xvcjogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTQge1xcbiAgY29sb3I6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay01IHtcXG4gIGNvbG9yOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstNiB7XFxuICBjb2xvcjogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTcge1xcbiAgY29sb3I6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay04IHtcXG4gIGNvbG9yOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstOSB7XFxuICBjb2xvcjogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEwIHtcXG4gIGNvbG9yOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTEge1xcbiAgY29sb3I6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0xMiB7XFxuICBjb2xvcjogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEzIHtcXG4gIGNvbG9yOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTQge1xcbiAgY29sb3I6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlIHtcXG4gIGNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xIHtcXG4gIGNvbG9yOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0yIHtcXG4gIGNvbG9yOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0zIHtcXG4gIGNvbG9yOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS00IHtcXG4gIGNvbG9yOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS01IHtcXG4gIGNvbG9yOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS02IHtcXG4gIGNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS03IHtcXG4gIGNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS04IHtcXG4gIGNvbG9yOiAjN2IxZmEyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS05IHtcXG4gIGNvbG9yOiAjNmExYjlhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xMCB7XFxuICBjb2xvcjogIzRhMTQ4YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUtMTEge1xcbiAgY29sb3I6ICNlYTgwZmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEyIHtcXG4gIGNvbG9yOiAjZTA0MGZiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xMyB7XFxuICBjb2xvcjogI2Q1MDBmOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUtMTQge1xcbiAgY29sb3I6ICNhMGYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUge1xcbiAgY29sb3I6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMSB7XFxuICBjb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0yIHtcXG4gIGNvbG9yOiAjZDFjNGU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTMge1xcbiAgY29sb3I6ICNiMzlkZGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtNCB7XFxuICBjb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS01IHtcXG4gIGNvbG9yOiAjN2U1N2MyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTYge1xcbiAgY29sb3I6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtNyB7XFxuICBjb2xvcjogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS04IHtcXG4gIGNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTkge1xcbiAgY29sb3I6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTAge1xcbiAgY29sb3I6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTEge1xcbiAgY29sb3I6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTIge1xcbiAgY29sb3I6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTMge1xcbiAgY29sb3I6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTQge1xcbiAgY29sb3I6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvIHtcXG4gIGNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xIHtcXG4gIGNvbG9yOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0yIHtcXG4gIGNvbG9yOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0zIHtcXG4gIGNvbG9yOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby00IHtcXG4gIGNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby01IHtcXG4gIGNvbG9yOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby02IHtcXG4gIGNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby03IHtcXG4gIGNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby04IHtcXG4gIGNvbG9yOiAjMzAzZjlmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby05IHtcXG4gIGNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xMCB7XFxuICBjb2xvcjogIzFhMjM3ZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28tMTEge1xcbiAgY29sb3I6ICM4YzllZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEyIHtcXG4gIGNvbG9yOiAjNTM2ZGZlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xMyB7XFxuICBjb2xvcjogIzNkNWFmZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28tMTQge1xcbiAgY29sb3I6ICMzMDRmZmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZSB7XFxuICBjb2xvcjogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEge1xcbiAgY29sb3I6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0yIHtcXG4gIGNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMyB7XFxuICBjb2xvcjogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTQge1xcbiAgY29sb3I6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS01IHtcXG4gIGNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtNiB7XFxuICBjb2xvcjogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTcge1xcbiAgY29sb3I6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS04IHtcXG4gIGNvbG9yOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtOSB7XFxuICBjb2xvcjogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEwIHtcXG4gIGNvbG9yOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTEge1xcbiAgY29sb3I6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0xMiB7XFxuICBjb2xvcjogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEzIHtcXG4gIGNvbG9yOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTQge1xcbiAgY29sb3I6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZSB7XFxuICBjb2xvcjogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEge1xcbiAgY29sb3I6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0yIHtcXG4gIGNvbG9yOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMyB7XFxuICBjb2xvcjogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTQge1xcbiAgY29sb3I6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS01IHtcXG4gIGNvbG9yOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtNiB7XFxuICBjb2xvcjogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTcge1xcbiAgY29sb3I6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS04IHtcXG4gIGNvbG9yOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtOSB7XFxuICBjb2xvcjogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEwIHtcXG4gIGNvbG9yOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTEge1xcbiAgY29sb3I6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0xMiB7XFxuICBjb2xvcjogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEzIHtcXG4gIGNvbG9yOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTQge1xcbiAgY29sb3I6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbiB7XFxuICBjb2xvcjogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEge1xcbiAgY29sb3I6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0yIHtcXG4gIGNvbG9yOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMyB7XFxuICBjb2xvcjogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTQge1xcbiAgY29sb3I6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi01IHtcXG4gIGNvbG9yOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tNiB7XFxuICBjb2xvcjogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTcge1xcbiAgY29sb3I6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi04IHtcXG4gIGNvbG9yOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tOSB7XFxuICBjb2xvcjogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEwIHtcXG4gIGNvbG9yOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTEge1xcbiAgY29sb3I6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0xMiB7XFxuICBjb2xvcjogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEzIHtcXG4gIGNvbG9yOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTQge1xcbiAgY29sb3I6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbCB7XFxuICBjb2xvcjogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEge1xcbiAgY29sb3I6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0yIHtcXG4gIGNvbG9yOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMyB7XFxuICBjb2xvcjogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTQge1xcbiAgY29sb3I6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC01IHtcXG4gIGNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtNiB7XFxuICBjb2xvcjogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTcge1xcbiAgY29sb3I6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC04IHtcXG4gIGNvbG9yOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtOSB7XFxuICBjb2xvcjogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEwIHtcXG4gIGNvbG9yOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTEge1xcbiAgY29sb3I6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0xMiB7XFxuICBjb2xvcjogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEzIHtcXG4gIGNvbG9yOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTQge1xcbiAgY29sb3I6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4ge1xcbiAgY29sb3I6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMSB7XFxuICBjb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0yIHtcXG4gIGNvbG9yOiAjYzhlNmM5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTMge1xcbiAgY29sb3I6ICNhNWQ2YTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tNCB7XFxuICBjb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi01IHtcXG4gIGNvbG9yOiAjNjZiYjZhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTYge1xcbiAgY29sb3I6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tNyB7XFxuICBjb2xvcjogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi04IHtcXG4gIGNvbG9yOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTkge1xcbiAgY29sb3I6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTAge1xcbiAgY29sb3I6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTEge1xcbiAgY29sb3I6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTIge1xcbiAgY29sb3I6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTMge1xcbiAgY29sb3I6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTQge1xcbiAgY29sb3I6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4ge1xcbiAgY29sb3I6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMSB7XFxuICBjb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0yIHtcXG4gIGNvbG9yOiAjZGNlZGM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTMge1xcbiAgY29sb3I6ICNjNWUxYTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tNCB7XFxuICBjb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi01IHtcXG4gIGNvbG9yOiAjOWNjYzY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTYge1xcbiAgY29sb3I6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tNyB7XFxuICBjb2xvcjogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi04IHtcXG4gIGNvbG9yOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTkge1xcbiAgY29sb3I6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTAge1xcbiAgY29sb3I6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTEge1xcbiAgY29sb3I6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTIge1xcbiAgY29sb3I6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTMge1xcbiAgY29sb3I6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTQge1xcbiAgY29sb3I6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZSB7XFxuICBjb2xvcjogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEge1xcbiAgY29sb3I6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0yIHtcXG4gIGNvbG9yOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMyB7XFxuICBjb2xvcjogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTQge1xcbiAgY29sb3I6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS01IHtcXG4gIGNvbG9yOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtNiB7XFxuICBjb2xvcjogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTcge1xcbiAgY29sb3I6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS04IHtcXG4gIGNvbG9yOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtOSB7XFxuICBjb2xvcjogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEwIHtcXG4gIGNvbG9yOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTEge1xcbiAgY29sb3I6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0xMiB7XFxuICBjb2xvcjogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEzIHtcXG4gIGNvbG9yOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTQge1xcbiAgY29sb3I6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93IHtcXG4gIGNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xIHtcXG4gIGNvbG9yOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0yIHtcXG4gIGNvbG9yOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0zIHtcXG4gIGNvbG9yOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy00IHtcXG4gIGNvbG9yOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy01IHtcXG4gIGNvbG9yOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy02IHtcXG4gIGNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy03IHtcXG4gIGNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy04IHtcXG4gIGNvbG9yOiAjZmJjMDJkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy05IHtcXG4gIGNvbG9yOiAjZjlhODI1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xMCB7XFxuICBjb2xvcjogI2Y1N2YxNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3ctMTEge1xcbiAgY29sb3I6ICNmZmZmOGQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEyIHtcXG4gIGNvbG9yOiAjZmYwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xMyB7XFxuICBjb2xvcjogI2ZmZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3ctMTQge1xcbiAgY29sb3I6ICNmZmQ2MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXIge1xcbiAgY29sb3I6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMSB7XFxuICBjb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0yIHtcXG4gIGNvbG9yOiAjZmZlY2IzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTMge1xcbiAgY29sb3I6ICNmZmUwODIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItNCB7XFxuICBjb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci01IHtcXG4gIGNvbG9yOiAjZmZjYTI4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTYge1xcbiAgY29sb3I6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItNyB7XFxuICBjb2xvcjogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci04IHtcXG4gIGNvbG9yOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTkge1xcbiAgY29sb3I6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTAge1xcbiAgY29sb3I6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTEge1xcbiAgY29sb3I6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTIge1xcbiAgY29sb3I6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTMge1xcbiAgY29sb3I6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTQge1xcbiAgY29sb3I6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlIHtcXG4gIGNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xIHtcXG4gIGNvbG9yOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0yIHtcXG4gIGNvbG9yOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0zIHtcXG4gIGNvbG9yOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS00IHtcXG4gIGNvbG9yOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS01IHtcXG4gIGNvbG9yOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS02IHtcXG4gIGNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS03IHtcXG4gIGNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS04IHtcXG4gIGNvbG9yOiAjZjU3YzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS05IHtcXG4gIGNvbG9yOiAjZWY2YzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xMCB7XFxuICBjb2xvcjogI2U2NTEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2UtMTEge1xcbiAgY29sb3I6ICNmZmQxODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEyIHtcXG4gIGNvbG9yOiAjZmZhYjQwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xMyB7XFxuICBjb2xvcjogI2ZmOTEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2UtMTQge1xcbiAgY29sb3I6ICNmZjZkMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2Uge1xcbiAgY29sb3I6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMSB7XFxuICBjb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0yIHtcXG4gIGNvbG9yOiAjZmZjY2JjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTMge1xcbiAgY29sb3I6ICNmZmFiOTEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtNCB7XFxuICBjb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS01IHtcXG4gIGNvbG9yOiAjZmY3MDQzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTYge1xcbiAgY29sb3I6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtNyB7XFxuICBjb2xvcjogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS04IHtcXG4gIGNvbG9yOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTkge1xcbiAgY29sb3I6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTAge1xcbiAgY29sb3I6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTEge1xcbiAgY29sb3I6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTIge1xcbiAgY29sb3I6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTMge1xcbiAgY29sb3I6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTQge1xcbiAgY29sb3I6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24ge1xcbiAgY29sb3I6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMSB7XFxuICBjb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0yIHtcXG4gIGNvbG9yOiAjZDdjY2M4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTMge1xcbiAgY29sb3I6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tNCB7XFxuICBjb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi01IHtcXG4gIGNvbG9yOiAjOGQ2ZTYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTYge1xcbiAgY29sb3I6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tNyB7XFxuICBjb2xvcjogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi04IHtcXG4gIGNvbG9yOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTkge1xcbiAgY29sb3I6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTAge1xcbiAgY29sb3I6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTEge1xcbiAgY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTIge1xcbiAgY29sb3I6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTMge1xcbiAgY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTQge1xcbiAgY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleSB7XFxuICBjb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEge1xcbiAgY29sb3I6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0yIHtcXG4gIGNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMyB7XFxuICBjb2xvcjogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTQge1xcbiAgY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS01IHtcXG4gIGNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktNiB7XFxuICBjb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTcge1xcbiAgY29sb3I6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS04IHtcXG4gIGNvbG9yOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktOSB7XFxuICBjb2xvcjogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEwIHtcXG4gIGNvbG9yOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTEge1xcbiAgY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0xMiB7XFxuICBjb2xvcjogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEzIHtcXG4gIGNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTQge1xcbiAgY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5IHtcXG4gIGNvbG9yOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xIHtcXG4gIGNvbG9yOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0yIHtcXG4gIGNvbG9yOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0zIHtcXG4gIGNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS00IHtcXG4gIGNvbG9yOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS01IHtcXG4gIGNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS02IHtcXG4gIGNvbG9yOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS03IHtcXG4gIGNvbG9yOiAjNTQ2ZTdhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS04IHtcXG4gIGNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS05IHtcXG4gIGNvbG9yOiAjMzc0NzRmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xMCB7XFxuICBjb2xvcjogIzI2MzIzOCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXktMTEge1xcbiAgY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEyIHtcXG4gIGNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xMyB7XFxuICBjb2xvcjogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXktMTQge1xcbiAgY29sb3I6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZCB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMyB7XFxuICBiYWNrZ3JvdW5kOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNCB7XFxuICBiYWNrZ3JvdW5kOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNiB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNyB7XFxuICBiYWNrZ3JvdW5kOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtOCB7XFxuICBiYWNrZ3JvdW5kOiAjZDMyZjJmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtOSB7XFxuICBiYWNrZ3JvdW5kOiAjYzYyODI4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTAge1xcbiAgYmFja2dyb3VuZDogI2I3MWMxYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZjhhODAgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmY1MjUyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmMTc0NCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNkNTAwMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmsge1xcbiAgYmFja2dyb3VuZDogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xIHtcXG4gIGJhY2tncm91bmQ6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMiB7XFxuICBiYWNrZ3JvdW5kOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTMge1xcbiAgYmFja2dyb3VuZDogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay00IHtcXG4gIGJhY2tncm91bmQ6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstNSB7XFxuICBiYWNrZ3JvdW5kOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTYge1xcbiAgYmFja2dyb3VuZDogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay03IHtcXG4gIGJhY2tncm91bmQ6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstOCB7XFxuICBiYWNrZ3JvdW5kOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTkge1xcbiAgYmFja2dyb3VuZDogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMTIge1xcbiAgYmFja2dyb3VuZDogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZSB7XFxuICBiYWNrZ3JvdW5kOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNCB7XFxuICBiYWNrZ3JvdW5kOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNyB7XFxuICBiYWNrZ3JvdW5kOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjN2IxZmEyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjNmExYjlhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTAge1xcbiAgYmFja2dyb3VuZDogIzRhMTQ4YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNlYTgwZmMgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZTA0MGZiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTMge1xcbiAgYmFja2dyb3VuZDogI2Q1MDBmOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNhMGYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlIHtcXG4gIGJhY2tncm91bmQ6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEge1xcbiAgYmFja2dyb3VuZDogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZDFjNGU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNiMzlkZGIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTQge1xcbiAgYmFja2dyb3VuZDogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjN2U1N2MyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS02IHtcXG4gIGJhY2tncm91bmQ6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTcge1xcbiAgYmFja2dyb3VuZDogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS05IHtcXG4gIGJhY2tncm91bmQ6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnbyB7XFxuICBiYWNrZ3JvdW5kOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMiB7XFxuICBiYWNrZ3JvdW5kOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMyB7XFxuICBiYWNrZ3JvdW5kOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNCB7XFxuICBiYWNrZ3JvdW5kOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNSB7XFxuICBiYWNrZ3JvdW5kOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNiB7XFxuICBiYWNrZ3JvdW5kOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNyB7XFxuICBiYWNrZ3JvdW5kOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tOCB7XFxuICBiYWNrZ3JvdW5kOiAjMzAzZjlmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tOSB7XFxuICBiYWNrZ3JvdW5kOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTAge1xcbiAgYmFja2dyb3VuZDogIzFhMjM3ZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4YzllZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNTM2ZGZlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTMge1xcbiAgYmFja2dyb3VuZDogIzNkNWFmZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMzMDRmZmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUge1xcbiAgYmFja2dyb3VuZDogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTMge1xcbiAgYmFja2dyb3VuZDogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS00IHtcXG4gIGJhY2tncm91bmQ6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTYge1xcbiAgYmFja2dyb3VuZDogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS03IHtcXG4gIGJhY2tncm91bmQ6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTkge1xcbiAgYmFja2dyb3VuZDogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMTIge1xcbiAgYmFja2dyb3VuZDogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUge1xcbiAgYmFja2dyb3VuZDogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTMge1xcbiAgYmFja2dyb3VuZDogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS00IHtcXG4gIGJhY2tncm91bmQ6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTYge1xcbiAgYmFja2dyb3VuZDogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS03IHtcXG4gIGJhY2tncm91bmQ6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTkge1xcbiAgYmFja2dyb3VuZDogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMTIge1xcbiAgYmFja2dyb3VuZDogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4ge1xcbiAgYmFja2dyb3VuZDogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xIHtcXG4gIGJhY2tncm91bmQ6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTMge1xcbiAgYmFja2dyb3VuZDogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi00IHtcXG4gIGJhY2tncm91bmQ6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tNSB7XFxuICBiYWNrZ3JvdW5kOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTYge1xcbiAgYmFja2dyb3VuZDogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi03IHtcXG4gIGJhY2tncm91bmQ6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tOCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTkge1xcbiAgYmFja2dyb3VuZDogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMTIge1xcbiAgYmFja2dyb3VuZDogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwge1xcbiAgYmFja2dyb3VuZDogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xIHtcXG4gIGJhY2tncm91bmQ6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTMge1xcbiAgYmFja2dyb3VuZDogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC00IHtcXG4gIGJhY2tncm91bmQ6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtNSB7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTYge1xcbiAgYmFja2dyb3VuZDogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC03IHtcXG4gIGJhY2tncm91bmQ6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtOCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTkge1xcbiAgYmFja2dyb3VuZDogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTExIHtcXG4gIGJhY2tncm91bmQ6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMTIge1xcbiAgYmFja2dyb3VuZDogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuIHtcXG4gIGJhY2tncm91bmQ6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEge1xcbiAgYmFja2dyb3VuZDogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMiB7XFxuICBiYWNrZ3JvdW5kOiAjYzhlNmM5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi0zIHtcXG4gIGJhY2tncm91bmQ6ICNhNWQ2YTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTQge1xcbiAgYmFja2dyb3VuZDogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tNSB7XFxuICBiYWNrZ3JvdW5kOiAjNjZiYjZhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi02IHtcXG4gIGJhY2tncm91bmQ6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTcge1xcbiAgYmFja2dyb3VuZDogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tOCB7XFxuICBiYWNrZ3JvdW5kOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi05IHtcXG4gIGJhY2tncm91bmQ6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTExIHtcXG4gIGJhY2tncm91bmQ6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEyIHtcXG4gIGJhY2tncm91bmQ6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuIHtcXG4gIGJhY2tncm91bmQ6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEge1xcbiAgYmFja2dyb3VuZDogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMiB7XFxuICBiYWNrZ3JvdW5kOiAjZGNlZGM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi0zIHtcXG4gIGJhY2tncm91bmQ6ICNjNWUxYTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTQge1xcbiAgYmFja2dyb3VuZDogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tNSB7XFxuICBiYWNrZ3JvdW5kOiAjOWNjYzY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi02IHtcXG4gIGJhY2tncm91bmQ6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTcge1xcbiAgYmFja2dyb3VuZDogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tOCB7XFxuICBiYWNrZ3JvdW5kOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi05IHtcXG4gIGJhY2tncm91bmQ6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTExIHtcXG4gIGJhY2tncm91bmQ6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEzIHtcXG4gIGJhY2tncm91bmQ6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTE0IHtcXG4gIGJhY2tncm91bmQ6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUge1xcbiAgYmFja2dyb3VuZDogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTMge1xcbiAgYmFja2dyb3VuZDogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS00IHtcXG4gIGJhY2tncm91bmQ6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTYge1xcbiAgYmFja2dyb3VuZDogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS03IHtcXG4gIGJhY2tncm91bmQ6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTkge1xcbiAgYmFja2dyb3VuZDogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMTIge1xcbiAgYmFja2dyb3VuZDogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNyB7XFxuICBiYWNrZ3JvdW5kOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctOCB7XFxuICBiYWNrZ3JvdW5kOiAjZmJjMDJkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctOSB7XFxuICBiYWNrZ3JvdW5kOiAjZjlhODI1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTAge1xcbiAgYmFja2dyb3VuZDogI2Y1N2YxNyAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93LTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmOGQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmYwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93LTE0IHtcXG4gIGJhY2tncm91bmQ6ICNmZmQ2MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyIHtcXG4gIGJhY2tncm91bmQ6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlY2IzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmUwODIgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTQge1xcbiAgYmFja2dyb3VuZDogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjYTI4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci02IHtcXG4gIGJhY2tncm91bmQ6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTcge1xcbiAgYmFja2dyb3VuZDogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItOCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci05IHtcXG4gIGJhY2tncm91bmQ6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEwIHtcXG4gIGJhY2tncm91bmQ6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZSB7XFxuICBiYWNrZ3JvdW5kOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNiB7XFxuICBiYWNrZ3JvdW5kOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNyB7XFxuICBiYWNrZ3JvdW5kOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtOCB7XFxuICBiYWNrZ3JvdW5kOiAjZjU3YzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtOSB7XFxuICBiYWNrZ3JvdW5kOiAjZWY2YzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTAge1xcbiAgYmFja2dyb3VuZDogI2U2NTEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZmQxODAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZhYjQwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmOTEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNmZjZkMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlIHtcXG4gIGJhY2tncm91bmQ6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEge1xcbiAgYmFja2dyb3VuZDogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjY2JjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmFiOTEgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTQge1xcbiAgYmFja2dyb3VuZDogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmY3MDQzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS02IHtcXG4gIGJhY2tncm91bmQ6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTcge1xcbiAgYmFja2dyb3VuZDogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtOCB7XFxuICBiYWNrZ3JvdW5kOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS05IHtcXG4gIGJhY2tncm91bmQ6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duIHtcXG4gIGJhY2tncm91bmQ6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEge1xcbiAgYmFja2dyb3VuZDogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMiB7XFxuICBiYWNrZ3JvdW5kOiAjZDdjY2M4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi0zIHtcXG4gIGJhY2tncm91bmQ6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTQge1xcbiAgYmFja2dyb3VuZDogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tNSB7XFxuICBiYWNrZ3JvdW5kOiAjOGQ2ZTYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi02IHtcXG4gIGJhY2tncm91bmQ6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTcge1xcbiAgYmFja2dyb3VuZDogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tOCB7XFxuICBiYWNrZ3JvdW5kOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi05IHtcXG4gIGJhY2tncm91bmQ6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTExIHtcXG4gIGJhY2tncm91bmQ6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEzIHtcXG4gIGJhY2tncm91bmQ6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTE0IHtcXG4gIGJhY2tncm91bmQ6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXkge1xcbiAgYmFja2dyb3VuZDogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMiB7XFxuICBiYWNrZ3JvdW5kOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTMge1xcbiAgYmFja2dyb3VuZDogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS00IHtcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktNSB7XFxuICBiYWNrZ3JvdW5kOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTYge1xcbiAgYmFja2dyb3VuZDogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS03IHtcXG4gIGJhY2tncm91bmQ6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktOCB7XFxuICBiYWNrZ3JvdW5kOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTkge1xcbiAgYmFja2dyb3VuZDogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTExIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMTIge1xcbiAgYmFja2dyb3VuZDogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTE0IHtcXG4gIGJhY2tncm91bmQ6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleSB7XFxuICBiYWNrZ3JvdW5kOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMSB7XFxuICBiYWNrZ3JvdW5kOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMiB7XFxuICBiYWNrZ3JvdW5kOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMyB7XFxuICBiYWNrZ3JvdW5kOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNCB7XFxuICBiYWNrZ3JvdW5kOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNSB7XFxuICBiYWNrZ3JvdW5kOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNiB7XFxuICBiYWNrZ3JvdW5kOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNyB7XFxuICBiYWNrZ3JvdW5kOiAjNTQ2ZTdhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktOCB7XFxuICBiYWNrZ3JvdW5kOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktOSB7XFxuICBiYWNrZ3JvdW5kOiAjMzc0NzRmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTAge1xcbiAgYmFja2dyb3VuZDogIzI2MzIzOCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5LTExIHtcXG4gIGJhY2tncm91bmQ6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTMge1xcbiAgYmFja2dyb3VuZDogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5LTE0IHtcXG4gIGJhY2tncm91bmQ6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLnNoYWRvdy10cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4yOHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAhaW1wb3J0YW50O1xcbn1cXG4uc2hhZG93LTEge1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMSB7XFxuICBib3gtc2hhZG93OiAwIC0xcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMXB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0ycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIge1xcbiAgYm94LXNoYWRvdzogMCAtMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMyB7XFxuICBib3gtc2hhZG93OiAwIDFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIDNweCA0cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0zIHtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0zcHggNHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTQge1xcbiAgYm94LXNoYWRvdzogMCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIDRweCA1cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTQge1xcbiAgYm94LXNoYWRvdzogMCAtMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtNHB4IDVweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTUge1xcbiAgYm94LXNoYWRvdzogMCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIDVweCA4cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAxcHggMTRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTUge1xcbiAgYm94LXNoYWRvdzogMCAtM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtNXB4IDhweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0xcHggMTRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTYge1xcbiAgYm94LXNoYWRvdzogMCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIDZweCAxMHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMXB4IDE4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC02IHtcXG4gIGJveC1zaGFkb3c6IDAgLTNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgLTZweCAxMHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTFweCAxOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNyB7XFxuICBib3gtc2hhZG93OiAwIDRweCA1cHggLTJweCByZ2JhKDAsMCwwLDAuMiksIDAgN3B4IDEwcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtNyB7XFxuICBib3gtc2hhZG93OiAwIC00cHggNXB4IC0ycHggcmdiYSgwLDAsMCwwLjIpLCAwIC03cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctOCB7XFxuICBib3gtc2hhZG93OiAwIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtOCB7XFxuICBib3gtc2hhZG93OiAwIC01cHggNXB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIC04cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctOSB7XFxuICBib3gtc2hhZG93OiAwIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgOXB4IDEycHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDE2cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtOSB7XFxuICBib3gtc2hhZG93OiAwIC01cHggNnB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIC05cHggMTJweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDE2cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTAge1xcbiAgYm94LXNoYWRvdzogMCA2cHggNnB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIDEwcHggMTRweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xMCB7XFxuICBib3gtc2hhZG93OiAwIC02cHggNnB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xMHB4IDE0cHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTRweCAxOHB4IDNweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTExIHtcXG4gIGJveC1zaGFkb3c6IDAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxMXB4IDE1cHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNHB4IDIwcHggM3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTEge1xcbiAgYm94LXNoYWRvdzogMCAtNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC00cHggMjBweCAzcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xMiB7XFxuICBib3gtc2hhZG93OiAwIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTEyIHtcXG4gIGJveC1zaGFkb3c6IDAgLTdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgLTEycHggMTdweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTMge1xcbiAgYm94LXNoYWRvdzogMCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIDEzcHggMTlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xMyB7XFxuICBib3gtc2hhZG93OiAwIC03cHggOHB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xM3B4IDE5cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTVweCAyNHB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTE0IHtcXG4gIGJveC1zaGFkb3c6IDAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxNHB4IDIxcHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNXB4IDI2cHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTQge1xcbiAgYm94LXNoYWRvdzogMCAtN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC01cHggMjZweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xNSB7XFxuICBib3gtc2hhZG93OiAwIDhweCA5cHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDZweCAyOHB4IDVweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTE1IHtcXG4gIGJveC1zaGFkb3c6IDAgLThweCA5cHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE1cHggMjJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNnB4IDI4cHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTYge1xcbiAgYm94LXNoYWRvdzogMCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTYge1xcbiAgYm94LXNoYWRvdzogMCAtOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE2cHggMjRweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTcge1xcbiAgYm94LXNoYWRvdzogMCA4cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNnB4IDMycHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTcge1xcbiAgYm94LXNoYWRvdzogMCAtOHB4IDExcHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE3cHggMjZweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNnB4IDMycHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTgge1xcbiAgYm94LXNoYWRvdzogMCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxOHB4IDI4cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgN3B4IDM0cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTgge1xcbiAgYm94LXNoYWRvdzogMCAtOXB4IDExcHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE4cHggMjhweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtN3B4IDM0cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTkge1xcbiAgYm94LXNoYWRvdzogMCA5cHggMTJweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxOXB4IDI5cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTkge1xcbiAgYm94LXNoYWRvdzogMCAtOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE5cHggMjlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMjAge1xcbiAgYm94LXNoYWRvdzogMCAxMHB4IDEzcHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDhweCAzOHB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIwIHtcXG4gIGJveC1zaGFkb3c6IDAgLTEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC04cHggMzhweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yMSB7XFxuICBib3gtc2hhZG93OiAwIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOHB4IDQwcHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjEge1xcbiAgYm94LXNoYWRvdzogMCAtMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLThweCA0MHB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTIyIHtcXG4gIGJveC1zaGFkb3c6IDAgMTBweCAxNHB4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA4cHggNDJweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0yMiB7XFxuICBib3gtc2hhZG93OiAwIC0xMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgLTIycHggMzVweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMjMge1xcbiAgYm94LXNoYWRvdzogMCAxMXB4IDE0cHggLTdweCByZ2JhKDAsMCwwLDAuMiksIDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDlweCA0NHB4IDhweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIzIHtcXG4gIGJveC1zaGFkb3c6IDAgLTExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC05cHggNDRweCA4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yNCB7XFxuICBib3gtc2hhZG93OiAwIDExcHggMTVweCAtN3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjQge1xcbiAgYm94LXNoYWRvdzogMCAtMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTlweCA0NnB4IDhweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ubm8tc2hhZG93LFxcbi5zaGFkb3ctMCB7XFxuICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5pbnNldC1zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogMCA3cHggOXB4IC03cHggcmdiYSgwLDAsMCwwLjcpIGluc2V0ICFpbXBvcnRhbnQ7XFxufVxcbi56LW1hcmdpbmFscyB7XFxuICB6LWluZGV4OiAyMDAwO1xcbn1cXG4uei1ub3RpZnkge1xcbiAgei1pbmRleDogOTUwMDtcXG59XFxuLnotZnVsbHNjcmVlbiB7XFxuICB6LWluZGV4OiA2MDAwO1xcbn1cXG4uei1pbmhlcml0IHtcXG4gIHotaW5kZXg6IGluaGVyaXQgIWltcG9ydGFudDtcXG59XFxuLnJvdyxcXG4uY29sdW1uLFxcbi5mbGV4IHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG4ucm93LmlubGluZSxcXG4uY29sdW1uLmlubGluZSxcXG4uZmxleC5pbmxpbmUge1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcbi5yb3cucmV2ZXJzZSB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG4uY29sdW1uIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLmNvbHVtbi5yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxufVxcbi53cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG4ubm8td3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICAgICAgZmxleC13cmFwOiBub3dyYXA7XFxufVxcbi5yZXZlcnNlLXdyYXAge1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xcbiAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xcbn1cXG4ub3JkZXItZmlyc3Qge1xcbiAgLW1zLWZsZXgtb3JkZXI6IC0xMDAwMDtcXG4gICAgICBvcmRlcjogLTEwMDAwO1xcbn1cXG4ub3JkZXItbGFzdCB7XFxuICAtbXMtZmxleC1vcmRlcjogMTAwMDA7XFxuICAgICAgb3JkZXI6IDEwMDAwO1xcbn1cXG4ub3JkZXItbm9uZSB7XFxuICAtbXMtZmxleC1vcmRlcjogMDtcXG4gICAgICBvcmRlcjogMDtcXG59XFxuLmp1c3RpZnktc3RhcnQge1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG4uanVzdGlmeS1lbmQge1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcbi5qdXN0aWZ5LWNlbnRlcixcXG4uZmxleC1jZW50ZXIge1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4uanVzdGlmeS1iZXR3ZWVuIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uanVzdGlmeS1hcm91bmQge1xcbiAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuLml0ZW1zLXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuLml0ZW1zLWVuZCB7XFxuICAtbXMtZmxleC1hbGlnbjogZW5kO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG59XFxuLml0ZW1zLWNlbnRlcixcXG4uZmxleC1jZW50ZXIge1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uaXRlbXMtYmFzZWxpbmUge1xcbiAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcXG59XFxuLml0ZW1zLXN0cmV0Y2gge1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XFxuICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcbi5jb250ZW50LXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7XFxuICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcXG59XFxuLmNvbnRlbnQtZW5kIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kO1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG4uY29udGVudC1jZW50ZXIge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7XFxuICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xcbn1cXG4uY29udGVudC1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaDtcXG4gICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xcbn1cXG4uY29udGVudC1iZXR3ZWVuIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTtcXG4gICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uY29udGVudC1hcm91bmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlO1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuLnNlbGYtc3RhcnQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQ7XFxuICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG59XFxuLnNlbGYtZW5kIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZDtcXG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLnNlbGYtY2VudGVyIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcXG4gICAgICAtbXMtZ3JpZC1yb3ctYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi5zZWxmLWJhc2VsaW5lIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lO1xcbn1cXG4uc2VsZi1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2g7XFxuICAgICAgLW1zLWdyaWQtcm93LWFsaWduOiBzdHJldGNoO1xcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxufVxcbi5ndXR0ZXIteC1ub25lLFxcbi5ndXR0ZXItbm9uZSB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuLmd1dHRlci14LW5vbmUgPiBkaXYsXFxuLmd1dHRlci1ub25lID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLmd1dHRlci15LW5vbmUsXFxuLmd1dHRlci1ub25lIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5ndXR0ZXIteS1ub25lID4gZGl2LFxcbi5ndXR0ZXItbm9uZSA+IGRpdiB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLmd1dHRlci14LXhzLFxcbi5ndXR0ZXIteHMge1xcbiAgbWFyZ2luLWxlZnQ6IC04cHg7XFxufVxcbi5ndXR0ZXIteC14cyA+IGRpdixcXG4uZ3V0dGVyLXhzID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4uZ3V0dGVyLXkteHMsXFxuLmd1dHRlci14cyB7XFxuICBtYXJnaW4tdG9wOiAtOHB4O1xcbn1cXG4uZ3V0dGVyLXkteHMgPiBkaXYsXFxuLmd1dHRlci14cyA+IGRpdiB7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbn1cXG4uZ3V0dGVyLXgtc20sXFxuLmd1dHRlci1zbSB7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxufVxcbi5ndXR0ZXIteC1zbSA+IGRpdixcXG4uZ3V0dGVyLXNtID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogMTZweDtcXG59XFxuLmd1dHRlci15LXNtLFxcbi5ndXR0ZXItc20ge1xcbiAgbWFyZ2luLXRvcDogLTE2cHg7XFxufVxcbi5ndXR0ZXIteS1zbSA+IGRpdixcXG4uZ3V0dGVyLXNtID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiAxNnB4O1xcbn1cXG4uZ3V0dGVyLXgtbWQsXFxuLmd1dHRlci1tZCB7XFxuICBtYXJnaW4tbGVmdDogLTMycHg7XFxufVxcbi5ndXR0ZXIteC1tZCA+IGRpdixcXG4uZ3V0dGVyLW1kID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogMzJweDtcXG59XFxuLmd1dHRlci15LW1kLFxcbi5ndXR0ZXItbWQge1xcbiAgbWFyZ2luLXRvcDogLTMycHg7XFxufVxcbi5ndXR0ZXIteS1tZCA+IGRpdixcXG4uZ3V0dGVyLW1kID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiAzMnB4O1xcbn1cXG4uZ3V0dGVyLXgtbGcsXFxuLmd1dHRlci1sZyB7XFxuICBtYXJnaW4tbGVmdDogLTQ4cHg7XFxufVxcbi5ndXR0ZXIteC1sZyA+IGRpdixcXG4uZ3V0dGVyLWxnID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogNDhweDtcXG59XFxuLmd1dHRlci15LWxnLFxcbi5ndXR0ZXItbGcge1xcbiAgbWFyZ2luLXRvcDogLTQ4cHg7XFxufVxcbi5ndXR0ZXIteS1sZyA+IGRpdixcXG4uZ3V0dGVyLWxnID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiA0OHB4O1xcbn1cXG4uZ3V0dGVyLXgteGwsXFxuLmd1dHRlci14bCB7XFxuICBtYXJnaW4tbGVmdDogLTY0cHg7XFxufVxcbi5ndXR0ZXIteC14bCA+IGRpdixcXG4uZ3V0dGVyLXhsID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogNjRweDtcXG59XFxuLmd1dHRlci15LXhsLFxcbi5ndXR0ZXIteGwge1xcbiAgbWFyZ2luLXRvcDogLTY0cHg7XFxufVxcbi5ndXR0ZXIteS14bCA+IGRpdixcXG4uZ3V0dGVyLXhsID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiA2NHB4O1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMCkge1xcbiAgLnJvdyA+IC5jb2wsXFxuICAucm93ID4gLmNvbC14cyxcXG4gIC5yb3cgPiAuY29sLWF1dG8sXFxuICAucm93ID4gLmNvbC14cy1hdXRvLFxcbiAgLnJvdyA+IC5jb2wtZ3JvdyxcXG4gIC5yb3cgPiAuY29sLXhzLWdyb3csXFxuICAucm93ID4gLmNvbC0wLFxcbiAgLnJvdyA+IC5jb2wteHMtMCxcXG4gIC5yb3cgPiAuY29sLTEsXFxuICAucm93ID4gLmNvbC14cy0xLFxcbiAgLnJvdyA+IC5jb2wtMixcXG4gIC5yb3cgPiAuY29sLXhzLTIsXFxuICAucm93ID4gLmNvbC0zLFxcbiAgLnJvdyA+IC5jb2wteHMtMyxcXG4gIC5yb3cgPiAuY29sLTQsXFxuICAucm93ID4gLmNvbC14cy00LFxcbiAgLnJvdyA+IC5jb2wtNSxcXG4gIC5yb3cgPiAuY29sLXhzLTUsXFxuICAucm93ID4gLmNvbC02LFxcbiAgLnJvdyA+IC5jb2wteHMtNixcXG4gIC5yb3cgPiAuY29sLTcsXFxuICAucm93ID4gLmNvbC14cy03LFxcbiAgLnJvdyA+IC5jb2wtOCxcXG4gIC5yb3cgPiAuY29sLXhzLTgsXFxuICAucm93ID4gLmNvbC05LFxcbiAgLnJvdyA+IC5jb2wteHMtOSxcXG4gIC5yb3cgPiAuY29sLTEwLFxcbiAgLnJvdyA+IC5jb2wteHMtMTAsXFxuICAucm93ID4gLmNvbC0xMSxcXG4gIC5yb3cgPiAuY29sLXhzLTExLFxcbiAgLnJvdyA+IC5jb2wtMTIsXFxuICAucm93ID4gLmNvbC14cy0xMixcXG4gIC5mbGV4ID4gLmNvbCxcXG4gIC5mbGV4ID4gLmNvbC14cyxcXG4gIC5mbGV4ID4gLmNvbC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXhzLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14cy1ncm93LFxcbiAgLmZsZXggPiAuY29sLTAsXFxuICAuZmxleCA+IC5jb2wteHMtMCxcXG4gIC5mbGV4ID4gLmNvbC0xLFxcbiAgLmZsZXggPiAuY29sLXhzLTEsXFxuICAuZmxleCA+IC5jb2wtMixcXG4gIC5mbGV4ID4gLmNvbC14cy0yLFxcbiAgLmZsZXggPiAuY29sLTMsXFxuICAuZmxleCA+IC5jb2wteHMtMyxcXG4gIC5mbGV4ID4gLmNvbC00LFxcbiAgLmZsZXggPiAuY29sLXhzLTQsXFxuICAuZmxleCA+IC5jb2wtNSxcXG4gIC5mbGV4ID4gLmNvbC14cy01LFxcbiAgLmZsZXggPiAuY29sLTYsXFxuICAuZmxleCA+IC5jb2wteHMtNixcXG4gIC5mbGV4ID4gLmNvbC03LFxcbiAgLmZsZXggPiAuY29sLXhzLTcsXFxuICAuZmxleCA+IC5jb2wtOCxcXG4gIC5mbGV4ID4gLmNvbC14cy04LFxcbiAgLmZsZXggPiAuY29sLTksXFxuICAuZmxleCA+IC5jb2wteHMtOSxcXG4gIC5mbGV4ID4gLmNvbC0xMCxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMCxcXG4gIC5mbGV4ID4gLmNvbC0xMSxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMSxcXG4gIC5mbGV4ID4gLmNvbC0xMixcXG4gIC5mbGV4ID4gLmNvbC14cy0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMsXFxuICAuY29sdW1uID4gLmNvbC1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC14cy1ncm93LFxcbiAgLmNvbHVtbiA+IC5jb2wtMCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTAsXFxuICAuY29sdW1uID4gLmNvbC0xLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMSxcXG4gIC5jb2x1bW4gPiAuY29sLTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0yLFxcbiAgLmNvbHVtbiA+IC5jb2wtMyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTMsXFxuICAuY29sdW1uID4gLmNvbC00LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNCxcXG4gIC5jb2x1bW4gPiAuY29sLTUsXFxuICAuY29sdW1uID4gLmNvbC14cy01LFxcbiAgLmNvbHVtbiA+IC5jb2wtNixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTYsXFxuICAuY29sdW1uID4gLmNvbC03LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNyxcXG4gIC5jb2x1bW4gPiAuY29sLTgsXFxuICAuY29sdW1uID4gLmNvbC14cy04LFxcbiAgLmNvbHVtbiA+IC5jb2wtOSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTksXFxuICAuY29sdW1uID4gLmNvbC0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wtMTEsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLTEyLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTIsXFxuICAuZmxleCA+IC5jb2wsXFxuICAuZmxleCA+IC5jb2wteHMsXFxuICAuZmxleCA+IC5jb2wtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC14cy1hdXRvLFxcbiAgLmZsZXggPiAuY29sLWdyb3csXFxuICAuZmxleCA+IC5jb2wteHMtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC0wLFxcbiAgLmZsZXggPiAuY29sLXhzLTAsXFxuICAuZmxleCA+IC5jb2wtMSxcXG4gIC5mbGV4ID4gLmNvbC14cy0xLFxcbiAgLmZsZXggPiAuY29sLTIsXFxuICAuZmxleCA+IC5jb2wteHMtMixcXG4gIC5mbGV4ID4gLmNvbC0zLFxcbiAgLmZsZXggPiAuY29sLXhzLTMsXFxuICAuZmxleCA+IC5jb2wtNCxcXG4gIC5mbGV4ID4gLmNvbC14cy00LFxcbiAgLmZsZXggPiAuY29sLTUsXFxuICAuZmxleCA+IC5jb2wteHMtNSxcXG4gIC5mbGV4ID4gLmNvbC02LFxcbiAgLmZsZXggPiAuY29sLXhzLTYsXFxuICAuZmxleCA+IC5jb2wtNyxcXG4gIC5mbGV4ID4gLmNvbC14cy03LFxcbiAgLmZsZXggPiAuY29sLTgsXFxuICAuZmxleCA+IC5jb2wteHMtOCxcXG4gIC5mbGV4ID4gLmNvbC05LFxcbiAgLmZsZXggPiAuY29sLXhzLTksXFxuICAuZmxleCA+IC5jb2wtMTAsXFxuICAuZmxleCA+IC5jb2wteHMtMTAsXFxuICAuZmxleCA+IC5jb2wtMTEsXFxuICAuZmxleCA+IC5jb2wteHMtMTEsXFxuICAuZmxleCA+IC5jb2wtMTIsXFxuICAuZmxleCA+IC5jb2wteHMtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLFxcbiAgLmNvbC14cyB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wtYXV0byxcXG4gIC5jb2wteHMtYXV0byxcXG4gIC5jb2wtMCxcXG4gIC5jb2wteHMtMCxcXG4gIC5jb2wtMSxcXG4gIC5jb2wteHMtMSxcXG4gIC5jb2wtMixcXG4gIC5jb2wteHMtMixcXG4gIC5jb2wtMyxcXG4gIC5jb2wteHMtMyxcXG4gIC5jb2wtNCxcXG4gIC5jb2wteHMtNCxcXG4gIC5jb2wtNSxcXG4gIC5jb2wteHMtNSxcXG4gIC5jb2wtNixcXG4gIC5jb2wteHMtNixcXG4gIC5jb2wtNyxcXG4gIC5jb2wteHMtNyxcXG4gIC5jb2wtOCxcXG4gIC5jb2wteHMtOCxcXG4gIC5jb2wtOSxcXG4gIC5jb2wteHMtOSxcXG4gIC5jb2wtMTAsXFxuICAuY29sLXhzLTEwLFxcbiAgLmNvbC0xMSxcXG4gIC5jb2wteHMtMTEsXFxuICAuY29sLTEyLFxcbiAgLmNvbC14cy0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC1ncm93LFxcbiAgLmNvbC14cy1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0wLFxcbiAgLnJvdyA+IC5jb2wteHMtMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMCxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMSxcXG4gIC5yb3cgPiAuY29sLXhzLTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMSxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTEsXFxuICAuY29sdW1uID4gLmNvbC14cy0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTIsXFxuICAucm93ID4gLmNvbC14cy0yIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0yLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0zLFxcbiAgLnJvdyA+IC5jb2wteHMtMyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTMsXFxuICAucm93ID4gLm9mZnNldC14cy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTMsXFxuICAuY29sdW1uID4gLmNvbC14cy0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtNCxcXG4gIC5yb3cgPiAuY29sLXhzLTQge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTQsXFxuICAucm93ID4gLm9mZnNldC14cy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTUsXFxuICAucm93ID4gLmNvbC14cy01IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNDEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC01LFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTUsXFxuICAuY29sdW1uID4gLmNvbC14cy01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC02LFxcbiAgLnJvdyA+IC5jb2wteHMtNiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTYsXFxuICAucm93ID4gLm9mZnNldC14cy02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTYsXFxuICAuY29sdW1uID4gLmNvbC14cy02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtNyxcXG4gIC5yb3cgPiAuY29sLXhzLTcge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTcsXFxuICAucm93ID4gLm9mZnNldC14cy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTgsXFxuICAucm93ID4gLmNvbC14cy04IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNjYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC04LFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTgsXFxuICAuY29sdW1uID4gLmNvbC14cy04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC05LFxcbiAgLnJvdyA+IC5jb2wteHMtOSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTksXFxuICAucm93ID4gLm9mZnNldC14cy05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTksXFxuICAuY29sdW1uID4gLmNvbC14cy05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMTAsXFxuICAucm93ID4gLmNvbC14cy0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMTAsXFxuICAucm93ID4gLm9mZnNldC14cy0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTExLFxcbiAgLnJvdyA+IC5jb2wteHMtMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTExLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0xMixcXG4gIC5yb3cgPiAuY29sLXhzLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTEyLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTEyLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5yb3cgPiAuY29sLXNtLFxcbiAgLnJvdyA+IC5jb2wtc20tYXV0byxcXG4gIC5yb3cgPiAuY29sLXNtLWdyb3csXFxuICAucm93ID4gLmNvbC1zbS0wLFxcbiAgLnJvdyA+IC5jb2wtc20tMSxcXG4gIC5yb3cgPiAuY29sLXNtLTIsXFxuICAucm93ID4gLmNvbC1zbS0zLFxcbiAgLnJvdyA+IC5jb2wtc20tNCxcXG4gIC5yb3cgPiAuY29sLXNtLTUsXFxuICAucm93ID4gLmNvbC1zbS02LFxcbiAgLnJvdyA+IC5jb2wtc20tNyxcXG4gIC5yb3cgPiAuY29sLXNtLTgsXFxuICAucm93ID4gLmNvbC1zbS05LFxcbiAgLnJvdyA+IC5jb2wtc20tMTAsXFxuICAucm93ID4gLmNvbC1zbS0xMSxcXG4gIC5yb3cgPiAuY29sLXNtLTEyLFxcbiAgLmZsZXggPiAuY29sLXNtLFxcbiAgLmZsZXggPiAuY29sLXNtLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtc20tZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1zbS0wLFxcbiAgLmZsZXggPiAuY29sLXNtLTEsXFxuICAuZmxleCA+IC5jb2wtc20tMixcXG4gIC5mbGV4ID4gLmNvbC1zbS0zLFxcbiAgLmZsZXggPiAuY29sLXNtLTQsXFxuICAuZmxleCA+IC5jb2wtc20tNSxcXG4gIC5mbGV4ID4gLmNvbC1zbS02LFxcbiAgLmZsZXggPiAuY29sLXNtLTcsXFxuICAuZmxleCA+IC5jb2wtc20tOCxcXG4gIC5mbGV4ID4gLmNvbC1zbS05LFxcbiAgLmZsZXggPiAuY29sLXNtLTEwLFxcbiAgLmZsZXggPiAuY29sLXNtLTExLFxcbiAgLmZsZXggPiAuY29sLXNtLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20sXFxuICAuY29sdW1uID4gLmNvbC1zbS1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTAsXFxuICAuY29sdW1uID4gLmNvbC1zbS0xLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMixcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTMsXFxuICAuY29sdW1uID4gLmNvbC1zbS00LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNSxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTYsXFxuICAuY29sdW1uID4gLmNvbC1zbS03LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOCxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTksXFxuICAuY29sdW1uID4gLmNvbC1zbS0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMTIsXFxuICAuZmxleCA+IC5jb2wtc20sXFxuICAuZmxleCA+IC5jb2wtc20tYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1zbS1ncm93LFxcbiAgLmZsZXggPiAuY29sLXNtLTAsXFxuICAuZmxleCA+IC5jb2wtc20tMSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0yLFxcbiAgLmZsZXggPiAuY29sLXNtLTMsXFxuICAuZmxleCA+IC5jb2wtc20tNCxcXG4gIC5mbGV4ID4gLmNvbC1zbS01LFxcbiAgLmZsZXggPiAuY29sLXNtLTYsXFxuICAuZmxleCA+IC5jb2wtc20tNyxcXG4gIC5mbGV4ID4gLmNvbC1zbS04LFxcbiAgLmZsZXggPiAuY29sLXNtLTksXFxuICAuZmxleCA+IC5jb2wtc20tMTAsXFxuICAuZmxleCA+IC5jb2wtc20tMTEsXFxuICAuZmxleCA+IC5jb2wtc20tMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLXNtIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC1zbS1hdXRvLFxcbiAgLmNvbC1zbS0wLFxcbiAgLmNvbC1zbS0xLFxcbiAgLmNvbC1zbS0yLFxcbiAgLmNvbC1zbS0zLFxcbiAgLmNvbC1zbS00LFxcbiAgLmNvbC1zbS01LFxcbiAgLmNvbC1zbS02LFxcbiAgLmNvbC1zbS03LFxcbiAgLmNvbC1zbS04LFxcbiAgLmNvbC1zbS05LFxcbiAgLmNvbC1zbS0xMCxcXG4gIC5jb2wtc20tMTEsXFxuICAuY29sLXNtLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLXNtLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0xIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDE2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTMge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAyNSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS00IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMzMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tNSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDQxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTYge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS03IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tOCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDY2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTkge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA3NSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLnJvdyA+IC5jb2wtbWQsXFxuICAucm93ID4gLmNvbC1tZC1hdXRvLFxcbiAgLnJvdyA+IC5jb2wtbWQtZ3JvdyxcXG4gIC5yb3cgPiAuY29sLW1kLTAsXFxuICAucm93ID4gLmNvbC1tZC0xLFxcbiAgLnJvdyA+IC5jb2wtbWQtMixcXG4gIC5yb3cgPiAuY29sLW1kLTMsXFxuICAucm93ID4gLmNvbC1tZC00LFxcbiAgLnJvdyA+IC5jb2wtbWQtNSxcXG4gIC5yb3cgPiAuY29sLW1kLTYsXFxuICAucm93ID4gLmNvbC1tZC03LFxcbiAgLnJvdyA+IC5jb2wtbWQtOCxcXG4gIC5yb3cgPiAuY29sLW1kLTksXFxuICAucm93ID4gLmNvbC1tZC0xMCxcXG4gIC5yb3cgPiAuY29sLW1kLTExLFxcbiAgLnJvdyA+IC5jb2wtbWQtMTIsXFxuICAuZmxleCA+IC5jb2wtbWQsXFxuICAuZmxleCA+IC5jb2wtbWQtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1tZC1ncm93LFxcbiAgLmZsZXggPiAuY29sLW1kLTAsXFxuICAuZmxleCA+IC5jb2wtbWQtMSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0yLFxcbiAgLmZsZXggPiAuY29sLW1kLTMsXFxuICAuZmxleCA+IC5jb2wtbWQtNCxcXG4gIC5mbGV4ID4gLmNvbC1tZC01LFxcbiAgLmZsZXggPiAuY29sLW1kLTYsXFxuICAuZmxleCA+IC5jb2wtbWQtNyxcXG4gIC5mbGV4ID4gLmNvbC1tZC04LFxcbiAgLmZsZXggPiAuY29sLW1kLTksXFxuICAuZmxleCA+IC5jb2wtbWQtMTAsXFxuICAuZmxleCA+IC5jb2wtbWQtMTEsXFxuICAuZmxleCA+IC5jb2wtbWQtMTIge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWluLXdpZHRoOiAwO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZCxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLWF1dG8sXFxuICAuY29sdW1uID4gLmNvbC1tZC1ncm93LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMCxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEsXFxuICAuY29sdW1uID4gLmNvbC1tZC0yLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMyxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTQsXFxuICAuY29sdW1uID4gLmNvbC1tZC01LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNixcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTcsXFxuICAuY29sdW1uID4gLmNvbC1tZC04LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtOSxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTEsXFxuICAuY29sdW1uID4gLmNvbC1tZC0xMixcXG4gIC5mbGV4ID4gLmNvbC1tZCxcXG4gIC5mbGV4ID4gLmNvbC1tZC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLW1kLWdyb3csXFxuICAuZmxleCA+IC5jb2wtbWQtMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xLFxcbiAgLmZsZXggPiAuY29sLW1kLTIsXFxuICAuZmxleCA+IC5jb2wtbWQtMyxcXG4gIC5mbGV4ID4gLmNvbC1tZC00LFxcbiAgLmZsZXggPiAuY29sLW1kLTUsXFxuICAuZmxleCA+IC5jb2wtbWQtNixcXG4gIC5mbGV4ID4gLmNvbC1tZC03LFxcbiAgLmZsZXggPiAuY29sLW1kLTgsXFxuICAuZmxleCA+IC5jb2wtbWQtOSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG4gICAgbWF4LWhlaWdodDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbWQge1xcbiAgICAtbXMtZmxleDogMTAwMDAgMSAwJTtcXG4gICAgICAgIGZsZXg6IDEwMDAwIDEgMCU7XFxuICB9XFxuICAuY29sLW1kLWF1dG8sXFxuICAuY29sLW1kLTAsXFxuICAuY29sLW1kLTEsXFxuICAuY29sLW1kLTIsXFxuICAuY29sLW1kLTMsXFxuICAuY29sLW1kLTQsXFxuICAuY29sLW1kLTUsXFxuICAuY29sLW1kLTYsXFxuICAuY29sLW1kLTcsXFxuICAuY29sLW1kLTgsXFxuICAuY29sLW1kLTksXFxuICAuY29sLW1kLTEwLFxcbiAgLmNvbC1tZC0xMSxcXG4gIC5jb2wtbWQtMTIge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgICAgICBmbGV4OiAwIDAgYXV0bztcXG4gIH1cXG4gIC5jb2wtbWQtZ3JvdyB7XFxuICAgIC1tcy1mbGV4OiAxIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDEgMCBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTAge1xcbiAgICBoZWlnaHQ6IDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMSB7XFxuICAgIGhlaWdodDogOC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0yIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMiB7XFxuICAgIGhlaWdodDogMTYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMyB7XFxuICAgIGhlaWdodDogMjUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTQge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC00IHtcXG4gICAgaGVpZ2h0OiAzMy4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC01IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNDEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNSB7XFxuICAgIGhlaWdodDogNDEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtNiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNiB7XFxuICAgIGhlaWdodDogNTAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTcge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC03IHtcXG4gICAgaGVpZ2h0OiA1OC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC04IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNjYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtOCB7XFxuICAgIGhlaWdodDogNjYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtOSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtOSB7XFxuICAgIGhlaWdodDogNzUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTEwIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogODMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEwIHtcXG4gICAgaGVpZ2h0OiA4My4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0xMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDkxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0xMSB7XFxuICAgIGhlaWdodDogOTEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEyIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAucm93ID4gLmNvbC1sZyxcXG4gIC5yb3cgPiAuY29sLWxnLWF1dG8sXFxuICAucm93ID4gLmNvbC1sZy1ncm93LFxcbiAgLnJvdyA+IC5jb2wtbGctMCxcXG4gIC5yb3cgPiAuY29sLWxnLTEsXFxuICAucm93ID4gLmNvbC1sZy0yLFxcbiAgLnJvdyA+IC5jb2wtbGctMyxcXG4gIC5yb3cgPiAuY29sLWxnLTQsXFxuICAucm93ID4gLmNvbC1sZy01LFxcbiAgLnJvdyA+IC5jb2wtbGctNixcXG4gIC5yb3cgPiAuY29sLWxnLTcsXFxuICAucm93ID4gLmNvbC1sZy04LFxcbiAgLnJvdyA+IC5jb2wtbGctOSxcXG4gIC5yb3cgPiAuY29sLWxnLTEwLFxcbiAgLnJvdyA+IC5jb2wtbGctMTEsXFxuICAucm93ID4gLmNvbC1sZy0xMixcXG4gIC5mbGV4ID4gLmNvbC1sZyxcXG4gIC5mbGV4ID4gLmNvbC1sZy1hdXRvLFxcbiAgLmZsZXggPiAuY29sLWxnLWdyb3csXFxuICAuZmxleCA+IC5jb2wtbGctMCxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xLFxcbiAgLmZsZXggPiAuY29sLWxnLTIsXFxuICAuZmxleCA+IC5jb2wtbGctMyxcXG4gIC5mbGV4ID4gLmNvbC1sZy00LFxcbiAgLmZsZXggPiAuY29sLWxnLTUsXFxuICAuZmxleCA+IC5jb2wtbGctNixcXG4gIC5mbGV4ID4gLmNvbC1sZy03LFxcbiAgLmZsZXggPiAuY29sLWxnLTgsXFxuICAuZmxleCA+IC5jb2wtbGctOSxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xMCxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xMSxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC1sZy0wLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMSxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTIsXFxuICAuY29sdW1uID4gLmNvbC1sZy0zLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNCxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTUsXFxuICAuY29sdW1uID4gLmNvbC1sZy02LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNyxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTgsXFxuICAuY29sdW1uID4gLmNvbC1sZy05LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTAsXFxuICAuY29sdW1uID4gLmNvbC1sZy0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTEyLFxcbiAgLmZsZXggPiAuY29sLWxnLFxcbiAgLmZsZXggPiAuY29sLWxnLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtbGctZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1sZy0wLFxcbiAgLmZsZXggPiAuY29sLWxnLTEsXFxuICAuZmxleCA+IC5jb2wtbGctMixcXG4gIC5mbGV4ID4gLmNvbC1sZy0zLFxcbiAgLmZsZXggPiAuY29sLWxnLTQsXFxuICAuZmxleCA+IC5jb2wtbGctNSxcXG4gIC5mbGV4ID4gLmNvbC1sZy02LFxcbiAgLmZsZXggPiAuY29sLWxnLTcsXFxuICAuZmxleCA+IC5jb2wtbGctOCxcXG4gIC5mbGV4ID4gLmNvbC1sZy05LFxcbiAgLmZsZXggPiAuY29sLWxnLTEwLFxcbiAgLmZsZXggPiAuY29sLWxnLTExLFxcbiAgLmZsZXggPiAuY29sLWxnLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1sZyB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wtbGctYXV0byxcXG4gIC5jb2wtbGctMCxcXG4gIC5jb2wtbGctMSxcXG4gIC5jb2wtbGctMixcXG4gIC5jb2wtbGctMyxcXG4gIC5jb2wtbGctNCxcXG4gIC5jb2wtbGctNSxcXG4gIC5jb2wtbGctNixcXG4gIC5jb2wtbGctNyxcXG4gIC5jb2wtbGctOCxcXG4gIC5jb2wtbGctOSxcXG4gIC5jb2wtbGctMTAsXFxuICAuY29sLWxnLTExLFxcbiAgLmNvbC1sZy0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC1sZy1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4My4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTExIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOTEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAucm93ID4gLmNvbC14bCxcXG4gIC5yb3cgPiAuY29sLXhsLWF1dG8sXFxuICAucm93ID4gLmNvbC14bC1ncm93LFxcbiAgLnJvdyA+IC5jb2wteGwtMCxcXG4gIC5yb3cgPiAuY29sLXhsLTEsXFxuICAucm93ID4gLmNvbC14bC0yLFxcbiAgLnJvdyA+IC5jb2wteGwtMyxcXG4gIC5yb3cgPiAuY29sLXhsLTQsXFxuICAucm93ID4gLmNvbC14bC01LFxcbiAgLnJvdyA+IC5jb2wteGwtNixcXG4gIC5yb3cgPiAuY29sLXhsLTcsXFxuICAucm93ID4gLmNvbC14bC04LFxcbiAgLnJvdyA+IC5jb2wteGwtOSxcXG4gIC5yb3cgPiAuY29sLXhsLTEwLFxcbiAgLnJvdyA+IC5jb2wteGwtMTEsXFxuICAucm93ID4gLmNvbC14bC0xMixcXG4gIC5mbGV4ID4gLmNvbC14bCxcXG4gIC5mbGV4ID4gLmNvbC14bC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXhsLWdyb3csXFxuICAuZmxleCA+IC5jb2wteGwtMCxcXG4gIC5mbGV4ID4gLmNvbC14bC0xLFxcbiAgLmZsZXggPiAuY29sLXhsLTIsXFxuICAuZmxleCA+IC5jb2wteGwtMyxcXG4gIC5mbGV4ID4gLmNvbC14bC00LFxcbiAgLmZsZXggPiAuY29sLXhsLTUsXFxuICAuZmxleCA+IC5jb2wteGwtNixcXG4gIC5mbGV4ID4gLmNvbC14bC03LFxcbiAgLmZsZXggPiAuY29sLXhsLTgsXFxuICAuZmxleCA+IC5jb2wteGwtOSxcXG4gIC5mbGV4ID4gLmNvbC14bC0xMCxcXG4gIC5mbGV4ID4gLmNvbC14bC0xMSxcXG4gIC5mbGV4ID4gLmNvbC14bC0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC14bC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTIsXFxuICAuY29sdW1uID4gLmNvbC14bC0zLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNCxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTUsXFxuICAuY29sdW1uID4gLmNvbC14bC02LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNyxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTgsXFxuICAuY29sdW1uID4gLmNvbC14bC05LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTAsXFxuICAuY29sdW1uID4gLmNvbC14bC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTEyLFxcbiAgLmZsZXggPiAuY29sLXhsLFxcbiAgLmZsZXggPiAuY29sLXhsLWF1dG8sXFxuICAuZmxleCA+IC5jb2wteGwtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14bC0wLFxcbiAgLmZsZXggPiAuY29sLXhsLTEsXFxuICAuZmxleCA+IC5jb2wteGwtMixcXG4gIC5mbGV4ID4gLmNvbC14bC0zLFxcbiAgLmZsZXggPiAuY29sLXhsLTQsXFxuICAuZmxleCA+IC5jb2wteGwtNSxcXG4gIC5mbGV4ID4gLmNvbC14bC02LFxcbiAgLmZsZXggPiAuY29sLXhsLTcsXFxuICAuZmxleCA+IC5jb2wteGwtOCxcXG4gIC5mbGV4ID4gLmNvbC14bC05LFxcbiAgLmZsZXggPiAuY29sLXhsLTEwLFxcbiAgLmZsZXggPiAuY29sLXhsLTExLFxcbiAgLmZsZXggPiAuY29sLXhsLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbC14bCB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wteGwtYXV0byxcXG4gIC5jb2wteGwtMCxcXG4gIC5jb2wteGwtMSxcXG4gIC5jb2wteGwtMixcXG4gIC5jb2wteGwtMyxcXG4gIC5jb2wteGwtNCxcXG4gIC5jb2wteGwtNSxcXG4gIC5jb2wteGwtNixcXG4gIC5jb2wteGwtNyxcXG4gIC5jb2wteGwtOCxcXG4gIC5jb2wteGwtOSxcXG4gIC5jb2wteGwtMTAsXFxuICAuY29sLXhsLTExLFxcbiAgLmNvbC14bC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC14bC1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4My4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTExIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOTEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG4uYmFja2Ryb3Age1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yOHMgZWFzZS1pbjtcXG59XFxuLmJhY2tkcm9wLmFjdGl2ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG59XFxuLnJvdW5kLWJvcmRlcnMge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5nZW5lcmljLW1hcmdpbixcXG4uZ3JvdXAgPiAqIHtcXG4gIG1hcmdpbjogNXB4O1xcbn1cXG4ubm8tdHJhbnNpdGlvbiB7XFxuICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi50cmFuc2l0aW9uLTAge1xcbiAgdHJhbnNpdGlvbjogMHMgIWltcG9ydGFudDtcXG59XFxuLmdsb3NzeSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDAuMyksIHJnYmEoMjU1LDI1NSwyNTUsMCkgNTAlLCByZ2JhKDAsMCwwLDAuMTIpIDUxJSwgcmdiYSgwLDAsMCwwLjA0KSkgIWltcG9ydGFudDtcXG59XFxuLnEtcGxhY2Vob2xkZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXBsYWNlaG9sZGVyOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS1wbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLWJvZHktZnVsbHNjcmVlbi1taXhpbixcXG4ucS1ib2R5LXByZXZlbnQtc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLnEtbm8taW5wdXQtc3Bpbm5lciB7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1uby1pbnB1dC1zcGlubmVyOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxcbi5xLW5vLWlucHV0LXNwaW5uZXI6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5hLnEtbGluayB7XFxuICBvdXRsaW5lOiAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcbi5xLXNlbGVjdC1oaWdobGlnaHQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgxODksMTg5LDE4OSwwLjUpICFpbXBvcnRhbnQ7XFxufVxcbi5oaWdobGlnaHQtYW5kLWZhZGUge1xcbiAgYW5pbWF0aW9uOiBxLWhpZ2hsaWdodCAycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4udHJhbnNpdGlvbi1nZW5lcmljIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xcbn1cXG4uYW5pbWF0ZS1zcGluLFxcbi5hbmltYXRlLXNwaW4tcmV2ZXJzZSB7XFxuICBhbmltYXRpb246IHEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXIgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtc3Bpbi1yZXZlcnNlIHtcXG4gIGFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7XFxufVxcbi5hbmltYXRlLWJsaW5rIHtcXG4gIGFuaW1hdGlvbjogcS1ibGluayAxcyBzdGVwcyg1LCBzdGFydCkgaW5maW5pdGUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtcG9wIHtcXG4gIGFuaW1hdGlvbjogcS1wb3AgMC4ycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1zY2FsZSB7XFxuICBhbmltYXRpb246IHEtc2NhbGUgMC4ycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1mYWRlIHtcXG4gIGFuaW1hdGlvbjogcS1mYWRlIDAuMnMgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtYm91bmNlIHtcXG4gIGFuaW1hdGlvbjogcS1ib3VuY2UgMnMgaW5maW5pdGUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtc2hha2Uge1xcbiAgYW5pbWF0aW9uOiBxLXNoYWtlIDAuMTVzO1xcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7XFxufVxcbi5hbmltYXRlLXBvcHVwLXVwLFxcbi5hbmltYXRlLXBvcHVwLWRvd24ge1xcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbn1cXG4uYW5pbWF0ZS1wb3B1cC11cCA+ICosXFxuLmFuaW1hdGUtcG9wdXAtZG93biA+ICoge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC44MnMgY3ViaWMtYmV6aWVyKDAuNzg1LCAwLjEzNSwgMC4xNSwgMC44Nik7XFxufVxcbi5hbmltYXRlLXBvcHVwLWRvd24ge1xcbiAgYW5pbWF0aW9uOiBxLXBvcHVwLWRvd24gMC4zNnMgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wIDBweCAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1wb3B1cC11cCB7XFxuICBhbmltYXRpb246IHEtcG9wdXAtdXAgMC4zNnMgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgYm90dG9tIDBweCAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1mYWRlLWxlZnQge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC4zNnMgY3ViaWMtYmV6aWVyKDAuNzg1LCAwLjEzNSwgMC4xNSwgMC44NiksIHEtc2xpZGUtbGVmdCAwLjM2cyBlYXNlO1xcbn1cXG4uYW5pbWF0ZS1mYWRlLXJpZ2h0IHtcXG4gIGFuaW1hdGlvbjogcS1mYWRlIDAuMzZzIGN1YmljLWJlemllcigwLjc4NSwgMC4xMzUsIDAuMTUsIDAuODYpLCBxLXNsaWRlLXJpZ2h0IDAuMzZzIGVhc2U7XFxufVxcbi5hbmltYXRlZCB7XFxuICBhbmltYXRpb24tZHVyYXRpb246IDFzO1xcbiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcXG59XFxuLmFuaW1hdGVkLmluZmluaXRlIHtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xcbn1cXG4uYW5pbWF0ZWQuaGluZ2Uge1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAycztcXG59XFxuLmFuaW1hdGVkLmZsaXBPdXRYLFxcbi5hbmltYXRlZC5mbGlwT3V0WSxcXG4uYW5pbWF0ZWQuYm91bmNlSW4sXFxuLmFuaW1hdGVkLmJvdW5jZU91dCB7XFxuICBhbmltYXRpb24tZHVyYXRpb246IDAuNzVzO1xcbn1cXG4ubm9uLXNlbGVjdGFibGUge1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4uc2Nyb2xsLFxcbi5zY3JvbGwteCxcXG4uc2Nyb2xsLXkge1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG59XFxuLnNjcm9sbC14IHtcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxufVxcbi5zY3JvbGwteSB7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG4ubm8tc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLm5vLXBvaW50ZXItZXZlbnRzIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5hbGwtcG9pbnRlci1ldmVudHMge1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbCAhaW1wb3J0YW50O1xcbn1cXG4uY3Vyc29yLXBvaW50ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7XFxufVxcbi5jdXJzb3Itbm90LWFsbG93ZWQge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O1xcbn1cXG4uY3Vyc29yLWluaGVyaXQge1xcbiAgY3Vyc29yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcbi5yb3RhdGUtNDUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtOTAge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtMTM1IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0xODAge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucm90YXRlLTIwNSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgyMDVkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtMjcwIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0zMTUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMzE1ZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uZmxpcC1ob3Jpem9udGFsIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xcbn1cXG4uZmxpcC12ZXJ0aWNhbCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcXG59XFxuLmZsb2F0LWxlZnQge1xcbiAgZmxvYXQ6IGxlZnQ7XFxufVxcbi5mbG9hdC1yaWdodCB7XFxuICBmbG9hdDogcmlnaHQ7XFxufVxcbi5yZWxhdGl2ZS1wb3NpdGlvbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5maXhlZCxcXG4uZnVsbHNjcmVlbixcXG4uZml4ZWQtY2VudGVyLFxcbi5maXhlZC1ib3R0b20sXFxuLmZpeGVkLWxlZnQsXFxuLmZpeGVkLXJpZ2h0LFxcbi5maXhlZC10b3AsXFxuLmZpeGVkLXRvcC1sZWZ0LFxcbi5maXhlZC10b3AtcmlnaHQsXFxuLmZpeGVkLWJvdHRvbS1sZWZ0LFxcbi5maXhlZC1ib3R0b20tcmlnaHQge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG4uYWJzb2x1dGUsXFxuLmFic29sdXRlLWZ1bGwsXFxuLmFic29sdXRlLWNlbnRlcixcXG4uYWJzb2x1dGUtYm90dG9tLFxcbi5hYnNvbHV0ZS1sZWZ0LFxcbi5hYnNvbHV0ZS1yaWdodCxcXG4uYWJzb2x1dGUtdG9wLFxcbi5hYnNvbHV0ZS10b3AtbGVmdCxcXG4uYWJzb2x1dGUtdG9wLXJpZ2h0LFxcbi5hYnNvbHV0ZS1ib3R0b20tbGVmdCxcXG4uYWJzb2x1dGUtYm90dG9tLXJpZ2h0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLmZpeGVkLXRvcCxcXG4uYWJzb2x1dGUtdG9wIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG59XFxuLmZpeGVkLXJpZ2h0LFxcbi5hYnNvbHV0ZS1yaWdodCB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLmZpeGVkLWJvdHRvbSxcXG4uYWJzb2x1dGUtYm90dG9tIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLWxlZnQsXFxuLmFic29sdXRlLWxlZnQge1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLXRvcC1sZWZ0LFxcbi5hYnNvbHV0ZS10b3AtbGVmdCB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtdG9wLXJpZ2h0LFxcbi5hYnNvbHV0ZS10b3AtcmlnaHQge1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5maXhlZC1ib3R0b20tbGVmdCxcXG4uYWJzb2x1dGUtYm90dG9tLWxlZnQge1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLWJvdHRvbS1yaWdodCxcXG4uYWJzb2x1dGUtYm90dG9tLXJpZ2h0IHtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4uZnVsbHNjcmVlbiB7XFxuICB6LWluZGV4OiA2MDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xcbiAgbWF4LXdpZHRoOiAxMDB2dztcXG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xcbn1cXG4uYWJzb2x1dGUtZnVsbCxcXG4uZnVsbHNjcmVlbiB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbi5maXhlZC1jZW50ZXIsXFxuLmFic29sdXRlLWNlbnRlciB7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbn1cXG4udmVydGljYWwtdG9wIHtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDtcXG59XFxuLnZlcnRpY2FsLW1pZGRsZSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7XFxufVxcbi52ZXJ0aWNhbC1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50O1xcbn1cXG4ub24tbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IDEycHg7XFxufVxcbi5vbi1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogMTJweDtcXG59XFxuLnEtcmlwcGxlLWNvbnRhaW5lciB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgei1pbmRleDogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS1yaXBwbGUtYW5pbWF0aW9uIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIG9wYWNpdHk6IDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIHRyYW5zaXRpb246IDAuM3MgdHJhbnNmb3JtIGN1YmljLWJlemllcigwLjIsIDAuNCwgMC40LCAwLjkpLCAwLjNzIG9wYWNpdHkgY3ViaWMtYmV6aWVyKDAuMiwgMC40LCAwLjQsIDAuMSk7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5O1xcbn1cXG4ucS1yaXBwbGUtYW5pbWF0aW9uLWVudGVyIHtcXG4gIHRyYW5zaXRpb246IG5vbmU7XFxufVxcbi5xLXJpcHBsZS1hbmltYXRpb24tdmlzaWJsZSB7XFxuICBvcGFjaXR5OiAwLjE1O1xcbn1cXG4ucS1yYWRpYWwtcmlwcGxlIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTUwJTtcXG4gIGxlZnQ6IC01MCU7XFxuICB3aWR0aDogMjAwJTtcXG4gIGhlaWdodDogMjAwJTtcXG59XFxuLnEtcmFkaWFsLXJpcHBsZTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgY3VycmVudENvbG9yIDEwJSwgdHJhbnNwYXJlbnQgMTAuMDElKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCU7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEwLCAxMCk7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMsIG9wYWNpdHkgMXM7XFxufVxcbi5xLXJhZGlhbC1yaXBwbGUuYWN0aXZlOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCwgMCk7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICB0cmFuc2l0aW9uOiAwcztcXG59XFxuOnJvb3Qge1xcbiAgLS1xLXNpemUteHM6IDA7XFxuICAtLXEtc2l6ZS1zbTogNTc2cHg7XFxuICAtLXEtc2l6ZS1tZDogNzY4cHg7XFxuICAtLXEtc2l6ZS1sZzogOTkycHg7XFxuICAtLXEtc2l6ZS14bDogMTIwMHB4O1xcbn1cXG4uZml0IHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcXG59XFxuLmZ1bGwtaGVpZ2h0IHtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG4uZnVsbC13aWR0aCB7XFxuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbn1cXG4ud2luZG93LWhlaWdodCB7XFxuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XFxuICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XFxufVxcbi53aW5kb3ctd2lkdGgge1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XFxufVxcbi5ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG4uaW5saW5lLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbn1cXG4ucS1wYS1ub25lIHtcXG4gIHBhZGRpbmc6IDAgMDtcXG59XFxuLnEtcGwtbm9uZSxcXG4ucS1weC1ub25lIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLnEtcHItbm9uZSxcXG4ucS1weC1ub25lIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxufVxcbi5xLXB0LW5vbmUsXFxuLnEtcHktbm9uZSB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLnEtcGItbm9uZSxcXG4ucS1weS1ub25lIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS1tYS1ub25lIHtcXG4gIG1hcmdpbjogMCAwO1xcbn1cXG4ucS1tbC1ub25lLFxcbi5xLW14LW5vbmUge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcbi5xLW1yLW5vbmUsXFxuLnEtbXgtbm9uZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcbi5xLW10LW5vbmUsXFxuLnEtbXktbm9uZSB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG4ucS1tYi1ub25lLFxcbi5xLW15LW5vbmUge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuLnEtcGEteHMge1xcbiAgcGFkZGluZzogNHB4IDRweDtcXG59XFxuLnEtcGwteHMsXFxuLnEtcHgteHMge1xcbiAgcGFkZGluZy1sZWZ0OiA0cHg7XFxufVxcbi5xLXByLXhzLFxcbi5xLXB4LXhzIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDRweDtcXG59XFxuLnEtcHQteHMsXFxuLnEtcHkteHMge1xcbiAgcGFkZGluZy10b3A6IDRweDtcXG59XFxuLnEtcGIteHMsXFxuLnEtcHkteHMge1xcbiAgcGFkZGluZy1ib3R0b206IDRweDtcXG59XFxuLnEtbWEteHMge1xcbiAgbWFyZ2luOiA0cHggNHB4O1xcbn1cXG4ucS1tbC14cyxcXG4ucS1teC14cyB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4ucS1tci14cyxcXG4ucS1teC14cyB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnEtbXQteHMsXFxuLnEtbXkteHMge1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbn1cXG4ucS1tYi14cyxcXG4ucS1teS14cyB7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxufVxcbi5xLXBhLXNtIHtcXG4gIHBhZGRpbmc6IDhweCA4cHg7XFxufVxcbi5xLXBsLXNtLFxcbi5xLXB4LXNtIHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4ucS1wci1zbSxcXG4ucS1weC1zbSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XFxufVxcbi5xLXB0LXNtLFxcbi5xLXB5LXNtIHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5xLXBiLXNtLFxcbi5xLXB5LXNtIHtcXG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XFxufVxcbi5xLW1hLXNtIHtcXG4gIG1hcmdpbjogOHB4IDhweDtcXG59XFxuLnEtbWwtc20sXFxuLnEtbXgtc20ge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnEtbXItc20sXFxuLnEtbXgtc20ge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLW10LXNtLFxcbi5xLW15LXNtIHtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLnEtbWItc20sXFxuLnEtbXktc20ge1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1wYS1tZCB7XFxuICBwYWRkaW5nOiAxNnB4IDE2cHg7XFxufVxcbi5xLXBsLW1kLFxcbi5xLXB4LW1kIHtcXG4gIHBhZGRpbmctbGVmdDogMTZweDtcXG59XFxuLnEtcHItbWQsXFxuLnEtcHgtbWQge1xcbiAgcGFkZGluZy1yaWdodDogMTZweDtcXG59XFxuLnEtcHQtbWQsXFxuLnEtcHktbWQge1xcbiAgcGFkZGluZy10b3A6IDE2cHg7XFxufVxcbi5xLXBiLW1kLFxcbi5xLXB5LW1kIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxNnB4O1xcbn1cXG4ucS1tYS1tZCB7XFxuICBtYXJnaW46IDE2cHggMTZweDtcXG59XFxuLnEtbWwtbWQsXFxuLnEtbXgtbWQge1xcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XFxufVxcbi5xLW1yLW1kLFxcbi5xLW14LW1kIHtcXG4gIG1hcmdpbi1yaWdodDogMTZweDtcXG59XFxuLnEtbXQtbWQsXFxuLnEtbXktbWQge1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuLnEtbWItbWQsXFxuLnEtbXktbWQge1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG59XFxuLnEtcGEtbGcge1xcbiAgcGFkZGluZzogMjRweCAyNHB4O1xcbn1cXG4ucS1wbC1sZyxcXG4ucS1weC1sZyB7XFxuICBwYWRkaW5nLWxlZnQ6IDI0cHg7XFxufVxcbi5xLXByLWxnLFxcbi5xLXB4LWxnIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDI0cHg7XFxufVxcbi5xLXB0LWxnLFxcbi5xLXB5LWxnIHtcXG4gIHBhZGRpbmctdG9wOiAyNHB4O1xcbn1cXG4ucS1wYi1sZyxcXG4ucS1weS1sZyB7XFxuICBwYWRkaW5nLWJvdHRvbTogMjRweDtcXG59XFxuLnEtbWEtbGcge1xcbiAgbWFyZ2luOiAyNHB4IDI0cHg7XFxufVxcbi5xLW1sLWxnLFxcbi5xLW14LWxnIHtcXG4gIG1hcmdpbi1sZWZ0OiAyNHB4O1xcbn1cXG4ucS1tci1sZyxcXG4ucS1teC1sZyB7XFxuICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxufVxcbi5xLW10LWxnLFxcbi5xLW15LWxnIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcbi5xLW1iLWxnLFxcbi5xLW15LWxnIHtcXG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XFxufVxcbi5xLXBhLXhsIHtcXG4gIHBhZGRpbmc6IDQ4cHggNDhweDtcXG59XFxuLnEtcGwteGwsXFxuLnEtcHgteGwge1xcbiAgcGFkZGluZy1sZWZ0OiA0OHB4O1xcbn1cXG4ucS1wci14bCxcXG4ucS1weC14bCB7XFxuICBwYWRkaW5nLXJpZ2h0OiA0OHB4O1xcbn1cXG4ucS1wdC14bCxcXG4ucS1weS14bCB7XFxuICBwYWRkaW5nLXRvcDogNDhweDtcXG59XFxuLnEtcGIteGwsXFxuLnEtcHkteGwge1xcbiAgcGFkZGluZy1ib3R0b206IDQ4cHg7XFxufVxcbi5xLW1hLXhsIHtcXG4gIG1hcmdpbjogNDhweCA0OHB4O1xcbn1cXG4ucS1tbC14bCxcXG4ucS1teC14bCB7XFxuICBtYXJnaW4tbGVmdDogNDhweDtcXG59XFxuLnEtbXIteGwsXFxuLnEtbXgteGwge1xcbiAgbWFyZ2luLXJpZ2h0OiA0OHB4O1xcbn1cXG4ucS1tdC14bCxcXG4ucS1teS14bCB7XFxuICBtYXJnaW4tdG9wOiA0OHB4O1xcbn1cXG4ucS1tYi14bCxcXG4ucS1teS14bCB7XFxuICBtYXJnaW4tYm90dG9tOiA0OHB4O1xcbn1cXG4ucS1tbC1hdXRvLFxcbi5xLW14LWF1dG8ge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcbi5xLW1yLWF1dG8sXFxuLnEtbXgtYXV0byB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxufVxcbi5xLW15LWZvcm0ge1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuLnEtdG91Y2gge1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHVzZXItZHJhZzogbm9uZTtcXG4gIC1raHRtbC11c2VyLWRyYWc6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTtcXG59XFxuLnEtdG91Y2gteCB7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBwYW4teDtcXG4gICAgICB0b3VjaC1hY3Rpb246IHBhbi14O1xcbn1cXG4ucS10b3VjaC15IHtcXG4gIC1tcy10b3VjaC1hY3Rpb246IHBhbi15O1xcbiAgICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7XFxufVxcbmJvZHkge1xcbiAgbWluLXdpZHRoOiAxMDBweDtcXG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgJy1hcHBsZS1zeXN0ZW0nLCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxuICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgY29sb3I6ICMwYzBjMGM7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG59XFxuaDEge1xcbiAgZm9udC1zaXplOiAxMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBsaW5lLWhlaWdodDogMS4xMjtcXG4gIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDEge1xcbiAgICBmb250LXNpemU6IDY3LjJweDtcXG4gIH1cXG59XFxuaDIge1xcbiAgZm9udC1zaXplOiA1NnB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjM1O1xcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoMiB7XFxuICAgIGZvbnQtc2l6ZTogMzMuNnB4O1xcbiAgfVxcbn1cXG5oMyB7XFxuICBmb250LXNpemU6IDQ1cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDQ4cHg7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDMge1xcbiAgICBmb250LXNpemU6IDI3cHg7XFxuICB9XFxufVxcbmg0IHtcXG4gIGZvbnQtc2l6ZTogMzRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoNCB7XFxuICAgIGZvbnQtc2l6ZTogMjAuNHB4O1xcbiAgfVxcbn1cXG5oNSB7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDUge1xcbiAgICBmb250LXNpemU6IDE0LjM5OTk5OTk5OTk5OTk5OXB4O1xcbiAgfVxcbn1cXG5oNiB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI7XFxuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDYge1xcbiAgICBmb250LXNpemU6IDEycHg7XFxuICB9XFxufVxcbi5xLWRpc3BsYXktNC1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuNTQ7XFxufVxcbi5xLWRpc3BsYXktNCB7XFxuICBmb250LXNpemU6IDExMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XFxufVxcbi5xLWRpc3BsYXktMy1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuNTQ7XFxufVxcbi5xLWRpc3BsYXktMyB7XFxuICBmb250LXNpemU6IDU2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMzU7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcXG59XFxuLnEtZGlzcGxheS0yLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS0yIHtcXG4gIGZvbnQtc2l6ZTogNDVweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDhweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbi5xLWRpc3BsYXktMS1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuNTQ7XFxufVxcbi5xLWRpc3BsYXktMSB7XFxuICBmb250LXNpemU6IDM0cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbn1cXG4ucS1oZWFkbGluZS1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuODc7XFxufVxcbi5xLWhlYWRsaW5lIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbi5xLXRpdGxlLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtdGl0bGUge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcXG59XFxuLnEtc3ViaGVhZGluZy1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuODc7XFxufVxcbi5xLXN1YmhlYWRpbmcge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLnEtYm9keS0yLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtYm9keS0yIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi5xLWJvZHktMS1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuODc7XFxufVxcbi5xLWJvZHktMSB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4ucS1jYXB0aW9uLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtY2FwdGlvbiB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5wIHtcXG4gIG1hcmdpbjogMCAwIDE2cHg7XFxufVxcbi5jYXB0aW9uIHtcXG4gIGNvbG9yOiAjNDI0MjQyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG4udXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxufVxcbi5sb3dlcmNhc2Uge1xcbiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcXG59XFxuLmNhcGl0YWxpemUge1xcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XFxufVxcbi50ZXh0LWNlbnRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi50ZXh0LWxlZnQge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnRleHQtcmlnaHQge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi50ZXh0LWp1c3RpZnkge1xcbiAgdGV4dC1hbGlnbjoganVzdGlmeTtcXG4gIC13ZWJraXQtaHlwaGVuczogYXV0bztcXG4gICAgICAtbXMtaHlwaGVuczogYXV0bztcXG4gICAgICAgICAgaHlwaGVuczogYXV0bztcXG59XFxuLnRleHQtaXRhbGljIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XFxuLnRleHQtYm9sZCB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnRleHQtbm8td3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udGV4dC13ZWlnaHQtdGhpbiB7XFxuICBmb250LXdlaWdodDogMTAwO1xcbn1cXG4udGV4dC13ZWlnaHQtbGlnaHQge1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG59XFxuLnRleHQtd2VpZ2h0LXJlZ3VsYXIge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLnRleHQtd2VpZ2h0LW1lZGl1bSB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG4udGV4dC13ZWlnaHQtYm9sZCB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG4udGV4dC13ZWlnaHQtYm9sZGVyIHtcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7XFxufVxcbnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbn1cXG5iaWcge1xcbiAgZm9udC1zaXplOiAxNzAlO1xcbn1cXG5zdWIge1xcbiAgYm90dG9tOiAtMC4yNWVtO1xcbn1cXG5zdXAge1xcbiAgdG9wOiAtMC41ZW07XFxufVxcbmJsb2NrcXVvdGUge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMjdiZTM7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxufVxcbmJsb2NrcXVvdGUudGV4dC1yaWdodCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5ibG9ja3F1b3RlIHNtYWxsIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IDEuNDtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG5ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXDIwMTQgICBcXFxcQTAnO1xcbn1cXG4ucXVvdGUge1xcbiAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgbWFyZ2luOiAwIDAgMjBweDtcXG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG59XFxuLnF1b3RlLnRleHQtcmlnaHQge1xcbiAgcGFkZGluZy1yaWdodDogMTVweDtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICMwMjdiZTM7XFxuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB2YXIoLS1xLWNvbG9yLXByaW1hcnkpO1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuZHQge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbmRkIHtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5kdCxcXG5kZCB7XFxuICBsaW5lLWhlaWdodDogMS40O1xcbn1cXG5kbCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuZGwuaG9yaXpvbnRhbCBkdCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIHdpZHRoOiAyNSU7XFxuICBjbGVhcjogbGVmdDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuZGwuaG9yaXpvbnRhbCBkZCB7XFxuICBtYXJnaW4tbGVmdDogMzAlO1xcbn1cXG5oci5xLWhyLFxcbmhyLnEtaHItZGFyayB7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG1pbi1oZWlnaHQ6IDFweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG5oci5xLWhyLWRhcmsge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjM2KTtcXG59XFxuLm5vLW1hcmdpbiB7XFxuICBtYXJnaW46IDAgIWltcG9ydGFudDtcXG59XFxuLm5vLXBhZGRpbmcge1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG4ubm8tYm9yZGVyIHtcXG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xcbn1cXG4ubm8tYm9yZGVyLXJhZGl1cyB7XFxuICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5uby1ib3gtc2hhZG93IHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLm5vLW91dGxpbmUge1xcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xcbn1cXG4uZWxsaXBzaXMge1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmVsbGlwc2lzLTItbGluZXMsXFxuLmVsbGlwc2lzLTMtbGluZXMge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbn1cXG4uZWxsaXBzaXMtMi1saW5lcyB7XFxuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XFxufVxcbi5lbGxpcHNpcy0zLWxpbmVzIHtcXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMztcXG59XFxuLnJlYWRvbmx5IHtcXG4gIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xcbn1cXG4uZGlzYWJsZWQsXFxuW2Rpc2FibGVkXSxcXG4uZGlzYWJsZWQgKixcXG5bZGlzYWJsZWRdICoge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O1xcbn1cXG4uZGlzYWJsZWQsXFxuW2Rpc2FibGVkXSB7XFxuICBvcGFjaXR5OiAwLjYgIWltcG9ydGFudDtcXG59XFxuLmhpZGRlbiB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5pbnZpc2libGUge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XFxufVxcbi50cmFuc3BhcmVudCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4ub3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xcbn1cXG4ub3ZlcmZsb3ctaGlkZGVuIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLm92ZXJmbG93LWhpZGRlbi15IHtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4uZGltbWVkOmFmdGVyLFxcbi5saWdodC1kaW1tZWQ6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbi5kaW1tZWQ6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjQpICFpbXBvcnRhbnQ7XFxufVxcbi5saWdodC1kaW1tZWQ6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjYpICFpbXBvcnRhbnQ7XFxufVxcbi56LXRvcCB7XFxuICB6LWluZGV4OiA3MDAwICFpbXBvcnRhbnQ7XFxufVxcbi56LW1heCB7XFxuICB6LWluZGV4OiA5OTk4ICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5kZXNrdG9wKSAuZGVza3RvcC1vbmx5LFxcbmJvZHkuZGVza3RvcCAuZGVza3RvcC1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLm1vYmlsZSkgLm1vYmlsZS1vbmx5LFxcbmJvZHkubW9iaWxlIC5tb2JpbGUtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5jb3Jkb3ZhKSAuY29yZG92YS1vbmx5LFxcbmJvZHkuY29yZG92YSAuY29yZG92YS1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmVsZWN0cm9uKSAuZWxlY3Ryb24tb25seSxcXG5ib2R5LmVsZWN0cm9uIC5lbGVjdHJvbi1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmlvcykgLmlvcy1vbmx5LFxcbmJvZHkuaW9zIC5pb3MtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5tYXQpIC5tYXQtb25seSxcXG5ib2R5Lm1hdCAubWF0LWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgudG91Y2gpIC50b3VjaC1vbmx5LFxcbmJvZHkudG91Y2ggLnRvdWNoLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgud2l0aGluLWlmcmFtZSkgLndpdGhpbi1pZnJhbWUtb25seSxcXG5ib2R5LndpdGhpbi1pZnJhbWUgLndpdGhpbi1pZnJhbWUtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5wbGF0Zm9ybS1pb3MpIC5wbGF0Zm9ybS1pb3Mtb25seSxcXG5ib2R5LnBsYXRmb3JtLWlvcyAucGxhdGZvcm0taW9zLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgucGxhdGZvcm0tYW5kcm9pZCkgLnBsYXRmb3JtLWFuZHJvaWQtb25seSxcXG5ib2R5LnBsYXRmb3JtLWFuZHJvaWQgLnBsYXRmb3JtLWFuZHJvaWQtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbkBtZWRpYSBhbGwgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcXG4gIC5vcmllbnRhdGlvbi1sYW5kc2NhcGUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSBhbGwgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XFxuICAub3JpZW50YXRpb24tcG9ydHJhaXQge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSBzY3JlZW4ge1xcbiAgLnByaW50LW9ubHkge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSBwcmludCB7XFxuICAucHJpbnQtaGlkZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XFxuICAueHMtaGlkZSxcXG4gIC5ndC14cyxcXG4gIC5zbSxcXG4gIC5ndC1zbSxcXG4gIC5tZCxcXG4gIC5ndC1tZCxcXG4gIC5sZyxcXG4gIC5ndC1sZyxcXG4gIC54bCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5zbS1oaWRlLFxcbiAgLnhzLFxcbiAgLmx0LXNtLFxcbiAgLmd0LXNtLFxcbiAgLm1kLFxcbiAgLmd0LW1kLFxcbiAgLmxnLFxcbiAgLmd0LWxnLFxcbiAgLnhsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xcbiAgLm1kLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuc20sXFxuICAubHQtbWQsXFxuICAuZ3QtbWQsXFxuICAubGcsXFxuICAuZ3QtbGcsXFxuICAueGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xcbiAgLmxnLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuc20sXFxuICAubHQtbWQsXFxuICAubWQsXFxuICAubHQtbGcsXFxuICAuZ3QtbGcsXFxuICAueGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC54bC1oaWRlLFxcbiAgLnhzLFxcbiAgLmx0LXNtLFxcbiAgLnNtLFxcbiAgLmx0LW1kLFxcbiAgLm1kLFxcbiAgLmx0LWxnLFxcbiAgLmxnLFxcbiAgLmx0LXhsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG4ucS1mb2N1cy1oZWxwZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjE1O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLWZvY3VzLWhlbHBlci1yb3VuZGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtZm9jdXMtaGVscGVyLXJvdW5kIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLWZvY3VzYWJsZTpmb2N1cyAucS1mb2N1cy1oZWxwZXIsXFxuYm9keS5kZXNrdG9wIC5xLWhvdmVyYWJsZTpob3ZlciAucS1mb2N1cy1oZWxwZXIge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG5ib2R5LmlvcyAucS1ob3ZlcmFibGU6YWN0aXZlIC5xLWZvY3VzLWhlbHBlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSB7XFxuICAucS1pZiA+IC5xLWlmLWlubmVyIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgfVxcbiAgLnEtaWYgPiAucS1pZi1pbm5lciA+IGRpdiA+IC5xLWlucHV0LXRhcmdldCB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIgPiBkaXYgPiBpbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICAgIG1pbi13aWR0aDogM3JlbTtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDAlICFpbXBvcnRhbnQ7XFxuICAgICAgICBmbGV4LWJhc2lzOiAwJSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnEtaW5wdXQtdGFyZ2V0OmJlZm9yZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgfVxcbiAgLnEtaWYtbGFiZWwtc3BhY2VyIHtcXG4gICAgd2lkdGg6IDA7XFxuICB9XFxuICAucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAucm93LmlubGluZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgfVxcbiAgLnEtdG9vbGJhcixcXG4gIC5xLWFjdGlvbnNoZWV0LXRpdGxlLFxcbiAgLnEtZmllbGQtbGFiZWwtaW5uZXIge1xcbiAgICBoZWlnaHQ6IDBweDtcXG4gIH1cXG4gIC5xLWNhcm91c2VsLXNsaWRlIHtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wucS1hbGVydC1jb250ZW50IHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtc2xpZGVyLWhhbmRsZSA+IC5xLWNoaXAuaW5saW5lLnJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlO1xcbiAgfVxcbiAgYS5xLWJ0bjpub3QoLnEtYnRuLXJvdW5kKSB7XFxuICAgIGhlaWdodDogMHB4O1xcbiAgfVxcbiAgLnEtYnRuIC5xLWJ0bi1pbm5lciB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDFweCAxcHggLTFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoLmRpc2FibGVkIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaC5kaXNhYmxlZCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuLWdyb3VwID4gLnEtYnRuLnEtYnRuLXB1c2g6bm90KC5kaXNhYmxlZCk6YWN0aXZlIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi1ncm91cCA+IC5xLWJ0bi5xLWJ0bi1wdXNoOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAucS1jaGlwOm5vdCgucS1jaGlwLXNtYWxsKTpub3QoLnEtY2hpcC1kZW5zZSkgLnEtY2hpcC1tYWluIHtcXG4gICAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICB9XFxuICAucS1idG4gLnEtY2hpcCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIH1cXG4gIC5xLXRhYiAucS1jaGlwIC5xLWNoaXAtbWFpbiB7XFxuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICB9XFxuICAucS1mYWItYWN0aW9ucy5xLWZhYi1sZWZ0LFxcbiAgLnEtZmFiLWFjdGlvbnMucS1mYWItcmlnaHQge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIH1cXG4gIC5xLWl0ZW0tbWFpbiB7XFxuICAgIG1pbi13aWR0aDogMXB4O1xcbiAgfVxcbiAgLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDA7XFxuICB9XFxuICAucS1tb2RhbC1sYXlvdXQge1xcbiAgICBtaW4taGVpZ2h0OiA4MHZoICFpbXBvcnRhbnQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxufVxcbkBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjogYXV0bykge1xcbiAgLnEtaWYgPiAucS1pZi1pbm5lciB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIH1cXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIgPiBkaXYgPiAucS1pbnB1dC10YXJnZXQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAucS1pZiA+IC5xLWlmLWlubmVyID4gZGl2ID4gaW5wdXQucS1pbnB1dC10YXJnZXQge1xcbiAgICBtaW4td2lkdGg6IDNyZW07XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwJSAhaW1wb3J0YW50O1xcbiAgICAgICAgZmxleC1iYXNpczogMCUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5xLWlucHV0LXRhcmdldDpiZWZvcmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gIH1cXG4gIC5xLWlmLWxhYmVsLXNwYWNlciB7XFxuICAgIHdpZHRoOiAwO1xcbiAgfVxcbiAgLnEtZWRpdG9yLXRvb2xiYXIgLnEtYnRuLWdyb3VwLnJvdy5pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIH1cXG4gIC5xLXRvb2xiYXIsXFxuICAucS1hY3Rpb25zaGVldC10aXRsZSxcXG4gIC5xLWZpZWxkLWxhYmVsLWlubmVyIHtcXG4gICAgaGVpZ2h0OiAwcHg7XFxuICB9XFxuICAucS1jYXJvdXNlbC1zbGlkZSB7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAuY29sLnEtYWxlcnQtY29udGVudCB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLXNsaWRlci1oYW5kbGUgPiAucS1jaGlwLmlubGluZS5yb3cge1xcbiAgICBkaXNwbGF5OiB0YWJsZTtcXG4gIH1cXG4gIGEucS1idG46bm90KC5xLWJ0bi1yb3VuZCkge1xcbiAgICBoZWlnaHQ6IDBweDtcXG4gIH1cXG4gIC5xLWJ0biAucS1idG4taW5uZXIge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAucS1idG46YWN0aXZlIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUgLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAtMXB4IDFweCAxcHggLTFweDtcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUucS1idG4tcHVzaCAucS1idG4taW5uZXIsXFxuICAucS1idG4uYWN0aXZlLnEtYnRuLXB1c2ggLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAxcHggMXB4IC0xcHggLTFweDtcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUucS1idG4tcHVzaC5kaXNhYmxlZCAucS1idG4taW5uZXIsXFxuICAucS1idG4uYWN0aXZlLnEtYnRuLXB1c2guZGlzYWJsZWQgLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAtMXB4IDFweCAxcHggLTFweDtcXG4gIH1cXG4gIC5xLWJ0bi1ncm91cCA+IC5xLWJ0bi5xLWJ0bi1wdXNoOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSAucS1idG4taW5uZXIsXFxuICAucS1idG4tZ3JvdXAgPiAucS1idG4ucS1idG4tcHVzaDpub3QoLmRpc2FibGVkKS5hY3RpdmUgLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgLnEtY2hpcDpub3QoLnEtY2hpcC1zbWFsbCk6bm90KC5xLWNoaXAtZGVuc2UpIC5xLWNoaXAtbWFpbiB7XFxuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgfVxcbiAgLnEtYnRuIC5xLWNoaXAge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB9XFxuICAucS10YWIgLnEtY2hpcCAucS1jaGlwLW1haW4ge1xcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbiAgfVxcbiAgLnEtZmFiLWFjdGlvbnMucS1mYWItbGVmdCxcXG4gIC5xLWZhYi1hY3Rpb25zLnEtZmFiLXJpZ2h0IHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB9XFxuICAucS1pdGVtLW1haW4ge1xcbiAgICBtaW4td2lkdGg6IDFweDtcXG4gIH1cXG4gIC5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgfVxcbiAgLnEtbW9kYWwtbGF5b3V0IHtcXG4gICAgbWluLWhlaWdodDogODB2aCAhaW1wb3J0YW50O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHdlYmtpdC1hdXRvZmlsbC1vbiB7XFxuICB0byB7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICBjb2xvcjogI2ZmOTgwMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyB3ZWJraXQtYXV0b2ZpbGwtb2ZmIHtcXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wcm9ncmVzcy1pbmRldGVybWluYXRlIHtcXG4gIDAlIHtcXG4gICAgbGVmdDogLTM1JTtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICA2MCUge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgICByaWdodDogLTkwJTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgICByaWdodDogLTkwJTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtc2hvcnQge1xcbiAgMCUge1xcbiAgICBsZWZ0OiAtMjAwJTtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICA2MCUge1xcbiAgICBsZWZ0OiAxMDclO1xcbiAgICByaWdodDogLTglO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGxlZnQ6IDEwNyU7XFxuICAgIHJpZ2h0OiAtOCU7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wcm9ncmVzcy1zdHJpcGVzIHtcXG4gIGZyb20ge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XFxuICB9XFxuICB0byB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLW1hdC1kYXNoIHtcXG4gIDAlIHtcXG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwO1xcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg5LCAyMDA7XFxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMzVweDtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4OSwgMjAwO1xcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTEyNHB4O1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtaGlnaGxpZ2h0IHtcXG4gIDAlIHtcXG4gICAgYmFja2dyb3VuZDogI2NkZGMzOTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXJvdGF0ZSB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDApIC8qIHJ0bDppZ25vcmUgKi87XFxuICB9XFxuICAyNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDc1JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1ibGluayB7XFxuICB0byB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNwaW4ge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXBvcCB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTtcXG4gIH1cXG4gIDcwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNyk7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLWZhZGUge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1zY2FsZSB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtYm91bmNlIHtcXG4gIDAlLCAyMCUsIDUwJSwgODAlLCAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgNDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zMHB4KTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1zaGFrZSB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuICA1MCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wb3B1cC1kb3duIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KSBzY2FsZVkoMC4zKTtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB9XFxuICAzMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcG9wdXAtdXAge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGVZKDAuMyk7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgfVxcbiAgMzAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNsaWRlLWxlZnQge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTcwJSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1zbGlkZS1yaWdodCB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg3MCUpO1xcbiAgfVxcbn1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIlxcbmJ1dHRvbiArIGJ1dHRvbltkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjVlbTtcXG59XFxuYnV0dG9uW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgcGFkZGluZzogMC40ZW0gMC42ZW07XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuYnV0dG9uW2Rpc2FibGVkXVtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGJvcmRlci1jb2xvcjogI2FlNjVjNTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuLm1vZGFsW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgY29sb3I6IHJlZDtcXG59XFxuXFxuLyoqXFxuICogU2VlIGh0dHBzOi8vdnVlLWxvYWRlci52dWVqcy5vcmcvZ3VpZGUvc2NvcGVkLWNzcy5odG1sI2RlZXAtc2VsZWN0b3JzXFxuICogdGhlIGA+Pj5gIGFsbG93cyB0byBhcHBseSBzY29wZWQgY3NzIHRvIGNoaWxkIGVsZW1lbnQgdGhhdCBpcyBnZW5lcmF0ZWRcXG4gKiBkeW5hbWljYWxseVxcbioqL1xcbi5tb2RhbFtkYXRhLXYtNGZiYzczNWJdIC5tb2RhbC1zY3JvbGwge1xcbiAgY29sb3I6IHJlZDtcXG4gIG1heC1oZWlnaHQ6IG5vbmU7XFxufVxcbi5tb2RhbCAubW9kYWwtYm9keVtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1heC1oZWlnaHQ6IG5vbmU7XFxufVxcbmgxW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgZm9udC1mYW1pbHk6IENvdXJpZXI7XFxuICBmb250LXNpemU6IDJyZW07XFxufVxcbmgyW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgZm9udC1mYW1pbHk6IENvdXJpZXI7XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBtYXJnaW4tdG9wOiAycmVtO1xcbn1cXG4uYXBwIC5yb3dbZGF0YS12LTRmYmM3MzViXSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnJvdyArIC5yb3dbZGF0YS12LTRmYmM3MzViXSB7XFxuICBtYXJnaW4tdG9wOiAyZW07XFxufVxcbi5yb3ctc21hbGxbZGF0YS12LTRmYmM3MzViXSB7XFxuICBtYXJnaW4tdG9wOiAxZW07XFxufVxcbi5lbW9qaS1tYXJ0W2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4uZW1vamktbWFydC10aXRsZS1sYWJlbFtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGZvbnQtc2l6ZTogMjFweDtcXG59XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qIVxuICogUXVhc2FyIEZyYW1ld29yayB2MC4xNy4yMFxuICogKGMpIDIwMTYtcHJlc2VudCBSYXp2YW4gU3RvZW5lc2N1XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbnZhciB3ZWJTdG9yYWdlLGlzU1NSPVwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3csZnJvbVNTUj0hMSxvblNTUj1pc1NTUjtmdW5jdGlvbiBnZXRNYXRjaCh0LGUpe3ZhciBpPS8oZWRnZSlcXC8oW1xcdy5dKykvLmV4ZWModCl8fC8ob3ByKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHZpdmFsZGkpW1xcL10oW1xcdy5dKykvLmV4ZWModCl8fC8oY2hyb21lKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKGllbW9iaWxlKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHZlcnNpb24pKGFwcGxld2Via2l0KVtcXC9dKFtcXHcuXSspLiooc2FmYXJpKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHdlYmtpdClbXFwvXShbXFx3Ll0rKS4qKHZlcnNpb24pW1xcL10oW1xcdy5dKykuKihzYWZhcmkpW1xcL10oW1xcdy5dKykvLmV4ZWModCl8fC8od2Via2l0KVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpW1xcL10oW1xcdy5dKykvLmV4ZWModCl8fC8obXNpZSkgKFtcXHcuXSspLy5leGVjKHQpfHx0LmluZGV4T2YoXCJ0cmlkZW50XCIpPj0wJiYvKHJ2KSg/Ojp8ICkoW1xcdy5dKykvLmV4ZWModCl8fHQuaW5kZXhPZihcImNvbXBhdGlibGVcIik8MCYmLyhtb3ppbGxhKSg/Oi4qPyBydjooW1xcdy5dKyl8KS8uZXhlYyh0KXx8W107cmV0dXJue2Jyb3dzZXI6aVs1XXx8aVszXXx8aVsxXXx8XCJcIix2ZXJzaW9uOmlbMl18fGlbNF18fFwiMFwiLHZlcnNpb25OdW1iZXI6aVs0XXx8aVsyXXx8XCIwXCIscGxhdGZvcm06ZVswXXx8XCJcIn19ZnVuY3Rpb24gZ2V0UGxhdGZvcm1NYXRjaCh0KXtyZXR1cm4vKGlwYWQpLy5leGVjKHQpfHwvKGlwb2QpLy5leGVjKHQpfHwvKHdpbmRvd3MgcGhvbmUpLy5leGVjKHQpfHwvKGlwaG9uZSkvLmV4ZWModCl8fC8oa2luZGxlKS8uZXhlYyh0KXx8LyhzaWxrKS8uZXhlYyh0KXx8LyhhbmRyb2lkKS8uZXhlYyh0KXx8Lyh3aW4pLy5leGVjKHQpfHwvKG1hYykvLmV4ZWModCl8fC8obGludXgpLy5leGVjKHQpfHwvKGNyb3MpLy5leGVjKHQpfHwvKHBsYXlib29rKS8uZXhlYyh0KXx8LyhiYikvLmV4ZWModCl8fC8oYmxhY2tiZXJyeSkvLmV4ZWModCl8fFtdfWZ1bmN0aW9uIGdldFBsYXRmb3JtKHQpe3ZhciBlPWdldE1hdGNoKHQ9KHR8fG5hdmlnYXRvci51c2VyQWdlbnR8fG5hdmlnYXRvci52ZW5kb3J8fHdpbmRvdy5vcGVyYSkudG9Mb3dlckNhc2UoKSxnZXRQbGF0Zm9ybU1hdGNoKHQpKSxpPXt9O3JldHVybiBlLmJyb3dzZXImJihpW2UuYnJvd3Nlcl09ITAsaS52ZXJzaW9uPWUudmVyc2lvbixpLnZlcnNpb25OdW1iZXI9cGFyc2VJbnQoZS52ZXJzaW9uTnVtYmVyLDEwKSksZS5wbGF0Zm9ybSYmKGlbZS5wbGF0Zm9ybV09ITApLChpLmFuZHJvaWR8fGkuYmJ8fGkuYmxhY2tiZXJyeXx8aS5pcGFkfHxpLmlwaG9uZXx8aS5pcG9kfHxpLmtpbmRsZXx8aS5wbGF5Ym9va3x8aS5zaWxrfHxpW1wid2luZG93cyBwaG9uZVwiXSkmJihpLm1vYmlsZT0hMCksKGkuaXBvZHx8aS5pcGFkfHxpLmlwaG9uZSkmJihpLmlvcz0hMCksaVtcIndpbmRvd3MgcGhvbmVcIl0mJihpLndpbnBob25lPSEwLGRlbGV0ZSBpW1wid2luZG93cyBwaG9uZVwiXSksKGkuY3Jvc3x8aS5tYWN8fGkubGludXh8fGkud2luKSYmKGkuZGVza3RvcD0hMCksKGkuY2hyb21lfHxpLm9wcnx8aS5zYWZhcml8fGkudml2YWxkaSkmJihpLndlYmtpdD0hMCksKGkucnZ8fGkuaWVtb2JpbGUpJiYoZS5icm93c2VyPVwiaWVcIixpLmllPSEwKSxpLmVkZ2UmJihlLmJyb3dzZXI9XCJlZGdlXCIsaS5lZGdlPSEwKSwoaS5zYWZhcmkmJmkuYmxhY2tiZXJyeXx8aS5iYikmJihlLmJyb3dzZXI9XCJibGFja2JlcnJ5XCIsaS5ibGFja2JlcnJ5PSEwKSxpLnNhZmFyaSYmaS5wbGF5Ym9vayYmKGUuYnJvd3Nlcj1cInBsYXlib29rXCIsaS5wbGF5Ym9vaz0hMCksaS5vcHImJihlLmJyb3dzZXI9XCJvcGVyYVwiLGkub3BlcmE9ITApLGkuc2FmYXJpJiZpLmFuZHJvaWQmJihlLmJyb3dzZXI9XCJhbmRyb2lkXCIsaS5hbmRyb2lkPSEwKSxpLnNhZmFyaSYmaS5raW5kbGUmJihlLmJyb3dzZXI9XCJraW5kbGVcIixpLmtpbmRsZT0hMCksaS5zYWZhcmkmJmkuc2lsayYmKGUuYnJvd3Nlcj1cInNpbGtcIixpLnNpbGs9ITApLGkudml2YWxkaSYmKGUuYnJvd3Nlcj1cInZpdmFsZGlcIixpLnZpdmFsZGk9ITApLGkubmFtZT1lLmJyb3dzZXIsaS5wbGF0Zm9ybT1lLnBsYXRmb3JtLGlzU1NSfHwod2luZG93LnByb2Nlc3MmJndpbmRvdy5wcm9jZXNzLnZlcnNpb25zJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbj9pLmVsZWN0cm9uPSEwOjA9PT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCJjaHJvbWUtZXh0ZW5zaW9uOi8vXCIpP2kuY2hyb21lRXh0PSEwOih3aW5kb3cuX2NvcmRvdmFOYXRpdmV8fHdpbmRvdy5jb3Jkb3ZhKSYmKGkuY29yZG92YT0hMCksKGZyb21TU1I9dm9pZCAwPT09aS5jb3Jkb3ZhJiZ2b2lkIDA9PT1pLmVsZWN0cm9uJiYhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1zZXJ2ZXItcmVuZGVyZWRdXCIpKSYmKG9uU1NSPSEwKSksaX1mdW5jdGlvbiBoYXNXZWJTdG9yYWdlKCl7aWYodm9pZCAwIT09d2ViU3RvcmFnZSlyZXR1cm4gd2ViU3RvcmFnZTt0cnl7aWYod2luZG93LmxvY2FsU3RvcmFnZSlyZXR1cm4gd2ViU3RvcmFnZT0hMCwhMH1jYXRjaCh0KXt9cmV0dXJuIHdlYlN0b3JhZ2U9ITEsITF9ZnVuY3Rpb24gZ2V0Q2xpZW50UHJvcGVydGllcygpe3JldHVybntoYXM6e3RvdWNoOiEhKFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpfHx3aW5kb3cubmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHM+MCx3ZWJTdG9yYWdlOmhhc1dlYlN0b3JhZ2UoKX0sd2l0aGluOntpZnJhbWU6d2luZG93LnNlbGYhPT13aW5kb3cudG9wfX19dmFyIFBsYXRmb3JtPXtoYXM6e3RvdWNoOiExLHdlYlN0b3JhZ2U6ITF9LHdpdGhpbjp7aWZyYW1lOiExfSxwYXJzZVNTUjpmdW5jdGlvbih0KXtyZXR1cm4gdD97aXM6Z2V0UGxhdGZvcm0odC5yZXEuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0pLGhhczp0aGlzLmhhcyx3aXRoaW46dGhpcy53aXRoaW59Ok9iamVjdC5hc3NpZ24oe30se2lzOmdldFBsYXRmb3JtKCl9LGdldENsaWVudFByb3BlcnRpZXMoKSl9LGluc3RhbGw6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXM7aXNTU1I/ZS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3QucGxhdGZvcm09cy5wYXJzZVNTUihlLnNzcil9KToodGhpcy5pcz1nZXRQbGF0Zm9ybSgpLGZyb21TU1I/KGUudGFrZW92ZXIucHVzaChmdW5jdGlvbih0KXtvblNTUj1mcm9tU1NSPSExLE9iamVjdC5hc3NpZ24odC5wbGF0Zm9ybSxnZXRDbGllbnRQcm9wZXJ0aWVzKCkpfSksaS51dGlsLmRlZmluZVJlYWN0aXZlKHQsXCJwbGF0Zm9ybVwiLHRoaXMpKTooT2JqZWN0LmFzc2lnbih0aGlzLGdldENsaWVudFByb3BlcnRpZXMoKSksdC5wbGF0Zm9ybT10aGlzKSl9fTtmdW5jdGlvbiBhc3NpZ24odCxlKXt2YXIgaT1hcmd1bWVudHM7aWYodm9pZCAwPT09dHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdFwiKTtmb3IodmFyIHM9T2JqZWN0KHQpLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgbz1pW25dO2lmKHZvaWQgMCE9PW8mJm51bGwhPT1vKWZvcih2YXIgcj1PYmplY3Qua2V5cyhPYmplY3QobykpLGE9MCxsPXIubGVuZ3RoO2E8bDthKyspe3ZhciBjPXJbYV0saD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sYyk7dm9pZCAwIT09aCYmaC5lbnVtZXJhYmxlJiYoc1tjXT1vW2NdKX19cmV0dXJuIHN9T2JqZWN0LmFzc2lnbnx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdCxcImFzc2lnblwiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTphc3NpZ259KSxOdW1iZXIuaXNJbnRlZ2VyfHwoTnVtYmVyLmlzSW50ZWdlcj1mdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmaXNGaW5pdGUodCkmJk1hdGguZmxvb3IodCk9PT10fSksQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzfHwoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSl7dmFyIGk9T2JqZWN0KHRoaXMpLHM9cGFyc2VJbnQoaS5sZW5ndGgsMTApfHwwO2lmKDA9PT1zKXJldHVybiExO3ZhciBuLG8scj1wYXJzZUludChlLDEwKXx8MDtmb3Iocj49MD9uPXI6KG49cytyKTwwJiYobj0wKTtuPHM7KXtpZih0PT09KG89aVtuXSl8fHQhPXQmJm8hPW8pcmV0dXJuITA7bisrfXJldHVybiExfSksU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHwoU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8MCx0aGlzLnN1YnN0cihlLHQubGVuZ3RoKT09PXR9KSxTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRofHwoU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aD1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudG9TdHJpbmcoKTsoXCJudW1iZXJcIiE9dHlwZW9mIGV8fCFpc0Zpbml0ZShlKXx8TWF0aC5mbG9vcihlKSE9PWV8fGU+aS5sZW5ndGgpJiYoZT1pLmxlbmd0aCksZS09dC5sZW5ndGg7dmFyIHM9aS5pbmRleE9mKHQsZSk7cmV0dXJuLTEhPT1zJiZzPT09ZX0pLGlzU1NSfHwoXCJmdW5jdGlvblwiIT10eXBlb2YgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyYmKEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXM9RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm1vek1hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9KHRoaXMuZG9jdW1lbnR8fHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbCh0KSxpPTA7ZVtpXSYmZVtpXSE9PXRoaXM7KSsraTtyZXR1cm4gQm9vbGVhbihlW2ldKX0pLFwiZnVuY3Rpb25cIiE9dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QmJihFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzO2UmJjE9PT1lLm5vZGVUeXBlOyl7aWYoZS5tYXRjaGVzKHQpKXJldHVybiBlO2U9ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfSksW0VsZW1lbnQucHJvdG90eXBlLENoYXJhY3RlckRhdGEucHJvdG90eXBlLERvY3VtZW50VHlwZS5wcm90b3R5cGVdLmZvckVhY2goZnVuY3Rpb24odCl7dC5oYXNPd25Qcm9wZXJ0eShcInJlbW92ZVwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJyZW1vdmVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9fSl9KSksQXJyYXkucHJvdG90eXBlLmZpbmR8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsXCJmaW5kXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5LnByb3RvdHlwZS5maW5kIGNhbGxlZCBvbiBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJwcmVkaWNhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2Zvcih2YXIgZSxpPU9iamVjdCh0aGlzKSxzPWkubGVuZ3RoPj4+MCxuPWFyZ3VtZW50c1sxXSxvPTA7bzxzO28rKylpZihlPWlbb10sdC5jYWxsKG4sZSxvLGkpKXJldHVybiBlfX0pO3ZhciB2ZXJzaW9uPVwiMC4xNy4yMFwiLEhpc3Rvcnk9e19faGlzdG9yeTpbXSxhZGQ6ZnVuY3Rpb24oKXt9LHJlbW92ZTpmdW5jdGlvbigpe30saW5zdGFsbDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7aWYoIWlzU1NSJiZ0LnBsYXRmb3JtLmlzLmNvcmRvdmEpe3RoaXMuYWRkPWZ1bmN0aW9uKHQpe2kuX19oaXN0b3J5LnB1c2godCl9LHRoaXMucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPWkuX19oaXN0b3J5LmluZGV4T2YodCk7ZT49MCYmaS5fX2hpc3Rvcnkuc3BsaWNlKGUsMSl9O3ZhciBzPXZvaWQgMD09PWUuY29yZG92YXx8ITEhPT1lLmNvcmRvdmEuYmFja0J1dHRvbkV4aXQ7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZXJlYWR5XCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiYmFja2J1dHRvblwiLGZ1bmN0aW9uKCl7aS5fX2hpc3RvcnkubGVuZ3RoP2kuX19oaXN0b3J5LnBvcCgpLmhhbmRsZXIoKTpzJiZcIiMvXCI9PT13aW5kb3cubG9jYXRpb24uaGFzaD9uYXZpZ2F0b3IuYXBwLmV4aXRBcHAoKTp3aW5kb3cuaGlzdG9yeS5iYWNrKCl9LCExKX0pfX19LGxhbmdFbj17bGFuZzpcImVuLXVzXCIsbGFiZWw6e2NsZWFyOlwiQ2xlYXJcIixvazpcIk9LXCIsY2FuY2VsOlwiQ2FuY2VsXCIsY2xvc2U6XCJDbG9zZVwiLHNldDpcIlNldFwiLHNlbGVjdDpcIlNlbGVjdFwiLHJlc2V0OlwiUmVzZXRcIixyZW1vdmU6XCJSZW1vdmVcIix1cGRhdGU6XCJVcGRhdGVcIixjcmVhdGU6XCJDcmVhdGVcIixzZWFyY2g6XCJTZWFyY2hcIixmaWx0ZXI6XCJGaWx0ZXJcIixyZWZyZXNoOlwiUmVmcmVzaFwifSxkYXRlOntkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlY1wiLnNwbGl0KFwiX1wiKSxmaXJzdERheU9mV2VlazowLGZvcm1hdDI0aDohMX0scHVsbFRvUmVmcmVzaDp7cHVsbDpcIlB1bGwgZG93biB0byByZWZyZXNoXCIscmVsZWFzZTpcIlJlbGVhc2UgdG8gcmVmcmVzaFwiLHJlZnJlc2g6XCJSZWZyZXNoaW5nLi4uXCJ9LHRhYmxlOntub0RhdGE6XCJObyBkYXRhIGF2YWlsYWJsZVwiLG5vUmVzdWx0czpcIk5vIG1hdGNoaW5nIHJlY29yZHMgZm91bmRcIixsb2FkaW5nOlwiTG9hZGluZy4uLlwiLHNlbGVjdGVkUmVjb3JkczpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/XCIxIHJlY29yZCBzZWxlY3RlZC5cIjooMD09PXQ/XCJOb1wiOnQpK1wiIHJlY29yZHMgc2VsZWN0ZWQuXCJ9LHJlY29yZHNQZXJQYWdlOlwiUmVjb3JkcyBwZXIgcGFnZTpcIixhbGxSb3dzOlwiQWxsXCIscGFnaW5hdGlvbjpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQrXCItXCIrZStcIiBvZiBcIitpfSxjb2x1bW5zOlwiQ29sdW1uc1wifSxlZGl0b3I6e3VybDpcIlVSTFwiLGJvbGQ6XCJCb2xkXCIsaXRhbGljOlwiSXRhbGljXCIsc3RyaWtldGhyb3VnaDpcIlN0cmlrZXRocm91Z2hcIix1bmRlcmxpbmU6XCJVbmRlcmxpbmVcIix1bm9yZGVyZWRMaXN0OlwiVW5vcmRlcmVkIExpc3RcIixvcmRlcmVkTGlzdDpcIk9yZGVyZWQgTGlzdFwiLHN1YnNjcmlwdDpcIlN1YnNjcmlwdFwiLHN1cGVyc2NyaXB0OlwiU3VwZXJzY3JpcHRcIixoeXBlcmxpbms6XCJIeXBlcmxpbmtcIix0b2dnbGVGdWxsc2NyZWVuOlwiVG9nZ2xlIEZ1bGxzY3JlZW5cIixxdW90ZTpcIlF1b3RlXCIsbGVmdDpcIkxlZnQgYWxpZ25cIixjZW50ZXI6XCJDZW50ZXIgYWxpZ25cIixyaWdodDpcIlJpZ2h0IGFsaWduXCIsanVzdGlmeTpcIkp1c3RpZnkgYWxpZ25cIixwcmludDpcIlByaW50XCIsb3V0ZGVudDpcIkRlY3JlYXNlIGluZGVudGF0aW9uXCIsaW5kZW50OlwiSW5jcmVhc2UgaW5kZW50YXRpb25cIixyZW1vdmVGb3JtYXQ6XCJSZW1vdmUgZm9ybWF0dGluZ1wiLGZvcm1hdHRpbmc6XCJGb3JtYXR0aW5nXCIsZm9udFNpemU6XCJGb250IFNpemVcIixhbGlnbjpcIkFsaWduXCIsaHI6XCJJbnNlcnQgSG9yaXpvbnRhbCBSdWxlXCIsdW5kbzpcIlVuZG9cIixyZWRvOlwiUmVkb1wiLGhlYWRlcjE6XCJIZWFkZXIgMVwiLGhlYWRlcjI6XCJIZWFkZXIgMlwiLGhlYWRlcjM6XCJIZWFkZXIgM1wiLGhlYWRlcjQ6XCJIZWFkZXIgNFwiLGhlYWRlcjU6XCJIZWFkZXIgNVwiLGhlYWRlcjY6XCJIZWFkZXIgNlwiLHBhcmFncmFwaDpcIlBhcmFncmFwaFwiLGNvZGU6XCJDb2RlXCIsc2l6ZTE6XCJWZXJ5IHNtYWxsXCIsc2l6ZTI6XCJBIGJpdCBzbWFsbFwiLHNpemUzOlwiTm9ybWFsXCIsc2l6ZTQ6XCJNZWRpdW0tbGFyZ2VcIixzaXplNTpcIkJpZ1wiLHNpemU2OlwiVmVyeSBiaWdcIixzaXplNzpcIk1heGltdW1cIixkZWZhdWx0Rm9udDpcIkRlZmF1bHQgRm9udFwifSx0cmVlOntub05vZGVzOlwiTm8gbm9kZXMgYXZhaWxhYmxlXCIsbm9SZXN1bHRzOlwiTm8gbWF0Y2hpbmcgbm9kZXMgZm91bmRcIn19LGkxOG49e2luc3RhbGw6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49dGhpcztpc1NTUiYmZS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3ZhciBpPXtsYW5nOnQuaTE4bi5sYW5nLGRpcjp0LmkxOG4ucnRsP1wicnRsXCI6XCJsdHJcIn0scz1lLnNzci5zZXRIdG1sQXR0cnM7XCJmdW5jdGlvblwiPT10eXBlb2Ygcz9zKGkpOmUuc3NyLlFfSFRNTF9BVFRSUz1PYmplY3Qua2V5cyhpKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQrXCI9XCIraVt0XX0pLmpvaW4oXCIgXCIpfSksdGhpcy5zZXQ9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9bGFuZ0VuKSxlLnNldD1uLnNldCxlLmdldExvY2FsZT1uLmdldExvY2FsZSxlLnJ0bD1lLnJ0bHx8ITEsIWlzU1NSKXt2YXIgcz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cy5zZXRBdHRyaWJ1dGUoXCJkaXJcIixlLnJ0bD9cInJ0bFwiOlwibHRyXCIpLHMuc2V0QXR0cmlidXRlKFwibGFuZ1wiLGUubGFuZyl9aXNTU1J8fHQuaTE4bj90LmkxOG49ZTppLnV0aWwuZGVmaW5lUmVhY3RpdmUodCxcImkxOG5cIixlKSxuLm5hbWU9ZS5sYW5nLG4ubGFuZz1lfSx0aGlzLnNldChzKX0sZ2V0TG9jYWxlOmZ1bmN0aW9uKCl7aWYoIWlzU1NSKXt2YXIgdD1uYXZpZ2F0b3IubGFuZ3VhZ2V8fG5hdmlnYXRvci5sYW5ndWFnZXNbMF18fG5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2V8fG5hdmlnYXRvci51c2VyTGFuZ3VhZ2V8fG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTtyZXR1cm4gdD90LnRvTG93ZXJDYXNlKCk6dm9pZCAwfX19O2Z1bmN0aW9uIHJnYlRvSGV4KHQpe3ZhciBlPXQucixpPXQuZyxzPXQuYixuPXQuYSxvPXZvaWQgMCE9PW47aWYoZT1NYXRoLnJvdW5kKGUpLGk9TWF0aC5yb3VuZChpKSxzPU1hdGgucm91bmQocyksZT4yNTV8fGk+MjU1fHxzPjI1NXx8byYmbj4xMDApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIDMgbnVtYmVycyBiZWxvdyAyNTYgKGFuZCBvcHRpb25hbGx5IG9uZSBiZWxvdyAxMDApXCIpO3JldHVybiBuPW8/KDI1NnxNYXRoLnJvdW5kKDI1NSpuLzEwMCkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTpcIlwiLFwiI1wiKyhzfGk8PDh8ZTw8MTZ8MTw8MjQpLnRvU3RyaW5nKDE2KS5zbGljZSgxKStufWZ1bmN0aW9uIGhleFRvUmdiKHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZ1wiKTszPT09KHQ9dC5yZXBsYWNlKC9eIy8sXCJcIikpLmxlbmd0aD90PXRbMF0rdFswXSt0WzFdK3RbMV0rdFsyXSt0WzJdOjQ9PT10Lmxlbmd0aCYmKHQ9dFswXSt0WzBdK3RbMV0rdFsxXSt0WzJdK3RbMl0rdFszXSt0WzNdKTt2YXIgZT1wYXJzZUludCh0LDE2KTtyZXR1cm4gdC5sZW5ndGg+Nj97cjplPj4yNCYyNTUsZzplPj4xNiYyNTUsYjplPj44JjI1NSxhOk1hdGgucm91bmQoKDI1NSZlKS8yLjU1KX06e3I6ZT4+MTYsZzplPj44JjI1NSxiOjI1NSZlfX1mdW5jdGlvbiBoc3ZUb1JnYih0KXt2YXIgZSxpLHMsbixvLHIsYSxsLGM9dC5oLGg9dC5zLHU9dC52LGQ9dC5hO3N3aXRjaChyPSh1Lz0xMDApKigxLShoLz0xMDApKSxhPXUqKDEtKG89NiooYy89MzYwKS0obj1NYXRoLmZsb29yKDYqYykpKSpoKSxsPXUqKDEtKDEtbykqaCksbiU2KXtjYXNlIDA6ZT11LGk9bCxzPXI7YnJlYWs7Y2FzZSAxOmU9YSxpPXUscz1yO2JyZWFrO2Nhc2UgMjplPXIsaT11LHM9bDticmVhaztjYXNlIDM6ZT1yLGk9YSxzPXU7YnJlYWs7Y2FzZSA0OmU9bCxpPXIscz11O2JyZWFrO2Nhc2UgNTplPXUsaT1yLHM9YX1yZXR1cm57cjpNYXRoLnJvdW5kKDI1NSplKSxnOk1hdGgucm91bmQoMjU1KmkpLGI6TWF0aC5yb3VuZCgyNTUqcyksYTpkfX1mdW5jdGlvbiByZ2JUb0hzdih0KXt2YXIgZSxpPXQucixzPXQuZyxuPXQuYixvPXQuYSxyPU1hdGgubWF4KGkscyxuKSxhPU1hdGgubWluKGkscyxuKSxsPXItYSxjPTA9PT1yPzA6bC9yLGg9ci8yNTU7c3dpdGNoKHIpe2Nhc2UgYTplPTA7YnJlYWs7Y2FzZSBpOmU9cy1uK2wqKHM8bj82OjApLGUvPTYqbDticmVhaztjYXNlIHM6ZT1uLWkrMipsLGUvPTYqbDticmVhaztjYXNlIG46ZT1pLXMrNCpsLGUvPTYqbH1yZXR1cm57aDpNYXRoLnJvdW5kKDM2MCplKSxzOk1hdGgucm91bmQoMTAwKmMpLHY6TWF0aC5yb3VuZCgxMDAqaCksYTpvfX12YXIgcmVSR0JBPS9eXFxzKnJnYihhKT9cXHMqXFwoKFxccyooXFxkKylcXHMqLFxccyo/KXsyfShcXGQrKVxccyosP1xccyooWzAxXT9cXC4/XFxkKj8pP1xccypcXClcXHMqJC87ZnVuY3Rpb24gdGV4dFRvUmdiKHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZ1wiKTt2YXIgZT1yZVJHQkEuZXhlYyh0KTtpZihlKXt2YXIgaT17cjpNYXRoLm1heCgyNTUscGFyc2VJbnQoZVsyXSwxMCkpLGc6TWF0aC5tYXgoMjU1LHBhcnNlSW50KGVbM10sMTApKSxiOk1hdGgubWF4KDI1NSxwYXJzZUludChlWzRdLDEwKSl9O3JldHVybiBlWzFdJiYoaS5hPU1hdGgubWF4KDEscGFyc2VGbG9hdChlWzVdKSkpLGl9cmV0dXJuIGhleFRvUmdiKHQpfWZ1bmN0aW9uIGxpZ2h0ZW4odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgYXMgY29sb3JcIik7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgbnVtZXJpYyBwZXJjZW50XCIpO3ZhciBpPXRleHRUb1JnYih0KSxzPWU8MD8wOjI1NSxuPU1hdGguYWJzKGUpLzEwMCxvPWkucixyPWkuZyxhPWkuYjtyZXR1cm5cIiNcIisoMTY3NzcyMTYrNjU1MzYqKE1hdGgucm91bmQoKHMtbykqbikrbykrMjU2KihNYXRoLnJvdW5kKChzLXIpKm4pK3IpKyhNYXRoLnJvdW5kKChzLWEpKm4pK2EpKS50b1N0cmluZygxNikuc2xpY2UoMSl9ZnVuY3Rpb24gbHVtaW5vc2l0eSh0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKCF0fHx2b2lkIDA9PT10LnIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZyBvciBhIHtyLCBnLCBifSBvYmplY3QgYXMgY29sb3JcIik7dmFyIGU9XCJzdHJpbmdcIj09dHlwZW9mIHQ/dGV4dFRvUmdiKHQpOnQsaT1lLnIvMjU1LHM9ZS5nLzI1NSxuPWUuYi8yNTU7cmV0dXJuLjIxMjYqKGk8PS4wMzkyOD9pLzEyLjkyOk1hdGgucG93KChpKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihzPD0uMDM5Mjg/cy8xMi45MjpNYXRoLnBvdygocysuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9ZnVuY3Rpb24gc2V0QnJhbmQodCxlLGkpe2lmKHZvaWQgMD09PWkmJihpPWRvY3VtZW50LmJvZHkpLFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZyBhcyBjb2xvclwiKTtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgYXMgdmFsdWVcIik7aWYoIShpIGluc3RhbmNlb2YgRWxlbWVudCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgRE9NIGVsZW1lbnRcIik7c3dpdGNoKGkuc3R5bGUuc2V0UHJvcGVydHkoXCItLXEtY29sb3ItXCIrdCxlKSx0KXtjYXNlXCJuZWdhdGl2ZVwiOmNhc2VcIndhcm5pbmdcIjppLnN0eWxlLnNldFByb3BlcnR5KFwiLS1xLWNvbG9yLVwiK3QrXCItbFwiLGxpZ2h0ZW4oZSw0NikpO2JyZWFrO2Nhc2VcImxpZ2h0XCI6aS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcS1jb2xvci1cIit0K1wiLWRcIixsaWdodGVuKGUsLTEwKSl9fWZ1bmN0aW9uIGdldEJyYW5kKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9ZG9jdW1lbnQuYm9keSksXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgc3RyaW5nIGFzIGNvbG9yXCIpO2lmKCEoZSBpbnN0YW5jZW9mIEVsZW1lbnQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIERPTSBlbGVtZW50XCIpO3JldHVybiBnZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUoXCItLXEtY29sb3ItXCIrdCkudHJpbSgpfHxudWxsfXZhciBjb2xvcnM9e3JnYlRvSGV4OnJnYlRvSGV4LGhleFRvUmdiOmhleFRvUmdiLGhzdlRvUmdiOmhzdlRvUmdiLHJnYlRvSHN2OnJnYlRvSHN2LHRleHRUb1JnYjp0ZXh0VG9SZ2IsbGlnaHRlbjpsaWdodGVuLGx1bWlub3NpdHk6bHVtaW5vc2l0eSxzZXRCcmFuZDpzZXRCcmFuZCxnZXRCcmFuZDpnZXRCcmFuZH07ZnVuY3Rpb24gZ2V0Qm9keUNsYXNzZXModCxlKXt2YXIgaT10LmlzLHM9dC5oYXMsbj10LndpdGhpbixvPVtcIm1hdFwiLGkuZGVza3RvcD9cImRlc2t0b3BcIjpcIm1vYmlsZVwiLHMudG91Y2g/XCJ0b3VjaFwiOlwibm8tdG91Y2hcIixcInBsYXRmb3JtLVwiKyhpLmlvcz9cImlvc1wiOlwibWF0XCIpXTtpZihpLmNvcmRvdmEmJihvLnB1c2goXCJjb3Jkb3ZhXCIpLGkuaW9zJiYodm9pZCAwPT09ZS5jb3Jkb3ZhfHwhMSE9PWUuY29yZG92YS5pb3NTdGF0dXNCYXJQYWRkaW5nKSkpe3ZhciByPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxLGE9d2luZG93LnNjcmVlbi53aWR0aCpyLGw9d2luZG93LnNjcmVlbi5oZWlnaHQqcjsxMTI1PT09YSYmMjQzNj09PWwmJm8ucHVzaChcInEtaW9zLXN0YXR1c2Jhci14XCIpLDExMjU9PT1hJiYyMDAxPT09bHx8by5wdXNoKFwicS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmdcIil9cmV0dXJuIG4uaWZyYW1lJiZvLnB1c2goXCJ3aXRoaW4taWZyYW1lXCIpLGkuZWxlY3Ryb24mJm8ucHVzaChcImVsZWN0cm9uXCIpLG99ZnVuY3Rpb24gYm9keUluaXQodCxlKXt2YXIgaT1nZXRCb2R5Q2xhc3Nlcyh0LGUpO3QuaXMuaWUmJjExPT09dC5pcy52ZXJzaW9uTnVtYmVyP2kuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKHQpfSk6ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkLmFwcGx5KGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LGkpLHQuaXMuaW9zJiZkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBzZXRDb2xvcnModCl7Zm9yKHZhciBlIGluIHQpc2V0QnJhbmQoZSx0W2VdKX12YXIgQm9keT17aW5zdGFsbDpmdW5jdGlvbih0LGUsaSl7aXNTU1I/ZS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3ZhciBzPWdldEJvZHlDbGFzc2VzKHQucGxhdGZvcm0saSksbj1lLnNzci5zZXRCb2R5Q2xhc3NlcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24ocyk6ZS5zc3IuUV9CT0RZX0NMQVNTRVM9cy5qb2luKFwiIFwiKX0pOihpLmJyYW5kJiZzZXRDb2xvcnMoaS5icmFuZCksYm9keUluaXQodC5wbGF0Zm9ybSxpKSl9fSxtYXRlcmlhbEljb25zPXtuYW1lOlwibWF0ZXJpYWwtaWNvbnNcIix0eXBlOntwb3NpdGl2ZTpcImNoZWNrX2NpcmNsZVwiLG5lZ2F0aXZlOlwid2FybmluZ1wiLGluZm86XCJpbmZvXCIsd2FybmluZzpcInByaW9yaXR5X2hpZ2hcIn0sYXJyb3c6e3VwOlwiYXJyb3dfdXB3YXJkXCIscmlnaHQ6XCJhcnJvd19mb3J3YXJkXCIsZG93bjpcImFycm93X2Rvd253YXJkXCIsbGVmdDpcImFycm93X2JhY2tcIn0sY2hldnJvbjp7bGVmdDpcImNoZXZyb25fbGVmdFwiLHJpZ2h0OlwiY2hldnJvbl9yaWdodFwifSxwdWxsVG9SZWZyZXNoOnthcnJvdzpcImFycm93X2Rvd253YXJkXCIscmVmcmVzaDpcInJlZnJlc2hcIn0sc2VhcmNoOntpY29uOlwic2VhcmNoXCIsY2xlYXI6XCJjYW5jZWxcIixjbGVhckludmVydGVkOlwiY2xlYXJcIn0sY2Fyb3VzZWw6e2xlZnQ6XCJjaGV2cm9uX2xlZnRcIixyaWdodDpcImNoZXZyb25fcmlnaHRcIixxdWlja05hdjpcImxlbnNcIix0aHVtYm5haWxzOlwidmlld19jYXJvdXNlbFwifSxjaGVja2JveDp7Y2hlY2tlZDp7aW9zOlwiY2hlY2tfY2lyY2xlXCIsbWF0OlwiY2hlY2tfYm94XCJ9LHVuY2hlY2tlZDp7aW9zOlwicmFkaW9fYnV0dG9uX3VuY2hlY2tlZFwiLG1hdDpcImNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXCJ9LGluZGV0ZXJtaW5hdGU6e2lvczpcInJlbW92ZV9jaXJjbGVfb3V0bGluZVwiLG1hdDpcImluZGV0ZXJtaW5hdGVfY2hlY2tfYm94XCJ9fSxjaGlwOntjbG9zZTpcImNhbmNlbFwifSxjaGlwc0lucHV0OnthZGQ6XCJzZW5kXCJ9LGNvbGxhcHNpYmxlOntpY29uOlwiYXJyb3dfZHJvcF9kb3duXCJ9LGRhdGV0aW1lOnthcnJvd0xlZnQ6XCJjaGV2cm9uX2xlZnRcIixhcnJvd1JpZ2h0OlwiY2hldnJvbl9yaWdodFwifSxlZGl0b3I6e2JvbGQ6XCJmb3JtYXRfYm9sZFwiLGl0YWxpYzpcImZvcm1hdF9pdGFsaWNcIixzdHJpa2V0aHJvdWdoOlwic3RyaWtldGhyb3VnaF9zXCIsdW5kZXJsaW5lOlwiZm9ybWF0X3VuZGVybGluZWRcIix1bm9yZGVyZWRMaXN0OlwiZm9ybWF0X2xpc3RfYnVsbGV0ZWRcIixvcmRlcmVkTGlzdDpcImZvcm1hdF9saXN0X251bWJlcmVkXCIsc3Vic2NyaXB0OlwidmVydGljYWxfYWxpZ25fYm90dG9tXCIsc3VwZXJzY3JpcHQ6XCJ2ZXJ0aWNhbF9hbGlnbl90b3BcIixoeXBlcmxpbms6XCJsaW5rXCIsdG9nZ2xlRnVsbHNjcmVlbjpcImZ1bGxzY3JlZW5cIixxdW90ZTpcImZvcm1hdF9xdW90ZVwiLGxlZnQ6XCJmb3JtYXRfYWxpZ25fbGVmdFwiLGNlbnRlcjpcImZvcm1hdF9hbGlnbl9jZW50ZXJcIixyaWdodDpcImZvcm1hdF9hbGlnbl9yaWdodFwiLGp1c3RpZnk6XCJmb3JtYXRfYWxpZ25fanVzdGlmeVwiLHByaW50OlwicHJpbnRcIixvdXRkZW50OlwiZm9ybWF0X2luZGVudF9kZWNyZWFzZVwiLGluZGVudDpcImZvcm1hdF9pbmRlbnRfaW5jcmVhc2VcIixyZW1vdmVGb3JtYXQ6XCJmb3JtYXRfY2xlYXJcIixmb3JtYXR0aW5nOlwidGV4dF9mb3JtYXRcIixmb250U2l6ZTpcImZvcm1hdF9zaXplXCIsYWxpZ246XCJmb3JtYXRfYWxpZ25fbGVmdFwiLGhyOlwicmVtb3ZlXCIsdW5kbzpcInVuZG9cIixyZWRvOlwicmVkb1wiLGhlYWRlcjpcImZvcm1hdF9zaXplXCIsY29kZTpcImNvZGVcIixzaXplOlwiZm9ybWF0X3NpemVcIixmb250OlwiZm9udF9kb3dubG9hZFwifSxmYWI6e2ljb246XCJhZGRcIixhY3RpdmVJY29uOlwiY2xvc2VcIn0saW5wdXQ6e3Nob3dQYXNzOlwidmlzaWJpbGl0eVwiLGhpZGVQYXNzOlwidmlzaWJpbGl0eV9vZmZcIixzaG93TnVtYmVyOlwia2V5Ym9hcmRcIixoaWRlTnVtYmVyOlwia2V5Ym9hcmRfaGlkZVwiLGNsZWFyOlwiY2FuY2VsXCIsY2xlYXJJbnZlcnRlZDpcImNsZWFyXCIsZHJvcGRvd246XCJhcnJvd19kcm9wX2Rvd25cIn0scGFnaW5hdGlvbjp7Zmlyc3Q6XCJmaXJzdF9wYWdlXCIscHJldjpcImtleWJvYXJkX2Fycm93X2xlZnRcIixuZXh0Olwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIixsYXN0OlwibGFzdF9wYWdlXCJ9LHJhZGlvOntjaGVja2VkOntpb3M6XCJjaGVja1wiLG1hdDpcInJhZGlvX2J1dHRvbl9jaGVja2VkXCJ9LHVuY2hlY2tlZDp7aW9zOlwiXCIsbWF0OlwicmFkaW9fYnV0dG9uX3VuY2hlY2tlZFwifX0scmF0aW5nOntpY29uOlwiZ3JhZGVcIn0sc3RlcHBlcjp7ZG9uZTpcImNoZWNrXCIsYWN0aXZlOlwiZWRpdFwiLGVycm9yOlwid2FybmluZ1wifSx0YWJzOntsZWZ0OlwiY2hldnJvbl9sZWZ0XCIscmlnaHQ6XCJjaGV2cm9uX3JpZ2h0XCJ9LHRhYmxlOnthcnJvd1VwOlwiYXJyb3dfdXB3YXJkXCIsd2FybmluZzpcIndhcm5pbmdcIixwcmV2UGFnZTpcImNoZXZyb25fbGVmdFwiLG5leHRQYWdlOlwiY2hldnJvbl9yaWdodFwifSx0cmVlOntpY29uOlwicGxheV9hcnJvd1wifSx1cGxvYWRlcjp7ZG9uZTpcImRvbmVcIixjbGVhcjpcImNhbmNlbFwiLGNsZWFySW52ZXJ0ZWQ6XCJjbGVhclwiLGFkZDpcImFkZFwiLHVwbG9hZDpcImNsb3VkX3VwbG9hZFwiLGV4cGFuZDpcImtleWJvYXJkX2Fycm93X2Rvd25cIixmaWxlOlwiaW5zZXJ0X2RyaXZlX2ZpbGVcIn19LEljb25zPXtfX2luc3RhbGxlZDohMSxpbnN0YWxsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzO3RoaXMuc2V0PWZ1bmN0aW9uKGkpe3ZvaWQgMD09PWkmJihpPW1hdGVyaWFsSWNvbnMpLGkuc2V0PXMuc2V0LGlzU1NSfHx0Lmljb24/dC5pY29uPWk6ZS51dGlsLmRlZmluZVJlYWN0aXZlKHQsXCJpY29uXCIsaSkscy5uYW1lPWkubmFtZSxzLmRlZj1pfSx0aGlzLnNldChpKX19LHF1ZXVlcz17c2VydmVyOltdLHRha2VvdmVyOltdfSwkcT17dmVyc2lvbjp2ZXJzaW9uLHRoZW1lOlwibWF0XCJ9O2Z1bmN0aW9uIGluc3RhbGwodCxlKXtpZih2b2lkIDA9PT1lJiYoZT17fSksIXRoaXMuX19pbnN0YWxsZWQpe3RoaXMuX19pbnN0YWxsZWQ9ITA7dmFyIGk9ZS5jb25maWd8fHt9O2lmKFBsYXRmb3JtLmluc3RhbGwoJHEscXVldWVzLHQpLEJvZHkuaW5zdGFsbCgkcSxxdWV1ZXMsaSksSGlzdG9yeS5pbnN0YWxsKCRxLGkpLGkxOG4uaW5zdGFsbCgkcSxxdWV1ZXMsdCxlLmkxOG4pLEljb25zLmluc3RhbGwoJHEsdCxlLmljb25TZXQpLGlzU1NSP3QubWl4aW4oe2JlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuJHE9dGhpcy4kcm9vdC4kb3B0aW9ucy4kcX19KTp0LnByb3RvdHlwZS4kcT0kcSxlLmNvbXBvbmVudHMmJk9iamVjdC5rZXlzKGUuY29tcG9uZW50cykuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz1lLmNvbXBvbmVudHNbaV07dm9pZCAwPT09cy5uYW1lfHx2b2lkIDA9PT1zLnJlbmRlciYmdm9pZCAwPT09cy5taXhpbnN8fHQuY29tcG9uZW50KHMubmFtZSxzKX0pLGUuZGlyZWN0aXZlcyYmT2JqZWN0LmtleXMoZS5kaXJlY3RpdmVzKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPWUuZGlyZWN0aXZlc1tpXTt2b2lkIDAhPT1zLm5hbWUmJnZvaWQgMCE9PXMudW5iaW5kJiZ0LmRpcmVjdGl2ZShzLm5hbWUscyl9KSxlLnBsdWdpbnMpe3ZhciBzPXskcTokcSxxdWV1ZXM6cXVldWVzLFZ1ZTp0LGNmZzppfTtPYmplY3Qua2V5cyhlLnBsdWdpbnMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9ZS5wbHVnaW5zW3RdO1wiZnVuY3Rpb25cIj09dHlwZW9mIGkuaW5zdGFsbCYmaSE9PVBsYXRmb3JtJiZpLmluc3RhbGwocyl9KX19fXZhciBtaXhpbj17bW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cXVldWVzLnRha2VvdmVyLmZvckVhY2goZnVuY3Rpb24oZSl7ZSh0LiRxKX0pfX07ZnVuY3Rpb24gc3NyVXBkYXRlKHQpe2lmKHQuc3NyKXt2YXIgZT1PYmplY3QuYXNzaWduKHt9LCRxKTtPYmplY3QuYXNzaWduKHQuc3NyLHtRX0hFQURfVEFHUzpcIlwiLFFfQk9EWV9BVFRSUzpcIlwiLFFfQk9EWV9UQUdTOlwiXCJ9KSxxdWV1ZXMuc2VydmVyLmZvckVhY2goZnVuY3Rpb24oaSl7aShlLHQpfSksdC5hcHAuJHE9ZX1lbHNle3ZhciBpPXQuYXBwLm1peGluc3x8W107aS5pbmNsdWRlcyhtaXhpbil8fCh0LmFwcC5taXhpbnM9aS5jb25jYXQobWl4aW4pKX19dmFyIHRoZW1lPVwibWF0XCIsVnVlUGx1Z2luPXt2ZXJzaW9uOnZlcnNpb24saW5zdGFsbDppbnN0YWxsLGkxOG46aTE4bixpY29uczpJY29ucyx0aGVtZTp0aGVtZSxzc3JVcGRhdGU6c3NyVXBkYXRlfSxoYW5kbGVycz1bXSxFc2NhcGVLZXk9e19faW5zdGFsbGVkOiExLF9faW5zdGFsbDpmdW5jdGlvbigpe3RoaXMuX19pbnN0YWxsZWQ9ITAsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGZ1bmN0aW9uKHQpezAhPT1oYW5kbGVycy5sZW5ndGgmJigyNyE9PXQud2hpY2gmJjI3IT09dC5rZXlDb2RlfHxoYW5kbGVyc1toYW5kbGVycy5sZW5ndGgtMV0oKSl9KX0scmVnaXN0ZXI6ZnVuY3Rpb24odCl7UGxhdGZvcm0uaXMuZGVza3RvcCYmKHRoaXMuX19pbnN0YWxsZWR8fHRoaXMuX19pbnN0YWxsKCksaGFuZGxlcnMucHVzaCh0KSl9LHBvcDpmdW5jdGlvbigpe1BsYXRmb3JtLmlzLmRlc2t0b3AmJmhhbmRsZXJzLnBvcCgpfX0sTW9kZWxUb2dnbGVNaXhpbj17cHJvcHM6e3ZhbHVlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd2luZzohMX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuZGlzYWJsZSYmdD90aGlzLiRlbWl0KFwiaW5wdXRcIiwhMSk6dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLnZhbHVlIT09ZS5zaG93aW5nJiZlW3Q/XCJzaG93XCI6XCJoaWRlXCJdKCl9KX19LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t0aGlzLnNob3dpbmc/XCJoaWRlXCI6XCJzaG93XCJdKHQpfSxzaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuZGlzYWJsZXx8dGhpcy5zaG93aW5nP3RoaXMuc2hvd1Byb21pc2V8fFByb21pc2UucmVzb2x2ZSh0KToodGhpcy5oaWRlUHJvbWlzZSYmdGhpcy5oaWRlUHJvbWlzZVJlamVjdCgpLHRoaXMuc2hvd2luZz0hMCwhMT09PXRoaXMudmFsdWUmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLCEwKSwodm9pZCAwPT09dGhpcy4kb3B0aW9ucy5tb2RlbFRvZ2dsZXx8dGhpcy4kb3B0aW9ucy5tb2RlbFRvZ2dsZS5oaXN0b3J5KSYmKHRoaXMuX19oaXN0b3J5RW50cnk9e2hhbmRsZXI6dGhpcy5oaWRlfSxIaXN0b3J5LmFkZCh0aGlzLl9faGlzdG9yeUVudHJ5KSksdGhpcy5fX3Nob3c/KHRoaXMuc2hvd1Byb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxzKXtlLnNob3dQcm9taXNlUmVzb2x2ZT1mdW5jdGlvbigpe2Uuc2hvd1Byb21pc2U9bnVsbCxlLiRlbWl0KFwic2hvd1wiLHQpLGkodCl9LGUuc2hvd1Byb21pc2VSZWplY3Q9ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSksZS5zaG93UHJvbWlzZT1udWxsLHMobnVsbCl9fSksdGhpcy5fX3Nob3codCksdGhpcy5zaG93UHJvbWlzZXx8UHJvbWlzZS5yZXNvbHZlKHQpKToodGhpcy4kZW1pdChcInNob3dcIix0KSxQcm9taXNlLnJlc29sdmUodCkpKX0saGlkZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmRpc2FibGV8fCF0aGlzLnNob3dpbmc/dGhpcy5oaWRlUHJvbWlzZXx8UHJvbWlzZS5yZXNvbHZlKHQpOih0aGlzLnNob3dQcm9taXNlJiZ0aGlzLnNob3dQcm9taXNlUmVqZWN0KCksdGhpcy5zaG93aW5nPSExLCEwPT09dGhpcy52YWx1ZSYmdGhpcy4kZW1pdChcImlucHV0XCIsITEpLHRoaXMuX19yZW1vdmVIaXN0b3J5KCksdGhpcy5fX2hpZGU/KHRoaXMuaGlkZVByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxzKXtlLmhpZGVQcm9taXNlUmVzb2x2ZT1mdW5jdGlvbigpe2UuaGlkZVByb21pc2U9bnVsbCxlLiRlbWl0KFwiaGlkZVwiLHQpLGkoKX0sZS5oaWRlUHJvbWlzZVJlamVjdD1mdW5jdGlvbigpe2UuaGlkZVByb21pc2UuY2F0Y2goZnVuY3Rpb24oKXt9KSxlLmhpZGVQcm9taXNlPW51bGwscyhudWxsKX19KSx0aGlzLl9faGlkZSh0KSx0aGlzLmhpZGVQcm9taXNlfHxQcm9taXNlLnJlc29sdmUodCkpOih0aGlzLiRlbWl0KFwiaGlkZVwiLHQpLFByb21pc2UucmVzb2x2ZSgpKSl9LF9fcmVtb3ZlSGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuX19oaXN0b3J5RW50cnkmJihIaXN0b3J5LnJlbW92ZSh0aGlzLl9faGlzdG9yeUVudHJ5KSx0aGlzLl9faGlzdG9yeUVudHJ5PW51bGwpfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2hvd2luZyYmKHRoaXMuc2hvd1Byb21pc2UmJnRoaXMuc2hvd1Byb21pc2VSZWplY3QoKSx0aGlzLmhpZGVQcm9taXNlJiZ0aGlzLmhpZGVQcm9taXNlUmVqZWN0KCksdGhpcy5fX3JlbW92ZUhpc3RvcnkoKSl9fSxsaXN0ZW5PcHRzPXt9O2Z1bmN0aW9uIGxlZnRDbGljayh0KXtyZXR1cm4gMD09PXQuYnV0dG9ufWZ1bmN0aW9uIG1pZGRsZUNsaWNrKHQpe3JldHVybiAxPT09dC5idXR0b259ZnVuY3Rpb24gcmlnaHRDbGljayh0KXtyZXR1cm4gMj09PXQuYnV0dG9ufWZ1bmN0aW9uIGdldEV2ZW50S2V5KHQpe3JldHVybiB0LndoaWNofHx0LmtleUNvZGV9ZnVuY3Rpb24gcG9zaXRpb24odCl7dmFyIGUsaTtpZih0LnRvdWNoZXMmJnQudG91Y2hlc1swXT90PXQudG91Y2hlc1swXTp0LmNoYW5nZWRUb3VjaGVzJiZ0LmNoYW5nZWRUb3VjaGVzWzBdJiYodD10LmNoYW5nZWRUb3VjaGVzWzBdKSx0LmNsaWVudFh8fHQuY2xpZW50WSllPXQuY2xpZW50WCxpPXQuY2xpZW50WTtlbHNlIGlmKHQucGFnZVh8fHQucGFnZVkpZT10LnBhZ2VYLWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdC1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxpPXQucGFnZVktZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtlbHNle3ZhciBzPXRhcmdldEVsZW1lbnQodCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZT0ocy5yaWdodC1zLmxlZnQpLzIrcy5sZWZ0LGk9KHMuYm90dG9tLXMudG9wKS8yK3MudG9wfXJldHVybnt0b3A6aSxsZWZ0OmV9fWZ1bmN0aW9uIHRhcmdldEVsZW1lbnQodCl7dmFyIGU7cmV0dXJuIHQudGFyZ2V0P2U9dC50YXJnZXQ6dC5zcmNFbGVtZW50JiYoZT10LnNyY0VsZW1lbnQpLDM9PT1lLm5vZGVUeXBlJiYoZT1lLnBhcmVudE5vZGUpLGV9ZnVuY3Rpb24gZ2V0RXZlbnRQYXRoKHQpe2lmKHQucGF0aClyZXR1cm4gdC5wYXRoO2lmKHQuY29tcG9zZWRQYXRoKXJldHVybiB0LmNvbXBvc2VkUGF0aCgpO2Zvcih2YXIgZT1bXSxpPXQudGFyZ2V0O2k7KXtpZihlLnB1c2goaSksXCJIVE1MXCI9PT1pLnRhZ05hbWUpcmV0dXJuIGUucHVzaChkb2N1bWVudCksZS5wdXNoKHdpbmRvdyksZTtpPWkucGFyZW50RWxlbWVudH19T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpc3Rlbk9wdHMsXCJwYXNzaXZlXCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdDt0cnl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt0PXtwYXNzaXZlOiEwfX19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInF0ZXN0XCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInF0ZXN0XCIsbnVsbCxlKX1jYXRjaCh0KXt9cmV0dXJuIGxpc3Rlbk9wdHMucGFzc2l2ZT10LHR9LHNldDpmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhc3NpdmVcIix7dmFsdWU6dH0pfX0pO3ZhciBMSU5FX0hFSUdIVD00MCxQQUdFX0hFSUdIVD04MDA7ZnVuY3Rpb24gZ2V0TW91c2VXaGVlbERpc3RhbmNlKHQpe3ZhciBlLGk9dC5kZWx0YVgscz10LmRlbHRhWTtpZigoaXx8cykmJnQuZGVsdGFNb2RlKXt2YXIgbj0xPT09dC5kZWx0YU1vZGU/TElORV9IRUlHSFQ6UEFHRV9IRUlHSFQ7aSo9bixzKj1ufXJldHVybiB0LnNoaWZ0S2V5JiYhaSYmKHM9KGU9W2ksc10pWzBdLGk9ZVsxXSkse3g6aSx5OnN9fWZ1bmN0aW9uIHN0b3BBbmRQcmV2ZW50KHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpfXZhciBldmVudD17bGlzdGVuT3B0czpsaXN0ZW5PcHRzLGxlZnRDbGljazpsZWZ0Q2xpY2ssbWlkZGxlQ2xpY2s6bWlkZGxlQ2xpY2sscmlnaHRDbGljazpyaWdodENsaWNrLGdldEV2ZW50S2V5OmdldEV2ZW50S2V5LHBvc2l0aW9uOnBvc2l0aW9uLHRhcmdldEVsZW1lbnQ6dGFyZ2V0RWxlbWVudCxnZXRFdmVudFBhdGg6Z2V0RXZlbnRQYXRoLGdldE1vdXNlV2hlZWxEaXN0YW5jZTpnZXRNb3VzZVdoZWVsRGlzdGFuY2Usc3RvcEFuZFByZXZlbnQ6c3RvcEFuZFByZXZlbnR9O2Z1bmN0aW9uIG9mZnNldCh0KXtpZighdHx8dD09PXdpbmRvdylyZXR1cm57dG9wOjAsbGVmdDowfTt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6ZS50b3AsbGVmdDplLmxlZnR9fWZ1bmN0aW9uIHN0eWxlKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gaGVpZ2h0KHQpe3JldHVybiB0PT09d2luZG93P3dpbmRvdy5pbm5lckhlaWdodDpwYXJzZUZsb2F0KHN0eWxlKHQsXCJoZWlnaHRcIikpfWZ1bmN0aW9uIHdpZHRoKHQpe3JldHVybiB0PT09d2luZG93P3dpbmRvdy5pbm5lcldpZHRoOnBhcnNlRmxvYXQoc3R5bGUodCxcIndpZHRoXCIpKX1mdW5jdGlvbiBjc3ModCxlKXt2YXIgaT10LnN0eWxlO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XT1lW3RdfSl9ZnVuY3Rpb24gcmVhZHkodCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm5cImxvYWRpbmdcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/dCgpOnZvaWQgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIix0LCExKX12YXIgcHJlZml4PVtcIi13ZWJraXQtXCIsXCItbW96LVwiLFwiLW1zLVwiLFwiLW8tXCJdO2Z1bmN0aW9uIGNzc1RyYW5zZm9ybSh0KXt2YXIgZT17dHJhbnNmb3JtOnR9O3JldHVybiBwcmVmaXguZm9yRWFjaChmdW5jdGlvbihpKXtlW2krXCJ0cmFuc2Zvcm1cIl09dH0pLGV9dmFyIHNpemUsZG9tPXtvZmZzZXQ6b2Zmc2V0LHN0eWxlOnN0eWxlLGhlaWdodDpoZWlnaHQsd2lkdGg6d2lkdGgsY3NzOmNzcyxyZWFkeTpyZWFkeSxjc3NUcmFuc2Zvcm06Y3NzVHJhbnNmb3JtfTtmdW5jdGlvbiBnZXRTY3JvbGxUYXJnZXQodCl7cmV0dXJuIHQuY2xvc2VzdChcIi5zY3JvbGwsLnNjcm9sbC15LC5vdmVyZmxvdy1hdXRvXCIpfHx3aW5kb3d9ZnVuY3Rpb24gZ2V0U2Nyb2xsSGVpZ2h0KHQpe3JldHVybih0PT09d2luZG93P2RvY3VtZW50LmJvZHk6dCkuc2Nyb2xsSGVpZ2h0fWZ1bmN0aW9uIGdldFNjcm9sbFBvc2l0aW9uKHQpe3JldHVybiB0PT09d2luZG93P3dpbmRvdy5wYWdlWU9mZnNldHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wfHwwOnQuc2Nyb2xsVG9wfWZ1bmN0aW9uIGdldEhvcml6b250YWxTY3JvbGxQb3NpdGlvbih0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cucGFnZVhPZmZzZXR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fDA6dC5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGFuaW1TY3JvbGxUbyh0LGUsaSl7dmFyIHM9Z2V0U2Nyb2xsUG9zaXRpb24odCk7aTw9MD9zIT09ZSYmc2V0U2Nyb2xsKHQsZSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dmFyIG49cysoZS1zKS9NYXRoLm1heCgxNixpKSoxNjtzZXRTY3JvbGwodCxuKSxuIT09ZSYmYW5pbVNjcm9sbFRvKHQsZSxpLTE2KX0pfWZ1bmN0aW9uIHNldFNjcm9sbCh0LGUpe2lmKHQ9PT13aW5kb3cpcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A9ZSx2b2lkKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wPWUpO3Quc2Nyb2xsVG9wPWV9ZnVuY3Rpb24gc2V0U2Nyb2xsUG9zaXRpb24odCxlLGkpe2k/YW5pbVNjcm9sbFRvKHQsZSxpKTpzZXRTY3JvbGwodCxlKX1mdW5jdGlvbiBnZXRTY3JvbGxiYXJXaWR0aCgpe2lmKHZvaWQgMCE9PXNpemUpcmV0dXJuIHNpemU7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIiksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Nzcyh0LHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIyMDBweFwifSksY3NzKGUse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCIwcHhcIixsZWZ0OlwiMHB4XCIsdmlzaWJpbGl0eTpcImhpZGRlblwiLHdpZHRoOlwiMjAwcHhcIixoZWlnaHQ6XCIxNTBweFwiLG92ZXJmbG93OlwiaGlkZGVuXCJ9KSxlLmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIGk9dC5vZmZzZXRXaWR0aDtlLnN0eWxlLm92ZXJmbG93PVwic2Nyb2xsXCI7dmFyIHM9dC5vZmZzZXRXaWR0aDtyZXR1cm4gaT09PXMmJihzPWUuY2xpZW50V2lkdGgpLGUucmVtb3ZlKCksc2l6ZT1pLXN9ZnVuY3Rpb24gaGFzU2Nyb2xsYmFyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSEwKSwhKCF0fHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpJiYoZT90LnNjcm9sbEhlaWdodD50LmNsaWVudEhlaWdodCYmKHQuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2Nyb2xsXCIpfHx0LmNsYXNzTGlzdC5jb250YWlucyhcIm92ZXJmbG93LWF1dG9cIil8fFtcImF1dG9cIixcInNjcm9sbFwiXS5pbmNsdWRlcyh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtcIm92ZXJmbG93LXlcIl0pKTp0LnNjcm9sbFdpZHRoPnQuY2xpZW50V2lkdGgmJih0LmNsYXNzTGlzdC5jb250YWlucyhcInNjcm9sbFwiKXx8dC5jbGFzc0xpc3QuY29udGFpbnMoXCJvdmVyZmxvdy1hdXRvXCIpfHxbXCJhdXRvXCIsXCJzY3JvbGxcIl0uaW5jbHVkZXMod2luZG93LmdldENvbXB1dGVkU3R5bGUodClbXCJvdmVyZmxvdy14XCJdKSkpfXZhciBzY3JvbGw9e2dldFNjcm9sbFRhcmdldDpnZXRTY3JvbGxUYXJnZXQsZ2V0U2Nyb2xsSGVpZ2h0OmdldFNjcm9sbEhlaWdodCxnZXRTY3JvbGxQb3NpdGlvbjpnZXRTY3JvbGxQb3NpdGlvbixhbmltU2Nyb2xsVG86YW5pbVNjcm9sbFRvLHNldFNjcm9sbFBvc2l0aW9uOnNldFNjcm9sbFBvc2l0aW9uLGdldFNjcm9sbGJhcldpZHRoOmdldFNjcm9sbGJhcldpZHRoLGhhc1Njcm9sbGJhcjpoYXNTY3JvbGxiYXJ9LHJlZ2lzdGVyZWQ9MDtmdW5jdGlvbiBvbldoZWVsKHQpe3Nob3VsZFByZXZlbnRTY3JvbGwodCkmJnN0b3BBbmRQcmV2ZW50KHQpfWZ1bmN0aW9uIHNob3VsZFByZXZlbnRTY3JvbGwodCl7aWYodC50YXJnZXQ9PT1kb2N1bWVudC5ib2R5fHx0LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLWxheW91dC1iYWNrZHJvcFwiKSlyZXR1cm4hMDtmb3IodmFyIGU9Z2V0RXZlbnRQYXRoKHQpLGk9dC5zaGlmdEtleSYmIXQuZGVsdGFYLHM9IWkmJk1hdGguYWJzKHQuZGVsdGFYKTw9TWF0aC5hYnModC5kZWx0YVkpLG49aXx8cz90LmRlbHRhWTp0LmRlbHRhWCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWVbb107aWYoaGFzU2Nyb2xsYmFyKHIscykpcmV0dXJuIHM/bjwwJiYwPT09ci5zY3JvbGxUb3B8fG4+MCYmci5zY3JvbGxUb3Arci5jbGllbnRIZWlnaHQ9PT1yLnNjcm9sbEhlaWdodDpuPDAmJjA9PT1yLnNjcm9sbExlZnR8fG4+MCYmci5zY3JvbGxMZWZ0K3IuY2xpZW50V2lkdGg9PT1yLnNjcm9sbFdpZHRofXJldHVybiEwfWZ1bmN0aW9uIHByZXZlbnRTY3JvbGwodCl7aWYoISgocmVnaXN0ZXJlZCs9dD8xOi0xKT4xKSl7dmFyIGU9dD9cImFkZFwiOlwicmVtb3ZlXCI7UGxhdGZvcm0uaXMubW9iaWxlP2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0W2VdKFwicS1ib2R5LXByZXZlbnQtc2Nyb2xsXCIpOlBsYXRmb3JtLmlzLmRlc2t0b3AmJndpbmRvd1tlK1wiRXZlbnRMaXN0ZW5lclwiXShcIndoZWVsXCIsb25XaGVlbCl9fXZhciBwb3NpdGlvbnM9e3RvcDpcIml0ZW1zLXN0YXJ0IGp1c3RpZnktY2VudGVyIHdpdGgtYmFja2Ryb3BcIixib3R0b206XCJpdGVtcy1lbmQganVzdGlmeS1jZW50ZXIgd2l0aC1iYWNrZHJvcFwiLHJpZ2h0OlwiaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHdpdGgtYmFja2Ryb3BcIixsZWZ0OlwiaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgd2l0aC1iYWNrZHJvcFwifSxwb3NpdGlvbkNTUz17bWF4SGVpZ2h0OlwiODB2aFwiLGhlaWdodDpcImF1dG9cIn07ZnVuY3Rpb24gYWRkaXRpb25hbENTUyh0KXt2YXIgZT17fTtyZXR1cm5bXCJsZWZ0XCIsXCJyaWdodFwiXS5pbmNsdWRlcyh0KSYmKGUubWF4V2lkdGg9XCI5MHZ3XCIpLFtcImxlZnRcIixcInRvcFwiXS5pbmNsdWRlcyh0KSYmKGUuYm9yZGVyVG9wTGVmdFJhZGl1cz0wKSxbXCJyaWdodFwiLFwidG9wXCJdLmluY2x1ZGVzKHQpJiYoZS5ib3JkZXJUb3BSaWdodFJhZGl1cz0wKSxbXCJsZWZ0XCIsXCJib3R0b21cIl0uaW5jbHVkZXModCkmJihlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXM9MCksW1wicmlnaHRcIixcImJvdHRvbVwiXS5pbmNsdWRlcyh0KSYmKGUuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM9MCksZX12YXIgbW9kYWxzPXtyZXNwb25zaXZlOjAsbWF4aW1pemVkOjB9LFFNb2RhbD17bmFtZTpcIlFNb2RhbFwiLG1peGluczpbTW9kZWxUb2dnbGVNaXhpbl0scHJvdmlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue19fcW1vZGFsOntyZWdpc3RlcjpmdW5jdGlvbihlKXt0LmxheW91dCE9PWUmJih0LmxheW91dD1lKX0sdW5yZWdpc3RlcjpmdW5jdGlvbihlKXt0LmxheW91dD09PWUmJih0LmxheW91dD1udWxsKX19fX0scHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVyblwiXCI9PT10fHxbXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSx0cmFuc2l0aW9uOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxwb3NpdGlvbkNsYXNzZXM6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJmbGV4LWNlbnRlclwifSxjb250ZW50Q2xhc3NlczpbT2JqZWN0LEFycmF5LFN0cmluZ10sY29udGVudENzczpbT2JqZWN0LEFycmF5LFN0cmluZ10sbm9CYWNrZHJvcERpc21pc3M6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxub0VzY0Rpc21pc3M6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxub1JvdXRlRGlzbWlzczpCb29sZWFuLG5vUmVmb2N1czpCb29sZWFuLG1pbmltaXplZDpCb29sZWFuLG1heGltaXplZDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2xheW91dDpudWxsfX0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpe3RoaXMubm9Sb3V0ZURpc21pc3N8fHRoaXMuaGlkZSgpfSxtYXhpbWl6ZWQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9fcmVnaXN0ZXIoITEsZSksdGhpcy5fX3JlZ2lzdGVyKCEwLHQpfSxtaW5pbWl6ZWQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9fcmVnaXN0ZXIoITEsdGhpcy5tYXhpbWl6ZWQsZSksdGhpcy5fX3JlZ2lzdGVyKCEwLHRoaXMubWF4aW1pemVkLHQpfX0sY29tcHV0ZWQ6e21vZGFsQ2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb24/cG9zaXRpb25zW3RoaXMucG9zaXRpb25dOnRoaXMucG9zaXRpb25DbGFzc2VzO3JldHVybiB0aGlzLm1heGltaXplZD9bXCJtYXhpbWl6ZWRcIix0XTp0aGlzLm1pbmltaXplZD9bXCJtaW5pbWl6ZWRcIix0XTp0fSxjb250ZW50Q2xhc3Nlc0NhbGM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQ/W3RoaXMuY29udGVudENsYXNzZXMsXCJjb2x1bW4gbm8td3JhcFwiXTp0aGlzLmNvbnRlbnRDbGFzc2VzfSx0cmFuc2l0aW9uUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj97bmFtZTpcInEtbW9kYWwtXCIrdGhpcy5wb3NpdGlvbn06dGhpcy5lbnRlckNsYXNzfHx0aGlzLmxlYXZlQ2xhc3M/e2VudGVyQWN0aXZlQ2xhc3M6dGhpcy5lbnRlckNsYXNzLGxlYXZlQWN0aXZlQ2xhc3M6dGhpcy5sZWF2ZUNsYXNzfTp7bmFtZTp0aGlzLnRyYW5zaXRpb258fFwicS1tb2RhbFwifX0sbW9kYWxDc3M6ZnVuY3Rpb24oKXtpZih0aGlzLnBvc2l0aW9uKXt2YXIgdD1BcnJheS5pc0FycmF5KHRoaXMuY29udGVudENzcyk/dGhpcy5jb250ZW50Q3NzOlt0aGlzLmNvbnRlbnRDc3NdO3JldHVybiB0LnVuc2hpZnQoT2JqZWN0LmFzc2lnbih7fSxwb3NpdGlvbkNTUyxhZGRpdGlvbmFsQ1NTKHRoaXMucG9zaXRpb24pKSksdH1yZXR1cm4gdGhpcy5jb250ZW50Q3NzfX0sbWV0aG9kczp7X19kaXNtaXNzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5vQmFja2Ryb3BEaXNtaXNzP3RoaXMuX19zaGFrZSgpOnRoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiZGlzbWlzc1wiKX0pfSxfX3Nob3c6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubm9SZWZvY3VzfHwodGhpcy5fX3JlZm9jdXNUYXJnZXQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCksdGhpcy5fX3JlZ2lzdGVyKCEwKSxwcmV2ZW50U2Nyb2xsKCEwKSxFc2NhcGVLZXkucmVnaXN0ZXIoZnVuY3Rpb24oKXt0Lm5vRXNjRGlzbWlzcz90Ll9fc2hha2UoKToodC4kZW1pdChcImVzY2FwZS1rZXlcIiksdC5oaWRlKCkudGhlbihmdW5jdGlvbigpe3QuJGVtaXQoXCJkaXNtaXNzXCIpfSkpfSk7dmFyIGU9dGhpcy4kcmVmcy5jb250ZW50O3RoaXMuJHEucGxhdGZvcm0uaXMuaW9zJiZlLmNsaWNrKCksZS5zY3JvbGxUb3A9MCxbXCJtb2RhbC1zY3JvbGxcIixcImxheW91dC12aWV3XCJdLmZvckVhY2goZnVuY3Rpb24odCl7W10uc2xpY2UuY2FsbChlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodCkpLmZvckVhY2goZnVuY3Rpb24odCl7dC5zY3JvbGxUb3A9MH0pfSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gZSYmZS5mb2N1cygpfSl9LF9faGlkZTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCksIXRoaXMubm9SZWZvY3VzJiZ0aGlzLl9fcmVmb2N1c1RhcmdldCYmKHRoaXMuX19yZWZvY3VzVGFyZ2V0LmZvY3VzKCksIXRoaXMuX19yZWZvY3VzVGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcInEtaWZcIikmJnRoaXMuX19yZWZvY3VzVGFyZ2V0LmJsdXIoKSl9LF9fY2xlYW51cDpmdW5jdGlvbigpe0VzY2FwZUtleS5wb3AoKSxwcmV2ZW50U2Nyb2xsKCExKSx0aGlzLl9fcmVnaXN0ZXIoITEpfSxfX3N0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfSxfX3JlZ2lzdGVyOmZ1bmN0aW9uKHQsZSxpKXt2b2lkIDA9PT1lJiYoZT10aGlzLm1heGltaXplZCksdm9pZCAwPT09aSYmKGk9dGhpcy5taW5pbWl6ZWQpO3ZhciBzPXQ/e2FjdGlvbjpcImFkZFwiLHN0ZXA6MX06e2FjdGlvbjpcInJlbW92ZVwiLHN0ZXA6LTF9O2lmKGUpe2lmKG1vZGFscy5tYXhpbWl6ZWQrPXMuc3RlcCwhdCYmbW9kYWxzLm1heGltaXplZD4wKXJldHVybjtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdFtzLmFjdGlvbl0oXCJxLW1heGltaXplZC1tb2RhbFwiKX1lbHNlIGlmKCFpKXtpZihtb2RhbHMucmVzcG9uc2l2ZSs9cy5zdGVwLCF0JiZtb2RhbHMucmVzcG9uc2l2ZT4wKXJldHVybjtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdFtzLmFjdGlvbl0oXCJxLXJlc3BvbnNpdmUtbW9kYWxcIil9fSxfX3NoYWtlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYW5pbWF0ZS1zaGFrZVwiKSx0aGlzLiRlbC5jbGFzc0xpc3QuYWRkKFwiYW5pbWF0ZS1zaGFrZVwiKSxjbGVhclRpbWVvdXQodGhpcy5zaGFrZVRpbWVvdXQpLHRoaXMuc2hha2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LiRlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYW5pbWF0ZS1zaGFrZVwiKX0sMTUwKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlJiZ0aGlzLnNob3coKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNoYWtlVGltZW91dCksdGhpcy4kZWwucmVtb3ZlKCksdGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcInRyYW5zaXRpb25cIix7cHJvcHM6dGhpcy50cmFuc2l0aW9uUHJvcHMsb246e2FmdGVyRW50ZXI6ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlJiZlLnNob3dQcm9taXNlUmVzb2x2ZSgpfSxlbnRlckNhbmNlbGxlZDpmdW5jdGlvbigpe2Uuc2hvd1Byb21pc2UmJmUuc2hvd1Byb21pc2VSZWplY3QoKSxlLiRlbC5yZW1vdmUoKX0sYWZ0ZXJMZWF2ZTpmdW5jdGlvbigpe2UuaGlkZVByb21pc2UmJmUuaGlkZVByb21pc2VSZXNvbHZlKCksZS4kZWwucmVtb3ZlKCl9LGxlYXZlQ2FuY2VsbGVkOmZ1bmN0aW9uKCl7ZS5oaWRlUHJvbWlzZSYmZS5oaWRlUHJvbWlzZVJlamVjdCgpfX19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwgZnVsbHNjcmVlbiByb3dcIixjbGFzczp0aGlzLm1vZGFsQ2xhc3NlcyxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLnNob3dpbmd9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1iYWNrZHJvcCBhYnNvbHV0ZS1mdWxsXCIsb246e2NsaWNrOnRoaXMuX19kaXNtaXNzfX0pLHQoXCJkaXZcIix7cmVmOlwiY29udGVudFwiLHN0YXRpY0NsYXNzOlwibW9kYWwtY29udGVudFwiLHN0eWxlOnRoaXMubW9kYWxDc3MsY2xhc3M6dGhpcy5jb250ZW50Q2xhc3Nlc0NhbGMsYXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6dGhpcy5fX3N0b3BQcm9wYWdhdGlvbix0b3VjaHN0YXJ0OnRoaXMuX19zdG9wUHJvcGFnYXRpb259fSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pXSl9fSxwcmVmaXgkMT1cIm1kXCIsUUljb249e25hbWU6XCJRSWNvblwiLHByb3BzOntuYW1lOlN0cmluZyxjb2xvcjpTdHJpbmcsc2l6ZTpTdHJpbmd9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLm5hbWU7cmV0dXJuIGU/KHQ9L15mYVtzfHJ8bHxiXXswLDF9IC8udGVzdChlKXx8ZS5zdGFydHNXaXRoKFwiaWNvbi1cIik/ZTplLnN0YXJ0c1dpdGgoXCJidC1cIik/XCJidCBcIitlOmUuc3RhcnRzV2l0aChcImV2YS1cIik/XCJldmEgXCIrZTovXmlvbi0obWR8aW9zfGxvZ28pLy50ZXN0KGUpP1wiaW9uaWNvbnMgXCIrZTplLnN0YXJ0c1dpdGgoXCJpb24tXCIpP1wiaW9uaWNvbnMgaW9uLVwiK3ByZWZpeCQxK2Uuc3Vic3RyKDMpOmUuc3RhcnRzV2l0aChcIm1kaS1cIik/XCJtZGkgXCIrZTpcIm1hdGVyaWFsLWljb25zXCIsdGhpcy5jb2xvcj90K1wiIHRleHQtXCIrdGhpcy5jb2xvcjp0KTpcIlwifSxjb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3Nlcy5zdGFydHNXaXRoKFwibWF0ZXJpYWwtaWNvbnNcIik/dGhpcy5uYW1lLnJlcGxhY2UoLyAvZyxcIl9cIik6XCIgXCJ9LHN0eWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKXJldHVybntmb250U2l6ZTp0aGlzLnNpemV9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiaVwiLHtzdGF0aWNDbGFzczpcInEtaWNvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp0aGlzLnN0eWxlLGF0dHJzOntcImFyaWEtaGlkZGVuXCI6ITB9fSxbdGhpcy5jb250ZW50LHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFMaXN0PXtuYW1lOlwiUUxpc3RcIixwcm9wczp7bm9Cb3JkZXI6Qm9vbGVhbixkYXJrOkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixzcGFyc2U6Qm9vbGVhbixzdHJpcGVkOkJvb2xlYW4sc3RyaXBlZE9kZDpCb29sZWFuLHNlcGFyYXRvcjpCb29sZWFuLGluc2V0U2VwYXJhdG9yOkJvb2xlYW4sbXVsdGlsaW5lOkJvb2xlYW4saGlnaGxpZ2h0OkJvb2xlYW4sbGluazpCb29sZWFufSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcIm5vLWJvcmRlclwiOnRoaXMubm9Cb3JkZXIsXCJxLWxpc3QtZGFya1wiOnRoaXMuZGFyayxcInEtbGlzdC1kZW5zZVwiOnRoaXMuZGVuc2UsXCJxLWxpc3Qtc3BhcnNlXCI6dGhpcy5zcGFyc2UsXCJxLWxpc3Qtc3RyaXBlZFwiOnRoaXMuc3RyaXBlZCxcInEtbGlzdC1zdHJpcGVkLW9kZFwiOnRoaXMuc3RyaXBlZE9kZCxcInEtbGlzdC1zZXBhcmF0b3JcIjp0aGlzLnNlcGFyYXRvcixcInEtbGlzdC1pbnNldC1zZXBhcmF0b3JcIjp0aGlzLmluc2V0U2VwYXJhdG9yLFwicS1saXN0LW11bHRpbGluZVwiOnRoaXMubXVsdGlsaW5lLFwicS1saXN0LWhpZ2hsaWdodFwiOnRoaXMuaGlnaGxpZ2h0LFwicS1saXN0LWxpbmtcIjp0aGlzLmxpbmt9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1saXN0XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LHJvdXRlckxpbmtFdmVudE5hbWU9XCJxcm91dGVybGlua2NsaWNrXCIsZXZ0PW51bGw7aWYoIWlzU1NSKXRyeXtldnQ9bmV3IEV2ZW50KHJvdXRlckxpbmtFdmVudE5hbWUpfWNhdGNoKHQpeyhldnQ9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKSkuaW5pdEV2ZW50KHJvdXRlckxpbmtFdmVudE5hbWUsITAsITEpfXZhciByb3V0ZXJMaW5rUHJvcHM9e3RvOltTdHJpbmcsT2JqZWN0XSxleGFjdDpCb29sZWFuLGFwcGVuZDpCb29sZWFuLHJlcGxhY2U6Qm9vbGVhbixldmVudDpbU3RyaW5nLEFycmF5XSxhY3RpdmVDbGFzczpTdHJpbmcsZXhhY3RBY3RpdmVDbGFzczpTdHJpbmd9LFJvdXRlckxpbmtNaXhpbj17cHJvcHM6cm91dGVyTGlua1Byb3BzLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cm91dGVyTGlua0V2ZW50TmFtZTpyb3V0ZXJMaW5rRXZlbnROYW1lfX19O2Z1bmN0aW9uIHRleHRTdHlsZSh0KXtyZXR1cm4gdm9pZCAwPT09dHx8dDwyP3t9OntvdmVyZmxvdzpcImhpZGRlblwiLGRpc3BsYXk6XCItd2Via2l0LWJveFwiLFwiLXdlYmtpdC1ib3gtb3JpZW50XCI6XCJ2ZXJ0aWNhbFwiLFwiLXdlYmtpdC1saW5lLWNsYW1wXCI6dH19dmFyIHN1Ykl0ZW1Qcm9wcz17aWNvbjpTdHJpbmcscmlnaHRJY29uOlN0cmluZyxpbWFnZTpTdHJpbmcscmlnaHRJbWFnZTpTdHJpbmcsYXZhdGFyOlN0cmluZyxyaWdodEF2YXRhcjpTdHJpbmcsbGV0dGVyOlN0cmluZyxyaWdodExldHRlcjpTdHJpbmcsbGFiZWw6U3RyaW5nLHN1YmxhYmVsOlN0cmluZyxsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXSxzdWJsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXX0sSXRlbU1peGluPXttaXhpbnM6W3twcm9wczpyb3V0ZXJMaW5rUHJvcHN9XSxwcm9wczp7ZGFyazpCb29sZWFuLGxpbms6Qm9vbGVhbixkZW5zZTpCb29sZWFuLHNwYXJzZTpCb29sZWFuLHNlcGFyYXRvcjpCb29sZWFuLGluc2V0U2VwYXJhdG9yOkJvb2xlYW4sbXVsdGlsaW5lOkJvb2xlYW4saGlnaGxpZ2h0OkJvb2xlYW4sdGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9fSxjb21wdXRlZDp7aXRlbUNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLWl0ZW1cIjohMCxcInEtaXRlbS1kaXZpc2lvblwiOiEwLFwicmVsYXRpdmUtcG9zaXRpb25cIjohMCxcInEtaXRlbS1kYXJrXCI6dGhpcy5kYXJrLFwicS1pdGVtLWRlbnNlXCI6dGhpcy5kZW5zZSxcInEtaXRlbS1zcGFyc2VcIjp0aGlzLnNwYXJzZSxcInEtaXRlbS1zZXBhcmF0b3JcIjp0aGlzLnNlcGFyYXRvcixcInEtaXRlbS1pbnNldC1zZXBhcmF0b3JcIjp0aGlzLmluc2V0U2VwYXJhdG9yLFwicS1pdGVtLW11bHRpbGluZVwiOnRoaXMubXVsdGlsaW5lLFwicS1pdGVtLWhpZ2hsaWdodFwiOnRoaXMuaGlnaGxpZ2h0LFwicS1pdGVtLWxpbmtcIjp0aGlzLnRvfHx0aGlzLmxpbmt9fX19LFFJdGVtPXtuYW1lOlwiUUl0ZW1cIixtaXhpbnM6W0l0ZW1NaXhpbl0scHJvcHM6e2FjdGl2ZTpCb29sZWFuLGxpbms6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwIT09dGhpcy50bz9cInEtbGlua1wiOnthY3RpdmU6dGhpcy5hY3RpdmV9LHRoaXMuaXRlbUNsYXNzZXNdfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLnRvP3QoXCJyb3V0ZXItbGlua1wiLHtwcm9wczpPYmplY3QuYXNzaWduKHt9LHRoaXMuJHByb3BzLHt0YWc6XCJhXCJ9KSxjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpOnQodGhpcy50YWcse2NsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRSXRlbVNpZGU9e25hbWU6XCJRSXRlbVNpZGVcIixwcm9wczp7cmlnaHQ6Qm9vbGVhbixpY29uOlN0cmluZyxsZXR0ZXI6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RofX0saW52ZXJ0ZWQ6Qm9vbGVhbixhdmF0YXI6U3RyaW5nLGltYWdlOlN0cmluZyxzdGFtcDpTdHJpbmcsY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmd9LGNvbXB1dGVkOnt0eXBlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm5bXCJpY29uXCIsXCJpbWFnZVwiLFwiYXZhdGFyXCIsXCJsZXR0ZXJcIixcInN0YW1wXCJdLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtcInEtaXRlbS1zaWRlLVwiKyh0aGlzLnJpZ2h0P1wicmlnaHRcIjpcImxlZnRcIildO3JldHVybiF0aGlzLmNvbG9yfHx0aGlzLmljb258fHRoaXMubGV0dGVyfHx0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuY29sb3IpLHR9LHR5cGVDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W1wicS1pdGVtLVwiK3RoaXMudHlwZV07cmV0dXJuIHRoaXMuY29sb3ImJih0aGlzLmludmVydGVkJiYodGhpcy5pY29ufHx0aGlzLmxldHRlcik/dC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvcik6dGhpcy50ZXh0Q29sb3J8fHQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvcikpLHRoaXMudGV4dENvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSx0aGlzLmludmVydGVkJiYodGhpcy5pY29ufHx0aGlzLmxldHRlcikmJih0LnB1c2goXCJxLWl0ZW0taW52ZXJ0ZWRcIiksdC5wdXNoKFwiZmxleFwiKSx0LnB1c2goXCJmbGV4LWNlbnRlclwiKSksdH0saW1hZ2VQYXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V8fHRoaXMuYXZhdGFyfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0aGlzLnR5cGUmJih0aGlzLmljb24/KGU9dChRSWNvbix7Y2xhc3M6dGhpcy5pbnZlcnRlZD9udWxsOnRoaXMudHlwZUNsYXNzZXMscHJvcHM6e25hbWU6dGhpcy5pY29ufX0pLHRoaXMuaW52ZXJ0ZWQmJihlPXQoXCJkaXZcIix7Y2xhc3M6dGhpcy50eXBlQ2xhc3Nlc30sW2VdKSkpOmU9dGhpcy5pbWFnZVBhdGg/dChcImltZ1wiLHtjbGFzczp0aGlzLnR5cGVDbGFzc2VzLGF0dHJzOntzcmM6dGhpcy5pbWFnZVBhdGh9fSk6dChcImRpdlwiLHtjbGFzczp0aGlzLnR5cGVDbGFzc2VzfSxbdGhpcy5zdGFtcHx8dGhpcy5sZXR0ZXJdKSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaXRlbS1zaWRlIHEtaXRlbS1zZWN0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbZSx0aGlzLiRzbG90cy5kZWZhdWx0XSl9fTtmdW5jdGlvbiB0ZXh0KHQsZSxpLHMpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pdGVtLVwiK2UrKDE9PT0ocz1wYXJzZUludChzLDEwKSk/XCIgZWxsaXBzaXNcIjpcIlwiKSxzdHlsZTp0ZXh0U3R5bGUocyksZG9tUHJvcHM6e2lubmVySFRNTDppfX0pfXZhciBRSXRlbU1haW49e25hbWU6XCJRSXRlbU1haW5cIixwcm9wczp7bGFiZWw6U3RyaW5nLGxhYmVsTGluZXM6W1N0cmluZyxOdW1iZXJdLHN1YmxhYmVsOlN0cmluZyxzdWJsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXSxpbnNldDpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtaXRlbS1tYWluIHEtaXRlbS1zZWN0aW9uXCIsY2xhc3M6e1wicS1pdGVtLW1haW4taW5zZXRcIjp0aGlzLmluc2V0fX0sW3RoaXMubGFiZWw/dGV4dCh0LFwibGFiZWxcIix0aGlzLmxhYmVsLHRoaXMubGFiZWxMaW5lcyk6bnVsbCx0aGlzLnN1YmxhYmVsP3RleHQodCxcInN1YmxhYmVsXCIsdGhpcy5zdWJsYWJlbCx0aGlzLnN1YmxhYmVsTGluZXMpOm51bGwsdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sUUl0ZW1TZXBhcmF0b3I9e25hbWU6XCJRSXRlbVNlcGFyYXRvclwiLHByb3BzOntpbnNldDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudFwiLGNsYXNzOntcInEtaXRlbS1zZXBhcmF0b3ItaW5zZXQtY29tcG9uZW50XCI6dGhpcy5pbnNldH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUFjdGlvblNoZWV0PXtuYW1lOlwiUUFjdGlvblNoZWV0XCIscHJvcHM6e3ZhbHVlOkJvb2xlYW4sdGl0bGU6U3RyaW5nLGdyaWQ6Qm9vbGVhbixhY3Rpb25zOkFycmF5LGRpc21pc3NMYWJlbDpTdHJpbmd9LGNvbXB1dGVkOntjb250ZW50Q3NzOmZ1bmN0aW9uKCl7fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPXRoaXMuJHNsb3RzLnRpdGxlfHx0aGlzLnRpdGxlO3JldHVybiBzJiZpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWN0aW9uc2hlZXQtdGl0bGUgY29sdW1uIGp1c3RpZnktY2VudGVyXCJ9LFtzXSkpLGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hY3Rpb25zaGVldC1ib2R5IHNjcm9sbFwifSx0aGlzLmFjdGlvbnM/W3RoaXMuZ3JpZD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hY3Rpb25zaGVldC1ncmlkIHJvdyB3cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIn0sdGhpcy5fX2dldEFjdGlvbnModCkpOnQoUUxpc3Qse3N0YXRpY0NsYXNzOlwibm8tYm9yZGVyXCIscHJvcHM6e2xpbms6ITB9fSx0aGlzLl9fZ2V0QWN0aW9ucyh0KSldOnRoaXMuJHNsb3RzLmRlZmF1bHQpKSx0KFFNb2RhbCx7cmVmOlwibW9kYWxcIixwcm9wczp7dmFsdWU6dGhpcy52YWx1ZSxwb3NpdGlvbjpcImJvdHRvbVwiLGNvbnRlbnRDc3M6dGhpcy5jb250ZW50Q3NzfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS4kZW1pdChcImlucHV0XCIsdCl9LHNob3c6ZnVuY3Rpb24oKXtlLiRlbWl0KFwic2hvd1wiKX0saGlkZTpmdW5jdGlvbigpe2UuJGVtaXQoXCJoaWRlXCIpfSxkaXNtaXNzOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImNhbmNlbFwiKX0sXCJlc2NhcGUta2V5XCI6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiZXNjYXBlLWtleVwiKX19fSxpKX0sbWV0aG9kczp7c2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLm1vZGFsLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLm1vZGFsP3RoaXMuJHJlZnMubW9kYWwuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfSxfX2dldEFjdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5hY3Rpb25zLm1hcChmdW5jdGlvbihpKXt2YXIgcztyZXR1cm4gaS5sYWJlbD90KGUuZ3JpZD9cImRpdlwiOlFJdGVtLCgocz17c3RhdGljQ2xhc3M6ZS5ncmlkP1wicS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gY3Vyc29yLXBvaW50ZXIgcmVsYXRpdmUtcG9zaXRpb24gY29sdW1uIGlubGluZSBmbGV4LWNlbnRlclwiOm51bGwsY2xhc3M6aS5jbGFzc2VzLGF0dHJzOnt0YWJpbmRleDowfX0pW2UuZ3JpZD9cIm9uXCI6XCJuYXRpdmVPblwiXT17Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fX29uT2soaSl9LGtleXVwOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJmUuX19vbk9rKGkpfX0scyksZS5ncmlkP1tpLmljb24/dChRSWNvbix7cHJvcHM6e25hbWU6aS5pY29uLGNvbG9yOmkuY29sb3J9fSk6bnVsbCxpLmF2YXRhcj90KFwiaW1nXCIse2RvbVByb3BzOntzcmM6aS5hdmF0YXJ9LHN0YXRpY0NsYXNzOlwiYXZhdGFyXCJ9KTpudWxsLHQoXCJzcGFuXCIsW2kubGFiZWxdKV06W3QoUUl0ZW1TaWRlLHtwcm9wczp7aWNvbjppLmljb24sY29sb3I6aS5jb2xvcixhdmF0YXI6aS5hdmF0YXJ9fSksdChRSXRlbU1haW4se3Byb3BzOntpbnNldDohMCxsYWJlbDppLmxhYmVsfX0pXSk6dChRSXRlbVNlcGFyYXRvcix7c3RhdGljQ2xhc3M6XCJjb2wtMTJcIn0pfSl9LF9fb25PazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmhhbmRsZXImJnQuaGFuZGxlcigpLGUuJGVtaXQoXCJva1wiLHQpfSl9LF9fb25DYW5jZWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiY2FuY2VsXCIpfSl9LF9fb25LZXlDYW5jZWw6ZnVuY3Rpb24odCl7MTM9PT1nZXRFdmVudEtleSh0KSYmdGhpcy5fX29uQ2FuY2VsKCl9fX0sdW5pdHM9W1wiQlwiLFwia0JcIixcIk1CXCIsXCJHQlwiLFwiVEJcIixcIlBCXCJdO2Z1bmN0aW9uIGh1bWFuU3RvcmFnZVNpemUodCl7Zm9yKHZhciBlPTA7cGFyc2VJbnQodCwxMCk+PTEwMjQmJmU8dW5pdHMubGVuZ3RoLTE7KXQvPTEwMjQsKytlO3JldHVybiB0LnRvRml4ZWQoMSkrXCIgXCIrdW5pdHNbZV19ZnVuY3Rpb24gY2FwaXRhbGl6ZSh0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWZ1bmN0aW9uIGJldHdlZW4odCxlLGkpe3JldHVybiBpPD1lP2U6TWF0aC5taW4oaSxNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBub3JtYWxpemVUb0ludGVydmFsKHQsZSxpKXtpZihpPD1lKXJldHVybiBlO3ZhciBzPWktZSsxLG49ZSsodC1lKSVzO3JldHVybiBuPGUmJihuPXMrbiksMD09PW4/MDpufWZ1bmN0aW9uIHBhZCh0LGUsaSl7dm9pZCAwPT09ZSYmKGU9Miksdm9pZCAwPT09aSYmKGk9XCIwXCIpO3ZhciBzPVwiXCIrdDtyZXR1cm4gcy5sZW5ndGg+PWU/czpuZXcgQXJyYXkoZS1zLmxlbmd0aCsxKS5qb2luKGkpK3N9dmFyIGZvcm1hdD17aHVtYW5TdG9yYWdlU2l6ZTpodW1hblN0b3JhZ2VTaXplLGNhcGl0YWxpemU6Y2FwaXRhbGl6ZSxiZXR3ZWVuOmJldHdlZW4sbm9ybWFsaXplVG9JbnRlcnZhbDpub3JtYWxpemVUb0ludGVydmFsLHBhZDpwYWR9LHhocj1pc1NTUj9udWxsOlhNTEh0dHBSZXF1ZXN0LHNlbmQ9aXNTU1I/bnVsbDp4aHIucHJvdG90eXBlLnNlbmQsc3RhY2s9e3N0YXJ0OltdLHN0b3A6W119LGhpZ2hqYWNrQ291bnQ9MDtmdW5jdGlvbiB0cmFuc2xhdGUodCl7dmFyIGU9dC5wLGk9dC5wb3Mscz10LmFjdGl2ZSxuPXQuaG9yaXosbz10LnJldmVyc2Uscj10LmRpcixhPTEsbD0xO3JldHVybiBuPyhvJiYoYT0tMSksXCJib3R0b21cIj09PWkmJihsPS0xKSx7dHJhbnNmb3JtOlwidHJhbnNsYXRlM2QoXCIrYSooZS0xMDApK1wiJSxcIisocz8wOi0yMDAqbCkrXCIlLDApXCJ9KToobyYmKGw9LTEpLFwicmlnaHRcIj09PWkmJihhPS0xKSx7dHJhbnNmb3JtOlwidHJhbnNsYXRlM2QoXCIrKHM/MDpyKmEqLTIwMCkrXCIlLFwiK2wqKGUtMTAwKStcIiUsMClcIn0pfWZ1bmN0aW9uIGluYyh0LGUpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT10PDI1PzMqTWF0aC5yYW5kb20oKSszOnQ8NjU/MypNYXRoLnJhbmRvbSgpOnQ8ODU/MipNYXRoLnJhbmRvbSgpOnQ8OTk/LjY6MCksYmV0d2Vlbih0K2UsMCwxMDApfWZ1bmN0aW9uIGhpZ2hqYWNrQWpheCh0LGUpe2Z1bmN0aW9uIGkoKXtzdGFjay5zdG9wLm1hcChmdW5jdGlvbih0KXt0KCl9KX1zdGFjay5zdGFydC5wdXNoKHQpLHN0YWNrLnN0b3AucHVzaChlKSwrK2hpZ2hqYWNrQ291bnQ+MXx8KHhoci5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10scz1hcmd1bWVudHMubGVuZ3RoO3MtLTspZVtzXT1hcmd1bWVudHNbc107c3RhY2suc3RhcnQubWFwKGZ1bmN0aW9uKHQpe3QoKX0pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsaSwhMSksdGhpcy5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLGZ1bmN0aW9uKCl7ND09PXQucmVhZHlTdGF0ZSYmaSgpfSwhMSksc2VuZC5hcHBseSh0aGlzLGUpfSl9ZnVuY3Rpb24gcmVzdG9yZUFqYXgodCxlKXtzdGFjay5zdGFydD1zdGFjay5zdGFydC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fSksc3RhY2suc3RvcD1zdGFjay5zdG9wLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWV9KSwoaGlnaGphY2tDb3VudD1NYXRoLm1heCgwLGhpZ2hqYWNrQ291bnQtMSkpfHwoeGhyLnByb3RvdHlwZS5zZW5kPXNlbmQpfXZhciBRQWpheEJhcj17bmFtZTpcIlFBamF4QmFyXCIscHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXS5pbmNsdWRlcyh0KX19LHNpemU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCIycHhcIn0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJyZWRcIn0sc2tpcEhpamFjazpCb29sZWFuLHJldmVyc2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjYWxsczowLHByb2dyZXNzOjAsb25TY3JlZW46ITEsYW5pbWF0ZTohMH19LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucG9zaXRpb24sXCJiZy1cIit0aGlzLmNvbG9yLHRoaXMuYW5pbWF0ZT9cIlwiOlwibm8tdHJhbnNpdGlvblwiXX0sc3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9uU2NyZWVuLGU9dHJhbnNsYXRlKHtwOnRoaXMucHJvZ3Jlc3MscG9zOnRoaXMucG9zaXRpb24sYWN0aXZlOnQsaG9yaXo6dGhpcy5ob3Jpem9udGFsLHJldmVyc2U6dGhpcy4kcS5pMThuLnJ0bCYmW1widG9wXCIsXCJib3R0b21cIl0uaW5jbHVkZXModGhpcy5wb3NpdGlvbik/IXRoaXMucmV2ZXJzZTp0aGlzLnJldmVyc2UsZGlyOnRoaXMuJHEuaTE4bi5ydGw/LTE6MX0pO3JldHVybiBlW3RoaXMuc2l6ZVByb3BdPXRoaXMuc2l6ZSxlLm9wYWNpdHk9dD8xOjAsZX0saG9yaXpvbnRhbDpmdW5jdGlvbigpe3JldHVyblwidG9wXCI9PT10aGlzLnBvc2l0aW9ufHxcImJvdHRvbVwiPT09dGhpcy5wb3NpdGlvbn0sc2l6ZVByb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsP1wiaGVpZ2h0XCI6XCJ3aWR0aFwifX0sbWV0aG9kczp7c3RhcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0zMDApLHRoaXMuY2FsbHMrKyx0aGlzLmNhbGxzPjF8fChjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy4kZW1pdChcInN0YXJ0XCIpLHRoaXMub25TY3JlZW58fCh0aGlzLnByb2dyZXNzPTAsdGhpcy5vblNjcmVlbj0hMCx0aGlzLmFuaW1hdGU9ITEsdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5hbmltYXRlPSEwLGUuX193b3JrKHQpfSwxMDApKSl9LGluY3JlbWVudDpmdW5jdGlvbih0KXt0aGlzLmNhbGxzPjAmJih0aGlzLnByb2dyZXNzPWluYyh0aGlzLnByb2dyZXNzLHQpKX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5jYWxscz1NYXRoLm1heCgwLHRoaXMuY2FsbHMtMSksISh0aGlzLmNhbGxzPjApKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy4kZW1pdChcInN0b3BcIik7dmFyIGU9ZnVuY3Rpb24oKXt0LmFuaW1hdGU9ITAsdC5wcm9ncmVzcz0xMDAsdC50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5vblNjcmVlbj0hMX0sMWUzKX07MD09PXRoaXMucHJvZ3Jlc3M/dGhpcy50aW1lcj1zZXRUaW1lb3V0KGUsMSk6ZSgpfX0sX193b3JrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5wcm9ncmVzczwxMDAmJih0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmluY3JlbWVudCgpLGUuX193b3JrKHQpfSx0KSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5za2lwSGlqYWNrfHwodGhpcy5oaWphY2tlZD0hMCxoaWdoamFja0FqYXgodGhpcy5zdGFydCx0aGlzLnN0b3ApKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmhpamFja2VkJiZyZXN0b3JlQWpheCh0aGlzLnN0YXJ0LHRoaXMuc3RvcCl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbG9hZGluZy1iYXJcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zdHlsZX0pfX07ZnVuY3Rpb24gc2hvd1JpcHBsZSh0LGUsaSl7dmFyIHM9aS5zdG9wLG49aS5jZW50ZXI7cyYmdC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgbyxyLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIiksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSxjPWUuY2xpZW50V2lkdGg+ZS5jbGllbnRIZWlnaHQ/ZS5jbGllbnRXaWR0aDplLmNsaWVudEhlaWdodCxoPShuP2M6MipjKStcInB4XCIsdT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGEuYXBwZW5kQ2hpbGQobCksYS5jbGFzc05hbWU9XCJxLXJpcHBsZS1jb250YWluZXJcIixsLmNsYXNzTmFtZT1cInEtcmlwcGxlLWFuaW1hdGlvblwiLGwuc3R5bGUud2lkdGg9aCxsLnN0eWxlLmhlaWdodD1oLGUuYXBwZW5kQ2hpbGQoYSksbilvPXI9MDtlbHNle3ZhciBkPXBvc2l0aW9uKHQpO289ZC5sZWZ0LXUubGVmdC1jLHI9ZC50b3AtdS50b3AtY31sLmNsYXNzTGlzdC5hZGQoXCJxLXJpcHBsZS1hbmltYXRpb24tZW50ZXJcIiksbC5jbGFzc0xpc3QuYWRkKFwicS1yaXBwbGUtYW5pbWF0aW9uLXZpc2libGVcIiksbC5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGUoXCIrbytcInB4LCBcIityK1wicHgpIHNjYWxlM2QoMCwgMCwgMClcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5jbGFzc0xpc3QucmVtb3ZlKFwicS1yaXBwbGUtYW5pbWF0aW9uLWVudGVyXCIpLGwuc3R5bGUudHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK28rXCJweCwgXCIrcitcInB4KSBzY2FsZTNkKDEsIDEsIDEpXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2wuY2xhc3NMaXN0LnJlbW92ZShcInEtcmlwcGxlLWFuaW1hdGlvbi12aXNpYmxlXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnJlbW92ZSgpfSwzMDApfSwzMDApfSwxMCl9ZnVuY3Rpb24gc2hvdWxkQWJvcnQodCl7dC5tYXQ7cmV0dXJuIHQuaW9zJiYhMH12YXIgUmlwcGxlPXtuYW1lOlwicmlwcGxlXCIsaW5zZXJ0ZWQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnZhbHVlLHM9ZS5tb2RpZmllcnM7aWYoIXNob3VsZEFib3J0KHMpKXt2YXIgbj17ZW5hYmxlZDohMSE9PWksbW9kaWZpZXJzOntzdG9wOnMuc3RvcCxjZW50ZXI6cy5jZW50ZXJ9LGNsaWNrOmZ1bmN0aW9uKGUpe24uZW5hYmxlZCYmLTEhPT1lLmRldGFpbCYmc2hvd1JpcHBsZShlLHQsbi5tb2RpZmllcnMpfSxrZXl1cDpmdW5jdGlvbihlKXtuLmVuYWJsZWQmJjEzPT09ZS5rZXlDb2RlJiZzaG93UmlwcGxlKGUsdCxuLm1vZGlmaWVycyl9fTt0Ll9fcXJpcHBsZT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsbi5jbGljaywhMSksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixuLmtleXVwLCExKX19LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWUudmFsdWUscz1lLm1vZGlmaWVycyxuPXMuc3RvcCxvPXMuY2VudGVyLHI9dC5fX3FyaXBwbGU7ciYmKHIuZW5hYmxlZD0hMSE9PWksci5tb2RpZmllcnM9e3N0b3A6bixjZW50ZXI6b30pfSx1bmJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLm1vZGlmaWVycyxzPXQuX19xcmlwcGxlO3MmJiFzaG91bGRBYm9ydChpKSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIscy5jbGljaywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixzLmtleXVwLCExKSxkZWxldGUgdC5fX3FyaXBwbGUpfX0sYWxpZ25NYXA9e2xlZnQ6XCJzdGFydFwiLGNlbnRlcjpcImNlbnRlclwiLHJpZ2h0OlwiZW5kXCIsYmV0d2VlbjpcImJldHdlZW5cIixhcm91bmQ6XCJhcm91bmRcIn0sYWxpZ25WYWx1ZXM9T2JqZWN0LmtleXMoYWxpZ25NYXApLEFsaWduTWl4aW49e3Byb3BzOnthbGlnbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImNlbnRlclwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gYWxpZ25WYWx1ZXMuaW5jbHVkZXModCl9fX0sY29tcHV0ZWQ6e2FsaWduQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cImp1c3RpZnktXCIrYWxpZ25NYXBbdGhpcy5hbGlnbl19fX0sc2l6ZXM9e3hzOjgsc206MTAsbWQ6MTQsbGc6MjAseGw6MjQsZm9ybToxNC43NzcsXCJmb3JtLWxhYmVsXCI6MjEuNzc3LFwiZm9ybS1oaWRlLXVuZGVybGluZVwiOjkuMzMzLFwiZm9ybS1sYWJlbC1oaWRlLXVuZGVybGluZVwiOjE2LjMzM30sQnRuTWl4aW49e21peGluczpbQWxpZ25NaXhpbl0sZGlyZWN0aXZlczp7UmlwcGxlOlJpcHBsZX0scHJvcHM6e3R5cGU6U3RyaW5nLGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0Om51bGx9LGRpc2FibGU6Qm9vbGVhbixsYWJlbDpbTnVtYmVyLFN0cmluZ10sbm9DYXBzOkJvb2xlYW4sbm9XcmFwOkJvb2xlYW4saWNvbjpTdHJpbmcsaWNvblJpZ2h0OlN0cmluZyxyb3VuZDpCb29sZWFuLG91dGxpbmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4scm91bmRlZDpCb29sZWFuLHB1c2g6Qm9vbGVhbixzaXplOlN0cmluZyxmYWI6Qm9vbGVhbixmYWJNaW5pOkJvb2xlYW4sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsZ2xvc3N5OkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixub1JpcHBsZTpCb29sZWFuLHRhYmluZGV4Ok51bWJlcix0bzpbT2JqZWN0LFN0cmluZ10scmVwbGFjZTpCb29sZWFufSxjb21wdXRlZDp7c3R5bGU6ZnVuY3Rpb24oKXtpZih0aGlzLnNpemUmJiF0aGlzLmZhYiYmIXRoaXMuZmFiTWluaSlyZXR1cm57Zm9udFNpemU6dGhpcy5zaXplIGluIHNpemVzP3NpemVzW3RoaXMuc2l6ZV0rXCJweFwiOnRoaXMuc2l6ZX19LGlzUmVjdGFuZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNSb3VuZH0saXNSb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvdW5kfHx0aGlzLmZhYnx8dGhpcy5mYWJNaW5pfSxzaGFwZTpmdW5jdGlvbigpe3JldHVyblwicS1idG4tXCIrKHRoaXMuaXNSb3VuZD9cInJvdW5kXCI6XCJyZWN0YW5nbGVcIil9LGlzRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlfHx0aGlzLmxvYWRpbmd9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vUmlwcGxlJiYhdGhpcy5pc0Rpc2FibGVkfSxjb21wdXRlZFRhYkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNEaXNhYmxlZD8tMTp0aGlzLnRhYmluZGV4fHwwfSxpc0xpbms6ZnVuY3Rpb24oKXtyZXR1cm5cImFcIj09PXRoaXMudHlwZXx8dm9pZCAwIT09dGhpcy50b30sYXR0cnM6ZnVuY3Rpb24oKXt2YXIgdD17dGFiaW5kZXg6dGhpcy5jb21wdXRlZFRhYkluZGV4fTtyZXR1cm5cImFcIiE9PXRoaXMudHlwZSYmKHQudHlwZT10aGlzLnR5cGV8fFwiYnV0dG9uXCIpLHZvaWQgMCE9PXRoaXMudG8mJih0LmhyZWY9dGhpcy4kcm91dGVyLnJlc29sdmUodGhpcy50bykuaHJlZiksdH0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLnNoYXBlXTtyZXR1cm4gdGhpcy5mYWI/dC5wdXNoKFwicS1idG4tZmFiXCIpOnRoaXMuZmFiTWluaSYmdC5wdXNoKFwicS1idG4tZmFiLW1pbmlcIiksdGhpcy5mbGF0P3QucHVzaChcInEtYnRuLWZsYXRcIik6dGhpcy5vdXRsaW5lP3QucHVzaChcInEtYnRuLW91dGxpbmVcIik6dGhpcy5wdXNoJiZ0LnB1c2goXCJxLWJ0bi1wdXNoXCIpLHRoaXMuaXNEaXNhYmxlZD90LnB1c2goXCJkaXNhYmxlZFwiKToodC5wdXNoKFwicS1mb2N1c2FibGUgcS1ob3ZlcmFibGVcIiksdGhpcy5hY3RpdmUmJnQucHVzaChcImFjdGl2ZVwiKSksdGhpcy5jb2xvcj90aGlzLmZsYXR8fHRoaXMub3V0bGluZT90LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8dGhpcy5jb2xvcikpOih0LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKSkpOnRoaXMudGV4dENvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSx0LnB1c2goe1wicS1idG4tbm8tdXBwZXJjYXNlXCI6dGhpcy5ub0NhcHMsXCJxLWJ0bi1yb3VuZGVkXCI6dGhpcy5yb3VuZGVkLFwicS1idG4tZGVuc2VcIjp0aGlzLmRlbnNlLGdsb3NzeTp0aGlzLmdsb3NzeX0pLHR9LGlubmVyQ2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLmFsaWduQ2xhc3NdO3JldHVybiEwPT09dGhpcy5ub1dyYXAmJnQucHVzaChcIm5vLXdyYXBcIixcInRleHQtbm8td3JhcFwiKSwhMD09PXRoaXMucmVwZWF0aW5nJiZ0LnB1c2goXCJub24tc2VsZWN0YWJsZVwiKSwhMD09PXRoaXMubG9hZGluZyYmdC5wdXNoKFwicS1idG4taW5uZXItLWhpZGRlblwiKSx0fX19LG1peGluJDE9e3Byb3BzOntjb2xvcjpTdHJpbmcsc2l6ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDpcIjFlbVwifX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbG9yKXJldHVyblwidGV4dC1cIit0aGlzLmNvbG9yfX19LERlZmF1bHRTcGlubmVyPXtuYW1lOlwiUVNwaW5uZXJNYXRcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lciBxLXNwaW5uZXItbWF0XCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMjUgMjUgNTAgNTBcIn19LFt0KFwiY2lyY2xlXCIse3N0YXRpY0NsYXNzOlwicGF0aFwiLGF0dHJzOntjeDpcIjUwXCIsY3k6XCI1MFwiLHI6XCIyMFwiLGZpbGw6XCJub25lXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2Utd2lkdGhcIjpcIjNcIixcInN0cm9rZS1taXRlcmxpbWl0XCI6XCIxMFwifX0pXSl9fSxRU3Bpbm5lcj17bWl4aW5zOltEZWZhdWx0U3Bpbm5lcl0sbmFtZTpcIlFTcGlubmVyXCJ9LFFCdG49e25hbWU6XCJRQnRuXCIsbWl4aW5zOltCdG5NaXhpbl0scHJvcHM6e3BlcmNlbnRhZ2U6TnVtYmVyLGRhcmtQZXJjZW50YWdlOkJvb2xlYW4sd2FpdEZvclJpcHBsZTpCb29sZWFuLHJlcGVhdFRpbWVvdXQ6W051bWJlcixGdW5jdGlvbl19LGNvbXB1dGVkOntoYXNQZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMucGVyY2VudGFnZX0sd2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gYmV0d2Vlbih0aGlzLnBlcmNlbnRhZ2UsMCwxMDApK1wiJVwifSxldmVudHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmlzRGlzYWJsZWR8fCF0aGlzLnJlcGVhdFRpbWVvdXQ/e2NsaWNrOnRoaXMuY2xpY2ssa2V5ZG93bjp0aGlzLl9fb25LZXlEb3duLGtleXVwOnRoaXMuX19vbktleVVwfTp7bW91c2Vkb3duOnRoaXMuX19zdGFydFJlcGVhdCx0b3VjaHN0YXJ0OnRoaXMuX19zdGFydFJlcGVhdCxrZXlkb3duOmZ1bmN0aW9uKGUpe3QuX19vbktleURvd24oZSwhMCl9LG1vdXNldXA6dGhpcy5fX2VuZFJlcGVhdCx0b3VjaGVuZDp0aGlzLl9fZW5kUmVwZWF0LGtleXVwOmZ1bmN0aW9uKGUpe3QuX19vbktleVVwKGUsITApfSxtb3VzZWxlYXZlOnRoaXMuX19hYm9ydFJlcGVhdCx0b3VjaG1vdmU6dGhpcy5fX2Fib3J0UmVwZWF0LGJsdXI6dGhpcy5fX2Fib3J0UmVwZWF0fX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cmVwZWF0aW5nOiExLGFjdGl2ZTohMX19LG1ldGhvZHM6e2NsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5fX2NsZWFudXAoKSx2b2lkIDA9PT10aGlzLnRvJiYhdGhpcy5pc0Rpc2FibGVkfHwodCYmc3RvcEFuZFByZXZlbnQodCksIXRoaXMuaXNEaXNhYmxlZCkpaWYodCYmLTEhPT10LmRldGFpbCYmXCJzdWJtaXRcIj09PXRoaXMudHlwZSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLE9iamVjdC5hc3NpZ24oe30sdCx7ZGV0YWlsOi0xfSkpO3RoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLiRlbCYmZS4kZWwuZGlzcGF0Y2hFdmVudChpKX0sMjAwKX1lbHNle3ZhciBzPWZ1bmN0aW9uKCl7ZS4kcm91dGVyW2UucmVwbGFjZT9cInJlcGxhY2VcIjpcInB1c2hcIl0oZS50byl9LG49ZnVuY3Rpb24oKXtlLmlzRGlzYWJsZWR8fChlLiRlbWl0KFwiY2xpY2tcIix0LHMpLHZvaWQgMCE9PWUudG8mJiExIT09dC5uYXZpZ2F0ZSYmcygpKX07dGhpcy53YWl0Rm9yUmlwcGxlJiZ0aGlzLmhhc1JpcHBsZT90aGlzLnRpbWVyPXNldFRpbWVvdXQobiwzMDApOm4oKX19LF9fY2xlYW51cDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKX0sX19vbktleURvd246ZnVuY3Rpb24odCxlKXt0aGlzLmlzRGlzYWJsZWR8fDEzIT09dC5rZXlDb2RlfHwodGhpcy5hY3RpdmU9ITAsZT90aGlzLl9fc3RhcnRSZXBlYXQodCk6c3RvcEFuZFByZXZlbnQodCkpfSxfX29uS2V5VXA6ZnVuY3Rpb24odCxlKXt0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlPSExLHRoaXMuaXNEaXNhYmxlZHx8MTMhPT10LmtleUNvZGV8fHRoaXNbZT9cIl9fZW5kUmVwZWF0XCI6XCJjbGlja1wiXSh0KSl9LF9fc3RhcnRSZXBlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5yZXBlYXRpbmcpe3ZhciBpPWZ1bmN0aW9uKCl7ZS50aW1lcj1zZXRUaW1lb3V0KHMsXCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZXBlYXRUaW1lb3V0P2UucmVwZWF0VGltZW91dChlLnJlcGVhdENvdW50KTplLnJlcGVhdFRpbWVvdXQpfSxzPWZ1bmN0aW9uKCl7ZS5pc0Rpc2FibGVkfHwoZS5yZXBlYXRDb3VudCs9MSx0LnJlcGVhdENvdW50PWUucmVwZWF0Q291bnQsZS4kZW1pdChcImNsaWNrXCIsdCksaSgpKX07dGhpcy5yZXBlYXRDb3VudD0wLHRoaXMucmVwZWF0aW5nPSEwLGkoKX19LF9fYWJvcnRSZXBlYXQ6ZnVuY3Rpb24oKXt0aGlzLnJlcGVhdGluZz0hMSx0aGlzLl9fY2xlYW51cCgpfSxfX2VuZFJlcGVhdDpmdW5jdGlvbih0KXt0aGlzLnJlcGVhdGluZyYmKHRoaXMucmVwZWF0aW5nPSExLHRoaXMucmVwZWF0Q291bnQ/dGhpcy5yZXBlYXRDb3VudD0wOih0LmRldGFpbHx8dC5rZXlDb2RlKSYmKHQucmVwZWF0Q291bnQ9MCx0aGlzLiRlbWl0KFwiY2xpY2tcIix0KSksdGhpcy5fX2NsZWFudXAoKSl9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFudXAoKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KTtyZXR1cm4gdm9pZCAwIT09dGhpcy5sYWJlbCYmITA9PT10aGlzLmlzUmVjdGFuZ2xlJiZlLnVuc2hpZnQodChcImRpdlwiLFt0aGlzLmxhYmVsXSkpLHZvaWQgMCE9PXRoaXMuaWNvbiYmZS51bnNoaWZ0KHQoUUljb24se2NsYXNzOntcIm9uLWxlZnRcIjp2b2lkIDAhPT10aGlzLmxhYmVsJiYhMD09PXRoaXMuaXNSZWN0YW5nbGV9LHByb3BzOntuYW1lOnRoaXMuaWNvbn19KSksdm9pZCAwIT09dGhpcy5pY29uUmlnaHQmJiExPT09dGhpcy5pc1JvdW5kJiZlLnB1c2godChRSWNvbix7c3RhdGljQ2xhc3M6XCJvbi1yaWdodFwiLHByb3BzOntuYW1lOnRoaXMuaWNvblJpZ2h0fX0pKSx0KHRoaXMuaXNMaW5rP1wiYVwiOlwiYnV0dG9uXCIse3N0YXRpY0NsYXNzOlwicS1idG4gaW5saW5lIHJlbGF0aXZlLXBvc2l0aW9uIHEtYnRuLWl0ZW0gbm9uLXNlbGVjdGFibGVcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zdHlsZSxhdHRyczp0aGlzLmF0dHJzLG9uOnRoaXMuZXZlbnRzLGRpcmVjdGl2ZXM6dGhpcy5oYXNSaXBwbGU/W3tuYW1lOlwicmlwcGxlXCIsdmFsdWU6ITAsbW9kaWZpZXJzOntjZW50ZXI6dGhpcy5pc1JvdW5kfX1dOm51bGx9LFt0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3A/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZm9jdXMtaGVscGVyXCJ9KTpudWxsLHRoaXMubG9hZGluZyYmdGhpcy5oYXNQZXJjZW50YWdlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJ0bi1wcm9ncmVzcyBhYnNvbHV0ZS1mdWxsXCIsY2xhc3M6e1wicS1idG4tZGFyay1wcm9ncmVzc1wiOnRoaXMuZGFya1BlcmNlbnRhZ2V9LHN0eWxlOnt3aWR0aDp0aGlzLndpZHRofX0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYnRuLWlubmVyIHJvdyBjb2wgaXRlbXMtY2VudGVyIHEtcG9wdXAtLXNraXBcIixjbGFzczp0aGlzLmlubmVyQ2xhc3Nlc30sZSksbnVsbCE9PXRoaXMubG9hZGluZz90KFwidHJhbnNpdGlvblwiLHtwcm9wczp7bmFtZTpcInEtdHJhbnNpdGlvbi0tZmFkZVwifX0sITA9PT10aGlzLmxvYWRpbmc/W3QoXCJkaXZcIix7a2V5OlwibG9hZGluZ1wiLHN0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbCBmbGV4IGZsZXgtY2VudGVyXCJ9LHZvaWQgMCE9PXRoaXMuJHNsb3RzLmxvYWRpbmc/dGhpcy4kc2xvdHMubG9hZGluZzpbdChRU3Bpbm5lcildKV06dm9pZCAwKTpudWxsXSl9fSxRQWxlcnQ9e25hbWU6XCJRQWxlcnRcIixwcm9wczp7dHlwZTp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInBvc2l0aXZlXCIsXCJuZWdhdGl2ZVwiLFwid2FybmluZ1wiLFwiaW5mb1wiXS5pbmNsdWRlcyh0KX19LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwibmVnYXRpdmVcIn0sdGV4dENvbG9yOlN0cmluZyxtZXNzYWdlOlN0cmluZyxkZXRhaWw6U3RyaW5nLGljb246U3RyaW5nLGF2YXRhcjpTdHJpbmcsYWN0aW9uczpBcnJheX0sY29tcHV0ZWQ6e2NvbXB1dGVkSWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmljb24/dGhpcy5pY29uOnRoaXMuJHEuaWNvbi50eXBlW3RoaXMudHlwZXx8dGhpcy5jb2xvcl19LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5cImJnLVwiKyh0aGlzLnR5cGV8fHRoaXMuY29sb3IpK1wiIHRleHQtXCIrKHRoaXMudGV4dENvbG9yfHxcIndoaXRlXCIpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPXRoaXMuJHNsb3RzLmRldGFpbHx8dGhpcy5kZXRhaWw7cmV0dXJuIHRoaXMuYXZhdGFyP2kucHVzaCh0KFwiaW1nXCIse3N0YXRpY0NsYXNzOlwiYXZhdGFyXCIsYXR0cnM6e3NyYzp0aGlzLmF2YXRhcn19KSk6KHRoaXMuaWNvbnx8dGhpcy50eXBlKSYmaS5wdXNoKHQoUUljb24se3Byb3BzOntuYW1lOnRoaXMuY29tcHV0ZWRJY29ufX0pKSx0KFwiZGl2XCIsW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFsZXJ0IHJvdyBuby13cmFwIHNoYWRvdy0yXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbaS5sZW5ndGg/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWxlcnQtc2lkZSBjb2wtYXV0byByb3cgZmxleC1jZW50ZXJcIn0saSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydC1jb250ZW50IGNvbCBzZWxmLWNlbnRlclwifSxbdChcImRpdlwiLHRoaXMuJHNsb3RzLmRlZmF1bHR8fHRoaXMubWVzc2FnZSkscz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydC1kZXRhaWxcIn0sW3NdKTpudWxsXSksdGhpcy5hY3Rpb25zJiZ0aGlzLmFjdGlvbnMubGVuZ3RoP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFsZXJ0LWFjdGlvbnMgY29sLWF1dG8gZ3V0dGVyLXhzIGNvbHVtbiBmbGV4LWNlbnRlclwifSx0aGlzLmFjdGlvbnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiZnVsbC13aWR0aFwifSxbdChRQnRuLHtzdGF0aWNDbGFzczpcImZ1bGwtd2lkdGhcIixwcm9wczp7ZmxhdDohMCxkZW5zZTohMCxhbGlnbjpcImxlZnRcIixpY29uOmkuaWNvbixsYWJlbDohMD09PWkuY2xvc2VCdG4/XCJzdHJpbmdcIj09dHlwZW9mIGkubGFiZWw/aS5sYWJlbDplLiRxLmkxOG4ubGFiZWwuY2xvc2U6aS5sYWJlbH0sb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlcigpfX19KV0pfSkpOm51bGxdKV0pfX07ZnVuY3Rpb24gZmlsdGVyKHQsZSl7dmFyIGk9ZS5maWVsZCxzPWUubGlzdCxuPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuKFwiXCIrdFtpXSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG4pfSl9ZnVuY3Rpb24gczQoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1mdW5jdGlvbiB1aWQoKXtyZXR1cm4gczQoKStzNCgpK1wiLVwiK3M0KCkrXCItXCIrczQoKStcIi1cIitzNCgpK1wiLVwiK3M0KCkrczQoKStzNCgpfWZ1bmN0aW9uIGdldEFuY2hvclBvc2l0aW9uKHQsZSl7dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWkudG9wLG49aS5sZWZ0LG89aS5yaWdodCxyPWkuYm90dG9tLGE9e3RvcDpzLGxlZnQ6bix3aWR0aDp0Lm9mZnNldFdpZHRoLGhlaWdodDp0Lm9mZnNldEhlaWdodH07cmV0dXJuIGUmJihhLnRvcC09ZVsxXSxhLmxlZnQtPWVbMF0sciYmKHIrPWVbMV0pLG8mJihvKz1lWzBdKSxhLndpZHRoKz1lWzBdLGEuaGVpZ2h0Kz1lWzFdKSxhLnJpZ2h0PW98fGEubGVmdCthLndpZHRoLGEuYm90dG9tPXJ8fGEudG9wK2EuaGVpZ2h0LGEubWlkZGxlPWEubGVmdCsoYS5yaWdodC1hLmxlZnQpLzIsYS5jZW50ZXI9YS50b3ArKGEuYm90dG9tLWEudG9wKS8yLGF9ZnVuY3Rpb24gZ2V0VGFyZ2V0UG9zaXRpb24odCl7cmV0dXJue3RvcDowLGNlbnRlcjp0Lm9mZnNldEhlaWdodC8yLGJvdHRvbTp0Lm9mZnNldEhlaWdodCxsZWZ0OjAsbWlkZGxlOnQub2Zmc2V0V2lkdGgvMixyaWdodDp0Lm9mZnNldFdpZHRofX1mdW5jdGlvbiByZXBvc2l0aW9uSWZOZWVkZWQodCxlLGkscyxuLG8pe3ZhciByPWdldFNjcm9sbGJhcldpZHRoKCksYT13aW5kb3cuaW5uZXJIZWlnaHQsbD13aW5kb3cuaW5uZXJXaWR0aDtpZihhLT1yLGwtPXIsbi50b3A8MHx8bi50b3ArZS5ib3R0b20+YSlpZihcImNlbnRlclwiPT09aS52ZXJ0aWNhbCluLnRvcD10W2kudmVydGljYWxdPmEvMj9hLWUuYm90dG9tOjAsbi5tYXhIZWlnaHQ9TWF0aC5taW4oZS5ib3R0b20sYSk7ZWxzZSBpZih0W2kudmVydGljYWxdPmEvMil7dmFyIGM9TWF0aC5taW4oYSxcImNlbnRlclwiPT09cy52ZXJ0aWNhbD90LmNlbnRlcjpzLnZlcnRpY2FsPT09aS52ZXJ0aWNhbD90LmJvdHRvbTp0LnRvcCk7bi5tYXhIZWlnaHQ9TWF0aC5taW4oZS5ib3R0b20sYyksbi50b3A9TWF0aC5tYXgoMCxjLW4ubWF4SGVpZ2h0KX1lbHNlIG4udG9wPVwiY2VudGVyXCI9PT1zLnZlcnRpY2FsP3QuY2VudGVyOnMudmVydGljYWw9PT1pLnZlcnRpY2FsP3QudG9wOnQuYm90dG9tLG4ubWF4SGVpZ2h0PU1hdGgubWluKGUuYm90dG9tLGEtbi50b3ApO2lmKG4ubGVmdDwwfHxuLmxlZnQrZS5yaWdodD5sKWlmKG4ubWF4V2lkdGg9TWF0aC5taW4oZS5yaWdodCxsKSxcIm1pZGRsZVwiPT09aS5ob3Jpem9udGFsKW4ubGVmdD10W2kuaG9yaXpvbnRhbF0+bC8yP2wtZS5yaWdodDowO2Vsc2UgaWYobyluLmxlZnQ9bi5sZWZ0PDA/MDpsLWUucmlnaHQ7ZWxzZSBpZih0W2kuaG9yaXpvbnRhbF0+bC8yKXt2YXIgaD1NYXRoLm1pbihsLFwibWlkZGxlXCI9PT1zLmhvcml6b250YWw/dC5jZW50ZXI6cy5ob3Jpem9udGFsPT09aS5ob3Jpem9udGFsP3QucmlnaHQ6dC5sZWZ0KTtuLm1heFdpZHRoPU1hdGgubWluKGUucmlnaHQsaCksbi5sZWZ0PU1hdGgubWF4KDAsaC1uLm1heFdpZHRoKX1lbHNlIG4ubGVmdD1cIm1pZGRsZVwiPT09cy5ob3Jpem9udGFsP3QuY2VudGVyOnMuaG9yaXpvbnRhbD09PWkuaG9yaXpvbnRhbD90LmxlZnQ6dC5yaWdodCxuLm1heFdpZHRoPU1hdGgubWluKGUucmlnaHQsbC1uLmxlZnQpO3JldHVybiBufWZ1bmN0aW9uIHNldFBvc2l0aW9uKHQpe3ZhciBlLGk9dC5lbCxzPXQuYW5pbWF0ZSxuPXQuYW5jaG9yRWwsbz10LmFuY2hvck9yaWdpbixyPXQuc2VsZk9yaWdpbixhPXQubWF4SGVpZ2h0LGw9dC5ldmVudCxjPXQuYW5jaG9yQ2xpY2ssaD10LnRvdWNoUG9zaXRpb24sdT10Lm9mZnNldCxkPXQudG91Y2hPZmZzZXQscD10LmNvdmVyO2lmKGkuc3R5bGUubWF4SGVpZ2h0PWF8fFwiNjV2aFwiLGkuc3R5bGUubWF4V2lkdGg9XCIxMDB2d1wiLCFsfHxjJiYhaClpZihkKXt2YXIgZj1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09Zi50b3AsZz1mLmxlZnQsdj1tK2QudG9wLGI9ZytkLmxlZnQ7ZT17dG9wOnYsbGVmdDpiLHdpZHRoOjEsaGVpZ2h0OjEscmlnaHQ6YisxLGNlbnRlcjp2LG1pZGRsZTpiLGJvdHRvbTp2KzF9fWVsc2UgZT1nZXRBbmNob3JQb3NpdGlvbihuLHUpO2Vsc2V7dmFyIF89cG9zaXRpb24obCkseT1fLnRvcCx3PV8ubGVmdDtlPXt0b3A6eSxsZWZ0Oncsd2lkdGg6MSxoZWlnaHQ6MSxyaWdodDp3KzEsY2VudGVyOnksbWlkZGxlOncsYm90dG9tOnkrMX19dmFyIEM9Z2V0VGFyZ2V0UG9zaXRpb24oaSkseD17dG9wOmVbby52ZXJ0aWNhbF0tQ1tyLnZlcnRpY2FsXSxsZWZ0OmVbby5ob3Jpem9udGFsXS1DW3IuaG9yaXpvbnRhbF19O2lmKHg9cmVwb3NpdGlvbklmTmVlZGVkKGUsQyxyLG8seCxwKSxpLnN0eWxlLnRvcD1NYXRoLm1heCgwLHgudG9wKStcInB4XCIsaS5zdHlsZS5sZWZ0PU1hdGgubWF4KDAseC5sZWZ0KStcInB4XCIseC5tYXhIZWlnaHQmJihpLnN0eWxlLm1heEhlaWdodD14Lm1heEhlaWdodCtcInB4XCIpLHgubWF4V2lkdGgmJihpLnN0eWxlLm1heFdpZHRoPXgubWF4V2lkdGgrXCJweFwiKSxzKXt2YXIgUz14LnRvcDxlLnRvcD9bXCJ1cFwiLFwiZG93blwiXTpbXCJkb3duXCIsXCJ1cFwiXTtpLmNsYXNzTGlzdC5hZGQoXCJhbmltYXRlLXBvcHVwLVwiK1NbMF0pLGkuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGUtcG9wdXAtXCIrU1sxXSl9fWZ1bmN0aW9uIHBvc2l0aW9uVmFsaWRhdG9yKHQpe3ZhciBlPXQuc3BsaXQoXCIgXCIpO3JldHVybiAyPT09ZS5sZW5ndGgmJihbXCJ0b3BcIixcImNlbnRlclwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKGVbMF0pPyEhW1wibGVmdFwiLFwibWlkZGxlXCIsXCJyaWdodFwiXS5pbmNsdWRlcyhlWzFdKXx8KGNvbnNvbGUuZXJyb3IoXCJBbmNob3IvU2VsZiBwb3NpdGlvbiBtdXN0IGVuZCB3aXRoIG9uZSBvZiBsZWZ0L21pZGRsZS9yaWdodFwiKSwhMSk6KGNvbnNvbGUuZXJyb3IoXCJBbmNob3IvU2VsZiBwb3NpdGlvbiBtdXN0IHN0YXJ0IHdpdGggb25lIG9mIHRvcC9jZW50ZXIvYm90dG9tXCIpLCExKSl9ZnVuY3Rpb24gb2Zmc2V0VmFsaWRhdG9yKHQpe3JldHVybiF0fHwyPT09dC5sZW5ndGgmJihcIm51bWJlclwiPT10eXBlb2YgdFswXSYmXCJudW1iZXJcIj09dHlwZW9mIHRbMV0pfWZ1bmN0aW9uIHBhcnNlUG9zaXRpb24odCl7dmFyIGU9dC5zcGxpdChcIiBcIik7cmV0dXJue3ZlcnRpY2FsOmVbMF0saG9yaXpvbnRhbDplWzFdfX1mdW5jdGlvbiBmcmFtZURlYm91bmNlKHQpe3ZhciBlLGk9ITE7ZnVuY3Rpb24gcygpe2Zvcih2YXIgcz10aGlzLG49W10sbz1hcmd1bWVudHMubGVuZ3RoO28tLTspbltvXT1hcmd1bWVudHNbb107aXx8KGk9ITAsZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0LmFwcGx5KHMsbiksaT0hMX0pKX1yZXR1cm4gcy5jYW5jZWw9ZnVuY3Rpb24oKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSksaT0hMX0sc312YXIgQ2FuUmVuZGVyTWl4aW49e2RhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y2FuUmVuZGVyOiFvblNTUn19LG1vdW50ZWQ6ZnVuY3Rpb24oKXshMT09PXRoaXMuY2FuUmVuZGVyJiYodGhpcy5jYW5SZW5kZXI9ITApfX0sUVBvcG92ZXI9e25hbWU6XCJRUG9wb3ZlclwiLG1peGluczpbTW9kZWxUb2dnbGVNaXhpbixDYW5SZW5kZXJNaXhpbl0scHJvcHM6e2FuY2hvcjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOnBvc2l0aW9uVmFsaWRhdG9yfSxzZWxmOnt0eXBlOlN0cmluZyx2YWxpZGF0b3I6cG9zaXRpb25WYWxpZGF0b3J9LGZpdDpCb29sZWFuLGNvdmVyOkJvb2xlYW4scGVyc2lzdGVudDpCb29sZWFuLGtlZXBPblNjcmVlbjpCb29sZWFuLG1heEhlaWdodDpTdHJpbmcsdG91Y2hQb3NpdGlvbjpCb29sZWFuLGFuY2hvckNsaWNrOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sb2Zmc2V0Ont0eXBlOkFycmF5LHZhbGlkYXRvcjpvZmZzZXRWYWxpZGF0b3J9LG5vRm9jdXM6Qm9vbGVhbixub1JlZm9jdXM6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW59LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKX19LGNvbXB1dGVkOntob3JpelNpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJ9LGFuY2hvck9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuY292ZXI/XCJ0b3AgXCIrdGhpcy5ob3JpelNpZGU6dGhpcy5hbmNob3J8fFwiYm90dG9tIFwiK3RoaXMuaG9yaXpTaWRlKX0sc2VsZk9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuc2VsZnx8XCJ0b3AgXCIrdGhpcy5ob3JpelNpZGUpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY2FuUmVuZGVyKXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wb3BvdmVyIHNjcm9sbFwiLHJlZjpcImNvbnRlbnRcIixhdHRyczp7dGFiaW5kZXg6LTF9LG9uOntjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fdXBkYXRlUG9zaXRpb249ZnJhbWVEZWJvdW5jZShmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQucmVwb3NpdGlvbihpLHMpfSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LmFuY2hvckVsPXQuJGVsLnBhcmVudE5vZGUsdC5hbmNob3JFbC5yZW1vdmVDaGlsZCh0LiRlbCksKHQuYW5jaG9yRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1wb3B1cC0tc2tpcFwiKXx8dC5hbmNob3JFbC5jbGFzc0xpc3QuY29udGFpbnMoXCJuby1wb2ludGVyLWV2ZW50c1wiKSkmJih0LmFuY2hvckVsPXQuYW5jaG9yRWwucGFyZW50Tm9kZSksdC5hbmNob3JDbGljayYmKHQuYW5jaG9yRWwuY2xhc3NMaXN0LmFkZChcImN1cnNvci1wb2ludGVyXCIpLHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdC50b2dnbGUpLHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdC5fX3RvZ2dsZUtleSkpfSksdGhpcy52YWx1ZSYmdGhpcy5zaG93KCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNob3dpbmcmJnRoaXMuX19jbGVhbnVwKCksdGhpcy5hbmNob3JDbGljayYmdGhpcy5hbmNob3JFbCYmKHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy50b2dnbGUpLHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5fX3RvZ2dsZUtleSkpfSxtZXRob2RzOntfX3Nob3c6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLm5vUmVmb2N1c3x8KHRoaXMuX19yZWZvY3VzVGFyZ2V0PXRoaXMuYW5jaG9yQ2xpY2smJnRoaXMuYW5jaG9yRWx8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpLEVzY2FwZUtleS5yZWdpc3RlcihmdW5jdGlvbigpe2UuJGVtaXQoXCJlc2NhcGUta2V5XCIpLGUuaGlkZSgpfSksdGhpcy5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHRoaXMuYW5jaG9yRWwpLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLnNjcm9sbFRhcmdldCE9PXdpbmRvdyYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX191cGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuX191cGRhdGVQb3NpdGlvbigwLHQsITApLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSwhdGhpcy5ub0ZvY3VzJiZ0aGlzLiRyZWZzLmNvbnRlbnQmJnRoaXMuJHJlZnMuY29udGVudC5mb2N1cygpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGUuX19ib2R5SGlkZSwhMCksZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGUuX19ib2R5SGlkZSwhMCksZS5zaG93UHJvbWlzZSYmZS5zaG93UHJvbWlzZVJlc29sdmUoKX0sMCl9LF9fdG9nZ2xlS2V5OmZ1bmN0aW9uKHQpezEzPT09dC5rZXlDb2RlJiZ0aGlzLnRvZ2dsZSh0KX0sX19ib2R5SGlkZTpmdW5jdGlvbih0KXt0aGlzLnBlcnNpc3RlbnR8fHQmJnQudGFyZ2V0JiYodGhpcy4kZWwuY29udGFpbnModC50YXJnZXQpfHx0aGlzLmFuY2hvckVsLmNvbnRhaW5zKHQudGFyZ2V0KSl8fHRoaXMuaGlkZSh0KX0sX19oaWRlOmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFudXAoKSx0aGlzLmhpZGVQcm9taXNlJiZ0aGlzLmhpZGVQcm9taXNlUmVzb2x2ZSgpLCF0aGlzLm5vUmVmb2N1cyYmdGhpcy5fX3JlZm9jdXNUYXJnZXQmJih0aGlzLl9fcmVmb2N1c1RhcmdldC5mb2N1cygpLCF0aGlzLl9fcmVmb2N1c1RhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLWlmXCIpJiZ0aGlzLl9fcmVmb2N1c1RhcmdldC5ibHVyKCkpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5fX2JvZHlIaWRlLCEwKSxkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fX2JvZHlIaWRlLCEwKSx0aGlzLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5zY3JvbGxUYXJnZXQhPT13aW5kb3cmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSxFc2NhcGVLZXkucG9wKCksdGhpcy4kZWwucmVtb3ZlKCl9LHJlcG9zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9aS50b3Asbj1pLmJvdHRvbSxvPWkubGVmdCxyPWkucmlnaHQ7aWYoIXRoaXMua2VlcE9uU2NyZWVuJiYobjwwfHxzPndpbmRvdy5pbm5lckhlaWdodHx8cjwwfHxvPndpbmRvdy5pbm5lcldpZHRoKSlyZXR1cm4gdGhpcy5oaWRlKCk7aWYodGhpcy5maXR8fHRoaXMuY292ZXIpe3ZhciBhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuYW5jaG9yRWwpO3RoaXMuJGVsLnN0eWxlLm1pbldpZHRoPWEuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpLHRoaXMuY292ZXImJih0aGlzLiRlbC5zdHlsZS5taW5IZWlnaHQ9YS5nZXRQcm9wZXJ0eVZhbHVlKFwiaGVpZ2h0XCIpKX1pZihlKWlmKHRoaXMudG91Y2hQb3NpdGlvbil7dmFyIGw9cG9zaXRpb24odCksYz1sLnRvcCxoPWwubGVmdDt0aGlzLnRvdWNoT2Zmc2V0PXtsZWZ0Omgtbyx0b3A6Yy1zfX1lbHNlIGRlbGV0ZSB0aGlzLnRvdWNoT2Zmc2V0O3NldFBvc2l0aW9uKHtldmVudDp0LGFuaW1hdGU6ZSxlbDp0aGlzLiRlbCxvZmZzZXQ6dGhpcy5vZmZzZXQsYW5jaG9yRWw6dGhpcy5hbmNob3JFbCxhbmNob3JPcmlnaW46dGhpcy5hbmNob3JPcmlnaW4sc2VsZk9yaWdpbjp0aGlzLnNlbGZPcmlnaW4sbWF4SGVpZ2h0OnRoaXMubWF4SGVpZ2h0LGFuY2hvckNsaWNrOnRoaXMuYW5jaG9yQ2xpY2ssdG91Y2hQb3NpdGlvbjp0aGlzLnRvdWNoUG9zaXRpb24sdG91Y2hPZmZzZXQ6dGhpcy50b3VjaE9mZnNldCxjb3Zlcjp0aGlzLmNvdmVyfSl9fX07ZnVuY3Rpb24gcHVzaCh0LGUsaSxzLG4sbyl7dmFyIHI9e3Byb3BzOntyaWdodDpvLnJpZ2h0fX07aWYocyYmbil0LnB1c2goZShpLHIscykpO2Vsc2V7dmFyIGE9ITE7Zm9yKHZhciBsIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShsKSYmdm9pZCAwIT09KGE9b1tsXSkmJiEwIT09YSl7dC5wdXNoKGUoaSx7cHJvcHM6b30pKTticmVha31zJiZ0LnB1c2goZShpLHIscykpfX12YXIgUUl0ZW1XcmFwcGVyPXtuYW1lOlwiUUl0ZW1XcmFwcGVyXCIscHJvcHM6e2NmZzp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sc2xvdFJlcGxhY2U6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2ZnLGk9dGhpcy5zbG90UmVwbGFjZSxzPVtdO3JldHVybiBwdXNoKHMsdCxRSXRlbVNpZGUsdGhpcy4kc2xvdHMubGVmdCxpLHtpY29uOmUuaWNvbixjb2xvcjplLmxlZnRDb2xvcixhdmF0YXI6ZS5hdmF0YXIsbGV0dGVyOmUubGV0dGVyLGltYWdlOmUuaW1hZ2UsaW52ZXJ0ZWQ6ZS5sZWZ0SW52ZXJ0ZWQsdGV4dENvbG9yOmUubGVmdFRleHRDb2xvcn0pLHB1c2gocyx0LFFJdGVtTWFpbix0aGlzLiRzbG90cy5tYWluLGkse2xhYmVsOmUubGFiZWwsc3VibGFiZWw6ZS5zdWJsYWJlbCxsYWJlbExpbmVzOmUubGFiZWxMaW5lcyxzdWJsYWJlbExpbmVzOmUuc3VibGFiZWxMaW5lcyxpbnNldDplLmluc2V0fSkscHVzaChzLHQsUUl0ZW1TaWRlLHRoaXMuJHNsb3RzLnJpZ2h0LGkse3JpZ2h0OiEwLGljb246ZS5yaWdodEljb24sY29sb3I6ZS5yaWdodENvbG9yLGF2YXRhcjplLnJpZ2h0QXZhdGFyLGxldHRlcjplLnJpZ2h0TGV0dGVyLGltYWdlOmUucmlnaHRJbWFnZSxzdGFtcDplLnN0YW1wLGludmVydGVkOmUucmlnaHRJbnZlcnRlZCx0ZXh0Q29sb3I6ZS5yaWdodFRleHRDb2xvcn0pLHMucHVzaCh0aGlzLiRzbG90cy5kZWZhdWx0KSx0KFFJdGVtLHthdHRyczp0aGlzLiRhdHRycyxvbjp0aGlzLiRsaXN0ZW5lcnMscHJvcHM6ZX0scyl9fSxLZXlib2FyZFNlbGVjdGlvbk1peGluPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2tleWJvYXJkSW5kZXg6MCxrZXlib2FyZE1vdmVEaXJlY3Rpb246ITEsa2V5Ym9hcmRNb3ZlVGltZXI6ITF9fSx3YXRjaDp7a2V5Ym9hcmRJbmRleDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJHJlZnMucG9wb3ZlciYmdGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcmJnRoaXMua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uJiZ0Pi0xJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKGUuJHJlZnMucG9wb3Zlcil7dmFyIHQ9ZS4kcmVmcy5wb3BvdmVyLiRlbC5xdWVyeVNlbGVjdG9yKFwiLnEtc2VsZWN0LWhpZ2hsaWdodFwiKTtpZih0JiZ0LnNjcm9sbEludG9WaWV3KXtpZih0LnNjcm9sbEludG9WaWV3SWZOZWVkZWQpcmV0dXJuIHQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCghMSk7dC5zY3JvbGxJbnRvVmlldyhlLmtleWJvYXJkTW92ZURpcmVjdGlvbjwwKX19fSl9fSxtZXRob2RzOntfX2tleWJvYXJkU2hvdzpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKSx0aGlzLmtleWJvYXJkSW5kZXghPT10JiYodGhpcy5rZXlib2FyZEluZGV4PXQpfSxfX2tleWJvYXJkU2V0Q3VycmVudFNlbGVjdGlvbjpmdW5jdGlvbih0KXt0aGlzLmtleWJvYXJkSW5kZXg+PTAmJnRoaXMua2V5Ym9hcmRJbmRleDw9dGhpcy5rZXlib2FyZE1heEluZGV4JiZ0aGlzLl9fa2V5Ym9hcmRTZXRTZWxlY3Rpb24odGhpcy5rZXlib2FyZEluZGV4LHQpfSxfX2tleWJvYXJkSGFuZGxlS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPWdldEV2ZW50S2V5KHQpO3N3aXRjaChlKXtjYXNlIDM4OnRoaXMuX19rZXlib2FyZE1vdmVDdXJzb3IoLTEsdCk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9fa2V5Ym9hcmRNb3ZlQ3Vyc29yKDEsdCk7YnJlYWs7Y2FzZSAxMzppZih0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZylyZXR1cm4gc3RvcEFuZFByZXZlbnQodCksdm9pZCB0aGlzLl9fa2V5Ym9hcmRTZXRDdXJyZW50U2VsZWN0aW9uKCk7YnJlYWs7Y2FzZSA5OnRoaXMuaGlkZSgpfXRoaXMuX19rZXlib2FyZEN1c3RvbUtleUhhbmRsZShlLHQpfSxfX2tleWJvYXJkTW92ZUN1cnNvcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7aWYoc3RvcEFuZFByZXZlbnQoZSksdGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcpe2NsZWFyVGltZW91dCh0aGlzLmtleWJvYXJkTW92ZVRpbWVyKTt2YXIgcz10aGlzLmtleWJvYXJkSW5kZXgsbj10aGlzLl9fa2V5Ym9hcmRJc1NlbGVjdGFibGVJbmRleHx8ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZG97cz1ub3JtYWxpemVUb0ludGVydmFsKHMrdCwtMSxpLmtleWJvYXJkTWF4SW5kZXgpfXdoaWxlKHMhPT10aGlzLmtleWJvYXJkSW5kZXgmJiFuKHMpKTtyZXR1cm4gdGhpcy5rZXlib2FyZE1vdmVEaXJlY3Rpb249cz50aGlzLmtleWJvYXJkSW5kZXg/MTotMSx0aGlzLmtleWJvYXJkTW92ZVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmtleWJvYXJkTW92ZURpcmVjdGlvbj0hMX0sNTAwKSx2b2lkKHRoaXMua2V5Ym9hcmRJbmRleD1zKX10aGlzLl9fa2V5Ym9hcmRTaG93VHJpZ2dlcigpfX19LFFBdXRvY29tcGxldGU9e25hbWU6XCJRQXV0b2NvbXBsZXRlXCIsbWl4aW5zOltLZXlib2FyZFNlbGVjdGlvbk1peGluXSxwcm9wczp7bWluQ2hhcmFjdGVyczp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxtYXhSZXN1bHRzOnt0eXBlOk51bWJlcixkZWZhdWx0OjZ9LG1heEhlaWdodDpTdHJpbmcsZGVib3VuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NTAwfSxmaWx0ZXI6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmaWx0ZXJ9LHN0YXRpY0RhdGE6T2JqZWN0LHZhbHVlRmllbGQ6W1N0cmluZyxGdW5jdGlvbl0sc2VwYXJhdG9yOkJvb2xlYW59LGluamVjdDp7X19pbnB1dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRQXV0b2NvbXBsZXRlIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFJbnB1dCwgUUNoaXBzSW5wdXQgb3IgUVNlYXJjaFwiKX19LF9faW5wdXREZWJvdW5jZTp7ZGVmYXVsdDpudWxsfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntzZWFyY2hJZDpcIlwiLHJlc3VsdHM6W10sd2lkdGg6MCxlbnRlcktleTohMSx0aW1lcjpudWxsfX0sd2F0Y2g6e1wiX19pbnB1dC52YWxcIjpmdW5jdGlvbigpe3RoaXMuZW50ZXJLZXk/dGhpcy5lbnRlcktleT0hMTp0aGlzLl9fZGVsYXlUcmlnZ2VyKCl9fSxjb21wdXRlZDp7Y29tcHV0ZWRSZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4UmVzdWx0cyYmdGhpcy5yZXN1bHRzLmxlbmd0aD4wP3RoaXMucmVzdWx0cy5zbGljZSgwLHRoaXMubWF4UmVzdWx0cyk6W119LGNvbXB1dGVkVmFsdWVGaWVsZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlRmllbGR8fHRoaXMuc3RhdGljRGF0YSYmdGhpcy5zdGF0aWNEYXRhLmZpZWxkfHxcInZhbHVlXCJ9LGtleWJvYXJkTWF4SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wdXRlZFJlc3VsdHMubGVuZ3RoLTF9LGNvbXB1dGVkV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm57bWluV2lkdGg6dGhpcy53aWR0aH19LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYXJjaElkLmxlbmd0aD4wfX0sbWV0aG9kczp7aXNXb3JraW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMmJnRoaXMuJHJlZnMucG9wb3Zlcn0sdHJpZ2dlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX19pbnB1dCYmdGhpcy5fX2lucHV0LmlzRWRpdGFibGUoKSYmdGhpcy5fX2lucHV0Lmhhc0ZvY3VzKCkmJnRoaXMuaXNXb3JraW5nKCkpe3ZhciBpPVtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5fX2lucHV0LnZhbCk/XCJcIjpTdHJpbmcodGhpcy5fX2lucHV0LnZhbCkscz1pLmxlbmd0aCxuPXVpZCgpLG89dGhpcy4kcmVmcy5wb3BvdmVyO2lmKHRoaXMuc2VhcmNoSWQ9bixzPHRoaXMubWluQ2hhcmFjdGVyc3x8ITA9PT10JiZzPjApcmV0dXJuIHRoaXMuc2VhcmNoSWQ9XCJcIix0aGlzLl9fY2xlYXJTZWFyY2goKSx2b2lkIHRoaXMuaGlkZSgpO2lmKHRoaXMud2lkdGg9d2lkdGgodGhpcy5pbnB1dEVsKStcInB4XCIsdGhpcy5zdGF0aWNEYXRhKXJldHVybiB0aGlzLnNlYXJjaElkPVwiXCIsdGhpcy5yZXN1bHRzPXRoaXMuZmlsdGVyKGksdGhpcy5zdGF0aWNEYXRhKSx0aGlzLnJlc3VsdHMubGVuZ3RoP3ZvaWQgdGhpcy5fX3Nob3dSZXN1bHRzKCk6dm9pZCBvLmhpZGUoKTt0aGlzLl9faW5wdXQubG9hZGluZz0hMCx0aGlzLiRlbWl0KFwic2VhcmNoXCIsaSxmdW5jdGlvbih0KXtpZihlLmlzV29ya2luZygpJiZlLnNlYXJjaElkPT09bil7aWYoZS5fX2NsZWFyU2VhcmNoKCksQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MClyZXR1cm4gZS5yZXN1bHRzPXQsdm9pZCBlLl9fc2hvd1Jlc3VsdHMoKTtlLmhpZGUoKX19KX19LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHRzPVtdLHRoaXMuaXNXb3JraW5nKCk/dGhpcy4kcmVmcy5wb3BvdmVyLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0sYmx1ckhpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19jbGVhclNlYXJjaCgpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0LmhpZGUoKX0sMzAwKX0sX19jbGVhclNlYXJjaDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLl9faW5wdXQubG9hZGluZz0hMSx0aGlzLnNlYXJjaElkPVwiXCJ9LF9fa2V5Ym9hcmRDdXN0b21LZXlIYW5kbGU6ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMjc6dGhpcy5fX2NsZWFyU2VhcmNoKCk7YnJlYWs7Y2FzZSAzODpjYXNlIDQwOmNhc2UgOTp0aGlzLl9fa2V5Ym9hcmRTZXRDdXJyZW50U2VsZWN0aW9uKCEwKX19LF9fa2V5Ym9hcmRTaG93VHJpZ2dlcjpmdW5jdGlvbigpe3RoaXMudHJpZ2dlcigpfSxfX2ZvY3VzU2hvd1RyaWdnZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC50cmlnZ2VyKCEwKX0sMTAwKX0sX19rZXlib2FyZElzU2VsZWN0YWJsZUluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0Pi0xJiZ0PHRoaXMuY29tcHV0ZWRSZXN1bHRzLmxlbmd0aCYmIXRoaXMuY29tcHV0ZWRSZXN1bHRzW3RdLmRpc2FibGV9LHNldFZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuY29tcHV0ZWRWYWx1ZUZpZWxkP3RoaXMuY29tcHV0ZWRWYWx1ZUZpZWxkKHQpOnRbdGhpcy5jb21wdXRlZFZhbHVlRmllbGRdLG49dGhpcy5fX2lucHV0RGVib3VuY2U/XCJEZWJvdW5jZVwiOlwiXCI7dGhpcy5pbnB1dEVsJiZ0aGlzLl9faW5wdXQmJiF0aGlzLl9faW5wdXQuaGFzRm9jdXMoKSYmKHRoaXMuJHEucGxhdGZvcm0uaXMuaWU/dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpLmlucHV0RWwuZm9jdXMoKX0pOnRoaXMuaW5wdXRFbC5mb2N1cygpKSx0aGlzLmVudGVyS2V5PXRoaXMuX19pbnB1dCYmcyE9PXRoaXMuX19pbnB1dC52YWwsdGhpc1tcIl9faW5wdXRcIituXVtlP1wic2V0TmF2XCI6XCJzZXRcIl0ocyksdGhpcy4kZW1pdChcInNlbGVjdGVkXCIsdCwhIWUpLGV8fCh0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLmhpZGUoKSl9LF9fa2V5Ym9hcmRTZXRTZWxlY3Rpb246ZnVuY3Rpb24odCxlKXt0aGlzLnNldFZhbHVlKHRoaXMucmVzdWx0c1t0XSxlKX0sX19kZWxheVRyaWdnZXI6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLl9faW5wdXQuaGFzRm9jdXMoKSYmKHRoaXMuc3RhdGljRGF0YT90aGlzLnRyaWdnZXIoKTp0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy50cmlnZ2VyLHRoaXMuZGVib3VuY2UpKX0sX19zaG93UmVzdWx0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHJlZnMucG9wb3Zlcjt0aGlzLl9fa2V5Ym9hcmRTaG93KC0xKSx0LnNob3dpbmc/dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gdC5zaG93aW5nJiZ0LnJlcG9zaXRpb24oKX0pOnQuc2hvdygpfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fX2lucHV0LnJlZ2lzdGVyKCksdGhpcy5fX2lucHV0RGVib3VuY2UmJnRoaXMuX19pbnB1dERlYm91bmNlLnNldENoaWxkRGVib3VuY2UoITApLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5fX2lucHV0JiYodC5pbnB1dEVsPXQuX19pbnB1dC5nZXRFbCgpLHQuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHQuX19rZXlib2FyZEhhbmRsZUtleSksdC5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdC5ibHVySGlkZSksdC5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHQuX19mb2N1c1Nob3dUcmlnZ2VyKSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19jbGVhclNlYXJjaCgpLHRoaXMuX19pbnB1dC51bnJlZ2lzdGVyKCksdGhpcy5fX2lucHV0RGVib3VuY2UmJnRoaXMuX19pbnB1dERlYm91bmNlLnNldENoaWxkRGVib3VuY2UoITEpLHRoaXMuaW5wdXRFbCYmKHRoaXMuaW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX19rZXlib2FyZEhhbmRsZUtleSksdGhpcy5pbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5ibHVySGlkZSksdGhpcy5pbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX19mb2N1c1Nob3dUcmlnZ2VyKSx0aGlzLmhpZGUoKSl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy5fX2lucHV0LmlzRGFyaygpO3JldHVybiB0KFFQb3BvdmVyLHtyZWY6XCJwb3BvdmVyXCIsY2xhc3M6aT9cImJnLWRhcmtcIjpudWxsLHByb3BzOntmaXQ6ITAsa2VlcE9uU2NyZWVuOiEwLGFuY2hvckNsaWNrOiExLG1heEhlaWdodDp0aGlzLm1heEhlaWdodCxub0ZvY3VzOiEwLG5vUmVmb2N1czohMH0sb246e3Nob3c6ZnVuY3Rpb24oKXtlLl9faW5wdXQuc2VsZWN0aW9uT3Blbj0hMCxlLiRlbWl0KFwic2hvd1wiKX0saGlkZTpmdW5jdGlvbigpe2UuX19pbnB1dC5zZWxlY3Rpb25PcGVuPSExLGUuJGVtaXQoXCJoaWRlXCIpfX19LFt0KFFMaXN0LHtwcm9wczp7ZGFyazppLG5vQm9yZGVyOiEwLHNlcGFyYXRvcjp0aGlzLnNlcGFyYXRvcn0sc3R5bGU6dGhpcy5jb21wdXRlZFdpZHRofSx0aGlzLmNvbXB1dGVkUmVzdWx0cy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRSXRlbVdyYXBwZXIse2tleTppLmlkfHxzLGNsYXNzOntcInEtc2VsZWN0LWhpZ2hsaWdodFwiOmUua2V5Ym9hcmRJbmRleD09PXMsXCJjdXJzb3ItcG9pbnRlclwiOiFpLmRpc2FibGUsXCJ0ZXh0LWZhZGVkXCI6aS5kaXNhYmxlfSxwcm9wczp7Y2ZnOml9LG5hdGl2ZU9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKCl7IWkuZGlzYWJsZSYmKGUua2V5Ym9hcmRJbmRleD1zKX0sY2xpY2s6ZnVuY3Rpb24oKXshaS5kaXNhYmxlJiZlLnNldFZhbHVlKGkpfX19KX0pKV0pfX0sUUJyZWFkY3J1bWJzPXtuYW1lOlwiUUJyZWFkY3J1bWJzXCIsbWl4aW5zOltBbGlnbk1peGluXSxwcm9wczp7Y29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJmYWRlZFwifSxhY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sc2VwYXJhdG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiL1wifSxhbGlnbjpPYmplY3QuYXNzaWduKHt9LEFsaWduTWl4aW4ucHJvcHMuYWxpZ24se2RlZmF1bHQ6XCJsZWZ0XCJ9KX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXCJ0ZXh0LVwiK3RoaXMuY29sb3IsdGhpcy5hbGlnbkNsYXNzXX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuJHNsb3RzLmRlZmF1bHQpe3ZhciBpPVtdLHM9dGhpcy4kc2xvdHMuZGVmYXVsdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQudGFnJiZ0LnRhZy5lbmRzV2l0aChcIi1RQnJlYWRjcnVtYnNFbFwiKX0pLmxlbmd0aCxuPXRoaXMuJHNjb3BlZFNsb3RzLnNlcGFyYXRvcnx8ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXBhcmF0b3J9LG89XCJ0ZXh0LVwiK3RoaXMuY29sb3Iscj1cInRleHQtXCIrdGhpcy5hY3RpdmVDb2xvcixhPTE7Zm9yKHZhciBsIGluIGUuJHNsb3RzLmRlZmF1bHQpe3ZhciBjPWUuJHNsb3RzLmRlZmF1bHRbbF07aWYodm9pZCAwIT09Yy50YWcmJmMudGFnLmVuZHNXaXRoKFwiLVFCcmVhZGNydW1ic0VsXCIpKXt2YXIgaD1hPHM7YSsrLGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiZmxleCBpdGVtcy1jZW50ZXJcIixjbGFzczpbaD9yOm8saD9cInRleHQtd2VpZ2h0LWJvbGRcIjpcInEtYnJlYWRjcnVtYnMtbGFzdFwiXX0sW2NdKSksaCYmaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJyZWFkY3J1bWJzLXNlcGFyYXRvclwiLGNsYXNzOm99LFtuKCldKSl9ZWxzZSBpLnB1c2goYyl9cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJyZWFkY3J1bWJzIGZsZXggZ3V0dGVyLXhzIGl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIixjbGFzczp0aGlzLmNsYXNzZXN9LGkpfX19LFFCcmVhZGNydW1ic0VsPXtuYW1lOlwiUUJyZWFkY3J1bWJzRWxcIixtaXhpbnM6W3twcm9wczpyb3V0ZXJMaW5rUHJvcHN9XSxwcm9wczp7bGFiZWw6U3RyaW5nLGljb246U3RyaW5nLGNvbG9yOlN0cmluZ30scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KHZvaWQgMCE9PXRoaXMudG8/XCJyb3V0ZXItbGlua1wiOlwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtbGluayBxLWJyZWFkY3J1bWJzLWVsIGZsZXggaW5saW5lIGl0ZW1zLWNlbnRlciByZWxhdGl2ZS1wb3NpdGlvblwiLHByb3BzOnZvaWQgMCE9PXRoaXMudG8/dGhpcy4kcHJvcHM6bnVsbH0sW3RoaXMuaWNvbj90KFFJY29uLHtzdGF0aWNDbGFzczpcInEtYnJlYWNydW1icy1lbC1pY29uIHEtbXItc21cIixwcm9wczp7bmFtZTp0aGlzLmljb259fSk6bnVsbCx0aGlzLmxhYmVsXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpfX0sUUJ0bkdyb3VwPXtuYW1lOlwiUUJ0bkdyb3VwXCIscHJvcHM6e291dGxpbmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4scm91bmRlZDpCb29sZWFuLHB1c2g6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybltcIm91dGxpbmVcIixcImZsYXRcIixcInJvdW5kZWRcIixcInB1c2hcIl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwicS1idG4tZ3JvdXAtXCIrdH0pLmpvaW4oXCIgXCIpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1idG4tZ3JvdXAgcm93IG5vLXdyYXAgaW5saW5lXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFCdG5Ecm9wZG93bj17bmFtZTpcIlFCdG5Ecm9wZG93blwiLG1peGluczpbQnRuTWl4aW5dLHByb3BzOnt2YWx1ZTpCb29sZWFuLHNwbGl0OkJvb2xlYW4sY29udGVudENsYXNzOltBcnJheSxTdHJpbmcsT2JqZWN0XSxjb250ZW50U3R5bGU6W0FycmF5LFN0cmluZyxPYmplY3RdLHBvcG92ZXJBbmNob3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJib3R0b20gcmlnaHRcIn0scG9wb3ZlclNlbGY6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0b3AgcmlnaHRcIn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd2luZzp0aGlzLnZhbHVlfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuJHJlZnMucG9wb3ZlciYmdGhpcy4kcmVmcy5wb3BvdmVyW3Q/XCJzaG93XCI6XCJoaWRlXCJdKCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQoUVBvcG92ZXIse3JlZjpcInBvcG92ZXJcIixwcm9wczp7ZGlzYWJsZTp0aGlzLmRpc2FibGUsZml0OiEwLGFuY2hvckNsaWNrOiF0aGlzLnNwbGl0LGFuY2hvcjp0aGlzLnBvcG92ZXJBbmNob3Isc2VsZjp0aGlzLnBvcG92ZXJTZWxmfSxjbGFzczp0aGlzLmNvbnRlbnRDbGFzcyxzdHlsZTp0aGlzLmNvbnRlbnRTdHlsZSxvbjp7c2hvdzpmdW5jdGlvbih0KXtlLnNob3dpbmc9ITAsZS4kZW1pdChcInNob3dcIix0KSxlLiRlbWl0KFwiaW5wdXRcIiwhMCl9LGhpZGU6ZnVuY3Rpb24odCl7ZS5zaG93aW5nPSExLGUuJGVtaXQoXCJoaWRlXCIsdCksZS4kZW1pdChcImlucHV0XCIsITEpfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHM9dChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufSxzdGF0aWNDbGFzczpcInRyYW5zaXRpb24tZ2VuZXJpY1wiLGNsYXNzOntcInJvdGF0ZS0xODBcIjp0aGlzLnNob3dpbmcsXCJvbi1yaWdodFwiOiF0aGlzLnNwbGl0LFwicS1idG4tZHJvcGRvd24tYXJyb3dcIjohdGhpcy5zcGxpdH19KSxuPXQoUUJ0bix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRwcm9wcyx7aWNvblJpZ2h0OnRoaXMuc3BsaXQ/dGhpcy5pY29uUmlnaHQ6bnVsbH0pLGNsYXNzOnRoaXMuc3BsaXQ/XCJxLWJ0bi1kcm9wZG93bi1jdXJyZW50XCI6XCJxLWJ0bi1kcm9wZG93biBxLWJ0bi1kcm9wZG93bi1zaW1wbGVcIixvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5zcGxpdCYmZS5oaWRlKCksZS5kaXNhYmxlfHxlLiRlbWl0KFwiY2xpY2tcIix0KX19fSx0aGlzLnNwbGl0P251bGw6W3MsaV0pO3JldHVybiB0aGlzLnNwbGl0P3QoUUJ0bkdyb3VwLHtwcm9wczp7b3V0bGluZTp0aGlzLm91dGxpbmUsZmxhdDp0aGlzLmZsYXQscm91bmRlZDp0aGlzLnJvdW5kZWQscHVzaDp0aGlzLnB1c2h9LHN0YXRpY0NsYXNzOlwicS1idG4tZHJvcGRvd24gcS1idG4tZHJvcGRvd24tc3BsaXQgbm8td3JhcCBxLWJ0bi1pdGVtXCJ9LFtuLHQoUUJ0bix7cHJvcHM6e2Rpc2FibGU6dGhpcy5kaXNhYmxlLG91dGxpbmU6dGhpcy5vdXRsaW5lLGZsYXQ6dGhpcy5mbGF0LHJvdW5kZWQ6dGhpcy5yb3VuZGVkLHB1c2g6dGhpcy5wdXNoLHNpemU6dGhpcy5zaXplLGNvbG9yOnRoaXMuY29sb3IsdGV4dENvbG9yOnRoaXMudGV4dENvbG9yLGRlbnNlOnRoaXMuZGVuc2UsZ2xvc3N5OnRoaXMuZ2xvc3N5LG5vUmlwcGxlOnRoaXMubm9SaXBwbGUsd2FpdEZvclJpcHBsZTp0aGlzLndhaXRGb3JSaXBwbGV9LHN0YXRpY0NsYXNzOlwicS1idG4tZHJvcGRvd24tYXJyb3dcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnRvZ2dsZSgpfX19LFtzXSksW2ldXSk6bn0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIudG9nZ2xlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5wb3BvdmVyP3RoaXMuJHJlZnMucG9wb3Zlci5zaG93KCk6UHJvbWlzZS5yZXNvbHZlKCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5wb3BvdmVyP3RoaXMuJHJlZnMucG9wb3Zlci5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QudmFsdWUmJnQuJHJlZnMucG9wb3ZlciYmdC4kcmVmcy5wb3BvdmVyLnNob3coKX0pfX0sUUJ0blRvZ2dsZT17bmFtZTpcIlFCdG5Ub2dnbGVcIixwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSxjb2xvcjpTdHJpbmcsdGV4dENvbG9yOlN0cmluZyx0b2dnbGVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdG9nZ2xlVGV4dENvbG9yOlN0cmluZyxvcHRpb25zOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4oXCJsYWJlbFwiaW4gdHx8XCJpY29uXCJpbiB0KSYmXCJ2YWx1ZVwiaW4gdH0pfX0scmVhZG9ubHk6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4sbm9DYXBzOkJvb2xlYW4sbm9XcmFwOkJvb2xlYW4sb3V0bGluZTpCb29sZWFuLGZsYXQ6Qm9vbGVhbixkZW5zZTpCb29sZWFuLHJvdW5kZWQ6Qm9vbGVhbixwdXNoOkJvb2xlYW4sc2l6ZTpTdHJpbmcsZ2xvc3N5OkJvb2xlYW4sbm9SaXBwbGU6Qm9vbGVhbix3YWl0Rm9yUmlwcGxlOkJvb2xlYW59LGNvbXB1dGVkOnt2YWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09dC52YWx1ZX0pfX0sbWV0aG9kczp7c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpczt0aGlzLnJlYWRvbmx5fHwodGhpcy4kZW1pdChcImlucHV0XCIsdCxlKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoaS52YWx1ZSkmJmkuJGVtaXQoXCJjaGFuZ2VcIix0LGUpfSkpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUJ0bkdyb3VwLHtzdGF0aWNDbGFzczpcInEtYnRuLXRvZ2dsZVwiLHByb3BzOntvdXRsaW5lOnRoaXMub3V0bGluZSxmbGF0OnRoaXMuZmxhdCxyb3VuZGVkOnRoaXMucm91bmRlZCxwdXNoOnRoaXMucHVzaH19LHRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRQnRuLHtrZXk6XCJcIitpLmxhYmVsK2kuaWNvbitpLmljb25SaWdodCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoaS52YWx1ZSxpKX19LHByb3BzOntkaXNhYmxlOmUuZGlzYWJsZXx8aS5kaXNhYmxlLGxhYmVsOmkubGFiZWwsY29sb3I6ZS52YWxbc10/aS50b2dnbGVDb2xvcnx8ZS50b2dnbGVDb2xvcjppLmNvbG9yfHxlLmNvbG9yLHRleHRDb2xvcjplLnZhbFtzXT9pLnRvZ2dsZVRleHRDb2xvcnx8ZS50b2dnbGVUZXh0Q29sb3I6aS50ZXh0Q29sb3J8fGUudGV4dENvbG9yLGljb246aS5pY29uLGljb25SaWdodDppLmljb25SaWdodCxub0NhcHM6ZS5ub0NhcHN8fGkubm9DYXBzLG5vV3JhcDplLm5vV3JhcHx8aS5ub1dyYXAsb3V0bGluZTplLm91dGxpbmUsZmxhdDplLmZsYXQscm91bmRlZDplLnJvdW5kZWQscHVzaDplLnB1c2gsZ2xvc3N5OmUuZ2xvc3N5LHNpemU6ZS5zaXplLGRlbnNlOmUuZGVuc2Usbm9SaXBwbGU6ZS5ub1JpcHBsZXx8aS5ub1JpcHBsZSx3YWl0Rm9yUmlwcGxlOmUud2FpdEZvclJpcHBsZXx8aS53YWl0Rm9yUmlwcGxlLHRhYmluZGV4OmkudGFiaW5kZXh9fSl9KSl9fSxRQ2FyZD17bmFtZTpcIlFDYXJkXCIscHJvcHM6e2Rhcms6Qm9vbGVhbixzcXVhcmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4saW5saW5lOkJvb2xlYW4sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmd9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W3tcIm5vLWJvcmRlci1yYWRpdXNcIjp0aGlzLnNxdWFyZSxcIm5vLXNoYWRvd1wiOnRoaXMuZmxhdCxcImlubGluZS1ibG9ja1wiOnRoaXMuaW5saW5lLFwicS1jYXJkLWRhcmtcIjp0aGlzLmRhcmt9XTtyZXR1cm4gdGhpcy5jb2xvcj8odC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvciksdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fFwid2hpdGVcIikpKTp0aGlzLnRleHRDb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLnRleHRDb2xvciksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZFwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRQ2FyZFRpdGxlPXtuYW1lOlwiUUNhcmRUaXRsZVwiLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC1wcmltYXJ5IHEtY2FyZC1jb250YWluZXIgcm93IG5vLXdyYXBcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgY29sdW1uXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLXRpdGxlXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtc3VidGl0bGVcIn0sW3RoaXMuJHNsb3RzLnN1YnRpdGxlXSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWF1dG8gc2VsZi1jZW50ZXIgcS1jYXJkLXRpdGxlLWV4dHJhXCJ9LFt0aGlzLiRzbG90cy5yaWdodF0pXSl9fSxRQ2FyZE1haW49e25hbWU6XCJRQ2FyZE1haW5cIixyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtbWFpbiBxLWNhcmQtY29udGFpbmVyXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNhcmRBY3Rpb25zPXtuYW1lOlwiUUNhcmRBY3Rpb25zXCIscHJvcHM6e3ZlcnRpY2FsOkJvb2xlYW4sYWxpZ246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJzdGFydFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJzdGFydFwiLFwiY2VudGVyXCIsXCJlbmRcIixcImFyb3VuZFwiLFwiYmV0d2VlblwiXS5pbmNsdWRlcyh0KX19fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVyblwicS1jYXJkLWFjdGlvbnMtXCIrKHRoaXMudmVydGljYWw/XCJ2ZXJ0IGNvbHVtbiBqdXN0aWZ5LXN0YXJ0XCI6XCJob3JpeiByb3dcIikrXCIgXCIrKHRoaXMudmVydGljYWw/XCJpdGVtc1wiOlwianVzdGlmeVwiKStcIi1cIit0aGlzLmFsaWdufX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLWFjdGlvbnNcIixjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNhcmRNZWRpYT17bmFtZTpcIlFDYXJkTWVkaWFcIixwcm9wczp7b3ZlcmxheVBvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwiYm90dG9tXCIsXCJmdWxsXCJdLmluY2x1ZGVzKHQpfX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC1tZWRpYSByZWxhdGl2ZS1wb3NpdGlvblwifSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLiRzbG90cy5vdmVybGF5P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtbWVkaWEtb3ZlcmxheVwiLGNsYXNzOlwiYWJzb2x1dGUtXCIrdGhpcy5vdmVybGF5UG9zaXRpb259LFt0aGlzLiRzbG90cy5vdmVybGF5XSk6bnVsbF0pfX0sUUNhcmRTZXBhcmF0b3I9e25hbWU6XCJRQ2FyZFNlcGFyYXRvclwiLHByb3BzOntpbnNldDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtc2VwYXJhdG9yXCIsY2xhc3M6e2luc2V0OnRoaXMuaW5zZXR9fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19O2Z1bmN0aW9uIGdldERpcmVjdGlvbih0KXt2YXIgZT0hMCE9PXQuaG9yaXpvbnRhbCYmITAhPT10LnZlcnRpY2FsLGk9e307cmV0dXJuITAhPT10Lmhvcml6b250YWwmJiEwIT09ZXx8KGkuaG9yaXpvbnRhbD0hMCksITAhPT10LnZlcnRpY2FsJiYhMCE9PWV8fChpLnZlcnRpY2FsPSEwKSxpfWZ1bmN0aW9uIHByb2Nlc3NDaGFuZ2VzKHQsZSxpKXt2YXIgcz1wb3NpdGlvbih0KSxuPXMubGVmdC1lLmV2ZW50Lngsbz1zLnRvcC1lLmV2ZW50Lnkscj1NYXRoLmFicyhuKSxhPU1hdGguYWJzKG8pO3JldHVybntldnQ6dCxwb3NpdGlvbjpzLGRpcmVjdGlvbjplLmRpcmVjdGlvbi5ob3Jpem9udGFsJiYhZS5kaXJlY3Rpb24udmVydGljYWw/bjwwP1wibGVmdFwiOlwicmlnaHRcIjohZS5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmZS5kaXJlY3Rpb24udmVydGljYWw/bzwwP1widXBcIjpcImRvd25cIjpyPj1hP248MD9cImxlZnRcIjpcInJpZ2h0XCI6bzwwP1widXBcIjpcImRvd25cIixpc0ZpcnN0OmUuZXZlbnQuaXNGaXJzdCxpc0ZpbmFsOmksZHVyYXRpb246KG5ldyBEYXRlKS5nZXRUaW1lKCktZS5ldmVudC50aW1lLGRpc3RhbmNlOnt4OnIseTphfSxvZmZzZXQ6e3g6bix5Om99LGRlbHRhOnt4OnMubGVmdC1lLmV2ZW50Lmxhc3RYLHk6cy50b3AtZS5ldmVudC5sYXN0WX19fWZ1bmN0aW9uIHNob3VsZFRyaWdnZXIodCxlKXtyZXR1cm4hKCF0LmRpcmVjdGlvbi5ob3Jpem9udGFsfHwhdC5kaXJlY3Rpb24udmVydGljYWwpfHwodC5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmIXQuZGlyZWN0aW9uLnZlcnRpY2FsP01hdGguYWJzKGUuZGVsdGEueCk+MDohdC5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmdC5kaXJlY3Rpb24udmVydGljYWw/TWF0aC5hYnMoZS5kZWx0YS55KT4wOnZvaWQgMCl9dmFyIFRvdWNoUGFuPXtuYW1lOlwidG91Y2gtcGFuXCIsYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPSEwIT09ZS5tb2RpZmllcnMubm9Nb3VzZSxzPWUubW9kaWZpZXJzLnN0b3Asbj1lLm1vZGlmaWVycy5wcmV2ZW50LG89bnx8ZS5tb2RpZmllcnMubWlnaHRQcmV2ZW50P251bGw6bGlzdGVuT3B0cy5wYXNzaXZlLHI9e2hhbmRsZXI6ZS52YWx1ZSxkaXJlY3Rpb246Z2V0RGlyZWN0aW9uKGUubW9kaWZpZXJzKSxtb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe2xlZnRDbGljayh0KSYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyLm1vdmUsbyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixyLm1vdXNlRW5kLG8pLHIuc3RhcnQodCwhMCkpfSxtb3VzZUVuZDpmdW5jdGlvbih0KXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsci5tb3ZlLG8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsci5tb3VzZUVuZCxvKSxyLmVuZCh0KX0sc3RhcnQ6ZnVuY3Rpb24oZSxpKXt2YXIgbz1wb3NpdGlvbihlKTtyLmV2ZW50PXt4Om8ubGVmdCx5Om8udG9wLHRpbWU6KG5ldyBEYXRlKS5nZXRUaW1lKCksZGV0ZWN0ZWQ6ITA9PT1pfHxyLmRpcmVjdGlvbi5ob3Jpem9udGFsJiZyLmRpcmVjdGlvbi52ZXJ0aWNhbCxhYm9ydDohMSxpc0ZpcnN0OiEwLGxhc3RYOm8ubGVmdCxsYXN0WTpvLnRvcH0sci5ldmVudC5kZXRlY3RlZCYmKHQuY2xhc3NMaXN0LmFkZChcInEtdG91Y2hcIiksITAhPT1pJiYocyYmZS5zdG9wUHJvcGFnYXRpb24oKSxuJiZlLnByZXZlbnREZWZhdWx0KCksci5tb3ZlKGUpKSl9LG1vdmU6ZnVuY3Rpb24odCl7aWYoITAhPT1yLmV2ZW50LmFib3J0KWlmKCEwIT09ci5ldmVudC5kZXRlY3RlZCl7dmFyIGU9cG9zaXRpb24odCksaT1NYXRoLmFicyhlLmxlZnQtci5ldmVudC54KSxvPU1hdGguYWJzKGUudG9wLXIuZXZlbnQueSk7aSE9PW8mJihyLmV2ZW50LmRldGVjdGVkPSEwLHIuZXZlbnQuYWJvcnQ9ci5kaXJlY3Rpb24udmVydGljYWw/aT5vOmk8byxyLm1vdmUodCkpfWVsc2V7cyYmdC5zdG9wUHJvcGFnYXRpb24oKSxuJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIGE9cHJvY2Vzc0NoYW5nZXModCxyLCExKTtzaG91bGRUcmlnZ2VyKHIsYSkmJihyLmhhbmRsZXIoYSksci5ldmVudC5sYXN0WD1hLnBvc2l0aW9uLmxlZnQsci5ldmVudC5sYXN0WT1hLnBvc2l0aW9uLnRvcCxyLmV2ZW50LmlzRmlyc3Q9ITEpfX0sZW5kOmZ1bmN0aW9uKGUpe3QuY2xhc3NMaXN0LnJlbW92ZShcInEtdG91Y2hcIiksci5ldmVudC5hYm9ydHx8IXIuZXZlbnQuZGV0ZWN0ZWR8fHIuZXZlbnQuaXNGaXJzdHx8KHMmJmUuc3RvcFByb3BhZ2F0aW9uKCksbiYmZS5wcmV2ZW50RGVmYXVsdCgpLHIuaGFuZGxlcihwcm9jZXNzQ2hhbmdlcyhlLHIsITApKSl9fTt0Ll9fcXRvdWNocGFuJiYodC5fX3F0b3VjaHBhbl9vbGQ9dC5fX3F0b3VjaHBhbiksdC5fX3F0b3VjaHBhbj1yLGkmJnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHIubW91c2VTdGFydCxvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsci5zdGFydCxvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixyLm1vdmUsbyksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixyLmVuZCxvKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5vbGRWYWx1ZSxzPWUudmFsdWUsbj1lLm1vZGlmaWVycyxvPXQuX19xdG91Y2hwYW47aSE9PXMmJihvLmhhbmRsZXI9cyksbi5ob3Jpem9udGFsPT09by5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmbi52ZXJ0aWNhbD09PW8uZGlyZWN0aW9uLnZlcnRpY2FsfHwoby5kaXJlY3Rpb249Z2V0RGlyZWN0aW9uKG4pKX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fX3F0b3VjaHBhbl9vbGR8fHQuX19xdG91Y2hwYW47aWYodm9pZCAwIT09aSl7dmFyIHM9ZS5tb2RpZmllcnMucHJldmVudD9udWxsOmxpc3Rlbk9wdHMucGFzc2l2ZTt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixpLm1vdXNlU3RhcnQscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGkuc3RhcnQscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaS5tb3ZlLHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaS5lbmQscyksZGVsZXRlIHRbdC5fX3F0b3VjaHBhbl9vbGQ/XCJfX3F0b3VjaHBhbl9vbGRcIjpcIl9fcXRvdWNocGFuXCJdfX19O2Z1bmN0aW9uIGlzRGF0ZSh0KXtyZXR1cm5cIltvYmplY3QgRGF0ZV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBpc051bWJlcih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmaXNGaW5pdGUodCl9ZnVuY3Rpb24gaXNTdHJpbmcodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR9dmFyIGxpbmVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZWFzZUluUXVhZD1mdW5jdGlvbih0KXtyZXR1cm4gdCp0fSxlYXNlT3V0UXVhZD1mdW5jdGlvbih0KXtyZXR1cm4gdCooMi10KX0sZWFzZUluT3V0UXVhZD1mdW5jdGlvbih0KXtyZXR1cm4gdDwuNT8yKnQqdDooNC0yKnQpKnQtMX0sZWFzZUluQ3ViaWM9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsMyl9LGVhc2VPdXRDdWJpYz1mdW5jdGlvbih0KXtyZXR1cm4gMStNYXRoLnBvdyh0LTEsMyl9LGVhc2VJbk91dEN1YmljPWZ1bmN0aW9uKHQpe3JldHVybiB0PC41PzQqTWF0aC5wb3codCwzKToxKyh0LTEpKk1hdGgucG93KDIqdC0yLDIpfSxlYXNlSW5RdWFydD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCw0KX0sZWFzZU91dFF1YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGgucG93KHQtMSw0KX0sZWFzZUluT3V0UXVhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/OCpNYXRoLnBvdyh0LDQpOjEtOCpNYXRoLnBvdyh0LTEsNCl9LGVhc2VJblF1aW50PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LDUpfSxlYXNlT3V0UXVpbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDErTWF0aC5wb3codC0xLDUpfSxlYXNlSW5PdXRRdWludD1mdW5jdGlvbih0KXtyZXR1cm4gdDwuNT8xNipNYXRoLnBvdyh0LDUpOjErMTYqTWF0aC5wb3codC0xLDUpfSxlYXNlSW5DaXJjPWZ1bmN0aW9uKHQpe3JldHVybi0xKk1hdGguc3FydCgxLU1hdGgucG93KHQsMikpKzF9LGVhc2VPdXRDaXJjPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoLTEqKHQtMikqdCl9LGVhc2VJbk91dENpcmM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/LjUqKDEtTWF0aC5zcXJ0KDEtNCp0KnQpKTouNSooMStNYXRoLnNxcnQoOCp0LTMtNCp0KnQpKX0sb3ZlcnNob290PWZ1bmN0aW9uKHQpe3JldHVybi0xKk1hdGgucG93KE1hdGguRSwtNi4zKnQpKk1hdGguY29zKDUqdCkrMX0sc3RhbmRhcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjQwMzE/MTIqTWF0aC5wb3codCw0KToxLzEyOTAqKDExKk1hdGguc3FydCgtNGU0KnQqdCs4ZTQqdC0yMzM1OSktMTI5KX0sZGVjZWxlcmF0ZT1lYXNlT3V0Q3ViaWMsYWNjZWxlcmF0ZT1lYXNlSW5DdWJpYyxzaGFycD1lYXNlSW5PdXRRdWFkLGVhc2luZz17bGluZWFyOmxpbmVhcixlYXNlSW5RdWFkOmVhc2VJblF1YWQsZWFzZU91dFF1YWQ6ZWFzZU91dFF1YWQsZWFzZUluT3V0UXVhZDplYXNlSW5PdXRRdWFkLGVhc2VJbkN1YmljOmVhc2VJbkN1YmljLGVhc2VPdXRDdWJpYzplYXNlT3V0Q3ViaWMsZWFzZUluT3V0Q3ViaWM6ZWFzZUluT3V0Q3ViaWMsZWFzZUluUXVhcnQ6ZWFzZUluUXVhcnQsZWFzZU91dFF1YXJ0OmVhc2VPdXRRdWFydCxlYXNlSW5PdXRRdWFydDplYXNlSW5PdXRRdWFydCxlYXNlSW5RdWludDplYXNlSW5RdWludCxlYXNlT3V0UXVpbnQ6ZWFzZU91dFF1aW50LGVhc2VJbk91dFF1aW50OmVhc2VJbk91dFF1aW50LGVhc2VJbkNpcmM6ZWFzZUluQ2lyYyxlYXNlT3V0Q2lyYzplYXNlT3V0Q2lyYyxlYXNlSW5PdXRDaXJjOmVhc2VJbk91dENpcmMsb3ZlcnNob290Om92ZXJzaG9vdCxzdGFuZGFyZDpzdGFuZGFyZCxkZWNlbGVyYXRlOmRlY2VsZXJhdGUsYWNjZWxlcmF0ZTphY2NlbGVyYXRlLHNoYXJwOnNoYXJwfSxpZHM9e307ZnVuY3Rpb24gc3RhcnQodCl7dmFyIGU9dC5uYW1lLGk9dC5kdXJhdGlvbjt2b2lkIDA9PT1pJiYoaT0zMDApO3ZhciBzPXQudG8sbj10LmZyb20sbz10LmFwcGx5LHI9dC5kb25lLGE9dC5jYW5jZWwsbD10LmVhc2luZyxjPWUsaD1uZXcgRGF0ZTtjP3N0b3AoYyk6Yz11aWQoKTt2YXIgdT1sfHxsaW5lYXIsZD1mdW5jdGlvbigpe3ZhciB0PShuZXcgRGF0ZS1oKS9pO3Q+MSYmKHQ9MSk7dmFyIGU9bisocy1uKSp1KHQpO2lmKG8oZSx0KSwxPT09dClyZXR1cm4gZGVsZXRlIGlkc1tjXSx2b2lkKHImJnIoZSkpO3AubGFzdD17cG9zOmUscHJvZ3Jlc3M6dH0scC50aW1lcj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9LHA9aWRzW2NdPXtjYW5jZWw6YSx0aW1lcjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9O3JldHVybiBjfWZ1bmN0aW9uIHN0b3AodCl7aWYodCl7dmFyIGU9aWRzW3RdO2UmJmUudGltZXImJihjYW5jZWxBbmltYXRpb25GcmFtZShlLnRpbWVyKSxlLmNhbmNlbCYmZS5jYW5jZWwoZS5sYXN0KSxkZWxldGUgaWRzW3RdKX19dmFyIGFuaW1hdGU9e3N0YXJ0OnN0YXJ0LHN0b3A6c3RvcH0sRnVsbHNjcmVlbk1peGluPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luRnVsbHNjcmVlbjohMX19LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLmV4aXRGdWxsc2NyZWVuKCl9LGluRnVsbHNjcmVlbjpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwiZnVsbHNjcmVlblwiLHQpfX0sbWV0aG9kczp7dG9nZ2xlRnVsbHNjcmVlbjpmdW5jdGlvbigpe3RoaXMuaW5GdWxsc2NyZWVuP3RoaXMuZXhpdEZ1bGxzY3JlZW4oKTp0aGlzLnNldEZ1bGxzY3JlZW4oKX0sc2V0RnVsbHNjcmVlbjpmdW5jdGlvbigpe3RoaXMuaW5GdWxsc2NyZWVufHwodGhpcy5pbkZ1bGxzY3JlZW49ITAsdGhpcy5jb250YWluZXI9dGhpcy4kZWwucGFyZW50Tm9kZSx0aGlzLmNvbnRhaW5lci5yZXBsYWNlQ2hpbGQodGhpcy5mdWxsc2NyZWVuRmlsbGVyTm9kZSx0aGlzLiRlbCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwicS1ib2R5LWZ1bGxzY3JlZW4tbWl4aW5cIiksdGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuPXtoYW5kbGVyOnRoaXMuZXhpdEZ1bGxzY3JlZW59LEhpc3RvcnkuYWRkKHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbikpfSxleGl0RnVsbHNjcmVlbjpmdW5jdGlvbigpe3RoaXMuaW5GdWxsc2NyZWVuJiYodGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuJiYoSGlzdG9yeS5yZW1vdmUodGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuKSx0aGlzLl9faGlzdG9yeUZ1bGxzY3JlZW49bnVsbCksdGhpcy5jb250YWluZXIucmVwbGFjZUNoaWxkKHRoaXMuJGVsLHRoaXMuZnVsbHNjcmVlbkZpbGxlck5vZGUpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcInEtYm9keS1mdWxsc2NyZWVuLW1peGluXCIpLHRoaXMuaW5GdWxsc2NyZWVuPSExKX19LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dGhpcy5mdWxsc2NyZWVuRmlsbGVyTm9kZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZXhpdEZ1bGxzY3JlZW4oKX19LFFDYXJvdXNlbD17bmFtZTpcIlFDYXJvdXNlbFwiLG1peGluczpbRnVsbHNjcmVlbk1peGluXSxkaXJlY3RpdmVzOntUb3VjaFBhbjpUb3VjaFBhbn0scHJvcHM6e3ZhbHVlOk51bWJlcixjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0saGVpZ2h0OlN0cmluZyxhcnJvd3M6Qm9vbGVhbixpbmZpbml0ZTpCb29sZWFuLGFuaW1hdGlvbjp7dHlwZTpbTnVtYmVyLEJvb2xlYW5dLGRlZmF1bHQ6ITB9LGVhc2luZzpGdW5jdGlvbixzd2lwZUVhc2luZzpGdW5jdGlvbixub1N3aXBlOkJvb2xlYW4sYXV0b3BsYXk6W051bWJlcixCb29sZWFuXSxoYW5kbGVBcnJvd0tleXM6Qm9vbGVhbixxdWlja05hdjpCb29sZWFuLHF1aWNrTmF2UG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJib3R0b21cIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1widG9wXCIsXCJib3R0b21cIl0uaW5jbHVkZXModCl9fSxxdWlja05hdkljb246U3RyaW5nLHRodW1ibmFpbHM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX0sdGh1bWJuYWlsc0ljb246U3RyaW5nLHRodW1ibmFpbHNIb3Jpem9udGFsOkJvb2xlYW59LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57Y2Fyb3VzZWw6dGhpc319LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cG9zaXRpb246MCxzbGlkZTowLHBvc2l0aW9uU2xpZGU6MCxzbGlkZXNOdW1iZXI6MCxhbmltVWlkOiExLHZpZXdUaHVtYm5haWxzOiExfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLnNsaWRlJiZ0aGlzLmdvVG9TbGlkZSh0KX0sYXV0b3BsYXk6ZnVuY3Rpb24oKXt0aGlzLl9fcGxhbkF1dG9QbGF5KCl9LGluZmluaXRlOmZ1bmN0aW9uKCl7dGhpcy5fX3BsYW5BdXRvUGxheSgpfSxoYW5kbGVBcnJvd0tleXM6ZnVuY3Rpb24odCl7dGhpcy5fX3NldEFycm93S2V5cyh0KX19LGNvbXB1dGVkOntydGxEaXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD8tMToxfSxhcnJvd0ljb246ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy4kcS5pY29uLmNhcm91c2VsLmxlZnQsdGhpcy4kcS5pY29uLmNhcm91c2VsLnJpZ2h0XTtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD90LnJldmVyc2UoKTp0fSx0cmFja1Bvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJue3RyYW5zZm9ybTpcInRyYW5zbGF0ZVgoXCIrdGhpcy5ydGxEaXIqdGhpcy5wb3NpdGlvbitcIiUpXCJ9fSxpbmZpbml0ZUxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZpbml0ZSYmdGhpcy5zbGlkZXNOdW1iZXI+MSYmdGhpcy5wb3NpdGlvblNsaWRlPDB9LGluZmluaXRlUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZpbml0ZSYmdGhpcy5zbGlkZXNOdW1iZXI+MSYmdGhpcy5wb3NpdGlvblNsaWRlPj10aGlzLnNsaWRlc051bWJlcn0sY2FuR29Ub1ByZXZpb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGU/dGhpcy5zbGlkZXNOdW1iZXI+MTp0aGlzLnNsaWRlPjB9LGNhbkdvVG9OZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGU/dGhpcy5zbGlkZXNOdW1iZXI+MTp0aGlzLnNsaWRlPHRoaXMuc2xpZGVzTnVtYmVyLTF9LGNvbXB1dGVkUXVpY2tOYXZJY29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVpY2tOYXZJY29ufHx0aGlzLiRxLmljb24uY2Fyb3VzZWwucXVpY2tOYXZ9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtpZighdGhpcy5pbkZ1bGxzY3JlZW4mJnRoaXMuaGVpZ2h0KXJldHVyblwiaGVpZ2h0OiBcIit0aGlzLmhlaWdodH0sc2xvdFNjb3BlOmZ1bmN0aW9uKCl7cmV0dXJue3NsaWRlOnRoaXMuc2xpZGUsc2xpZGVzTnVtYmVyOnRoaXMuc2xpZGVzTnVtYmVyLHBlcmNlbnRhZ2U6dGhpcy5zbGlkZXNOdW1iZXI8Mj8xMDA6MTAwKnRoaXMuc2xpZGUvKHRoaXMuc2xpZGVzTnVtYmVyLTEpLGdvVG9TbGlkZTp0aGlzLmdvVG9TbGlkZSxwcmV2aW91czp0aGlzLnByZXZpb3VzLG5leHQ6dGhpcy5uZXh0LGNvbG9yOnRoaXMuY29sb3IsaW5GdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLHRvZ2dsZUZ1bGxzY3JlZW46dGhpcy50b2dnbGVGdWxsc2NyZWVuLGNhbkdvVG9OZXh0OnRoaXMuY2FuR29Ub05leHQsY2FuR29Ub1ByZXZpb3VzOnRoaXMuY2FuR29Ub1ByZXZpb3VzfX0sY29tcHV0ZWRUaHVtYm5haWxJY29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGh1bWJuYWlsc0ljb258fHRoaXMuJHEuaWNvbi5jYXJvdXNlbC50aHVtYm5haWxzfX0sbWV0aG9kczp7cHJldmlvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5Hb1RvUHJldmlvdXM/dGhpcy5nb1RvU2xpZGUodGhpcy5zbGlkZS0xKTpQcm9taXNlLnJlc29sdmUoKX0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbkdvVG9OZXh0P3RoaXMuZ29Ub1NsaWRlKHRoaXMuc2xpZGUrMSk6UHJvbWlzZS5yZXNvbHZlKCl9LGdvVG9TbGlkZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgUHJvbWlzZShmdW5jdGlvbihzKXt2YXIgbixvPVwiXCIscj1pLnNsaWRlO2kuX19jbGVhbnVwKCk7dmFyIGE9ZnVuY3Rpb24oKXtpLiRlbWl0KFwiaW5wdXRcIixpLnNsaWRlKSxpLiRlbWl0KFwic2xpZGVcIixpLnNsaWRlLG8pLGkuJGVtaXQoXCJzbGlkZS1kaXJlY3Rpb25cIixvKSxpLl9fcGxhbkF1dG9QbGF5KCkscygpfTtpZihpLnNsaWRlc051bWJlcjwyPyhpLnNsaWRlPTAsaS5wb3NpdGlvblNsaWRlPTAsbj0wKTooaS5oYXNPd25Qcm9wZXJ0eShcImluaXRpYWxQb3NpdGlvblwiKXx8KGkucG9zaXRpb249MTAwKi1pLnNsaWRlKSxvPXQ+aS5zbGlkZT9cIm5leHRcIjpcInByZXZpb3VzXCIsaS5pbmZpbml0ZT8oaS5zbGlkZT1ub3JtYWxpemVUb0ludGVydmFsKHQsMCxpLnNsaWRlc051bWJlci0xKSxuPW5vcm1hbGl6ZVRvSW50ZXJ2YWwodCwtMSxpLnNsaWRlc051bWJlciksZXx8KGkucG9zaXRpb25TbGlkZT1uKSk6KGkuc2xpZGU9YmV0d2Vlbih0LDAsaS5zbGlkZXNOdW1iZXItMSksaS5wb3NpdGlvblNsaWRlPWkuc2xpZGUsbj1pLnNsaWRlKSksaS4kZW1pdChcInNsaWRlLXRyaWdnZXJcIixyLGkuc2xpZGUsbyksbio9LTEwMCwhaS5hbmltYXRpb24pcmV0dXJuIGkucG9zaXRpb249bix2b2lkIGEoKTtpLmFuaW1hdGlvbkluUHJvZ3Jlc3M9ITAsaS5hbmltVWlkPXN0YXJ0KHtmcm9tOmkucG9zaXRpb24sdG86bixkdXJhdGlvbjppc051bWJlcihpLmFuaW1hdGlvbik/aS5hbmltYXRpb246MzAwLGVhc2luZzplP2kuc3dpcGVFYXNpbmd8fGRlY2VsZXJhdGU6aS5lYXNpbmd8fHN0YW5kYXJkLGFwcGx5OmZ1bmN0aW9uKHQpe2kucG9zaXRpb249dH0sZG9uZTpmdW5jdGlvbigpe2kuaW5maW5pdGUmJihpLnBvc2l0aW9uPTEwMCotaS5zbGlkZSxpLnBvc2l0aW9uU2xpZGU9aS5zbGlkZSksaS5hbmltYXRpb25JblByb2dyZXNzPSExLGEoKX19KX0pfSxzdG9wQW5pbWF0aW9uOmZ1bmN0aW9uKCl7c3RvcCh0aGlzLmFuaW1VaWQpLHRoaXMuYW5pbWF0aW9uSW5Qcm9ncmVzcz0hMX0sX19wYW46ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5pbmZpbml0ZXx8IXRoaXMuYW5pbWF0aW9uSW5Qcm9ncmVzcyl7dC5pc0ZpcnN0JiYodGhpcy5pbml0aWFsUG9zaXRpb249dGhpcy5wb3NpdGlvbix0aGlzLl9fY2xlYW51cCgpKTt2YXIgaT10aGlzLnJ0bERpciooXCJsZWZ0XCI9PT10LmRpcmVjdGlvbj8tMToxKSp0LmRpc3RhbmNlLng7KHRoaXMuaW5maW5pdGUmJnRoaXMuc2xpZGVzTnVtYmVyPDJ8fCF0aGlzLmluZmluaXRlJiYoMD09PXRoaXMuc2xpZGUmJmk+MHx8dGhpcy5zbGlkZT09PXRoaXMuc2xpZGVzTnVtYmVyLTEmJmk8MCkpJiYoaT0wKTt2YXIgcz10aGlzLmluaXRpYWxQb3NpdGlvbitpL3RoaXMuJHJlZnMudHJhY2sub2Zmc2V0V2lkdGgqMTAwLG49dGhpcy5zbGlkZSt0aGlzLnJ0bERpciooXCJsZWZ0XCI9PT10LmRpcmVjdGlvbj8xOi0xKTt0aGlzLnBvc2l0aW9uIT09cyYmKHRoaXMucG9zaXRpb249cyksdGhpcy5wb3NpdGlvblNsaWRlIT09biYmKHRoaXMucG9zaXRpb25TbGlkZT1uKSx0LmlzRmluYWwmJnRoaXMuZ29Ub1NsaWRlKHQuZGlzdGFuY2UueDw0MD90aGlzLnNsaWRlOnRoaXMucG9zaXRpb25TbGlkZSwhMCkudGhlbihmdW5jdGlvbigpe2RlbGV0ZSBlLmluaXRpYWxQb3NpdGlvbn0pfX0sX19wbGFuQXV0b1BsYXk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hdXRvcGxheSYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPXNldFRpbWVvdXQodC5uZXh0LGlzTnVtYmVyKHQuYXV0b3BsYXkpP3QuYXV0b3BsYXk6NWUzKSl9KX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uKCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpfSxfX2hhbmRsZUFycm93S2V5OmZ1bmN0aW9uKHQpe3ZhciBlPWdldEV2ZW50S2V5KHQpOzM3PT09ZT90aGlzLnByZXZpb3VzKCk6Mzk9PT1lJiZ0aGlzLm5leHQoKX0sX19zZXRBcnJvd0tleXM6ZnVuY3Rpb24odCl7ZG9jdW1lbnRbKCEwPT09dD9cImFkZFwiOlwicmVtb3ZlXCIpK1wiRXZlbnRMaXN0ZW5lclwiXShcImtleWRvd25cIix0aGlzLl9faGFuZGxlQXJyb3dLZXkpfSxfX3JlZ2lzdGVyU2xpZGU6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlc051bWJlcisrfSxfX3VucmVnaXN0ZXJTbGlkZTpmdW5jdGlvbigpe3RoaXMuc2xpZGVzTnVtYmVyLS19LF9fZ2V0U2NvcGVkU2xvdHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigwIT09dGhpcy5zbGlkZXNOdW1iZXIpe3ZhciBpPXRoaXMuJHNjb3BlZFNsb3RzO3JldHVybiBpP09iamVjdC5rZXlzKGkpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGFydHNXaXRoKFwiY29udHJvbC1cIil9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGlbdF0oZS5zbG90U2NvcGUpfSk6dm9pZCAwfX0sX19nZXRRdWlja05hdjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKDAhPT10aGlzLnNsaWRlc051bWJlciYmdGhpcy5xdWlja05hdil7dmFyIGk9dGhpcy4kc2NvcGVkU2xvdHNbXCJxdWljay1uYXZcIl0scz1bXTtpZihpKWZvcih2YXIgbj1mdW5jdGlvbih0KXtzLnB1c2goaSh7c2xpZGU6dCxiZWZvcmU6dDxlLnNsaWRlLGN1cnJlbnQ6dD09PWUuc2xpZGUsYWZ0ZXI6dD5lLnNsaWRlLGNvbG9yOmUuY29sb3IsZ29Ub1NsaWRlOmZ1bmN0aW9uKGkpe2UuZ29Ub1NsaWRlKGl8fHQpfX0pKX0sbz0wO288dGhpcy5zbGlkZXNOdW1iZXI7bysrKW4obyk7ZWxzZSBmb3IodmFyIHI9ZnVuY3Rpb24oaSl7cy5wdXNoKHQoUUJ0bix7a2V5OmksY2xhc3M6e2luYWN0aXZlOmkhPT1lLnNsaWRlfSxwcm9wczp7aWNvbjplLmNvbXB1dGVkUXVpY2tOYXZJY29uLHJvdW5kOiEwLGZsYXQ6ITAsZGVuc2U6ITAsY29sb3I6ZS5jb2xvcn0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5nb1RvU2xpZGUoaSl9fX0pKX0sYT0wO2E8dGhpcy5zbGlkZXNOdW1iZXI7YSsrKXIoYSk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXF1aWNrLW5hdiBzY3JvbGwgdGV4dC1jZW50ZXJcIixjbGFzczpbXCJ0ZXh0LVwiK3RoaXMuY29sb3IsXCJhYnNvbHV0ZS1cIit0aGlzLnF1aWNrTmF2UG9zaXRpb25dfSxzKX19LF9fZ2V0VGh1bWJuYWlsczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy50aHVtYm5haWxzLm1hcChmdW5jdGlvbihpLHMpe2lmKGkpcmV0dXJuIHQoXCJkaXZcIix7b246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5nb1RvU2xpZGUocyl9fX0sW3QoXCJpbWdcIix7YXR0cnM6e3NyYzppfSxjbGFzczp7YWN0aXZlOmUuc2xpZGU9PT1zfX0pXSl9KSxzPVt0KFFCdG4se3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC10aHVtYm5haWwtYnRuIGFic29sdXRlXCIscHJvcHM6e2ljb246dGhpcy5jb21wdXRlZFRodW1ibmFpbEljb24sZmFiTWluaTohMCxmbGF0OiEwLGNvbG9yOnRoaXMuY29sb3J9LG9uOntjbGljazpmdW5jdGlvbigpe2Uudmlld1RodW1ibmFpbHM9IWUudmlld1RodW1ibmFpbHN9fX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXRodW1ibmFpbHMgc2Nyb2xsIGFic29sdXRlLWJvdHRvbVwiLGNsYXNzOnthY3RpdmU6dGhpcy52aWV3VGh1bWJuYWlsc319LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGd1dHRlci14c1wiLGNsYXNzOnRoaXMudGh1bWJuYWlsc0hvcml6b250YWw/XCJuby13cmFwXCI6XCJqdXN0aWZ5LWNlbnRlclwifSxpKV0pXTtyZXR1cm4gdGhpcy52aWV3VGh1bWJuYWlscyYmcy51bnNoaWZ0KHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZS1mdWxsXCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3VGh1bWJuYWlscz0hMX19fSkpLHN9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsXCIsc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlLGNsYXNzOntmdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVufX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLWlubmVyXCIsZGlyZWN0aXZlczp0aGlzLm5vU3dpcGU/bnVsbDpbe25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e2hvcml6b250YWw6ITAscHJldmVudDohMCxzdG9wOiEwfSx2YWx1ZTp0aGlzLl9fcGFufV19LFt0KFwiZGl2XCIse3JlZjpcInRyYWNrXCIsc3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXRyYWNrXCIsc3R5bGU6dGhpcy50cmFja1Bvc2l0aW9uLGNsYXNzOntcImluZmluaXRlLWxlZnRcIjp0aGlzLmluZmluaXRlTGVmdCxcImluZmluaXRlLXJpZ2h0XCI6dGhpcy5pbmZpbml0ZVJpZ2h0fX0sW3RoaXMuaW5maW5pdGVSaWdodD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1zbGlkZVwiLHN0eWxlOlwiZmxleDogMCAwIDEwMCVcIn0pOm51bGwsdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLmluZmluaXRlTGVmdD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1zbGlkZVwiLHN0eWxlOlwiZmxleDogMCAwIDEwMCVcIn0pOm51bGxdKV0pLHRoaXMuYXJyb3dzP3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLWxlZnQtYXJyb3cgYWJzb2x1dGVcIixwcm9wczp7Y29sb3I6dGhpcy5jb2xvcixpY29uOnRoaXMuYXJyb3dJY29uWzBdLGZhYk1pbmk6ITAsZmxhdDohMH0sZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6dGhpcy5jYW5Hb1RvUHJldmlvdXN9XSxvbjp7Y2xpY2s6dGhpcy5wcmV2aW91c319KTpudWxsLHRoaXMuYXJyb3dzP3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXJpZ2h0LWFycm93IGFic29sdXRlXCIscHJvcHM6e2NvbG9yOnRoaXMuY29sb3IsaWNvbjp0aGlzLmFycm93SWNvblsxXSxmYWJNaW5pOiEwLGZsYXQ6ITB9LGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuY2FuR29Ub05leHR9XSxvbjp7Y2xpY2s6dGhpcy5uZXh0fX0pOm51bGwsdGhpcy5fX2dldFF1aWNrTmF2KHQpLHRoaXMuX19nZXRTY29wZWRTbG90cyh0KSx0aGlzLnRodW1ibmFpbHMubGVuZ3RoP3RoaXMuX19nZXRUaHVtYm5haWxzKHQpOm51bGwsdGhpcy4kc2xvdHMuY29udHJvbF0pfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fcGxhbkF1dG9QbGF5KCksdGhpcy5oYW5kbGVBcnJvd0tleXMmJnRoaXMuX19zZXRBcnJvd0tleXMoITApLHRoaXMuX19zdG9wU2xpZGVOdW1iZXJOb3RpZmllcj10aGlzLiR3YXRjaChcInNsaWRlc051bWJlclwiLGZ1bmN0aW9uKGUpe3QudmFsdWU+PWUmJnQuJGVtaXQoXCJpbnB1dFwiLGUtMSl9LHtpbW1lZGlhdGU6ITB9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCksdGhpcy5fX3N0b3BTbGlkZU51bWJlck5vdGlmaWVyKCksdGhpcy5oYW5kbGVBcnJvd0tleXMmJnRoaXMuX19zZXRBcnJvd0tleXMoITEpfX0sUUNhcm91c2VsU2xpZGU9e25hbWU6XCJRQ2Fyb3VzZWxTbGlkZVwiLGluamVjdDp7Y2Fyb3VzZWw6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUNhcm91c2VsU2xpZGUgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUNhcm91c2VsXCIpfX19LHByb3BzOntpbWdTcmM6U3RyaW5nfSxjb21wdXRlZDp7Y29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmltZ1NyYyYmKHQuYmFja2dyb3VuZEltYWdlPVwidXJsKFwiK3RoaXMuaW1nU3JjK1wiKVwiLHQuYmFja2dyb3VuZFNpemU9XCJjb3ZlclwiLHQuYmFja2dyb3VuZFBvc2l0aW9uPVwiNTAlXCIpLCF0aGlzLmNhcm91c2VsLmluRnVsbHNjcmVlbiYmdGhpcy5jYXJvdXNlbC5oZWlnaHQmJih0Lm1heEhlaWdodD10aGlzLmNhcm91c2VsLmhlaWdodCksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtc2xpZGUgcmVsYXRpdmUtcG9zaXRpb24gc2Nyb2xsXCIsc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSx0aGlzLiRzbG90cy5kZWZhdWx0KX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuY2Fyb3VzZWwuX19yZWdpc3RlclNsaWRlKCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmNhcm91c2VsLl9fdW5yZWdpc3RlclNsaWRlKCl9fSxRQ2Fyb3VzZWxDb250cm9sPXtuYW1lOlwiUUNhcm91c2VsQ29udHJvbFwiLHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbS1yaWdodFwifSxvZmZzZXQ6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblsxOCwxOF19fX0sY29tcHV0ZWQ6e2NvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cImFic29sdXRlLVwiK3RoaXMucG9zaXRpb259LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57bWFyZ2luOnRoaXMub2Zmc2V0WzFdK1wicHggXCIrdGhpcy5vZmZzZXRbMF0rXCJweFwifX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtY29udHJvbCBhYnNvbHV0ZVwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3N9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNoYXRNZXNzYWdlPXtuYW1lOlwiUUNoYXRNZXNzYWdlXCIscHJvcHM6e3NlbnQ6Qm9vbGVhbixsYWJlbDpTdHJpbmcsYmdDb2xvcjpTdHJpbmcsdGV4dENvbG9yOlN0cmluZyxuYW1lOlN0cmluZyxhdmF0YXI6U3RyaW5nLHRleHQ6QXJyYXksc3RhbXA6U3RyaW5nLHNpemU6U3RyaW5nfSxjb21wdXRlZDp7dGV4dENsYXNzOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXh0Q29sb3IpcmV0dXJuXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yfSxtZXNzYWdlQ2xhc3M6ZnVuY3Rpb24oKXtpZih0aGlzLmJnQ29sb3IpcmV0dXJuXCJ0ZXh0LVwiK3RoaXMuYmdDb2xvcn0sc2l6ZUNsYXNzOmZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKXJldHVyblwiY29sLVwiK3RoaXMuc2l6ZX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcInEtbWVzc2FnZS1zZW50XCI6dGhpcy5zZW50LFwicS1tZXNzYWdlLXJlY2VpdmVkXCI6IXRoaXMuc2VudH19fSxtZXRob2RzOntfX2dldFRleHQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy50ZXh0Lm1hcChmdW5jdGlvbihpLHMpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXRleHRcIixjbGFzczplLm1lc3NhZ2VDbGFzc30sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXRleHQtY29udGVudFwiLGNsYXNzOmUudGV4dENsYXNzfSxbdChcImRpdlwiLHtkb21Qcm9wczp7aW5uZXJIVE1MOml9fSksZS5zdGFtcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXN0YW1wXCIsZG9tUHJvcHM6e2lubmVySFRNTDplLnN0YW1wfX0pOm51bGxdKV0pfSl9LF9fZ2V0TWVzc2FnZTpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0XCIsY2xhc3M6dGhpcy5tZXNzYWdlQ2xhc3N9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0LWNvbnRlbnRcIixjbGFzczp0aGlzLnRleHRDbGFzc30sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy5zdGFtcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXN0YW1wXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLnN0YW1wfX0pOm51bGxdKV0pfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy5sYWJlbD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLWxhYmVsIHRleHQtY2VudGVyXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1jb250YWluZXIgcm93IGl0ZW1zLWVuZCBuby13cmFwXCJ9LFt0aGlzLiRzbG90cy5hdmF0YXJ8fCh0aGlzLmF2YXRhcj90KFwiaW1nXCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLWF2YXRhciBjb2wtYXV0b1wiLGF0dHJzOntzcmM6dGhpcy5hdmF0YXJ9fSk6bnVsbCksdChcImRpdlwiLHtjbGFzczp0aGlzLnNpemVDbGFzc30sW3RoaXMubmFtZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLW5hbWVcIixkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMubmFtZX19KTpudWxsLHRoaXMudGV4dD90aGlzLl9fZ2V0VGV4dCh0KTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHQ/dGhpcy5fX2dldE1lc3NhZ2UodCk6bnVsbF0pXSldKX19O2Z1bmN0aW9uIGdldERpcmVjdGlvbiQxKHQpe3ZhciBlPXt9O3JldHVybltcImxlZnRcIixcInJpZ2h0XCIsXCJ1cFwiLFwiZG93blwiLFwiaG9yaXpvbnRhbFwiLFwidmVydGljYWxcIl0uZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldJiYoZVtpXT0hMCl9KSwwPT09T2JqZWN0LmtleXMoZSkubGVuZ3RoP3tsZWZ0OiEwLHJpZ2h0OiEwLHVwOiEwLGRvd246ITAsaG9yaXpvbnRhbDohMCx2ZXJ0aWNhbDohMH06KGUuaG9yaXpvbnRhbCYmKGUubGVmdD1lLnJpZ2h0PSEwKSxlLnZlcnRpY2FsJiYoZS51cD1lLmRvd249ITApLGUubGVmdCYmZS5yaWdodCYmKGUuaG9yaXpvbnRhbD0hMCksZS51cCYmZS5kb3duJiYoZS52ZXJ0aWNhbD0hMCksZSl9dmFyIFRvdWNoU3dpcGU9e25hbWU6XCJ0b3VjaC1zd2lwZVwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT0hZS5tb2RpZmllcnMubm9Nb3VzZSxzPXtoYW5kbGVyOmUudmFsdWUsdGhyZXNob2xkOnBhcnNlSW50KGUuYXJnLDEwKXx8MzAwLGRpcmVjdGlvbjpnZXREaXJlY3Rpb24kMShlLm1vZGlmaWVycyksbW91c2VTdGFydDpmdW5jdGlvbih0KXtsZWZ0Q2xpY2sodCkmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscy5tb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHMubW91c2VFbmQpLHMuc3RhcnQodCkpfSxtb3VzZUVuZDpmdW5jdGlvbih0KXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscy5tb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHMubW91c2VFbmQpLHMuZW5kKHQpfSxzdGFydDpmdW5jdGlvbihlKXt2YXIgaT1wb3NpdGlvbihlKTtzLmV2ZW50PXt4OmkubGVmdCx5OmkudG9wLHRpbWU6KG5ldyBEYXRlKS5nZXRUaW1lKCksZGV0ZWN0ZWQ6ITEsYWJvcnQ6ITF9LHQuY2xhc3NMaXN0LmFkZChcInEtdG91Y2hcIil9LG1vdmU6ZnVuY3Rpb24odCl7aWYoIXMuZXZlbnQuYWJvcnQpaWYoKG5ldyBEYXRlKS5nZXRUaW1lKCktcy5ldmVudC50aW1lPnMudGhyZXNob2xkKXMuZXZlbnQuYWJvcnQ9ITA7ZWxzZXtpZihzLmV2ZW50LmRldGVjdGVkKXJldHVybiB0LnN0b3BQcm9wYWdhdGlvbigpLHZvaWQgdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlPXBvc2l0aW9uKHQpLGk9ZS5sZWZ0LXMuZXZlbnQueCxuPU1hdGguYWJzKGkpLG89ZS50b3Atcy5ldmVudC55LHI9TWF0aC5hYnMobyk7biE9PXImJihzLmV2ZW50LmRldGVjdGVkPSEwLHMuZXZlbnQuYWJvcnQ9IShzLmRpcmVjdGlvbi52ZXJ0aWNhbCYmbjxyfHxzLmRpcmVjdGlvbi5ob3Jpem9udGFsJiZuPnJ8fHMuZGlyZWN0aW9uLnVwJiZuPHImJm88MHx8cy5kaXJlY3Rpb24uZG93biYmbjxyJiZvPjB8fHMuZGlyZWN0aW9uLmxlZnQmJm4+ciYmaTwwfHxzLmRpcmVjdGlvbi5yaWdodCYmbj5yJiZpPjApLHMubW92ZSh0KSl9fSxlbmQ6ZnVuY3Rpb24oZSl7aWYodC5jbGFzc0xpc3QucmVtb3ZlKFwicS10b3VjaFwiKSwhcy5ldmVudC5hYm9ydCYmcy5ldmVudC5kZXRlY3RlZCl7dmFyIGk9KG5ldyBEYXRlKS5nZXRUaW1lKCktcy5ldmVudC50aW1lO2lmKCEoaT5zLnRocmVzaG9sZCkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuLG89cG9zaXRpb24oZSkscj1vLmxlZnQtcy5ldmVudC54LGE9TWF0aC5hYnMociksbD1vLnRvcC1zLmV2ZW50LnksYz1NYXRoLmFicyhsKTtpZihhPj1jKXtpZihhPDUwKXJldHVybjtuPXI8MD9cImxlZnRcIjpcInJpZ2h0XCJ9ZWxzZXtpZihjPDUwKXJldHVybjtuPWw8MD9cInVwXCI6XCJkb3duXCJ9cy5kaXJlY3Rpb25bbl0mJnMuaGFuZGxlcih7ZXZ0OmUsZGlyZWN0aW9uOm4sZHVyYXRpb246aSxkaXN0YW5jZTp7eDphLHk6Y319KX19fX07dC5fX3F0b3VjaHN3aXBlPXMsaSYmdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIscy5tb3VzZVN0YXJ0KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIscy5zdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIscy5tb3ZlKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLHMuZW5kKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7ZS5vbGRWYWx1ZSE9PWUudmFsdWUmJih0Ll9fcXRvdWNoc3dpcGUuaGFuZGxlcj1lLnZhbHVlKX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fX3F0b3VjaHN3aXBlO2kmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixpLm1vdXNlU3RhcnQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixpLnN0YXJ0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixpLm1vdmUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaS5lbmQpLGRlbGV0ZSB0Ll9fcXRvdWNoc3dpcGUpfX0sQ2hlY2tib3hNaXhpbj17ZGlyZWN0aXZlczp7VG91Y2hTd2lwZTpUb3VjaFN3aXBlfSxwcm9wczp7dmFsOnt9LHRydWVWYWx1ZTp7ZGVmYXVsdDohMH0sZmFsc2VWYWx1ZTp7ZGVmYXVsdDohMX19LGNvbXB1dGVkOntpc1RydWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbElzQXJyYXk/dGhpcy5pbmRleD4tMTp0aGlzLnZhbHVlPT09dGhpcy50cnVlVmFsdWV9LGlzRmFsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbElzQXJyYXk/LTE9PT10aGlzLmluZGV4OnRoaXMudmFsdWU9PT10aGlzLmZhbHNlVmFsdWV9LGluZGV4OmZ1bmN0aW9uKCl7aWYodGhpcy5tb2RlbElzQXJyYXkpcmV0dXJuIHRoaXMudmFsdWUuaW5kZXhPZih0aGlzLnZhbCl9LG1vZGVsSXNBcnJheTpmdW5jdGlvbigpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpfX0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKHQsZSl7dmFyIGk7KHZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHkpfHwodCYmc3RvcEFuZFByZXZlbnQodCksZSYmdGhpcy4kZWwuYmx1cigpLHRoaXMubW9kZWxJc0FycmF5P3RoaXMuaXNUcnVlPyhpPXRoaXMudmFsdWUuc2xpY2UoKSkuc3BsaWNlKHRoaXMuaW5kZXgsMSk6aT10aGlzLnZhbHVlLmNvbmNhdCh0aGlzLnZhbCk6aT10aGlzLmlzVHJ1ZT90aGlzLnRvZ2dsZUluZGV0ZXJtaW5hdGU/dGhpcy5pbmRldGVybWluYXRlVmFsdWU6dGhpcy5mYWxzZVZhbHVlOnRoaXMuaXNGYWxzZT90aGlzLnRydWVWYWx1ZTp0aGlzLmZhbHNlVmFsdWUsdGhpcy5fX3VwZGF0ZShpKSl9fX0sT3B0aW9uTWl4aW49e3Byb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LGxhYmVsOlN0cmluZyxsZWZ0TGFiZWw6Qm9vbGVhbixjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sa2VlcENvbG9yOkJvb2xlYW4sZGFyazpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLG5vRm9jdXM6Qm9vbGVhbixjaGVja2VkSWNvbjpTdHJpbmcsdW5jaGVja2VkSWNvbjpTdHJpbmd9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX19rZWJhYlRhZyx7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLHJldmVyc2U6dGhpcy5sZWZ0TGFiZWwsXCJxLWZvY3VzYWJsZVwiOnRoaXMuZm9jdXNhYmxlfV19LGlubmVyQ2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVHJ1ZXx8dGhpcy5pc0luZGV0ZXJtaW5hdGU/W1wiYWN0aXZlXCIsXCJ0ZXh0LVwiK3RoaXMuY29sb3JdOlwidGV4dC1cIisodGhpcy5rZWVwQ29sb3I/dGhpcy5jb2xvcjp0aGlzLmRhcms/XCJsaWdodFwiOlwiZmFkZWRcIil9LGZvY3VzYWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vRm9jdXMmJiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSx0YWJpbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvY3VzYWJsZT8wOi0xfX0sbWV0aG9kczp7X191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuJHJlZnMucmlwcGxlO2kmJihpLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIiksc2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKX0sMTApKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7WzEzLDMyXS5pbmNsdWRlcyhnZXRFdmVudEtleSh0KSkmJnRoaXMudG9nZ2xlKHQsITEpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW9wdGlvbiBjdXJzb3ItcG9pbnRlciBuby1vdXRsaW5lIHJvdyBpbmxpbmUgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3RhYmluZGV4OnRoaXMudGFiaW5kZXh9LG9uOntjbGljazp0aGlzLnRvZ2dsZSxmb2N1czpmdW5jdGlvbigpe2UuJGVtaXQoXCJmb2N1c1wiKX0sYmx1cjpmdW5jdGlvbigpe2UuJGVtaXQoXCJibHVyXCIpfSxrZXlkb3duOnRoaXMuX19oYW5kbGVLZXlEb3dufSxkaXJlY3RpdmVzOlwicS10b2dnbGVcIiE9PXRoaXMuX19rZWJhYlRhZ3x8dGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5P251bGw6W3tuYW1lOlwidG91Y2gtc3dpcGVcIixtb2RpZmllcnM6e2hvcml6b250YWw6ITB9LHZhbHVlOnRoaXMuX19zd2lwZX1dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtb3B0aW9uLWlubmVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5pbm5lckNsYXNzZXN9LFt0KFwiaW5wdXRcIix7YXR0cnM6e3R5cGU6XCJjaGVja2JveFwifSxvbjp7Y2hhbmdlOnRoaXMudG9nZ2xlfX0pLHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1mb2N1cy1oZWxwZXJcIixjbGFzczpcInEtcmFkaW9cIj09PXRoaXMuX19rZWJhYlRhZz9cInEtZm9jdXMtaGVscGVyLXJvdW5kXCI6XCJxLWZvY3VzLWhlbHBlci1yb3VuZGVkXCJ9KTpudWxsLHRoaXMuX19nZXRDb250ZW50KHQpXSksdGhpcy5sYWJlbD90KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtb3B0aW9uLWxhYmVsXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pOm51bGwsdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sUUNoZWNrYm94PXtuYW1lOlwiUUNoZWNrYm94XCIsbWl4aW5zOltDaGVja2JveE1peGluLE9wdGlvbk1peGluXSxwcm9wczp7dG9nZ2xlSW5kZXRlcm1pbmF0ZTpCb29sZWFuLGluZGV0ZXJtaW5hdGVWYWx1ZTp7ZGVmYXVsdDpudWxsfSxpbmRldGVybWluYXRlSWNvbjpTdHJpbmd9LGNvbXB1dGVkOntpc0luZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy52YWx1ZXx8dGhpcy52YWx1ZT09PXRoaXMuaW5kZXRlcm1pbmF0ZVZhbHVlfSxjaGVja2VkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1RydWU/e3RyYW5zaXRpb246XCJvcGFjaXR5IDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zLCB0cmFuc2Zvcm0gODAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtc1wiLG9wYWNpdHk6MSx0cmFuc2Zvcm06XCJzY2FsZSgxKVwifTp7dHJhbnNpdGlvbjpcIm9wYWNpdHkgNDUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtcywgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgNDUwbXNcIixvcGFjaXR5OjAsdHJhbnNmb3JtOlwic2NhbGUoMClcIn19LGluZGV0ZXJtaW5hdGVTdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5kZXRlcm1pbmF0ZT97dHJhbnNpdGlvbjpcIm9wYWNpdHkgMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSAwbXMsIHRyYW5zZm9ybSA4MDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zXCIsb3BhY2l0eToxLHRyYW5zZm9ybTpcInNjYWxlKDEpXCJ9Ont0cmFuc2l0aW9uOlwib3BhY2l0eSA0NTBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zLCB0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSA0NTBtc1wiLG9wYWNpdHk6MCx0cmFuc2Zvcm06XCJzY2FsZSgwKVwifX0sdW5jaGVja2VkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ZhbHNlP3tvcGFjaXR5OjF9Ont0cmFuc2l0aW9uOlwib3BhY2l0eSA2NTBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMTUwbXNcIixvcGFjaXR5OjB9fX0sbWV0aG9kczp7X19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVyblt0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtY2hlY2tib3gtaWNvbiBjdXJzb3ItcG9pbnRlclwiLHByb3BzOntuYW1lOnRoaXMudW5jaGVja2VkSWNvbnx8dGhpcy4kcS5pY29uLmNoZWNrYm94LnVuY2hlY2tlZC5tYXR9LHN0eWxlOnRoaXMudW5jaGVja2VkU3R5bGV9KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtY2hlY2tib3gtaWNvbiBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy5pbmRldGVybWluYXRlSWNvbnx8dGhpcy4kcS5pY29uLmNoZWNrYm94LmluZGV0ZXJtaW5hdGUubWF0fSxzdHlsZTp0aGlzLmluZGV0ZXJtaW5hdGVTdHlsZX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwicS1jaGVja2JveC1pY29uIGN1cnNvci1wb2ludGVyIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmNoZWNrZWRJY29ufHx0aGlzLiRxLmljb24uY2hlY2tib3guY2hlY2tlZC5tYXR9LHN0eWxlOnRoaXMuY2hlY2tlZFN0eWxlfSksdChcImRpdlwiLHtyZWY6XCJyaXBwbGVcIixzdGF0aWNDbGFzczpcInEtcmFkaWFsLXJpcHBsZVwifSldfX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fX2tlYmFiVGFnPVwicS1jaGVja2JveFwifX0sUUNoaXA9e25hbWU6XCJRQ2hpcFwiLHByb3BzOntzbWFsbDpCb29sZWFuLGRlbnNlOkJvb2xlYW4sdGFnOkJvb2xlYW4sc3F1YXJlOkJvb2xlYW4sZmxvYXRpbmc6Qm9vbGVhbixwb2ludGluZzp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInVwXCIsXCJyaWdodFwiLFwiZG93blwiLFwibGVmdFwiXS5pbmNsdWRlcyh0KX19LGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGljb246U3RyaW5nLGljb25SaWdodDpTdHJpbmcsYXZhdGFyOlN0cmluZyxjbG9zYWJsZTpCb29sZWFuLGRldGFpbDpCb29sZWFufSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdGhpcy5wb2ludGluZyYmZS5wdXNoKFwicS1jaGlwLXBvaW50aW5nLVwiK3RoaXMucG9pbnRpbmcpLFtcInRhZ1wiLFwic3F1YXJlXCIsXCJmbG9hdGluZ1wiLFwicG9pbnRpbmdcIixcInNtYWxsXCIsXCJkZW5zZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3RbaV0mJmUucHVzaChcInEtY2hpcC1cIitpKX0pLHRoaXMuZmxvYXRpbmcmJighdGhpcy5kZW5zZSYmZS5wdXNoKFwicS1jaGlwLWRlbnNlXCIpLCF0aGlzLnNxdWFyZSYmZS5wdXNoKFwicS1jaGlwLXNxdWFyZVwiKSksdGhpcy5jb2xvciYmKGUucHVzaChcImJnLVwiK3RoaXMuY29sb3IpLCF0aGlzLnRleHRDb2xvciYmZS5wdXNoKFwidGV4dC13aGl0ZVwiKSksdGhpcy50ZXh0Q29sb3ImJmUucHVzaChcInRleHQtXCIrdGhpcy50ZXh0Q29sb3IpLGV9fSxtZXRob2RzOntfX29uQ2xpY2s6ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdCl9LF9fb25Nb3VzZURvd246ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImZvY3VzXCIsdCl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXt0aGlzLmNsb3NhYmxlJiZbOCwxMywzMl0uaW5jbHVkZXMoZ2V0RXZlbnRLZXkodCkpJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy4kZW1pdChcImhpZGVcIikpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAgcm93IG5vLXdyYXAgaW5saW5lIGl0ZW1zLWNlbnRlclwiLGNsYXNzOnRoaXMuY2xhc3Nlcyxvbjp7bW91c2Vkb3duOnRoaXMuX19vbk1vdXNlRG93bix0b3VjaHN0YXJ0OnRoaXMuX19vbk1vdXNlRG93bixjbGljazp0aGlzLl9fb25DbGljayxrZXlkb3duOnRoaXMuX19oYW5kbGVLZXlEb3dufX0sW3RoaXMuaWNvbnx8dGhpcy5hdmF0YXI/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2hpcC1zaWRlIHEtY2hpcC1sZWZ0IHJvdyBmbGV4LWNlbnRlclwiLGNsYXNzOntcInEtY2hpcC1kZXRhaWxcIjp0aGlzLmRldGFpbH19LFt0aGlzLmljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtaWNvblwiLHByb3BzOntuYW1lOnRoaXMuaWNvbn19KTp0aGlzLmF2YXRhcj90KFwiaW1nXCIse2F0dHJzOntzcmM6dGhpcy5hdmF0YXJ9fSk6bnVsbF0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2hpcC1tYWluIGVsbGlwc2lzIHEtcG9wdXAtLXNraXBcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCksdGhpcy5pY29uUmlnaHQ/dChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy5pY29uUmlnaHR9LGNsYXNzOnRoaXMuY2xvc2FibGU/XCJvbi1yaWdodCBxLWNoaXAtaWNvblwiOlwicS1jaGlwLXNpZGUgcS1jaGlwLXJpZ2h0XCJ9KTpudWxsLHRoaXMuY2xvc2FibGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2hpcC1zaWRlIHEtY2hpcC1jbG9zZSBxLWNoaXAtcmlnaHQgcm93IGZsZXgtY2VudGVyXCJ9LFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uY2hpcC5jbG9zZX0sc3RhdGljQ2xhc3M6XCJjdXJzb3ItcG9pbnRlclwiLG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpLGUuJGVtaXQoXCJoaWRlXCIpfX19KV0pOm51bGxdKX19LG1hcmdpbmFsPXt0eXBlOkFycmF5LHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm5cImljb25cImluIHR9KX19LEZyYW1lTWl4aW49e21peGluczpbQWxpZ25NaXhpbl0scHJvcHM6e3ByZWZpeDpTdHJpbmcsc3VmZml4OlN0cmluZyxzdGFja0xhYmVsOlN0cmluZyxmbG9hdExhYmVsOlN0cmluZyxwbGFjZWhvbGRlcjpTdHJpbmcsZXJyb3I6Qm9vbGVhbix3YXJuaW5nOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW4sY2xlYXJhYmxlOkJvb2xlYW4sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGFsaWduOntkZWZhdWx0OlwibGVmdFwifSxkYXJrOkJvb2xlYW4sYmVmb3JlOm1hcmdpbmFsLGFmdGVyOm1hcmdpbmFsLGludmVydGVkOkJvb2xlYW4saW52ZXJ0ZWRMaWdodDpCb29sZWFuLGhpZGVVbmRlcmxpbmU6Qm9vbGVhbixjbGVhclZhbHVlOnt9LG5vUGFyZW50RmllbGQ6Qm9vbGVhbn0sY29tcHV0ZWQ6e2lucHV0UGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXtpZighdGhpcy5mbG9hdExhYmVsJiYhdGhpcy5zdGFja0xhYmVsfHx0aGlzLmxhYmVsSXNBYm92ZSlyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcn0saXNJbnZlcnRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludmVydGVkfHx0aGlzLmludmVydGVkTGlnaHR9LGlzSW52ZXJ0ZWRMaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW52ZXJ0ZWQmJih0aGlzLmludmVydGVkTGlnaHQmJiF0aGlzLmhhc0Vycm9yfHx0aGlzLmludmVydGVkJiZ0aGlzLmhhc1dhcm5pbmcpfSxpc1N0YW5kYXJkOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNJbnZlcnRlZH0saXNIaWRlVW5kZXJsaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNTdGFuZGFyZCYmdGhpcy5oaWRlVW5kZXJsaW5lfSxsYWJlbElzQWJvdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb2N1c2VkfHx0aGlzLmxlbmd0aHx8dGhpcy5hZGRpdGlvbmFsTGVuZ3RofHx0aGlzLnN0YWNrTGFiZWx9LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg+MHx8dGhpcy5hZGRpdGlvbmFsTGVuZ3RoPjB8fHRoaXMucGxhY2Vob2xkZXJ8fDA9PT10aGlzLnBsYWNlaG9sZGVyfSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP251bGw6dGhpcy5jbGVhclZhbHVlfSxpc0NsZWFyYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0aGlzLmNsZWFyYWJsZSYmdGhpcy5jb21wdXRlZENsZWFyVmFsdWUhPT10aGlzLm1vZGVsfSxoYXNFcnJvcjpmdW5jdGlvbigpe3JldHVybiEhKCF0aGlzLm5vUGFyZW50RmllbGQmJnRoaXMuZmllbGQmJnRoaXMuZmllbGQuZXJyb3J8fHRoaXMuZXJyb3IpfSxoYXNXYXJuaW5nOmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLmhhc0Vycm9yfHwhKCF0aGlzLm5vUGFyZW50RmllbGQmJnRoaXMuZmllbGQmJnRoaXMuZmllbGQud2FybmluZ3x8dGhpcy53YXJuaW5nKSl9LGZha2VJbnB1dFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0dWFsVmFsdWV8fDA9PT10aGlzLmFjdHVhbFZhbHVlP3RoaXMuYWN0dWFsVmFsdWU6dGhpcy5wbGFjZWhvbGRlcnx8MD09PXRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjpcIlwifSxmYWtlSW5wdXRDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY3R1YWxWYWx1ZXx8MD09PXRoaXMuYWN0dWFsVmFsdWU7cmV0dXJuW3RoaXMuYWxpZ25DbGFzcyx7aW52aXNpYmxlOih0aGlzLnN0YWNrTGFiZWx8fHRoaXMuZmxvYXRMYWJlbCkmJiF0aGlzLmxhYmVsSXNBYm92ZSYmIXQsXCJxLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlclwiOiF0JiZ0aGlzLmlucHV0UGxhY2Vob2xkZXJ9XX19LG1ldGhvZHM6e2NsZWFyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZWRpdGFibGUpe3QmJnN0b3BBbmRQcmV2ZW50KHQpO3ZhciBlPXRoaXMuY29tcHV0ZWRDbGVhclZhbHVlO3RoaXMuX19zZXRNb2RlbCYmdGhpcy5fX3NldE1vZGVsKGUsITApLHRoaXMuJGVtaXQoXCJjbGVhclwiLGUpfX19fSxJbnB1dE1peGluPXtwcm9wczp7YXV0b2ZvY3VzOltCb29sZWFuLFN0cmluZ10sbWF4SGVpZ2h0Ok51bWJlcixsb2FkaW5nOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Zm9jdXNlZDohMSx0aW1lcjpudWxsLGlzTnVtYmVyRXJyb3I6ITEsaXNOZWdaZXJvOiExfX0sbWV0aG9kczp7Zm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGV8fHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKX0sYmx1cjpmdW5jdGlvbigpe3RoaXMuJHJlZnMuaW5wdXQmJnRoaXMuJHJlZnMuaW5wdXQuYmx1cigpfSxzZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmlucHV0LnNlbGVjdCgpfSxfX29uRm9jdXM6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXNlZHx8KHRoaXMuZm9jdXNlZD0hMCx0aGlzLiRyZWZzLmlucHV0JiZ0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCksdGhpcy4kZW1pdChcImZvY3VzXCIsdCkpfSxfX29uSW5wdXRCbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX19vbkJsdXIodCl9LDIwMCl9LF9fb25CbHVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuJGVtaXQoXCJibHVyXCIsdCkpLHRoaXMuX19lbWl0KGUpfSxfX2VtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuaXNOdW1iZXImJnRoaXMuaXNOdW1iZXJFcnJvcixzPWk/dGhpcy5pc05lZ1plcm8/LTA6bnVsbDp0aGlzLm1vZGVsO3RoaXMuaXNOdW1iZXImJih0aGlzLm1vZGVsPXRoaXMudmFsdWUpLGkmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLHMpO3ZhciBuPWZ1bmN0aW9uKCl7ZS5pc051bWJlcj8ocz1wYXJzZUZsb2F0KHMpLE51bWJlci5pc0ludGVnZXIoZS5kZWNpbWFscykmJihzPXBhcnNlRmxvYXQocy50b0ZpeGVkKGUuZGVjaW1hbHMpKSksU3RyaW5nKDEvcykhPT1TdHJpbmcoMS9lLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHMpKTpKU09OLnN0cmluZ2lmeShzKSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIscyl9O3Q/bigpOnRoaXMuJG5leHRUaWNrKG4pfSxfX29uS2V5ZG93bjpmdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmKFwidGV4dGFyZWFcIj09PXRoaXMudHlwZT90LnN0b3BQcm9wYWdhdGlvbigpOnRoaXMuX19lbWl0KCkpLHRoaXMuJGVtaXQoXCJrZXlkb3duXCIsdCl9LF9fb25LZXl1cDpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwia2V5dXBcIix0KX0sX19vbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuZm9jdXMoKSx0aGlzLiRlbWl0KFwiY2xpY2tcIix0KX0sX19vblBhc3RlOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJwYXN0ZVwiLHQpfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt2YXIgZT10LiRyZWZzLmlucHV0O3QuYXV0b2ZvY3VzJiZlJiYoZS5mb2N1cygpLFwic2VsZWN0XCI9PT10LmF1dG9mb2N1cyYmZS5zZWxlY3QoKSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzZWQmJnRoaXMuX19vbkJsdXIodm9pZCAwLCEwKX19LFBhcmVudEZpZWxkTWl4aW49e2luamVjdDp7ZmllbGQ6e2Zyb206XCJfX2ZpZWxkXCIsZGVmYXVsdDpudWxsfX0scHJvcHM6e25vUGFyZW50RmllbGQ6Qm9vbGVhbn0sd2F0Y2g6e25vUGFyZW50RmllbGQ6ZnVuY3Rpb24odCl7dGhpcy5maWVsZCYmdGhpcy5maWVsZFt0P1wiX19yZWdpc3RlcklucHV0XCI6XCJfX3VucmVnaXN0ZXJJbnB1dFwiXSh0aGlzKX19LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7IXRoaXMubm9QYXJlbnRGaWVsZCYmdGhpcy5maWVsZCYmdGhpcy5maWVsZC5fX3JlZ2lzdGVySW5wdXQodGhpcyl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXshdGhpcy5ub1BhcmVudEZpZWxkJiZ0aGlzLmZpZWxkJiZ0aGlzLmZpZWxkLl9fdW5yZWdpc3RlcklucHV0KHRoaXMpfX0sUUlucHV0RnJhbWU9e25hbWU6XCJRSW5wdXRGcmFtZVwiLG1peGluczpbRnJhbWVNaXhpbixQYXJlbnRGaWVsZE1peGluXSxwcm9wczp7Zm9jdXNlZDpCb29sZWFuLGxlbmd0aDpOdW1iZXIsZm9jdXNhYmxlOkJvb2xlYW4sYWRkaXRpb25hbExlbmd0aDpCb29sZWFufSxjb21wdXRlZDp7aGFzU3RhY2tMYWJlbDpmdW5jdGlvbigpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnN0YWNrTGFiZWwmJnRoaXMuc3RhY2tMYWJlbC5sZW5ndGg+MH0saGFzTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNTdGFja0xhYmVsfHxcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5mbG9hdExhYmVsJiZ0aGlzLmZsb2F0TGFiZWwubGVuZ3RoPjB9LGxhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzU3RhY2tMYWJlbD90aGlzLnN0YWNrTGFiZWw6dGhpcy5mbG9hdExhYmVsfSxhZGRvbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1wicS1pZi1hZGRvbi12aXNpYmxlXCI6IXRoaXMuaGFzTGFiZWx8fHRoaXMubGFiZWxJc0Fib3ZlfX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt7XCJxLWlmLWhhcy1sYWJlbFwiOnRoaXMubGFiZWwsXCJxLWlmLWZvY3VzZWRcIjp0aGlzLmZvY3VzZWQsXCJxLWlmLWVycm9yXCI6dGhpcy5oYXNFcnJvcixcInEtaWYtd2FybmluZ1wiOnRoaXMuaGFzV2FybmluZyxcInEtaWYtZGlzYWJsZWRcIjp0aGlzLmRpc2FibGUsXCJxLWlmLXJlYWRvbmx5XCI6dGhpcy5yZWFkb25seSxcInEtaWYtZm9jdXNhYmxlXCI6dGhpcy5mb2N1c2FibGUmJiF0aGlzLmRpc2FibGUsXCJxLWlmLWludmVydGVkXCI6dGhpcy5pc0ludmVydGVkLFwicS1pZi1pbnZlcnRlZC1saWdodFwiOnRoaXMuaXNJbnZlcnRlZExpZ2h0LFwicS1pZi1saWdodC1jb2xvclwiOnRoaXMubGlnaHRDb2xvcixcInEtaWYtZGFya1wiOnRoaXMuZGFyayxcInEtaWYtaGlkZS11bmRlcmxpbmVcIjp0aGlzLmlzSGlkZVVuZGVybGluZSxcInEtaWYtc3RhbmRhcmRcIjp0aGlzLmlzU3RhbmRhcmQsXCJxLWlmLWhhcy1jb250ZW50XCI6dGhpcy5oYXNDb250ZW50fV0sZT10aGlzLmhhc0Vycm9yP1wibmVnYXRpdmVcIjp0aGlzLmhhc1dhcm5pbmc/XCJ3YXJuaW5nXCI6dGhpcy5jb2xvcjtyZXR1cm4gdGhpcy5pc0ludmVydGVkPyh0LnB1c2goXCJiZy1cIitlKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLmlzSW52ZXJ0ZWRMaWdodD9cImJsYWNrXCI6XCJ3aGl0ZVwiKSkpOmUmJnQucHVzaChcInRleHQtXCIrZSksdH19LG1ldGhvZHM6e19fb25DbGljazpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwiY2xpY2tcIix0KX0sX19vbk1vdXNlRG93bjpmdW5jdGlvbih0KXt2YXIgZT10aGlzOyF0aGlzLmRpc2FibGUmJnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUuJGVtaXQoXCJmb2N1c1wiLHQpfSl9LF9fYWRkaXRpb25hbEhpZGRlbjpmdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gdm9pZCAwIT09dC5jb25kaXRpb24/ITE9PT10LmNvbmRpdGlvbjp2b2lkIDAhPT10LmNvbnRlbnQmJiF0LmNvbnRlbnQ9PXM+MHx8dm9pZCAwIT09dC5lcnJvciYmIXQuZXJyb3I9PT1lfHx2b2lkIDAhPT10Lndhcm5pbmcmJiF0Lndhcm5pbmc9PT1pfSxfX2JhSGFuZGxlcjpmdW5jdGlvbih0LGUpe2UuYWxsb3dQcm9wYWdhdGlvbnx8dC5zdG9wUHJvcGFnYXRpb24oKSxlLmhhbmRsZXImJmUuaGFuZGxlcih0KX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZiByb3cgbm8td3JhcCByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7dGFiaW5kZXg6dGhpcy5mb2N1c2FibGUmJiF0aGlzLmRpc2FibGU/MDotMX0sb246e2NsaWNrOnRoaXMuX19vbkNsaWNrfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlmLWJhc2VsaW5lXCJ9LFwifFwiKSx0aGlzLmJlZm9yZSYmdGhpcy5iZWZvcmUubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFFJY29uLHtrZXk6XCJiXCIraS5pY29uLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sIHEtaWYtY29udHJvbC1iZWZvcmVcIixjbGFzczpbaS5jbGFzcyx7aGlkZGVuOmUuX19hZGRpdGlvbmFsSGlkZGVuKGksZS5oYXNFcnJvcixlLmhhc1dhcm5pbmcsZS5sZW5ndGgpfV0scHJvcHM6e25hbWU6aS5pY29ufSxuYXRpdmVPbjp7bW91c2Vkb3duOmUuX19vbk1vdXNlRG93bix0b3VjaHN0YXJ0OmUuX19vbk1vdXNlRG93bixjbGljazpmdW5jdGlvbih0KXtlLl9fYmFIYW5kbGVyKHQsaSl9fX0pfSl8fHZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1pbm5lciBjb2wgY29sdW1uIHEtcG9wdXAtLXNraXBcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCByZWxhdGl2ZS1wb3NpdGlvblwifSxbdGhpcy5wcmVmaXgmJnQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1pZi1hZGRvbiBxLWlmLWFkZG9uLWxlZnRcIixjbGFzczp0aGlzLmFkZG9uQ2xhc3MsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLnByZWZpeH19KXx8dm9pZCAwLHRoaXMuaGFzTGFiZWwmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlmLWxhYmVsXCIsY2xhc3M6e1wicS1pZi1sYWJlbC1hYm92ZVwiOnRoaXMubGFiZWxJc0Fib3ZlfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlmLWxhYmVsLWlubmVyIGVsbGlwc2lzXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pXSl8fHZvaWQgMF0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpLmNvbmNhdChbdGhpcy5zdWZmaXgmJnQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1pZi1hZGRvbiBxLWlmLWFkZG9uLXJpZ2h0XCIsY2xhc3M6dGhpcy5hZGRvbkNsYXNzLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5zdWZmaXh9fSl8fHZvaWQgMF0pKSx0aGlzLmhhc0xhYmVsJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1sYWJlbC1zcGFjZXJcIixkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMubGFiZWx9fSl8fHZvaWQgMF0pLHRoaXMuYWZ0ZXImJnRoaXMuYWZ0ZXIubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFFJY29uLHtrZXk6XCJhXCIraS5pY29uLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsY2xhc3M6W2kuY2xhc3Mse2hpZGRlbjplLl9fYWRkaXRpb25hbEhpZGRlbihpLGUuaGFzRXJyb3IsZS5oYXNXYXJuaW5nLGUubGVuZ3RoKX1dLHByb3BzOntuYW1lOmkuaWNvbn0sbmF0aXZlT246e21vdXNlZG93bjplLl9fb25Nb3VzZURvd24sdG91Y2hzdGFydDplLl9fb25Nb3VzZURvd24sY2xpY2s6ZnVuY3Rpb24odCl7ZS5fX2JhSGFuZGxlcih0LGkpfX19KX0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5hZnRlcikpfX0sUUNoaXBzSW5wdXQ9e25hbWU6XCJRQ2hpcHNJbnB1dFwiLG1peGluczpbRnJhbWVNaXhpbixJbnB1dE1peGluXSxwcm9wczp7dmFsdWU6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGNoaXBzQ29sb3I6U3RyaW5nLGNoaXBzQmdDb2xvcjpTdHJpbmcscmVhZG9ubHk6Qm9vbGVhbixhZGRJY29uOlN0cmluZyx1cHBlckNhc2U6Qm9vbGVhbixsb3dlckNhc2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue2lucHV0OlwiXCIsbW9kZWw6dGhpcy52YWx1ZS5zbGljZSgpLHdhdGNoZXI6bnVsbCxzaGFkb3c6e3ZhbDp0aGlzLmlucHV0LHNldDp0aGlzLmFkZCxzZXROYXY6ZnVuY3Rpb24oZSl7dC5pbnB1dD1lfSxsb2FkaW5nOiExLHNlbGVjdGlvbk9wZW46ITEsd2F0Y2hlZDowLGlzRWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lZGl0YWJsZX0saXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGFya30saGFzRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXQuJHJlZnMuaW5wdXR9LHJlZ2lzdGVyOmZ1bmN0aW9uKCl7dC5zaGFkb3cud2F0Y2hlZCs9MSx0Ll9fd2F0Y2hlclJlZ2lzdGVyKCl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oKXt0LnNoYWRvdy53YXRjaGVkPU1hdGgubWF4KDAsdC5zaGFkb3cud2F0Y2hlZC0xKSx0Ll9fd2F0Y2hlclVucmVnaXN0ZXIoKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy5pbnB1dH19fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw9dC5zbGljZSgpfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX2lucHV0OnRoaXMuc2hhZG93fX0sY29tcHV0ZWQ6e2xlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsP3RoaXMubW9kZWwubGVuZ3RoOjB9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRpbmd8fHRoaXMuc2hhZG93LndhdGNoZWQmJnRoaXMuc2hhZG93LmxvYWRpbmd9LGNvbXB1dGVkQWRkSWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZEljb258fHRoaXMuJHEuaWNvbi5jaGlwc0lucHV0LmFkZH0sY29tcHV0ZWRDaGlwVGV4dENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpcHNDb2xvcj90aGlzLmNoaXBzQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P3RoaXMuY29sb3I6XCJ3aGl0ZVwiOnRoaXMuaXNJbnZlcnRlZD90aGlzLmludmVydGVkTGlnaHQ/XCJncmV5LTEwXCI6dGhpcy5jb2xvcjp0aGlzLmRhcms/dGhpcy5jb2xvcjpcIndoaXRlXCJ9LGNvbXB1dGVkQ2hpcEJnQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlwc0JnQ29sb3I/dGhpcy5jaGlwc0JnQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnRoaXMuY29sb3I6dGhpcy5pc0ludmVydGVkP3RoaXMuaW52ZXJ0ZWRMaWdodD90aGlzLmNvbG9yOlwid2hpdGVcIjp0aGlzLmRhcms/XCJ3aGl0ZVwiOnRoaXMuY29sb3J9LGlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLmFsaWduQ2xhc3NdO3JldHVybiB0aGlzLnVwcGVyQ2FzZSYmdC5wdXNoKFwidXBwZXJjYXNlXCIpLHRoaXMubG93ZXJDYXNlJiZ0LnB1c2goXCJsb3dlcmNhc2VcIiksdH0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJjAhPT10aGlzLm1vZGVsLmxlbmd0aH19LG1ldGhvZHM6e2FkZDpmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD10aGlzLmlucHV0KSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpLCF0aGlzLmlzTG9hZGluZyYmdGhpcy5lZGl0YWJsZSYmdCl7dmFyIGU9dGhpcy5sb3dlckNhc2U/dC50b0xvd2VyQ2FzZSgpOnRoaXMudXBwZXJDYXNlP3QudG9VcHBlckNhc2UoKTp0O3RoaXMubW9kZWwuaW5jbHVkZXMoZSk/dGhpcy4kZW1pdChcImR1cGxpY2F0ZVwiLGUpOih0aGlzLiRlbWl0KFwiYWRkXCIse2luZGV4OnRoaXMubW9kZWwubGVuZ3RoLHZhbDplfSksdGhpcy5tb2RlbC5wdXNoKGUpLHRoaXMuJGVtaXQoXCJpbnB1dFwiLHRoaXMubW9kZWwpLHRoaXMuaW5wdXQ9XCJcIil9fSxyZW1vdmU6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXMoKSx0aGlzLmVkaXRhYmxlJiZ0Pj0wJiZ0PHRoaXMubGVuZ3RoJiYodGhpcy4kZW1pdChcInJlbW92ZVwiLHtpbmRleDp0LHZhbHVlOnRoaXMubW9kZWwuc3BsaWNlKHQsMSl9KSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSl9LGNsZWFyOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0JiZzdG9wQW5kUHJldmVudCh0KSx0aGlzLmVkaXRhYmxlJiYodGhpcy4kZW1pdChcImlucHV0XCIsW10pLHRoaXMuJGVtaXQoXCJjbGVhclwiKSl9LF9fY2xlYXJUaW1lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHQudGltZXIpfSl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXtzd2l0Y2goZ2V0RXZlbnRLZXkodCkpe2Nhc2UgMTM6aWYodGhpcy5zaGFkb3cuc2VsZWN0aW9uT3BlbilyZXR1cm47cmV0dXJuIHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuYWRkKCk7Y2FzZSA4OnJldHVybiB2b2lkKCF0aGlzLmlucHV0Lmxlbmd0aCYmdGhpcy5sZW5ndGgmJnRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpKTtkZWZhdWx0OnJldHVybiB0aGlzLl9fb25LZXlkb3duKHQpfX0sX19vbkNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpfSxfX3dhdGNoZXI6ZnVuY3Rpb24odCl7dGhpcy5zaGFkb3cud2F0Y2hlZCYmKHRoaXMuc2hhZG93LnZhbD10KX0sX193YXRjaGVyUmVnaXN0ZXI6ZnVuY3Rpb24oKXt0aGlzLndhdGNoZXJ8fCh0aGlzLndhdGNoZXI9dGhpcy4kd2F0Y2goXCJpbnB1dFwiLHRoaXMuX193YXRjaGVyKSl9LF9fd2F0Y2hlclVucmVnaXN0ZXI6ZnVuY3Rpb24odCl7IXRoaXMud2F0Y2hlcnx8IXQmJnRoaXMuc2hhZG93LndhdGNoZWR8fCh0aGlzLndhdGNoZXIoKSx0aGlzLndhdGNoZXI9bnVsbCx0aGlzLnNoYWRvdy5zZWxlY3Rpb25PcGVuPSExKX19LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fd2F0Y2hlclVucmVnaXN0ZXIoITApfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXRGcmFtZSx7c3RhdGljQ2xhc3M6XCJxLWNoaXBzLWlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZCxsZW5ndGg6dGhpcy5sZW5ndGgsYWRkaXRpb25hbExlbmd0aDp0aGlzLmlucHV0Lmxlbmd0aD4wfSxvbjp7Y2xpY2s6dGhpcy5fX29uQ2xpY2t9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCByb3cgaXRlbXMtY2VudGVyIHEtaW5wdXQtY2hpcHNcIn0sdGhpcy5tb2RlbC5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRQ2hpcCx7a2V5OmkrXCIjXCIrcyxwcm9wczp7c21hbGw6ITAsY2xvc2FibGU6ZS5lZGl0YWJsZSxjb2xvcjplLmNvbXB1dGVkQ2hpcEJnQ29sb3IsdGV4dENvbG9yOmUuY29tcHV0ZWRDaGlwVGV4dENvbG9yfSxhdHRyczp7dGFiaW5kZXg6ZS5lZGl0YWJsZSYmZS5mb2N1c2VkPzA6LTF9LG9uOntibHVyOmUuX19vbklucHV0Qmx1cixmb2N1czplLl9fY2xlYXJUaW1lcixoaWRlOmZ1bmN0aW9uKCl7ZS5yZW1vdmUocyl9fSxuYXRpdmVPbjp7Ymx1cjplLl9fb25JbnB1dEJsdXIsZm9jdXM6ZS5fX2NsZWFyVGltZXJ9fSxpKX0pLmNvbmNhdChbdChcImlucHV0XCIse3JlZjpcImlucHV0XCIsc3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXRcIixjbGFzczp0aGlzLmlucHV0Q2xhc3Nlcyxkb21Qcm9wczp7dmFsdWU6dGhpcy5pbnB1dH0sYXR0cnM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRhdHRycyx7cGxhY2Vob2xkZXI6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLGRpc2FibGVkOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5fSksb246e2lucHV0OmZ1bmN0aW9uKHQpe2UuaW5wdXQ9dC50YXJnZXQudmFsdWV9LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uSW5wdXRCbHVyLGtleWRvd246dGhpcy5fX2hhbmRsZUtleURvd24sa2V5dXA6dGhpcy5fX29uS2V5dXB9fSldKSksdGhpcy5pc0xvYWRpbmc/dGhpcy4kc2xvdHMubG9hZGluZz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmxvYWRpbmcpOnQoUVNwaW5uZXIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e3NpemU6XCIyNHB4XCJ9fSk6dGhpcy5lZGl0YWJsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixjbGFzczp7aW52aXNpYmxlOjA9PT10aGlzLmlucHV0Lmxlbmd0aH0scHJvcHM6e25hbWU6dGhpcy5jb21wdXRlZEFkZEljb259LG5hdGl2ZU9uOnttb3VzZWRvd246dGhpcy5fX2NsZWFyVGltZXIsdG91Y2hzdGFydDp0aGlzLl9fY2xlYXJUaW1lcixjbGljazpmdW5jdGlvbigpe2UuYWRkKCl9fX0pfHx2b2lkIDAsdGhpcy5pc0NsZWFyYWJsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXRbXCJjbGVhclwiKyh0aGlzLmlzSW52ZXJ0ZWQ/XCJJbnZlcnRlZFwiOlwiXCIpXX0sbmF0aXZlT246e21vdXNlZG93bjp0aGlzLl9fY2xlYXJUaW1lcix0b3VjaHN0YXJ0OnRoaXMuX19jbGVhclRpbWVyLGNsaWNrOnRoaXMuY2xlYXJ9fSl8fHZvaWQgMF0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImFic29sdXRlLWZ1bGwgbm8tcG9pbnRlci1ldmVudHNcIixzbG90OlwiYWZ0ZXJcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCk6dm9pZCAwKSl9fSxRSXRlbVRpbGU9e25hbWU6XCJRSXRlbVRpbGVcIixwcm9wczp7aWNvbjpTdHJpbmcsbGV0dGVyOkJvb2xlYW4saW52ZXJ0ZWQ6Qm9vbGVhbixpbWFnZTpCb29sZWFuLGF2YXRhcjpCb29sZWFuLHN0YW1wOkJvb2xlYW4sbGFiZWw6Qm9vbGVhbixzdWJsYWJlbDpCb29sZWFuLGxpbmVzOltOdW1iZXIsU3RyaW5nXSx0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJkaXZcIn0sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmd9LGNvbXB1dGVkOntoYXNMaW5lczpmdW5jdGlvbigpe3JldHVybih0aGlzLmxhYmVsfHx0aGlzLnN1YmxhYmVsKSYmdGhpcy5saW5lc30sdHlwZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW1wiaWNvblwiLFwibGFiZWxcIixcInN1YmxhYmVsXCIsXCJpbWFnZVwiLFwiYXZhdGFyXCIsXCJsZXR0ZXJcIixcInN0YW1wXCJdLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmNvbG9yJiYodGhpcy5pbnZlcnRlZD90LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKTp0aGlzLnRleHRDb2xvcnx8dC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSksdGhpcy50ZXh0Q29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy50ZXh0Q29sb3IpLHRoaXMudHlwZSYmdC5wdXNoKFwicS1pdGVtLVwiK3RoaXMudHlwZSksdGhpcy5pbnZlcnRlZCYmKHRoaXMuaWNvbnx8dGhpcy5sZXR0ZXIpJiYodC5wdXNoKFwicS1pdGVtLWludmVydGVkXCIpLHQucHVzaChcImZsZXhcIiksdC5wdXNoKFwiZmxleC1jZW50ZXJcIikpLCF0aGlzLmhhc0xpbmVzfHxcIjFcIiE9PXRoaXMubGluZXMmJjEhPT10aGlzLmxpbmVzfHx0LnB1c2goXCJlbGxpcHNpc1wiKSx0fSxzdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuaGFzTGluZXMpcmV0dXJuIHRleHRTdHlsZSh0aGlzLmxpbmVzKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT17Y2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc3R5bGV9O2lmKHRoaXMuaWNvbil7aWYodGhpcy5pbnZlcnRlZClyZXR1cm4gdCh0aGlzLnRhZyxlLFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLmljb259fSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pO2UucHJvcHM9e25hbWU6dGhpcy5pY29ufX1yZXR1cm4gdCh0aGlzLmljb24/UUljb246dGhpcy50YWcsZSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFTbGlkZVRyYW5zaXRpb249e25hbWU6XCJRU2xpZGVUcmFuc2l0aW9uXCIscHJvcHM6e2FwcGVhcjpCb29sZWFuLGR1cmF0aW9uOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMH19LG1ldGhvZHM6e19fYmVnaW46ZnVuY3Rpb24odCxlLGkpe3Quc3R5bGUub3ZlcmZsb3dZPVwiaGlkZGVuXCIsdm9pZCAwIT09ZSYmKHQuc3R5bGUuaGVpZ2h0PWUrXCJweFwiKSx0LnN0eWxlLnRyYW5zaXRpb249XCJoZWlnaHQgXCIrdGhpcy5kdXJhdGlvbitcIm1zIGN1YmljLWJlemllciguMjUsIC44LCAuNTAsIDEpXCIsdGhpcy5hbmltYXRpbmc9ITAsdGhpcy5kb25lPWl9LF9fZW5kOmZ1bmN0aW9uKHQsZSl7dC5zdHlsZS5vdmVyZmxvd1k9bnVsbCx0LnN0eWxlLmhlaWdodD1udWxsLHQuc3R5bGUudHJhbnNpdGlvbj1udWxsLHRoaXMuX19jbGVhbnVwKCksZSE9PXRoaXMubGFzdEV2ZW50JiZ0aGlzLiRlbWl0KGUpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLmRvbmUmJnRoaXMuZG9uZSgpLHRoaXMuZG9uZT1udWxsLHRoaXMuYW5pbWF0aW5nPSExLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsdGhpcy5hbmltTGlzdGVuZXIpLHRoaXMuYW5pbUxpc3RlbmVyPW51bGx9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpbmcmJnRoaXMuX19jbGVhbnVwKCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwidHJhbnNpdGlvblwiLHtwcm9wczp7Y3NzOiExLGFwcGVhcjp0aGlzLmFwcGVhcn0sb246e2VudGVyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9MDtlLmVsPXQsITA9PT1lLmFuaW1hdGluZz8oZS5fX2NsZWFudXAoKSxzPXQub2Zmc2V0SGVpZ2h0PT09dC5zY3JvbGxIZWlnaHQ/MDp2b2lkIDApOmUubGFzdEV2ZW50PVwiaGlkZVwiLGUuX19iZWdpbih0LHMsaSksZS50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdHlsZS5oZWlnaHQ9dC5zY3JvbGxIZWlnaHQrXCJweFwiLGUuYW5pbUxpc3RlbmVyPWZ1bmN0aW9uKCl7ZS5fX2VuZCh0LFwic2hvd1wiKX0sdC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLGUuYW5pbUxpc3RlbmVyKX0sMTAwKX0sbGVhdmU6ZnVuY3Rpb24odCxpKXt2YXIgcztlLmVsPXQsITA9PT1lLmFuaW1hdGluZz9lLl9fY2xlYW51cCgpOihlLmxhc3RFdmVudD1cInNob3dcIixzPXQuc2Nyb2xsSGVpZ2h0KSxlLl9fYmVnaW4odCxzLGkpLGUudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3Quc3R5bGUuaGVpZ2h0PTAsZS5hbmltTGlzdGVuZXI9ZnVuY3Rpb24oKXtlLl9fZW5kKHQsXCJoaWRlXCIpfSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsZS5hbmltTGlzdGVuZXIpfSwxMDApfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sZXZlbnROYW1lPVwicTpjb2xsYXBzaWJsZTpjbG9zZVwiLFFDb2xsYXBzaWJsZT17bmFtZTpcIlFDb2xsYXBzaWJsZVwiLG1peGluczpbTW9kZWxUb2dnbGVNaXhpbixJdGVtTWl4aW4se3Byb3BzOnN1Ykl0ZW1Qcm9wc31dLG1vZGVsVG9nZ2xlOntoaXN0b3J5OiExfSxwcm9wczp7ZGlzYWJsZTpCb29sZWFuLHBvcHVwOkJvb2xlYW4saW5kZW50OkJvb2xlYW4sZ3JvdXA6U3RyaW5nLGljb25Ub2dnbGU6Qm9vbGVhbixjb2xsYXBzZUljb246U3RyaW5nLG9wZW5lZDpCb29sZWFuLGR1cmF0aW9uOk51bWJlcixoZWFkZXJTdHlsZTpbQXJyYXksU3RyaW5nLE9iamVjdF0saGVhZGVyQ2xhc3M6W0FycmF5LFN0cmluZyxPYmplY3RdfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcInEtY29sbGFwc2libGUtb3BlbmVkXCI6dGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1jbG9zZWRcIjohdGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWRcIjp0aGlzLnBvcHVwJiZ0aGlzLnNob3dpbmcsXCJxLWNvbGxhcHNpYmxlLXBvcHVwLWNsb3NlZFwiOnRoaXMucG9wdXAmJiF0aGlzLnNob3dpbmcsXCJxLWNvbGxhcHNpYmxlLWN1cnNvci1wb2ludGVyXCI6IXRoaXMuc2VwYXJhdGVUb2dnbGUsXCJxLWl0ZW0tZGFya1wiOnRoaXMuZGFyayxcInEtaXRlbS1zZXBhcmF0b3JcIjp0aGlzLnNlcGFyYXRvcixcInEtaXRlbS1pbnNldC1zZXBhcmF0b3JcIjp0aGlzLmluc2V0U2VwYXJhdG9yLGRpc2FibGVkOnRoaXMuZGlzYWJsZX19LHNlcGFyYXRlVG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvblRvZ2dsZXx8dm9pZCAwIT09dGhpcy50b319LHdhdGNoOntzaG93aW5nOmZ1bmN0aW9uKHQpe3QmJnRoaXMuZ3JvdXAmJnRoaXMuJHJvb3QuJGVtaXQoZXZlbnROYW1lLHRoaXMpfX0sbWV0aG9kczp7X190b2dnbGVJdGVtOmZ1bmN0aW9uKCl7dGhpcy5zZXBhcmF0ZVRvZ2dsZXx8dGhpcy50b2dnbGUoKX0sX190b2dnbGVJY29uOmZ1bmN0aW9uKHQpe3RoaXMuc2VwYXJhdGVUb2dnbGUmJih0JiZzdG9wQW5kUHJldmVudCh0KSx0aGlzLnRvZ2dsZSgpKX0sX19ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5ncm91cCYmdGhpcyE9PXQmJnQuZ3JvdXA9PT10aGlzLmdyb3VwJiZ0aGlzLmhpZGUoKX0sX19nZXRUb2dnbGVTaWRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QoUUl0ZW1UaWxlLHtzbG90OmU/XCJyaWdodFwiOnZvaWQgMCxzdGF0aWNDbGFzczpcImN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tZ2VuZXJpYyByZWxhdGl2ZS1wb3NpdGlvbiBxLWNvbGxhcHNpYmxlLXRvZ2dsZS1pY29uXCIsY2xhc3M6e1wicm90YXRlLTE4MFwiOnRoaXMuc2hvd2luZyxpbnZpc2libGU6dGhpcy5kaXNhYmxlfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5fX3RvZ2dsZUljb259LHByb3BzOntpY29uOnRoaXMuY29sbGFwc2VJY29ufHx0aGlzLiRxLmljb24uY29sbGFwc2libGUuaWNvbn19KV19LF9fZ2V0SXRlbVByb3BzOmZ1bmN0aW9uKHQpe3JldHVybntwcm9wczp0P3tjZmc6dGhpcy4kcHJvcHN9OnRoaXMuJHByb3BzLHN0eWxlOnRoaXMuaGVhZGVyU3R5bGUsY2xhc3M6dGhpcy5oZWFkZXJDbGFzcyxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5fX3RvZ2dsZUl0ZW19fX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRyb290LiRvbihldmVudE5hbWUsdGhpcy5fX2V2ZW50SGFuZGxlciksKHRoaXMub3BlbmVkfHx0aGlzLnZhbHVlKSYmdGhpcy5zaG93KCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLiRyb290LiRvZmYoZXZlbnROYW1lLHRoaXMuX19ldmVudEhhbmRsZXIpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1jb2xsYXBzaWJsZSBxLWl0ZW0tZGl2aXNpb24gcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xsYXBzaWJsZS1pbm5lclwifSxbdGhpcy4kc2xvdHMuaGVhZGVyP3QoUUl0ZW0sdGhpcy5fX2dldEl0ZW1Qcm9wcygpLFt0aGlzLiRzbG90cy5oZWFkZXIsdChRSXRlbVNpZGUse3Byb3BzOntyaWdodDohMH0sc3RhdGljQ2xhc3M6XCJyZWxhdGl2ZS1wb3NpdGlvblwifSx0aGlzLl9fZ2V0VG9nZ2xlU2lkZSh0KSldKTp0KFFJdGVtV3JhcHBlcix0aGlzLl9fZ2V0SXRlbVByb3BzKCEwKSx0aGlzLl9fZ2V0VG9nZ2xlU2lkZSh0LCEwKSksdChRU2xpZGVUcmFuc2l0aW9uLHtwcm9wczp7ZHVyYXRpb246dGhpcy5kdXJhdGlvbn19LFt0KFwiZGl2XCIse2RpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuc2hvd2luZ31dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sbGFwc2libGUtc3ViLWl0ZW0gcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp7aW5kZW50OnRoaXMuaW5kZW50fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKV0pXSldKX19LERpc3BsYXlNb2RlTWl4aW49e3Byb3BzOntwb3BvdmVyOkJvb2xlYW4sbW9kYWw6Qm9vbGVhbn0sY29tcHV0ZWQ6e2lzUG9wb3ZlcjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5wb3BvdmVyfHwhdGhpcy5tb2RhbCYmKHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcCYmIXRoaXMuJHEucGxhdGZvcm0ud2l0aGluLmlmcmFtZSl9fX07ZnVuY3Rpb24gZ2V0UGVyY2VudGFnZSh0LGUsaSl7dmFyIHM9YmV0d2VlbigocG9zaXRpb24odCkubGVmdC1lLmxlZnQpL2Uud2lkdGgsMCwxKTtyZXR1cm4gaT8xLXM6c31mdW5jdGlvbiBub3REaXZpZGVzKHQsZSl7dmFyIGk9ZT9wYXJzZUZsb2F0KHQudG9GaXhlZChlKSk6dDtyZXR1cm4gaSE9PXBhcnNlSW50KGksMTApfWZ1bmN0aW9uIGdldE1vZGVsKHQsZSxpLHMsbil7dmFyIG89ZSt0KihpLWUpLHI9KG8tZSklcztyZXR1cm4gbys9KE1hdGguYWJzKHIpPj1zLzI/KHI8MD8tMToxKSpzOjApLXIsbiYmKG89cGFyc2VGbG9hdChvLnRvRml4ZWQobikpKSxiZXR3ZWVuKG8sZSxpKX12YXIgU2xpZGVyTWl4aW49e2RpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7bWluOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1fSxzdGVwOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LGRlY2ltYWxzOk51bWJlcixzbmFwOkJvb2xlYW4sbWFya2VyczpCb29sZWFuLGxhYmVsOkJvb2xlYW4sbGFiZWxBbHdheXM6Qm9vbGVhbixzcXVhcmU6Qm9vbGVhbixjb2xvcjpTdHJpbmcsZmlsbEhhbmRsZUFsd2F5czpCb29sZWFuLGVycm9yOkJvb2xlYW4sd2FybmluZzpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSxjb21wdXRlZDp7ZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXtkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxcImxhYmVsLWFsd2F5c1wiOnRoaXMubGFiZWxBbHdheXMsXCJoYXMtZXJyb3JcIjp0aGlzLmVycm9yLFwiaGFzLXdhcm5pbmdcIjp0aGlzLndhcm5pbmd9O3JldHVybiB0aGlzLmVycm9yfHx0aGlzLndhcm5pbmd8fCF0aGlzLmNvbG9yfHwodFtcInRleHQtXCIrdGhpcy5jb2xvcl09ITApLHR9LG1hcmtlcnNMZW46ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCsxfSxsYWJlbENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3I/XCJuZWdhdGl2ZVwiOnRoaXMud2FybmluZz9cIndhcm5pbmdcIjp0aGlzLmNvbG9yfHxcInByaW1hcnlcIn0sY29tcHV0ZWREZWNpbWFsczpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmRlY2ltYWxzP3RoaXMuZGVjaW1hbHN8fDA6KFN0cmluZyh0aGlzLnN0ZXApLnRyaW0oXCIwXCIpLnNwbGl0KFwiLlwiKVsxXXx8XCJcIikubGVuZ3RofSxjb21wdXRlZFN0ZXA6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz8xL01hdGgucG93KDEwLHRoaXMuZGVjaW1hbHN8fDApOnRoaXMuc3RlcH19LG1ldGhvZHM6e19fcGFuOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5pc0ZpbmFsP3RoaXMuZHJhZ2dpbmcmJih0aGlzLmRyYWdUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5kcmFnZ2luZz0hMX0sMTAwKSx0aGlzLl9fZW5kKHQuZXZ0KSx0aGlzLl9fdXBkYXRlKCEwKSk6dC5pc0ZpcnN0PyhjbGVhclRpbWVvdXQodGhpcy5kcmFnVGltZXIpLHRoaXMuZHJhZ2dpbmc9dGhpcy5fX2dldERyYWdnaW5nKHQuZXZ0KSk6dGhpcy5kcmFnZ2luZyYmKHRoaXMuX19tb3ZlKHQuZXZ0KSx0aGlzLl9fdXBkYXRlKCkpfSxfX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO0pTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSkmJih0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSx0JiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KGUubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKX0pKX0sX19jbGljazpmdW5jdGlvbih0KXtpZighdGhpcy5kcmFnZ2luZyl7dmFyIGU9dGhpcy5fX2dldERyYWdnaW5nKHQpO2UmJih0aGlzLl9fZW5kKHQsZSksdGhpcy5fX3VwZGF0ZSghMCkpfX0sX19nZXRNYXJrZXJzOmZ1bmN0aW9uKHQpe2lmKHRoaXMubWFya2Vycyl7Zm9yKHZhciBlPVtdLGk9MDtpPHRoaXMubWFya2Vyc0xlbjtpKyspZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1tYXJrXCIsa2V5OlwibWFya2VyXCIraSxzdHlsZTp7bGVmdDoxMDAqaSp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKStcIiVcIn19KSk7cmV0dXJuIGV9fX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX192YWxpZGF0ZVByb3BzKCl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc2xpZGVyIG5vbi1zZWxlY3RhYmxlXCIsY2xhc3M6dGhpcy5jbGFzc2VzLG9uOnRoaXMuZWRpdGFibGU/e2NsaWNrOnRoaXMuX19jbGlja306bnVsbCxkaXJlY3RpdmVzOnRoaXMuZWRpdGFibGU/W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwLHByZXZlbnQ6ITAsc3RvcDohMH0sdmFsdWU6dGhpcy5fX3Bhbn1dOm51bGx9LFt0KFwiZGl2XCIse3JlZjpcImhhbmRsZVwiLHN0YXRpY0NsYXNzOlwicS1zbGlkZXItaGFuZGxlLWNvbnRhaW5lclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc2xpZGVyLXRyYWNrXCJ9KSx0aGlzLl9fZ2V0TWFya2Vycyh0KV0uY29uY2F0KHRoaXMuX19nZXRDb250ZW50KHQpKSldKX19LFFTbGlkZXI9e25hbWU6XCJRU2xpZGVyXCIsbWl4aW5zOltTbGlkZXJNaXhpbl0scHJvcHM6e3ZhbHVlOk51bWJlcixsYWJlbFZhbHVlOlN0cmluZ30sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb2RlbDp0aGlzLnZhbHVlLGRyYWdnaW5nOiExLGN1cnJlbnRQZXJjZW50YWdlOih0aGlzLnZhbHVlLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfX0sY29tcHV0ZWQ6e3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwPyh0aGlzLm1vZGVsLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pKjEwMCtcIiVcIjoxMDAqdGhpcy5jdXJyZW50UGVyY2VudGFnZStcIiVcIn0sZGlzcGxheVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubGFiZWxWYWx1ZT90aGlzLmxhYmVsVmFsdWU6dGhpcy5tb2RlbH19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nfHwodDx0aGlzLm1pbj90aGlzLm1vZGVsPXRoaXMubWluOnQ+dGhpcy5tYXg/dGhpcy5tb2RlbD10aGlzLm1heDp0aGlzLm1vZGVsPXQsdGhpcy5jdXJyZW50UGVyY2VudGFnZT0odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSl9LG1pbjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPHQ/dGhpcy5tb2RlbD10OnRoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX0sbWF4OmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw+dD90aGlzLm1vZGVsPXQ6dGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfSxzdGVwOmZ1bmN0aW9uKCl7dGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfX0sbWV0aG9kczp7X19nZXREcmFnZ2luZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRyZWZzLmhhbmRsZTtyZXR1cm57bGVmdDplLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsd2lkdGg6ZS5vZmZzZXRXaWR0aH19LF9fbW92ZTpmdW5jdGlvbih0KXt2YXIgZT1nZXRQZXJjZW50YWdlKHQsdGhpcy5kcmFnZ2luZyx0aGlzLiRxLmkxOG4ucnRsKTt0aGlzLmN1cnJlbnRQZXJjZW50YWdlPWUsdGhpcy5tb2RlbD1nZXRNb2RlbChlLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpfSxfX2VuZDpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXRoaXMuZHJhZ2dpbmcpO3ZhciBpPWdldFBlcmNlbnRhZ2UodCxlLHRoaXMuJHEuaTE4bi5ydGwpO3RoaXMubW9kZWw9Z2V0TW9kZWwoaSx0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKSx0aGlzLmN1cnJlbnRQZXJjZW50YWdlPSh0aGlzLm1vZGVsLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfSxfX29uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7aWYodGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhlKSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9dGhpcy5jb21wdXRlZERlY2ltYWxzLHM9dC5jdHJsS2V5PzEwKnRoaXMuY29tcHV0ZWRTdGVwOnRoaXMuY29tcHV0ZWRTdGVwLG49WzM3LDQwXS5pbmNsdWRlcyhlKT8tczpzLG89aT9wYXJzZUZsb2F0KCh0aGlzLm1vZGVsK24pLnRvRml4ZWQoaSkpOnRoaXMubW9kZWwrbjt0aGlzLm1vZGVsPWJldHdlZW4obyx0aGlzLm1pbix0aGlzLm1heCksdGhpcy5jdXJyZW50UGVyY2VudGFnZT0odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSx0aGlzLl9fdXBkYXRlKCl9fSxfX29uS2V5VXA6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO3RoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkmJnRoaXMuX191cGRhdGUoITApfSxfX3ZhbGlkYXRlUHJvcHM6ZnVuY3Rpb24oKXt0aGlzLm1pbj49dGhpcy5tYXg/Y29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBtaW4gPj0gbWF4XCIsdGhpcy4kZWwsdGhpcy5taW4sdGhpcy5tYXgpOm5vdERpdmlkZXMoKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKSYmY29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBzdGVwIG11c3QgYmUgYSBkaXZpc29yIG9mIG1heCAtIG1pblwiLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpfSxfX2dldENvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci10cmFjayBhY3RpdmUtdHJhY2tcIixzdHlsZTp7d2lkdGg6dGhpcy5wZXJjZW50YWdlfSxjbGFzczp7XCJuby10cmFuc2l0aW9uXCI6dGhpcy5kcmFnZ2luZyxcImhhbmRsZS1hdC1taW5pbXVtXCI6dGhpcy5tb2RlbD09PXRoaXMubWlufX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1oYW5kbGVcIixzdHlsZTooZT17fSxlW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT10aGlzLnBlcmNlbnRhZ2UsZS5ib3JkZXJSYWRpdXM9dGhpcy5zcXVhcmU/XCIwXCI6XCI1MCVcIixlKSxjbGFzczp7ZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZyxcImhhbmRsZS1hdC1taW5pbXVtXCI6IXRoaXMuZmlsbEhhbmRsZUFsd2F5cyYmdGhpcy5tb2RlbD09PXRoaXMubWlufSxhdHRyczp7dGFiaW5kZXg6dGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wP3RoaXMuZWRpdGFibGU/MDotMTp2b2lkIDB9LG9uOntrZXlkb3duOnRoaXMuX19vbktleURvd24sa2V5dXA6dGhpcy5fX29uS2V5VXB9fSxbdGhpcy5sYWJlbHx8dGhpcy5sYWJlbEFsd2F5cz90KFFDaGlwLHtzdGF0aWNDbGFzczpcInEtc2xpZGVyLWxhYmVsIG5vLXBvaW50ZXItZXZlbnRzXCIsY2xhc3M6e1wibGFiZWwtYWx3YXlzXCI6dGhpcy5sYWJlbEFsd2F5c30scHJvcHM6e3BvaW50aW5nOlwiZG93blwiLHNxdWFyZTohMCxkZW5zZTohMCxjb2xvcjp0aGlzLmxhYmVsQ29sb3J9fSxbdGhpcy5kaXNwbGF5VmFsdWVdKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1yaW5nXCJ9KV0pXX19fTtmdW5jdGlvbiB0aHJvdHRsZSh0LGUpe3ZvaWQgMD09PWUmJihlPTI1MCk7dmFyIGkscz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49W10sbz1hcmd1bWVudHMubGVuZ3RoO28tLTspbltvXT1hcmd1bWVudHNbb107cmV0dXJuIHM/aToocz0hMCxpPXQuYXBwbHkodGhpcyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz0hMX0sZSksaSl9fWZ1bmN0aW9uIGNsb25lKHQpe3ZhciBlPUpTT04uc3RyaW5naWZ5KHQpO2lmKGUpcmV0dXJuIEpTT04ucGFyc2UoZSl9dmFyIFFDb2xvclBpY2tlcj17bmFtZTpcIlFDb2xvclBpY2tlclwiLG1peGluczpbUGFyZW50RmllbGRNaXhpbl0sZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt2YWx1ZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdFZhbHVlOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LGZvcm1hdE1vZGVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYXV0b1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJhdXRvXCIsXCJoZXhcIixcInJnYlwiLFwiaGV4YVwiLFwicmdiYVwiXS5pbmNsdWRlcyh0KX19LGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGRhcms6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt2aWV3OnRoaXMudmFsdWUmJlwic3RyaW5nXCIhPXR5cGVvZiB0aGlzLnZhbHVlP1wicmdiXCI6XCJoZXhcIixtb2RlbDp0aGlzLl9fcGFyc2VNb2RlbCh0aGlzLnZhbHVlfHx0aGlzLmRlZmF1bHRWYWx1ZSl9fSx3YXRjaDp7dmFsdWU6e2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX3BhcnNlTW9kZWwodHx8dGhpcy5kZWZhdWx0VmFsdWUpO2UuaGV4IT09dGhpcy5tb2RlbC5oZXgmJih0aGlzLm1vZGVsPWUpfSxkZWVwOiEwfX0sY29tcHV0ZWQ6e2ZvcmNlSGV4OmZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCI9PT10aGlzLmZvcm1hdE1vZGVsP251bGw6dGhpcy5mb3JtYXRNb2RlbC5pbmRleE9mKFwiaGV4XCIpPi0xfSxmb3JjZUFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCI9PT10aGlzLmZvcm1hdE1vZGVsP251bGw6dGhpcy5mb3JtYXRNb2RlbC5pbmRleE9mKFwiYVwiKT4tMX0saXNIZXg6ZnVuY3Rpb24oKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZX0saXNPdXRwdXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuZm9yY2VIZXg/dGhpcy5mb3JjZUhleDp0aGlzLmlzSGV4fSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSxoYXNBbHBoYTpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5mb3JjZUFscGhhP3RoaXMuZm9yY2VBbHBoYTp0aGlzLmlzSGV4P3RoaXMudmFsdWUudHJpbSgpLmxlbmd0aD43OnRoaXMudmFsdWUmJnZvaWQgMCE9PXRoaXMudmFsdWUuYX0sc3dhdGNoQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOlwicmdiYShcIit0aGlzLm1vZGVsLnIrXCIsXCIrdGhpcy5tb2RlbC5nK1wiLFwiK3RoaXMubW9kZWwuYitcIixcIisodm9pZCAwPT09dGhpcy5tb2RlbC5hPzEwMDp0aGlzLm1vZGVsLmEpLzEwMCtcIilcIn19LHNhdHVyYXRpb25TdHlsZTpmdW5jdGlvbigpe3JldHVybntiYWNrZ3JvdW5kOlwiaHNsKFwiK3RoaXMubW9kZWwuaCtcIiwxMDAlLDUwJSlcIn19LHNhdHVyYXRpb25Qb2ludGVyU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD17dG9wOjEwMS10aGlzLm1vZGVsLnYrXCIlXCJ9KVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5tb2RlbC5zK1wiJVwiLHR9LGlucHV0c0FycmF5OmZ1bmN0aW9uKCl7dmFyIHQ9W1wiclwiLFwiZ1wiLFwiYlwiXTtyZXR1cm4gdGhpcy5oYXNBbHBoYSYmdC5wdXNoKFwiYVwiKSx0fSxfX25lZWRzQm9yZGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX3NhdHVyYXRpb25DaGFuZ2U9dGhyb3R0bGUodGhpcy5fX3NhdHVyYXRpb25DaGFuZ2UsMjApfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yXCIsY2xhc3M6e2Rpc2FibGVkOnRoaXMuZGlzYWJsZSxcInEtY29sb3ItZGFya1wiOnRoaXMuZGFya319LFt0aGlzLl9fZ2V0U2F0dXJhdGlvbih0KSx0aGlzLl9fZ2V0U2xpZGVycyh0KSx0aGlzLl9fZ2V0SW5wdXRzKHQpXSl9LG1ldGhvZHM6e19fZ2V0U2F0dXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtyZWY6XCJzYXR1cmF0aW9uXCIsc3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNhdHVyYXRpb24gbm9uLXNlbGVjdGFibGUgcmVsYXRpdmUtcG9zaXRpb24gb3ZlcmZsb3ctaGlkZGVuIGN1cnNvci1wb2ludGVyXCIsc3R5bGU6dGhpcy5zYXR1cmF0aW9uU3R5bGUsY2xhc3M6e3JlYWRvbmx5OiF0aGlzLmVkaXRhYmxlfSxvbjp0aGlzLmVkaXRhYmxlP3tjbGljazp0aGlzLl9fc2F0dXJhdGlvbkNsaWNrfTpudWxsLGRpcmVjdGl2ZXM6dGhpcy5lZGl0YWJsZT9be25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e21pZ2h0UHJldmVudDohMH0sdmFsdWU6dGhpcy5fX3NhdHVyYXRpb25QYW59XTpudWxsfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3Itc2F0dXJhdGlvbi13aGl0ZSBhYnNvbHV0ZS1mdWxsXCJ9KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1zYXR1cmF0aW9uLWJsYWNrIGFic29sdXRlLWZ1bGxcIn0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZVwiLHN0eWxlOnRoaXMuc2F0dXJhdGlvblBvaW50ZXJTdHlsZX0sW3ZvaWQgMCE9PXRoaXMubW9kZWwuaGV4P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNhdHVyYXRpb24tY2lyY2xlXCJ9KTpudWxsXSldKX0sX19nZXRTbGlkZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNsaWRlcnMgcm93IGl0ZW1zLWNlbnRlclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3Itc3dhdGNoIHEtbXQtc20gcS1tbC1tZCBxLW1iLXNtIG5vbi1zZWxlY3RhYmxlIG92ZXJmbG93LWhpZGRlblwifSxbdChcImRpdlwiLHtzdHlsZTp0aGlzLnN3YXRjaENvbG9yLHN0YXRpY0NsYXNzOlwiZml0XCJ9KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1wYS1zbVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItaHVlIG5vbi1zZWxlY3RhYmxlXCJ9LFt0KFFTbGlkZXIse3Byb3BzOnt2YWx1ZTp0aGlzLm1vZGVsLmgsY29sb3I6XCJ3aGl0ZVwiLG1pbjowLG1heDozNjAsZmlsbEhhbmRsZUFsd2F5czohMCxyZWFkb25seTohdGhpcy5lZGl0YWJsZX0sb246e2lucHV0OnRoaXMuX19vbkh1ZUNoYW5nZSxkcmFnZW5kOmZ1bmN0aW9uKHQpe3JldHVybiBlLl9fb25IdWVDaGFuZ2UodCwhMCl9fX0pXSksdGhpcy5oYXNBbHBoYT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1hbHBoYSBub24tc2VsZWN0YWJsZVwifSxbdChRU2xpZGVyLHtwcm9wczp7dmFsdWU6dGhpcy5tb2RlbC5hLGNvbG9yOlwid2hpdGVcIixtaW46MCxtYXg6MTAwLGZpbGxIYW5kbGVBbHdheXM6ITAscmVhZG9ubHk6IXRoaXMuZWRpdGFibGV9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uTnVtZXJpY0NoYW5nZSh7dGFyZ2V0Ont2YWx1ZTp0fX0sXCJhXCIsMTAwKX0sZHJhZ2VuZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uTnVtZXJpY0NoYW5nZSh7dGFyZ2V0Ont2YWx1ZTp0fX0sXCJhXCIsMTAwLCEwKX19fSldKTpudWxsXSldKX0sX19nZXROdW1lcmljSW5wdXRzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaW5wdXRzQXJyYXkubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPVwiYVwiPT09aT8xMDA6MjU1O3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtY29sb3ItcGFkZGluZ1wifSxbdChcImlucHV0XCIse2F0dHJzOnt0eXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OnMscmVhZG9ubHk6IWUuZWRpdGFibGUsdGFiaW5kZXg6ZS5lZGl0YWJsZT8wOi0xfSxzdGF0aWNDbGFzczpcImZ1bGwtd2lkdGggdGV4dC1jZW50ZXIgcS1uby1pbnB1dC1zcGlubmVyXCIsZG9tUHJvcHM6e3ZhbHVlOnZvaWQgMD09PWUubW9kZWwuaGV4P1wiXCI6TWF0aC5yb3VuZChlLm1vZGVsW2ldKX0sb246e2lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBlLl9fb25OdW1lcmljQ2hhbmdlKHQsaSxzKX0sYmx1cjpmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGl0YWJsZSYmZS5fX29uTnVtZXJpY0NoYW5nZSh0LGkscywhMCl9fX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWxhYmVsIHRleHQtY2VudGVyIHVwcGVyY2FzZVwifSxbaV0pXSl9KX0sX19nZXRJbnB1dHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItaW5wdXRzIHJvdyBpdGVtcy1jZW50ZXIgcS1weC1zbSBxLXBiLXNtXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtbXItc20gcm93IG5vLXdyYXBcIn0sXCJoZXhcIj09PXRoaXMudmlldz9bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSxbdChcImlucHV0XCIse2RvbVByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsLmhleH0sYXR0cnM6e3JlYWRvbmx5OiF0aGlzLmVkaXRhYmxlLHRhYmluZGV4OnRoaXMuZWRpdGFibGU/MDotMX0sb246e2NoYW5nZTp0aGlzLl9fb25IZXhDaGFuZ2UsYmx1cjpmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGl0YWJsZSYmZS5fX29uSGV4Q2hhbmdlKHQsITApfX0sc3RhdGljQ2xhc3M6XCJmdWxsLXdpZHRoIHRleHQtY2VudGVyIHVwcGVyY2FzZVwifSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItbGFiZWwgdGV4dC1jZW50ZXJcIn0sW1wiSEVYXCIrKHRoaXMuaGFzQWxwaGE/XCIgLyBBXCI6XCJcIildKV0pXTp0aGlzLl9fZ2V0TnVtZXJpY0lucHV0cyh0KSksdChcImRpdlwiLFt0KFFCdG4se3Byb3BzOntmbGF0OiEwLGRpc2FibGU6dGhpcy5kaXNhYmxlfSxvbjp7Y2xpY2s6dGhpcy5fX25leHRJbnB1dFZpZXd9LHN0YXRpY0NsYXNzOlwicS1wYS1ub25lXCJ9LFt0KFwic3ZnXCIse2F0dHJzOnt2aWV3Qm94OlwiMCAwIDI0IDI0XCJ9LHN0eWxlOnt3aWR0aDpcIjI0cHhcIixoZWlnaHQ6XCIyNHB4XCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIixkOlwiTTEyLDE4LjE3TDguODMsMTVMNy40MiwxNi40MUwxMiwyMUwxNi41OSwxNi40MUwxNS4xNywxNU0xMiw1LjgzTDE1LjE3LDlMMTYuNTgsNy41OUwxMiwzTDcuNDEsNy41OUw4LjgzLDlMMTIsNS44M1pcIn19KV0pXSldKV0pfSxfX29uU2F0dXJhdGlvbkNoYW5nZTpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcy4kcmVmcy5zYXR1cmF0aW9uO2lmKHMpe3ZhciBuPXMuY2xpZW50V2lkdGgsbz1zLmNsaWVudEhlaWdodCxyPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1NYXRoLm1pbihuLE1hdGgubWF4KDAsdC1yLmxlZnQpKTt0aGlzLiRxLmkxOG4ucnRsJiYoYT1uLWEpO3ZhciBsPU1hdGgubWluKG8sTWF0aC5tYXgoMCxlLXIudG9wKSksYz1NYXRoLnJvdW5kKDEwMCphL24pLGg9TWF0aC5yb3VuZCgxMDAqTWF0aC5tYXgoMCxNYXRoLm1pbigxLC1sL28rMSkpKSx1PWhzdlRvUmdiKHtoOnRoaXMubW9kZWwuaCxzOmMsdjpoLGE6dGhpcy5oYXNBbHBoYT90aGlzLm1vZGVsLmE6dm9pZCAwfSk7dGhpcy5tb2RlbC5zPWMsdGhpcy5tb2RlbC52PWgsdGhpcy5fX3VwZGF0ZSh1LHJnYlRvSGV4KHUpLGkpfX0sX19vbkh1ZUNoYW5nZTpmdW5jdGlvbih0LGUpe3ZhciBpPWhzdlRvUmdiKHtoOnQ9TWF0aC5yb3VuZCh0KSxzOnRoaXMubW9kZWwucyx2OnRoaXMubW9kZWwudixhOnRoaXMuaGFzQWxwaGE/dGhpcy5tb2RlbC5hOnZvaWQgMH0pO3RoaXMubW9kZWwuaD10LHRoaXMuX191cGRhdGUoaSxyZ2JUb0hleChpKSxlKX0sX19vbk51bWVyaWNDaGFuZ2U6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49TnVtYmVyKHQudGFyZ2V0LnZhbHVlKTtpZighaXNOYU4obikpaWYoKG49TWF0aC5mbG9vcihuKSk8MHx8bj5pKXMmJnRoaXMuJGZvcmNlVXBkYXRlKCk7ZWxzZXt2YXIgbz17cjpcInJcIj09PWU/bjp0aGlzLm1vZGVsLnIsZzpcImdcIj09PWU/bjp0aGlzLm1vZGVsLmcsYjpcImJcIj09PWU/bjp0aGlzLm1vZGVsLmIsYTp0aGlzLmhhc0FscGhhP1wiYVwiPT09ZT9uOnRoaXMubW9kZWwuYTp2b2lkIDB9O2lmKFwiYVwiIT09ZSl7dmFyIHI9cmdiVG9Ic3Yobyk7dGhpcy5tb2RlbC5oPXIuaCx0aGlzLm1vZGVsLnM9ci5zLHRoaXMubW9kZWwudj1yLnZ9dGhpcy5fX3VwZGF0ZShvLHJnYlRvSGV4KG8pLHMpfX0sX19vbkhleENoYW5nZTpmdW5jdGlvbih0LGUpe3ZhciBpPXQudGFyZ2V0LnZhbHVlLHM9aS5sZW5ndGgsbj10aGlzLmhhc0FscGhhP1s1LDldOls0LDddO2lmKHM9PT1uWzBdfHxzPT09blsxXSl7dmFyIG89aGV4VG9SZ2IoaSkscj1yZ2JUb0hzdihvKTt0aGlzLm1vZGVsLmg9ci5oLHRoaXMubW9kZWwucz1yLnMsdGhpcy5tb2RlbC52PXIudix0aGlzLl9fdXBkYXRlKG8saSxlKX1lbHNlIGUmJnRoaXMuJGZvcmNlVXBkYXRlKCl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLG49dGhpcy5pc091dHB1dEhleD9lOnQ7dGhpcy5tb2RlbC5oZXg9ZSx0aGlzLm1vZGVsLnI9dC5yLHRoaXMubW9kZWwuZz10LmcsdGhpcy5tb2RlbC5iPXQuYix0aGlzLm1vZGVsLmE9dGhpcy5oYXNBbHBoYT90LmE6dm9pZCAwLHRoaXMuJGVtaXQoXCJpbnB1dFwiLG4pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aSYmSlNPTi5zdHJpbmdpZnkobikhPT1KU09OLnN0cmluZ2lmeShzLnZhbHVlKSYmcy4kZW1pdChcImNoYW5nZVwiLG4pfSl9LF9fbmV4dElucHV0VmlldzpmdW5jdGlvbigpe3RoaXMudmlldz1cImhleFwiPT09dGhpcy52aWV3P1wicmdiYVwiOlwiaGV4XCJ9LF9fcGFyc2VNb2RlbDpmdW5jdGlvbih0KXtpZihudWxsPT09dHx8dm9pZCAwPT09dClyZXR1cm57aDowLHM6MCx2OjAscjowLGc6MCxiOjAsaGV4OnZvaWQgMCxhOjEwMH07dmFyIGU9XCJzdHJpbmdcIj09dHlwZW9mIHQ/aGV4VG9SZ2IodC50cmltKCkpOmNsb25lKHQpO3JldHVybiB0aGlzLmZvcmNlQWxwaGE9PT0odm9pZCAwPT09ZS5hKSYmKGUuYT10aGlzLmZvcmNlQWxwaGE/MTAwOnZvaWQgMCksZS5oZXg9cmdiVG9IZXgoZSksT2JqZWN0LmFzc2lnbih7YToxMDB9LGUscmdiVG9Ic3YoZSkpfSxfX3NhdHVyYXRpb25QYW46ZnVuY3Rpb24odCl7dC5pc0ZpbmFsP3RoaXMuX19kcmFnU3RvcCh0KTp0LmlzRmlyc3Q/dGhpcy5fX2RyYWdTdGFydCh0KTp0aGlzLl9fZHJhZ01vdmUodCl9LF9fZHJhZ1N0YXJ0OmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQuZXZ0KSx0aGlzLnNhdHVyYXRpb25EcmFnZ2luZz0hMCx0aGlzLl9fc2F0dXJhdGlvbkNoYW5nZSh0KX0sX19kcmFnTW92ZTpmdW5jdGlvbih0KXt0aGlzLnNhdHVyYXRpb25EcmFnZ2luZyYmKHN0b3BBbmRQcmV2ZW50KHQuZXZ0KSx0aGlzLl9fc2F0dXJhdGlvbkNoYW5nZSh0KSl9LF9fZHJhZ1N0b3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztzdG9wQW5kUHJldmVudCh0LmV2dCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc2F0dXJhdGlvbkRyYWdnaW5nPSExfSwxMDApLHRoaXMuX19vblNhdHVyYXRpb25DaGFuZ2UodC5wb3NpdGlvbi5sZWZ0LHQucG9zaXRpb24udG9wLCEwKX0sX19zYXR1cmF0aW9uQ2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMuX19vblNhdHVyYXRpb25DaGFuZ2UodC5wb3NpdGlvbi5sZWZ0LHQucG9zaXRpb24udG9wKX0sX19zYXR1cmF0aW9uQ2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5zYXR1cmF0aW9uRHJhZ2dpbmd8fHRoaXMuX19vblNhdHVyYXRpb25DaGFuZ2UodC5wYWdlWC13aW5kb3cucGFnZVhPZmZzZXQsdC5wYWdlWS13aW5kb3cucGFnZVlPZmZzZXQsITApfX19LGNvbnRlbnRDc3M9e21heFdpZHRoOlwiOTV2d1wiLG1heEhlaWdodDpcIjk4dmhcIn0sUUNvbG9yPXtuYW1lOlwiUUNvbG9yXCIsbWl4aW5zOltGcmFtZU1peGluLERpc3BsYXlNb2RlTWl4aW5dLHByb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxkZWZhdWx0VmFsdWU6e3R5cGU6W1N0cmluZyxPYmplY3RdLGRlZmF1bHQ6bnVsbH0sZm9ybWF0TW9kZWw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJhdXRvXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImF1dG9cIixcImhleFwiLFwicmdiXCIsXCJoZXhhXCIsXCJyZ2JhXCJdLmluY2x1ZGVzKHQpfX0sZGlzcGxheVZhbHVlOlN0cmluZyxva0xhYmVsOlN0cmluZyxjYW5jZWxMYWJlbDpTdHJpbmd9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXshdGhpcy5kaXNhYmxlJiZ0aGlzLmlzUG9wb3ZlciYmKHRoaXMubW9kZWw9Y2xvbmUodCkpfX0sZGF0YTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaXNQb3BvdmVyP3t9Ont0cmFuc2l0aW9uOlwicS1tb2RhbFwifTtyZXR1cm4gdC5mb2N1c2VkPSExLHQubW9kZWw9Y2xvbmUodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUpLHR9LGNvbXB1dGVkOnthY3R1YWxWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXlWYWx1ZT90aGlzLmRpc3BsYXlWYWx1ZTp0aGlzLnZhbHVlP1wic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3RoaXMudmFsdWU6XCJyZ2JcIisodm9pZCAwIT09dGhpcy52YWx1ZS5hP1wiYVwiOlwiXCIpK1wiKFwiK3RoaXMudmFsdWUucitcIixcIit0aGlzLnZhbHVlLmcrXCIsXCIrdGhpcy52YWx1ZS5iKyh2b2lkIDAhPT10aGlzLnZhbHVlLmE/XCIsXCIrdGhpcy52YWx1ZS5hLzEwMDpcIlwiKStcIilcIjpcIlwifSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP3RoaXMuZGVmYXVsdFZhbHVlOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJkpTT04uc3RyaW5naWZ5KHRoaXMuY29tcHV0ZWRDbGVhclZhbHVlKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpfSxtb2RhbEJ0bkNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sb3J9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLnBvcHVwJiZ0aGlzW3RoaXMuJHJlZnMucG9wdXAuc2hvd2luZz9cImhpZGVcIjpcInNob3dcIl0oKX0sc2hvdzpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGUpcmV0dXJuIHRoaXMuX19zZXRNb2RlbCh0aGlzLnZhbHVlfHx0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy4kcmVmcy5wb3B1cC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5wb3B1cD90aGlzLiRyZWZzLnBvcHVwLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0sX19oYW5kbGVLZXlEb3duOmZ1bmN0aW9uKHQpe3N3aXRjaChnZXRFdmVudEtleSh0KSl7Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBzdG9wQW5kUHJldmVudCh0KSx0aGlzLnNob3coKTtjYXNlIDg6dGhpcy5pc0NsZWFyYWJsZSYmdGhpcy5jbGVhcigpfX0sX19vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHx0aGlzLmZvY3VzZWR8fCh0aGlzLm1vZGVsPWNsb25lKHRoaXMudmFsdWV8fHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kZW1pdChcImZvY3VzXCIpKX0sX19vbkJsdXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmZvY3VzZWQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UuJHJlZnMucG9wdXAmJmUuJHJlZnMucG9wdXAuc2hvd2luZyYmKHQ9PT1kb2N1bWVudC5ib2R5fHxlLiRyZWZzLnBvcHVwLiRlbC5jb250YWlucyh0KSl8fChlLl9fb25IaWRlKCksZS5oaWRlKCkpfSwxKX0sX19vbkhpZGU6ZnVuY3Rpb24odCxlKXsodHx8dGhpcy5pc1BvcG92ZXIpJiZ0aGlzLl9fdXBkYXRlKHQpLHRoaXMuZm9jdXNlZCYmKGU/dGhpcy4kZWwuZm9jdXMoKToodGhpcy4kZW1pdChcImJsdXJcIiksdGhpcy5mb2N1c2VkPSExKSl9LF9fc2V0TW9kZWw6ZnVuY3Rpb24odCxlKXt0aGlzLm1vZGVsPWNsb25lKHQpLChlfHx0aGlzLmlzUG9wb3ZlcikmJnRoaXMuX191cGRhdGUoZSl9LF9faGFzTW9kZWxDaGFuZ2VkOmZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLl9faGFzTW9kZWxDaGFuZ2VkKCkmJihlLiRlbWl0KFwiaW5wdXRcIixlLm1vZGVsKSx0JiZlLiRlbWl0KFwiY2hhbmdlXCIsZS5tb2RlbCkpfSl9LF9fZ2V0UGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPVt0KFFDb2xvclBpY2tlcix7c3RhdGljQ2xhc3M6XCJuby1ib3JkZXJcIisoZT9cIiBmdWxsLXdpZHRoXCI6XCJcIikscHJvcHM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRhdHRycyx7dmFsdWU6dGhpcy5tb2RlbCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGZvcm1hdE1vZGVsOnRoaXMuZm9ybWF0TW9kZWwsZGFyazp0aGlzLmRhcmssbm9QYXJlbnRGaWVsZDohMH0pLG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gaS4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gaS5fX3NldE1vZGVsKHQpfSl9fX0pXTtyZXR1cm4gZSYmcy5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1idXR0b25zIG1vZGFsLWJ1dHRvbnMtdG9wIHJvdyBmdWxsLXdpZHRoXCIsY2xhc3M6dGhpcy5kYXJrP1wiYmctYmxhY2tcIjpudWxsfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSksdChRQnRuLHtwcm9wczp7Y29sb3I6dGhpcy5tb2RhbEJ0bkNvbG9yLGZsYXQ6ITAsbGFiZWw6dGhpcy5jYW5jZWxMYWJlbHx8dGhpcy4kcS5pMThuLmxhYmVsLmNhbmNlbCxub1JpcHBsZTohMH0sb246e2NsaWNrOmZ1bmN0aW9uKCl7aS5fX29uSGlkZSghMSwhMCksaS5oaWRlKCl9fX0pLHRoaXMuZWRpdGFibGU/dChRQnRuLHtwcm9wczp7Y29sb3I6dGhpcy5tb2RhbEJ0bkNvbG9yLGZsYXQ6ITAsbGFiZWw6dGhpcy5va0xhYmVsfHx0aGlzLiRxLmkxOG4ubGFiZWwuc2V0LG5vUmlwcGxlOiEwLGRpc2FibGU6IXRoaXMubW9kZWx9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkhpZGUoITAsITApLGkuaGlkZSgpfX19KTpudWxsXSkpLHN9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXRGcmFtZSx7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZHx8dGhpcy4kcmVmcy5wb3B1cCYmdGhpcy4kcmVmcy5wb3B1cC5zaG93aW5nLGZvY3VzYWJsZTohMCxsZW5ndGg6dGhpcy5hY3R1YWxWYWx1ZS5sZW5ndGh9LG5hdGl2ZU9uOntjbGljazp0aGlzLnRvZ2dsZSxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbkJsdXIsa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5mYWtlSW5wdXRDbGFzc2VzfSxbdGhpcy5mYWtlSW5wdXRWYWx1ZV0pLHRoaXMuaXNQb3BvdmVyP3QoUVBvcG92ZXIse3JlZjpcInBvcHVwXCIscHJvcHM6e2NvdmVyOiEwLGtlZXBPblNjcmVlbjohMCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6XCIxMDB2aFwifSxzbG90OlwiYWZ0ZXJcIixvbjp7c2hvdzp0aGlzLl9fb25Gb2N1cyxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITAsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCkpOnQoUU1vZGFsLHtyZWY6XCJwb3B1cFwiLHN0YXRpY0NsYXNzOlwid2l0aC1iYWNrZHJvcFwiLHByb3BzOntjb250ZW50Q3NzOmNvbnRlbnRDc3MsbWluaW1pemVkOiEwLHBvc2l0aW9uOm51bGwsdHJhbnNpdGlvbjp0aGlzLnRyYW5zaXRpb259LG9uOntkaXNtaXNzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITEsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCwhMCkpLHRoaXMuaXNDbGVhcmFibGU/dChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOntjbGljazp0aGlzLmNsZWFyfSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSk6bnVsbCx0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXQuZHJvcGRvd259LHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCJ9KV0pfX0sUUNvbnRleHRNZW51PXtuYW1lOlwiUUNvbnRleHRNZW51XCIscHJvcHM6e2Rpc2FibGU6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb2JpbGU6dGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGV9fSxtZXRob2RzOntoaWRlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuJHJlZnMucG9wdXApcmV0dXJuIHRoaXMubW9iaWxlJiZ0aGlzLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwibm9uLXNlbGVjdGFibGVcIiksdGhpcy4kcmVmcy5wb3B1cC5oaWRlKHQpfSxzaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5kaXNhYmxlfHwodGhpcy5tb2JpbGU/dGhpcy4kcmVmcy5wb3B1cCYmKHRoaXMuZXZlbnQ9dCx0aGlzLiRyZWZzLnBvcHVwLnNob3codCkpOnQmJihzdG9wQW5kUHJldmVudCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS4kcmVmcy5wb3B1cCYmKGUuZXZlbnQ9dCxlLiRyZWZzLnBvcHVwLnNob3codCkpfSwxMDApKSl9LF9fZGVza3RvcEJvZHlIaWRlOmZ1bmN0aW9uKHQpe3RoaXMuJGVsLmNvbnRhaW5zKHQudGFyZ2V0KXx8dGhpcy5oaWRlKHQpfSxfX2Rlc2t0b3BPblNob3c6ZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLHRoaXMuX19kZXNrdG9wQm9keUhpZGUsITApLGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fX2Rlc2t0b3BCb2R5SGlkZSwhMCksdGhpcy4kZW1pdChcInNob3dcIix0aGlzLmV2ZW50KX0sX19kZXNrdG9wT25IaWRlOmZ1bmN0aW9uKHQpe2RvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsdGhpcy5fX2Rlc2t0b3BCb2R5SGlkZSwhMCksZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLl9fZGVza3RvcEJvZHlIaWRlLCEwKSx0aGlzLiRlbWl0KFwiaGlkZVwiLHRoaXMuZXZlbnQsdCl9LF9fbW9iaWxlVG91Y2hTdGFydEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9fbW9iaWxlQ2xlYW51cCgpLHQmJnQudG91Y2hlcyYmdC50b3VjaGVzLmxlbmd0aD4xfHwodGhpcy50YXJnZXQuY2xhc3NMaXN0LmFkZChcIm5vbi1zZWxlY3RhYmxlXCIpLHRoaXMudG91Y2hUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dCYmc3RvcEFuZFByZXZlbnQodCksZS5fX21vYmlsZUNsZWFudXAoKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5zaG93KHQpfSwxMCl9LDYwMCkpfSxfX21vYmlsZUNsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwibm9uLXNlbGVjdGFibGVcIiksY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lcil9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5tb2JpbGU/dChRTW9kYWwse3JlZjpcInBvcHVwXCIscHJvcHM6e21pbmltaXplZDohMH0sb246e3Nob3c6ZnVuY3Rpb24oKXtlLiRlbWl0KFwic2hvd1wiLGUuZXZlbnQpfSxoaWRlOmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJoaWRlXCIsZS5ldmVudCx0KX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KTp0KFFQb3BvdmVyLHtyZWY6XCJwb3B1cFwiLHByb3BzOnthbmNob3JDbGljazohMSx0b3VjaFBvc2l0aW9uOiEwfSxvbjp7c2hvdzp0aGlzLl9fZGVza3RvcE9uU2hvdyxoaWRlOnRoaXMuX19kZXNrdG9wT25IaWRlfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubW9iaWxlP3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC50YXJnZXQ9dC4kZWwucGFyZW50Tm9kZSx0LnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHQuX19tb2JpbGVUb3VjaFN0YXJ0SGFuZGxlciksW1widG91Y2hjYW5jZWxcIixcInRvdWNobW92ZVwiLFwidG91Y2hlbmRcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUsdC5fX21vYmlsZUNsZWFudXApfSl9KToodGhpcy50YXJnZXQ9dGhpcy4kZWwucGFyZW50Tm9kZSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIix0aGlzLnNob3cpKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5tb2JpbGU/KHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fX21vYmlsZVRvdWNoU3RhcnRIYW5kbGVyKSxbXCJ0b3VjaGNhbmNlbFwiLFwidG91Y2htb3ZlXCIsXCJ0b3VjaGVuZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0Ll9fbW9iaWxlQ2xlYW51cCl9KSk6dGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsdGhpcy5zaG93KX19LG1vZGVsVmFsaWRhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09dHx8XCJudW1iZXJcIj09PWV8fFwic3RyaW5nXCI9PT1lfHxpc0RhdGUodCl9LGlubGluZT17dmFsdWU6e3ZhbGlkYXRvcjptb2RlbFZhbGlkYXRvcixyZXF1aXJlZDohMH0sZGVmYXVsdFZhbHVlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdLGRlZmF1bHQ6bnVsbH0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRhdGVcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiZGF0ZVwiLFwidGltZVwiLFwiZGF0ZXRpbWVcIl0uaW5jbHVkZXModCl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sZGFyazpCb29sZWFuLG1pbjp7dmFsaWRhdG9yOm1vZGVsVmFsaWRhdG9yLGRlZmF1bHQ6bnVsbH0sbWF4Ont2YWxpZGF0b3I6bW9kZWxWYWxpZGF0b3IsZGVmYXVsdDpudWxsfSxoZWFkZXJMYWJlbDpTdHJpbmcsZmlyc3REYXlPZldlZWs6TnVtYmVyLGZvcm1hdE1vZGVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYXV0b1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJhdXRvXCIsXCJkYXRlXCIsXCJudW1iZXJcIixcInN0cmluZ1wiXS5pbmNsdWRlcyh0KX19LGZvcm1hdDI0aDp7dHlwZTpbQm9vbGVhbixOdW1iZXJdLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuWyEwLCExLDBdLmluY2x1ZGVzKHQpfX0sZGVmYXVsdFZpZXc6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5XCIsXCJob3VyXCIsXCJtaW51dGVcIl0uaW5jbHVkZXModCl9fSxtaW5pbWFsOkJvb2xlYW59LGlucHV0PXtmb3JtYXQ6U3RyaW5nLG9rTGFiZWw6U3RyaW5nLGNhbmNlbExhYmVsOlN0cmluZyxkaXNwbGF5VmFsdWU6U3RyaW5nfSxNSUxMSVNFQ09ORFNfSU5fREFZPTg2NGU1LE1JTExJU0VDT05EU19JTl9IT1VSPTM2ZTUsTUlMTElTRUNPTkRTX0lOX01JTlVURT02ZTQsdG9rZW49L1xcWygoPzpbXlxcXVxcXFxdfFxcXFxdfFxcXFwpKilcXF18ZHsxLDR9fE17MSw0fXxtezEsMn18d3sxLDJ9fFFvfERvfER7MSw0fXxZWSg/OllZKT98SHsxLDJ9fGh7MSwyfXxzezEsMn18U3sxLDN9fFp7MSwyfXxhezEsMn18W0FRRXhYXS9nLHJlTXlTUUxEYXRlVGltZVN0cj0vXlswLTldezR9LVswLTldezJ9LVswLTldezJ9IFswLTldezJ9OlswLTldezJ9OlswLTldezJ9KC5bMC05XXs2fSk/JC87ZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUodCxlKXt2b2lkIDA9PT1lJiYoZT1cIlwiKTt2YXIgaT10PjA/XCItXCI6XCIrXCIscz1NYXRoLmFicyh0KSxuPXMlNjA7cmV0dXJuIGkrcGFkKE1hdGguZmxvb3Iocy82MCkpK2UrcGFkKG4pfWZ1bmN0aW9uIHNldE1vbnRoKHQsZSl7dmFyIGk9bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLGUsMCwwLDAsMCwwKS5nZXREYXRlKCk7dC5zZXRNb250aChlLTEsTWF0aC5taW4oaSx0LmdldERhdGUoKSkpfWZ1bmN0aW9uIGJ1aWxkRGF0ZVZhbCh0KXtyZXR1cm4gbmV3IERhdGUoaXNTdHJpbmcodCkmJm51bGwhPT1yZU15U1FMRGF0ZVRpbWVTdHIuZXhlYyh0KT90LnN1YnN0cmluZygwLDIzKS5yZXBsYWNlKFwiIFwiLFwiVFwiKTp0KX1mdW5jdGlvbiBnZXRDaGFuZ2UodCxlLGkpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPWk/MTotMTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtpZihcIm1vbnRoXCIhPT10KXt2YXIgaT1cInllYXJcIj09PXQ/XCJGdWxsWWVhclwiOmNhcGl0YWxpemUoXCJkYXlzXCI9PT10P1wiZGF0ZVwiOnQpO3NbXCJzZXRcIitpXShzW1wiZ2V0XCIraV0oKStuKmVbdF0pfWVsc2Ugc2V0TW9udGgocyxzLmdldE1vbnRoKCkrMStuKmUubW9udGgpfSksc31mdW5jdGlvbiBpc1ZhbGlkKHQpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiEwO3ZhciBlPURhdGUucGFyc2UodCk7cmV0dXJuITE9PT1pc05hTihlKX1mdW5jdGlvbiBidWlsZERhdGUodCxlKXtyZXR1cm4gYWRqdXN0RGF0ZShuZXcgRGF0ZSx0LGUpfWZ1bmN0aW9uIGdldERheU9mV2Vlayh0KXt2YXIgZT1idWlsZERhdGVWYWwodCkuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBnZXRXZWVrT2ZZZWFyKHQpe3ZhciBlPW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpO2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs2KSU3KzMpO3ZhciBpPW5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDQpO2kuc2V0RGF0ZShpLmdldERhdGUoKS0oaS5nZXREYXkoKSs2KSU3KzMpO3ZhciBzPWUuZ2V0VGltZXpvbmVPZmZzZXQoKS1pLmdldFRpbWV6b25lT2Zmc2V0KCk7ZS5zZXRIb3VycyhlLmdldEhvdXJzKCktcyk7dmFyIG49KGUtaSkvKDcqTUlMTElTRUNPTkRTX0lOX0RBWSk7cmV0dXJuIDErTWF0aC5mbG9vcihuKX1mdW5jdGlvbiBpc0JldHdlZW5EYXRlcyh0LGUsaSxzKXt2b2lkIDA9PT1zJiYocz17fSk7dmFyIG49YnVpbGREYXRlVmFsKGUpLmdldFRpbWUoKSxvPWJ1aWxkRGF0ZVZhbChpKS5nZXRUaW1lKCkscj1idWlsZERhdGVWYWwodCkuZ2V0VGltZSgpO3JldHVybiBzLmluY2x1c2l2ZUZyb20mJm4tLSxzLmluY2x1c2l2ZVRvJiZvKysscj5uJiZyPG99ZnVuY3Rpb24gYWRkVG9EYXRlKHQsZSl7cmV0dXJuIGdldENoYW5nZSh0LGUsITApfWZ1bmN0aW9uIHN1YnRyYWN0RnJvbURhdGUodCxlKXtyZXR1cm4gZ2V0Q2hhbmdlKHQsZSwhMSl9ZnVuY3Rpb24gYWRqdXN0RGF0ZSh0LGUsaSl7dmFyIHM9YnVpbGREYXRlVmFsKHQpLG49XCJzZXRcIisoaT9cIlVUQ1wiOlwiXCIpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKFwibW9udGhcIiE9PXQpe3ZhciBpPVwieWVhclwiPT09dD9cIkZ1bGxZZWFyXCI6dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3NbXCJcIituK2ldKGVbdF0pfWVsc2Ugc2V0TW9udGgocyxlLm1vbnRoKX0pLHN9ZnVuY3Rpb24gc3RhcnRPZkRhdGUodCxlKXt2YXIgaT1idWlsZERhdGVWYWwodCk7c3dpdGNoKGUpe2Nhc2VcInllYXJcIjppLnNldE1vbnRoKDApO2Nhc2VcIm1vbnRoXCI6aS5zZXREYXRlKDEpO2Nhc2VcImRheVwiOmkuc2V0SG91cnMoMCk7Y2FzZVwiaG91clwiOmkuc2V0TWludXRlcygwKTtjYXNlXCJtaW51dGVcIjppLnNldFNlY29uZHMoMCk7Y2FzZVwic2Vjb25kXCI6aS5zZXRNaWxsaXNlY29uZHMoMCl9cmV0dXJuIGl9ZnVuY3Rpb24gZW5kT2ZEYXRlKHQsZSl7dmFyIGk9YnVpbGREYXRlVmFsKHQpO3N3aXRjaChlKXtjYXNlXCJ5ZWFyXCI6aS5zZXRNb250aCgxMSk7Y2FzZVwibW9udGhcIjppLnNldERhdGUoZGF5c0luTW9udGgodCkpO2Nhc2VcImRheVwiOmkuc2V0SG91cnMoMjMpO2Nhc2VcImhvdXJcIjppLnNldE1pbnV0ZXMoNTkpO2Nhc2VcIm1pbnV0ZVwiOmkuc2V0U2Vjb25kcyg1OSk7Y2FzZVwic2Vjb25kXCI6aS5zZXRNaWxsaXNlY29uZHMoNTkpfXJldHVybiBpfWZ1bmN0aW9uIGdldE1heERhdGUodCl7Zm9yKHZhciBlPVtdLGk9YXJndW1lbnRzLmxlbmd0aC0xO2ktLSA+MDspZVtpXT1hcmd1bWVudHNbaSsxXTt2YXIgcz1idWlsZERhdGVWYWwodCk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih0KXtzPU1hdGgubWF4KHMsYnVpbGREYXRlVmFsKHQpKX0pLHN9ZnVuY3Rpb24gZ2V0TWluRGF0ZSh0KXtmb3IodmFyIGU9W10saT1hcmd1bWVudHMubGVuZ3RoLTE7aS0tID4wOyllW2ldPWFyZ3VtZW50c1tpKzFdO3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3M9TWF0aC5taW4ocyxidWlsZERhdGVWYWwodCkpfSksc31mdW5jdGlvbiBnZXREaWZmKHQsZSxpKXtyZXR1cm4odC5nZXRUaW1lKCktdC5nZXRUaW1lem9uZU9mZnNldCgpKk1JTExJU0VDT05EU19JTl9NSU5VVEUtKGUuZ2V0VGltZSgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSpNSUxMSVNFQ09ORFNfSU5fTUlOVVRFKSkvaX1mdW5jdGlvbiBnZXREYXRlRGlmZih0LGUsaSl7dm9pZCAwPT09aSYmKGk9XCJkYXlzXCIpO3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPWJ1aWxkRGF0ZVZhbChlKTtzd2l0Y2goaSl7Y2FzZVwieWVhcnNcIjpyZXR1cm4gcy5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKTtjYXNlXCJtb250aHNcIjpyZXR1cm4gMTIqKHMuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCkpK3MuZ2V0TW9udGgoKS1uLmdldE1vbnRoKCk7Y2FzZVwiZGF5c1wiOnJldHVybiBnZXREaWZmKHN0YXJ0T2ZEYXRlKHMsXCJkYXlcIiksc3RhcnRPZkRhdGUobixcImRheVwiKSxNSUxMSVNFQ09ORFNfSU5fREFZKTtjYXNlXCJob3Vyc1wiOnJldHVybiBnZXREaWZmKHN0YXJ0T2ZEYXRlKHMsXCJob3VyXCIpLHN0YXJ0T2ZEYXRlKG4sXCJob3VyXCIpLE1JTExJU0VDT05EU19JTl9IT1VSKTtjYXNlXCJtaW51dGVzXCI6cmV0dXJuIGdldERpZmYoc3RhcnRPZkRhdGUocyxcIm1pbnV0ZVwiKSxzdGFydE9mRGF0ZShuLFwibWludXRlXCIpLE1JTExJU0VDT05EU19JTl9NSU5VVEUpO2Nhc2VcInNlY29uZHNcIjpyZXR1cm4gZ2V0RGlmZihzdGFydE9mRGF0ZShzLFwic2Vjb25kXCIpLHN0YXJ0T2ZEYXRlKG4sXCJzZWNvbmRcIiksMWUzKX19ZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKHQpe3JldHVybiBnZXREYXRlRGlmZih0LHN0YXJ0T2ZEYXRlKHQsXCJ5ZWFyXCIpLFwiZGF5c1wiKSsxfWZ1bmN0aW9uIGluZmVyRGF0ZUZvcm1hdCh0KXtyZXR1cm4gaXNEYXRlKHQpP1wiZGF0ZVwiOlwibnVtYmVyXCI9PXR5cGVvZiB0P1wibnVtYmVyXCI6XCJzdHJpbmdcIn1mdW5jdGlvbiBjb252ZXJ0RGF0ZVRvRm9ybWF0KHQsZSxpKXtpZih0fHwwPT09dClzd2l0Y2goZSl7Y2FzZVwiZGF0ZVwiOnJldHVybiB0O2Nhc2VcIm51bWJlclwiOnJldHVybiB0LmdldFRpbWUoKTtkZWZhdWx0OnJldHVybiBmb3JtYXREYXRlKHQsaSl9fWZ1bmN0aW9uIGdldERhdGVCZXR3ZWVuKHQsZSxpKXt2YXIgcz1idWlsZERhdGVWYWwodCk7aWYoZSl7dmFyIG49YnVpbGREYXRlVmFsKGUpO2lmKHM8bilyZXR1cm4gbn1pZihpKXt2YXIgbz1idWlsZERhdGVWYWwoaSk7aWYocz5vKXJldHVybiBvfXJldHVybiBzfWZ1bmN0aW9uIGlzU2FtZURhdGUodCxlLGkpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPWJ1aWxkRGF0ZVZhbChlKTtpZih2b2lkIDA9PT1pKXJldHVybiBzLmdldFRpbWUoKT09PW4uZ2V0VGltZSgpO3N3aXRjaChpKXtjYXNlXCJzZWNvbmRcIjppZihzLmdldFNlY29uZHMoKSE9PW4uZ2V0U2Vjb25kcygpKXJldHVybiExO2Nhc2VcIm1pbnV0ZVwiOmlmKHMuZ2V0TWludXRlcygpIT09bi5nZXRNaW51dGVzKCkpcmV0dXJuITE7Y2FzZVwiaG91clwiOmlmKHMuZ2V0SG91cnMoKSE9PW4uZ2V0SG91cnMoKSlyZXR1cm4hMTtjYXNlXCJkYXlcIjppZihzLmdldERhdGUoKSE9PW4uZ2V0RGF0ZSgpKXJldHVybiExO2Nhc2VcIm1vbnRoXCI6aWYocy5nZXRNb250aCgpIT09bi5nZXRNb250aCgpKXJldHVybiExO2Nhc2VcInllYXJcIjppZihzLmdldEZ1bGxZZWFyKCkhPT1uLmdldEZ1bGxZZWFyKCkpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJkYXRlIGlzU2FtZURhdGUgdW5rbm93biB1bml0IFwiK2kpfXJldHVybiEwfWZ1bmN0aW9uIGRheXNJbk1vbnRoKHQpe3JldHVybiBuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsMCkuZ2V0RGF0ZSgpfWZ1bmN0aW9uIGdldE9yZGluYWwodCl7aWYodD49MTEmJnQ8PTEzKXJldHVybiB0K1widGhcIjtzd2l0Y2godCUxMCl7Y2FzZSAxOnJldHVybiB0K1wic3RcIjtjYXNlIDI6cmV0dXJuIHQrXCJuZFwiO2Nhc2UgMzpyZXR1cm4gdCtcInJkXCJ9cmV0dXJuIHQrXCJ0aFwifXZhciBmb3JtYXR0ZXI9e1lZOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXRGdWxsWWVhcigpLDQpLnN1YnN0cigyKX0sWVlZWTpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0RnVsbFllYXIoKSw0KX0sTTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpKzF9LE1NOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXRNb250aCgpKzEpfSxNTU06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLm1vbnRoTmFtZXNTaG9ydHx8aTE4bi5sYW5nLmRhdGUubW9udGhzU2hvcnQpW3QuZ2V0TW9udGgoKV19LE1NTU06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLm1vbnRoTmFtZXN8fGkxOG4ubGFuZy5kYXRlLm1vbnRocylbdC5nZXRNb250aCgpXX0sUTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKCh0LmdldE1vbnRoKCkrMSkvMyl9LFFvOmZ1bmN0aW9uKHQpe3JldHVybiBnZXRPcmRpbmFsKHRoaXMuUSh0KSl9LEQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpfSxEbzpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0T3JkaW5hbCh0LmdldERhdGUoKSl9LEREOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXREYXRlKCkpfSxEREQ6ZnVuY3Rpb24odCl7cmV0dXJuIGdldERheU9mWWVhcih0KX0sRERERDpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKGdldERheU9mWWVhcih0KSwzKX0sZDpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGRkZCh0KS5zbGljZSgwLDIpfSxkZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLmRheU5hbWVzU2hvcnR8fGkxOG4ubGFuZy5kYXRlLmRheXNTaG9ydClbdC5nZXREYXkoKV19LGRkZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLmRheU5hbWVzfHxpMThuLmxhbmcuZGF0ZS5kYXlzKVt0LmdldERheSgpXX0sRTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKXx8N30sdzpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0V2Vla09mWWVhcih0KX0sd3c6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZChnZXRXZWVrT2ZZZWFyKHQpKX0sSDpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSxISDpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0SG91cnMoKSl9LGg6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRIb3VycygpO3JldHVybiAwPT09ZT8xMjplPjEyP2UlMTI6ZX0saGg6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0aGlzLmgodCkpfSxtOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0sbW06ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldE1pbnV0ZXMoKSl9LHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSxzczpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0U2Vjb25kcygpKX0sUzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5mbG9vcih0LmdldE1pbGxpc2Vjb25kcygpLzEwMCl9LFNTOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQoTWF0aC5mbG9vcih0LmdldE1pbGxpc2Vjb25kcygpLzEwKSl9LFNTUzpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0TWlsbGlzZWNvbmRzKCksMyl9LEE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuSCh0KTwxMj9cIkFNXCI6XCJQTVwifSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkgodCk8MTI/XCJhbVwiOlwicG1cIn0sYWE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuSCh0KTwxMj9cImEubS5cIjpcInAubS5cIn0sWjpmdW5jdGlvbih0KXtyZXR1cm4gZm9ybWF0VGltZXpvbmUodC5nZXRUaW1lem9uZU9mZnNldCgpLFwiOlwiKX0sWlo6ZnVuY3Rpb24odCl7cmV0dXJuIGZvcm1hdFRpbWV6b25lKHQuZ2V0VGltZXpvbmVPZmZzZXQoKSl9LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC5nZXRUaW1lKCkvMWUzKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRUaW1lKCl9fTtmdW5jdGlvbiBmb3JtYXREYXRlKHQsZSxpKXtpZih2b2lkIDA9PT1lJiYoZT1cIllZWVktTU0tRERUSEg6bW06c3MuU1NTWlwiKSwwPT09dHx8dCl7dmFyIHM9YnVpbGREYXRlVmFsKHQpO3JldHVybiBlLnJlcGxhY2UodG9rZW4sZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbiBmb3JtYXR0ZXI/Zm9ybWF0dGVyW3RdKHMsaSk6dm9pZCAwPT09ZT90OmUuc3BsaXQoXCJcXFxcXVwiKS5qb2luKFwiXVwiKX0pfX1mdW5jdGlvbiBtYXRjaEZvcm1hdCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJcIiksdC5tYXRjaCh0b2tlbil9ZnVuY3Rpb24gY2xvbmUkMSh0KXtyZXR1cm4gaXNEYXRlKHQpP25ldyBEYXRlKHQuZ2V0VGltZSgpKTp0fXZhciBkYXRlPXtpc1ZhbGlkOmlzVmFsaWQsYnVpbGREYXRlOmJ1aWxkRGF0ZSxnZXREYXlPZldlZWs6Z2V0RGF5T2ZXZWVrLGdldFdlZWtPZlllYXI6Z2V0V2Vla09mWWVhcixpc0JldHdlZW5EYXRlczppc0JldHdlZW5EYXRlcyxhZGRUb0RhdGU6YWRkVG9EYXRlLHN1YnRyYWN0RnJvbURhdGU6c3VidHJhY3RGcm9tRGF0ZSxhZGp1c3REYXRlOmFkanVzdERhdGUsc3RhcnRPZkRhdGU6c3RhcnRPZkRhdGUsZW5kT2ZEYXRlOmVuZE9mRGF0ZSxnZXRNYXhEYXRlOmdldE1heERhdGUsZ2V0TWluRGF0ZTpnZXRNaW5EYXRlLGdldERhdGVEaWZmOmdldERhdGVEaWZmLGdldERheU9mWWVhcjpnZXREYXlPZlllYXIsaW5mZXJEYXRlRm9ybWF0OmluZmVyRGF0ZUZvcm1hdCxjb252ZXJ0RGF0ZVRvRm9ybWF0OmNvbnZlcnREYXRlVG9Gb3JtYXQsZ2V0RGF0ZUJldHdlZW46Z2V0RGF0ZUJldHdlZW4saXNTYW1lRGF0ZTppc1NhbWVEYXRlLGRheXNJbk1vbnRoOmRheXNJbk1vbnRoLGZvcm1hdHRlcjpmb3JtYXR0ZXIsZm9ybWF0RGF0ZTpmb3JtYXREYXRlLG1hdGNoRm9ybWF0Om1hdGNoRm9ybWF0LGNsb25lOmNsb25lJDF9LHJlRGF0ZT0vXlxcZHs0fVteXFxkXVxcZHsyfVteXFxkXVxcZHsyfS8sRGF0ZU1peGluPXtwcm9wczppbmxpbmUsY29tcHV0ZWQ6e2NvbXB1dGVkVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cImRhdGVcIj09PXRoaXMudHlwZSYmXCJzdHJpbmdcIj09PXRoaXMuZm9ybWF0TW9kZWwmJnJlRGF0ZS50ZXN0KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuc2xpY2UoMCwxMCkuc3BsaXQoL1teXFxkXS8pLmpvaW4oXCIvXCIpOnRoaXMudmFsdWV9LGNvbXB1dGVkRGVmYXVsdFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJkYXRlXCI9PT10aGlzLnR5cGUmJlwic3RyaW5nXCI9PT10aGlzLmZvcm1hdE1vZGVsJiZyZURhdGUudGVzdCh0aGlzLmRlZmF1bHRWYWx1ZSk/dGhpcy5kZWZhdWx0VmFsdWUuc2xpY2UoMCwxMCkuc3BsaXQoL1teXFxkXSsvKS5qb2luKFwiL1wiKTp0aGlzLmRlZmF1bHRWYWx1ZX0sY29tcHV0ZWREYXRlRm9ybWF0OmZ1bmN0aW9uKCl7aWYoXCJkYXRlXCI9PT10aGlzLnR5cGUmJlwic3RyaW5nXCI9PT10aGlzLmZvcm1hdE1vZGVsKXJldHVyblwiWVlZWS9NTS9ERCBISDptbTpzc1wifSxtb2RlbDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGlzVmFsaWQodGhpcy5jb21wdXRlZFZhbHVlKT9uZXcgRGF0ZSh0aGlzLmNvbXB1dGVkVmFsdWUpOnRoaXMuY29tcHV0ZWREZWZhdWx0VmFsdWU/bmV3IERhdGUodGhpcy5jb21wdXRlZERlZmF1bHRWYWx1ZSk6c3RhcnRPZkRhdGUobmV3IERhdGUsXCJkYXlcIil9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9Y29udmVydERhdGVUb0Zvcm1hdChnZXREYXRlQmV0d2Vlbih0LHRoaXMucG1pbix0aGlzLnBtYXgpLFwiYXV0b1wiPT09dGhpcy5mb3JtYXRNb2RlbD9pbmZlckRhdGVGb3JtYXQodGhpcy52YWx1ZSk6dGhpcy5mb3JtYXRNb2RlbCx0aGlzLmNvbXB1dGVkRGF0ZUZvcm1hdCk7dGhpcy4kZW1pdChcImlucHV0XCIsaSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpc1NhbWVEYXRlKGksZS52YWx1ZSl8fGUuJGVtaXQoXCJjaGFuZ2VcIixpKX0pfX0scG1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbj9uZXcgRGF0ZSh0aGlzLm1pbik6bnVsbH0scG1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heD9uZXcgRGF0ZSh0aGlzLm1heCk6bnVsbH0sdHlwZUhhc0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm5cImRhdGVcIj09PXRoaXMudHlwZXx8XCJkYXRldGltZVwiPT09dGhpcy50eXBlfSx0eXBlSGFzVGltZTpmdW5jdGlvbigpe3JldHVyblwidGltZVwiPT09dGhpcy50eXBlfHxcImRhdGV0aW1lXCI9PT10aGlzLnR5cGV9LHllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRGdWxsWWVhcigpfSxtb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldE1vbnRoKCkrMX0sZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0RGF0ZSgpfSxtaW51dGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRNaW51dGVzKCl9LGN1cnJlbnRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfSx5ZWFySW50ZXJ2YWw6ZnVuY3Rpb24oKXtyZXR1cm57bWluOm51bGwhPT10aGlzLnBtaW4/dGhpcy5wbWluLmdldEZ1bGxZZWFyKCk6KHRoaXMueWVhcnx8dGhpcy5jdXJyZW50WWVhciktODAsbWF4Om51bGwhPT10aGlzLnBtYXg/dGhpcy5wbWF4LmdldEZ1bGxZZWFyKCk6KHRoaXMueWVhcnx8dGhpcy5jdXJyZW50WWVhcikrODB9fSxtb250aEludGVydmFsOmZ1bmN0aW9uKCl7cmV0dXJue21pbjp0aGlzLm1vbnRoTWluLG1heDpudWxsIT09dGhpcy5wbWF4JiZ0aGlzLnBtYXguZ2V0RnVsbFllYXIoKT09PXRoaXMueWVhcj90aGlzLnBtYXguZ2V0TW9udGgoKToxMX19LG1vbnRoTWluOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLnBtaW4mJnRoaXMucG1pbi5nZXRGdWxsWWVhcigpPT09dGhpcy55ZWFyP3RoaXMucG1pbi5nZXRNb250aCgpOjB9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vZGVsLmdldE1vbnRoKCkrMSwwKS5nZXREYXRlKCl9LGVkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmIXRoaXMucmVhZG9ubHl9LF9fbmVlZHNCb3JkZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LG1ldGhvZHM6e3RvZ2dsZUFtUG06ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRhYmxlKXt2YXIgdD10aGlzLm1vZGVsLmdldEhvdXJzKCksZT10aGlzLmFtPzEyOi0xMjt0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldEhvdXJzKHQrZSkpfX0sX19wYXJzZVR5cGVWYWx1ZTpmdW5jdGlvbih0LGUpe3JldHVyblwibW9udGhcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDEsMTIpOlwiZGF0ZVwiPT09dD9ub3JtYWxpemVUb0ludGVydmFsKGUsMSx0aGlzLmRheXNJbk1vbnRoKTpcInllYXJcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLHRoaXMueWVhckludGVydmFsLm1pbix0aGlzLnllYXJJbnRlcnZhbC5tYXgpOlwiaG91clwiPT09dD9ub3JtYWxpemVUb0ludGVydmFsKGUsMCwyMyk6XCJtaW51dGVcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDAsNTkpOnZvaWQgMH19fTtmdW5jdGlvbiBjb252ZXJ0VG9BbVBtKHQpe3JldHVybiAwPT09dD8xMjp0Pj0xMz90LTEyOnR9dmFyIFFEYXRldGltZVBpY2tlcj17bmFtZTpcIlFEYXRldGltZVBpY2tlclwiLG1peGluczpbRGF0ZU1peGluLFBhcmVudEZpZWxkTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOntkZWZhdWx0VmFsdWU6W1N0cmluZyxOdW1iZXIsRGF0ZV0sZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW59LGRpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dmlldzp0aGlzLl9fY2FsY1ZpZXcodGhpcy5kZWZhdWx0VmlldyksZHJhZ2dpbmc6ITEsY2VudGVyQ2xvY2tQb3M6MCxmYWtlVmFsdWU6e3llYXI6bnVsbCxtb250aDpudWxsfX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0fHwodGhpcy52aWV3PVtcImRhdGVcIixcImRhdGV0aW1lXCJdLmluY2x1ZGVzKHRoaXMudHlwZSk/XCJkYXlcIjpcImhvdXJcIil9LHZpZXc6ZnVuY3Rpb24oKXt0aGlzLl9fc2Nyb2xsVmlldyghMCl9LG1vZGVsOmZ1bmN0aW9uKCl7dGhpcy5mYWtlVmFsdWUubW9udGghPT10aGlzLm1vbnRoJiYodGhpcy5mYWtlVmFsdWUubW9udGg9dGhpcy5tb250aCx0aGlzLl9fc2Nyb2xsVmlldygpKSx0aGlzLmZha2VWYWx1ZS55ZWFyIT09dGhpcy55ZWFyJiYodGhpcy5mYWtlVmFsdWUueWVhcj10aGlzLnllYXIsdGhpcy5fX3Njcm9sbFZpZXcoKSl9fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmRpc2FibGUmJnQucHVzaChcImRpc2FibGVkXCIpLHRoaXMucmVhZG9ubHkmJnQucHVzaChcInJlYWRvbmx5XCIpLHRoaXMuZGFyayYmdC5wdXNoKFwicS1kYXRldGltZS1kYXJrXCIpLHRoaXMubWluaW1hbCYmdC5wdXNoKFwicS1kYXRldGltZS1taW5pbWFsXCIpLHRoaXMuY29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvciksdH0sZGF0ZUFycm93OmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuJHEuaWNvbi5kYXRldGltZS5hcnJvd0xlZnQsdGhpcy4kcS5pY29uLmRhdGV0aW1lLmFycm93UmlnaHRdO3JldHVybiB0aGlzLiRxLmkxOG4ucnRsP3QucmV2ZXJzZSgpOnR9LGNvbXB1dGVkRm9ybWF0MjRoOmZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmZvcm1hdDI0aD90aGlzLmZvcm1hdDI0aDp0aGlzLiRxLmkxOG4uZGF0ZS5mb3JtYXQyNGh9LGNvbXB1dGVkRmlyc3REYXlPZldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5maXJzdERheU9mV2Vlaz90aGlzLmZpcnN0RGF5T2ZXZWVrOnRoaXMuJHEuaTE4bi5kYXRlLmZpcnN0RGF5T2ZXZWVrfSxoZWFkZXJEYXlOYW1lczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHEuaTE4bi5kYXRlLmRheXNTaG9ydCxlPXRoaXMuY29tcHV0ZWRGaXJzdERheU9mV2VlaztyZXR1cm4gZT4wP3Quc2xpY2UoZSw3KS5jb25jYXQodC5zbGljZSgwLGUpKTp0fSxmYWtlTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy5mYWtlWWVhcix0aGlzLmZha2VNb250aC0xLDEpfSxmYWtlWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZha2VWYWx1ZS55ZWFyfHx0aGlzLnllYXJ9LGZha2VNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZha2VWYWx1ZS5tb250aHx8dGhpcy5tb250aH0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy5mYWtlWWVhcix0aGlzLmZha2VNb250aCwwKS5nZXREYXRlKCl9LG1vbnRoU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJcIit0aGlzLiRxLmkxOG4uZGF0ZS5tb250aHNTaG9ydFt0aGlzLm1vbnRoLTFdfSxtb250aFN0YW1wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEuaTE4bi5kYXRlLm1vbnRoc1t0aGlzLmZha2VNb250aC0xXStcIiBcIit0aGlzLmZha2VZZWFyfSx3ZWVrRGF5U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZGVyTGFiZWx8fHRoaXMuJHEuaTE4bi5kYXRlLmRheXNbdGhpcy5tb2RlbC5nZXREYXkoKV19LGZpbGxlckRheXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZha2VNb2RlbC5nZXREYXkoKS10aGlzLmNvbXB1dGVkRmlyc3REYXlPZldlZWs7cmV0dXJuIHQ8MCYmKHQrPTcpLHR9LGJlZm9yZU1pbkRheXM6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5wbWluKXJldHVybiExO3ZhciB0PXRoaXMucG1pbi5nZXRGdWxsWWVhcigpLGU9dGhpcy5wbWluLmdldE1vbnRoKCkrMTtyZXR1cm4gdD09PXRoaXMuZmFrZVllYXImJmU9PT10aGlzLmZha2VNb250aD90aGlzLnBtaW4uZ2V0RGF0ZSgpLTE6KHQ+dGhpcy5mYWtlWWVhcnx8dD09PXRoaXMuZmFrZVllYXImJmU+dGhpcy5mYWtlTW9udGgpJiZ0aGlzLmRheXNJbk1vbnRofSxhZnRlck1heERheXM6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5wbWF4KXJldHVybiExO3ZhciB0PXRoaXMucG1heC5nZXRGdWxsWWVhcigpLGU9dGhpcy5wbWF4LmdldE1vbnRoKCkrMTtyZXR1cm4gdD09PXRoaXMuZmFrZVllYXImJmU9PT10aGlzLmZha2VNb250aD90aGlzLmRheXNJbk1vbnRoLXRoaXMubWF4RGF5Oih0PHRoaXMuZmFrZVllYXJ8fHQ9PT10aGlzLmZha2VZZWFyJiZlPHRoaXMuZmFrZU1vbnRoKSYmdGhpcy5kYXlzSW5Nb250aH0sbWF4RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLnBtYXg/dGhpcy5wbWF4LmdldERhdGUoKTp0aGlzLmRheXNJbk1vbnRofSxkYXRlSW50ZXJ2YWw6ZnVuY3Rpb24oKXt2YXIgdD1udWxsPT09dGhpcy5wbWF4fHwhMT09PXRoaXMuYWZ0ZXJNYXhEYXlzPzA6dGhpcy5hZnRlck1heERheXM7cmV0dXJuIHRoaXMuYmVmb3JlTWluRGF5cz4wfHx0P3ttaW46dGhpcy5iZWZvcmVNaW5EYXlzPjA/dGhpcy5iZWZvcmVNaW5EYXlzKzE6MSxtYXg6dGhpcy5kYXlzSW5Nb250aC10fTp7bWluOjEsbWF4OnRoaXMuZGF5c0luTW9udGh9fSxob3VyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tb2RlbC5nZXRIb3VycygpO3JldHVybiB0aGlzLmNvbXB1dGVkRm9ybWF0MjRoP3Q6Y29udmVydFRvQW1QbSh0KX0sbWludXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0TWludXRlcygpfSxhbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldEhvdXJzKCk8PTExfSxjbG9ja1BvaW50ZXJTdHlsZTpmdW5jdGlvbigpe3ZhciB0PVwibWludXRlXCI9PT10aGlzLnZpZXcsZT10PzYwOjEyLGk9W1wicm90YXRlKFwiKyhNYXRoLnJvdW5kKCh0P3RoaXMubWludXRlOnRoaXMuaG91cikqKDM2MC9lKSktMTgwKStcImRlZylcIl07cmV0dXJuIHR8fCF0aGlzLmNvbXB1dGVkRm9ybWF0MjRofHx0aGlzLmhvdXI+MCYmdGhpcy5ob3VyPDEzfHxpLnB1c2goXCJzY2FsZSguNywgLjcpXCIpLHt0cmFuc2Zvcm06aS5qb2luKFwiIFwiKX19LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaXNWYWxpZCh0aGlzLnZhbHVlKX0sdG9kYXk6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gaXNTYW1lRGF0ZSh0LHRoaXMuZmFrZU1vZGVsLFwibW9udGhcIik/dC5nZXREYXRlKCk6LTF9fSxtZXRob2RzOntzZXRZZWFyOmZ1bmN0aW9uKHQsZSl7dGhpcy5lZGl0YWJsZSYmKGV8fCh0aGlzLnZpZXc9XCJtb250aFwiKSx0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldEZ1bGxZZWFyKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcInllYXJcIix0KSkpKX0sc2V0TW9udGg6ZnVuY3Rpb24odCxlKXt0aGlzLmVkaXRhYmxlJiYoZXx8KHRoaXMudmlldz1cImRheVwiKSx0aGlzLm1vZGVsPWFkanVzdERhdGUodGhpcy5tb2RlbCx7bW9udGg6dH0pKX0sbW92ZUZha2VNb250aDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmZha2VNb250aCsodD4wPzE6LTEpLGk9dGhpcy5mYWtlWWVhcjtpZihlPDE/KGU9MTIsaS09MSk6ZT4xMiYmKGU9MSxpKz0xKSxudWxsIT09dGhpcy5wbWluJiZ0PjApe3ZhciBzPXRoaXMucG1pbi5nZXRGdWxsWWVhcigpLG49dGhpcy5wbWluLmdldE1vbnRoKCkrMTtpPHM/KGk9cyxlPW4pOmk9PT1zJiZlPG4mJihlPW4pfWlmKG51bGwhPT10aGlzLnBtYXgmJnQ8MCl7dmFyIG89dGhpcy5wbWF4LmdldEZ1bGxZZWFyKCkscj10aGlzLnBtYXguZ2V0TW9udGgoKSsxO2k+bz8oaT1vLGU9cik6aT09PW8mJmU+ciYmKGU9cil9dGhpcy5mYWtlVmFsdWUueWVhcj1pLHRoaXMuZmFrZVZhbHVlLm1vbnRoPWV9LHNldERheTpmdW5jdGlvbih0LGUsaSxzKXtpZih0aGlzLmVkaXRhYmxlKXtpZihpJiZzKXt2YXIgbj1hZGp1c3REYXRlKHRoaXMubW9kZWwse21vbnRoOnN9KTtuLnNldEZ1bGxZZWFyKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcInllYXJcIixpKSksbi5zZXREYXRlKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcImRhdGVcIix0KSksdGhpcy5tb2RlbD1ufWVsc2UgdGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXREYXRlKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcImRhdGVcIix0KSkpO2V8fFwiZGF0ZVwiIT09dGhpcy50eXBlP2V8fCh0aGlzLnZpZXc9XCJob3VyXCIpOih0aGlzLiRlbWl0KFwiY2FuQ2xvc2VcIiksdGhpcy5taW5pbWFsJiZ0aGlzLnNldFZpZXcodGhpcy5kZWZhdWx0VmlldykpfX0sc2V0SG91cjpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYodD10aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJob3VyXCIsdCksIXRoaXMuY29tcHV0ZWRGb3JtYXQyNGgmJnQ8MTImJiF0aGlzLmFtJiYodCs9MTIpLHRoaXMubW9kZWw9bmV3IERhdGUobmV3IERhdGUodGhpcy5tb2RlbCkuc2V0SG91cnModCkpKX0sc2V0TWludXRlOmZ1bmN0aW9uKHQpe3RoaXMuZWRpdGFibGUmJih0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldE1pbnV0ZXModGhpcy5fX3BhcnNlVHlwZVZhbHVlKFwibWludXRlXCIsdCkpKSl9LHNldFZpZXc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2NhbGNWaWV3KHQpO3RoaXMudmlldyE9PWUmJih0aGlzLnZpZXc9ZSl9LF9fY2FsY1ZpZXc6ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVwidGltZVwiOnJldHVybltcImhvdXJcIixcIm1pbnV0ZVwiXS5pbmNsdWRlcyh0KT90OlwiaG91clwiO2Nhc2VcImRhdGVcIjpyZXR1cm5bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5XCJdLmluY2x1ZGVzKHQpP3Q6XCJkYXlcIjtkZWZhdWx0OnJldHVybltcInllYXJcIixcIm1vbnRoXCIsXCJkYXlcIixcImhvdXJcIixcIm1pbnV0ZVwiXS5pbmNsdWRlcyh0KT90OlwiZGF5XCJ9fSxfX3BhZDpmdW5jdGlvbih0LGUpe3JldHVybih0PDEwP2V8fFwiMFwiOlwiXCIpK3R9LF9fc2Nyb2xsVmlldzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKFwieWVhclwiPT09dGhpcy52aWV3fHxcIm1vbnRoXCI9PT10aGlzLnZpZXcpe3QmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9fc2Nyb2xsVmlldygpfSwyMDApO3ZhciBpPXRoaXMuJHJlZnMuc2VsZWN0b3Iscz1pP2kucXVlcnlTZWxlY3RvcihcIi5xLWJ0bjpub3QoLmFjdGl2ZSlcIik6bnVsbCxuPWk/aS5xdWVyeVNlbGVjdG9yKFwiLnEtYnRuLmFjdGl2ZVwiKTpudWxsLG89aT9pLm9mZnNldEhlaWdodDowO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIHQ9XCJ5ZWFyXCI9PT1lLnZpZXc/ZS55ZWFyLWUueWVhckludGVydmFsLm1pbjplLm1vbnRoLWUubW9udGhNaW4tMTtvJiZuJiYoaS5zY3JvbGxUb3A9dCoocz9zLm9mZnNldEhlaWdodDowKSsobi5vZmZzZXRIZWlnaHQtbykvMil9KX19LF9fZHJhZ1N0YXJ0OmZ1bmN0aW9uKHQsZSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9dGhpcy4kcmVmcy5jbG9jayxzPW9mZnNldChpKTt0aGlzLmNlbnRlckNsb2NrUG9zPXt0b3A6cy50b3AraGVpZ2h0KGkpLzIsbGVmdDpzLmxlZnQrd2lkdGgoaSkvMn0sdGhpcy5kcmFnZ2luZz0hMCx0aGlzLl9fdXBkYXRlQ2xvY2sodCxlKX0sX19kcmFnTW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy5fX3VwZGF0ZUNsb2NrKHQpKX0sX19kcmFnU3RvcDpmdW5jdGlvbih0LGUpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZHJhZ2dpbmc9ITEsdm9pZCAwIT09dCYmdGhpcy5fX3VwZGF0ZUNsb2NrKHQsZSksXCJtaW51dGVcIj09PXRoaXMudmlldz8odGhpcy4kZW1pdChcImNhbkNsb3NlXCIpLHRoaXMubWluaW1hbCYmdGhpcy5zZXRWaWV3KHRoaXMuZGVmYXVsdFZpZXcpKTp0aGlzLnZpZXc9XCJtaW51dGVcIn0sX191cGRhdGVDbG9jazpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIHRoaXNbXCJob3VyXCI9PT10aGlzLnZpZXc/XCJzZXRIb3VyXCI6XCJzZXRNaW51dGVcIl0oZSk7dmFyIGk9cG9zaXRpb24odCkscz1NYXRoLmFicyhpLnRvcC10aGlzLmNlbnRlckNsb2NrUG9zLnRvcCksbj1NYXRoLnNxcnQoTWF0aC5wb3coTWF0aC5hYnMoaS50b3AtdGhpcy5jZW50ZXJDbG9ja1Bvcy50b3ApLDIpK01hdGgucG93KE1hdGguYWJzKGkubGVmdC10aGlzLmNlbnRlckNsb2NrUG9zLmxlZnQpLDIpKSxvPU1hdGguYXNpbihzL24pKigxODAvTWF0aC5QSSk7aWYobz1pLnRvcDx0aGlzLmNlbnRlckNsb2NrUG9zLnRvcD90aGlzLmNlbnRlckNsb2NrUG9zLmxlZnQ8aS5sZWZ0PzkwLW86MjcwK286dGhpcy5jZW50ZXJDbG9ja1Bvcy5sZWZ0PGkubGVmdD9vKzkwOjI3MC1vLFwiaG91clwiPT09dGhpcy52aWV3KXt2YXIgcj1NYXRoLnJvdW5kKG8vMzApO3RoaXMuY29tcHV0ZWRGb3JtYXQyNGgmJihyP248ODUmJihyKz0xMik6cj1uPDg1PzA6MTIpLHRoaXMuc2V0SG91cihyKX1lbHNlIHRoaXMuc2V0TWludXRlKE1hdGgucm91bmQoby82KSl9LF9fcmVwZWF0VGltZW91dDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMTAwLDMwMC10KnQqMTApfSxfX2dldFRvcFNlY3Rpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVt0aGlzLnR5cGVIYXNEYXRlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXdlZWtkYXlzdHJpbmdcIn0sW3RoaXMud2Vla0RheVN0cmluZ10pOnZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sXCJ9KV07aWYodGhpcy50eXBlSGFzRGF0ZSl7dmFyIHM9W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWRhdGVzdHJpbmcgcm93IGp1c3RpZnktY2VudGVyIGl0ZW1zLWVuZFwifSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmsgc21hbGwgY29sLWF1dG8gY29sLW1kLTEyXCIsY2xhc3M6e2FjdGl2ZTpcIm1vbnRoXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTszOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNb250aChlLm1vbnRoLTEsITApKTo0MD09PWl8fDM3PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNb250aChlLm1vbnRoKzEsITApKToxMyE9PWkmJjIwIT09aXx8KGUudmlldz1cIm1vbnRoXCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJtb250aFwifX19LFt0aGlzLm1vbnRoU3RyaW5nXSldKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGluayBjb2wtYXV0byBjb2wtbWQtMTJcIixjbGFzczp7YWN0aXZlOlwiZGF5XCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTszNz09PWl8fDM4PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXREYXkoZS5kYXktKDM3PT09aT8xOjcpLCEwKSk6Mzk9PT1pfHw0MD09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0RGF5KGUuZGF5KygzOT09PWk/MTo3KSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwiZGF5XCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJkYXlcIn19fSxbdGhpcy5kYXldKV0pLHQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rIHNtYWxsIGNvbC1hdXRvIGNvbC1tZC0xMlwiLGNsYXNzOnthY3RpdmU6XCJ5ZWFyXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTszOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRZZWFyKGUueWVhci0xLCEwKSk6NDA9PT1pfHwzNz09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0WWVhcihlLnllYXIrMSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwieWVhclwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwieWVhclwifX19LFt0aGlzLnllYXJdKV0pXSldO2kucHVzaCh0KFwiZGl2XCIscykpfWlmKHRoaXMudHlwZUhhc1RpbWUpe3ZhciBuPSF0aGlzLmNvbXB1dGVkRm9ybWF0MjRoJiZ0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYW1wbSBjb2x1bW5cIixhdHRyczp7dGFiaW5kZXg6MH0sb246dGhpcy5fX2FtUG1FdmVudHN9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGlua1wiLGNsYXNzOnthY3RpdmU6dGhpcy5hbX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOntjbGljazp0aGlzLnRvZ2dsZUFtUG19fSxbXCJBTVwiXSldKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGlua1wiLGNsYXNzOnthY3RpdmU6IXRoaXMuYW19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6dGhpcy50b2dnbGVBbVBtfX0sW1wiUE1cIl0pXSldKSxvPVt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcImNvbC1hdXRvXCIsc3R5bGU6e3RleHRBbGlnbjpcInJpZ2h0XCJ9fSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixzdHlsZTp7dGV4dEFsaWduOlwicmlnaHRcIn0sY2xhc3M6e2FjdGl2ZTpcImhvdXJcIj09PXRoaXMudmlld30sYXR0cnM6e3RhYmluZGV4OjB9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPWdldEV2ZW50S2V5KHQpOzQwPT09aXx8Mzc9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldEhvdXIoZS5ob3VyLTEsITApKTozOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRIb3VyKGUuaG91cisxLCEwKSk6MTMhPT1pJiYyMCE9PWl8fChlLnZpZXc9XCJob3VyXCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJob3VyXCJ9fX0sW3RoaXMuY29tcHV0ZWRGb3JtYXQyNGg/dGhpcy5fX3BhZCh0aGlzLmhvdXIpOnRoaXMuaG91cl0pXSldKSx0KFwic3BhblwiLHtzdHlsZTpcIm9wYWNpdHk6MC42O1wifSxbXCI6XCJdKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcImNvbC1hdXRvIHJvdyBuby13cmFwIGl0ZW1zLWNlbnRlclwiLHN0eWxlOnt0ZXh0QWxpZ246XCJsZWZ0XCJ9fSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixzdHlsZTp7dGV4dEFsaWduOlwibGVmdFwifSxjbGFzczp7YWN0aXZlOlwibWludXRlXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTs0MD09PWl8fDM3PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNaW51dGUoZS5taW51dGUtMSwhMCkpOjM4PT09aXx8Mzk9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldE1pbnV0ZShlLm1pbnV0ZSsxLCEwKSk6MTMhPT1pJiYyMCE9PWl8fChlLnZpZXc9XCJtaW51dGVcIil9fX0sW3QoXCJzcGFuXCIse2F0dHJzOnt0YWJpbmRleDotMX0sb246dGhpcy5kaXNhYmxlP3t9OntjbGljazpmdW5jdGlvbigpe2Uudmlldz1cIm1pbnV0ZVwifX19LFt0aGlzLl9fcGFkKHRoaXMubWludXRlKV0pXSksbl0pXTtpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtdGltZSByb3cgc2Nyb2xsIGZsZXgtY2VudGVyXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jbG9ja3N0cmluZyBjb2wgcm93IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0XCJ9LG8pXSkpfXJldHVybiBpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWhlYWRlciBjb2x1bW4gbm8td3JhcCBpdGVtcy1jZW50ZXJcIn0saSl9LF9fZ2V0WWVhclZpZXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsaT1bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KV0scz1mdW5jdGlvbihzKXtpLnB1c2godChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYnRuIG5vLWJvcmRlci1yYWRpdXNcIixjbGFzczp7YWN0aXZlOnM9PT1lLnllYXJ9LGF0dHJzOnt0YWJpbmRleDotMX0scHJvcHM6e2ZsYXQ6ITAsZGlzYWJsZTohZS5lZGl0YWJsZX0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5zZXRZZWFyKHMpfX19LFtzXSkpfSxuPXRoaXMueWVhckludGVydmFsLm1pbjtuPD10aGlzLnllYXJJbnRlcnZhbC5tYXg7bisrKXMobik7cmV0dXJuIGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWdyb3dcIn0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS12aWV3LXllYXIgZml0IGNvbHVtbiBuby13cmFwXCJ9LGkpfSxfX2dldE1vbnRoVmlldzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxpPVt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWdyb3dcIn0pXSxzPWZ1bmN0aW9uKHMpe2kucHVzaCh0KFFCdG4se3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1idG4gbm8tYm9yZGVyLXJhZGl1c1wiLGNsYXNzOnthY3RpdmU6cysxPT09ZS5tb250aH0sYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczp7ZmxhdDohMCxkaXNhYmxlOiFlLmVkaXRhYmxlfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnNldE1vbnRoKHMrMSl9fX0sW2UuJHEuaTE4bi5kYXRlLm1vbnRoc1tzXV0pKX0sbj10aGlzLm1vbnRoSW50ZXJ2YWwubWluO248PXRoaXMubW9udGhJbnRlcnZhbC5tYXg7bisrKXMobik7cmV0dXJuIGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWdyb3dcIn0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS12aWV3LW1vbnRoIGZpdCBjb2x1bW4gbm8td3JhcFwifSxpKX0sX19nZXREYXlWaWV3OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLGk9W10scz10aGlzLmZha2VNb250aD09PXRoaXMubW9udGgmJnRoaXMuZmFrZVllYXI9PT10aGlzLnllYXI/dGhpcy5kYXk6LTEsbj0xO248PXRoaXMuZmlsbGVyRGF5cztuKyspaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWZpbGxlcmRheVwifSkpO2lmKHRoaXMubWluKWZvcih2YXIgbz0xO288PXRoaXMuYmVmb3JlTWluRGF5cztvKyspaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyIGp1c3RpZnktY2VudGVyIGRpc2FibGVkXCIsY2xhc3M6e1wicS1kYXRldGltZS1kYXktYWN0aXZlXCI6ZS5pc1ZhbGlkJiZvPT09c319LFt0KFwic3BhblwiLFtvXSldKSk7Zm9yKHZhciByPXRoaXMuZGF0ZUludGVydmFsLGE9ci5taW4sbD1yLm1heCxjPWZ1bmN0aW9uKG4pe2kucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiLGNsYXNzOltlLmNvbG9yJiZuPT09cz9cInRleHQtXCIrZS5jb2xvcjpudWxsLHtcInEtZGF0ZXRpbWUtZGF5LWFjdGl2ZVwiOmUuaXNWYWxpZCYmbj09PXMsXCJxLWRhdGV0aW1lLWRheS10b2RheVwiOm49PT1lLnRvZGF5LGRpc2FibGVkOiFlLmVkaXRhYmxlfV0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5zZXREYXkobiwhMSxlLmZha2VZZWFyLGUuZmFrZU1vbnRoKX19fSxbdChcInNwYW5cIixbbl0pXSkpfSxoPWE7aDw9bDtoKyspYyhoKTtpZih0aGlzLm1heClmb3IodmFyIHU9MTt1PD10aGlzLmFmdGVyTWF4RGF5czt1KyspaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyIGp1c3RpZnktY2VudGVyIGRpc2FibGVkXCIsY2xhc3M6e1wicS1kYXRldGltZS1kYXktYWN0aXZlXCI6ZS5pc1ZhbGlkJiZ1K2UubWF4RGF5PT09c319LFt0KFwic3BhblwiLFt1K2UubWF4RGF5XSldKSk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXZpZXctZGF5XCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlclwifSxbdChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYXJyb3dcIixhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOntyb3VuZDohMCxkZW5zZTohMCxmbGF0OiEwLGljb246dGhpcy5kYXRlQXJyb3dbMF0scmVwZWF0VGltZW91dDp0aGlzLl9fcmVwZWF0VGltZW91dCxkaXNhYmxlOnRoaXMuYmVmb3JlTWluRGF5cz4wfHx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHl9LG9uOntjbGljazpmdW5jdGlvbigpe2UubW92ZUZha2VNb250aCgtMSl9fX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1kYXRldGltZS1tb250aC1zdGFtcFwifSxbdGhpcy5tb250aFN0YW1wXSksdChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYXJyb3dcIixhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOntyb3VuZDohMCxkZW5zZTohMCxmbGF0OiEwLGljb246dGhpcy5kYXRlQXJyb3dbMV0scmVwZWF0VGltZW91dDp0aGlzLl9fcmVwZWF0VGltZW91dCxkaXNhYmxlOnRoaXMuYWZ0ZXJNYXhEYXlzPjB8fHRoaXMuZGlzYWJsZXx8dGhpcy5yZWFkb25seX0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5tb3ZlRmFrZU1vbnRoKDEpfX19KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXdlZWtkYXlzIHJvdyBuby13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCJ9LHRoaXMuaGVhZGVyRGF5TmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0KFwiZGl2XCIsW2VdKX0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1kYXlzIHJvdyB3cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGNvbnRlbnQtY2VudGVyXCJ9LGkpXSl9LF9fZ2V0Q2xvY2tWaWV3OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXTtpZihcImhvdXJcIj09PXRoaXMudmlldyl7dmFyIHMsbixvPVwiXCI7dGhpcy5jb21wdXRlZEZvcm1hdDI0aD8ocz0wLG49MjQsbz1cIiBmbXQyNFwiKToocz0xLG49MTMpO2Zvcih2YXIgcj1mdW5jdGlvbihzKXtpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb25cIitvLGNsYXNzOltcInEtZGF0ZXRpbWUtY2xvY2stcG9zLVwiK3Mscz09PWUuaG91cj9cImFjdGl2ZVwiOlwiXCJdLG9uOntcIiFtb3VzZWRvd25cIjpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX2RyYWdTdGFydCh0LHMpfSxcIiFtb3VzZXVwXCI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19kcmFnU3RvcCh0LHMpfX19LFt0KFwic3BhblwiLFtzfHxcIjAwXCJdKV0pKX0sYT1zO2E8bjthKyspcihhKX1lbHNlIGZvcih2YXIgbD0wO2w8MTI7bCsrKXt2YXIgYz01Kmw7aS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uXCIsY2xhc3M6W1wicS1kYXRldGltZS1jbG9jay1wb3MtXCIrbCxjPT09ZS5taW51dGU/XCJhY3RpdmVcIjpcIlwiXX0sW3QoXCJzcGFuXCIsW2NdKV0pKX1yZXR1cm4gdChcImRpdlwiLHtyZWY6XCJjbG9ja1wiLGtleTpcImNsb2NrXCIrdGhpcy52aWV3LHN0YXRpY0NsYXNzOlwiY29sdW1uIGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2sgY3Vyc29yLXBvaW50ZXJcIixvbjp7bW91c2Vkb3duOnRoaXMuX19kcmFnU3RhcnQsbW91c2Vtb3ZlOnRoaXMuX19kcmFnTW92ZSxtb3VzZXVwOnRoaXMuX19kcmFnU3RvcCx0b3VjaHN0YXJ0OnRoaXMuX19kcmFnU3RhcnQsdG91Y2htb3ZlOnRoaXMuX19kcmFnTW92ZSx0b3VjaGVuZDp0aGlzLl9fZHJhZ1N0b3B9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2stY2lyY2xlIGZ1bGwtd2lkdGggZnVsbC1oZWlnaHRcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLWNlbnRlclwifSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2stcG9pbnRlclwiLHN0eWxlOnRoaXMuY2xvY2tQb2ludGVyU3R5bGV9LFt0KFwic3BhblwiKV0pLGldKV0pXSl9LF9fZ2V0Vmlld1NlY3Rpb246ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMudmlldyl7Y2FzZVwieWVhclwiOnJldHVybiB0aGlzLl9fZ2V0WWVhclZpZXcodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gdGhpcy5fX2dldE1vbnRoVmlldyh0KTtjYXNlXCJkYXlcIjpyZXR1cm4gdGhpcy5fX2dldERheVZpZXcodCk7Y2FzZVwiaG91clwiOmNhc2VcIm1pbnV0ZVwiOnJldHVybiB0aGlzLl9fZ2V0Q2xvY2tWaWV3KHQpfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19hbVBtRXZlbnRzPXtrZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpPWdldEV2ZW50S2V5KGUpO1sxMywzMiwzNywzOCwzOSw0MF0uaW5jbHVkZXMoaSkmJihzdG9wQW5kUHJldmVudChlKSx0LnRvZ2dsZUFtUG0oKSl9fX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuX19zY3JvbGxWaWV3KCEwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY2FuUmVuZGVyKXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZSByb3dcIixjbGFzczp0aGlzLmNsYXNzZXN9LFshdGhpcy5taW5pbWFsJiZ0aGlzLl9fZ2V0VG9wU2VjdGlvbih0KXx8dm9pZCAwLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNvbnRlbnQgc2Nyb2xsXCJ9LFt0KFwiZGl2XCIse3JlZjpcInNlbGVjdG9yXCIsc3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXNlbGVjdG9yIHJvdyBpdGVtcy1jZW50ZXJcIn0sW3QoXCJkaXZcIix7Y2xhc3M6XCJjb2xcIn0pLHRoaXMuX19nZXRWaWV3U2VjdGlvbih0KSx0KFwiZGl2XCIse2NsYXNzOlwiY29sXCJ9KV0pXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpXSl9fSxjb250ZW50Q3NzJDE9e21heFdpZHRoOlwiOTV2d1wiLG1heEhlaWdodDpcIjk4dmhcIn0sUURhdGV0aW1lPXtuYW1lOlwiUURhdGV0aW1lXCIsbWl4aW5zOltGcmFtZU1peGluLERpc3BsYXlNb2RlTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOk9iamVjdC5hc3NpZ24oe30saW5wdXQsaW5saW5lKSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7IXRoaXMuZGlzYWJsZSYmdGhpcy5pc1BvcG92ZXImJih0aGlzLm1vZGVsPWNsb25lJDEodCkpfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0cmFuc2l0aW9uOm51bGwsbW9kZWw6bnVsbCxmb2N1c2VkOiExfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMubW9kZWw9Y2xvbmUkMSh0aGlzLmNvbXB1dGVkVmFsdWUpLHRoaXMuaXNQb3BvdmVyfHwodGhpcy50cmFuc2l0aW9uPVwicS1tb2RhbFwiKX0sY29tcHV0ZWQ6e2NvbXB1dGVkRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybWF0P3RoaXMuZm9ybWF0OlwiZGF0ZVwiPT09dGhpcy50eXBlP1wiWVlZWS9NTS9ERFwiOlwidGltZVwiPT09dGhpcy50eXBlP1wiSEg6bW1cIjpcIllZWVkvTU0vREQgSEg6bW06c3NcIn0sYWN0dWFsVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5VmFsdWU/dGhpcy5kaXNwbGF5VmFsdWU6aXNWYWxpZCh0aGlzLnZhbHVlKSYmdGhpcy5jYW5SZW5kZXI/Zm9ybWF0RGF0ZSh0aGlzLnZhbHVlLHRoaXMuY29tcHV0ZWRGb3JtYXQsdGhpcy4kcS5pMThuLmRhdGUpOlwiXCJ9LGNvbXB1dGVkVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gaXNWYWxpZCh0aGlzLnZhbHVlKT90aGlzLnZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlfSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP3RoaXMuZGVmYXVsdFZhbHVlOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJiFpc1NhbWVEYXRlKHRoaXMuY29tcHV0ZWRDbGVhclZhbHVlLHRoaXMudmFsdWUpfSxtb2RhbEJ0bkNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sb3J9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLnBvcHVwJiZ0aGlzW3RoaXMuJHJlZnMucG9wdXAuc2hvd2luZz9cImhpZGVcIjpcInNob3dcIl0oKX0sc2hvdzpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGUpcmV0dXJuIHRoaXMuX19zZXRNb2RlbCh0aGlzLmNvbXB1dGVkVmFsdWUpLHRoaXMuJHJlZnMucG9wdXAuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wdXA/dGhpcy4kcmVmcy5wb3B1cC5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXtzd2l0Y2goZ2V0RXZlbnRLZXkodCkpe2Nhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gc3RvcEFuZFByZXZlbnQodCksdGhpcy5zaG93KCk7Y2FzZSA4OnRoaXMuaXNDbGVhcmFibGUmJnRoaXMuY2xlYXIoKX19LF9fb25Gb2N1czpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGUmJiF0aGlzLmZvY3VzZWQpe3ZhciB0PXRoaXMuJHJlZnMudGFyZ2V0O3QmJnQuc2V0Vmlldyh0aGlzLmRlZmF1bHRWaWV3LCEwKSx0aGlzLm1vZGVsPWNsb25lJDEodGhpcy5jb21wdXRlZFZhbHVlKSx0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kZW1pdChcImZvY3VzXCIpfX0sX19vbkJsdXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmZvY3VzZWQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UuJHJlZnMucG9wdXAmJmUuJHJlZnMucG9wdXAuc2hvd2luZyYmKHQ9PT1kb2N1bWVudC5ib2R5fHxlLiRyZWZzLnBvcHVwLiRlbC5jb250YWlucyh0KSl8fChlLl9fb25IaWRlKCksZS5oaWRlKCkpfSwxKX0sX19vbkhpZGU6ZnVuY3Rpb24odCxlKXsodHx8dGhpcy5pc1BvcG92ZXIpJiZ0aGlzLl9fdXBkYXRlKHQpLHRoaXMuZm9jdXNlZCYmKGU/dGhpcy4kZWwuZm9jdXMoKToodGhpcy4kZW1pdChcImJsdXJcIiksdGhpcy5mb2N1c2VkPSExKSl9LF9fc2V0TW9kZWw6ZnVuY3Rpb24odCxlKXt0aGlzLm1vZGVsPWNsb25lJDEodCksKGV8fHRoaXMuaXNQb3BvdmVyKSYmdGhpcy5fX3VwZGF0ZShlKX0sX191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lzU2FtZURhdGUoZS5tb2RlbCxlLnZhbHVlKXx8KGUuJGVtaXQoXCJpbnB1dFwiLGUubW9kZWwpLHQmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKSl9KX0sX19zY3JvbGxWaWV3OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcmVmcy50YXJnZXQ7dCYmdC5fX3Njcm9sbFZpZXcoKX0sX19nZXRQaWNrZXI6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO3JldHVyblt0KFFEYXRldGltZVBpY2tlcix7cmVmOlwidGFyZ2V0XCIsc3RhdGljQ2xhc3M6XCJuby1ib3JkZXJcIixjbGFzczp7XCJkYXRldGltZS1pb3MtbW9kYWxcIjohMX0scHJvcHM6e3R5cGU6dGhpcy50eXBlLG1pbjp0aGlzLm1pbixtYXg6dGhpcy5tYXgsaGVhZGVyTGFiZWw6dGhpcy5oZWFkZXJMYWJlbCxtaW5pbWFsOnRoaXMubWluaW1hbCxmb3JtYXRNb2RlbDp0aGlzLmZvcm1hdE1vZGVsLGZvcm1hdDI0aDp0aGlzLmZvcm1hdDI0aCxmaXJzdERheU9mV2Vlazp0aGlzLmZpcnN0RGF5T2ZXZWVrLGRlZmF1bHRWaWV3OnRoaXMuZGVmYXVsdFZpZXcsY29sb3I6dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS03XCI6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFyayx2YWx1ZTp0aGlzLm1vZGVsLGRpc2FibGU6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksbm9QYXJlbnRGaWVsZDohMH0sb246e2lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBpLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBpLl9fc2V0TW9kZWwodCl9KX0sY2FuQ2xvc2U6ZnVuY3Rpb24oKXtpLmlzUG9wb3ZlciYmaS5oaWRlKCl9fX0sW2U/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWJ1dHRvbnMgbW9kYWwtYnV0dG9ucy10b3Agcm93IGZ1bGwtd2lkdGhcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMuY2FuY2VsTGFiZWx8fHRoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWwsbm9SaXBwbGU6ITB9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkhpZGUoITEsITApLGkuaGlkZSgpfX19KSx0aGlzLmVkaXRhYmxlP3QoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMub2tMYWJlbHx8dGhpcy4kcS5pMThuLmxhYmVsLnNldCxub1JpcHBsZTohMCxkaXNhYmxlOiF0aGlzLm1vZGVsfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25IaWRlKCEwLCEwKSxpLmhpZGUoKX19fSk6bnVsbF0pOm51bGxdKV19fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXRGcmFtZSx7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZHx8dGhpcy4kcmVmcy5wb3B1cCYmdGhpcy4kcmVmcy5wb3B1cC5zaG93aW5nLGZvY3VzYWJsZTohMCxsZW5ndGg6dGhpcy5hY3R1YWxWYWx1ZS5sZW5ndGh9LG5hdGl2ZU9uOntjbGljazp0aGlzLnRvZ2dsZSxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbkJsdXIsa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5mYWtlSW5wdXRDbGFzc2VzfSxbdGhpcy5mYWtlSW5wdXRWYWx1ZV0pLHRoaXMuaXNQb3BvdmVyP3QoUVBvcG92ZXIse3JlZjpcInBvcHVwXCIscHJvcHM6e2NvdmVyOiEwLGtlZXBPblNjcmVlbjohMCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6XCIxMDB2aFwifSxzbG90OlwiYWZ0ZXJcIixvbjp7c2hvdzpmdW5jdGlvbih0KXtlLl9fb25Gb2N1cyh0KSxlLl9fc2Nyb2xsVmlldygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITAsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCkpOnQoUU1vZGFsLHtyZWY6XCJwb3B1cFwiLHN0YXRpY0NsYXNzOlwid2l0aC1iYWNrZHJvcCBxLWRhdGV0aW1lLW1vZGFsXCIscHJvcHM6e2NvbnRlbnRDc3M6Y29udGVudENzcyQxLG1pbmltaXplZDohMCxwb3NpdGlvbjpudWxsLHRyYW5zaXRpb246dGhpcy50cmFuc2l0aW9ufSxvbjp7c2hvdzp0aGlzLl9fc2Nyb2xsVmlldyxkaXNtaXNzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITEsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCwhMCkpLHRoaXMuaXNDbGVhcmFibGU/dChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOntjbGljazp0aGlzLmNsZWFyfSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSk6bnVsbCx0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXQuZHJvcGRvd259LHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCJ9KV0pfX0saW5wdXRUeXBlcz1bXCJ0ZXh0XCIsXCJ0ZXh0YXJlYVwiLFwiZW1haWxcIixcInNlYXJjaFwiLFwidGVsXCIsXCJmaWxlXCIsXCJudW1iZXJcIixcInBhc3N3b3JkXCIsXCJ1cmxcIixcInRpbWVcIixcImRhdGVcIl0sUVJlc2l6ZU9ic2VydmFibGU9e25hbWU6XCJRUmVzaXplT2JzZXJ2YWJsZVwiLG1peGluczpbQ2FuUmVuZGVyTWl4aW5dLHByb3BzOntkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxMDB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT2JzZXJ2ZXI/e306e3VybDp0aGlzLiRxLnBsYXRmb3JtLmlzLmllP251bGw6XCJhYm91dDpibGFua1wifX0sbWV0aG9kczp7b25SZXNpemU6ZnVuY3Rpb24oKXtpZih0aGlzLnRpbWVyPW51bGwsdGhpcy4kZWwmJnRoaXMuJGVsLnBhcmVudE5vZGUpe3ZhciB0PXRoaXMuJGVsLnBhcmVudE5vZGUsZT17d2lkdGg6dC5vZmZzZXRXaWR0aCxoZWlnaHQ6dC5vZmZzZXRIZWlnaHR9O2Uud2lkdGg9PT10aGlzLnNpemUud2lkdGgmJmUuaGVpZ2h0PT09dGhpcy5zaXplLmhlaWdodHx8KHRoaXMuc2l6ZT1lLHRoaXMuJGVtaXQoXCJyZXNpemVcIix0aGlzLnNpemUpKX19LHRyaWdnZXI6ZnVuY3Rpb24odCl7ITA9PT10fHwwPT09dGhpcy5kZWJvdW5jZT90aGlzLm9uUmVzaXplKCk6dGhpcy50aW1lcnx8KHRoaXMudGltZXI9c2V0VGltZW91dCh0aGlzLm9uUmVzaXplLHRoaXMuZGVib3VuY2UpKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuY2FuUmVuZGVyJiYhdGhpcy5oYXNPYnNlcnZlcilyZXR1cm4gdChcIm9iamVjdFwiLHtzdHlsZTp0aGlzLnN0eWxlLGF0dHJzOnt0YWJpbmRleDotMSx0eXBlOlwidGV4dC9odG1sXCIsZGF0YTp0aGlzLnVybCxcImFyaWEtaGlkZGVuXCI6ITB9LG9uOntsb2FkOmZ1bmN0aW9uKCl7ZS4kZWwuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixlLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKSxlLnRyaWdnZXIoITApfX19KX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5zaXplPXt3aWR0aDotMSxoZWlnaHQ6LTF9LGlzU1NSfHwodGhpcy5oYXNPYnNlcnZlcj1cInVuZGVmaW5lZFwiIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXIsdGhpcy5oYXNPYnNlcnZlcnx8KHRoaXMuc3R5bGU9KHRoaXMuJHEucGxhdGZvcm0uaXMuaWU/XCJ2aXNpYmlsaXR5OmhpZGRlbjtcIjpcIlwiKStcImRpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Oi0xO1wiKSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmhhc09ic2VydmVyKXJldHVybiB0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcih0aGlzLnRyaWdnZXIpLHZvaWQgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuJGVsLnBhcmVudE5vZGUpO3RoaXMudHJpZ2dlcighMCksdGhpcy4kcS5wbGF0Zm9ybS5pcy5pZSYmKHRoaXMudXJsPVwiYWJvdXQ6YmxhbmtcIil9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5oYXNPYnNlcnZlcj90aGlzLiRlbC5wYXJlbnROb2RlJiZ0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLiRlbC5wYXJlbnROb2RlKTp0aGlzLiRlbC5jb250ZW50RG9jdW1lbnQmJnRoaXMuJGVsLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlldy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSl9fSxRSW5wdXQ9e25hbWU6XCJRSW5wdXRcIixtaXhpbnM6W0ZyYW1lTWl4aW4sSW5wdXRNaXhpbl0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInRleHRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIGlucHV0VHlwZXMuaW5jbHVkZXModCl9fSxhbGlnbjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSxub1Bhc3NUb2dnbGU6Qm9vbGVhbixudW1lcmljS2V5Ym9hcmRUb2dnbGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGRlY2ltYWxzOk51bWJlcixzdGVwOk51bWJlcix1cHBlckNhc2U6Qm9vbGVhbixsb3dlckNhc2U6Qm9vbGVhbixpbml0aWFsU2hvd1Bhc3N3b3JkOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntzaG93UGFzczp0aGlzLmluaXRpYWxTaG93UGFzc3dvcmQsc2hvd051bWJlcjohMCxtb2RlbDp0aGlzLnZhbHVlLHdhdGNoZXI6bnVsbCxhdXRvZmlsbGVkOiExLHNoYWRvdzp7dmFsOnRoaXMubW9kZWwsc2V0OnRoaXMuX19zZXQsc2V0TmF2OnRoaXMuX19zZXQsbG9hZGluZzohMSx3YXRjaGVkOjAsaXNFZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiB0LmVkaXRhYmxlfSxpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXJrfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dC4kcmVmcy5pbnB1dH0scmVnaXN0ZXI6ZnVuY3Rpb24oKXt0LnNoYWRvdy53YXRjaGVkKz0xLHQuX193YXRjaGVyUmVnaXN0ZXIoKX0sdW5yZWdpc3RlcjpmdW5jdGlvbigpe3Quc2hhZG93LndhdGNoZWQ9TWF0aC5tYXgoMCx0LnNoYWRvdy53YXRjaGVkLTEpLHQuX193YXRjaGVyVW5yZWdpc3RlcigpfSxnZXRFbDpmdW5jdGlvbigpe3JldHVybiB0LiRyZWZzLmlucHV0fX19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzLm1vZGVsKSxpPXBhcnNlRmxvYXQodCk7KCF0aGlzLmlzTnVtYmVyfHx0aGlzLmlzTnVtYmVyRXJyb3J8fGlzTmFOKGUpfHxpc05hTihpKXx8ZSE9PWkpJiYodGhpcy5tb2RlbD10KSx0aGlzLmlzTnVtYmVyRXJyb3I9ITEsdGhpcy5pc05lZ1plcm89ITF9LGlzVGV4dGFyZWE6ZnVuY3Rpb24odCl7dGhpc1t0P1wiX193YXRjaGVyUmVnaXN0ZXJcIjpcIl9fd2F0Y2hlclVucmVnaXN0ZXJcIl0oKX0sXCIkYXR0cnMucm93c1wiOmZ1bmN0aW9uKCl7dGhpcy5pc1RleHRhcmVhJiZ0aGlzLl9fdXBkYXRlQXJlYSgpfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX2lucHV0OnRoaXMuc2hhZG93fX0sY29tcHV0ZWQ6e2lzTnVtYmVyOmZ1bmN0aW9uKCl7cmV0dXJuXCJudW1iZXJcIj09PXRoaXMudHlwZX0saXNQYXNzd29yZDpmdW5jdGlvbigpe3JldHVyblwicGFzc3dvcmRcIj09PXRoaXMudHlwZX0saXNUZXh0YXJlYTpmdW5jdGlvbigpe3JldHVyblwidGV4dGFyZWFcIj09PXRoaXMudHlwZX0saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZ3x8dGhpcy5zaGFkb3cud2F0Y2hlZCYmdGhpcy5zaGFkb3cubG9hZGluZ30sa2V5Ym9hcmRUb2dnbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGUmJnRoaXMuaXNOdW1iZXImJnRoaXMubnVtZXJpY0tleWJvYXJkVG9nZ2xlfSxpbnB1dFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1Bhc3N3b3JkP3RoaXMuc2hvd1Bhc3MmJnRoaXMuZWRpdGFibGU/XCJ0ZXh0XCI6XCJwYXNzd29yZFwiOnRoaXMuaXNOdW1iZXI/dGhpcy5zaG93TnVtYmVyfHwhdGhpcy5lZGl0YWJsZT9cIm51bWJlclwiOlwidGV4dFwiOnRoaXMudHlwZX0saW5wdXRDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuYWxpZ24mJnQucHVzaChcInRleHQtXCIrdGhpcy5hbGlnbiksdGhpcy5hdXRvZmlsbGVkJiZ0LnB1c2goXCJxLWlucHV0LWF1dG9maWxsXCIpLHR9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5tb2RlbCYmdm9pZCAwIT09dGhpcy5tb2RlbD8oXCJcIit0aGlzLm1vZGVsKS5sZW5ndGg6MH0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmlzTnVtYmVyP251bGw6XCJcIjp0aGlzLmNsZWFyVmFsdWV9LGNvbXB1dGVkU3RlcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0ZXB8fCh0aGlzLmRlY2ltYWxzP01hdGgucG93KDEwLC10aGlzLmRlY2ltYWxzKTpcImFueVwiKX0sZnJhbWVQcm9wczpmdW5jdGlvbigpe3JldHVybntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLHBsYWNlaG9sZGVyOnRoaXMucGxhY2Vob2xkZXIsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZCxsZW5ndGg6dGhpcy5hdXRvZmlsbGVkK3RoaXMubGVuZ3RofX19LG1ldGhvZHM6e3RvZ2dsZVBhc3M6ZnVuY3Rpb24oKXt0aGlzLnNob3dQYXNzPSF0aGlzLnNob3dQYXNzLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzKCl9LHRvZ2dsZU51bWJlcjpmdW5jdGlvbigpe3RoaXMuc2hvd051bWJlcj0hdGhpcy5zaG93TnVtYmVyLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzKCl9LF9fY2xlYXJUaW1lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHQudGltZXIpfSl9LF9fb25BbmltYXRpb25TdGFydDpmdW5jdGlvbih0KXtpZigwPT09dC5hbmltYXRpb25OYW1lLmluZGV4T2YoXCJ3ZWJraXQtYXV0b2ZpbGwtXCIpKXt2YXIgZT1cIndlYmtpdC1hdXRvZmlsbC1vblwiPT09dC5hbmltYXRpb25OYW1lO2lmKGUhPT10aGlzLmF1dG9maWxsZWQpcmV0dXJuIHQudmFsdWU9dGhpcy5hdXRvZmlsbGVkPWUsdC5lbD10aGlzLHRoaXMuJGVtaXQoXCJhdXRvZmlsbFwiLHQpfX0sX19zZXRNb2RlbDpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpLHRoaXMuX19zZXQodGhpcy5pc051bWJlciYmMD09PXQ/dDp0fHwodGhpcy5pc051bWJlcj9udWxsOlwiXCIpLCEwKX0sX19zZXQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLHM9dCYmdC50YXJnZXQ/dC50YXJnZXQudmFsdWU6dDtpZih0aGlzLmlzTnVtYmVyKXt0aGlzLmlzTmVnWmVybz0xL3M9PS0xLzA7dmFyIG49dGhpcy5pc05lZ1plcm8/LTA6cztpZih0aGlzLm1vZGVsPXMscz1wYXJzZUZsb2F0KHMpLGlzTmFOKHMpfHx0aGlzLmlzTmVnWmVybylyZXR1cm4gdGhpcy5pc051bWJlckVycm9yPSEwLHZvaWQoZSYmKHRoaXMuJGVtaXQoXCJpbnB1dFwiLG4pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7U3RyaW5nKDEvbikhPT1TdHJpbmcoMS9pLnZhbHVlKSYmaS4kZW1pdChcImNoYW5nZVwiLG4pfSkpKTt0aGlzLmlzTnVtYmVyRXJyb3I9ITEsTnVtYmVyLmlzSW50ZWdlcih0aGlzLmRlY2ltYWxzKSYmKHM9cGFyc2VGbG9hdChzLnRvRml4ZWQodGhpcy5kZWNpbWFscykpKX1lbHNlIHRoaXMubG93ZXJDYXNlP3M9cy50b0xvd2VyQ2FzZSgpOnRoaXMudXBwZXJDYXNlJiYocz1zLnRvVXBwZXJDYXNlKCkpLHRoaXMubW9kZWw9czt0aGlzLiRlbWl0KFwiaW5wdXRcIixzKSxlJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHMpIT09SlNPTi5zdHJpbmdpZnkoaS52YWx1ZSkmJmkuJGVtaXQoXCJjaGFuZ2VcIixzKX0pfSxfX3VwZGF0ZUFyZWE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRyZWZzLnNoYWRvdyxlPXRoaXMuJHJlZnMuaW5wdXQ7aWYodCYmZSl7dmFyIGk9dC5zY3JvbGxIZWlnaHQscz1iZXR3ZWVuKGksdC5vZmZzZXRIZWlnaHQsdGhpcy5tYXhIZWlnaHR8fGkpO2Uuc3R5bGUuaGVpZ2h0PXMrXCJweFwiLGUuc3R5bGUub3ZlcmZsb3dZPXRoaXMubWF4SGVpZ2h0JiZzPGk/XCJzY3JvbGxcIjpcImhpZGRlblwifX0sX193YXRjaGVyOmZ1bmN0aW9uKHQpe3RoaXMuaXNUZXh0YXJlYSYmdGhpcy5fX3VwZGF0ZUFyZWEoKSx0aGlzLnNoYWRvdy53YXRjaGVkJiYodGhpcy5zaGFkb3cudmFsPXQpfSxfX3dhdGNoZXJSZWdpc3RlcjpmdW5jdGlvbigpe3RoaXMud2F0Y2hlcnx8KHRoaXMud2F0Y2hlcj10aGlzLiR3YXRjaChcIm1vZGVsXCIsdGhpcy5fX3dhdGNoZXIpKX0sX193YXRjaGVyVW5yZWdpc3RlcjpmdW5jdGlvbih0KXt0aGlzLndhdGNoZXImJih0fHwhdGhpcy5pc1RleHRhcmVhJiYhdGhpcy5zaGFkb3cud2F0Y2hlZCkmJih0aGlzLndhdGNoZXIoKSx0aGlzLndhdGNoZXI9bnVsbCl9LF9fZ2V0VGV4dGFyZWE6ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmFzc2lnbih7cm93czoxfSx0aGlzLiRhdHRycyk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcm93IHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX191cGRhdGVBcmVhfX0pLHQoXCJ0ZXh0YXJlYVwiLHtyZWY6XCJzaGFkb3dcIixzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBxLWlucHV0LXNoYWRvdyBhYnNvbHV0ZS10b3BcIixkb21Qcm9wczp7dmFsdWU6dGhpcy5tb2RlbH0sYXR0cnM6ZX0pLHQoXCJ0ZXh0YXJlYVwiLHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IHEtaW5wdXQtYXJlYVwiLGF0dHJzOk9iamVjdC5hc3NpZ24oe30sZSx7cGxhY2Vob2xkZXI6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLGRpc2FibGVkOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5fSksZG9tUHJvcHM6e3ZhbHVlOnRoaXMubW9kZWx9LG9uOntpbnB1dDp0aGlzLl9fc2V0LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uSW5wdXRCbHVyLGtleWRvd246dGhpcy5fX29uS2V5ZG93bixrZXl1cDp0aGlzLl9fb25LZXl1cCxwYXN0ZTp0aGlzLl9fb25QYXN0ZX19KV0pfSxfX2dldElucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiaW5wdXRcIix7cmVmOlwiaW5wdXRcIixzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBxLW5vLWlucHV0LXNwaW5uZXIgZWxsaXBzaXNcIixjbGFzczp0aGlzLmlucHV0Q2xhc3NlcyxhdHRyczpPYmplY3QuYXNzaWduKHt9LHRoaXMuJGF0dHJzLHt0eXBlOnRoaXMuaW5wdXRUeXBlLHBsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxzdGVwOnRoaXMuY29tcHV0ZWRTdGVwfSksZG9tUHJvcHM6e3ZhbHVlOnRoaXMubW9kZWx9LG9uOntpbnB1dDp0aGlzLl9fc2V0LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uSW5wdXRCbHVyLGtleWRvd246dGhpcy5fX29uS2V5ZG93bixrZXl1cDp0aGlzLl9fb25LZXl1cCxwYXN0ZTp0aGlzLl9fb25QYXN0ZSxhbmltYXRpb25zdGFydDp0aGlzLl9fb25BbmltYXRpb25TdGFydH19KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlQXJlYT1mcmFtZURlYm91bmNlKHRoaXMuX191cGRhdGVBcmVhKSx0aGlzLmlzVGV4dGFyZWEmJih0aGlzLl9fdXBkYXRlQXJlYSgpLHRoaXMuX193YXRjaGVyUmVnaXN0ZXIoKSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fd2F0Y2hlclVucmVnaXN0ZXIoITApfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1pbnB1dFwiLHByb3BzOnRoaXMuZnJhbWVQcm9wcyxvbjp7Y2xpY2s6dGhpcy5fX29uQ2xpY2ssZm9jdXM6dGhpcy5fX29uRm9jdXMscGFzdGU6dGhpcy5fX29uUGFzdGV9fSxbXS5jb25jYXQodGhpcy4kc2xvdHMuYmVmb3JlKS5jb25jYXQoW3RoaXMuaXNUZXh0YXJlYT90aGlzLl9fZ2V0VGV4dGFyZWEodCk6dGhpcy5fX2dldElucHV0KHQpLCF0aGlzLmRpc2FibGUmJnRoaXMuaXNQYXNzd29yZCYmIXRoaXMubm9QYXNzVG9nZ2xlJiYodGhpcy5pbml0aWFsU2hvd1Bhc3N3b3JkfHx0aGlzLmxlbmd0aCkmJnQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W3RoaXMuc2hvd1Bhc3M/XCJzaG93UGFzc1wiOlwiaGlkZVBhc3NcIl19LG5hdGl2ZU9uOnttb3VzZWRvd246dGhpcy5fX2NsZWFyVGltZXIsdG91Y2hzdGFydDp0aGlzLl9fY2xlYXJUaW1lcixjbGljazp0aGlzLnRvZ2dsZVBhc3N9fSl8fHZvaWQgMCx0aGlzLmVkaXRhYmxlJiZ0aGlzLmtleWJvYXJkVG9nZ2xlJiZ0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFt0aGlzLnNob3dOdW1iZXI/XCJzaG93TnVtYmVyXCI6XCJoaWRlTnVtYmVyXCJdfSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6dGhpcy50b2dnbGVOdW1iZXJ9fSl8fHZvaWQgMCx0aGlzLmlzQ2xlYXJhYmxlJiZ0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6dGhpcy5jbGVhcn19KXx8dm9pZCAwLHRoaXMuaXNMb2FkaW5nJiYodGhpcy4kc2xvdHMubG9hZGluZz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmxvYWRpbmcpOnQoUVNwaW5uZXIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e3NpemU6XCIyNHB4XCJ9fSkpfHx2b2lkIDBdKS5jb25jYXQodGhpcy4kc2xvdHMuYWZ0ZXIpLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZS1mdWxsIG5vLXBvaW50ZXItZXZlbnRzXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpOnZvaWQgMCkpfX0sUVJhZGlvPXtuYW1lOlwiUVJhZGlvXCIsbWl4aW5zOltPcHRpb25NaXhpbl0scHJvcHM6e3ZhbDp7cmVxdWlyZWQ6ITB9fSxjb21wdXRlZDp7aXNUcnVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWU9PT10aGlzLnZhbH19LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHl8fCh0JiZzdG9wQW5kUHJldmVudCh0KSxlJiZ0aGlzLiRlbC5ibHVyKCksdGhpcy5pc1RydWV8fHRoaXMuX191cGRhdGUodGhpcy52YWwpKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVyblt0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtcmFkaW8tdW5jaGVja2VkIGN1cnNvci1wb2ludGVyIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLnVuY2hlY2tlZEljb258fHRoaXMuJHEuaWNvbi5yYWRpby51bmNoZWNrZWQubWF0fX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwicS1yYWRpby1jaGVja2VkIGN1cnNvci1wb2ludGVyIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmNoZWNrZWRJY29ufHx0aGlzLiRxLmljb24ucmFkaW8uY2hlY2tlZC5tYXR9fSksdChcImRpdlwiLHtyZWY6XCJyaXBwbGVcIixzdGF0aWNDbGFzczpcInEtcmFkaWFsLXJpcHBsZVwifSldfX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fX2tlYmFiVGFnPVwicS1yYWRpb1wifX0sUVRvZ2dsZT17bmFtZTpcIlFUb2dnbGVcIixtaXhpbnM6W0NoZWNrYm94TWl4aW4sT3B0aW9uTWl4aW5dLHByb3BzOntpY29uOlN0cmluZ30sY29tcHV0ZWQ6e2N1cnJlbnRJY29uOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaXNUcnVlP3RoaXMuY2hlY2tlZEljb246dGhpcy51bmNoZWNrZWRJY29uKXx8dGhpcy5pY29ufSxpY29uQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1RydWU/XCJ3aGl0ZVwiOlwiZGFya1wifSxiYXNlQ2xhc3M6ZnVuY3Rpb24oKXt9fSxtZXRob2RzOntfX3N3aXBlOmZ1bmN0aW9uKHQpe1wibGVmdFwiPT09dC5kaXJlY3Rpb24/dGhpcy5pc1RydWUmJnRoaXMudG9nZ2xlKCk6XCJyaWdodFwiPT09dC5kaXJlY3Rpb24mJnRoaXMuaXNGYWxzZSYmdGhpcy50b2dnbGUoKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10b2dnbGUtYmFzZVwiLGNsYXNzOnRoaXMuYmFzZUNsYXNzfSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9nZ2xlLWhhbmRsZSByb3cgZmxleC1jZW50ZXJcIn0sW3RoaXMuY3VycmVudEljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRvZ2dsZS1pY29uXCIscHJvcHM6e25hbWU6dGhpcy5jdXJyZW50SWNvbixjb2xvcjp0aGlzLmljb25Db2xvcn19KTpudWxsLHQoXCJkaXZcIix7cmVmOlwicmlwcGxlXCIsc3RhdGljQ2xhc3M6XCJxLXJhZGlhbC1yaXBwbGVcIn0pXSldfX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fX2tlYmFiVGFnPVwicS10b2dnbGVcIn19LGNvbXBvbmVudHM9e3JhZGlvOlFSYWRpbyxjaGVja2JveDpRQ2hlY2tib3gsdG9nZ2xlOlFUb2dnbGV9LFFPcHRpb25Hcm91cD17bmFtZTpcIlFPcHRpb25Hcm91cFwiLG1peGluczpbUGFyZW50RmllbGRNaXhpbl0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sdHlwZTp7ZGVmYXVsdDpcInJhZGlvXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInJhZGlvXCIsXCJjaGVja2JveFwiLFwidG9nZ2xlXCJdLmluY2x1ZGVzKHQpfX0sY29sb3I6U3RyaW5nLGtlZXBDb2xvcjpCb29sZWFuLGRhcms6Qm9vbGVhbixvcHRpb25zOnt0eXBlOkFycmF5LHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm5cInZhbHVlXCJpbiB0JiZcImxhYmVsXCJpbiB0fSl9fSxsZWZ0TGFiZWw6Qm9vbGVhbixpbmxpbmU6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NvbXBvbmVudDpmdW5jdGlvbigpe3JldHVybiBjb21wb25lbnRzW3RoaXMudHlwZV19LG1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5zbGljZSgpOnRoaXMudmFsdWV9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlP1wicmFkaW9cIj09PXRoaXMudHlwZT8xOnRoaXMudmFsdWUubGVuZ3RoOjB9LF9fbmVlZHNCb3JkZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LG1ldGhvZHM6e19fb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuJGVtaXQoXCJmb2N1c1wiKX0sX19vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiYmx1clwiKX0sX191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciB0PUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk7XCJyYWRpb1wiPT09dGhpcy50eXBlP3QmJmNvbnNvbGUuZXJyb3IoXCJxLW9wdGlvbi1ncm91cDogbW9kZWwgc2hvdWxkIG5vdCBiZSBhcnJheVwiKTp0fHxjb25zb2xlLmVycm9yKFwicS1vcHRpb24tZ3JvdXA6IG1vZGVsIHNob3VsZCBiZSBhcnJheSBpbiB5b3VyIGNhc2VcIil9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1vcHRpb24tZ3JvdXAgZ3JvdXBcIixjbGFzczp7XCJxLW9wdGlvbi1ncm91cC1pbmxpbmUtb3B0c1wiOnRoaXMuaW5saW5lfX0sdGhpcy5vcHRpb25zLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChcImRpdlwiLFt0KGUuY29tcG9uZW50LHtwcm9wczp7dmFsdWU6ZS52YWx1ZSx2YWw6aS52YWx1ZSxyZWFkb25seTplLnJlYWRvbmx5fHxpLnJlYWRvbmx5LGRpc2FibGU6ZS5kaXNhYmxlfHxpLmRpc2FibGUsbGFiZWw6aS5sYWJlbCxsZWZ0TGFiZWw6ZS5sZWZ0TGFiZWx8fGkubGVmdExhYmVsLGNvbG9yOmkuY29sb3J8fGUuY29sb3IsY2hlY2tlZEljb246aS5jaGVja2VkSWNvbix1bmNoZWNrZWRJY29uOmkudW5jaGVja2VkSWNvbixkYXJrOmkuZGFya3x8ZS5kYXJrLGtlZXBDb2xvcjppLmtlZXBDb2xvcnx8ZS5rZWVwQ29sb3J9LG9uOntpbnB1dDplLl9fdXBkYXRlLGZvY3VzOmUuX19vbkZvY3VzLGJsdXI6ZS5fX29uQmx1cn19KV0pfSkpfX0sUURpYWxvZz17bmFtZTpcIlFEaWFsb2dcIixwcm9wczp7dmFsdWU6Qm9vbGVhbix0aXRsZTpTdHJpbmcsbWVzc2FnZTpTdHJpbmcscHJvbXB0Ok9iamVjdCxvcHRpb25zOk9iamVjdCxvazp7dHlwZTpbU3RyaW5nLE9iamVjdCxCb29sZWFuXSxkZWZhdWx0OiEwfSxjYW5jZWw6W1N0cmluZyxPYmplY3QsQm9vbGVhbl0sc3RhY2tCdXR0b25zOkJvb2xlYW4scHJldmVudENsb3NlOkJvb2xlYW4sbm9CYWNrZHJvcERpc21pc3M6Qm9vbGVhbixub0VzY0Rpc21pc3M6Qm9vbGVhbixub1JlZm9jdXM6Qm9vbGVhbixwb3NpdGlvbjpTdHJpbmcsY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVtdLHM9dGhpcy4kc2xvdHMudGl0bGV8fHRoaXMudGl0bGUsbj10aGlzLiRzbG90cy5tZXNzYWdlfHx0aGlzLm1lc3NhZ2U7cmV0dXJuIHMmJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtaGVhZGVyXCJ9LFtzXSkpLG4mJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYm9keSBtb2RhbC1tZXNzYWdlIG1vZGFsLXNjcm9sbFwifSxbbl0pKSwodGhpcy5oYXNGb3JtfHx0aGlzLiRzbG90cy5ib2R5KSYmaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1ib2R5IG1vZGFsLXNjcm9sbFwifSx0aGlzLmhhc0Zvcm0/dGhpcy5wcm9tcHQ/dGhpcy5fX2dldFByb21wdCh0KTp0aGlzLl9fZ2V0T3B0aW9ucyh0KTpbdGhpcy4kc2xvdHMuYm9keV0pKSx0aGlzLiRzY29wZWRTbG90cy5idXR0b25zP2kucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYnV0dG9uc1wiLGNsYXNzOnRoaXMuYnV0dG9uQ2xhc3N9LFt0aGlzLiRzY29wZWRTbG90cy5idXR0b25zKHtvazp0aGlzLl9fb25PayxjYW5jZWw6dGhpcy5fX29uQ2FuY2VsfSldKSk6KHRoaXMub2t8fHRoaXMuY2FuY2VsKSYmaS5wdXNoKHRoaXMuX19nZXRCdXR0b25zKHQpKSx0KFFNb2RhbCx7cmVmOlwibW9kYWxcIixwcm9wczp7dmFsdWU6dGhpcy52YWx1ZSxtaW5pbWl6ZWQ6ITAsbm9CYWNrZHJvcERpc21pc3M6dGhpcy5ub0JhY2tkcm9wRGlzbWlzc3x8dGhpcy5wcmV2ZW50Q2xvc2Usbm9Fc2NEaXNtaXNzOnRoaXMubm9Fc2NEaXNtaXNzfHx0aGlzLnByZXZlbnRDbG9zZSxub1JlZm9jdXM6dGhpcy5ub1JlZm9jdXMscG9zaXRpb246dGhpcy5wb3NpdGlvbn0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJpbnB1dFwiLHQpfSxzaG93OmZ1bmN0aW9uKCl7aWYoZS4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wKXt2YXIgdDtpZigoZS5wcm9tcHR8fGUub3B0aW9ucykmJih0PWUucHJvbXB0P2UuJHJlZnMubW9kYWwuJGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiSU5QVVRcIik6ZS4kcmVmcy5tb2RhbC4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInEtb3B0aW9uXCIpKS5sZW5ndGgpcmV0dXJuIHRbMF0uZm9jdXMoKSx2b2lkIGUuJGVtaXQoXCJzaG93XCIpOyh0PWUuJHJlZnMubW9kYWwuJGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJxLWJ0blwiKSkubGVuZ3RoJiZ0W3QubGVuZ3RoLTFdLmZvY3VzKCksZS4kZW1pdChcInNob3dcIil9ZWxzZSBlLiRlbWl0KFwic2hvd1wiKX0saGlkZTpmdW5jdGlvbigpe2UuJGVtaXQoXCJoaWRlXCIpfSxkaXNtaXNzOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImNhbmNlbFwiKX0sXCJlc2NhcGUta2V5XCI6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiZXNjYXBlLWtleVwiKX19fSxpKX0sY29tcHV0ZWQ6e2hhc0Zvcm06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9tcHR8fHRoaXMub3B0aW9uc30sb2tMYWJlbDpmdW5jdGlvbigpe3JldHVybiEwPT09dGhpcy5vaz90aGlzLiRxLmkxOG4ubGFiZWwub2s6dGhpcy5va30sY2FuY2VsTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PXRoaXMuY2FuY2VsP3RoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWw6dGhpcy5jYW5jZWx9LGJ1dHRvbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhY2tCdXR0b25zP1wiY29sdW1uXCI6XCJyb3dcIn0sb2tQcm9wczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QodGhpcy5vayk9PT10aGlzLm9rP09iamVjdC5hc3NpZ24oe2NvbG9yOnRoaXMuY29sb3IsbGFiZWw6dGhpcy4kcS5pMThuLmxhYmVsLm9rLG5vUmlwcGxlOiEwfSx0aGlzLm9rKTp7Y29sb3I6dGhpcy5jb2xvcixmbGF0OiEwLGxhYmVsOnRoaXMub2tMYWJlbCxub1JpcHBsZTohMH19LGNhbmNlbFByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdCh0aGlzLmNhbmNlbCk9PT10aGlzLmNhbmNlbD9PYmplY3QuYXNzaWduKHtjb2xvcjp0aGlzLmNvbG9yLGxhYmVsOnRoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWwsbm9SaXBwbGU6ITB9LHRoaXMuY2FuY2VsKTp7Y29sb3I6dGhpcy5jb2xvcixmbGF0OiEwLGxhYmVsOnRoaXMuY2FuY2VsTGFiZWwsbm9SaXBwbGU6ITB9fX0sbWV0aG9kczp7c2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLm1vZGFsLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuJHJlZnMubW9kYWw/dGhpcy4kcmVmcy5tb2RhbC5oaWRlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0Lmhhc0Zvcm0/Y2xvbmUodC5fX2dldERhdGEoKSk6dm9pZCAwfSk6UHJvbWlzZS5yZXNvbHZlKCl9LF9fZ2V0UHJvbXB0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuW3QoUUlucHV0LHtzdHlsZTpcIm1hcmdpbi1ib3R0b206IDEwcHhcIixwcm9wczp7dmFsdWU6dGhpcy5wcm9tcHQubW9kZWwsdHlwZTp0aGlzLnByb21wdC50eXBlfHxcInRleHRcIixjb2xvcjp0aGlzLmNvbG9yLG5vUGFzc1RvZ2dsZTohMH0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UucHJvbXB0Lm1vZGVsPXR9LGtleXVwOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJmUuX19vbk9rKCl9fX0pXX0sX19nZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuW3QoUU9wdGlvbkdyb3VwLHtwcm9wczp7dmFsdWU6dGhpcy5vcHRpb25zLm1vZGVsLHR5cGU6dGhpcy5vcHRpb25zLnR5cGUsY29sb3I6dGhpcy5jb2xvcixpbmxpbmU6dGhpcy5vcHRpb25zLmlubGluZSxvcHRpb25zOnRoaXMub3B0aW9ucy5pdGVtc30sb246e2NoYW5nZTpmdW5jdGlvbih0KXtlLm9wdGlvbnMubW9kZWw9dH19fSldfSxfX2dldEJ1dHRvbnM6ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHRoaXMuY2FuY2VsJiZlLnB1c2godChRQnRuLHtwcm9wczp0aGlzLmNhbmNlbFByb3BzLG9uOntjbGljazp0aGlzLl9fb25DYW5jZWx9fSkpLHRoaXMub2smJmUucHVzaCh0KFFCdG4se3Byb3BzOnRoaXMub2tQcm9wcyxvbjp7Y2xpY2s6dGhpcy5fX29uT2t9fSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1idXR0b25zXCIsY2xhc3M6dGhpcy5idXR0b25DbGFzc30sZSl9LF9fb25PazpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oZSl7dC4kZW1pdChcIm9rXCIsZSl9KX0sX19vbkNhbmNlbDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiY2FuY2VsXCIpfSl9LF9fZ2V0RGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21wdD90aGlzLnByb21wdC5tb2RlbDp0aGlzLm9wdGlvbnM/dGhpcy5vcHRpb25zLm1vZGVsOnZvaWQgMH19fTtmdW5jdGlvbiBkZWJvdW5jZSh0LGUsaSl7dmFyIHM7ZnVuY3Rpb24gbigpe2Zvcih2YXIgbj10aGlzLG89W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspb1tyXT1hcmd1bWVudHNbcl07Y2xlYXJUaW1lb3V0KHMpLGkmJiFzJiZ0LmFwcGx5KHRoaXMsbykscz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGl8fHQuYXBwbHkobixvKX0sZSl9cmV0dXJuIHZvaWQgMD09PWUmJihlPTI1MCksbi5jYW5jZWw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyl9LG59dmFyIFFUb29sdGlwPXtuYW1lOlwiUVRvb2x0aXBcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOnthbmNob3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0b3AgbWlkZGxlXCIsdmFsaWRhdG9yOnBvc2l0aW9uVmFsaWRhdG9yfSxzZWxmOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tIG1pZGRsZVwiLHZhbGlkYXRvcjpwb3NpdGlvblZhbGlkYXRvcn0sb2Zmc2V0Ont0eXBlOkFycmF5LHZhbGlkYXRvcjpvZmZzZXRWYWxpZGF0b3J9LGRlbGF5Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LG1heEhlaWdodDpTdHJpbmcsZGlzYWJsZTpCb29sZWFufSx3YXRjaDp7JHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9fSxjb21wdXRlZDp7YW5jaG9yT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlUG9zaXRpb24odGhpcy5hbmNob3IpfSxzZWxmT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlUG9zaXRpb24odGhpcy5zZWxmKX19LG1ldGhvZHM6e19fc2hvdzpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKSx0aGlzLnNjcm9sbFRhcmdldD1nZXRTY3JvbGxUYXJnZXQodGhpcy5hbmNob3JFbCksdGhpcy5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuaGlkZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX2RlYm91bmNlZFVwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGUmJmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5oaWRlLCEwKSx0aGlzLl9fdXBkYXRlUG9zaXRpb24oKSx0aGlzLnNob3dQcm9taXNlJiZ0aGlzLnNob3dQcm9taXNlUmVzb2x2ZSgpfSxfX2hpZGU6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYW51cCgpLHRoaXMuaGlkZVByb21pc2UmJnRoaXMuaGlkZVByb21pc2VSZXNvbHZlKCl9LF9fY2xlYW51cDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5oaWRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9fZGVib3VuY2VkVXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLiRlbC5yZW1vdmUoKSx0aGlzLiRxLnBsYXRmb3JtLmlzLm1vYmlsZSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmhpZGUsITApfSxfX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7c2V0UG9zaXRpb24oe2VsOnRoaXMuJGVsLGFuaW1hdGU6ITAsb2Zmc2V0OnRoaXMub2Zmc2V0LGFuY2hvckVsOnRoaXMuYW5jaG9yRWwsYW5jaG9yT3JpZ2luOnRoaXMuYW5jaG9yT3JpZ2luLHNlbGZPcmlnaW46dGhpcy5zZWxmT3JpZ2luLG1heEhlaWdodDp0aGlzLm1heEhlaWdodH0pfSxfX2RlbGF5U2hvdzpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy5zaG93LHRoaXMuZGVsYXkpfSxfX2RlbGF5SGlkZTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmhpZGUoKX19LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcilyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbHRpcCBhbmltYXRlLXBvcHVwXCJ9LFt0KFwiZGl2XCIsdGhpcy4kc2xvdHMuZGVmYXVsdCldKX0sYmVmb3JlTW91bnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19kZWJvdW5jZWRVcGRhdGVQb3NpdGlvbj1kZWJvdW5jZShmdW5jdGlvbigpe3QuX191cGRhdGVQb3NpdGlvbigpfSw3MCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kZWwub2Zmc2V0SGVpZ2h0LHQuYW5jaG9yRWw9dC4kZWwucGFyZW50Tm9kZSx0LmFuY2hvckVsLnJlbW92ZUNoaWxkKHQuJGVsKSwodC5hbmNob3JFbC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLXBvcHVwLS1za2lwXCIpfHx0LmFuY2hvckVsLmNsYXNzTGlzdC5jb250YWlucyhcIm5vLXBvaW50ZXItZXZlbnRzXCIpKSYmKHQuYW5jaG9yRWw9dC5hbmNob3JFbC5wYXJlbnROb2RlKSx0LiRxLnBsYXRmb3JtLmlzLm1vYmlsZT90LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQuc2hvdyk6KHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix0Ll9fZGVsYXlTaG93KSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHQuX19kZWxheVNob3cpLHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0Ll9fZGVsYXlIaWRlKSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdC5fX2RlbGF5SGlkZSkpLHQudmFsdWUmJnQuc2hvdygpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpLHRoaXMuYW5jaG9yRWwmJih0aGlzLiRxLnBsYXRmb3JtLmlzLm1vYmlsZT90aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuc2hvdyk6KHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix0aGlzLl9fZGVsYXlTaG93KSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX19kZWxheVNob3cpLHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0aGlzLl9fZGVsYXlIaWRlKSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5fX2RlbGF5SGlkZSkpKX19O2Z1bmN0aW9uIHJ1bih0LGUsaSl7ZS5oYW5kbGVyP2UuaGFuZGxlcih0LGksaS5jYXJldCk6aS5ydW5DbWQoZS5jbWQsZS5wYXJhbSl9ZnVuY3Rpb24gZ2V0QnRuKHQsZSxpLHMsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBvPW58fFwidG9nZ2xlXCI9PT1pLnR5cGUmJihpLnRvZ2dsZWQ/aS50b2dnbGVkKGUpOmkuY21kJiZlLmNhcmV0LmlzKGkuY21kLGkucGFyYW0pKSxyPVtdLGE9e2NsaWNrOmZ1bmN0aW9uKHQpe3MmJnMoKSxydW4odCxpLGUpfX07aWYoaS50aXAmJmUuJHEucGxhdGZvcm0uaXMuZGVza3RvcCl7dmFyIGw9aS5rZXk/dChcImRpdlwiLFt0KFwic21hbGxcIixcIihDVFJMICsgXCIrU3RyaW5nLmZyb21DaGFyQ29kZShpLmtleSkrXCIpXCIpXSk6bnVsbDtyLnB1c2godChRVG9vbHRpcCx7cHJvcHM6e2RlbGF5OjFlM319LFt0KFwiZGl2XCIse2RvbVByb3BzOntpbm5lckhUTUw6aS50aXB9fSksbF0pKX1yZXR1cm4gdChRQnRuLHtwcm9wczpPYmplY3QuYXNzaWduKHt9LGUuYnV0dG9uUHJvcHMse2ljb246aS5pY29uLGNvbG9yOm8/aS50b2dnbGVDb2xvcnx8ZS50b29sYmFyVG9nZ2xlQ29sb3I6aS5jb2xvcnx8ZS50b29sYmFyQ29sb3IsdGV4dENvbG9yOm8mJihlLnRvb2xiYXJGbGF0fHxlLnRvb2xiYXJPdXRsaW5lKT9udWxsOmkudGV4dENvbG9yfHxlLnRvb2xiYXJUZXh0Q29sb3IsbGFiZWw6aS5sYWJlbCxkaXNhYmxlOiEhaS5kaXNhYmxlJiYoXCJmdW5jdGlvblwiIT10eXBlb2YgaS5kaXNhYmxlfHxpLmRpc2FibGUoZSkpfSksb246YX0scil9ZnVuY3Rpb24gZ2V0RHJvcGRvd24odCxlLGkpe3ZhciBzLG4sbz1pLmxhYmVsLHI9aS5pY29uLGE9XCJuby1pY29uc1wiPT09aS5saXN0O2Z1bmN0aW9uIGwoKXtoLmNvbXBvbmVudEluc3RhbmNlLmhpZGUoKX1cIm9ubHktaWNvbnNcIj09PWkubGlzdD8obj1pLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPXZvaWQgMD09PWkudHlwZSYmZS5jYXJldC5pcyhpLmNtZCxpLnBhcmFtKTtyZXR1cm4gcyYmKG89aS50aXAscj1pLmljb24pLGdldEJ0bih0LGUsaSxsLHMpfSkscz1lLnRvb2xiYXJCYWNrZ3JvdW5kQ2xhc3Msbj1bdChRQnRuR3JvdXAse3Byb3BzOmUuYnV0dG9uUHJvcHMsc3RhdGljQ2xhc3M6XCJyZWxhdGl2ZS1wb3NpdGlvbiBxLWVkaXRvci10b29sYmFyLXBhZGRpbmdcIixzdHlsZTp7Ym9yZGVyUmFkaXVzOlwiMFwifX0sbildKToobj1pLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPSEhaS5kaXNhYmxlJiZpLmRpc2FibGUoZSksbj12b2lkIDA9PT1pLnR5cGUmJmUuY2FyZXQuaXMoaS5jbWQsaS5wYXJhbSk7biYmKG89aS50aXAscj1pLmljb24pO3ZhciBjPWkuaHRtbFRpcDtyZXR1cm4gdChRSXRlbSx7cHJvcHM6e2FjdGl2ZTpuLGxpbms6IXN9LGNsYXNzOntkaXNhYmxlZDpzfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24odCl7c3x8KGwoKSxlLiRyZWZzLmNvbnRlbnQmJmUuJHJlZnMuY29udGVudC5mb2N1cygpLGUuY2FyZXQucmVzdG9yZSgpLHJ1bih0LGksZSkpfX19LFthP1wiXCI6dChRSXRlbVNpZGUse3Byb3BzOntpY29uOmkuaWNvbn19KSx0KFFJdGVtTWFpbix7cHJvcHM6IWMmJmkudGlwP3tsYWJlbDppLnRpcH06bnVsbCxkb21Qcm9wczpjP3tpbm5lckhUTUw6aS5odG1sVGlwfTpudWxsfSldKX0pLHM9W2UudG9vbGJhckJhY2tncm91bmRDbGFzcyxlLnRvb2xiYXJUZXh0Q29sb3I/XCJ0ZXh0LVwiK2UudG9vbGJhclRleHRDb2xvcjpcIlwiXSxuPVt0KFFMaXN0LHtwcm9wczp7c2VwYXJhdG9yOiEwfX0sW25dKV0pO3ZhciBjPWkuaGlnaGxpZ2h0JiZvIT09aS5sYWJlbCxoPXQoUUJ0bkRyb3Bkb3duLHtwcm9wczpPYmplY3QuYXNzaWduKHt9LGUuYnV0dG9uUHJvcHMse25vQ2FwczohMCxub1dyYXA6ITAsY29sb3I6Yz9lLnRvb2xiYXJUb2dnbGVDb2xvcjplLnRvb2xiYXJDb2xvcix0ZXh0Q29sb3I6YyYmKGUudG9vbGJhckZsYXR8fGUudG9vbGJhck91dGxpbmUpP251bGw6ZS50b29sYmFyVGV4dENvbG9yLGxhYmVsOmkuZml4ZWRMYWJlbD9pLmxhYmVsOm8saWNvbjppLmZpeGVkSWNvbj9pLmljb246cixjb250ZW50Q2xhc3M6c30pfSxuKTtyZXR1cm4gaH1mdW5jdGlvbiBnZXRUb29sYmFyKHQsZSl7aWYoZS5jYXJldClyZXR1cm4gZS5idXR0b25zLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRQnRuR3JvdXAse3Byb3BzOmUuYnV0dG9uUHJvcHMsc3RhdGljQ2xhc3M6XCJpdGVtcy1jZW50ZXIgcmVsYXRpdmUtcG9zaXRpb25cIn0saS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuXCJzbG90XCI9PT1pLnR5cGU/ZS4kc2xvdHNbaS5zbG90XTpcImRyb3Bkb3duXCI9PT1pLnR5cGU/Z2V0RHJvcGRvd24odCxlLGkpOmdldEJ0bih0LGUsaSl9KSl9KX1mdW5jdGlvbiBnZXRGb250cyh0LGUsaSxzKXt2b2lkIDA9PT1zJiYocz17fSk7dmFyIG49T2JqZWN0LmtleXMocyk7aWYoMD09PW4ubGVuZ3RoKXJldHVybnt9O3ZhciBvPXtkZWZhdWx0X2ZvbnQ6e2NtZDpcImZvbnROYW1lXCIscGFyYW06dCxpY29uOmksdGlwOmV9fTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXNbdF07b1t0XT17Y21kOlwiZm9udE5hbWVcIixwYXJhbTplLGljb246aSx0aXA6ZSxodG1sVGlwOic8Zm9udCBmYWNlPVwiJytlKydcIj4nK2UrXCI8L2ZvbnQ+XCJ9fSksb31mdW5jdGlvbiBnZXRMaW5rRWRpdG9yKHQsZSl7aWYoZS5jYXJldCl7dmFyIGk9ZS50b29sYmFyQ29sb3J8fGUudG9vbGJhclRleHRDb2xvcixzPWUuZWRpdExpbmtVcmwsbj1mdW5jdGlvbigpe2UuY2FyZXQucmVzdG9yZSgpLHMhPT1lLmVkaXRMaW5rVXJsJiZkb2N1bWVudC5leGVjQ29tbWFuZChcImNyZWF0ZUxpbmtcIiwhMSxcIlwiPT09cz9cIiBcIjpzKSxlLmVkaXRMaW5rVXJsPW51bGx9O3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1teC14c1wiLGNsYXNzOlwidGV4dC1cIitpfSxbZS4kcS5pMThuLmVkaXRvci51cmwrXCI6IFwiXSksdChRSW5wdXQse2tleTpcInFlZHRfYnRtX2lucHV0XCIsc3RhdGljQ2xhc3M6XCJxLW1hLW5vbmUgcS1wYS1ub25lIGNvbCBxLWVkaXRvci1pbnB1dFwiLHByb3BzOnt2YWx1ZTpzLGNvbG9yOmksYXV0b2ZvY3VzOiEwLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtzPXR9LGtleWRvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksbigpO2Nhc2UgMjc6ZS5jYXJldC5yZXN0b3JlKCksIWUuZWRpdExpbmtVcmwmJmRvY3VtZW50LmV4ZWNDb21tYW5kKFwidW5saW5rXCIpLGUuZWRpdExpbmtVcmw9bnVsbH19fX0pLHQoUUJ0bkdyb3VwLHtrZXk6XCJxZWR0X2J0bV9ncnBcIixwcm9wczplLmJ1dHRvblByb3BzfSxbdChRQnRuLHtrZXk6XCJxZWR0X2J0bV9yZW1cIixhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOk9iamVjdC5hc3NpZ24oe30sZS5idXR0b25Qcm9wcyx7bGFiZWw6ZS4kcS5pMThuLmxhYmVsLnJlbW92ZSxub0NhcHM6ITB9KSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLmNhcmV0LnJlc3RvcmUoKSxkb2N1bWVudC5leGVjQ29tbWFuZChcInVubGlua1wiKSxlLmVkaXRMaW5rVXJsPW51bGx9fX0pLHQoUUJ0bix7a2V5OlwicWVkdF9idG1fdXBkXCIscHJvcHM6T2JqZWN0LmFzc2lnbih7fSxlLmJ1dHRvblByb3BzLHtsYWJlbDplLiRxLmkxOG4ubGFiZWwudXBkYXRlLG5vQ2FwczohMH0pLG9uOntjbGljazpufX0pXSldfX1mdW5jdGlvbiBnZXRCbG9ja0VsZW1lbnQodCxlKXtpZihlJiZ0PT09ZSlyZXR1cm4gbnVsbDt2YXIgaT0od2luZG93LmdldENvbXB1dGVkU3R5bGU/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6dC5jdXJyZW50U3R5bGUpLmRpc3BsYXk7cmV0dXJuXCJibG9ja1wiPT09aXx8XCJ0YWJsZVwiPT09aT90OmdldEJsb2NrRWxlbWVudCh0LnBhcmVudE5vZGUpfWZ1bmN0aW9uIGlzQ2hpbGRPZih0LGUpe2lmKCF0KXJldHVybiExO2Zvcig7dD10LnBhcmVudE5vZGU7KXtpZih0PT09ZG9jdW1lbnQuYm9keSlyZXR1cm4hMTtpZih0PT09ZSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgdXJsUmVnZXg9L15odHRwcz86XFwvXFwvLyxDYXJldD1mdW5jdGlvbih0LGUpe3RoaXMuZWw9dCx0aGlzLnZtPWV9LHByb3RvdHlwZUFjY2Vzc29ycz17c2VsZWN0aW9uOntjb25maWd1cmFibGU6ITB9LGhhc1NlbGVjdGlvbjp7Y29uZmlndXJhYmxlOiEwfSxyYW5nZTp7Y29uZmlndXJhYmxlOiEwfSxwYXJlbnQ6e2NvbmZpZ3VyYWJsZTohMH0sYmxvY2tQYXJlbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3Byb3RvdHlwZUFjY2Vzc29ycy5zZWxlY3Rpb24uZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5lbCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIGlzQ2hpbGRPZih0LmFuY2hvck5vZGUsdGhpcy5lbCkmJmlzQ2hpbGRPZih0LmZvY3VzTm9kZSx0aGlzLmVsKT90OnZvaWQgMH19LHByb3RvdHlwZUFjY2Vzc29ycy5oYXNTZWxlY3Rpb24uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uP3RoaXMuc2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoPjA6bnVsbH0scHJvdG90eXBlQWNjZXNzb3JzLnJhbmdlLmdldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2VsZWN0aW9uO2lmKHQpcmV0dXJuIHQucmFuZ2VDb3VudD90LmdldFJhbmdlQXQoMCk6bnVsbH0scHJvdG90eXBlQWNjZXNzb3JzLnBhcmVudC5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJhbmdlO2lmKHQpe3ZhciBlPXQuc3RhcnRDb250YWluZXI7cmV0dXJuIGUubm9kZVR5cGU9PT1kb2N1bWVudC5FTEVNRU5UX05PREU/ZTplLnBhcmVudE5vZGV9fSxwcm90b3R5cGVBY2Nlc3NvcnMuYmxvY2tQYXJlbnQuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnQ7aWYodClyZXR1cm4gZ2V0QmxvY2tFbGVtZW50KHQsdGhpcy5lbCl9LENhcmV0LnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXRoaXMucmFuZ2UpLHRoaXMuX3JhbmdlPXR9LENhcmV0LnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXRoaXMuX3JhbmdlKTt2YXIgZT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLGk9ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7dD8oZS5zZXRTdGFydCh0LnN0YXJ0Q29udGFpbmVyLHQuc3RhcnRPZmZzZXQpLGUuc2V0RW5kKHQuZW5kQ29udGFpbmVyLHQuZW5kT2Zmc2V0KSxpLnJlbW92ZUFsbFJhbmdlcygpLGkuYWRkUmFuZ2UoZSkpOihpLnNlbGVjdEFsbENoaWxkcmVuKHRoaXMuZWwpLGkuY29sbGFwc2VUb0VuZCgpKX0sQ2FyZXQucHJvdG90eXBlLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe3ZhciBpPWU/dGhpcy5wYXJlbnQ6dGhpcy5ibG9ja1BhcmVudDtyZXR1cm4hIWkmJmkubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sQ2FyZXQucHJvdG90eXBlLmhhc1BhcmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnQ7cmV0dXJuISFlJiZ0LmluY2x1ZGVzKGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl9LENhcmV0LnByb3RvdHlwZS5pcz1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlXCJmb3JtYXRCbG9ja1wiOnJldHVyblwiRElWXCI9PT1lJiZ0aGlzLnBhcmVudD09PXRoaXMuZWx8fHRoaXMuaGFzUGFyZW50KGUsXCJQUkVcIj09PWUpO2Nhc2VcImxpbmtcIjpyZXR1cm4gdGhpcy5oYXNQYXJlbnQoXCJBXCIsITApO2Nhc2VcImZvbnRTaXplXCI6cmV0dXJuIGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFZhbHVlKHQpPT09ZTtjYXNlXCJmb250TmFtZVwiOnZhciBpPWRvY3VtZW50LnF1ZXJ5Q29tbWFuZFZhbHVlKHQpO3JldHVybiBpPT09J1wiJytlKydcIid8fGk9PT1lO2Nhc2VcImZ1bGxzY3JlZW5cIjpyZXR1cm4gdGhpcy52bS5pbkZ1bGxzY3JlZW47Y2FzZSB2b2lkIDA6cmV0dXJuITE7ZGVmYXVsdDp2YXIgcz1kb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSh0KTtyZXR1cm4gZT9zPT09ZTpzfX0sQ2FyZXQucHJvdG90eXBlLmdldFBhcmVudEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0QXR0cmlidXRlKHQpfSxDYXJldC5wcm90b3R5cGUuY2FuPWZ1bmN0aW9uKHQpe2lmKFwib3V0ZGVudFwiPT09dClyZXR1cm4gdGhpcy5oYXNQYXJlbnRzKFtcImJsb2NrcXVvdGVcIixcImxpXCJdKTtpZihcImluZGVudFwiPT09dCl7dmFyIGU9ISF0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihcImJsb2NrcXVvdGVcIj09PWUpcmV0dXJuITE7aWYoXCJsaVwiPT09ZSl7dmFyIGk9dGhpcy5wYXJlbnQucHJldmlvdXNTaWJsaW5nO3JldHVybiBpJiZcImxpXCI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9cmV0dXJuITF9fSxDYXJldC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24odCxlLGkpe2lmKHZvaWQgMD09PWkmJihpPWZ1bmN0aW9uKCl7fSksXCJmb3JtYXRCbG9ja1wiPT09dClbXCJCTE9DS1FVT1RFXCIsXCJIMVwiLFwiSDJcIixcIkgzXCIsXCJINFwiLFwiSDVcIixcIkg2XCJdLmluY2x1ZGVzKGUpJiZ0aGlzLmlzKHQsZSkmJih0PVwib3V0ZGVudFwiLGU9bnVsbCksXCJQUkVcIj09PWUmJnRoaXMuaXModCxcIlBSRVwiKSYmKGU9XCJQXCIpO2Vsc2V7aWYoXCJwcmludFwiPT09dCl7aSgpO3ZhciBzPXdpbmRvdy5vcGVuKCk7cmV0dXJuIHMuZG9jdW1lbnQud3JpdGUoXCJcXG4gICAgICAgIDwhZG9jdHlwZSBodG1sPlxcbiAgICAgICAgPGh0bWw+XFxuICAgICAgICAgIDxoZWFkPlxcbiAgICAgICAgICAgIDx0aXRsZT5QcmludCAtIFwiK2RvY3VtZW50LnRpdGxlK1wiPC90aXRsZT5cXG4gICAgICAgICAgPC9oZWFkPlxcbiAgICAgICAgICA8Ym9keT5cXG4gICAgICAgICAgICA8ZGl2PlwiK3RoaXMuZWwuaW5uZXJIVE1MK1wiPC9kaXY+XFxuICAgICAgICAgIDwvYm9keT5cXG4gICAgICAgIDwvaHRtbD5cXG4gICAgICBcIikscy5wcmludCgpLHZvaWQgcy5jbG9zZSgpfWlmKFwibGlua1wiPT09dCl7dmFyIG49dGhpcy5nZXRQYXJlbnRBdHRyaWJ1dGUoXCJocmVmXCIpO2lmKG4pdGhpcy52bS5lZGl0TGlua1VybD1uO2Vsc2V7dmFyIG89dGhpcy5zZWxlY3RXb3JkKHRoaXMuc2VsZWN0aW9uKSxyPW8/by50b1N0cmluZygpOlwiXCI7aWYoIXIubGVuZ3RoKXJldHVybjt0aGlzLnZtLmVkaXRMaW5rVXJsPXVybFJlZ2V4LnRlc3Qocik/cjpcIlwiLGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY3JlYXRlTGlua1wiLCExLFwiXCI9PT10aGlzLnZtLmVkaXRMaW5rVXJsP1wiIFwiOnRoaXMudm0uZWRpdExpbmtVcmwpfXJldHVybiB0aGlzLnJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLnBhcmVudCksdm9pZCB0aGlzLnNhdmUoKX1pZihcImZ1bGxzY3JlZW5cIj09PXQpcmV0dXJuIHRoaXMudm0udG9nZ2xlRnVsbHNjcmVlbigpLHZvaWQgaSgpfWRvY3VtZW50LmV4ZWNDb21tYW5kKHQsITEsZSksaSgpfSxDYXJldC5wcm90b3R5cGUuc2VsZWN0V29yZD1mdW5jdGlvbih0KXtpZighdC5pc0NvbGxhcHNlZClyZXR1cm4gdDt2YXIgZT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2Uuc2V0U3RhcnQodC5hbmNob3JOb2RlLHQuYW5jaG9yT2Zmc2V0KSxlLnNldEVuZCh0LmZvY3VzTm9kZSx0LmZvY3VzT2Zmc2V0KTt2YXIgaT1lLmNvbGxhcHNlZD9bXCJiYWNrd2FyZFwiLFwiZm9yd2FyZFwiXTpbXCJmb3J3YXJkXCIsXCJiYWNrd2FyZFwiXTtlLmRldGFjaCgpO3ZhciBzPXQuZm9jdXNOb2RlLG49dC5mb2N1c09mZnNldDtyZXR1cm4gdC5jb2xsYXBzZSh0LmFuY2hvck5vZGUsdC5hbmNob3JPZmZzZXQpLHQubW9kaWZ5KFwibW92ZVwiLGlbMF0sXCJjaGFyYWN0ZXJcIiksdC5tb2RpZnkoXCJtb3ZlXCIsaVsxXSxcIndvcmRcIiksdC5leHRlbmQocyxuKSx0Lm1vZGlmeShcImV4dGVuZFwiLGlbMV0sXCJjaGFyYWN0ZXJcIiksdC5tb2RpZnkoXCJleHRlbmRcIixpWzBdLFwid29yZFwiKSx0fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXJldC5wcm90b3R5cGUscHJvdG90eXBlQWNjZXNzb3JzKTt2YXIgdG9TdHJpbmc9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoYXNPd249T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjbGFzczJ0eXBlPXt9O2Z1bmN0aW9uIHR5cGUodCl7cmV0dXJuIG51bGw9PT10P1N0cmluZyh0KTpjbGFzczJ0eXBlW3RvU3RyaW5nLmNhbGwodCldfHxcIm9iamVjdFwifWZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodCl7aWYoIXR8fFwib2JqZWN0XCIhPT10eXBlKHQpKXJldHVybiExO2lmKHQuY29uc3RydWN0b3ImJiFoYXNPd24uY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJiFoYXNPd24uY2FsbCh0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcImlzUHJvdG90eXBlT2ZcIikpcmV0dXJuITE7dmFyIGU7Zm9yKGUgaW4gdCk7cmV0dXJuIHZvaWQgMD09PWV8fGhhc093bi5jYWxsKHQsZSl9ZnVuY3Rpb24gZXh0ZW5kKCl7dmFyIHQsZSxpLHMsbixvLHI9YXJndW1lbnRzLGE9YXJndW1lbnRzWzBdfHx7fSxsPTEsYz1hcmd1bWVudHMubGVuZ3RoLGg9ITE7Zm9yKFwiYm9vbGVhblwiPT10eXBlb2YgYSYmKGg9YSxhPWFyZ3VtZW50c1sxXXx8e30sbD0yKSxPYmplY3QoYSkhPT1hJiZcImZ1bmN0aW9uXCIhPT10eXBlKGEpJiYoYT17fSksYz09PWwmJihhPXRoaXMsbC0tKTtsPGM7bCsrKWlmKG51bGwhPT0odD1yW2xdKSlmb3IoZSBpbiB0KWk9YVtlXSxhIT09KHM9dFtlXSkmJihoJiZzJiYoaXNQbGFpbk9iamVjdChzKXx8KG49XCJhcnJheVwiPT09dHlwZShzKSkpPyhuPyhuPSExLG89aSYmXCJhcnJheVwiPT09dHlwZShpKT9pOltdKTpvPWkmJmlzUGxhaW5PYmplY3QoaSk/aTp7fSxhW2VdPWV4dGVuZChoLG8scykpOnZvaWQgMCE9PXMmJihhW2VdPXMpKTtyZXR1cm4gYX1cIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3RcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbih0KXtjbGFzczJ0eXBlW1wiW29iamVjdCBcIit0K1wiXVwiXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgUUVkaXRvcj17bmFtZTpcIlFFZGl0b3JcIixtaXhpbnM6W0Z1bGxzY3JlZW5NaXhpbl0scHJvcHM6e3ZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0scmVhZG9ubHk6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4sbWluSGVpZ2h0Ont0eXBlOlN0cmluZyxkZWZhdWx0OlwiMTByZW1cIn0sbWF4SGVpZ2h0OlN0cmluZyxoZWlnaHQ6U3RyaW5nLGRlZmluaXRpb25zOk9iamVjdCxmb250czpPYmplY3QsdG9vbGJhcjp7dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Lmxlbmd0aHx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KX0sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCIsXCJqdXN0aWZ5XCJdLFtcImJvbGRcIixcIml0YWxpY1wiLFwidW5kZXJsaW5lXCIsXCJzdHJpa2VcIl0sW1widW5kb1wiLFwicmVkb1wiXV19fSx0b29sYmFyQ29sb3I6U3RyaW5nLHRvb2xiYXJUZXh0Q29sb3I6U3RyaW5nLHRvb2xiYXJUb2dnbGVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdG9vbGJhckJnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleS0zXCJ9LHRvb2xiYXJGbGF0OkJvb2xlYW4sdG9vbGJhck91dGxpbmU6Qm9vbGVhbix0b29sYmFyUHVzaDpCb29sZWFuLHRvb2xiYXJSb3VuZGVkOkJvb2xlYW4sY29udGVudFN0eWxlOk9iamVjdCxjb250ZW50Q2xhc3M6W09iamVjdCxBcnJheSxTdHJpbmddfSxjb21wdXRlZDp7ZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yZWFkb25seSYmIXRoaXMuZGlzYWJsZX0saGFzVG9vbGJhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2xiYXImJnRoaXMudG9vbGJhci5sZW5ndGg+MH0sdG9vbGJhckJhY2tncm91bmRDbGFzczpmdW5jdGlvbigpe2lmKHRoaXMudG9vbGJhckJnKXJldHVyblwiYmctXCIrdGhpcy50b29sYmFyQmd9LGJ1dHRvblByb3BzOmZ1bmN0aW9uKCl7cmV0dXJue291dGxpbmU6dGhpcy50b29sYmFyT3V0bGluZSxmbGF0OnRoaXMudG9vbGJhckZsYXQscHVzaDp0aGlzLnRvb2xiYXJQdXNoLHJvdW5kZWQ6dGhpcy50b29sYmFyUm91bmRlZCxkZW5zZTohMCxjb2xvcjp0aGlzLnRvb2xiYXJDb2xvcixkaXNhYmxlOiF0aGlzLmVkaXRhYmxlfX0sYnV0dG9uRGVmOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcS5pMThuLmVkaXRvcixlPXRoaXMuJHEuaWNvbi5lZGl0b3I7cmV0dXJue2JvbGQ6e2NtZDpcImJvbGRcIixpY29uOmUuYm9sZCx0aXA6dC5ib2xkLGtleTo2Nn0saXRhbGljOntjbWQ6XCJpdGFsaWNcIixpY29uOmUuaXRhbGljLHRpcDp0Lml0YWxpYyxrZXk6NzN9LHN0cmlrZTp7Y21kOlwic3RyaWtlVGhyb3VnaFwiLGljb246ZS5zdHJpa2V0aHJvdWdoLHRpcDp0LnN0cmlrZXRocm91Z2gsa2V5OjgzfSx1bmRlcmxpbmU6e2NtZDpcInVuZGVybGluZVwiLGljb246ZS51bmRlcmxpbmUsdGlwOnQudW5kZXJsaW5lLGtleTo4NX0sdW5vcmRlcmVkOntjbWQ6XCJpbnNlcnRVbm9yZGVyZWRMaXN0XCIsaWNvbjplLnVub3JkZXJlZExpc3QsdGlwOnQudW5vcmRlcmVkTGlzdH0sb3JkZXJlZDp7Y21kOlwiaW5zZXJ0T3JkZXJlZExpc3RcIixpY29uOmUub3JkZXJlZExpc3QsdGlwOnQub3JkZXJlZExpc3R9LHN1YnNjcmlwdDp7Y21kOlwic3Vic2NyaXB0XCIsaWNvbjplLnN1YnNjcmlwdCx0aXA6dC5zdWJzY3JpcHQsaHRtbFRpcDpcIng8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD5cIn0sc3VwZXJzY3JpcHQ6e2NtZDpcInN1cGVyc2NyaXB0XCIsaWNvbjplLnN1cGVyc2NyaXB0LHRpcDp0LnN1cGVyc2NyaXB0LGh0bWxUaXA6XCJ4PHN1cGVyc2NyaXB0PjI8L3N1cGVyc2NyaXB0PlwifSxsaW5rOntjbWQ6XCJsaW5rXCIsaWNvbjplLmh5cGVybGluayx0aXA6dC5oeXBlcmxpbmssa2V5Ojc2fSxmdWxsc2NyZWVuOntjbWQ6XCJmdWxsc2NyZWVuXCIsaWNvbjplLnRvZ2dsZUZ1bGxzY3JlZW4sdGlwOnQudG9nZ2xlRnVsbHNjcmVlbixrZXk6NzB9LHF1b3RlOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiQkxPQ0tRVU9URVwiLGljb246ZS5xdW90ZSx0aXA6dC5xdW90ZSxrZXk6ODF9LGxlZnQ6e2NtZDpcImp1c3RpZnlMZWZ0XCIsaWNvbjplLmxlZnQsdGlwOnQubGVmdH0sY2VudGVyOntjbWQ6XCJqdXN0aWZ5Q2VudGVyXCIsaWNvbjplLmNlbnRlcix0aXA6dC5jZW50ZXJ9LHJpZ2h0OntjbWQ6XCJqdXN0aWZ5UmlnaHRcIixpY29uOmUucmlnaHQsdGlwOnQucmlnaHR9LGp1c3RpZnk6e2NtZDpcImp1c3RpZnlGdWxsXCIsaWNvbjplLmp1c3RpZnksdGlwOnQuanVzdGlmeX0scHJpbnQ6e3R5cGU6XCJuby1zdGF0ZVwiLGNtZDpcInByaW50XCIsaWNvbjplLnByaW50LHRpcDp0LnByaW50LGtleTo4MH0sb3V0ZGVudDp7dHlwZTpcIm5vLXN0YXRlXCIsZGlzYWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXJldCYmIXQuY2FyZXQuY2FuKFwib3V0ZGVudFwiKX0sY21kOlwib3V0ZGVudFwiLGljb246ZS5vdXRkZW50LHRpcDp0Lm91dGRlbnR9LGluZGVudDp7dHlwZTpcIm5vLXN0YXRlXCIsZGlzYWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXJldCYmIXQuY2FyZXQuY2FuKFwiaW5kZW50XCIpfSxjbWQ6XCJpbmRlbnRcIixpY29uOmUuaW5kZW50LHRpcDp0LmluZGVudH0scmVtb3ZlRm9ybWF0Ont0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJyZW1vdmVGb3JtYXRcIixpY29uOmUucmVtb3ZlRm9ybWF0LHRpcDp0LnJlbW92ZUZvcm1hdH0saHI6e3R5cGU6XCJuby1zdGF0ZVwiLGNtZDpcImluc2VydEhvcml6b250YWxSdWxlXCIsaWNvbjplLmhyLHRpcDp0LmhyfSx1bmRvOnt0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJ1bmRvXCIsaWNvbjplLnVuZG8sdGlwOnQudW5kbyxrZXk6OTB9LHJlZG86e3R5cGU6XCJuby1zdGF0ZVwiLGNtZDpcInJlZG9cIixpY29uOmUucmVkbyx0aXA6dC5yZWRvLGtleTo4OX0saDE6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJIMVwiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyMSxodG1sVGlwOic8aDEgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyMStcIjwvaDE+XCJ9LGgyOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDJcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjIsaHRtbFRpcDonPGgyIGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjIrXCI8L2gyPlwifSxoMzp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkgzXCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXIzLGh0bWxUaXA6JzxoMyBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXIzK1wiPC9oMz5cIn0saDQ6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJINFwiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyNCxodG1sVGlwOic8aDQgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyNCtcIjwvaDQ+XCJ9LGg1OntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDVcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjUsaHRtbFRpcDonPGg1IGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjUrXCI8L2g1PlwifSxoNjp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkg2XCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXI2LGh0bWxUaXA6JzxoNiBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXI2K1wiPC9oNj5cIn0scDp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkRJVlwiLGljb246ZS5oZWFkZXIsdGlwOnQucGFyYWdyYXBofSxjb2RlOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiUFJFXCIsaWNvbjplLmNvZGUsdGlwOlwiPGNvZGU+XCIrdC5jb2RlK1wiPC9jb2RlPlwifSxcInNpemUtMVwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiMVwiLGljb246ZS5zaXplLHRpcDp0LnNpemUxLGh0bWxUaXA6Jzxmb250IHNpemU9XCIxXCI+Jyt0LnNpemUxK1wiPC9mb250PlwifSxcInNpemUtMlwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiMlwiLGljb246ZS5zaXplLHRpcDp0LnNpemUyLGh0bWxUaXA6Jzxmb250IHNpemU9XCIyXCI+Jyt0LnNpemUyK1wiPC9mb250PlwifSxcInNpemUtM1wiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiM1wiLGljb246ZS5zaXplLHRpcDp0LnNpemUzLGh0bWxUaXA6Jzxmb250IHNpemU9XCIzXCI+Jyt0LnNpemUzK1wiPC9mb250PlwifSxcInNpemUtNFwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiNFwiLGljb246ZS5zaXplLHRpcDp0LnNpemU0LGh0bWxUaXA6Jzxmb250IHNpemU9XCI0XCI+Jyt0LnNpemU0K1wiPC9mb250PlwifSxcInNpemUtNVwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiNVwiLGljb246ZS5zaXplLHRpcDp0LnNpemU1LGh0bWxUaXA6Jzxmb250IHNpemU9XCI1XCI+Jyt0LnNpemU1K1wiPC9mb250PlwifSxcInNpemUtNlwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiNlwiLGljb246ZS5zaXplLHRpcDp0LnNpemU2LGh0bWxUaXA6Jzxmb250IHNpemU9XCI2XCI+Jyt0LnNpemU2K1wiPC9mb250PlwifSxcInNpemUtN1wiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiN1wiLGljb246ZS5zaXplLHRpcDp0LnNpemU3LGh0bWxUaXA6Jzxmb250IHNpemU9XCI3XCI+Jyt0LnNpemU3K1wiPC9mb250PlwifX19LGJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5kZWZpbml0aW9uc3x8e30saT10aGlzLmRlZmluaXRpb25zfHx0aGlzLmZvbnRzP2V4dGVuZCghMCx7fSx0aGlzLmJ1dHRvbkRlZixlLGdldEZvbnRzKHRoaXMuZGVmYXVsdEZvbnQsdGhpcy4kcS5pMThuLmVkaXRvci5kZWZhdWx0Rm9udCx0aGlzLiRxLmljb24uZWRpdG9yLmZvbnQsdGhpcy5mb250cykpOnRoaXMuYnV0dG9uRGVmO3JldHVybiB0aGlzLnRvb2xiYXIubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLm1hcChmdW5jdGlvbihzKXtpZihzLm9wdGlvbnMpcmV0dXJue3R5cGU6XCJkcm9wZG93blwiLGljb246cy5pY29uLGxhYmVsOnMubGFiZWwsZml4ZWRMYWJlbDpzLmZpeGVkTGFiZWwsZml4ZWRJY29uOnMuZml4ZWRJY29uLGhpZ2hsaWdodDpzLmhpZ2hsaWdodCxsaXN0OnMubGlzdCxvcHRpb25zOnMub3B0aW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGlbdF19KX07dmFyIG49aVtzXTtyZXR1cm4gbj9cIm5vLXN0YXRlXCI9PT1uLnR5cGV8fGVbc10mJih2b2lkIDA9PT1uLmNtZHx8dC5idXR0b25EZWZbbi5jbWRdJiZcIm5vLXN0YXRlXCI9PT10LmJ1dHRvbkRlZltuLmNtZF0udHlwZSk/bjpleHRlbmQoITAse3R5cGU6XCJ0b2dnbGVcIn0sbik6e3R5cGU6XCJzbG90XCIsc2xvdDpzfX0pfSl9LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPWZ1bmN0aW9uKGUpe2Uua2V5JiYodFtlLmtleV09e2NtZDplLmNtZCxwYXJhbTplLnBhcmFtfSl9O3JldHVybiB0aGlzLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7dC5vcHRpb25zP3Qub3B0aW9ucy5mb3JFYWNoKGUpOmUodCl9KX0pLHR9LGlubmVyU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbkZ1bGxzY3JlZW4/dGhpcy5jb250ZW50U3R5bGU6W3ttaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHQsaGVpZ2h0OnRoaXMuaGVpZ2h0LG1heEhlaWdodDp0aGlzLm1heEhlaWdodH0sdGhpcy5jb250ZW50U3R5bGVdfSxpbm5lckNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuY29udGVudENsYXNzLHtjb2w6dGhpcy5pbkZ1bGxzY3JlZW4sXCJvdmVyZmxvdy1hdXRvXCI6dGhpcy5pbkZ1bGxzY3JlZW58fHRoaXMubWF4SGVpZ2h0fV19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2VkaXRXYXRjaGVyOiEwLGVkaXRMaW5rVXJsOm51bGx9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5lZGl0V2F0Y2hlcj90aGlzLiRyZWZzLmNvbnRlbnQuaW5uZXJIVE1MPXQ6dGhpcy5lZGl0V2F0Y2hlcj0hMH19LG1ldGhvZHM6e29uSW5wdXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5lZGl0V2F0Y2hlcil7dmFyIGU9dGhpcy4kcmVmcy5jb250ZW50LmlubmVySFRNTDtlIT09dGhpcy52YWx1ZSYmKHRoaXMuZWRpdFdhdGNoZXI9ITEsdGhpcy4kZW1pdChcImlucHV0XCIsZSkpfX0sb25LZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBlPWdldEV2ZW50S2V5KHQpO2lmKCF0LmN0cmxLZXkpcmV0dXJuIHRoaXMucmVmcmVzaFRvb2xiYXIoKSx2b2lkKHRoaXMuJHEucGxhdGZvcm0uaXMuaWUmJnRoaXMuJG5leHRUaWNrKHRoaXMub25JbnB1dCkpO3ZhciBpPXRoaXMua2V5c1tlXTtpZih2b2lkIDAhPT1pKXt2YXIgcz1pLmNtZCxuPWkucGFyYW07c3RvcEFuZFByZXZlbnQodCksdGhpcy5ydW5DbWQocyxuLCExKSx0aGlzLiRxLnBsYXRmb3JtLmlzLmllJiZ0aGlzLiRuZXh0VGljayh0aGlzLm9uSW5wdXQpfX0scnVuQ21kOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzO3ZvaWQgMD09PWkmJihpPSEwKSx0aGlzLmZvY3VzKCksdGhpcy5jYXJldC5hcHBseSh0LGUsZnVuY3Rpb24oKXtzLmZvY3VzKCksaSYmcy5yZWZyZXNoVG9vbGJhcigpfSl9LHJlZnJlc2hUb29sYmFyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5lZGl0TGlua1VybD1udWxsLHQuJGZvcmNlVXBkYXRlKCl9LDEpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuJHJlZnMuY29udGVudC5mb2N1cygpfSxnZXRDb250ZW50RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5jb250ZW50fX0sY3JlYXRlZDpmdW5jdGlvbigpe2lzU1NSfHwoZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJkZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yXCIsITEsXCJkaXZcIiksdGhpcy5kZWZhdWx0Rm9udD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5mb250RmFtaWx5KX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LiRyZWZzLmNvbnRlbnQmJih0LmNhcmV0PW5ldyBDYXJldCh0LiRyZWZzLmNvbnRlbnQsdCksdC4kcmVmcy5jb250ZW50LmlubmVySFRNTD10LnZhbHVlKSx0LiRuZXh0VGljayh0LnJlZnJlc2hUb29sYmFyKX0pfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzO2lmKHRoaXMuaGFzVG9vbGJhcil7dmFyIHM9e3N0YXRpY0NsYXNzOlwicS1lZGl0b3ItdG9vbGJhciByb3cgbm8td3JhcCBzY3JvbGwteFwiLGNsYXNzOlt7XCJxLWVkaXRvci10b29sYmFyLXNlcGFyYXRvclwiOiF0aGlzLnRvb2xiYXJPdXRsaW5lJiYhdGhpcy50b29sYmFyUHVzaH0sdGhpcy50b29sYmFyQmFja2dyb3VuZENsYXNzXX07KGU9W10pLnB1c2godChcImRpdlwiLGV4dGVuZCh7a2V5OlwicWVkdF90b3BcIn0scyksW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCBxLWVkaXRvci10b29sYmFyLXBhZGRpbmcgZml0IGl0ZW1zLWNlbnRlclwifSxnZXRUb29sYmFyKHQsdGhpcykpXSkpLG51bGwhPT10aGlzLmVkaXRMaW5rVXJsJiZlLnB1c2godChcImRpdlwiLGV4dGVuZCh7a2V5OlwicWVkdF9idG1cIn0scyksW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCBxLWVkaXRvci10b29sYmFyLXBhZGRpbmcgZml0IGl0ZW1zLWNlbnRlclwifSxnZXRMaW5rRWRpdG9yKHQsdGhpcykpXSkpLGU9dChcImRpdlwiLGUpfXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1lZGl0b3JcIixzdHlsZTp7aGVpZ2h0OnRoaXMuaW5GdWxsc2NyZWVuP1wiMTAwdmhcIjpudWxsfSxjbGFzczp7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLGZ1bGxzY3JlZW46dGhpcy5pbkZ1bGxzY3JlZW4sY29sdW1uOnRoaXMuaW5GdWxsc2NyZWVufX0sW2UsdChcImRpdlwiLHtyZWY6XCJjb250ZW50XCIsc3RhdGljQ2xhc3M6XCJxLWVkaXRvci1jb250ZW50XCIsc3R5bGU6dGhpcy5pbm5lclN0eWxlLGNsYXNzOnRoaXMuaW5uZXJDbGFzcyxhdHRyczp7Y29udGVudGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9LGRvbVByb3BzOmlzU1NSP3tpbm5lckhUTUw6dGhpcy52YWx1ZX06dm9pZCAwLG9uOntpbnB1dDp0aGlzLm9uSW5wdXQsa2V5ZG93bjp0aGlzLm9uS2V5ZG93bixjbGljazp0aGlzLnJlZnJlc2hUb29sYmFyLGJsdXI6ZnVuY3Rpb24oKXtpLmNhcmV0LnNhdmUoKX19fSldKX19LEZhYk1peGluPXtwcm9wczp7b3V0bGluZTpCb29sZWFuLHB1c2g6Qm9vbGVhbixmbGF0OkJvb2xlYW4sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsZ2xvc3N5OkJvb2xlYW59fSxRRmFiPXtuYW1lOlwiUUZhYlwiLG1peGluczpbRmFiTWl4aW4sTW9kZWxUb2dnbGVNaXhpbl0scHJvdmlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue19fcUZhYkNsb3NlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhpZGUoZSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LiRyZWZzLnRyaWdnZXImJnQuJHJlZnMudHJpZ2dlci4kZWwmJnQuJHJlZnMudHJpZ2dlci4kZWwuZm9jdXMoKSxlfSl9fX0scHJvcHM6e2ljb246U3RyaW5nLGFjdGl2ZUljb246U3RyaW5nLGRpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInJpZ2h0XCJ9LHBlcnNpc3RlbnQ6Qm9vbGVhbn0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpeyF0aGlzLnBlcnNpc3RlbnQmJnRoaXMuaGlkZSgpfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudmFsdWUmJnRoaXMuc2hvdygpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZhYiB6LWZhYiByb3cgaW5saW5lIGp1c3RpZnktY2VudGVyXCIsY2xhc3M6e1wicS1mYWItb3BlbmVkXCI6dGhpcy5zaG93aW5nfX0sW3QoUUJ0bix7cmVmOlwidHJpZ2dlclwiLHByb3BzOntmYWI6ITAsb3V0bGluZTp0aGlzLm91dGxpbmUscHVzaDp0aGlzLnB1c2gsZmxhdDp0aGlzLmZsYXQsY29sb3I6dGhpcy5jb2xvcix0ZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3IsZ2xvc3N5OnRoaXMuZ2xvc3N5fSxvbjp7Y2xpY2s6dGhpcy50b2dnbGV9fSxbdGhpcy4kc2xvdHMudG9vbHRpcCx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtZmFiLWljb24gYWJzb2x1dGUtZnVsbFwiLHByb3BzOntuYW1lOnRoaXMuaWNvbnx8dGhpcy4kcS5pY29uLmZhYi5pY29ufX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwicS1mYWItYWN0aXZlLWljb24gYWJzb2x1dGUtZnVsbFwiLHByb3BzOntuYW1lOnRoaXMuYWN0aXZlSWNvbnx8dGhpcy4kcS5pY29uLmZhYi5hY3RpdmVJY29ufX0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmFiLWFjdGlvbnMgZmxleCBuby13cmFwIGlubGluZSBpdGVtcy1jZW50ZXJcIixjbGFzczpcInEtZmFiLVwiK3RoaXMuZGlyZWN0aW9ufSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfX0sUUZhYkFjdGlvbj17bmFtZTpcIlFGYWJBY3Rpb25cIixtaXhpbnM6W0ZhYk1peGluXSxwcm9wczp7aWNvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxpbmplY3Q6e19fcUZhYkNsb3NlOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFGYWJBY3Rpb24gbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUZhYlwiKX19fSxtZXRob2RzOntjbGljazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX19xRmFiQ2xvc2UoKS50aGVuKGZ1bmN0aW9uKCl7ZS4kZW1pdChcImNsaWNrXCIsdCl9KX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChRQnRuLHtwcm9wczp7ZmFiTWluaTohMCxvdXRsaW5lOnRoaXMub3V0bGluZSxwdXNoOnRoaXMucHVzaCxmbGF0OnRoaXMuZmxhdCxjb2xvcjp0aGlzLmNvbG9yLHRleHRDb2xvcjp0aGlzLnRleHRDb2xvcixnbG9zc3k6dGhpcy5nbG9zc3ksaWNvbjp0aGlzLmljb259LG9uOntjbGljazp0aGlzLmNsaWNrfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRRmllbGQ9e25hbWU6XCJRRmllbGRcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxwcm9wczp7aW5zZXQ6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJpY29uXCIsXCJsYWJlbFwiLFwiZnVsbFwiXS5pbmNsdWRlcyh0KX19LGxhYmVsOlN0cmluZyxjb3VudDp7dHlwZTpbTnVtYmVyLEJvb2xlYW5dLGRlZmF1bHQ6ITF9LGVycm9yOkJvb2xlYW4sZXJyb3JMYWJlbDpTdHJpbmcsd2FybmluZzpCb29sZWFuLHdhcm5pbmdMYWJlbDpTdHJpbmcsaGVscGVyOlN0cmluZyxpY29uOlN0cmluZyxpY29uQ29sb3I6U3RyaW5nLGRhcms6Qm9vbGVhbixvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInZlcnRpY2FsXCIsXCJob3Jpem9udGFsXCJdLmluY2x1ZGVzKHQpfX0sbGFiZWxXaWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1LHZhbGlkYXRvcjpmdW5jdGlvbih0KXt2YXIgZT1wYXJzZUludCh0LDEwKTtyZXR1cm4gZT4wJiZlPDEzfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5wdXQ6e319fSxjb21wdXRlZDp7aGFzRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5lcnJvcnx8dGhpcy5lcnJvcn0saGFzV2FybmluZzpmdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0Vycm9yJiYodGhpcy5pbnB1dC53YXJuaW5nfHx0aGlzLndhcm5pbmcpfSxjaGlsZEhhc0xhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQuZmxvYXRMYWJlbHx8dGhpcy5pbnB1dC5zdGFja0xhYmVsfSxpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5kYXJrfHx0aGlzLmRhcmt9LGluc2V0SWNvbjpmdW5jdGlvbigpe3JldHVybltcImljb25cIixcImZ1bGxcIl0uaW5jbHVkZXModGhpcy5pbnNldCl9LGhhc05vSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5SZW5kZXImJighdGhpcy5pbnB1dC4kb3B0aW9uc3x8dGhpcy5pbnB1dC5fX25lZWRzQm9yZGVyKX0sY291bnRlcjpmdW5jdGlvbigpe2lmKHRoaXMuY291bnQpe3ZhciB0PXRoaXMuaW5wdXQubGVuZ3RofHxcIjBcIjtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0aGlzLmNvdW50KT90K1wiIC8gXCIrdGhpcy5jb3VudDp0fX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcInEtZmllbGQtcmVzcG9uc2l2ZVwiOiF0aGlzLmlzVmVydGljYWwmJiF0aGlzLmlzSG9yaXpvbnRhbCxcInEtZmllbGQtdmVydGljYWxcIjp0aGlzLmlzVmVydGljYWwsXCJxLWZpZWxkLWhvcml6b250YWxcIjp0aGlzLmlzSG9yaXpvbnRhbCxcInEtZmllbGQtZmxvYXRpbmdcIjp0aGlzLmNoaWxkSGFzTGFiZWwsXCJxLWZpZWxkLW5vLWxhYmVsXCI6IXRoaXMubGFiZWwmJiF0aGlzLiRzbG90cy5sYWJlbCxcInEtZmllbGQtd2l0aC1lcnJvclwiOnRoaXMuaGFzRXJyb3IsXCJxLWZpZWxkLXdpdGgtd2FybmluZ1wiOnRoaXMuaGFzV2FybmluZyxcInEtZmllbGQtZGFya1wiOnRoaXMuaXNEYXJrLFwicS1maWVsZC1uby1pbnB1dFwiOnRoaXMuaGFzTm9JbnB1dH19LGNvbXB1dGVkTGFiZWxXaWR0aDpmdW5jdGlvbigpe3JldHVybiBwYXJzZUludCh0aGlzLmxhYmVsV2lkdGgsMTApfSxpc1ZlcnRpY2FsOmZ1bmN0aW9uKCl7cmV0dXJuXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbnx8MTI9PT10aGlzLmNvbXB1dGVkTGFiZWxXaWR0aH0saXNIb3Jpem9udGFsOmZ1bmN0aW9uKCl7cmV0dXJuXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9ufSxsYWJlbENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsP1wiY29sLTEyXCI6dGhpcy5pc0hvcml6b250YWw/XCJjb2wtXCIrdGhpcy5sYWJlbFdpZHRoOlwiY29sLXhzLTEyIGNvbC1zbS1cIit0aGlzLmxhYmVsV2lkdGh9LGlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmVydGljYWw/XCJjb2wteHMtMTJcIjp0aGlzLmlzSG9yaXpvbnRhbD9cImNvbFwiOlwiY29sLXhzLTEyIGNvbC1zbVwifSxpY29uUHJvcHM6ZnVuY3Rpb24oKXt2YXIgdD17bmFtZTp0aGlzLmljb259O3JldHVybiF0aGlzLmljb25Db2xvcnx8dGhpcy5oYXNFcnJvcnx8dGhpcy5oYXNXYXJuaW5nfHwodC5jb2xvcj10aGlzLmljb25Db2xvciksdH0saW5zZXRIYXNMYWJlbDpmdW5jdGlvbigpe3JldHVybltcImxhYmVsXCIsXCJmdWxsXCJdLmluY2x1ZGVzKHRoaXMuaW5zZXQpfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX2ZpZWxkOnRoaXN9fSxtZXRob2RzOntfX3JlZ2lzdGVySW5wdXQ6ZnVuY3Rpb24odCl7dGhpcy5pbnB1dD10fSxfX3VucmVnaXN0ZXJJbnB1dDpmdW5jdGlvbih0KXt0JiZ0IT09dGhpcy5pbnB1dHx8KHRoaXMuaW5wdXQ9e30pfSxfX2dldEJvdHRvbUNvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHRoaXMuaGFzRXJyb3ImJihlPXRoaXMuJHNsb3RzW1wiZXJyb3ItbGFiZWxcIl18fHRoaXMuZXJyb3JMYWJlbCk/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtZXJyb3IgY29sXCJ9LGUpOnRoaXMuaGFzV2FybmluZyYmKGU9dGhpcy4kc2xvdHNbXCJ3YXJuaW5nLWxhYmVsXCJdfHx0aGlzLndhcm5pbmdMYWJlbCk/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtd2FybmluZyBjb2xcIn0sZSk6KGU9dGhpcy4kc2xvdHMuaGVscGVyfHx0aGlzLmhlbHBlcik/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtaGVscGVyIGNvbFwifSxlKTp0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHRleHQtdHJhbnNwYXJlbnRcIn0sW1wifFwiXSl9LF9faGFzQm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNsb3RzW1wiZXJyb3ItbGFiZWxcIl18fHRoaXMuZXJyb3JMYWJlbHx8dGhpcy4kc2xvdHNbXCJ3YXJuaW5nLWxhYmVsXCJdfHx0aGlzLndhcm5pbmdMYWJlbHx8dGhpcy4kc2xvdHMuaGVscGVyfHx0aGlzLmhlbHBlcnx8dGhpcy5jb3VudH19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRzbG90cy5sYWJlbHx8dGhpcy5sYWJlbDtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQgcm93IG5vLXdyYXAgaXRlbXMtc3RhcnRcIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0aGlzLmljb24/dChRSWNvbix7cHJvcHM6dGhpcy5pY29uUHJvcHMsc3RhdGljQ2xhc3M6XCJxLWZpZWxkLWljb24gcS1maWVsZC1tYXJnaW5cIn0pOnRoaXMuaW5zZXRJY29uP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWljb25cIn0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBjb2xcIn0sW2V8fHRoaXMuaW5zZXRIYXNMYWJlbD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1maWVsZC1sYWJlbCBxLWZpZWxkLW1hcmdpblwiLGNsYXNzOnRoaXMubGFiZWxDbGFzc2VzfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtbGFiZWwtaW5uZXIgcm93IGl0ZW1zLWNlbnRlclwifSxbdGhpcy4kc2xvdHMubGFiZWx8fHRoaXMubGFiZWxdKV0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtY29udGVudFwiLGNsYXNzOnRoaXMuaW5wdXRDbGFzc2VzfSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLl9faGFzQm90dG9tKCk/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtYm90dG9tIHJvdyBuby13cmFwXCJ9LFt0aGlzLl9fZ2V0Qm90dG9tQ29udGVudCh0KSx0aGlzLmNvdW50ZXI/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtY291bnRlciBjb2wtYXV0b1wifSxbdGhpcy5jb3VudGVyXSk6bnVsbF0pOm51bGxdKV0pXSl9fSxRSW5maW5pdGVTY3JvbGw9e25hbWU6XCJRSW5maW5pdGVTY3JvbGxcIixwcm9wczp7aGFuZGxlcjp7dHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMH0saW5saW5lOkJvb2xlYW4sb2Zmc2V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OjAsZmV0Y2hpbmc6ITEsd29ya2luZzohMH19LG1ldGhvZHM6e3BvbGw6ZnVuY3Rpb24oKXtpZighdGhpcy5mZXRjaGluZyYmdGhpcy53b3JraW5nKXt2YXIgdD1oZWlnaHQodGhpcy5zY3JvbGxDb250YWluZXIpLGU9b2Zmc2V0KHRoaXMuc2Nyb2xsQ29udGFpbmVyKS50b3ArdDtvZmZzZXQodGhpcy5lbGVtZW50KS50b3AraGVpZ2h0KHRoaXMuZWxlbWVudCktKHRoaXMub2Zmc2V0fHx0KTxlJiZ0aGlzLmxvYWRNb3JlKCl9fSxsb2FkTW9yZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7IXRoaXMuZmV0Y2hpbmcmJnRoaXMud29ya2luZyYmKHRoaXMuaW5kZXgrKyx0aGlzLmZldGNoaW5nPSEwLHRoaXMuaGFuZGxlcih0aGlzLmluZGV4LGZ1bmN0aW9uKGUpe3QuZmV0Y2hpbmc9ITEsZT90LnN0b3AoKTp0LmVsZW1lbnQuY2xvc2VzdChcImJvZHlcIikmJnQucG9sbCgpfSkpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5kZXg9MH0scmVzdW1lOmZ1bmN0aW9uKCl7ITAhPT10aGlzLndvcmtpbmcmJih0aGlzLndvcmtpbmc9ITAsdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMucG9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpKSx0aGlzLmltbWVkaWF0ZVBvbGwoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMud29ya2luZz0hMSx0aGlzLmZldGNoaW5nPSExLHRoaXMuc2Nyb2xsQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5lbGVtZW50PXQuJHJlZnMuY29udGVudCx0LnNjcm9sbENvbnRhaW5lcj10LmlubGluZT90LiRlbDpnZXRTY3JvbGxUYXJnZXQodC4kZWwpLHQucG9sbCgpLHQuaW1tZWRpYXRlUG9sbD10LnBvbGwsdC5wb2xsPWRlYm91bmNlKHQucG9sbCw1MCksITA9PT10LndvcmtpbmcmJnQuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0LnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX0pfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMucG9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWluZmluaXRlLXNjcm9sbFwifSxbdChcImRpdlwiLHtyZWY6XCJjb250ZW50XCIsc3RhdGljQ2xhc3M6XCJxLWluZmluaXRlLXNjcm9sbC1jb250ZW50XCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHRoaXMuZmV0Y2hpbmc/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaW5maW5pdGUtc2Nyb2xsLW1lc3NhZ2VcIn0sdGhpcy4kc2xvdHMubWVzc2FnZSk6bnVsbF0pfX0sUUlubmVyTG9hZGluZz17bmFtZTpcIlFJbm5lckxvYWRpbmdcIixwcm9wczp7ZGFyazpCb29sZWFuLHZpc2libGU6Qm9vbGVhbixzaXplOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OjQyfSxjb2xvcjpTdHJpbmd9LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLnZpc2libGUpcmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlubmVyLWxvYWRpbmcgYW5pbWF0ZS1mYWRlIGFic29sdXRlLWZ1bGwgY29sdW1uIGZsZXgtY2VudGVyXCIsY2xhc3M6e2Rhcms6dGhpcy5kYXJrfX0sdGhpcy4kc2xvdHMuZGVmYXVsdHx8W3QoUVNwaW5uZXIse3Byb3BzOntzaXplOnRoaXMuc2l6ZSxjb2xvcjp0aGlzLmNvbG9yfX0pXSl9fSxRSnVtYm90cm9uPXtuYW1lOlwiUUp1bWJvdHJvblwiLHByb3BzOntkYXJrOkJvb2xlYW4sdGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9LGltZ1NyYzpTdHJpbmcsZ3JhZGllbnQ6U3RyaW5nfSxjb21wdXRlZDp7Z3JhZGllbnRUeXBlOmZ1bmN0aW9uKCl7aWYodGhpcy5ncmFkaWVudClyZXR1cm4gdGhpcy5ncmFkaWVudC5pbmRleE9mKFwiY2lyY2xlXCIpPi0xP1wicmFkaWFsXCI6XCJsaW5lYXJcIn0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmltZ1NyYz97XCJiYWNrZ3JvdW5kLWltYWdlXCI6XCJ1cmwoXCIrdGhpcy5pbWdTcmMrXCIpXCJ9OnRoaXMuZ3JhZGllbnRUeXBlP3tiYWNrZ3JvdW5kOnRoaXMuZ3JhZGllbnRUeXBlK1wiLWdyYWRpZW50KFwiK3RoaXMuZ3JhZGllbnQrXCIpXCJ9OnZvaWQgMH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLWp1bWJvdHJvblwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp7XCJxLWp1bWJvdHJvbi1kYXJrXCI6dGhpcy5kYXJrfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRS25vYj17bmFtZTpcIlFLbm9iXCIsZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt2YWx1ZTpOdW1iZXIsbWluOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxMDB9LGNvbG9yOlN0cmluZyx0cmFja0NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleS0zXCJ9LGxpbmVXaWR0aDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIjZweFwifSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiMTAwcHhcIn0sc3RlcDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxkZWNpbWFsczpOdW1iZXIsZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZGlzYWJsZSYmdC5wdXNoKFwiZGlzYWJsZWRcIiksdGhpcy5yZWFkb25seXx8dC5wdXNoKFwiY3Vyc29yLXBvaW50ZXJcIiksdGhpcy5jb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSx0fSxzdmdTdHlsZTpmdW5jdGlvbigpe3JldHVybntcInN0cm9rZS1kYXNoYXJyYXlcIjpcIjI5NS4zMXB4LCAyOTUuMzFweFwiLFwic3Ryb2tlLWRhc2hvZmZzZXRcIjoyOTUuMzEqKHRoaXMuJHEuaTE4bi5ydGw/LTE6MSkqKDEtKHRoaXMubW9kZWwtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikpK1wicHhcIix0cmFuc2l0aW9uOnRoaXMuZHJhZ2dpbmc/XCJcIjpcInN0cm9rZS1kYXNob2Zmc2V0IDAuNnMgZWFzZSAwcywgc3Ryb2tlIDAuNnMgZWFzZVwifX0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sY29tcHV0ZWREZWNpbWFsczpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmRlY2ltYWxzP3RoaXMuZGVjaW1hbHN8fDA6KFN0cmluZyh0aGlzLnN0ZXApLnRyaW0oXCIwXCIpLnNwbGl0KFwiLlwiKVsxXXx8XCJcIikubGVuZ3RofSxjb21wdXRlZFN0ZXA6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz8xL01hdGgucG93KDEwLHRoaXMuZGVjaW1hbHN8fDApOnRoaXMuc3RlcH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy52YWx1ZSxkcmFnZ2luZzohMX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQ8dGhpcy5taW4pdGhpcy5tb2RlbD10aGlzLm1pbjtlbHNle2lmKCEodD50aGlzLm1heCkpe3ZhciBpPXRoaXMuY29tcHV0ZWREZWNpbWFscyYmXCJudW1iZXJcIj09dHlwZW9mIHQ/cGFyc2VGbG9hdCh0LnRvRml4ZWQodGhpcy5jb21wdXRlZERlY2ltYWxzKSk6dDtyZXR1cm4gdm9pZChpIT09dGhpcy5tb2RlbCYmKHRoaXMubW9kZWw9aSkpfXRoaXMubW9kZWw9dGhpcy5tYXh9dGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLm1vZGVsIT09ZS52YWx1ZSYmZS4kZW1pdChcImNoYW5nZVwiLGUubW9kZWwpfSl9fSxtZXRob2RzOntfX3BhbjpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYodC5pc0ZpbmFsP3RoaXMuX19kcmFnU3RvcCh0LmV2dCk6dC5pc0ZpcnN0P3RoaXMuX19kcmFnU3RhcnQodC5ldnQpOnRoaXMuX19kcmFnTW92ZSh0LmV2dCkpfSxfX2RyYWdTdGFydDpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy5jZW50ZXJQb3NpdGlvbj10aGlzLl9fZ2V0Q2VudGVyKCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5fX29uSW5wdXQodCkpfSxfX2RyYWdNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZWRpdGFibGUmJihzdG9wQW5kUHJldmVudCh0KSx0aGlzLl9fb25JbnB1dCh0LHRoaXMuY2VudGVyUG9zaXRpb24pKX0sX19kcmFnU3RvcDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuZWRpdGFibGUmJihzdG9wQW5kUHJldmVudCh0KSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmRyYWdnaW5nPSExfSwxMDApLHRoaXMuX19vbklucHV0KHQsdGhpcy5jZW50ZXJQb3NpdGlvbiwhMCkpfSxfX29uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7aWYodGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhlKSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9dC5jdHJsS2V5PzEwKnRoaXMuY29tcHV0ZWRTdGVwOnRoaXMuY29tcHV0ZWRTdGVwLHM9WzM3LDQwXS5pbmNsdWRlcyhlKT8taTppO3RoaXMuX19vbklucHV0VmFsdWUoYmV0d2Vlbih0aGlzLm1vZGVsK3MsdGhpcy5taW4sdGhpcy5tYXgpKX19LF9fb25LZXlVcDpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7dGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhlKSYmdGhpcy5fX2VtaXRDaGFuZ2UoKX0sX19vbklucHV0OmZ1bmN0aW9uKHQsZSxpKXtpZih2b2lkIDA9PT1lJiYoZT10aGlzLl9fZ2V0Q2VudGVyKCkpLHRoaXMuZWRpdGFibGUpe3ZhciBzPXBvc2l0aW9uKHQpLG49TWF0aC5hYnMocy50b3AtZS50b3ApLG89TWF0aC5zcXJ0KE1hdGgucG93KE1hdGguYWJzKHMudG9wLWUudG9wKSwyKStNYXRoLnBvdyhNYXRoLmFicyhzLmxlZnQtZS5sZWZ0KSwyKSkscj1NYXRoLmFzaW4obi9vKSooMTgwL01hdGguUEkpO3I9cy50b3A8ZS50b3A/ZS5sZWZ0PHMubGVmdD85MC1yOjI3MCtyOmUubGVmdDxzLmxlZnQ/cis5MDoyNzAtcix0aGlzLiRxLmkxOG4ucnRsJiYocj0zNjAtcik7dmFyIGE9dGhpcy5taW4rci8zNjAqKHRoaXMubWF4LXRoaXMubWluKSxsPWEldGhpcy5zdGVwLGM9YmV0d2VlbihhLWwrKE1hdGguYWJzKGwpPj10aGlzLnN0ZXAvMj8obDwwPy0xOjEpKnRoaXMuc3RlcDowKSx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy5fX29uSW5wdXRWYWx1ZShjLGkpfX0sX19vbklucHV0VmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkRGVjaW1hbHMmJih0PXBhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuY29tcHV0ZWREZWNpbWFscykpKSx0aGlzLm1vZGVsIT09dCYmKHRoaXMubW9kZWw9dCksdGhpcy4kZW1pdChcImRyYWctdmFsdWVcIix0KSx0aGlzLnZhbHVlIT09dCYmKHRoaXMuJGVtaXQoXCJpbnB1dFwiLHQpLGUmJnRoaXMuX19lbWl0Q2hhbmdlKHQpKX0sX19lbWl0Q2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9dGhpcy5tb2RlbCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX0sX19nZXRDZW50ZXI6ZnVuY3Rpb24oKXt2YXIgdD1vZmZzZXQodGhpcy4kZWwpO3JldHVybnt0b3A6dC50b3AraGVpZ2h0KHRoaXMuJGVsKS8yLGxlZnQ6dC5sZWZ0K3dpZHRoKHRoaXMuJGVsKS8yfX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1rbm9iIG5vbi1zZWxlY3RhYmxlXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZX19LFt0KFwiZGl2XCIse29uOntjbGljazpmdW5jdGlvbih0KXtyZXR1cm4hZS5kcmFnZ2luZyYmZS5fX29uSW5wdXQodCx2b2lkIDAsITApfX0sZGlyZWN0aXZlczp0aGlzLmVkaXRhYmxlP1t7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7cHJldmVudDohMCxzdG9wOiEwfSx2YWx1ZTp0aGlzLl9fcGFufV06bnVsbH0sW3QoXCJzdmdcIix7YXR0cnM6e3ZpZXdCb3g6XCIwIDAgMTAwIDEwMFwifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTSA1MCw1MCBtIDAsLTQ3IGEgNDcsNDcgMCAxIDEgMCw5NCBhIDQ3LDQ3IDAgMSAxIDAsLTk0XCIsXCJmaWxsLW9wYWNpdHlcIjpcIjBcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZS13aWR0aFwiOnRoaXMubGluZVdpZHRofSxjbGFzczpcInRleHQtXCIrdGhpcy50cmFja0NvbG9yfSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNIDUwLDUwIG0gMCwtNDcgYSA0Nyw0NyAwIDEgMSAwLDk0IGEgNDcsNDcgMCAxIDEgMCwtOTRcIixcImZpbGwtb3BhY2l0eVwiOlwiMFwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLWxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2Utd2lkdGhcIjp0aGlzLmxpbmVXaWR0aH0sc3R5bGU6dGhpcy5zdmdTdHlsZX0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEta25vYi1sYWJlbCByb3cgZmxleC1jZW50ZXIgY29udGVudC1jZW50ZXJcIixhdHRyczp7dGFiaW5kZXg6dGhpcy5lZGl0YWJsZT8wOi0xfSxvbjp7a2V5ZG93bjp0aGlzLl9fb25LZXlEb3duLGtleXVwOnRoaXMuX19vbktleVVwfX0sdGhpcy4kc2xvdHMuZGVmYXVsdHx8W3QoXCJzcGFuXCIsW3RoaXMubW9kZWxdKV0pXSldKX19LFFTY3JvbGxPYnNlcnZhYmxlPXtuYW1lOlwiUVNjcm9sbE9ic2VydmFibGVcIixwcm9wczp7ZGVib3VuY2U6TnVtYmVyfSxyZW5kZXI6ZnVuY3Rpb24oKXt9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cG9zOjAsZGlyOlwiZG93blwiLGRpckNoYW5nZWQ6ITEsZGlyQ2hhbmdlUG9zOjB9fSxtZXRob2RzOntnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybntwb3NpdGlvbjp0aGlzLnBvcyxkaXJlY3Rpb246dGhpcy5kaXIsZGlyZWN0aW9uQ2hhbmdlZDp0aGlzLmRpckNoYW5nZWQsaW5mbGV4aW9uUG9zaXRpb246dGhpcy5kaXJDaGFuZ2VQb3N9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQpeyEwPT09dHx8MD09PXRoaXMuZGVib3VuY2U/dGhpcy5lbWl0KCk6dGhpcy50aW1lcnx8KHRoaXMudGltZXI9dGhpcy5kZWJvdW5jZT9zZXRUaW1lb3V0KHRoaXMuZW1pdCx0aGlzLmRlYm91bmNlKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5lbWl0KSl9LGVtaXQ6ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1heCgwLGdldFNjcm9sbFBvc2l0aW9uKHRoaXMudGFyZ2V0KSksZT10LXRoaXMucG9zPDA/XCJ1cFwiOlwiZG93blwiO3RoaXMuZGlyQ2hhbmdlZD10aGlzLmRpciE9PWUsdGhpcy5kaXJDaGFuZ2VkJiYodGhpcy5kaXI9ZSx0aGlzLmRpckNoYW5nZVBvcz10aGlzLnBvcyksdGhpcy50aW1lcj1udWxsLHRoaXMucG9zPXQsdGhpcy4kZW1pdChcInNjcm9sbFwiLHRoaXMuZ2V0UG9zaXRpb24oKSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy50YXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHRoaXMuJGVsLnBhcmVudE5vZGUpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLnRyaWdnZXIoITApfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpLHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKX19LFFMYXlvdXQ9e25hbWU6XCJRTGF5b3V0XCIscHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntsYXlvdXQ6dGhpc319LHByb3BzOntjb250YWluZXI6Qm9vbGVhbix2aWV3Ont0eXBlOlN0cmluZyxkZWZhdWx0OlwiaGhoIGxwciBmZmZcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuL14oaHxsKWgoaHxyKSBscHIgKGZ8bClmKGZ8cikkLy50ZXN0KHQudG9Mb3dlckNhc2UoKSl9fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntoZWlnaHQ6b25TU1I/MDp3aW5kb3cuaW5uZXJIZWlnaHQsd2lkdGg6b25TU1J8fHRoaXMuY29udGFpbmVyPzA6d2luZG93LmlubmVyV2lkdGgsY29udGFpbmVySGVpZ2h0OjAsc2Nyb2xsYmFyV2lkdGg6b25TU1I/MDpnZXRTY3JvbGxiYXJXaWR0aCgpLGhlYWRlcjp7c2l6ZTowLG9mZnNldDowLHNwYWNlOiExfSxyaWdodDp7c2l6ZTozMDAsb2Zmc2V0OjAsc3BhY2U6ITF9LGZvb3Rlcjp7c2l6ZTowLG9mZnNldDowLHNwYWNlOiExfSxsZWZ0OntzaXplOjMwMCxvZmZzZXQ6MCxzcGFjZTohMX0sc2Nyb2xsOntwb3NpdGlvbjowLGRpcmVjdGlvbjpcImRvd25cIn19fSxjb21wdXRlZDp7cm93czpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmlldy50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtyZXR1cm57dG9wOnRbMF0uc3BsaXQoXCJcIiksbWlkZGxlOnRbMV0uc3BsaXQoXCJcIiksYm90dG9tOnRbMl0uc3BsaXQoXCJcIil9fSx0YXJnZXRTdHlsZTpmdW5jdGlvbigpe3ZhciB0O2lmKDAhPT10aGlzLnNjcm9sbGJhcldpZHRoKXJldHVybih0PXt9KVt0aGlzLiRxLmkxOG4ucnRsP1wibGVmdFwiOlwicmlnaHRcIl09dGhpcy5zY3JvbGxiYXJXaWR0aCtcInB4XCIsdH0sdGFyZ2V0Q2hpbGRTdHlsZTpmdW5jdGlvbigpe3ZhciB0O2lmKDAhPT10aGlzLnNjcm9sbGJhcldpZHRoKXJldHVybih0PXt9KVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09MCx0W3RoaXMuJHEuaTE4bi5ydGw/XCJsZWZ0XCI6XCJyaWdodFwiXT1cIi1cIit0aGlzLnNjcm9sbGJhcldpZHRoK1wicHhcIix0LndpZHRoPVwiY2FsYygxMDAlICsgXCIrdGhpcy5zY3JvbGxiYXJXaWR0aCtcInB4KVwiLHR9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZXM9e2hlYWRlcjpudWxsLHJpZ2h0Om51bGwsZm9vdGVyOm51bGwsbGVmdDpudWxsfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dFwifSxbdChRU2Nyb2xsT2JzZXJ2YWJsZSx7b246e3Njcm9sbDp0aGlzLl9fb25QYWdlU2Nyb2xsfX0pLHQoUVJlc2l6ZU9ic2VydmFibGUse29uOntyZXNpemU6dGhpcy5fX29uUGFnZVJlc2l6ZX19KSx0aGlzLiRzbG90cy5kZWZhdWx0XSk7cmV0dXJuIHRoaXMuY29udGFpbmVyP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1jb250YWluZXIgcmVsYXRpdmUtcG9zaXRpb24gb3ZlcmZsb3ctaGlkZGVuXCJ9LFt0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX19vbkNvbnRhaW5lclJlc2l6ZX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbFwiLHN0eWxlOnRoaXMudGFyZ2V0U3R5bGV9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwib3ZlcmZsb3ctYXV0b1wiLHN0eWxlOnRoaXMudGFyZ2V0Q2hpbGRTdHlsZX0sW2VdKV0pXSk6ZX0sbWV0aG9kczp7X19hbmltYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnRpbWVyP2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTpkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJxLWxheW91dC1hbmltYXRlXCIpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcInEtbGF5b3V0LWFuaW1hdGVcIiksdC50aW1lcj1udWxsfSwxNTApfSxfX29uUGFnZVNjcm9sbDpmdW5jdGlvbih0KXt0aGlzLnNjcm9sbD10LHRoaXMuJGVtaXQoXCJzY3JvbGxcIix0KX0sX19vblBhZ2VSZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQsaT10LndpZHRoLHM9ITE7dGhpcy5oZWlnaHQhPT1lJiYocz0hMCx0aGlzLmhlaWdodD1lLHRoaXMuJGVtaXQoXCJzY3JvbGxIZWlnaHRcIixlKSx0aGlzLl9fdXBkYXRlU2Nyb2xsYmFyV2lkdGgoKSksdGhpcy53aWR0aCE9PWkmJihzPSEwLHRoaXMud2lkdGg9aSkscyYmdGhpcy4kZW1pdChcInJlc2l6ZVwiLHtoZWlnaHQ6ZSx3aWR0aDppfSl9LF9fb25Db250YWluZXJSZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5jb250YWluZXJIZWlnaHQhPT1lJiYodGhpcy5jb250YWluZXJIZWlnaHQ9ZSx0aGlzLl9fdXBkYXRlU2Nyb2xsYmFyV2lkdGgoKSl9LF9fdXBkYXRlU2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lcil7dmFyIHQ9dGhpcy5oZWlnaHQ+dGhpcy5jb250YWluZXJIZWlnaHQ/Z2V0U2Nyb2xsYmFyV2lkdGgoKTowO3RoaXMuc2Nyb2xsYmFyV2lkdGghPT10JiYodGhpcy5zY3JvbGxiYXJXaWR0aD10KX19fX0sZHVyYXRpb249MTUwLFFMYXlvdXREcmF3ZXI9e25hbWU6XCJRTGF5b3V0RHJhd2VyXCIsaW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUxheW91dERyYXdlciBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LG1peGluczpbTW9kZWxUb2dnbGVNaXhpbl0sZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOntvdmVybGF5OkJvb2xlYW4sc2lkZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImxlZnRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSx3aWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9LG1pbmk6Qm9vbGVhbixtaW5pV2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NjB9LGJyZWFrcG9pbnQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6OTkyfSxiZWhhdmlvcjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImRlZmF1bHRcIixcImRlc2t0b3BcIixcIm1vYmlsZVwiXS5pbmNsdWRlcyh0KX0sZGVmYXVsdDpcImRlZmF1bHRcIn0sc2hvd0lmQWJvdmU6Qm9vbGVhbixjb250ZW50U3R5bGU6T2JqZWN0LGNvbnRlbnRDbGFzczpbU3RyaW5nLE9iamVjdCxBcnJheV0sbm9IaWRlT25Sb3V0ZUNoYW5nZTpCb29sZWFuLG5vU3dpcGVPcGVuOkJvb2xlYW4sbm9Td2lwZUNsb3NlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNob3dJZkFib3ZlfHx2b2lkIDA9PT10aGlzLnZhbHVlfHx0aGlzLnZhbHVlLGU9XCJtb2JpbGVcIiE9PXRoaXMuYmVoYXZpb3ImJnRoaXMuYnJlYWtwb2ludDx0aGlzLmxheW91dC53aWR0aCYmIXRoaXMub3ZlcmxheSYmdDtyZXR1cm4gdm9pZCAwIT09dGhpcy52YWx1ZSYmdGhpcy52YWx1ZSE9PWUmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLGUpLHtzaG93aW5nOmUsYmVsb3dCcmVha3BvaW50OlwibW9iaWxlXCI9PT10aGlzLmJlaGF2aW9yfHxcImRlc2t0b3BcIiE9PXRoaXMuYmVoYXZpb3ImJnRoaXMuYnJlYWtwb2ludD49dGhpcy5sYXlvdXQud2lkdGgsbGFyZ2VTY3JlZW5TdGF0ZTp0LG1vYmlsZU9wZW5lZDohMX19LHdhdGNoOntiZWxvd0JyZWFrcG9pbnQ6ZnVuY3Rpb24odCl7dGhpcy5tb2JpbGVPcGVuZWR8fCh0Pyh0aGlzLm92ZXJsYXl8fCh0aGlzLmxhcmdlU2NyZWVuU3RhdGU9dGhpcy5zaG93aW5nKSx0aGlzLmhpZGUoITEpKTp0aGlzLm92ZXJsYXl8fHRoaXNbdGhpcy5sYXJnZVNjcmVlblN0YXRlP1wic2hvd1wiOlwiaGlkZVwiXSghMSkpfSxzaWRlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXRbZV0uc3BhY2U9ITEsdGhpcy5sYXlvdXRbZV0ub2Zmc2V0PTB9LGJlaGF2aW9yOmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGVMb2NhbChcImJlbG93QnJlYWtwb2ludFwiLFwibW9iaWxlXCI9PT10fHxcImRlc2t0b3BcIiE9PXQmJnRoaXMuYnJlYWtwb2ludD49dGhpcy5sYXlvdXQud2lkdGgpfSxicmVha3BvaW50OmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGVMb2NhbChcImJlbG93QnJlYWtwb2ludFwiLFwibW9iaWxlXCI9PT10aGlzLmJlaGF2aW9yfHxcImRlc2t0b3BcIiE9PXRoaXMuYmVoYXZpb3ImJnQ+PXRoaXMubGF5b3V0LndpZHRoKX0sXCJsYXlvdXQud2lkdGhcIjpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlTG9jYWwoXCJiZWxvd0JyZWFrcG9pbnRcIixcIm1vYmlsZVwiPT09dGhpcy5iZWhhdmlvcnx8XCJkZXNrdG9wXCIhPT10aGlzLmJlaGF2aW9yJiZ0aGlzLmJyZWFrcG9pbnQ+PXQpfSxcImxheW91dC5zY3JvbGxiYXJXaWR0aFwiOmZ1bmN0aW9uKCl7dGhpcy5hcHBseVBvc2l0aW9uKHRoaXMuc2hvd2luZz8wOnZvaWQgMCl9LG9mZnNldDpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdCl9LG9uTGF5b3V0OmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJvbi1sYXlvdXRcIix0KSx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0KX0sJHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5ub0hpZGVPblJvdXRlQ2hhbmdlfHwodGhpcy5tb2JpbGVPcGVuZWR8fHRoaXMub25TY3JlZW5PdmVybGF5KSYmdGhpcy5oaWRlKCl9LHJpZ2h0U2lkZTpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbigpfSxzaXplOmZ1bmN0aW9uKHQpe3RoaXMuYXBwbHlQb3NpdGlvbigpLHRoaXMuX191cGRhdGUoXCJzaXplXCIsdCl9LFwiJHEuaTE4bi5ydGxcIjpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbigpfSxtaW5pOmZ1bmN0aW9uKCl7dGhpcy52YWx1ZSYmdGhpcy5sYXlvdXQuX19hbmltYXRlKCl9fSxjb21wdXRlZDp7cmlnaHRTaWRlOmZ1bmN0aW9uKCl7cmV0dXJuXCJyaWdodFwiPT09dGhpcy5zaWRlfSxvZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zaG93aW5nfHx0aGlzLm1vYmlsZU9wZW5lZHx8dGhpcy5vdmVybGF5PzA6dGhpcy5zaXplfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNNaW5pP3RoaXMubWluaVdpZHRoOnRoaXMud2lkdGh9LGZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcmxheXx8dGhpcy5sYXlvdXQudmlldy5pbmRleE9mKHRoaXMucmlnaHRTaWRlP1wiUlwiOlwiTFwiKT4tMX0sb25MYXlvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93aW5nJiYhdGhpcy5tb2JpbGVWaWV3JiYhdGhpcy5vdmVybGF5fSxvblNjcmVlbk92ZXJsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93aW5nJiYhdGhpcy5tb2JpbGVWaWV3JiZ0aGlzLm92ZXJsYXl9LGJhY2tkcm9wQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57XCJuby1wb2ludGVyLWV2ZW50c1wiOiF0aGlzLnNob3dpbmd8fCF0aGlzLm1vYmlsZVZpZXd9fSxtb2JpbGVWaWV3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmVsb3dCcmVha3BvaW50fHx0aGlzLm1vYmlsZU9wZW5lZH0saGVhZGVyU2xvdDpmdW5jdGlvbigpe3JldHVybiF0aGlzLm92ZXJsYXkmJih0aGlzLnJpZ2h0U2lkZT9cInJcIj09PXRoaXMubGF5b3V0LnJvd3MudG9wWzJdOlwibFwiPT09dGhpcy5sYXlvdXQucm93cy50b3BbMF0pfSxmb290ZXJTbG90OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub3ZlcmxheSYmKHRoaXMucmlnaHRTaWRlP1wiclwiPT09dGhpcy5sYXlvdXQucm93cy5ib3R0b21bMl06XCJsXCI9PT10aGlzLmxheW91dC5yb3dzLmJvdHRvbVswXSl9LGJlbG93Q2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57Zml4ZWQ6ITAsXCJvbi10b3BcIjohMCxcInEtbGF5b3V0LWRyYXdlci1kZWxpbWl0ZXJcIjp0aGlzLmZpeGVkJiZ0aGlzLnNob3dpbmcsXCJxLWxheW91dC1kcmF3ZXItbW9iaWxlXCI6ITAsXCJ0b3AtcGFkZGluZ1wiOiEwfX0sYWJvdmVDbGFzczpmdW5jdGlvbigpe3JldHVybntmaXhlZDp0aGlzLmZpeGVkfHwhdGhpcy5vbkxheW91dCxcInEtbGF5b3V0LWRyYXdlci1taW5pXCI6dGhpcy5pc01pbmksXCJxLWxheW91dC1kcmF3ZXItbm9ybWFsXCI6IXRoaXMuaXNNaW5pLFwicS1sYXlvdXQtZHJhd2VyLWRlbGltaXRlclwiOnRoaXMuZml4ZWQmJnRoaXMuc2hvd2luZyxcInRvcC1wYWRkaW5nXCI6dGhpcy5oZWFkZXJTbG90fX0sYWJvdmVTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmxheW91dC5oZWFkZXIuc3BhY2UmJiF0aGlzLmhlYWRlclNsb3QmJih0aGlzLmZpeGVkP3QudG9wPXRoaXMubGF5b3V0LmhlYWRlci5vZmZzZXQrXCJweFwiOnRoaXMubGF5b3V0LmhlYWRlci5zcGFjZSYmKHQudG9wPXRoaXMubGF5b3V0LmhlYWRlci5zaXplK1wicHhcIikpLHRoaXMubGF5b3V0LmZvb3Rlci5zcGFjZSYmIXRoaXMuZm9vdGVyU2xvdCYmKHRoaXMuZml4ZWQ/dC5ib3R0b209dGhpcy5sYXlvdXQuZm9vdGVyLm9mZnNldCtcInB4XCI6dGhpcy5sYXlvdXQuZm9vdGVyLnNwYWNlJiYodC5ib3R0b209dGhpcy5sYXlvdXQuZm9vdGVyLnNpemUrXCJweFwiKSksdH0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3JldHVyblt0aGlzLmNvbnRlbnRTdHlsZSx7d2lkdGg6dGhpcy5zaXplK1wicHhcIn0sdGhpcy5tb2JpbGVWaWV3P1wiXCI6dGhpcy5hYm92ZVN0eWxlXX0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVybltcInEtbGF5b3V0LWRyYXdlci1cIit0aGlzLnNpZGUsdGhpcy5sYXlvdXQuY29udGFpbmVyP1wib3ZlcmZsb3ctYXV0b1wiOlwic2Nyb2xsXCIsdGhpcy5jb250ZW50Q2xhc3MsdGhpcy5tb2JpbGVWaWV3P3RoaXMuYmVsb3dDbGFzczp0aGlzLmFib3ZlQ2xhc3NdfSxzdGF0ZURpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybih0aGlzLiRxLmkxOG4ucnRsPy0xOjEpKih0aGlzLnJpZ2h0U2lkZT8xOi0xKX0saXNNaW5pOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWluaSYmIXRoaXMubW9iaWxlVmlld30sb25OYXRpdmVFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLm1vYmlsZVZpZXcpcmV0dXJue1wiIWNsaWNrXCI6ZnVuY3Rpb24oZSl7dC4kZW1pdChcImNsaWNrXCIsZSl9LG1vdXNlb3ZlcjpmdW5jdGlvbihlKXt0LiRlbWl0KFwibW91c2VvdmVyXCIsZSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe3QuJGVtaXQoXCJtb3VzZW91dFwiLGUpfX19fSxtZXRob2RzOnthcHBseVBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dD90aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3Q9ZS5zaG93aW5nPzA6ZS5zaXplLGUuYXBwbHlQb3NpdGlvbihlLnN0YXRlRGlyZWN0aW9uKnQpfSk6dGhpcy4kcmVmcy5jb250ZW50JiYodGhpcy5sYXlvdXQuY29udGFpbmVyJiZ0aGlzLnJpZ2h0U2lkZSYmKHRoaXMubW9iaWxlVmlld3x8TWF0aC5hYnModCk9PT10aGlzLnNpemUpJiYodCs9dGhpcy5zdGF0ZURpcmVjdGlvbip0aGlzLmxheW91dC5zY3JvbGxiYXJXaWR0aCksdGhpcy4kcmVmcy5jb250ZW50LnN0eWxlLnRyYW5zZm9ybT1cInRyYW5zbGF0ZVgoXCIrdCtcInB4KVwiKX0sYXBwbHlCYWNrZHJvcDpmdW5jdGlvbih0KXt0aGlzLiRyZWZzLmJhY2tkcm9wJiYodGhpcy4kcmVmcy5iYWNrZHJvcC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XCJyZ2JhKDAsMCwwLFwiKy40KnQrXCIpXCIpfSxfX3NldFNjcm9sbGFibGU6ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXQuY29udGFpbmVyfHxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdFt0P1wiYWRkXCI6XCJyZW1vdmVcIl0oXCJxLWJvZHktZHJhd2VyLXRvZ2dsZVwiKX0sX19vcGVuQnlUb3VjaDpmdW5jdGlvbih0KXtpZih0aGlzLmJlbG93QnJlYWtwb2ludCl7dmFyIGU9dGhpcy5zaXplLGk9YmV0d2Vlbih0LmRpc3RhbmNlLngsMCxlKTtpZih0LmlzRmluYWwpe3ZhciBzPXRoaXMuJHJlZnMuY29udGVudCxuPWk+PU1hdGgubWluKDc1LGUpO3JldHVybiBzLmNsYXNzTGlzdC5yZW1vdmUoXCJuby10cmFuc2l0aW9uXCIpLHZvaWQobj90aGlzLnNob3coKToodGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy5hcHBseUJhY2tkcm9wKDApLHRoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnN0YXRlRGlyZWN0aW9uKmUpLHMuY2xhc3NMaXN0LnJlbW92ZShcInEtbGF5b3V0LWRyYXdlci1kZWxpbWl0ZXJcIikpKX1pZih0aGlzLmFwcGx5UG9zaXRpb24oKHRoaXMuJHEuaTE4bi5ydGw/IXRoaXMucmlnaHRTaWRlOnRoaXMucmlnaHRTaWRlKT9NYXRoLm1heChlLWksMCk6TWF0aC5taW4oMCxpLWUpKSx0aGlzLmFwcGx5QmFja2Ryb3AoYmV0d2VlbihpL2UsMCwxKSksdC5pc0ZpcnN0KXt2YXIgbz10aGlzLiRyZWZzLmNvbnRlbnQ7by5jbGFzc0xpc3QuYWRkKFwibm8tdHJhbnNpdGlvblwiKSxvLmNsYXNzTGlzdC5hZGQoXCJxLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyXCIpfX19LF9fY2xvc2VCeVRvdWNoOmZ1bmN0aW9uKHQpe2lmKHRoaXMubW9iaWxlT3BlbmVkKXt2YXIgZT10aGlzLnNpemUsaT10LmRpcmVjdGlvbj09PXRoaXMuc2lkZSxzPSh0aGlzLiRxLmkxOG4ucnRsPyFpOmkpP2JldHdlZW4odC5kaXN0YW5jZS54LDAsZSk6MDtpZih0LmlzRmluYWwpe3ZhciBuPU1hdGguYWJzKHMpPE1hdGgubWluKDc1LGUpO3JldHVybiB0aGlzLiRyZWZzLmNvbnRlbnQuY2xhc3NMaXN0LnJlbW92ZShcIm5vLXRyYW5zaXRpb25cIiksdm9pZChuPyh0aGlzLmxheW91dC5fX2FuaW1hdGUoKSx0aGlzLmFwcGx5QmFja2Ryb3AoMSksdGhpcy5hcHBseVBvc2l0aW9uKDApKTp0aGlzLmhpZGUoKSl9dGhpcy5hcHBseVBvc2l0aW9uKHRoaXMuc3RhdGVEaXJlY3Rpb24qcyksdGhpcy5hcHBseUJhY2tkcm9wKGJldHdlZW4oMS1zL2UsMCwxKSksdC5pc0ZpcnN0JiZ0aGlzLiRyZWZzLmNvbnRlbnQuY2xhc3NMaXN0LmFkZChcIm5vLXRyYW5zaXRpb25cIil9fSxfX3Nob3c6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0hMCksdCYmdGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy5hcHBseVBvc2l0aW9uKDApO3ZhciBpPXRoaXMubGF5b3V0Lmluc3RhbmNlc1t0aGlzLnJpZ2h0U2lkZT9cImxlZnRcIjpcInJpZ2h0XCJdO2kmJmkubW9iaWxlT3BlbmVkJiZpLmhpZGUoKSx0aGlzLmJlbG93QnJlYWtwb2ludD8odGhpcy5tb2JpbGVPcGVuZWQ9ITAsdGhpcy5hcHBseUJhY2tkcm9wKDEpLHRoaXMubGF5b3V0LmNvbnRhaW5lcnx8KHRoaXMucHJldmVudGVkU2Nyb2xsPSEwLHByZXZlbnRTY3JvbGwoITApKSk6dGhpcy5fX3NldFNjcm9sbGFibGUoITApLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlJiYoZS5zaG93UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7ZS5fX3NldFNjcm9sbGFibGUoITEpfSksZS5zaG93UHJvbWlzZVJlc29sdmUoKSl9LGR1cmF0aW9uKX0sX19oaWRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMubW9iaWxlT3BlbmVkJiYodGhpcy5tb2JpbGVPcGVuZWQ9ITEpLHRoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnN0YXRlRGlyZWN0aW9uKnRoaXMuc2l6ZSksdGhpcy5hcHBseUJhY2tkcm9wKDApLHRoaXMuX19jbGVhbnVwKCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuaGlkZVByb21pc2UmJmUuaGlkZVByb21pc2VSZXNvbHZlKCl9LGR1cmF0aW9uKX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5wcmV2ZW50ZWRTY3JvbGwmJih0aGlzLnByZXZlbnRlZFNjcm9sbD0hMSxwcmV2ZW50U2Nyb2xsKCExKSksdGhpcy5fX3NldFNjcm9sbGFibGUoITEpfSxfX3VwZGF0ZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0W3RoaXMuc2lkZV1bdF0hPT1lJiYodGhpcy5sYXlvdXRbdGhpcy5zaWRlXVt0XT1lKX0sX191cGRhdGVMb2NhbDpmdW5jdGlvbih0LGUpe3RoaXNbdF0hPT1lJiYodGhpc1t0XT1lKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5zaWRlXT10aGlzLHRoaXMuX191cGRhdGUoXCJzaXplXCIsdGhpcy5zaXplKSx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0aGlzLm9uTGF5b3V0KSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdGhpcy5vZmZzZXQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5hcHBseVBvc2l0aW9uKHRoaXMuc2hvd2luZz8wOnZvaWQgMCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpLHRoaXMubGF5b3V0Lmluc3RhbmNlc1t0aGlzLnNpZGVdPT09dGhpcyYmKHRoaXMubGF5b3V0Lmluc3RhbmNlc1t0aGlzLnNpZGVdPW51bGwsdGhpcy5fX3VwZGF0ZShcInNpemVcIiwwKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsMCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsITEpKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kcmF3ZXItY29udGFpbmVyXCJ9LFt0aGlzLm1vYmlsZVZpZXcmJiF0aGlzLm5vU3dpcGVPcGVuP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1kcmF3ZXItb3BlbmVyIGZpeGVkLVwiK3RoaXMuc2lkZSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMH0sdmFsdWU6dGhpcy5fX29wZW5CeVRvdWNofV19KTpudWxsLHQoXCJkaXZcIix7cmVmOlwiYmFja2Ryb3BcIixzdGF0aWNDbGFzczpcImZ1bGxzY3JlZW4gcS1sYXlvdXQtYmFja2Ryb3AgcS1sYXlvdXQtdHJhbnNpdGlvblwiLGNsYXNzOnRoaXMuYmFja2Ryb3BDbGFzcyxvbjp7Y2xpY2s6dGhpcy5oaWRlfSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMH0sdmFsdWU6dGhpcy5fX2Nsb3NlQnlUb3VjaH1dfSldLmNvbmNhdChbdChcImFzaWRlXCIse3JlZjpcImNvbnRlbnRcIixzdGF0aWNDbGFzczpcInEtbGF5b3V0LWRyYXdlciBxLWxheW91dC10cmFuc2l0aW9uXCIsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxhdHRyczp0aGlzLiRhdHRycyxvbjp0aGlzLm9uTmF0aXZlRXZlbnRzLGRpcmVjdGl2ZXM6dGhpcy5tb2JpbGVWaWV3JiYhdGhpcy5ub1N3aXBlQ2xvc2U/W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwfSx2YWx1ZTp0aGlzLl9fY2xvc2VCeVRvdWNofV06bnVsbH0sdGhpcy5pc01pbmkmJnRoaXMuJHNsb3RzLm1pbmk/W3RoaXMuJHNsb3RzLm1pbmldOnRoaXMuJHNsb3RzLmRlZmF1bHQpXSkpfX0sUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGU9e25hbWU6XCJRV2luZG93UmVzaXplT2JzZXJ2YWJsZVwiLHByb3BzOntkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDo4MH19LHJlbmRlcjpmdW5jdGlvbigpe30sbWV0aG9kczp7dHJpZ2dlcjpmdW5jdGlvbigpezA9PT10aGlzLmRlYm91bmNlP3RoaXMuZW1pdCgpOnRoaXMudGltZXJ8fCh0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy5lbWl0LHRoaXMuZGVib3VuY2UpKX0sZW1pdDpmdW5jdGlvbih0KXt0aGlzLnRpbWVyPW51bGwsdGhpcy4kZW1pdChcInJlc2l6ZVwiLHtoZWlnaHQ6dD8wOndpbmRvdy5pbm5lckhlaWdodCx3aWR0aDp0PzA6d2luZG93LmlubmVyV2lkdGh9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmVtaXQob25TU1IpfSxtb3VudGVkOmZ1bmN0aW9uKCl7ZnJvbVNTUiYmdGhpcy5lbWl0KCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMudHJpZ2dlcixsaXN0ZW5PcHRzLnBhc3NpdmUpfX0sUUxheW91dEZvb3Rlcj17bmFtZTpcIlFMYXlvdXRGb290ZXJcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxpbmplY3Q6e2xheW91dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRTGF5b3V0Rm9vdGVyIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvcHM6e3ZhbHVlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0scmV2ZWFsOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZTowLHJldmVhbGVkOiEwLHdpbmRvd0hlaWdodDpvblNTUnx8dGhpcy5sYXlvdXQuY29udGFpbmVyPzA6d2luZG93LmlubmVySGVpZ2h0fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJzcGFjZVwiLHQpLHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsITApLHRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpfSxvZmZzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHQpfSxyZXZlYWw6ZnVuY3Rpb24odCl7dHx8dGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIix0aGlzLnZhbHVlKX0scmV2ZWFsZWQ6ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy4kZW1pdChcInJldmVhbFwiLHQpfSxcImxheW91dC5zY3JvbGxcIjpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVSZXZlYWxlZCgpfSxcImxheW91dC5oZWlnaHRcIjpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVSZXZlYWxlZCgpfSxzaXplOmZ1bmN0aW9uKCl7dGhpcy5fX3VwZGF0ZVJldmVhbGVkKCl9fSxjb21wdXRlZDp7Zml4ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXZlYWx8fHRoaXMubGF5b3V0LnZpZXcuaW5kZXhPZihcIkZcIik+LTF8fHRoaXMubGF5b3V0LmNvbnRhaW5lcn0sY29udGFpbmVySGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmNvbnRhaW5lcj90aGlzLmxheW91dC5jb250YWluZXJIZWlnaHQ6dGhpcy53aW5kb3dIZWlnaHR9LG9mZnNldDpmdW5jdGlvbigpe2lmKCF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWUpcmV0dXJuIDA7aWYodGhpcy5maXhlZClyZXR1cm4gdGhpcy5yZXZlYWxlZD90aGlzLnNpemU6MDt2YXIgdD10aGlzLmxheW91dC5zY3JvbGwucG9zaXRpb24rdGhpcy5jb250YWluZXJIZWlnaHQrdGhpcy5zaXplLXRoaXMubGF5b3V0LmhlaWdodDtyZXR1cm4gdD4wP3Q6MH0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVybntcImZpeGVkLWJvdHRvbVwiOnRoaXMuZml4ZWQsXCJhYnNvbHV0ZS1ib3R0b21cIjohdGhpcy5maXhlZCxoaWRkZW46IXRoaXMudmFsdWUmJiF0aGlzLmZpeGVkLFwicS1sYXlvdXQtZm9vdGVyLWhpZGRlblwiOiF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWV8fHRoaXMuZml4ZWQmJiF0aGlzLnJldmVhbGVkfX0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGF5b3V0LnJvd3MuYm90dG9tLGU9e307cmV0dXJuXCJsXCI9PT10WzBdJiZ0aGlzLmxheW91dC5sZWZ0LnNwYWNlJiYoZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5sYXlvdXQubGVmdC5zaXplK1wicHhcIiksXCJyXCI9PT10WzJdJiZ0aGlzLmxheW91dC5yaWdodC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMubGF5b3V0LnJpZ2h0LnNpemUrXCJweFwiKSxlfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZm9vdGVyXCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtZm9vdGVyIHEtbGF5b3V0LW1hcmdpbmFsIHEtbGF5b3V0LXRyYW5zaXRpb25cIixjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3Msc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7cHJvcHM6e2RlYm91bmNlOjB9LG9uOntyZXNpemU6dGhpcy5fX29uUmVzaXplfX0pLCF0aGlzLmxheW91dC5jb250YWluZXImJnQoUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGUse3Byb3BzOntkZWJvdW5jZTowfSxvbjp7cmVzaXplOnRoaXMuX19vbldpbmRvd1Jlc2l6ZX19KXx8dm9pZCAwLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5mb290ZXI9dGhpcyx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0aGlzLnZhbHVlKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdGhpcy5vZmZzZXQpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5sYXlvdXQuaW5zdGFuY2VzLmZvb3Rlcj09PXRoaXMmJih0aGlzLmxheW91dC5pbnN0YW5jZXMuZm9vdGVyPW51bGwsdGhpcy5fX3VwZGF0ZShcInNpemVcIiwwKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsMCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsITEpKX0sbWV0aG9kczp7X19vblJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLl9fdXBkYXRlTG9jYWwoXCJzaXplXCIsZSksdGhpcy5fX3VwZGF0ZShcInNpemVcIixlKX0sX19vbldpbmRvd1Jlc2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLl9fdXBkYXRlTG9jYWwoXCJ3aW5kb3dIZWlnaHRcIixlKX0sX191cGRhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheW91dC5mb290ZXJbdF0hPT1lJiYodGhpcy5sYXlvdXQuZm9vdGVyW3RdPWUpfSxfX3VwZGF0ZUxvY2FsOmZ1bmN0aW9uKHQsZSl7dGhpc1t0XSE9PWUmJih0aGlzW3RdPWUpfSxfX3VwZGF0ZVJldmVhbGVkOmZ1bmN0aW9uKCl7aWYodGhpcy5yZXZlYWwpe3ZhciB0PXRoaXMubGF5b3V0LnNjcm9sbCxlPXQuZGlyZWN0aW9uLGk9dC5wb3NpdGlvbixzPXQuaW5mbGV4aW9uUG9zaXRpb247dGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIixcInVwXCI9PT1lfHxpLXM8MTAwfHx0aGlzLmxheW91dC5oZWlnaHQtdGhpcy5jb250YWluZXJIZWlnaHQtaS10aGlzLnNpemU8MzAwKX19fX0sUUxheW91dEhlYWRlcj17bmFtZTpcIlFMYXlvdXRIZWFkZXJcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxpbmplY3Q6e2xheW91dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRTGF5b3V0SGVhZGVyIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvcHM6e3ZhbHVlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0scmV2ZWFsOkJvb2xlYW4scmV2ZWFsT2Zmc2V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjI1MH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZTowLHJldmVhbGVkOiEwfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJzcGFjZVwiLHQpLHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsITApLHRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpfSxvZmZzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHQpfSxyZXZlYWw6ZnVuY3Rpb24odCl7dHx8dGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIix0aGlzLnZhbHVlKX0scmV2ZWFsZWQ6ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy4kZW1pdChcInJldmVhbFwiLHQpfSxcImxheW91dC5zY3JvbGxcIjpmdW5jdGlvbih0KXt0aGlzLnJldmVhbCYmdGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIixcInVwXCI9PT10LmRpcmVjdGlvbnx8dC5wb3NpdGlvbjw9dGhpcy5yZXZlYWxPZmZzZXR8fHQucG9zaXRpb24tdC5pbmZsZXhpb25Qb3NpdGlvbjwxMDApfX0sY29tcHV0ZWQ6e2ZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV2ZWFsfHx0aGlzLmxheW91dC52aWV3LmluZGV4T2YoXCJIXCIpPi0xfHx0aGlzLmxheW91dC5jb250YWluZXJ9LG9mZnNldDpmdW5jdGlvbigpe2lmKCF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWUpcmV0dXJuIDA7aWYodGhpcy5maXhlZClyZXR1cm4gdGhpcy5yZXZlYWxlZD90aGlzLnNpemU6MDt2YXIgdD10aGlzLnNpemUtdGhpcy5sYXlvdXQuc2Nyb2xsLnBvc2l0aW9uO3JldHVybiB0PjA/dDowfSxjb21wdXRlZENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1wiZml4ZWQtdG9wXCI6dGhpcy5maXhlZCxcImFic29sdXRlLXRvcFwiOiF0aGlzLmZpeGVkLFwicS1sYXlvdXQtaGVhZGVyLWhpZGRlblwiOiF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWV8fHRoaXMuZml4ZWQmJiF0aGlzLnJldmVhbGVkfX0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGF5b3V0LnJvd3MudG9wLGU9e307cmV0dXJuXCJsXCI9PT10WzBdJiZ0aGlzLmxheW91dC5sZWZ0LnNwYWNlJiYoZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5sYXlvdXQubGVmdC5zaXplK1wicHhcIiksXCJyXCI9PT10WzJdJiZ0aGlzLmxheW91dC5yaWdodC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMubGF5b3V0LnJpZ2h0LnNpemUrXCJweFwiKSxlfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiaGVhZGVyXCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtaGVhZGVyIHEtbGF5b3V0LW1hcmdpbmFsIHEtbGF5b3V0LXRyYW5zaXRpb25cIixjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3Msc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7cHJvcHM6e2RlYm91bmNlOjB9LG9uOntyZXNpemU6dGhpcy5fX29uUmVzaXplfX0pLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5oZWFkZXI9dGhpcyx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0aGlzLnZhbHVlKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdGhpcy5vZmZzZXQpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5sYXlvdXQuaW5zdGFuY2VzLmhlYWRlcj09PXRoaXMmJih0aGlzLmxheW91dC5pbnN0YW5jZXMuaGVhZGVyPW51bGwsdGhpcy5fX3VwZGF0ZShcInNpemVcIiwwKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsMCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsITEpKX0sbWV0aG9kczp7X19vblJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLl9fdXBkYXRlTG9jYWwoXCJzaXplXCIsZSksdGhpcy5fX3VwZGF0ZShcInNpemVcIixlKX0sX191cGRhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheW91dC5oZWFkZXJbdF0hPT1lJiYodGhpcy5sYXlvdXQuaGVhZGVyW3RdPWUpfSxfX3VwZGF0ZUxvY2FsOmZ1bmN0aW9uKHQsZSl7dGhpc1t0XSE9PWUmJih0aGlzW3RdPWUpfX19LFFQYWdlPXtuYW1lOlwiUVBhZ2VcIixpbmplY3Q6e3BhZ2VDb250YWluZXI6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUVBhZ2UgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUVBhZ2VDb250YWluZXJcIil9fSxsYXlvdXQ6e319LHByb3BzOntwYWRkaW5nOkJvb2xlYW4sc3R5bGVGbjpGdW5jdGlvbn0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubGF5b3V0LmhlYWRlci5zcGFjZT90aGlzLmxheW91dC5oZWFkZXIuc2l6ZTowKSsodGhpcy5sYXlvdXQuZm9vdGVyLnNwYWNlP3RoaXMubGF5b3V0LmZvb3Rlci5zaXplOjApO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuc3R5bGVGbj90aGlzLnN0eWxlRm4odCk6e21pbkhlaWdodDp0aGlzLmxheW91dC5jb250YWluZXI/dGhpcy5sYXlvdXQuY29udGFpbmVySGVpZ2h0LXQrXCJweFwiOnQ/XCJjYWxjKDEwMHZoIC0gXCIrdCtcInB4KVwiOlwiMTAwdmhcIn19LGNsYXNzZXM6ZnVuY3Rpb24oKXtpZih0aGlzLnBhZGRpbmcpcmV0dXJuXCJsYXlvdXQtcGFkZGluZ1wifX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwibWFpblwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LXBhZ2VcIixzdHlsZTp0aGlzLnN0eWxlLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRUGFnZUNvbnRhaW5lcj17bmFtZTpcIlFQYWdlQ29udGFpbmVyXCIsaW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUVBhZ2VDb250YWluZXIgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUxheW91dFwiKX19fSxwcm92aWRlOntwYWdlQ29udGFpbmVyOiEwfSxjb21wdXRlZDp7c3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5sYXlvdXQuaGVhZGVyLnNwYWNlJiYodC5wYWRkaW5nVG9wPXRoaXMubGF5b3V0LmhlYWRlci5zaXplK1wicHhcIiksdGhpcy5sYXlvdXQucmlnaHQuc3BhY2UmJih0W1wicGFkZGluZ1wiKyh0aGlzLiRxLmkxOG4ucnRsP1wiTGVmdFwiOlwiUmlnaHRcIildPXRoaXMubGF5b3V0LnJpZ2h0LnNpemUrXCJweFwiKSx0aGlzLmxheW91dC5mb290ZXIuc3BhY2UmJih0LnBhZGRpbmdCb3R0b209dGhpcy5sYXlvdXQuZm9vdGVyLnNpemUrXCJweFwiKSx0aGlzLmxheW91dC5sZWZ0LnNwYWNlJiYodFtcInBhZGRpbmdcIisodGhpcy4kcS5pMThuLnJ0bD9cIlJpZ2h0XCI6XCJMZWZ0XCIpXT10aGlzLmxheW91dC5sZWZ0LnNpemUrXCJweFwiKSx0fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtcGFnZS1jb250YWluZXIgcS1sYXlvdXQtdHJhbnNpdGlvblwiLHN0eWxlOnRoaXMuc3R5bGV9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVBhZ2VTdGlja3k9e25hbWU6XCJRUGFnZVN0aWNreVwiLGluamVjdDp7bGF5b3V0OntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFQYWdlU3RpY2t5IG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tLXJpZ2h0XCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcC1yaWdodFwiLFwidG9wLWxlZnRcIixcImJvdHRvbS1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXS5pbmNsdWRlcyh0KX19LG9mZnNldDp7dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIDI9PT10Lmxlbmd0aH19LGV4cGFuZDpCb29sZWFufSxjb21wdXRlZDp7YXR0YWNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3NpdGlvbjtyZXR1cm57dG9wOnQuaW5kZXhPZihcInRvcFwiKT4tMSxyaWdodDp0LmluZGV4T2YoXCJyaWdodFwiKT4tMSxib3R0b206dC5pbmRleE9mKFwiYm90dG9tXCIpPi0xLGxlZnQ6dC5pbmRleE9mKFwibGVmdFwiKT4tMSx2ZXJ0aWNhbDpcInRvcFwiPT09dHx8XCJib3R0b21cIj09PXQsaG9yaXpvbnRhbDpcImxlZnRcIj09PXR8fFwicmlnaHRcIj09PXR9fSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQuaGVhZGVyLm9mZnNldH0scmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQucmlnaHQub2Zmc2V0fSxib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQuZm9vdGVyLm9mZnNldH0sbGVmdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5sZWZ0Lm9mZnNldH0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0YWNoLGU9W10saT10aGlzLiRxLmkxOG4ucnRsPy0xOjE7dC50b3AmJnRoaXMudG9wP2UucHVzaChcInRyYW5zbGF0ZVkoXCIrdGhpcy50b3ArXCJweClcIik6dC5ib3R0b20mJnRoaXMuYm90dG9tJiZlLnB1c2goXCJ0cmFuc2xhdGVZKFwiKy10aGlzLmJvdHRvbStcInB4KVwiKSx0LmxlZnQmJnRoaXMubGVmdD9lLnB1c2goXCJ0cmFuc2xhdGVYKFwiK2kqdGhpcy5sZWZ0K1wicHgpXCIpOnQucmlnaHQmJnRoaXMucmlnaHQmJmUucHVzaChcInRyYW5zbGF0ZVgoXCIrLWkqdGhpcy5yaWdodCtcInB4KVwiKTt2YXIgcz1lLmxlbmd0aD97dHJhbnNmb3JtOmUuam9pbihcIiBcIil9Ont9O3JldHVybiB0aGlzLm9mZnNldCYmKHMubWFyZ2luPXRoaXMub2Zmc2V0WzFdK1wicHggXCIrdGhpcy5vZmZzZXRbMF0rXCJweFwiKSx0LnZlcnRpY2FsPyh0aGlzLmxlZnQmJihzW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT10aGlzLmxlZnQrXCJweFwiKSx0aGlzLnJpZ2h0JiYoc1t0aGlzLiRxLmkxOG4ucnRsP1wibGVmdFwiOlwicmlnaHRcIl09dGhpcy5yaWdodCtcInB4XCIpKTp0Lmhvcml6b250YWwmJih0aGlzLnRvcCYmKHMudG9wPXRoaXMudG9wK1wicHhcIiksdGhpcy5ib3R0b20mJihzLmJvdHRvbT10aGlzLmJvdHRvbStcInB4XCIpKSxzfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW1wiZml4ZWQtXCIrdGhpcy5wb3NpdGlvbixcInEtcGFnZS1zdGlja3ktXCIrKHRoaXMuZXhwYW5kP1wiZXhwYW5kXCI6XCJzaHJpbmtcIildfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wYWdlLXN0aWNreSBxLWxheW91dC10cmFuc2l0aW9uIHJvdyBmbGV4LWNlbnRlclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGV9LHRoaXMuZXhwYW5kP3RoaXMuJHNsb3RzLmRlZmF1bHQ6W3QoXCJzcGFuXCIsdGhpcy4kc2xvdHMuZGVmYXVsdCldKX19LFFMaXN0SGVhZGVyPXtuYW1lOlwiUUxpc3RIZWFkZXJcIixwcm9wczp7aW5zZXQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1saXN0LWhlYWRlclwiLGNsYXNzOntcInEtbGlzdC1oZWFkZXItaW5zZXRcIjp0aGlzLmluc2V0fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRTW9kYWxMYXlvdXQ9e25hbWU6XCJRTW9kYWxMYXlvdXRcIixpbmplY3Q6e19fcW1vZGFsOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFNb2RhbExheW91dCBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTW9kYWxcIil9fX0scHJvcHM6e2hlYWRlclN0eWxlOltTdHJpbmcsT2JqZWN0LEFycmF5XSxoZWFkZXJDbGFzczpbU3RyaW5nLE9iamVjdCxBcnJheV0sY29udGVudFN0eWxlOltTdHJpbmcsT2JqZWN0LEFycmF5XSxjb250ZW50Q2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldLGZvb3RlclN0eWxlOltTdHJpbmcsT2JqZWN0LEFycmF5XSxmb290ZXJDbGFzczpbU3RyaW5nLE9iamVjdCxBcnJheV19LHdhdGNoOntfX3Ftb2RhbDpmdW5jdGlvbih0LGUpe2UmJmUudW5yZWdpc3Rlcih0aGlzKSx0JiZ0LnJlZ2lzdGVyKHRoaXMpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuX19xbW9kYWwmJnRoaXMuX19xbW9kYWwucmVnaXN0ZXIodGhpcyl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fcW1vZGFsJiZ0aGlzLl9fcW1vZGFsLnVucmVnaXN0ZXIodGhpcyl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4odGhpcy4kc2xvdHMuaGVhZGVyfHx0aGlzLiRzbG90cy5uYXZpZ2F0aW9uKSYmZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1oZWFkZXJcIixzdHlsZTp0aGlzLmhlYWRlclN0eWxlLGNsYXNzOnRoaXMuaGVhZGVyQ2xhc3N9LFt0aGlzLiRzbG90cy5oZWFkZXIsdGhpcy4kc2xvdHMubmF2aWdhdGlvbl0pKSxlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbW9kYWwtbGF5b3V0LWNvbnRlbnQgY29sIHNjcm9sbFwiLHN0eWxlOnRoaXMuY29udGVudFN0eWxlLGNsYXNzOnRoaXMuY29udGVudENsYXNzfSx0aGlzLiRzbG90cy5kZWZhdWx0KSksdGhpcy4kc2xvdHMuZm9vdGVyJiZlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LWZvb3RlclwiLHN0eWxlOnRoaXMuZm9vdGVyU3R5bGUsY2xhc3M6dGhpcy5mb290ZXJDbGFzc30sW3RoaXMuJHNsb3RzLmZvb3RlcixudWxsXSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1vZGFsLWxheW91dCBjb2wgY29sdW1uIG5vLXdyYXBcIn0sZSl9fSxRTm9Tc3I9e25hbWU6XCJRTm9Tc3JcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxwcm9wczp7dGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9LHBsYWNlaG9sZGVyOlN0cmluZ30scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY2FuUmVuZGVyKXt2YXIgZT10aGlzLiRzbG90cy5kZWZhdWx0O3JldHVybiBlJiZlLmxlbmd0aD4xP3QodGhpcy50YWcsZSk6ZT9lWzBdOm51bGx9aWYodGhpcy4kc2xvdHMucGxhY2Vob2xkZXIpe3ZhciBpPXRoaXMuJHNsb3RzLnBsYWNlaG9sZGVyO3JldHVybiBpJiZpLmxlbmd0aD4xP3QodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1uby1zc3ItcGxhY2Vob2xkZXJcIn0saSk6aT9pWzBdOm51bGx9aWYodGhpcy5wbGFjZWhvbGRlcilyZXR1cm4gdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLW5vLXNzci1wbGFjZWhvbGRlclwifSxbdGhpcy5wbGFjZWhvbGRlcl0pfX0sUVBhZ2luYXRpb249e25hbWU6XCJRUGFnaW5hdGlvblwiLHByb3BzOnt2YWx1ZTp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITB9LG1pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxtYXg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdGV4dENvbG9yOlN0cmluZyxzaXplOlN0cmluZyxkaXNhYmxlOkJvb2xlYW4saW5wdXQ6Qm9vbGVhbixib3VuZGFyeUxpbmtzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxib3VuZGFyeU51bWJlcnM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0Om51bGx9LGRpcmVjdGlvbkxpbmtzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxlbGxpcHNlczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6bnVsbH0sbWF4UGFnZXM6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuISh0PDApfHwoY29uc29sZS5lcnJvcihcIm1heFBhZ2VzIHNob3VsZCBub3QgYmUgbmVnYXRpdmVcIiksITEpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bmV3UGFnZTpudWxsfX0sd2F0Y2g6e21pbjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXRoaXMudmFsdWV9LG1heDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXRoaXMudmFsdWV9fSxjb21wdXRlZDp7bW9kZWw6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5kaXNhYmxlJiZ0JiYhaXNOYU4odCkpe3ZhciBpPWJldHdlZW4ocGFyc2VJbnQodCwxMCksdGhpcy5taW4sdGhpcy5tYXgpO3RoaXMuJGVtaXQoXCJpbnB1dFwiLGkpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkoaSkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLGkpfSl9fX0saW5wdXRQbGFjZWhvbGRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsK1wiIC8gXCIrdGhpcy5tYXh9LF9fYm91bmRhcnlMaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmJvdW5kYXJ5TGlua3MsdGhpcy5pbnB1dCl9LF9fYm91bmRhcnlOdW1iZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRCb29sKHRoaXMuYm91bmRhcnlOdW1iZXJzLCF0aGlzLmlucHV0KX0sX19kaXJlY3Rpb25MaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmRpcmVjdGlvbkxpbmtzLHRoaXMuaW5wdXQpfSxfX2VsbGlwc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRCb29sKHRoaXMuZWxsaXBzZXMsIXRoaXMuaW5wdXQpfSxpY29uczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLiRxLmljb24ucGFnaW5hdGlvbi5maXJzdCx0aGlzLiRxLmljb24ucGFnaW5hdGlvbi5wcmV2LHRoaXMuJHEuaWNvbi5wYWdpbmF0aW9uLm5leHQsdGhpcy4kcS5pY29uLnBhZ2luYXRpb24ubGFzdF07cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/dC5yZXZlcnNlKCk6dH19LG1ldGhvZHM6e3NldDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXR9LHNldEJ5T2Zmc2V0OmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw9dGhpcy5tb2RlbCt0fSxfX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMubW9kZWw9dGhpcy5uZXdQYWdlLHRoaXMubmV3UGFnZT1udWxsfSxfX2dldEJvb2w6ZnVuY3Rpb24odCxlKXtyZXR1cm5bITAsITFdLmluY2x1ZGVzKHQpP3Q6ZX0sX19nZXRCdG46ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlLnByb3BzPU9iamVjdC5hc3NpZ24oe2NvbG9yOnRoaXMuY29sb3IsZmxhdDohMCxzaXplOnRoaXMuc2l6ZX0saSksdChRQnRuLGUpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPVtdLG49W107aWYodGhpcy5fX2JvdW5kYXJ5TGlua3MmJihpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibHNcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoZS5taW4pfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZXx8dGhpcy52YWx1ZTw9dGhpcy5taW4saWNvbjp0aGlzLmljb25zWzBdfSkpLHMudW5zaGlmdCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJsZVwiLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChlLm1heCl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlfHx0aGlzLnZhbHVlPj10aGlzLm1heCxpY29uOnRoaXMuaWNvbnNbM119KSkpLHRoaXMuX19kaXJlY3Rpb25MaW5rcyYmKGkucHVzaCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJkcFwiLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldEJ5T2Zmc2V0KC0xKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGV8fHRoaXMudmFsdWU8PXRoaXMubWluLGljb246dGhpcy5pY29uc1sxXX0pKSxzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZG5cIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRCeU9mZnNldCgxKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGV8fHRoaXMudmFsdWU+PXRoaXMubWF4LGljb246dGhpcy5pY29uc1syXX0pKSksdGhpcy5pbnB1dCluLnB1c2godChRSW5wdXQse3N0YXRpY0NsYXNzOlwiaW5saW5lIG5vLXBhZGRpbmdcIixzdHlsZTp7d2lkdGg6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLmxlbmd0aCtcInJlbVwifSxwcm9wczp7dHlwZTpcIm51bWJlclwiLHZhbHVlOnRoaXMubmV3UGFnZSxub051bWJlclRvZ2dsZTohMCxtaW46dGhpcy5taW4sbWF4OnRoaXMubWF4LGNvbG9yOnRoaXMuY29sb3IscGxhY2Vob2xkZXI6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLGRpc2FibGU6dGhpcy5kaXNhYmxlLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS5uZXdQYWdlPXR9LGtleWRvd246ZnVuY3Rpb24odCl7cmV0dXJuIDEzPT09Z2V0RXZlbnRLZXkodCkmJmUuX191cGRhdGUoKX0sYmx1cjpmdW5jdGlvbigpe3JldHVybiBlLl9fdXBkYXRlKCl9fX0pKTtlbHNle3ZhciBvPU1hdGgubWF4KHRoaXMubWF4UGFnZXMsMSsodGhpcy5fX2VsbGlwc2VzPzI6MCkrKHRoaXMuX19ib3VuZGFyeU51bWJlcnM/MjowKSkscj10aGlzLm1pbixhPXRoaXMubWF4LGw9ITEsYz0hMSxoPSExLHU9ITE7dGhpcy5tYXhQYWdlcyYmbzx0aGlzLm1heC10aGlzLm1pbisxJiYobz0xKzIqTWF0aC5mbG9vcihvLzIpLHI9TWF0aC5tYXgodGhpcy5taW4sTWF0aC5taW4odGhpcy5tYXgtbysxLHRoaXMudmFsdWUtTWF0aC5mbG9vcihvLzIpKSksYT1NYXRoLm1pbih0aGlzLm1heCxyK28tMSksdGhpcy5fX2JvdW5kYXJ5TnVtYmVycyYmKGg9ITAscis9MSksdGhpcy5fX2VsbGlwc2VzJiZyPnRoaXMubWluKyh0aGlzLl9fYm91bmRhcnlOdW1iZXJzPzE6MCkmJihsPSEwLHIrPTEpLHRoaXMuX19ib3VuZGFyeU51bWJlcnMmJih1PSEwLGEtPTEpLHRoaXMuX19lbGxpcHNlcyYmYTx0aGlzLm1heC0odGhpcy5fX2JvdW5kYXJ5TnVtYmVycz8xOjApJiYoYz0hMCxhLT0xKSk7dmFyIGQ9e21pbldpZHRoOk1hdGgubWF4KDIsU3RyaW5nKHRoaXMubWF4KS5sZW5ndGgpK1wiZW1cIn07aWYoaCl7dmFyIHA9dGhpcy5taW49PT10aGlzLnZhbHVlO2kucHVzaCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJuc1wiLHN0eWxlOmQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGUubWluKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGUsZmxhdDohcCx0ZXh0Q29sb3I6cD90aGlzLnRleHRDb2xvcjpudWxsLGxhYmVsOnRoaXMubWluLG5vUmlwcGxlOiEwfSkpfWlmKHUpe3ZhciBmPXRoaXMubWF4PT09dGhpcy52YWx1ZTtzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibmVcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChlLm1heCl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlLGZsYXQ6IWYsdGV4dENvbG9yOmY/dGhpcy50ZXh0Q29sb3I6bnVsbCxsYWJlbDp0aGlzLm1heCxub1JpcHBsZTohMH0pKX1sJiZpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZXNcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChyLTEpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZSxsYWJlbDpcIuKAplwifSkpLGMmJnMudW5zaGlmdCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJlZVwiLHN0eWxlOmQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGErMSl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlLGxhYmVsOlwi4oCmXCJ9KSk7Zm9yKHZhciBtPWZ1bmN0aW9uKGkpe3ZhciBzPWk9PT1lLnZhbHVlO24ucHVzaChlLl9fZ2V0QnRuKHQse2tleTpcImJwZ1wiK2ksc3R5bGU6ZCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoaSl9fX0se2Rpc2FibGU6ZS5kaXNhYmxlLGZsYXQ6IXMsdGV4dENvbG9yOnM/ZS50ZXh0Q29sb3I6bnVsbCxsYWJlbDppLG5vUmlwcGxlOiEwfSkpfSxnPXI7Zzw9YTtnKyspbShnKX1yZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFnaW5hdGlvbiByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlfX0sW2ksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBqdXN0aWZ5LWNlbnRlclwifSxbbl0pLHNdKX19LFFQYXJhbGxheD17bmFtZTpcIlFQYXJhbGxheFwiLHByb3BzOntzcmM6U3RyaW5nLGhlaWdodDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1MDB9LHNwZWVkOnt0eXBlOk51bWJlcixkZWZhdWx0OjEsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wJiZ0PD0xfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2Nyb2xsaW5nOiExfX0sd2F0Y2g6e2hlaWdodDpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVQb3MoKX19LG1ldGhvZHM6e19fb25SZXNpemU6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRhcmdldCYmKHRoaXMubWVkaWFIZWlnaHQ9dGhpcy5tZWRpYS5uYXR1cmFsSGVpZ2h0fHxoZWlnaHQodGhpcy5tZWRpYSksdGhpcy5fX3VwZGF0ZVBvcygpKX0sX191cGRhdGVQb3M6ZnVuY3Rpb24oKXt2YXIgdCxlLGkscztpZih0aGlzLnNjcm9sbFRhcmdldD09PXdpbmRvdz8odD0wLGk9ZT13aW5kb3cuaW5uZXJIZWlnaHQpOmk9KHQ9b2Zmc2V0KHRoaXMuc2Nyb2xsVGFyZ2V0KS50b3ApKyhlPWhlaWdodCh0aGlzLnNjcm9sbFRhcmdldCkpLChzPW9mZnNldCh0aGlzLiRlbCkudG9wKSt0aGlzLmhlaWdodD50JiZzPGkpe3ZhciBuPShpLXMpLyh0aGlzLmhlaWdodCtlKTt0aGlzLl9fc2V0UG9zKCh0aGlzLm1lZGlhSGVpZ2h0LXRoaXMuaGVpZ2h0KSpuKnRoaXMuc3BlZWQpfX0sX19zZXRQb3M6ZnVuY3Rpb24odCl7dGhpcy5tZWRpYS5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGUzRCgtNTAlLFwiK3QrXCJweCwgMClcIn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFyYWxsYXhcIixzdHlsZTp7aGVpZ2h0OnRoaXMuaGVpZ2h0K1wicHhcIn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wYXJhbGxheC1tZWRpYSBhYnNvbHV0ZS1mdWxsXCJ9LFt0aGlzLiRzbG90cy5tZWRpYXx8dChcImltZ1wiLHtyZWY6XCJtZWRpYVwiLGF0dHJzOntzcmM6dGhpcy5zcmN9fSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wYXJhbGxheC10ZXh0IGFic29sdXRlLWZ1bGwgY29sdW1uIGZsZXgtY2VudGVyIG5vLXBvaW50ZXItZXZlbnRzXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dGhpcy5fX3NldFBvcz1mcmFtZURlYm91bmNlKHRoaXMuX19zZXRQb3MpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QubWVkaWE9dC4kc2xvdHMubWVkaWE/dC4kc2xvdHMubWVkaWFbMF0uZWxtOnQuJHJlZnMubWVkaWEsdC5tZWRpYS5vbmxvYWQ9dC5tZWRpYS5vbmxvYWRzdGFydD10Ll9fb25SZXNpemUsdC5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHQuJGVsKSx0LnJlc2l6ZUhhbmRsZXI9ZGVib3VuY2UodC5fX29uUmVzaXplLDUwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQucmVzaXplSGFuZGxlcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHQuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0Ll9fdXBkYXRlUG9zLGxpc3Rlbk9wdHMucGFzc2l2ZSksdC5fX29uUmVzaXplKCl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5yZXNpemVIYW5kbGVyLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVQb3MsbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLm1lZGlhLm9ubG9hZD10aGlzLm1lZGlhLm9ubG9hZHN0YXJ0PW51bGx9fSxRUG9wdXBFZGl0PXtuYW1lOlwiUVBvcHVwRWRpdFwiLHByb3BzOnt2YWx1ZTp7fSxwZXJzaXN0ZW50OkJvb2xlYW4sa2VlcE9uU2NyZWVuOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sdGl0bGU6U3RyaW5nLGJ1dHRvbnM6Qm9vbGVhbixsYWJlbFNldDpTdHJpbmcsbGFiZWxDYW5jZWw6U3RyaW5nLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSx2YWxpZGF0ZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxkaXNhYmxlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5pdGlhbFZhbHVlOlwiXCJ9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kcmVmcy5wb3BvdmVyLnJlcG9zaXRpb24oKX0pfX0sbWV0aG9kczp7Y2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5fX2hhc0NoYW5nZWQoKSYmKHRoaXMuJGVtaXQoXCJjYW5jZWxcIix0aGlzLnZhbHVlLHRoaXMuaW5pdGlhbFZhbHVlKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLmluaXRpYWxWYWx1ZSkpLHRoaXMuJG5leHRUaWNrKHRoaXMuX19jbG9zZSl9LHNldDpmdW5jdGlvbigpe2lmKHRoaXMuX19oYXNDaGFuZ2VkKCkpe2lmKCF0aGlzLnZhbGlkYXRlKHRoaXMudmFsdWUpKXJldHVybjt0aGlzLiRlbWl0KFwic2F2ZVwiLHRoaXMudmFsdWUsdGhpcy5pbml0aWFsVmFsdWUpfXRoaXMuX19jbG9zZSgpfSxfX2hhc0NoYW5nZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSkhPT1KU09OLnN0cmluZ2lmeSh0aGlzLmluaXRpYWxWYWx1ZSl9LF9fY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnZhbGlkYXRlZD0hMCx0aGlzLiRyZWZzLnBvcG92ZXIuaGlkZSgpfSxfX2dldENvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kc2xvdHMudGl0bGV8fHRoaXMudGl0bGU7cmV0dXJuW2UmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRpdGxlIHEtbXQtc20gcS1tYi1zbVwifSxbZV0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KS5jb25jYXQoW3RoaXMuYnV0dG9ucyYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBqdXN0aWZ5LWNlbnRlciBuby13cmFwIHEtbXQtc21cIn0sW3QoUUJ0bix7cHJvcHM6e2ZsYXQ6ITAsY29sb3I6dGhpcy5jb2xvcixsYWJlbDp0aGlzLmxhYmVsQ2FuY2VsfHx0aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsfSxvbjp7Y2xpY2s6dGhpcy5jYW5jZWx9fSksdChRQnRuLHtzdGF0aWNDbGFzczpcInEtbWwtc21cIixwcm9wczp7ZmxhdDohMCxjb2xvcjp0aGlzLmNvbG9yLGxhYmVsOnRoaXMubGFiZWxTZXR8fHRoaXMuJHEuaTE4bi5sYWJlbC5zZXR9LG9uOntjbGljazp0aGlzLnNldH19KV0pfHx2b2lkIDBdKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFFQb3BvdmVyLHtzdGF0aWNDbGFzczpcInEtdGFibGUtZWRpdCBxLXB4LW1kIHEtcHktc21cIixyZWY6XCJwb3BvdmVyXCIscHJvcHM6e2NvdmVyOiEwLHBlcnNpc3RlbnQ6dGhpcy5wZXJzaXN0ZW50LGtlZXBPblNjcmVlbjp0aGlzLmtlZXBPblNjcmVlbixkaXNhYmxlOnRoaXMuZGlzYWJsZX0sb246e3Nob3c6ZnVuY3Rpb24oKXt2YXIgdD1lLiRlbC5xdWVyeVNlbGVjdG9yKFwiLnEtaW5wdXQtdGFyZ2V0Om5vdCgucS1pbnB1dC1zaGFkb3cpXCIpfHxlLiRlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIil8fGUuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJ0ZXh0YXJlYVwiKTt0JiZ0LmZvY3VzKCksZS4kZW1pdChcInNob3dcIiksZS5pbml0aWFsVmFsdWU9Y2xvbmUoZS52YWx1ZSksZS52YWxpZGF0ZWQ9ITF9LFwiZXNjYXBlLWtleVwiOmZ1bmN0aW9uKCl7ZS52YWxpZGF0ZWQ9ITAsZS4kZW1pdChcImNhbmNlbFwiLGUudmFsdWUsZS5pbml0aWFsVmFsdWUpLGUuJGVtaXQoXCJpbnB1dFwiLGUuaW5pdGlhbFZhbHVlKX0saGlkZTpmdW5jdGlvbigpe2UudmFsaWRhdGVkfHwoZS5fX2hhc0NoYW5nZWQoKSYmKGUudmFsaWRhdGUoZS52YWx1ZSk/ZS4kZW1pdChcInNhdmVcIixlLnZhbHVlLGUuaW5pdGlhbFZhbHVlKTooZS4kZW1pdChcImNhbmNlbFwiLGUudmFsdWUsZS5pbml0aWFsVmFsdWUpLGUuJGVtaXQoXCJpbnB1dFwiLGUuaW5pdGlhbFZhbHVlKSkpLGUuJGVtaXQoXCJoaWRlXCIpKX19LG5hdGl2ZU9uOntrZXlkb3duOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJihlLmJ1dHRvbnM/ZS5zZXQoKTplLiRyZWZzLnBvcG92ZXIuaGlkZSgpKX19fSx0aGlzLl9fZ2V0Q29udGVudCh0KSl9fTtmdW5jdGlvbiB3aWR0aCQxKHQpe3JldHVybnt3aWR0aDp0K1wiJVwifX12YXIgUVByb2dyZXNzPXtuYW1lOlwiUVByb2dyZXNzXCIscHJvcHM6e3BlcmNlbnRhZ2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHN0cmlwZTpCb29sZWFuLGFuaW1hdGU6Qm9vbGVhbixpbmRldGVybWluYXRlOkJvb2xlYW4sYnVmZmVyOk51bWJlcixoZWlnaHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCI0cHhcIn19LGNvbXB1dGVkOnttb2RlbDpmdW5jdGlvbigpe3JldHVybiBiZXR3ZWVuKHRoaXMucGVyY2VudGFnZSwwLDEwMCl9LGJ1ZmZlck1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIGJldHdlZW4odGhpcy5idWZmZXJ8fDAsMCwxMDAtdGhpcy5tb2RlbCl9LGJ1ZmZlclN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHdpZHRoJDEodGhpcy5idWZmZXJNb2RlbCl9LHRyYWNrU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gd2lkdGgkMSh0aGlzLmJ1ZmZlcj8xMDAtdGhpcy5idWZmZXI6MTAwKX0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVyblwidGV4dC1cIit0aGlzLmNvbG9yfSxjb21wdXRlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue2hlaWdodDp0aGlzLmhlaWdodH19LG1vZGVsQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57YW5pbWF0ZTp0aGlzLmFuaW1hdGUsc3RyaXBlOnRoaXMuc3RyaXBlLGluZGV0ZXJtaW5hdGU6dGhpcy5pbmRldGVybWluYXRlfX0sbW9kZWxTdHlsZTpmdW5jdGlvbigpe3JldHVybiB3aWR0aCQxKHRoaXMubW9kZWwpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzc1wiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3N9LFt0aGlzLmJ1ZmZlciYmIXRoaXMuaW5kZXRlcm1pbmF0ZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzcy1idWZmZXJcIixzdHlsZTp0aGlzLmJ1ZmZlclN0eWxlfSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzcy10cmFja1wiLHN0eWxlOnRoaXMudHJhY2tTdHlsZX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXByb2dyZXNzLW1vZGVsXCIsc3R5bGU6dGhpcy5tb2RlbFN0eWxlLGNsYXNzOnRoaXMubW9kZWxDbGFzc30pXSl9fSxoZWlnaHQkMT0tNjUsUVB1bGxUb1JlZnJlc2g9e25hbWU6XCJRUHVsbFRvUmVmcmVzaFwiLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7aGFuZGxlcjp7dHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMH0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGRpc3RhbmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjM1fSxwdWxsTWVzc2FnZTpTdHJpbmcscmVsZWFzZU1lc3NhZ2U6U3RyaW5nLHJlZnJlc2hNZXNzYWdlOlN0cmluZyxyZWZyZXNoSWNvbjpTdHJpbmcsaW5saW5lOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3N0YXRlOlwicHVsbFwiLHB1bGxQb3NpdGlvbjpoZWlnaHQkMSxhbmltYXRpbmc6ITEscHVsbGluZzohMSxzY3JvbGxpbmc6ITF9fSx3YXRjaDp7aW5saW5lOmZ1bmN0aW9uKHQpe3RoaXMuc2V0U2Nyb2xsQ29udGFpbmVyKHQpfX0sY29tcHV0ZWQ6e21lc3NhZ2U6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZVwicHVsbGVkXCI6cmV0dXJuIHRoaXMucmVsZWFzZU1lc3NhZ2V8fHRoaXMuJHEuaTE4bi5wdWxsVG9SZWZyZXNoLnJlbGVhc2U7Y2FzZVwicmVmcmVzaGluZ1wiOnJldHVybiB0aGlzLnJlZnJlc2hNZXNzYWdlfHx0aGlzLiRxLmkxOG4ucHVsbFRvUmVmcmVzaC5yZWZyZXNoO2Nhc2VcInB1bGxcIjpkZWZhdWx0OnJldHVybiB0aGlzLnB1bGxNZXNzYWdlfHx0aGlzLiRxLmkxOG4ucHVsbFRvUmVmcmVzaC5wdWxsfX0sc3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57dHJhbnNmb3JtOlwidHJhbnNsYXRlWShcIit0aGlzLnB1bGxQb3NpdGlvbitcInB4KVwiLG1hcmdpbkJvdHRvbTpoZWlnaHQkMStcInB4XCJ9fSxtZXNzYWdlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHQtXCIrdGhpcy5jb2xvcn19LG1ldGhvZHM6e19fcHVsbDpmdW5jdGlvbih0KXtpZighdGhpcy5kaXNhYmxlKXtpZih0LmlzRmluYWwpcmV0dXJuIHRoaXMuc2Nyb2xsaW5nPSExLHRoaXMucHVsbGluZz0hMSx2b2lkKFwicHVsbGVkXCI9PT10aGlzLnN0YXRlPyh0aGlzLnN0YXRlPVwicmVmcmVzaGluZ1wiLHRoaXMuX19hbmltYXRlVG8oMCksdGhpcy50cmlnZ2VyKCkpOlwicHVsbFwiPT09dGhpcy5zdGF0ZSYmdGhpcy5fX2FuaW1hdGVUbyhoZWlnaHQkMSkpO2lmKHRoaXMuYW5pbWF0aW5nfHx0aGlzLnNjcm9sbGluZ3x8XCJyZWZyZXNoaW5nXCI9PT10aGlzLnN0YXRlKXJldHVybiEwO3ZhciBlPWdldFNjcm9sbFBvc2l0aW9uKHRoaXMuc2Nyb2xsQ29udGFpbmVyKTtpZigwIT09ZXx8MD09PWUmJlwiZG93blwiIT09dC5kaXJlY3Rpb24pcmV0dXJuIHRoaXMuc2Nyb2xsaW5nPSEwLHRoaXMucHVsbGluZyYmKHRoaXMucHVsbGluZz0hMSx0aGlzLnN0YXRlPVwicHVsbFwiLHRoaXMuX19hbmltYXRlVG8oaGVpZ2h0JDEpKSwhMDt0LmV2dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHVsbGluZz0hMCx0aGlzLnB1bGxQb3NpdGlvbj1oZWlnaHQkMStNYXRoLm1heCgwLE1hdGgucG93KHQuZGlzdGFuY2UueSwuODUpKSx0aGlzLnN0YXRlPXRoaXMucHVsbFBvc2l0aW9uPnRoaXMuZGlzdGFuY2U/XCJwdWxsZWRcIjpcInB1bGxcIn19LF9fYW5pbWF0ZVRvOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzOyFpJiZ0aGlzLmFuaW1hdGlvbklkJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGluZyksdGhpcy5wdWxsUG9zaXRpb24tPSh0aGlzLnB1bGxQb3NpdGlvbi10KS83LHRoaXMucHVsbFBvc2l0aW9uLXQ+MT90aGlzLmFuaW1hdGluZz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtzLl9fYW5pbWF0ZVRvKHQsZSwhMCl9KTp0aGlzLmFuaW1hdGluZz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtzLnB1bGxQb3NpdGlvbj10LHMuYW5pbWF0aW5nPSExLGUmJmUoKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmhhbmRsZXIoZnVuY3Rpb24oKXt0Ll9fYW5pbWF0ZVRvKGhlaWdodCQxLGZ1bmN0aW9uKCl7dC5zdGF0ZT1cInB1bGxcIn0pfSl9LHNldFNjcm9sbENvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5zY3JvbGxDb250YWluZXI9dD9lLiRlbC5wYXJlbnROb2RlOmdldFNjcm9sbFRhcmdldChlLiRlbCl9KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldFNjcm9sbENvbnRhaW5lcih0aGlzLmlubGluZSl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInB1bGwtdG8tcmVmcmVzaCBvdmVyZmxvdy1oaWRkZW4teVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInB1bGwtdG8tcmVmcmVzaC1jb250YWluZXJcIixzdHlsZTp0aGlzLnN0eWxlLGRpcmVjdGl2ZXM6dGhpcy5kaXNhYmxlP251bGw6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnt2ZXJ0aWNhbDohMCxtaWdodFByZXZlbnQ6ITB9LHZhbHVlOnRoaXMuX19wdWxsfV19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicHVsbC10by1yZWZyZXNoLW1lc3NhZ2Ugcm93IGZsZXgtY2VudGVyXCIsY2xhc3M6dGhpcy5tZXNzYWdlQ2xhc3N9LFt0KFFJY29uLHtjbGFzczp7XCJyb3RhdGUtMTgwXCI6XCJwdWxsZWRcIj09PXRoaXMuc3RhdGV9LHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5wdWxsVG9SZWZyZXNoLmFycm93fSxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTpcInJlZnJlc2hpbmdcIiE9PXRoaXMuc3RhdGV9XX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwiYW5pbWF0ZS1zcGluXCIscHJvcHM6e25hbWU6dGhpcy5yZWZyZXNoSWNvbnx8dGhpcy4kcS5pY29uLnB1bGxUb1JlZnJlc2gucmVmcmVzaH0sZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6XCJyZWZyZXNoaW5nXCI9PT10aGlzLnN0YXRlfV19KSxcIiBcIit0aGlzLm1lc3NhZ2VdKSx0aGlzLiRzbG90cy5kZWZhdWx0XSldKX19LGRyYWdUeXBlPXtNSU46MCxSQU5HRToxLE1BWDoyfSxRUmFuZ2U9e25hbWU6XCJRUmFuZ2VcIixtaXhpbnM6W1NsaWRlck1peGluXSxwcm9wczp7dmFsdWU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57bWluOjAsbWF4OjB9fSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoXCJtaW5cIikmJnQuaGFzT3duUHJvcGVydHkoXCJtYXhcIil9fSxkcmFnUmFuZ2U6Qm9vbGVhbixkcmFnT25seVJhbmdlOkJvb2xlYW4sbGVmdExhYmVsQ29sb3I6U3RyaW5nLGxlZnRMYWJlbFZhbHVlOlN0cmluZyxyaWdodExhYmVsQ29sb3I6U3RyaW5nLHJpZ2h0TGFiZWxWYWx1ZTpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZhbHVlKSxkcmFnZ2luZzohMSxjdXJyZW50TWluUGVyY2VudGFnZToodGhpcy52YWx1ZS5taW4tdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbiksY3VycmVudE1heFBlcmNlbnRhZ2U6KHRoaXMudmFsdWUubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfX0sY29tcHV0ZWQ6e3BlcmNlbnRhZ2VNaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwPyh0aGlzLm1vZGVsLm1pbi10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKTp0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlfSxwZXJjZW50YWdlTWF4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcD8odGhpcy5tb2RlbC5tYXgtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbik6dGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZX0sYWN0aXZlVHJhY2tXaWR0aDpmdW5jdGlvbigpe3JldHVybiAxMDAqKHRoaXMucGVyY2VudGFnZU1heC10aGlzLnBlcmNlbnRhZ2VNaW4pK1wiJVwifSxsZWZ0RGlzcGxheVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubGVmdExhYmVsVmFsdWU/dGhpcy5sZWZ0TGFiZWxWYWx1ZTp0aGlzLm1vZGVsLm1pbn0scmlnaHREaXNwbGF5VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5yaWdodExhYmVsVmFsdWU/dGhpcy5yaWdodExhYmVsVmFsdWU6dGhpcy5tb2RlbC5tYXh9LGxlZnRUb29sdGlwQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0TGFiZWxDb2xvcnx8dGhpcy5sYWJlbENvbG9yfSxyaWdodFRvb2x0aXBDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0TGFiZWxDb2xvcnx8dGhpcy5sYWJlbENvbG9yfX0sd2F0Y2g6e1widmFsdWUubWluXCI6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbC5taW49dH0sXCJ2YWx1ZS5tYXhcIjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsLm1heD10fSxcIm1vZGVsLm1pblwiOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmd8fCh0PnRoaXMubW9kZWwubWF4JiYodD10aGlzLm1vZGVsLm1heCksdGhpcy5jdXJyZW50TWluUGVyY2VudGFnZT0odC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSl9LFwibW9kZWwubWF4XCI6ZnVuY3Rpb24odCl7dGhpcy5kcmFnZ2luZ3x8KHQ8dGhpcy5tb2RlbC5taW4mJih0PXRoaXMubW9kZWwubWluKSx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlPSh0LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pKX0sbWluOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWwubWluPHQmJnRoaXMuX191cGRhdGUoe21pbjp0fSksdGhpcy5tb2RlbC5tYXg8dCYmdGhpcy5fX3VwZGF0ZSh7bWF4OnR9KSx0aGlzLiRuZXh0VGljayh0aGlzLl9fdmFsaWRhdGVQcm9wcyl9LG1heDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsLm1pbj50JiZ0aGlzLl9fdXBkYXRlKHttaW46dH0pLHRoaXMubW9kZWwubWF4PnQmJnRoaXMuX191cGRhdGUoe21heDp0fSksdGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfSxzdGVwOmZ1bmN0aW9uKCl7dGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfX0sbWV0aG9kczp7X19nZXREcmFnZ2luZzpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMuJHJlZnMuaGFuZGxlLHM9aS5vZmZzZXRXaWR0aCxuPSh0aGlzLmRyYWdPbmx5UmFuZ2U/LTE6MSkqdGhpcy4kcmVmcy5oYW5kbGVNaW4ub2Zmc2V0V2lkdGgvKDIqcyksbz17bGVmdDppLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsd2lkdGg6cyx2YWx1ZU1pbjp0aGlzLm1vZGVsLm1pbix2YWx1ZU1heDp0aGlzLm1vZGVsLm1heCxwZXJjZW50YWdlTWluOnRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2UscGVyY2VudGFnZU1heDp0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlfSxyPWdldFBlcmNlbnRhZ2UodCxvLHRoaXMuJHEuaTE4bi5ydGwpO3JldHVybiByPHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2Urbj9lPWRyYWdUeXBlLk1JTjpyPHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2Utbj90aGlzLmRyYWdSYW5nZXx8dGhpcy5kcmFnT25seVJhbmdlPyhlPWRyYWdUeXBlLlJBTkdFLE9iamVjdC5hc3NpZ24obyx7b2Zmc2V0UGVyY2VudGFnZTpyLG9mZnNldE1vZGVsOmdldE1vZGVsKHIsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscykscmFuZ2VWYWx1ZTpvLnZhbHVlTWF4LW8udmFsdWVNaW4scmFuZ2VQZXJjZW50YWdlOnRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2UtdGhpcy5jdXJyZW50TWluUGVyY2VudGFnZX0pKTplPXRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2UtcjxyLXRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U/ZHJhZ1R5cGUuTUFYOmRyYWdUeXBlLk1JTjplPWRyYWdUeXBlLk1BWCwoIXRoaXMuZHJhZ09ubHlSYW5nZXx8ZT09PWRyYWdUeXBlLlJBTkdFKSYmKG8udHlwZT1lLG8pfSxfX21vdmU6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT10aGlzLmRyYWdnaW5nKTt2YXIgaSxzPWdldFBlcmNlbnRhZ2UodCxlLHRoaXMuJHEuaTE4bi5ydGwpLG49Z2V0TW9kZWwocyx0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKTtzd2l0Y2goZS50eXBlKXtjYXNlIGRyYWdUeXBlLk1JTjppPXM8PWUucGVyY2VudGFnZU1heD97bWluUDpzLG1heFA6ZS5wZXJjZW50YWdlTWF4LG1pbjpuLG1heDplLnZhbHVlTWF4fTp7bWluUDplLnBlcmNlbnRhZ2VNYXgsbWF4UDpzLG1pbjplLnZhbHVlTWF4LG1heDpufTticmVhaztjYXNlIGRyYWdUeXBlLk1BWDppPXM+PWUucGVyY2VudGFnZU1pbj97bWluUDplLnBlcmNlbnRhZ2VNaW4sbWF4UDpzLG1pbjplLnZhbHVlTWluLG1heDpufTp7bWluUDpzLG1heFA6ZS5wZXJjZW50YWdlTWluLG1pbjpuLG1heDplLnZhbHVlTWlufTticmVhaztjYXNlIGRyYWdUeXBlLlJBTkdFOnZhciBvPXMtZS5vZmZzZXRQZXJjZW50YWdlLHI9YmV0d2VlbihlLnBlcmNlbnRhZ2VNaW4rbywwLDEtZS5yYW5nZVBlcmNlbnRhZ2UpLGE9bi1lLm9mZnNldE1vZGVsLGw9YmV0d2VlbihlLnZhbHVlTWluK2EsdGhpcy5taW4sdGhpcy5tYXgtZS5yYW5nZVZhbHVlKTtpPXttaW5QOnIsbWF4UDpyK2UucmFuZ2VQZXJjZW50YWdlLG1pbjpwYXJzZUZsb2F0KGwudG9GaXhlZCh0aGlzLmNvbXB1dGVkRGVjaW1hbHMpKSxtYXg6cGFyc2VGbG9hdCgobCtlLnJhbmdlVmFsdWUpLnRvRml4ZWQodGhpcy5jb21wdXRlZERlY2ltYWxzKSl9fXRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9aS5taW5QLHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2U9aS5tYXhQLHRoaXMubW9kZWw9e21pbjppLm1pbixtYXg6aS5tYXh9fSxfX2VuZDpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXRoaXMuZHJhZ2dpbmcpLHRoaXMuX19tb3ZlKHQsZSksdGhpcy5jdXJyZW50TWluUGVyY2VudGFnZT0odGhpcy5tb2RlbC5taW4tdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbiksdGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZT0odGhpcy5tb2RlbC5tYXgtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9fb25LZXlEb3duOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5rZXlDb2RlO2lmKHRoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoaSkpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBzPXRoaXMuY29tcHV0ZWREZWNpbWFscyxuPXQuY3RybEtleT8xMCp0aGlzLmNvbXB1dGVkU3RlcDp0aGlzLmNvbXB1dGVkU3RlcCxvPVszNyw0MF0uaW5jbHVkZXMoaSk/LW46bixyPXM/cGFyc2VGbG9hdCgodGhpcy5tb2RlbFtlXStvKS50b0ZpeGVkKHMpKTp0aGlzLm1vZGVsW2VdK287dGhpcy5tb2RlbFtlXT1iZXR3ZWVuKHIsXCJtaW5cIj09PWU/dGhpcy5taW46dGhpcy5tb2RlbC5taW4sXCJtYXhcIj09PWU/dGhpcy5tYXg6dGhpcy5tb2RlbC5tYXgpLHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWluLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLHRoaXMuX191cGRhdGUoKX19LF9fb25LZXlVcDpmdW5jdGlvbih0LGUpe3ZhciBpPXQua2V5Q29kZTt0aGlzLmVkaXRhYmxlJiZbMzcsNDAsMzksMzhdLmluY2x1ZGVzKGkpJiZ0aGlzLl9fdXBkYXRlKCEwKX0sX192YWxpZGF0ZVByb3BzOmZ1bmN0aW9uKCl7dGhpcy5taW4+PXRoaXMubWF4P2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogbWluID49IG1heFwiLHRoaXMuJGVsLHRoaXMubWluLHRoaXMubWF4KTpub3REaXZpZGVzKCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscyk/Y29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBzdGVwIG11c3QgYmUgYSBkaXZpc29yIG9mIG1heCAtIG1pblwiLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCk6bm90RGl2aWRlcygodGhpcy5tb2RlbC5taW4tdGhpcy5taW4pL3RoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpP2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogc3RlcCBtdXN0IGJlIGEgZGl2aXNvciBvZiBpbml0aWFsIHZhbHVlLm1pbiAtIG1pblwiLHRoaXMubW9kZWwubWluLHRoaXMubWluLHRoaXMuc3RlcCk6bm90RGl2aWRlcygodGhpcy5tb2RlbC5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpJiZjb25zb2xlLmVycm9yKFwiUmFuZ2UgZXJyb3I6IHN0ZXAgbXVzdCBiZSBhIGRpdmlzb3Igb2YgaW5pdGlhbCB2YWx1ZS5tYXggLSBtaW5cIix0aGlzLm1vZGVsLm1heCx0aGlzLm1heCx0aGlzLnN0ZXApfSxfX2dldEhhbmRsZTpmdW5jdGlvbih0LGUsaSxzLG4sbyxyKXt2YXIgYSxsPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7cmVmOlwiaGFuZGxlXCIraSxzdGF0aWNDbGFzczpcInEtc2xpZGVyLWhhbmRsZSBxLXNsaWRlci1oYW5kbGUtXCIrZSxzdHlsZTooYT17fSxhW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT0xMDAqbitcIiVcIixhLmJvcmRlclJhZGl1cz10aGlzLnNxdWFyZT9cIjBcIjpcIjUwJVwiLGEpLGNsYXNzOltzP1wiaGFuZGxlLWF0LW1pbmltdW1cIjpudWxsLHtkcmFnZ2luZzp0aGlzLmRyYWdnaW5nfV0sYXR0cnM6e3RhYmluZGV4OnRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90aGlzLmVkaXRhYmxlPzA6LTE6dm9pZCAwfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXtyZXR1cm4gbC5fX29uS2V5RG93bih0LGUpfSxrZXl1cDpmdW5jdGlvbih0KXtyZXR1cm4gbC5fX29uS2V5VXAodCxlKX19fSxbdGhpcy5sYWJlbHx8dGhpcy5sYWJlbEFsd2F5cz90KFFDaGlwLHtwcm9wczp7cG9pbnRpbmc6XCJkb3duXCIsc3F1YXJlOiEwLGRlbnNlOiEwLGNvbG9yOm99LHN0YXRpY0NsYXNzOlwicS1zbGlkZXItbGFiZWwgbm8tcG9pbnRlci1ldmVudHNcIixjbGFzczp7XCJsYWJlbC1hbHdheXNcIjp0aGlzLmxhYmVsQWx3YXlzfX0sW3JdKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1yaW5nXCJ9KV0pfSxfX2dldENvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci10cmFjayBhY3RpdmUtdHJhY2tcIixzdHlsZTooZT17fSxlW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT0xMDAqdGhpcy5wZXJjZW50YWdlTWluK1wiJVwiLGUud2lkdGg9dGhpcy5hY3RpdmVUcmFja1dpZHRoLGUpLGNsYXNzOntkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLFwidHJhY2stZHJhZ2dhYmxlXCI6dGhpcy5kcmFnUmFuZ2V8fHRoaXMuZHJhZ09ubHlSYW5nZX19KSx0aGlzLl9fZ2V0SGFuZGxlKHQsXCJtaW5cIixcIk1pblwiLCF0aGlzLmZpbGxIYW5kbGVBbHdheXMmJnRoaXMubW9kZWwubWluPT09dGhpcy5taW4sdGhpcy5wZXJjZW50YWdlTWluLHRoaXMubGVmdFRvb2x0aXBDb2xvcix0aGlzLmxlZnREaXNwbGF5VmFsdWUpLHRoaXMuX19nZXRIYW5kbGUodCxcIm1heFwiLFwiTWF4XCIsITEsdGhpcy5wZXJjZW50YWdlTWF4LHRoaXMucmlnaHRUb29sdGlwQ29sb3IsdGhpcy5yaWdodERpc3BsYXlWYWx1ZSldfX19LFFSYXRpbmc9e25hbWU6XCJRUmF0aW5nXCIscHJvcHM6e3ZhbHVlOk51bWJlcixtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NX0saWNvbjpTdHJpbmcsY29sb3I6U3RyaW5nLHNpemU6U3RyaW5nLHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vdXNlTW9kZWw6MH19LGNvbXB1dGVkOnttb2RlbDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJGVtaXQoXCJpbnB1dFwiLHQpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkodCkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHQpfSl9fSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnJlYWRvbmx5JiYhdGhpcy5kaXNhYmxlfSxjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZGlzYWJsZSYmdC5wdXNoKFwiZGlzYWJsZWRcIiksdGhpcy5lZGl0YWJsZSYmdC5wdXNoKFwiZWRpdGFibGVcIiksdGhpcy5jb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSx0fX0sbWV0aG9kczp7c2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZWRpdGFibGUpe3ZhciBlPWJldHdlZW4ocGFyc2VJbnQodCwxMCksMSx0aGlzLm1heCk7dGhpcy5tb2RlbD10aGlzLm1vZGVsPT09ZT8wOmUsdGhpcy5tb3VzZU1vZGVsPTB9fSxfX3NldEhvdmVyVmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHRoaXMubW91c2VNb2RlbD10KX19LHJlbmRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxpPVtdLHM9dGhpcy5lZGl0YWJsZT8wOi0xLG49ZnVuY3Rpb24obil7aS5wdXNoKHQoXCJzcGFuXCIse2tleTpuLHJlZjpcInJ0XCIrbixhdHRyczp7dGFiaW5kZXg6c30sb246e2tleWRvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGUuc2V0KG4pLHN0b3BBbmRQcmV2ZW50KHQpO2Nhc2UgMzc6Y2FzZSA0MDpyZXR1cm4gZS4kcmVmc1tcInJ0XCIrKG4tMSldJiZlLiRyZWZzW1wicnRcIisobi0xKV0uZm9jdXMoKSxzdG9wQW5kUHJldmVudCh0KTtjYXNlIDM5OmNhc2UgMzg6cmV0dXJuIGUuJHJlZnNbXCJydFwiKyhuKzEpXSYmZS4kcmVmc1tcInJ0XCIrKG4rMSldLmZvY3VzKCksc3RvcEFuZFByZXZlbnQodCl9fX19LFt0KFFJY29uLHtwcm9wczp7bmFtZTplLmljb258fGUuJHEuaWNvbi5yYXRpbmcuaWNvbn0sY2xhc3M6e2FjdGl2ZTohZS5tb3VzZU1vZGVsJiZlLm1vZGVsPj1ufHxlLm1vdXNlTW9kZWwmJmUubW91c2VNb2RlbD49bixleHNlbGVjdGVkOmUubW91c2VNb2RlbCYmZS5tb2RlbD49biYmZS5tb3VzZU1vZGVsPG4saG92ZXJlZDplLm1vdXNlTW9kZWw9PT1ufSxhdHRyczp7dGFiaW5kZXg6LTF9LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChuKX0sbW91c2VvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19zZXRIb3ZlclZhbHVlKG4pfSxtb3VzZW91dDpmdW5jdGlvbigpe2UubW91c2VNb2RlbD0wfSxmb2N1czpmdW5jdGlvbigpe3JldHVybiBlLl9fc2V0SG92ZXJWYWx1ZShuKX0sYmx1cjpmdW5jdGlvbigpe2UubW91c2VNb2RlbD0wfX19KV0pKX0sbz0xO288PXRoaXMubWF4O28rKyluKG8pO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1yYXRpbmcgcm93IGlubGluZSBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zaXplP1wiZm9udC1zaXplOiBcIit0aGlzLnNpemU6XCJcIn0saSl9fSxRU2Nyb2xsQXJlYT17bmFtZTpcIlFTY3JvbGxBcmVhXCIsZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt0aHVtYlN0eWxlOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue319fSxjb250ZW50U3R5bGU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LGNvbnRlbnRBY3RpdmVTdHlsZTp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sZGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MWUzfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnthY3RpdmU6ITEsaG92ZXI6ITEsY29udGFpbmVySGVpZ2h0OjAsc2Nyb2xsUG9zaXRpb246MCxzY3JvbGxIZWlnaHQ6MH19LGNvbXB1dGVkOnt0aHVtYkhpZGRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbEhlaWdodDw9dGhpcy5jb250YWluZXJIZWlnaHR8fCF0aGlzLmFjdGl2ZSYmIXRoaXMuaG92ZXJ9LHRodW1iSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoYmV0d2Vlbih0aGlzLmNvbnRhaW5lckhlaWdodCp0aGlzLmNvbnRhaW5lckhlaWdodC90aGlzLnNjcm9sbEhlaWdodCw1MCx0aGlzLmNvbnRhaW5lckhlaWdodCkpfSxzdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2Nyb2xsUGVyY2VudGFnZSoodGhpcy5jb250YWluZXJIZWlnaHQtdGhpcy50aHVtYkhlaWdodCk7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy50aHVtYlN0eWxlLHt0b3A6dCtcInB4XCIsaGVpZ2h0OnRoaXMudGh1bWJIZWlnaHQrXCJweFwifSl9LG1haW5TdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRodW1iSGlkZGVuP3RoaXMuY29udGVudFN0eWxlOnRoaXMuY29udGVudEFjdGl2ZVN0eWxlfSxzY3JvbGxQZXJjZW50YWdlOmZ1bmN0aW9uKCl7dmFyIHQ9YmV0d2Vlbih0aGlzLnNjcm9sbFBvc2l0aW9uLyh0aGlzLnNjcm9sbEhlaWdodC10aGlzLmNvbnRhaW5lckhlaWdodCksMCwxKTtyZXR1cm4gTWF0aC5yb3VuZCgxZTQqdCkvMWU0fX0sbWV0aG9kczp7c2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24odCxlKXtzZXRTY3JvbGxQb3NpdGlvbih0aGlzLiRyZWZzLnRhcmdldCx0LGUpfSxfX3VwZGF0ZUNvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLmNvbnRhaW5lckhlaWdodCE9PWUmJih0aGlzLmNvbnRhaW5lckhlaWdodD1lLHRoaXMuX19zZXRBY3RpdmUoITAsITApKX0sX191cGRhdGVTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC5wb3NpdGlvbjt0aGlzLnNjcm9sbFBvc2l0aW9uIT09ZSYmKHRoaXMuc2Nyb2xsUG9zaXRpb249ZSx0aGlzLl9fc2V0QWN0aXZlKCEwLCEwKSl9LF9fdXBkYXRlU2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaGVpZ2h0O3RoaXMuc2Nyb2xsSGVpZ2h0IT09ZSYmKHRoaXMuc2Nyb2xsSGVpZ2h0PWUsdGhpcy5fX3NldEFjdGl2ZSghMCwhMCkpfSxfX3BhblRodW1iOmZ1bmN0aW9uKHQpe3QuaXNGaXJzdCYmKHRoaXMucmVmUG9zPXRoaXMuc2Nyb2xsUG9zaXRpb24sdGhpcy5fX3NldEFjdGl2ZSghMCwhMCksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwibm9uLXNlbGVjdGFibGVcIiksZG9jdW1lbnQuc2VsZWN0aW9uP2RvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOndpbmRvdy5nZXRTZWxlY3Rpb24mJndpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSksdC5pc0ZpbmFsJiYodGhpcy5fX3NldEFjdGl2ZSghMSksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwibm9uLXNlbGVjdGFibGVcIikpO3ZhciBlPSh0aGlzLnNjcm9sbEhlaWdodC10aGlzLmNvbnRhaW5lckhlaWdodCkvKHRoaXMuY29udGFpbmVySGVpZ2h0LXRoaXMudGh1bWJIZWlnaHQpO3RoaXMuJHJlZnMudGFyZ2V0LnNjcm9sbFRvcD10aGlzLnJlZlBvcysoXCJkb3duXCI9PT10LmRpcmVjdGlvbj8xOi0xKSp0LmRpc3RhbmNlLnkqZX0sX19wYW5Db250YWluZXI6ZnVuY3Rpb24odCl7dC5pc0ZpcnN0JiYodGhpcy5yZWZQb3M9dGhpcy5zY3JvbGxQb3NpdGlvbix0aGlzLl9fc2V0QWN0aXZlKCEwLCEwKSksdC5pc0ZpbmFsJiZ0aGlzLl9fc2V0QWN0aXZlKCExKTt2YXIgZT10aGlzLnJlZlBvcysoXCJkb3duXCI9PT10LmRpcmVjdGlvbj8tMToxKSp0LmRpc3RhbmNlLnk7dGhpcy4kcmVmcy50YXJnZXQuc2Nyb2xsVG9wPWUsZT4wJiZlK3RoaXMuY29udGFpbmVySGVpZ2h0PHRoaXMuc2Nyb2xsSGVpZ2h0JiZ0LmV2dC5wcmV2ZW50RGVmYXVsdCgpfSxfX21vdXNlV2hlZWw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kcmVmcy50YXJnZXQ7ZS5zY3JvbGxUb3ArPWdldE1vdXNlV2hlZWxEaXN0YW5jZSh0KS55LGUuc2Nyb2xsVG9wPjAmJmUuc2Nyb2xsVG9wK3RoaXMuY29udGFpbmVySGVpZ2h0PHRoaXMuc2Nyb2xsSGVpZ2h0JiZ0LnByZXZlbnREZWZhdWx0KCl9LF9fc2V0QWN0aXZlOmZ1bmN0aW9uKHQsZSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHQhPT10aGlzLmFjdGl2ZT90Pyh0aGlzLmFjdGl2ZT0hMCxlJiZ0aGlzLl9fc3RhcnRUaW1lcigpKTp0aGlzLmFjdGl2ZT0hMTp0JiZ0aGlzLnRpbWVyJiZ0aGlzLl9fc3RhcnRUaW1lcigpfSxfX3N0YXJ0VGltZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3QuYWN0aXZlPSExLHQudGltZXI9bnVsbH0sdGhpcy5kZWxheSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNjcm9sbGFyZWEgcmVsYXRpdmUtcG9zaXRpb25cIixvbjp7bW91c2VlbnRlcjpmdW5jdGlvbigpe2UuaG92ZXI9ITB9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oKXtlLmhvdmVyPSExfX19LFt0KFwiZGl2XCIse3JlZjpcInRhcmdldFwiLHN0YXRpY0NsYXNzOlwic2Nyb2xsIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlbiBmaXRcIixvbjp7d2hlZWw6dGhpcy5fX21vdXNlV2hlZWx9LGRpcmVjdGl2ZXM6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnt2ZXJ0aWNhbDohMCxub01vdXNlOiEwLG1pZ2h0UHJldmVudDohMH0sdmFsdWU6dGhpcy5fX3BhbkNvbnRhaW5lcn1dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImFic29sdXRlIGZ1bGwtd2lkdGhcIixzdHlsZTp0aGlzLm1haW5TdHlsZX0sW3QoUVJlc2l6ZU9ic2VydmFibGUse29uOntyZXNpemU6dGhpcy5fX3VwZGF0ZVNjcm9sbEhlaWdodH19KSx0aGlzLiRzbG90cy5kZWZhdWx0XSksdChRU2Nyb2xsT2JzZXJ2YWJsZSx7b246e3Njcm9sbDp0aGlzLl9fdXBkYXRlU2Nyb2xsfX0pXSksdChRUmVzaXplT2JzZXJ2YWJsZSx7b246e3Jlc2l6ZTp0aGlzLl9fdXBkYXRlQ29udGFpbmVyfX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNjcm9sbGFyZWEtdGh1bWIgYWJzb2x1dGUtcmlnaHRcIixzdHlsZTp0aGlzLnN0eWxlLGNsYXNzOntcImludmlzaWJsZS10aHVtYlwiOnRoaXMudGh1bWJIaWRkZW59LGRpcmVjdGl2ZXM6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnt2ZXJ0aWNhbDohMCxwcmV2ZW50OiEwfSx2YWx1ZTp0aGlzLl9fcGFuVGh1bWJ9XX0pXSk6dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc2Nyb2xsLWFyZWEgcmVsYXRpdmUtcG9zaXRpb25cIixzdHlsZTp0aGlzLmNvbnRlbnRTdHlsZX0sW3QoXCJkaXZcIix7cmVmOlwidGFyZ2V0XCIsc3RhdGljQ2xhc3M6XCJzY3JvbGwgcmVsYXRpdmUtcG9zaXRpb24gZml0XCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9fSxRU2VhcmNoPXtuYW1lOlwiUVNlYXJjaFwiLG1peGluczpbRnJhbWVNaXhpbixJbnB1dE1peGluXSxwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0Olwic2VhcmNoXCJ9LGRlYm91bmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMH0saWNvbjpTdHJpbmcsbm9JY29uOkJvb2xlYW4sdXBwZXJDYXNlOkJvb2xlYW4sbG93ZXJDYXNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy52YWx1ZSxjaGlsZERlYm91bmNlOiExfX0scHJvdmlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbihlKXt0Lm1vZGVsIT09ZSYmKHQubW9kZWw9ZSl9O3JldHVybntfX2lucHV0RGVib3VuY2U6e3NldDplLHNldE5hdjplLHNldENoaWxkRGVib3VuY2U6ZnVuY3Rpb24oZSl7dC5jaGlsZERlYm91bmNlPWV9fX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXR9LG1vZGVsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudmFsdWUhPT10JiYodHx8MD09PXR8fCh0aGlzLm1vZGVsPVwibnVtYmVyXCI9PT10aGlzLnR5cGU/bnVsbDpcIlwiKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLiRlbWl0KFwiaW5wdXRcIixlLm1vZGVsKX0sdGhpcy5kZWJvdW5jZVZhbHVlKSl9fSxjb21wdXRlZDp7ZGVib3VuY2VWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkRGVib3VuY2U/MDp0aGlzLmRlYm91bmNlfSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc051bWJlciYmMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmNsZWFyVmFsdWU6dGhpcy5jbGVhclZhbHVlfHwoXCJudW1iZXJcIj09PXRoaXMudHlwZT9udWxsOlwiXCIpfSxjb250cm9sQmVmb3JlOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuYmVmb3JlfHxbXSkuc2xpY2UoKTtyZXR1cm4gdGhpcy5ub0ljb258fHQudW5zaGlmdCh7aWNvbjp0aGlzLmljb258fHRoaXMuJHEuaWNvbi5zZWFyY2guaWNvbixoYW5kbGVyOnRoaXMuZm9jdXN9KSx0fSxjb250cm9sQWZ0ZXI6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5hZnRlcnx8W10pLnNsaWNlKCk7cmV0dXJuIHRoaXMuaXNDbGVhcmFibGUmJnQucHVzaCh7aWNvbjp0aGlzLiRxLmljb24uc2VhcmNoW1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV0saGFuZGxlcjp0aGlzLmNsZWFyfSksdH19LG1ldGhvZHM6e2NsZWFyOmZ1bmN0aW9uKHQpe3RoaXMuJHJlZnMuaW5wdXQuY2xlYXIodCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXQse3JlZjpcImlucHV0XCIsc3RhdGljQ2xhc3M6XCJxLXNlYXJjaFwiLHByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsLHR5cGU6dGhpcy50eXBlLGF1dG9mb2N1czp0aGlzLmF1dG9mb2N1cyxwbGFjZWhvbGRlcjp0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLiRxLmkxOG4ubGFiZWwuc2VhcmNoLGRpc2FibGU6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxhbGlnbjp0aGlzLmFsaWduLG5vUGFyZW50RmllbGQ6dGhpcy5ub1BhcmVudEZpZWxkLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLHByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsaW52ZXJ0ZWQ6dGhpcy5pbnZlcnRlZCxpbnZlcnRlZExpZ2h0OnRoaXMuaW52ZXJ0ZWRMaWdodCxkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOnRoaXMuaGlkZVVuZGVybGluZSxjb2xvcjp0aGlzLmNvbG9yLHJvd3M6dGhpcy5yb3dzLGJlZm9yZTp0aGlzLmNvbnRyb2xCZWZvcmUsYWZ0ZXI6dGhpcy5jb250cm9sQWZ0ZXIsY2xlYXJWYWx1ZTp0aGlzLmNsZWFyVmFsdWUsdXBwZXJDYXNlOnRoaXMudXBwZXJDYXNlLGxvd2VyQ2FzZTp0aGlzLmxvd2VyQ2FzZX0sYXR0cnM6dGhpcy4kYXR0cnMsb246e2lucHV0OmZ1bmN0aW9uKHQpe2UubW9kZWw9dH0sZm9jdXM6dGhpcy5fX29uRm9jdXMsYmx1cjp0aGlzLl9fb25CbHVyLGtleXVwOnRoaXMuX19vbktleXVwLGtleWRvd246dGhpcy5fX29uS2V5ZG93bixjbGljazp0aGlzLl9fb25DbGljayxwYXN0ZTp0aGlzLl9fb25QYXN0ZSxjbGVhcjpmdW5jdGlvbih0KXtlLiRlbWl0KFwiY2xlYXJcIix0KSxlLl9fZW1pdCgpfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX07ZnVuY3Rpb24gZGVmYXVsdEZpbHRlckZuKHQsZSl7cmV0dXJuIGUubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKHQpPi0xfXZhciBRU2VsZWN0PXtuYW1lOlwiUVNlbGVjdFwiLG1peGluczpbRnJhbWVNaXhpbixLZXlib2FyZFNlbGVjdGlvbk1peGluXSxwcm9wczp7ZmlsdGVyOltGdW5jdGlvbixCb29sZWFuXSxmaWx0ZXJQbGFjZWhvbGRlcjpTdHJpbmcscmFkaW86Qm9vbGVhbixwbGFjZWhvbGRlcjpTdHJpbmcsc2VwYXJhdG9yOkJvb2xlYW4sdmFsdWU6e3JlcXVpcmVkOiEwfSxtdWx0aXBsZTpCb29sZWFuLHRvZ2dsZTpCb29sZWFuLGNoaXBzOkJvb2xlYW4sb3B0aW9uczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuXCJsYWJlbFwiaW4gdCYmXCJ2YWx1ZVwiaW4gdH0pfX0sY2hpcHNDb2xvcjpTdHJpbmcsY2hpcHNCZ0NvbG9yOlN0cmluZyxkaXNwbGF5VmFsdWU6U3RyaW5nLHBvcHVwTWF4SGVpZ2h0OlN0cmluZyxwb3B1cENvdmVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLnNsaWNlKCk6dGhpcy52YWx1ZSx0ZXJtczpcIlwiLGZvY3VzZWQ6ITF9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fSx2aXNpYmxlT3B0aW9uczpmdW5jdGlvbigpe3RoaXMuX19rZXlib2FyZENhbGNJbmRleCgpfX0sY29tcHV0ZWQ6e29wdE1vZGVsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLm11bHRpcGxlKXJldHVybiB0aGlzLm1vZGVsLmxlbmd0aD4wP3RoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQubW9kZWwuaW5jbHVkZXMoZS52YWx1ZSl9KTp0aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiExfSl9LHZpc2libGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0LHtpbmRleDplfSl9KTtpZih0aGlzLmZpbHRlciYmdGhpcy50ZXJtcy5sZW5ndGgpe3ZhciBpPXRoaXMudGVybXMudG9Mb3dlckNhc2UoKTtlPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0LmZpbHRlckZuKGksZSl9KX1yZXR1cm4gZX0sa2V5Ym9hcmRNYXhJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aC0xfSxmaWx0ZXJGbjpmdW5jdGlvbigpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy5maWx0ZXI/ZGVmYXVsdEZpbHRlckZuOnRoaXMuZmlsdGVyfSxhY3R1YWxWYWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5kaXNwbGF5VmFsdWUpcmV0dXJuIHRoaXMuZGlzcGxheVZhbHVlO2lmKCF0aGlzLm11bHRpcGxlKXt2YXIgZT10aGlzLm9wdGlvbnMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQubW9kZWx9KTtyZXR1cm4gZT9lLmxhYmVsOlwiXCJ9dmFyIGk9dGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxhYmVsfSk7cmV0dXJuIGkubGVuZ3RoP2kuam9pbihcIiwgXCIpOlwiXCJ9LGNvbXB1dGVkQ2xlYXJWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLmNsZWFyVmFsdWU/dGhpcy5tdWx0aXBsZT9bXTpudWxsOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJkpTT04uc3RyaW5naWZ5KHRoaXMuY29tcHV0ZWRDbGVhclZhbHVlKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpfSxzZWxlY3RlZE9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMubXVsdGlwbGUpcmV0dXJuIHRoaXMubGVuZ3RoPjA/dGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5tb2RlbC5pbmNsdWRlcyhlLnZhbHVlKX0pOltdfSxoYXNDaGlwczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11bHRpcGxlJiZ0aGlzLmNoaXBzJiZ0aGlzLmxlbmd0aD4wfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLm1vZGVsLmxlbmd0aDpbbnVsbCx2b2lkIDAsXCJcIl0uaW5jbHVkZXModGhpcy5tb2RlbCk/MDoxfSxhZGRpdGlvbmFsTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheVZhbHVlJiZ0aGlzLmRpc3BsYXlWYWx1ZS5sZW5ndGg+MH19LG1ldGhvZHM6e3RvZ2dsZVBvcHVwOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5wb3BvdmVyJiZ0aGlzW3RoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nP1wiaGlkZVwiOlwic2hvd1wiXSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5fX2tleWJvYXJkQ2FsY0luZGV4KCksdGhpcy4kcmVmcy5wb3BvdmVyKXJldHVybiB0aGlzLiRyZWZzLnBvcG92ZXIuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcmVmcy5wb3BvdmVyO3QmJnQuc2hvd2luZyYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gdCYmdC5yZXBvc2l0aW9uKCl9KX0sX19rZXlib2FyZENhbGNJbmRleDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5rZXlib2FyZEluZGV4PS0xO3ZhciBlPXRoaXMubXVsdGlwbGU/dGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSk6W3RoaXMubW9kZWxdO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIGk9dm9pZCAwPT09ZT8tMTpNYXRoLm1heCgtMSx0LnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmNsdWRlcyh0LnZhbHVlKX0pKTtpPi0xJiYodC5rZXlib2FyZE1vdmVEaXJlY3Rpb249ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3Qua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uPSExfSw1MDApLHQuX19rZXlib2FyZFNob3coaSkpfSl9LF9fa2V5Ym9hcmRDdXN0b21LZXlIYW5kbGU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSAyNzp0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZyYmdGhpcy5oaWRlKCk7YnJlYWs7Y2FzZSAxMzpjYXNlIDMyOnRoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nfHx0aGlzLnNob3coKX19LF9fa2V5Ym9hcmRTaG93VHJpZ2dlcjpmdW5jdGlvbigpe3RoaXMuc2hvdygpfSxfX2tleWJvYXJkU2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudmlzaWJsZU9wdGlvbnNbdF07dGhpcy5tdWx0aXBsZT90aGlzLl9fdG9nZ2xlTXVsdGlwbGUoZS52YWx1ZSxlLmRpc2FibGUpOnRoaXMuX19zaW5nbGVTZWxlY3QoZS52YWx1ZSxlLmRpc2FibGUpfSxfX2tleWJvYXJkSXNTZWxlY3RhYmxlSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+LTEmJnQ8dGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgmJiF0aGlzLnZpc2libGVPcHRpb25zW3RdLmRpc2FibGV9LF9fbW91c2VFbnRlckhhbmRsZXI6ZnVuY3Rpb24odCxlKXt0aGlzLmtleWJvYXJkTW92ZURpcmVjdGlvbnx8KHRoaXMua2V5Ym9hcmRJbmRleD1lKX0sX19vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHx0aGlzLmZvY3VzZWR8fCh0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kZW1pdChcImZvY3VzXCIpKX0sX19vblNob3c6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGV8fCh0aGlzLl9fb25Gb2N1cygpLHRoaXMuZmlsdGVyJiZ0aGlzLiRyZWZzLmZpbHRlciYmKHRoaXMuJHJlZnMuZmlsdGVyLmZvY3VzKCksdGhpcy5yZXBvc2l0aW9uKCkpKX0sX19vbkJsdXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmZvY3VzZWQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UuJHJlZnMucG9wb3ZlciYmZS4kcmVmcy5wb3BvdmVyLnNob3dpbmcmJih0PT09ZG9jdW1lbnQuYm9keXx8ZS4kcmVmcy5wb3BvdmVyLiRlbC5jb250YWlucyh0KSl8fChlLl9fb25DbG9zZSgpLGUuaGlkZSgpKX0sMSl9LF9fb25DbG9zZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkoZS5tb2RlbCkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLGUubW9kZWwpfSksdGhpcy50ZXJtcz1cIlwiLHRoaXMuZm9jdXNlZCYmKHQ/dGhpcy4kcmVmcy5pbnB1dCYmdGhpcy4kcmVmcy5pbnB1dC4kZWwmJnRoaXMuJHJlZnMuaW5wdXQuJGVsLmZvY3VzKCk6KHRoaXMuZm9jdXNlZD0hMSx0aGlzLiRlbWl0KFwiYmx1clwiKSkpfSxfX3NpbmdsZVNlbGVjdDpmdW5jdGlvbih0LGUpe2V8fCh0aGlzLl9fZW1pdCh0KSx0aGlzLmhpZGUoKSl9LF9fdG9nZ2xlTXVsdGlwbGU6ZnVuY3Rpb24odCxlKXtpZighZSl7dmFyIGk9dGhpcy5tb2RlbCxzPWkuaW5kZXhPZih0KTtzPi0xP3RoaXMuJGVtaXQoXCJyZW1vdmVcIix7aW5kZXg6cyx2YWx1ZTppLnNwbGljZShzLDEpfSk6KHRoaXMuJGVtaXQoXCJhZGRcIix7aW5kZXg6aS5sZW5ndGgsdmFsdWU6dH0pLGkucHVzaCh0KSksdGhpcy4kZW1pdChcImlucHV0XCIsaSl9fSxfX2VtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfSxfX3NldE1vZGVsOmZ1bmN0aW9uKHQsZSl7dGhpcy5tb2RlbD10fHwodGhpcy5tdWx0aXBsZT9bXTpudWxsKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSwhZSYmdGhpcy4kcmVmcy5wb3BvdmVyJiZ0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZ3x8dGhpcy5fX29uQ2xvc2UoZSl9LF9fZ2V0Q2hpcFRleHRDb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGlwc0NvbG9yP3RoaXMuY2hpcHNDb2xvcjp0aGlzLmlzSW52ZXJ0ZWRMaWdodD90aGlzLmludmVydGVkTGlnaHQ/dHx8dGhpcy5jb2xvcjpcIndoaXRlXCI6dGhpcy5pc0ludmVydGVkP3R8fCh0aGlzLmludmVydGVkTGlnaHQ/XCJncmV5LTEwXCI6dGhpcy5jb2xvcik6dGhpcy5kYXJrP3R8fHRoaXMuY29sb3I6XCJ3aGl0ZVwifSxfX2dldENoaXBCZ0NvbG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNoaXBzQmdDb2xvcj90aGlzLmNoaXBzQmdDb2xvcjp0aGlzLmlzSW52ZXJ0ZWRMaWdodD90aGlzLmludmVydGVkTGlnaHQ/XCJncmV5LTEwXCI6dHx8dGhpcy5jb2xvcjp0aGlzLmlzSW52ZXJ0ZWQ/dGhpcy5pbnZlcnRlZExpZ2h0P3RoaXMuY29sb3I6XCJ3aGl0ZVwiOnRoaXMuZGFyaz9cIndoaXRlXCI6dHx8dGhpcy5jb2xvcn19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W107aWYodGhpcy5oYXNDaGlwcyl7dmFyIHM9dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCByb3cgaXRlbXMtY2VudGVyIHEtaW5wdXQtY2hpcHNcIixjbGFzczp0aGlzLmFsaWduQ2xhc3N9LHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpLHMpe3JldHVybiB0KFFDaGlwLHtrZXk6cyxwcm9wczp7c21hbGw6ITAsY2xvc2FibGU6ZS5lZGl0YWJsZSYmIWkuZGlzYWJsZSxjb2xvcjplLl9fZ2V0Q2hpcEJnQ29sb3IoaS5jb2xvciksdGV4dENvbG9yOmUuX19nZXRDaGlwVGV4dENvbG9yKGkuY29sb3IpLGljb246aS5pY29uLGljb25SaWdodDppLnJpZ2h0SWNvbixhdmF0YXI6aS5hdmF0YXJ9LG9uOntoaWRlOmZ1bmN0aW9uKCl7ZS5fX3RvZ2dsZU11bHRpcGxlKGkudmFsdWUsZS5kaXNhYmxlfHxpLmRpc2FibGUpfX0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9fX0sW3QoXCJkaXZcIix7ZG9tUHJvcHM6e2lubmVySFRNTDppLmxhYmVsfX0pXSl9KSk7aS5wdXNoKHMpfWVsc2V7dmFyIG49dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBlbGxpcHNpc1wiLGNsYXNzOnRoaXMuZmFrZUlucHV0Q2xhc3Nlcyxkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMuZmFrZUlucHV0VmFsdWV9fSk7aS5wdXNoKG4pfXJldHVybiBpLnB1c2godChRUG9wb3Zlcix7cmVmOlwicG9wb3ZlclwiLHN0YXRpY0NsYXNzOlwiY29sdW1uIG5vLXdyYXBcIixjbGFzczp0aGlzLmRhcms/XCJiZy1kYXJrXCI6bnVsbCxwcm9wczp7Y292ZXI6dGhpcy5wb3B1cENvdmVyLGtlZXBPblNjcmVlbjohMCxkaXNhYmxlOiF0aGlzLmVkaXRhYmxlLGFuY2hvckNsaWNrOiExLG1heEhlaWdodDp0aGlzLnBvcHVwTWF4SGVpZ2h0fSxzbG90OlwiYWZ0ZXJcIixvbjp7c2hvdzp0aGlzLl9fb25TaG93LGhpZGU6ZnVuY3Rpb24oKXtlLl9fb25DbG9zZSghMCl9fSxuYXRpdmVPbjp7a2V5ZG93bjp0aGlzLl9fa2V5Ym9hcmRIYW5kbGVLZXl9fSxbdGhpcy5maWx0ZXImJnQoUVNlYXJjaCx7cmVmOlwiZmlsdGVyXCIsc3RhdGljQ2xhc3M6XCJjb2wtYXV0b1wiLHN0eWxlOlwicGFkZGluZzogMTBweDtcIixwcm9wczp7dmFsdWU6dGhpcy50ZXJtcyxwbGFjZWhvbGRlcjp0aGlzLmZpbHRlclBsYWNlaG9sZGVyfHx0aGlzLiRxLmkxOG4ubGFiZWwuZmlsdGVyLGRlYm91bmNlOjEwMCxjb2xvcjp0aGlzLmNvbG9yLGRhcms6dGhpcy5kYXJrLG5vUGFyZW50RmllbGQ6ITAsbm9JY29uOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS50ZXJtcz10LGUucmVwb3NpdGlvbigpfX19KXx8dm9pZCAwLHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoJiZ0KFFMaXN0LHtzdGF0aWNDbGFzczpcIm5vLWJvcmRlciBzY3JvbGxcIixwcm9wczp7c2VwYXJhdG9yOnRoaXMuc2VwYXJhdG9yLGRhcms6dGhpcy5kYXJrfX0sdGhpcy52aXNpYmxlT3B0aW9ucy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRSXRlbVdyYXBwZXIse2tleTpzLGNsYXNzOltpLmRpc2FibGU/XCJ0ZXh0LWZhZGVkXCI6XCJjdXJzb3ItcG9pbnRlclwiLHM9PT1lLmtleWJvYXJkSW5kZXg/XCJxLXNlbGVjdC1oaWdobGlnaHRcIjpcIlwiLGkuZGlzYWJsZT9cIlwiOlwiY3Vyc29yLXBvaW50ZXJcIixpLmNsYXNzTmFtZXx8XCJcIl0scHJvcHM6e2NmZzppLHNsb3RSZXBsYWNlOiEwLGFjdGl2ZTplLm11bHRpcGxlP3ZvaWQgMDplLnZhbHVlPT09aS52YWx1ZX0sbmF0aXZlT246e1wiIWNsaWNrXCI6ZnVuY3Rpb24oKXt2YXIgdD1lLm11bHRpcGxlP1wiX190b2dnbGVNdWx0aXBsZVwiOlwiX19zaW5nbGVTZWxlY3RcIjtlW3RdKGkudmFsdWUsaS5kaXNhYmxlKX0sbW91c2VlbnRlcjpmdW5jdGlvbih0KXshaS5kaXNhYmxlJiZlLl9fbW91c2VFbnRlckhhbmRsZXIodCxzKX19fSxbZS5tdWx0aXBsZT90KGUudG9nZ2xlP1FUb2dnbGU6UUNoZWNrYm94LHtzbG90OmUudG9nZ2xlP1wicmlnaHRcIjpcImxlZnRcIixwcm9wczp7a2VlcENvbG9yOiEwLGNvbG9yOmkuY29sb3J8fGUuY29sb3IsZGFyazplLmRhcmssdmFsdWU6ZS5vcHRNb2RlbFtpLmluZGV4XSxkaXNhYmxlOmkuZGlzYWJsZSxub0ZvY3VzOiEwfX0pOmUucmFkaW8mJnQoUVJhZGlvLHtzbG90OlwibGVmdFwiLHByb3BzOntrZWVwQ29sb3I6ITAsY29sb3I6aS5jb2xvcnx8ZS5jb2xvcixkYXJrOmUuZGFyayx2YWx1ZTplLnZhbHVlLHZhbDppLnZhbHVlLGRpc2FibGU6aS5kaXNhYmxlLG5vRm9jdXM6ITB9fSl8fHZvaWQgMF0pfSkpfHx2b2lkIDBdKSksdGhpcy5pc0NsZWFyYWJsZSYmaS5wdXNoKHQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOntjbGljazp0aGlzLmNsZWFyfX0pKSxpLnB1c2godChRSWNvbix0aGlzLnJlYWRvbmx5P3tzbG90OlwiYWZ0ZXJcIn06e3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufX0pKSx0KFFJbnB1dEZyYW1lLHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwicS1zZWxlY3RcIixwcm9wczp7cHJlZml4OnRoaXMucHJlZml4LHN1ZmZpeDp0aGlzLnN1ZmZpeCxzdGFja0xhYmVsOnRoaXMuc3RhY2tMYWJlbCxmbG9hdExhYmVsOnRoaXMuZmxvYXRMYWJlbCxlcnJvcjp0aGlzLmVycm9yLHdhcm5pbmc6dGhpcy53YXJuaW5nLGRpc2FibGU6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksaW52ZXJ0ZWQ6dGhpcy5pbnZlcnRlZCxpbnZlcnRlZExpZ2h0OnRoaXMuaW52ZXJ0ZWRMaWdodCxkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOnRoaXMuaGlkZVVuZGVybGluZSxiZWZvcmU6dGhpcy5iZWZvcmUsYWZ0ZXI6dGhpcy5hZnRlcixjb2xvcjp0aGlzLmNvbG9yLG5vUGFyZW50RmllbGQ6dGhpcy5ub1BhcmVudEZpZWxkLGZvY3VzZWQ6dGhpcy5mb2N1c2VkLGZvY3VzYWJsZTohMCxsZW5ndGg6dGhpcy5sZW5ndGgsYWRkaXRpb25hbExlbmd0aDp0aGlzLmFkZGl0aW9uYWxMZW5ndGh9LG5hdGl2ZU9uOntjbGljazp0aGlzLnRvZ2dsZVBvcHVwLGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uQmx1cixrZXlkb3duOnRoaXMuX19rZXlib2FyZEhhbmRsZUtleX19LGkpfX0sUVNwaW5uZXJBdWRpbz17bmFtZTpcIlFTcGlubmVyQXVkaW9cIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgNTUgODBcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDgwKVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMjBcIixyeDpcIjNcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMHNcIixkdXI6XCI0LjNzXCIsdmFsdWVzOlwiMjA7NDU7NTc7ODA7NjQ7MzI7NjY7NDU7NjQ7MjM7NjY7MTM7NjQ7NTY7MzQ7MzQ7MjsyMzs3Njs3OTsyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjE1XCIsd2lkdGg6XCIxMFwiLGhlaWdodDpcIjgwXCIscng6XCIzXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiMnNcIix2YWx1ZXM6XCI4MDs1NTszMzs1Ozc1OzIzOzczOzMzOzEyOzE0OzYwOzgwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiMzBcIix3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiNTBcIixyeDpcIjNcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjRzXCIsdmFsdWVzOlwiNTA7MzQ7Nzg7MjM7NTY7MjM7MzQ7NzY7ODA7NTQ7MjE7NTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInJlY3RcIix7YXR0cnM6e3g6XCI0NVwiLHdpZHRoOlwiMTBcIixoZWlnaHQ6XCIzMFwiLHJ4OlwiM1wifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwc1wiLGR1cjpcIjJzXCIsdmFsdWVzOlwiMzA7NDU7MTM7ODA7NTY7NzI7NDU7NzY7MzQ7MjM7Njc7MzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJCYWxsPXtuYW1lOlwiUVNwaW5uZXJCYWxsXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3N0cm9rZTpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgNTcgNTdcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIixmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1XCIsY3k6XCI1MFwiLHI6XCI1XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeVwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsdmFsdWVzOlwiNTA7NTs1MDs1MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeFwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsdmFsdWVzOlwiNTsyNzs0OTs1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjdcIixjeTpcIjVcIixyOlwiNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3lcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLGZyb206XCI1XCIsdG86XCI1XCIsdmFsdWVzOlwiNTs1MDs1MDs1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImN4XCIsYmVnaW46XCIwc1wiLGR1cjpcIjIuMnNcIixmcm9tOlwiMjdcIix0bzpcIjI3XCIsdmFsdWVzOlwiMjc7NDk7NTsyN1wiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjQ5XCIsY3k6XCI1MFwiLHI6XCI1XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeVwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsdmFsdWVzOlwiNTA7NTA7NTs1MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeFwiLGZyb206XCI0OVwiLHRvOlwiNDlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjQ5OzU7Mjc7NDlcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJCYXJzPXtuYW1lOlwiUVNwaW5uZXJCYXJzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEzNSAxNDBcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3k6XCIxMFwiLHdpZHRoOlwiMTVcIixoZWlnaHQ6XCIxMjBcIixyeDpcIjZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMC41c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiMzBcIix5OlwiMTBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTIwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiNjBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTQwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiOTBcIix5OlwiMTBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTIwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiMTIwXCIseTpcIjEwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjEyMFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwLjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjAuNXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjEwOzE1OzIwOzI1OzMwOzM1OzQwOzQ1OzUwOzA7MTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVyQ2lyY2xlcz17bmFtZTpcIlFTcGlubmVyQ2lyY2xlc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMzUgMTM1XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTTY3LjQ0NyA1OGM1LjUyMyAwIDEwLTQuNDc3IDEwLTEwcy00LjQ3Ny0xMC0xMC0xMC0xMCA0LjQ3Ny0xMCAxMCA0LjQ3NyAxMCAxMCAxMHptOS40NDggOS40NDdjMCA1LjUyMyA0LjQ3NyAxMCAxMCAxMCA1LjUyMiAwIDEwLTQuNDc3IDEwLTEwcy00LjQ3OC0xMC0xMC0xMGMtNS41MjMgMC0xMCA0LjQ3Ny0xMCAxMHptLTkuNDQ4IDkuNDQ4Yy01LjUyMyAwLTEwIDQuNDc3LTEwIDEwIDAgNS41MjIgNC40NzcgMTAgMTAgMTBzMTAtNC40NzggMTAtMTBjMC01LjUyMy00LjQ3Ny0xMC0xMC0xMHpNNTggNjcuNDQ3YzAtNS41MjMtNC40NzctMTAtMTAtMTBzLTEwIDQuNDc3LTEwIDEwIDQuNDc3IDEwIDEwIDEwIDEwLTQuNDc3IDEwLTEwelwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDY3IDY3XCIsdG86XCItMzYwIDY3IDY3XCIsZHVyOlwiMi41c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMjguMTkgNDAuMzFjNi42MjcgMCAxMi01LjM3NCAxMi0xMiAwLTYuNjI4LTUuMzczLTEyLTEyLTEyLTYuNjI4IDAtMTIgNS4zNzItMTIgMTIgMCA2LjYyNiA1LjM3MiAxMiAxMiAxMnptMzAuNzItMTkuODI1YzQuNjg2IDQuNjg3IDEyLjI4NCA0LjY4NyAxNi45NyAwIDQuNjg2LTQuNjg2IDQuNjg2LTEyLjI4NCAwLTE2Ljk3LTQuNjg2LTQuNjg3LTEyLjI4NC00LjY4Ny0xNi45NyAwLTQuNjg3IDQuNjg2LTQuNjg3IDEyLjI4NCAwIDE2Ljk3em0zNS43NCA3LjcwNWMwIDYuNjI3IDUuMzcgMTIgMTIgMTIgNi42MjYgMCAxMi01LjM3MyAxMi0xMiAwLTYuNjI4LTUuMzc0LTEyLTEyLTEyLTYuNjMgMC0xMiA1LjM3Mi0xMiAxMnptMTkuODIyIDMwLjcyYy00LjY4NiA0LjY4Ni00LjY4NiAxMi4yODQgMCAxNi45NyA0LjY4NyA0LjY4NiAxMi4yODUgNC42ODYgMTYuOTcgMCA0LjY4Ny00LjY4NiA0LjY4Ny0xMi4yODQgMC0xNi45Ny00LjY4NS00LjY4Ny0xMi4yODMtNC42ODctMTYuOTcgMHptLTcuNzA0IDM1Ljc0Yy02LjYyNyAwLTEyIDUuMzctMTIgMTIgMCA2LjYyNiA1LjM3MyAxMiAxMiAxMnMxMi01LjM3NCAxMi0xMmMwLTYuNjMtNS4zNzMtMTItMTItMTJ6bS0zMC43MiAxOS44MjJjLTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NyAwLTQuNjg2IDQuNjg3LTQuNjg2IDEyLjI4NSAwIDE2Ljk3IDQuNjg2IDQuNjg3IDEyLjI4NCA0LjY4NyAxNi45NyAwIDQuNjg3LTQuNjg1IDQuNjg3LTEyLjI4MyAwLTE2Ljk3em0tMzUuNzQtNy43MDRjMC02LjYyNy01LjM3Mi0xMi0xMi0xMi02LjYyNiAwLTEyIDUuMzczLTEyIDEyczUuMzc0IDEyIDEyIDEyYzYuNjI4IDAgMTItNS4zNzMgMTItMTJ6bS0xOS44MjMtMzAuNzJjNC42ODctNC42ODYgNC42ODctMTIuMjg0IDAtMTYuOTctNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3IDAtNC42ODcgNC42ODYtNC42ODcgMTIuMjg0IDAgMTYuOTcgNC42ODYgNC42ODcgMTIuMjg0IDQuNjg3IDE2Ljk3IDB6XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNjcgNjdcIix0bzpcIjM2MCA2NyA2N1wiLGR1cjpcIjhzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJDb21tZW50PXtuYW1lOlwiUVNwaW5uZXJDb21tZW50XCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIjBcIix5OlwiMFwiLHdpZHRoOlwiMTAwXCIsaGVpZ2h0OlwiMTAwXCIsZmlsbDpcIm5vbmVcIn19KSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk03OCwxOUgyMmMtNi42LDAtMTIsNS40LTEyLDEydjMxYzAsNi42LDUuNCwxMiwxMiwxMmgzNy4yYzAuNCwzLDEuOCw1LjYsMy43LDcuNmMyLjQsMi41LDUuMSw0LjEsOS4xLDQgYy0xLjQtMi4xLTItNy4yLTItMTAuM2MwLTAuNCwwLTAuOCwwLTEuM2g4YzYuNiwwLDEyLTUuNCwxMi0xMlYzMUM5MCwyNC40LDg0LjYsMTksNzgsMTl6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMzBcIixjeTpcIjQ3XCIscjpcIjVcIixmaWxsOlwiI2ZmZlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsdmFsdWVzOlwiMDsxOzFcIixrZXlUaW1lczpcIjA7MC4yOzFcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1MFwiLGN5OlwiNDdcIixyOlwiNVwiLGZpbGw6XCIjZmZmXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJvcGFjaXR5XCIsZnJvbTpcIjBcIix0bzpcIjFcIix2YWx1ZXM6XCIwOzA7MTsxXCIsa2V5VGltZXM6XCIwOzAuMjswLjQ7MVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjcwXCIsY3k6XCI0N1wiLHI6XCI1XCIsZmlsbDpcIiNmZmZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLHZhbHVlczpcIjA7MDsxOzFcIixrZXlUaW1lczpcIjA7MC40OzAuNjsxXCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSl9fSxRU3Bpbm5lckN1YmU9e25hbWU6XCJRU3Bpbm5lckN1YmVcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiMFwiLHk6XCIwXCIsd2lkdGg6XCIxMDBcIixoZWlnaHQ6XCIxMDBcIixmaWxsOlwibm9uZVwifX0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMjUgMjUpXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMjBcIix5OlwiLTIwXCIsd2lkdGg6XCI0MFwiLGhlaWdodDpcIjQwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjlcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIxLjVcIix0bzpcIjFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixiZWdpbjpcIjBzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDc1IDI1KVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC44XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwLjFzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDI1IDc1KVwifX0sW3QoXCJyZWN0XCIse3N0YXRpY0NsYXNzOlwiY3ViZVwiLGF0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC43XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwLjNzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDc1IDc1KVwifX0sW3QoXCJyZWN0XCIse3N0YXRpY0NsYXNzOlwiY3ViZVwiLGF0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC42XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwLjJzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKV0pfX0sUVNwaW5uZXJEb3RzPXtuYW1lOlwiUVNwaW5uZXJEb3RzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEyMCAzMFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjE1XCIsY3k6XCIxNVwiLHI6XCIxNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGZyb206XCIxNVwiLHRvOlwiMTVcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE1Ozk7MTVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsZnJvbTpcIjFcIix0bzpcIjFcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE7LjU7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjYwXCIsY3k6XCIxNVwiLHI6XCI5XCIsXCJmaWxsLW9wYWNpdHlcIjpcIi4zXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsZnJvbTpcIjlcIix0bzpcIjlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjk7MTU7OVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixmcm9tOlwiLjVcIix0bzpcIi41XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIuNTsxOy41XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMTA1XCIsY3k6XCIxNVwiLHI6XCIxNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGZyb206XCIxNVwiLHRvOlwiMTVcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE1Ozk7MTVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsZnJvbTpcIjFcIix0bzpcIjFcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE7LjU7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJGYWNlYm9vaz17bmFtZTpcIlFTcGlubmVyRmFjZWJvb2tcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMjAgNTApXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMTBcIix5OlwiLTMwXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjYwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjZcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIyXCIsdG86XCIxXCIsYmVnaW46XCIwc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4xIDAuOSAwLjQgMVwiLGtleVRpbWVzOlwiMDsxXCIsdmFsdWVzOlwiMjsxXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoNTAgNTApXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMTBcIix5OlwiLTMwXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjYwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjhcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIyXCIsdG86XCIxXCIsYmVnaW46XCIwLjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjEgMC45IDAuNCAxXCIsa2V5VGltZXM6XCIwOzFcIix2YWx1ZXM6XCIyOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSg4MCA1MClcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIi0xMFwiLHk6XCItMzBcIix3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiNjBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuOVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjJcIix0bzpcIjFcIixiZWdpbjpcIjAuMnNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixkdXI6XCIxc1wiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5U3BsaW5lczpcIjAuMSAwLjkgMC40IDFcIixrZXlUaW1lczpcIjA7MVwiLHZhbHVlczpcIjI7MVwifX0pXSldKV0pfX0sUVNwaW5uZXJHZWFycz17bmFtZTpcIlFTcGlubmVyR2VhcnNcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcInhNaWRZTWlkXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoLTIwLC0yMClcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk03OS45LDUyLjZDODAsNTEuOCw4MCw1MC45LDgwLDUwczAtMS44LTAuMS0yLjZsLTUuMS0wLjRjLTAuMy0yLjQtMC45LTQuNi0xLjgtNi43bDQuMi0yLjljLTAuNy0xLjYtMS42LTMuMS0yLjYtNC41IEw3MCwzNWMtMS40LTEuOS0zLjEtMy41LTQuOS00LjlsMi4yLTQuNmMtMS40LTEtMi45LTEuOS00LjUtMi42TDU5LjgsMjdjLTIuMS0wLjktNC40LTEuNS02LjctMS44bC0wLjQtNS4xQzUxLjgsMjAsNTAuOSwyMCw1MCwyMCBzLTEuOCwwLTIuNiwwLjFsLTAuNCw1LjFjLTIuNCwwLjMtNC42LDAuOS02LjcsMS44bC0yLjktNC4xYy0xLjYsMC43LTMuMSwxLjYtNC41LDIuNmwyLjEsNC42Yy0xLjksMS40LTMuNSwzLjEtNSw0LjlsLTQuNS0yLjEgYy0xLDEuNC0xLjksMi45LTIuNiw0LjVsNC4xLDIuOWMtMC45LDIuMS0xLjUsNC40LTEuOCw2LjhsLTUsMC40QzIwLDQ4LjIsMjAsNDkuMSwyMCw1MHMwLDEuOCwwLjEsMi42bDUsMC40IGMwLjMsMi40LDAuOSw0LjcsMS44LDYuOGwtNC4xLDIuOWMwLjcsMS42LDEuNiwzLjEsMi42LDQuNWw0LjUtMi4xYzEuNCwxLjksMy4xLDMuNSw1LDQuOWwtMi4xLDQuNmMxLjQsMSwyLjksMS45LDQuNSwyLjZsMi45LTQuMSBjMi4xLDAuOSw0LjQsMS41LDYuNywxLjhsMC40LDUuMUM0OC4yLDgwLDQ5LjEsODAsNTAsODBzMS44LDAsMi42LTAuMWwwLjQtNS4xYzIuMy0wLjMsNC42LTAuOSw2LjctMS44bDIuOSw0LjIgYzEuNi0wLjcsMy4xLTEuNiw0LjUtMi42TDY1LDY5LjljMS45LTEuNCwzLjUtMyw0LjktNC45bDQuNiwyLjJjMS0xLjQsMS45LTIuOSwyLjYtNC41TDczLDU5LjhjMC45LTIuMSwxLjUtNC40LDEuOC02LjdMNzkuOSw1Mi42IHogTTUwLDY1Yy04LjMsMC0xNS02LjctMTUtMTVjMC04LjMsNi43LTE1LDE1LTE1czE1LDYuNywxNSwxNUM2NSw1OC4zLDU4LjMsNjUsNTAsNjV6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCI5MCA1MCA1MFwiLHRvOlwiMCA1MCA1MFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMjAsMjApIHJvdGF0ZSgxNSA1MCA1MClcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk03OS45LDUyLjZDODAsNTEuOCw4MCw1MC45LDgwLDUwczAtMS44LTAuMS0yLjZsLTUuMS0wLjRjLTAuMy0yLjQtMC45LTQuNi0xLjgtNi43bDQuMi0yLjljLTAuNy0xLjYtMS42LTMuMS0yLjYtNC41IEw3MCwzNWMtMS40LTEuOS0zLjEtMy41LTQuOS00LjlsMi4yLTQuNmMtMS40LTEtMi45LTEuOS00LjUtMi42TDU5LjgsMjdjLTIuMS0wLjktNC40LTEuNS02LjctMS44bC0wLjQtNS4xQzUxLjgsMjAsNTAuOSwyMCw1MCwyMCBzLTEuOCwwLTIuNiwwLjFsLTAuNCw1LjFjLTIuNCwwLjMtNC42LDAuOS02LjcsMS44bC0yLjktNC4xYy0xLjYsMC43LTMuMSwxLjYtNC41LDIuNmwyLjEsNC42Yy0xLjksMS40LTMuNSwzLjEtNSw0LjlsLTQuNS0yLjEgYy0xLDEuNC0xLjksMi45LTIuNiw0LjVsNC4xLDIuOWMtMC45LDIuMS0xLjUsNC40LTEuOCw2LjhsLTUsMC40QzIwLDQ4LjIsMjAsNDkuMSwyMCw1MHMwLDEuOCwwLjEsMi42bDUsMC40IGMwLjMsMi40LDAuOSw0LjcsMS44LDYuOGwtNC4xLDIuOWMwLjcsMS42LDEuNiwzLjEsMi42LDQuNWw0LjUtMi4xYzEuNCwxLjksMy4xLDMuNSw1LDQuOWwtMi4xLDQuNmMxLjQsMSwyLjksMS45LDQuNSwyLjZsMi45LTQuMSBjMi4xLDAuOSw0LjQsMS41LDYuNywxLjhsMC40LDUuMUM0OC4yLDgwLDQ5LjEsODAsNTAsODBzMS44LDAsMi42LTAuMWwwLjQtNS4xYzIuMy0wLjMsNC42LTAuOSw2LjctMS44bDIuOSw0LjIgYzEuNi0wLjcsMy4xLTEuNiw0LjUtMi42TDY1LDY5LjljMS45LTEuNCwzLjUtMyw0LjktNC45bDQuNiwyLjJjMS0xLjQsMS45LTIuOSwyLjYtNC41TDczLDU5LjhjMC45LTIuMSwxLjUtNC40LDEuOC02LjdMNzkuOSw1Mi42IHogTTUwLDY1Yy04LjMsMC0xNS02LjctMTUtMTVjMC04LjMsNi43LTE1LDE1LTE1czE1LDYuNywxNSwxNUM2NSw1OC4zLDU4LjMsNjUsNTAsNjV6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCI5MCA1MCA1MFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lckdyaWQ9e25hbWU6XCJRU3Bpbm5lckdyaWRcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTA1IDEwNVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEyLjVcIixjeTpcIjEyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMTIuNVwiLGN5OlwiNTIuNVwiLHI6XCIxMi41XCIsXCJmaWxsLW9wYWNpdHlcIjpcIi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjEwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1Mi41XCIsY3k6XCIxMi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMzAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjUyLjVcIixjeTpcIjUyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI2MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiOTIuNVwiLGN5OlwiMTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjgwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI5Mi41XCIsY3k6XCI1Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiNDAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEyLjVcIixjeTpcIjkyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI3MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNTIuNVwiLGN5OlwiOTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjUwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI5Mi41XCIsY3k6XCI5Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMjAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJIZWFydHM9e25hbWU6XCJRU3Bpbm5lckhlYXJ0c1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxNDAgNjRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMzAuMjYyIDU3LjAyTDcuMTk1IDQwLjcyM2MtNS44NC0zLjk3Ni03LjU2LTEyLjA2LTMuODQyLTE4LjA2MyAzLjcxNS02IDExLjQ2Ny03LjY1IDE3LjMwNi0zLjY4bDQuNTIgMy43NiAyLjYtNS4yNzRjMy43MTYtNi4wMDIgMTEuNDctNy42NSAxNy4zMDQtMy42OCA1Ljg0IDMuOTcgNy41NiAxMi4wNTQgMy44NDIgMTguMDYyTDM0LjQ5IDU2LjExOGMtLjg5NyAxLjUxMi0yLjc5MyAxLjkxNS00LjIyOC45elwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjEuNHNcIix2YWx1ZXM6XCIwLjU7MTswLjVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMTA1LjUxMiA1Ni4xMmwtMTQuNDQtMjQuMjcyYy0zLjcxNi02LjAwOC0xLjk5Ni0xNC4wOTMgMy44NDMtMTguMDYyIDUuODM1LTMuOTcgMTMuNTg4LTIuMzIyIDE3LjMwNiAzLjY4bDIuNiA1LjI3NCA0LjUyLTMuNzZjNS44NC0zLjk3IDEzLjU5My0yLjMyIDE3LjMwOCAzLjY4IDMuNzE4IDYuMDAzIDEuOTk4IDE0LjA4OC0zLjg0MiAxOC4wNjRMMTA5Ljc0IDU3LjAyYy0xLjQzNCAxLjAxNC0zLjMzLjYxLTQuMjI4LS45elwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIwLjdzXCIsZHVyOlwiMS40c1wiLHZhbHVlczpcIjAuNTsxOzAuNVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk02Ny40MDggNTcuODM0bC0yMy4wMS0yNC45OGMtNS44NjQtNi4xNS01Ljg2NC0xNi4xMDggMC0yMi4yNDggNS44Ni02LjE0IDE1LjM3LTYuMTQgMjEuMjM0IDBMNzAgMTYuMTY4bDQuMzY4LTUuNTYyYzUuODYzLTYuMTQgMTUuMzc1LTYuMTQgMjEuMjM1IDAgNS44NjMgNi4xNCA1Ljg2MyAxNi4wOTggMCAyMi4yNDdsLTIzLjAwNyAyNC45OGMtMS40MyAxLjU1Ni0zLjc1NyAxLjU1Ni01LjE4OCAwelwifX0pXSl9fSxRU3Bpbm5lckhvdXJnbGFzcz17bmFtZTpcIlFTcGlubmVySG91cmdsYXNzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLFt0KFwicGF0aFwiLHtzdGF0aWNDbGFzczpcImdsYXNzXCIsYXR0cnM6e2ZpbGw6XCJub25lXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2Utd2lkdGhcIjpcIjVcIixcInN0cm9rZS1taXRlcmxpbWl0XCI6XCIxMFwiLGQ6XCJNNTguNCw1MS43Yy0wLjktMC45LTEuNC0yLTEuNC0yLjNzMC41LTAuNCwxLjQtMS40IEM3MC44LDQzLjgsNzkuOCwzMC41LDgwLDE1LjVINzBIMzBIMjBjMC4yLDE1LDkuMiwyOC4xLDIxLjYsMzIuM2MwLjksMC45LDEuNCwxLjIsMS40LDEuNXMtMC41LDEuNi0xLjQsMi41IEMyOS4yLDU2LjEsMjAuMiw2OS41LDIwLDg1LjVoMTBoNDBoMTBDNzkuOCw2OS41LDcwLjgsNTUuOSw1OC40LDUxLjd6XCJ9fSksdChcImNsaXBQYXRoXCIse2F0dHJzOntpZDpcInVpbC1ob3VyZ2xhc3MtY2xpcDFcIn19LFt0KFwicmVjdFwiLHtzdGF0aWNDbGFzczpcImNsaXBcIixhdHRyczp7eDpcIjE1XCIseTpcIjIwXCIsd2lkdGg6XCI3MFwiLGhlaWdodDpcIjI1XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixmcm9tOlwiMjVcIix0bzpcIjBcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLHZsYXVlczpcIjI1OzA7MFwiLGtleVRpbWVzOlwiMDswLjU7MVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwieVwiLGZyb206XCIyMFwiLHRvOlwiNDVcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLHZsYXVlczpcIjIwOzQ1OzQ1XCIsa2V5VGltZXM6XCIwOzAuNTsxXCJ9fSldKV0pLHQoXCJjbGlwUGF0aFwiLHthdHRyczp7aWQ6XCJ1aWwtaG91cmdsYXNzLWNsaXAyXCJ9fSxbdChcInJlY3RcIix7c3RhdGljQ2xhc3M6XCJjbGlwXCIsYXR0cnM6e3g6XCIxNVwiLHk6XCI1NVwiLHdpZHRoOlwiNzBcIixoZWlnaHQ6XCIyNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsZnJvbTpcIjBcIix0bzpcIjI1XCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIix2bGF1ZXM6XCIwOzI1OzI1XCIsa2V5VGltZXM6XCIwOzAuNTsxXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsZnJvbTpcIjgwXCIsdG86XCI1NVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsdmxhdWVzOlwiODA7NTU7NTVcIixrZXlUaW1lczpcIjA7MC41OzFcIn19KV0pXSksdChcInBhdGhcIix7c3RhdGljQ2xhc3M6XCJzYW5kXCIsYXR0cnM6e2Q6XCJNMjksMjNjMy4xLDExLjQsMTEuMywxOS41LDIxLDE5LjVTNjcuOSwzNC40LDcxLDIzSDI5elwiLFwiY2xpcC1wYXRoXCI6XCJ1cmwoI3VpbC1ob3VyZ2xhc3MtY2xpcDEpXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0pLHQoXCJwYXRoXCIse3N0YXRpY0NsYXNzOlwic2FuZFwiLGF0dHJzOntkOlwiTTcxLjYsNzhjLTMtMTEuNi0xMS41LTIwLTIxLjUtMjBzLTE4LjUsOC40LTIxLjUsMjBINzEuNnpcIixcImNsaXAtcGF0aFwiOlwidXJsKCN1aWwtaG91cmdsYXNzLWNsaXAyKVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19KSx0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA1MCA1MFwiLHRvOlwiMTgwIDUwIDUwXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIwIDUwIDUwOzAgNTAgNTA7MTgwIDUwIDUwXCIsa2V5VGltZXM6XCIwOzAuNzsxXCJ9fSldKV0pfX0sUVNwaW5uZXJJbmZpbml0eT17bmFtZTpcIlFTcGlubmVySW5maW5pdHlcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcInhNaWRZTWlkXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMjQuMywzMEMxMS40LDMwLDUsNDMuMyw1LDUwczYuNCwyMCwxOS4zLDIwYzE5LjMsMCwzMi4xLTQwLDUxLjQtNDBDODguNiwzMCw5NSw0My4zLDk1LDUwcy02LjQsMjAtMTkuMywyMEM1Ni40LDcwLDQzLjYsMzAsMjQuMywzMHpcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLXdpZHRoXCI6XCI4XCIsXCJzdHJva2UtZGFzaGFycmF5XCI6XCIxMC42OTEyMDUzNDI2MTA2NzggMTAuNjkxMjA1MzQyNjEwNjc4XCIsXCJzdHJva2UtZGFzaG9mZnNldFwiOlwiMFwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLWRhc2hvZmZzZXRcIixmcm9tOlwiMFwiLHRvOlwiMjEuMzgyNDEwNjg1MjIxMzU1XCIsYmVnaW46XCIwXCIsZHVyOlwiMnNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixmaWxsOlwiZnJlZXplXCJ9fSldKV0pfX0sUVNwaW5uZXJfaW9zPXtuYW1lOlwiUVNwaW5uZXJJb3NcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLHZpZXdCb3g6XCIwIDAgNjQgNjRcIn19LFt0KFwiZ1wiLHthdHRyczp7XCJzdHJva2Utd2lkdGhcIjpcIjRcIixcInN0cm9rZS1saW5lY2FwXCI6XCJyb3VuZFwifX0sW3QoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDE4MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDIxMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIwOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzBcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDI0MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgyNzApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDMwMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMzMwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi40NTsuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgzMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoNjApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxOy44NTsuNzsuNjVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDkwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7LjdcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDEyMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxOy44NVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMTUwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIjE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJPdmFsPXtuYW1lOlwiUVNwaW5uZXJPdmFsXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3N0cm9rZTpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMzggMzhcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIixmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7XCJzdHJva2Utb3BhY2l0eVwiOlwiLjVcIixjeDpcIjE4XCIsY3k6XCIxOFwiLHI6XCIxOFwifX0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTM2IDE4YzAtOS45NC04LjA2LTE4LTE4LTE4XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgMTggMThcIix0bzpcIjM2MCAxOCAxOFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclBpZT17bmFtZTpcIlFTcGlubmVyUGllXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0wIDUwQTUwIDUwIDAgMCAxIDUwIDBMNTAgNTBMMCA1MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC41XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjM2MCA1MCA1MFwiLGR1cjpcIjAuOHNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTUwIDBBNTAgNTAgMCAwIDEgMTAwIDUwTDUwIDUwTDUwIDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIxLjZzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0xMDAgNTBBNTAgNTAgMCAwIDEgNTAgMTAwTDUwIDUwTDEwMCA1MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC41XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjM2MCA1MCA1MFwiLGR1cjpcIjIuNHNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTUwIDEwMEE1MCA1MCAwIDAgMSAwIDUwTDUwIDUwTDUwIDEwMFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC41XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjM2MCA1MCA1MFwiLGR1cjpcIjMuMnNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSl9fSxRU3Bpbm5lclB1ZmY9e25hbWU6XCJRU3Bpbm5lclB1ZmZcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7c3Ryb2tlOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCA0NCA0NFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7ZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLFwic3Ryb2tlLXdpZHRoXCI6XCIyXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiMVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjhzXCIsdmFsdWVzOlwiMTsgMjBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjE2NSwgMC44NCwgMC40NCwgMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS44c1wiLHZhbHVlczpcIjE7IDBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjMsIDAuNjEsIDAuMzU1LCAxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjIyXCIsY3k6XCIyMlwiLHI6XCIxXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsYmVnaW46XCItMC45c1wiLGR1cjpcIjEuOHNcIix2YWx1ZXM6XCIxOyAyMFwiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5VGltZXM6XCIwOyAxXCIsa2V5U3BsaW5lczpcIjAuMTY1LCAwLjg0LCAwLjQ0LCAxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGJlZ2luOlwiLTAuOXNcIixkdXI6XCIxLjhzXCIsdmFsdWVzOlwiMTsgMFwiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5VGltZXM6XCIwOyAxXCIsa2V5U3BsaW5lczpcIjAuMywgMC42MSwgMC4zNTUsIDFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyUmFkaW89e25hbWU6XCJRU3Bpbm5lclJhZGlvXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwic2NhbGUoMC41NSlcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjMwXCIsY3k6XCIxNTBcIixyOlwiMzBcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJvcGFjaXR5XCIsZnJvbTpcIjBcIix0bzpcIjFcIixkdXI6XCIxc1wiLGJlZ2luOlwiMFwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGtleVRpbWVzOlwiMDswLjU7MVwiLHZhbHVlczpcIjA7MTsxXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk05MCwxNTBoMzBjMC00OS43LTQwLjMtOTAtOTAtOTB2MzBDNjMuMSw5MCw5MCwxMTYuOSw5MCwxNTB6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsZHVyOlwiMXNcIixiZWdpbjpcIjAuMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGtleVRpbWVzOlwiMDswLjU7MVwiLHZhbHVlczpcIjA7MTsxXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0xNTAsMTUwaDMwQzE4MCw2Ny4yLDExMi44LDAsMzAsMHYzMEM5Ni4zLDMwLDE1MCw4My43LDE1MCwxNTB6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsZHVyOlwiMXNcIixiZWdpbjpcIjAuMlwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGtleVRpbWVzOlwiMDswLjU7MVwiLHZhbHVlczpcIjA7MTsxXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclJpbmdzPXtuYW1lOlwiUVNwaW5uZXJSaW5nc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntzdHJva2U6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDQ1IDQ1XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOntmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDEgMSlcIixcInN0cm9rZS13aWR0aFwiOlwiMlwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjJcIixjeTpcIjIyXCIscjpcIjZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixiZWdpbjpcIjEuNXNcIixkdXI6XCIzc1wiLHZhbHVlczpcIjY7MjJcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIjEuNXNcIixkdXI6XCIzc1wiLHZhbHVlczpcIjE7MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utd2lkdGhcIixiZWdpbjpcIjEuNXNcIixkdXI6XCIzc1wiLHZhbHVlczpcIjI7MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjIyXCIsY3k6XCIyMlwiLHI6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsYmVnaW46XCIzc1wiLGR1cjpcIjNzXCIsdmFsdWVzOlwiNjsyMlwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGJlZ2luOlwiM3NcIixkdXI6XCIzc1wiLHZhbHVlczpcIjE7MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utd2lkdGhcIixiZWdpbjpcIjNzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIyOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiOFwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjVzXCIsdmFsdWVzOlwiNjsxOzI7Mzs0OzU7NlwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclRhaWw9e25hbWU6XCJRU3Bpbm5lclRhaWxcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAzOCAzOFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZGVmc1wiLFt0KFwibGluZWFyR3JhZGllbnRcIix7YXR0cnM6e3gxOlwiOC4wNDIlXCIseTE6XCIwJVwiLHgyOlwiNjUuNjgyJVwiLHkyOlwiMjMuODY1JVwiLGlkOlwiYVwifX0sW3QoXCJzdG9wXCIse2F0dHJzOntcInN0b3AtY29sb3JcIjpcImN1cnJlbnRDb2xvclwiLFwic3RvcC1vcGFjaXR5XCI6XCIwXCIsb2Zmc2V0OlwiMCVcIn19KSx0KFwic3RvcFwiLHthdHRyczp7XCJzdG9wLWNvbG9yXCI6XCJjdXJyZW50Q29sb3JcIixcInN0b3Atb3BhY2l0eVwiOlwiLjYzMVwiLG9mZnNldDpcIjYzLjE0NiVcIn19KSx0KFwic3RvcFwiLHthdHRyczp7XCJzdG9wLWNvbG9yXCI6XCJjdXJyZW50Q29sb3JcIixvZmZzZXQ6XCIxMDAlXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLGZpbGw6XCJub25lXCIsXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwiLHN0cm9rZTpcInVybCgjYSlcIixcInN0cm9rZS13aWR0aFwiOlwiMlwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIwLjlzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsY3g6XCIzNlwiLGN5OlwiMThcIixyOlwiMVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIwLjlzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxTdGVwVGFiPXtuYW1lOlwiUVN0ZXBUYWJcIixkaXJlY3RpdmVzOntSaXBwbGU6UmlwcGxlfSxwcm9wczpbXCJ2bVwiXSxjb21wdXRlZDp7aGFzTmF2aWdhdGlvbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLnZtLl9fc3RlcHBlci5ub0hlYWRlck5hdmlnYXRpb259LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJzdGVwLWVycm9yXCI6dGhpcy52bS5lcnJvcixcInN0ZXAtYWN0aXZlXCI6dGhpcy52bS5hY3RpdmUsXCJzdGVwLWRvbmVcIjp0aGlzLnZtLmRvbmUsXCJzdGVwLW5hdmlnYXRpb25cIjp0aGlzLnZtLmRvbmUmJnRoaXMuaGFzTmF2aWdhdGlvbixcInN0ZXAtd2FpdGluZ1wiOnRoaXMudm0ud2FpdGluZyxcInN0ZXAtZGlzYWJsZWRcIjp0aGlzLnZtLmRpc2FibGUsXCJzdGVwLWNvbG9yZWRcIjp0aGlzLnZtLmFjdGl2ZXx8dGhpcy52bS5kb25lLFwiaXRlbXMtY2VudGVyXCI6IXRoaXMudm0uX19zdGVwcGVyLnZlcnRpY2FsLFwiaXRlbXMtc3RhcnRcIjp0aGlzLnZtLl9fc3RlcHBlci52ZXJ0aWNhbCxcInEtc3RlcHBlci1maXJzdFwiOnRoaXMudm0uZmlyc3QsXCJxLXN0ZXBwZXItbGFzdFwiOnRoaXMudm0ubGFzdH19fSxtZXRob2RzOntfX3NlbGVjdDpmdW5jdGlvbigpe3RoaXMuaGFzTmF2aWdhdGlvbiYmdGhpcy52bS5zZWxlY3QoKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZtLnN0ZXBJY29uP3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMudm0uc3RlcEljb259fSk6dChcInNwYW5cIixbdGhpcy52bS5pbm5lck9yZGVyKzFdKTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci10YWIgY29sLWdyb3cgZmxleCBuby13cmFwIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLG9uOntjbGljazp0aGlzLl9fc2VsZWN0fSxkaXJlY3RpdmVzOnRoaXMuaGFzTmF2aWdhdGlvbj9be25hbWU6XCJyaXBwbGVcIix2YWx1ZTp0aGlzLnZtLmRvbmV9XTpudWxsfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1kb3Qgcm93IGZsZXgtY2VudGVyIHEtc3RlcHBlci1saW5lIHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInJvdyBmbGV4LWNlbnRlclwifSxbZV0pXSksdGhpcy52bS50aXRsZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLWxhYmVsIHEtc3RlcHBlci1saW5lIHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXRpdGxlXCJ9LFt0aGlzLnZtLnRpdGxlXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1zdWJ0aXRsZVwifSxbdGhpcy52bS5zdWJ0aXRsZV0pXSk6bnVsbF0pfX0sUVN0ZXA9e25hbWU6XCJRU3RlcFwiLGluamVjdDp7X19zdGVwcGVyOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFTdGVwIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFTdGVwcGVyXCIpfX19LHByb3BzOntuYW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHVpZCgpfX0sZGVmYXVsdDpCb29sZWFuLHRpdGxlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc3VidGl0bGU6U3RyaW5nLGljb246U3RyaW5nLG9yZGVyOltOdW1iZXIsU3RyaW5nXSxlcnJvcjpCb29sZWFuLGFjdGl2ZUljb246U3RyaW5nLGVycm9ySWNvbjpTdHJpbmcsZG9uZUljb246U3RyaW5nLGRpc2FibGU6Qm9vbGVhbn0sd2F0Y2g6e29yZGVyOmZ1bmN0aW9uKCl7dGhpcy5fX3N0ZXBwZXIuX19zb3J0U3RlcHMoKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5uZXJPcmRlcjowLGZpcnN0OiExLGxhc3Q6ITF9fSxjb21wdXRlZDp7c3RlcEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fc3RlcHBlcjtyZXR1cm4gdGhpcy5hY3RpdmU/dGhpcy5hY3RpdmVJY29ufHx0LmFjdGl2ZUljb258fHRoaXMuJHEuaWNvbi5zdGVwcGVyLmFjdGl2ZTp0aGlzLmVycm9yP3RoaXMuZXJyb3JJY29ufHx0LmVycm9ySWNvbnx8dGhpcy4kcS5pY29uLnN0ZXBwZXIuZXJyb3I6dGhpcy5kb25lJiYhdGhpcy5kaXNhYmxlP3RoaXMuZG9uZUljb258fHQuZG9uZUljb258fHRoaXMuJHEuaWNvbi5zdGVwcGVyLmRvbmU6dGhpcy5pY29ufSxhY3R1YWxPcmRlcjpmdW5jdGlvbigpe3JldHVybiBwYXJzZUludCh0aGlzLm9yZGVyfHx0aGlzLmlubmVyT3JkZXIsMTApfSxhY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3N0ZXBwZXIuc3RlcD09PXRoaXMubmFtZX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJnRoaXMuX19zdGVwcGVyLmN1cnJlbnRPcmRlcj50aGlzLmlubmVyT3JkZXJ9LHdhaXRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiZ0aGlzLl9fc3RlcHBlci5jdXJyZW50T3JkZXI8dGhpcy5pbm5lck9yZGVyfSxzdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0dWFsT3JkZXI7cmV0dXJue1wiLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cFwiOnQsXCItbXMtZmxleC1vcmRlclwiOnQsb3JkZXI6dH19LGNsYXNzZXM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3N0ZXBwZXIudmVydGljYWwpe3ZhciB0PVtdO3JldHVybiF0aGlzLmFjdGl2ZSYmdC5wdXNoKFwiaGlkZGVuXCIpLG51bGwhPT10aGlzLl9fc3RlcHBlci5hbmltYXRpb24mJnQucHVzaCh0aGlzLl9fc3RlcHBlci5hbmltYXRpb24pLHR9fX0sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy5kb25lJiZ0aGlzLl9fc3RlcHBlci5nb1RvU3RlcCh0aGlzLm5hbWUpfSxfX2dldENvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXN0ZXAtY29udGVudFwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItc3RlcC1pbm5lclwifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pOm51bGw7cmV0dXJuIHRoaXMuX19zdGVwcGVyLnZlcnRpY2FsP3QoUVNsaWRlVHJhbnNpdGlvbixbZV0pOmV9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5fX3N0ZXBwZXIuX19yZWdpc3RlclN0ZXAodGhpcyksdGhpcy5kZWZhdWx0JiZ0aGlzLnNlbGVjdCgpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3N0ZXBwZXIuX191bnJlZ2lzdGVyU3RlcCh0aGlzKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXN0ZXBcIixzdHlsZTp0aGlzLnN0eWxlfSxbdGhpcy5fX3N0ZXBwZXIudmVydGljYWw/dChTdGVwVGFiLHtwcm9wczp7dm06dGhpc319KTpudWxsLHRoaXMuX19nZXRDb250YWluZXIodCldKX19LFFTdGVwcGVyPXtuYW1lOlwiUVN0ZXBwZXJcIixwcm9wczp7dmFsdWU6W051bWJlcixTdHJpbmddLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSx2ZXJ0aWNhbDpCb29sZWFuLGFsdGVybmF0aXZlTGFiZWxzOkJvb2xlYW4sbm9IZWFkZXJOYXZpZ2F0aW9uOkJvb2xlYW4sY29udHJhY3RhYmxlOkJvb2xlYW4sZG9uZUljb246Qm9vbGVhbixhY3RpdmVJY29uOkJvb2xlYW4sZXJyb3JJY29uOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57YW5pbWF0aW9uOm51bGwsc3RlcDp0aGlzLnZhbHVlfHxudWxsLHN0ZXBzOltdfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX3N0ZXBwZXI6dGhpc319LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmdvVG9TdGVwKHQpfSxzdGVwOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMudmVydGljYWwpe3ZhciBpPXRoaXMuc3RlcHMuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10fSkscz10aGlzLnN0ZXBzLmZpbmRJbmRleChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZX0pO3RoaXMuYW5pbWF0aW9uPWk8cz9cImFuaW1hdGUtZmFkZS1sZWZ0XCI6aT5zP1wiYW5pbWF0ZS1mYWRlLXJpZ2h0XCI6bnVsbH19fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtcInEtc3RlcHBlci1cIisodGhpcy52ZXJ0aWNhbD9cInZlcnRpY2FsXCI6XCJob3Jpem9udGFsXCIpLFwidGV4dC1cIit0aGlzLmNvbG9yXTtyZXR1cm4gdGhpcy5jb250cmFjdGFibGUmJnQucHVzaChcInEtc3RlcHBlci1jb250cmFjdGFibGVcIiksdH0saGFzU3RlcHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGVwcy5sZW5ndGg+MH0sY3VycmVudFN0ZXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuaGFzU3RlcHMpcmV0dXJuIHRoaXMuc3RlcHMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dC5zdGVwfSl9LGN1cnJlbnRPcmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuY3VycmVudFN0ZXApcmV0dXJuIHRoaXMuY3VycmVudFN0ZXAuaW5uZXJPcmRlcn0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RofX0sbWV0aG9kczp7Z29Ub1N0ZXA6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLnN0ZXAhPT10JiZ2b2lkIDAhPT10JiYodGhpcy5zdGVwPXQsdGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kZW1pdChcInN0ZXBcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pKX0sbmV4dDpmdW5jdGlvbigpe3RoaXMuX19nbygxKX0scHJldmlvdXM6ZnVuY3Rpb24oKXt0aGlzLl9fZ28oLTEpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaGFzU3RlcHMmJnRoaXMuZ29Ub1N0ZXAodGhpcy5zdGVwc1swXS5uYW1lKX0sX19nbzpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMuY3VycmVudE9yZGVyO2lmKHZvaWQgMD09PWkpe2lmKCF0aGlzLmhhc1N0ZXBzKXJldHVybjtlPXRoaXMuc3RlcHNbMF0ubmFtZX1lbHNle2Rve2krPXR9d2hpbGUoaT49MCYmaTx0aGlzLmxlbmd0aC0xJiZ0aGlzLnN0ZXBzW2ldLmRpc2FibGUpO2lmKGk8MHx8aT50aGlzLmxlbmd0aC0xfHx0aGlzLnN0ZXBzW2ldLmRpc2FibGUpcmV0dXJuO2U9dGhpcy5zdGVwc1tpXS5uYW1lfXRoaXMuZ29Ub1N0ZXAoZSl9LF9fc29ydFN0ZXBzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnN0ZXBzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hY3R1YWxPcmRlci1lLmFjdHVhbE9yZGVyfSk7dmFyIGU9dGhpcy5zdGVwcy5sZW5ndGgtMTt0aGlzLnN0ZXBzLmZvckVhY2goZnVuY3Rpb24odCxpKXt0LmlubmVyT3JkZXI9aSx0LmZpcnN0PTA9PT1pLHQubGFzdD1pPT09ZX0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5zdGVwcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFjdGl2ZX0pfHx0LmdvVG9TdGVwKHQuc3RlcHNbMF0ubmFtZSl9KX0sX19yZWdpc3RlclN0ZXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaCh0KSx0aGlzLl9fc29ydFN0ZXBzKCksdGhpc30sX191bnJlZ2lzdGVyU3RlcDpmdW5jdGlvbih0KXt0aGlzLnN0ZXBzPXRoaXMuc3RlcHMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX19zb3J0U3RlcHM9ZnJhbWVEZWJvdW5jZSh0aGlzLl9fc29ydFN0ZXBzKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyIGNvbHVtbiBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0aGlzLnZlcnRpY2FsP251bGw6dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1oZWFkZXIgcm93IGl0ZW1zLXN0cmV0Y2gganVzdGlmeS1iZXR3ZWVuIHNoYWRvdy0xXCIsY2xhc3M6e1wiYWx0ZXJuYXRpdmUtbGFiZWxzXCI6dGhpcy5hbHRlcm5hdGl2ZUxhYmVsc319LHRoaXMuc3RlcHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0KFN0ZXBUYWIse2tleTplLm5hbWUscHJvcHM6e3ZtOmV9fSl9KSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sUVN0ZXBwZXJOYXZpZ2F0aW9uPXtuYW1lOlwiUVN0ZXBwZXJOYXZpZ2F0aW9uXCIscmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLW5hdiBvcmRlci1sYXN0IHJvdyBpdGVtcy1jZW50ZXJcIn0sW3RoaXMuJHNsb3RzLmxlZnQsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sVGFiTWl4aW49e2RpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LHByb3BzOntsYWJlbDpTdHJpbmcsaWNvbjpTdHJpbmcsZGlzYWJsZTpCb29sZWFuLGhpZGRlbjpCb29sZWFuLGhpZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJcIn0sbmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB1aWQoKX19LGFsZXJ0OkJvb2xlYW4sY291bnQ6W051bWJlcixTdHJpbmddLGNvbG9yOlN0cmluZyx0YWJpbmRleDpOdW1iZXJ9LGluamVjdDp7ZGF0YTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRVGFiL1FSb3V0ZVRhYiBjb21wb25lbnRzIG5lZWQgdG8gYmUgY2hpbGQgb2YgUVRhYnNcIil9fSxzZWxlY3RUYWI6e319LHdhdGNoOnthY3RpdmU6ZnVuY3Rpb24odCl7dCYmdGhpcy4kZW1pdChcInNlbGVjdFwiLHRoaXMubmFtZSl9fSxjb21wdXRlZDp7YWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS50YWJOYW1lPT09dGhpcy5uYW1lfSxjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9e2FjdGl2ZTp0aGlzLmFjdGl2ZSxoaWRkZW46dGhpcy5oaWRkZW4sZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLFwicS10YWItZnVsbFwiOnRoaXMuaWNvbiYmdGhpcy5sYWJlbCxcInEtdGFiLW9ubHktbGFiZWxcIjohdGhpcy5pY29uJiZ0aGlzLmxhYmVsLFwiaGlkZS1ub25lXCI6IXRoaXMuaGlkZSxcImhpZGUtaWNvblwiOlwiaWNvblwiPT09dGhpcy5oaWRlLFwiaGlkZS1sYWJlbFwiOlwibGFiZWxcIj09PXRoaXMuaGlkZX0sZT10aGlzLmRhdGEuaW52ZXJ0ZWQ/dGhpcy5jb2xvcnx8dGhpcy5kYXRhLnRleHRDb2xvcnx8dGhpcy5kYXRhLmNvbG9yOnRoaXMuY29sb3I7cmV0dXJuIGUmJih0W1widGV4dC1cIitlXT0hMCksdH0sYmFyU3R5bGU6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmV8fCF0aGlzLmRhdGEuaGlnaGxpZ2h0KXJldHVyblwiZGlzcGxheTogbm9uZTtcIn0sY29tcHV0ZWRUYWJJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGV8fHRoaXMuYWN0aXZlPy0xOnRoaXMudGFiaW5kZXh8fDB9fSxtZXRob2RzOntfX2dldFRhYk1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY291bnQ/W3QoUUNoaXAse3N0YXRpY0NsYXNzOlwicS10YWItbWV0YVwiLHByb3BzOntmbG9hdGluZzohMH19LFt0aGlzLmNvdW50XSldOnRoaXMuYWxlcnQ/W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYi1tZXRhIHEtZG90XCJ9KV06dm9pZCAwfSxfX2dldFRhYkNvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHRoaXMuaWNvbiYmZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYi1pY29uLXBhcmVudCByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRhYi1pY29uXCIscHJvcHM6e25hbWU6dGhpcy5pY29ufX0pLHRoaXMuX19nZXRUYWJNZXRhKHQpXSkpLHRoaXMubGFiZWwmJmUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItbGFiZWwtcGFyZW50IHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItbGFiZWxcIn0sW3RoaXMubGFiZWxdKSx0aGlzLl9fZ2V0VGFiTWV0YSh0KV0pKSwoZT1lLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KSkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzLWJhclwiLHN0eWxlOnRoaXMuYmFyU3R5bGUsY2xhc3M6dGhpcy5kYXRhLnVuZGVybGluZUNsYXNzfSkpLGUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItZm9jdXMtaGVscGVyIGFic29sdXRlLWZ1bGxcIixhdHRyczp7dGFiaW5kZXg6dGhpcy5jb21wdXRlZFRhYkluZGV4fX0pKSxlfX19LFFSb3V0ZVRhYj17bmFtZTpcIlFSb3V0ZVRhYlwiLG1peGluczpbVGFiTWl4aW4sUm91dGVyTGlua01peGluXSxpbmplY3Q6e3NlbGVjdFRhYlJvdXRlcjp7fX0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpe3RoaXMuY2hlY2tJZlNlbGVjdGVkKCl9fSxtZXRob2RzOntzZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiY2xpY2tcIix0aGlzLm5hbWUpLHRoaXMuZGlzYWJsZXx8KHRoaXMuJGVsLmRpc3BhdGNoRXZlbnQoZXZ0KSx0aGlzLnNlbGVjdFRhYlJvdXRlcih7dmFsdWU6dGhpcy5uYW1lLHNlbGVjdGVkOiEwfSkpfSxjaGVja0lmU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aWYodC4kZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1yb3V0ZXItbGluay1leGFjdC1hY3RpdmVcIikpdC5zZWxlY3RUYWJSb3V0ZXIoe3ZhbHVlOnQubmFtZSxzZWxlY3RhYmxlOiEwLGV4YWN0OiEwfSk7ZWxzZSBpZih0LiRlbC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLXJvdXRlci1saW5rLWFjdGl2ZVwiKSl7dmFyIGU9dC4kcm91dGVyLnJlc29sdmUodC50byx2b2lkIDAsdC5hcHBlbmQpO3Quc2VsZWN0VGFiUm91dGVyKHt2YWx1ZTp0Lm5hbWUsc2VsZWN0YWJsZTohMCxwcmlvcml0eTplLmhyZWYubGVuZ3RofSl9ZWxzZSB0LmFjdGl2ZSYmdC5zZWxlY3RUYWJSb3V0ZXIoe3ZhbHVlOm51bGx9KX0pfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuY2hlY2tJZlNlbGVjdGVkKCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwicm91dGVyLWxpbmtcIix7cHJvcHM6e3RhZzpcImFcIix0bzp0aGlzLnRvLGV4YWN0OnRoaXMuZXhhY3QsYXBwZW5kOnRoaXMuYXBwZW5kLHJlcGxhY2U6dGhpcy5yZXBsYWNlLGV2ZW50OnJvdXRlckxpbmtFdmVudE5hbWUsYWN0aXZlQ2xhc3M6XCJxLXJvdXRlci1saW5rLWFjdGl2ZVwiLGV4YWN0QWN0aXZlQ2xhc3M6XCJxLXJvdXRlci1saW5rLWV4YWN0LWFjdGl2ZVwifSxhdHRyczp7dGFiaW5kZXg6LTF9LG5hdGl2ZU9uOntjbGljazp0aGlzLnNlbGVjdCxrZXl1cDpmdW5jdGlvbih0KXtyZXR1cm4gMTM9PT10LmtleUNvZGUmJmUuc2VsZWN0KHQpfX0sc3RhdGljQ2xhc3M6XCJxLWxpbmsgcS10YWIgY29sdW1uIGZsZXgtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGRpcmVjdGl2ZXM6W3tuYW1lOlwicmlwcGxlXCJ9XX0sdGhpcy5fX2dldFRhYkNvbnRlbnQodCkpfX0sUVRhYj17bmFtZTpcIlFUYWJcIixtaXhpbnM6W1RhYk1peGluXSxwcm9wczp7ZGVmYXVsdDpCb29sZWFufSxtZXRob2RzOntzZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiY2xpY2tcIix0aGlzLm5hbWUpLHRoaXMuZGlzYWJsZXx8dGhpcy5zZWxlY3RUYWIodGhpcy5uYW1lKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHQmJiF0aGlzLmRpc2FibGUmJnRoaXMuc2VsZWN0KCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWIgY29sdW1uIGZsZXgtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntcImRhdGEtdGFiLW5hbWVcIjp0aGlzLm5hbWV9LG9uOntjbGljazp0aGlzLnNlbGVjdCxrZXl1cDpmdW5jdGlvbih0KXtyZXR1cm4gMTM9PT10LmtleUNvZGUmJmUuc2VsZWN0KHQpfX0sZGlyZWN0aXZlczpbe25hbWU6XCJyaXBwbGVcIn1dfSx0aGlzLl9fZ2V0VGFiQ29udGVudCh0KSl9fSxRVGFiUGFuZT17bmFtZTpcIlFUYWJQYW5lXCIsaW5qZWN0OntkYXRhOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFUYWJQYW5lIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFUYWJzXCIpfX19LHByb3BzOntuYW1lOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sa2VlcEFsaXZlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd246ITF9fSxjb21wdXRlZDp7YWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS50YWJOYW1lPT09dGhpcy5uYW1lfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue2hpZGRlbjohdGhpcy5hY3RpdmUsXCJhbmltYXRlLWZhZGUtbGVmdFwiOlwibGVmdFwiPT09dGhpcy5kYXRhLmRpcmVjdGlvbixcImFuaW1hdGUtZmFkZS1yaWdodFwiOlwicmlnaHRcIj09PXRoaXMuZGF0YS5kaXJlY3Rpb259fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYi1wYW5lXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KTtpZih0aGlzLmtlZXBBbGl2ZSl7aWYoIXRoaXMuc2hvd24mJiF0aGlzLmFjdGl2ZSlyZXR1cm47cmV0dXJuIHRoaXMuc2hvd249ITAsZX1pZih0aGlzLnNob3duPXRoaXMuYWN0aXZlLHRoaXMuYWN0aXZlKXJldHVybiBlfX0sc2Nyb2xsTmF2aWdhdGlvblNwZWVkPTUsZGVib3VuY2VEZWxheT01MDtmdW5jdGlvbiBnZXRVbmRlcmxpbmVDbGFzcyh0KXtpZih0KXJldHVyblwidGV4dC1cIit0fXZhciBRVGFicz17bmFtZTpcIlFUYWJzXCIscHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntkYXRhOnRoaXMuZGF0YSxzZWxlY3RUYWI6dGhpcy5zZWxlY3RUYWIsc2VsZWN0VGFiUm91dGVyOnRoaXMuc2VsZWN0VGFiUm91dGVyfX0sZGlyZWN0aXZlczp7VG91Y2hTd2lwZTpUb3VjaFN3aXBlfSxwcm9wczp7dmFsdWU6U3RyaW5nLGFsaWduOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwibGVmdFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCIsXCJqdXN0aWZ5XCJdLmluY2x1ZGVzKHQpfX0scG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0b3BcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1widG9wXCIsXCJib3R0b21cIl0uaW5jbHVkZXModCl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdGV4dENvbG9yOlN0cmluZyxpbnZlcnRlZDpCb29sZWFuLHR3b0xpbmVzOkJvb2xlYW4sZ2xvc3N5OkJvb2xlYW4sYW5pbWF0ZWQ6Qm9vbGVhbixzd2lwZWFibGU6Qm9vbGVhbixwYW5lc0NvbnRhaW5lckNsYXNzOlN0cmluZyx1bmRlcmxpbmVDb2xvcjpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudEVsOm51bGwscG9zYmFyOnt3aWR0aDowLGxlZnQ6MH0sZGF0YTp7aGlnaGxpZ2h0OiEwLHRhYk5hbWU6dGhpcy52YWx1ZXx8XCJcIixjb2xvcjp0aGlzLmNvbG9yLHRleHRDb2xvcjp0aGlzLnRleHRDb2xvcixpbnZlcnRlZDp0aGlzLmludmVydGVkLHVuZGVybGluZUNsYXNzOmdldFVuZGVybGluZUNsYXNzKHRoaXMudW5kZXJsaW5lQ29sb3IpLGRpcmVjdGlvbjpudWxsfX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNlbGVjdFRhYih0KX0sY29sb3I6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLmNvbG9yPXR9LHRleHRDb2xvcjpmdW5jdGlvbih0KXt0aGlzLmRhdGEudGV4dENvbG9yPXR9LGludmVydGVkOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5pbnZlcnRlZD10fSx1bmRlcmxpbmVDb2xvcjpmdW5jdGlvbih0KXt0aGlzLmRhdGEudW5kZXJsaW5lQ2xhc3M9Z2V0VW5kZXJsaW5lQ2xhc3ModCl9fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcInEtdGFicy1wb3NpdGlvbi1cIit0aGlzLnBvc2l0aW9uLFwicS10YWJzLVwiKyh0aGlzLmludmVydGVkP1wiaW52ZXJ0ZWRcIjpcIm5vcm1hbFwiKSx0aGlzLnR3b0xpbmVzP1wicS10YWJzLXR3by1saW5lc1wiOlwiXCJdfSxpbm5lckNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLXRhYnMtYWxpZ24tXCIrdGhpcy5hbGlnbl07cmV0dXJuIHRoaXMuZ2xvc3N5JiZ0LnB1c2goXCJnbG9zc3lcIiksdGhpcy5pbnZlcnRlZD90LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8dGhpcy5jb2xvcikpOih0LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKSkpLHR9LHBvc2JhckNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5pbnZlcnRlZCYmdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fHRoaXMuY29sb3IpKSx0aGlzLmRhdGEuaGlnaGxpZ2h0JiZ0LnB1c2goXCJoaWdobGlnaHRcIiksdH19LG1ldGhvZHM6e2dvOmZ1bmN0aW9uKHQpe3ZhciBlPTA7aWYodGhpcy5kYXRhLnRhYk5hbWUpe3ZhciBpPXRoaXMuJHJlZnMuc2Nyb2xsZXIucXVlcnlTZWxlY3RvcignW2RhdGEtdGFiLW5hbWU9XCInK3RoaXMuZGF0YS50YWJOYW1lKydcIl0nKTtpJiYoZT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMuJHJlZnMuc2Nyb2xsZXIuY2hpbGRyZW4saSkpfXZhciBzPXRoaXMuJHJlZnMuc2Nyb2xsZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXRhYi1uYW1lXVwiKTsoZSs9dCk+LTEmJmU8cy5sZW5ndGgmJnRoaXMuc2VsZWN0VGFiKHNbZV0uZ2V0QXR0cmlidXRlKFwiZGF0YS10YWItbmFtZVwiKSl9LHByZXZpb3VzOmZ1bmN0aW9uKCl7dGhpcy5nbygtMSl9LG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmdvKDEpfSxzZWxlY3RUYWI6ZnVuY3Rpb24odCl7aWYodGhpcy5kYXRhLnRhYk5hbWUhPT10KXt0aGlzLmRhdGEudGFiTmFtZT10O3ZhciBlPXRoaXMuX19nZXRUYWJFbEJ5TmFtZSh0KTtpZihlKWlmKHRoaXMuX19zY3JvbGxUb1RhYihlKSx0aGlzLmN1cnJlbnRFbD1lLHRoaXMub2xkRWwpe2lmKHRoaXMuYW5pbWF0ZWQpe3ZhciBpPXRoaXMuJHJlZnMuc2Nyb2xsZXIuY2hpbGRyZW47dGhpcy5kYXRhLmRpcmVjdGlvbj1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGksZSk8QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChpLHRoaXMub2xkRWwpP1wibGVmdFwiOlwicmlnaHRcIn10aGlzLl9fcmVwb3NpdGlvbkJhcigpfWVsc2UgdGhpcy5vbGRFbD1lO2Vsc2UgdGhpcy5vbGRFbD1udWxsLHRoaXMuZGF0YS5kaXJlY3Rpb249bnVsbDt0aGlzLiRlbWl0KFwiaW5wdXRcIix0LHRoaXMuZGF0YS5kaXJlY3Rpb24pLHRoaXMuJGVtaXQoXCJzZWxlY3RcIix0LHRoaXMuZGF0YS5kaXJlY3Rpb24pfX0sc2VsZWN0VGFiUm91dGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LnZhbHVlLHM9dC5zZWxlY3RhYmxlLG49dC5leGFjdCxvPXQuc2VsZWN0ZWQscj10LnByaW9yaXR5LGE9IXRoaXMuYnVmZmVyLmxlbmd0aCxsPWE/LTE6dGhpcy5idWZmZXIuZmluZEluZGV4KGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlPT09aX0pO2lmKGw+LTEpe3ZhciBjPXRoaXMuYnVmZmVyW2xdO24mJihjLmV4YWN0PW4pLHMmJihjLnNlbGVjdGFibGU9cyksbyYmKGMuc2VsZWN0ZWQ9byksciYmKGMucHJpb3JpdHk9cil9ZWxzZSB0aGlzLmJ1ZmZlci5wdXNoKHQpO2EmJih0aGlzLmJ1ZmZlclRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1lLmJ1ZmZlci5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LmV4YWN0JiZ0LnNlbGVjdGVkfSl8fGUuYnVmZmVyLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0YWJsZSYmdC5zZWxlY3RlZH0pfHxlLmJ1ZmZlci5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LmV4YWN0fSl8fGUuYnVmZmVyLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RhYmxlfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnByaW9yaXR5LXQucHJpb3JpdHl9KVswXXx8ZS5idWZmZXJbMF07ZS5idWZmZXIubGVuZ3RoPTAsZS5zZWxlY3RUYWIodC52YWx1ZSl9LDEwMCkpfSxfX3N3aXBlOmZ1bmN0aW9uKHQpe3RoaXMuZ28oXCJsZWZ0XCI9PT10LmRpcmVjdGlvbj8xOi0xKX0sX19yZXBvc2l0aW9uQmFyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztjbGVhclRpbWVvdXQodGhpcy50aW1lcik7dmFyIGU9ITEsaT10aGlzLiRyZWZzLnBvc2JhcixzPXRoaXMuY3VycmVudEVsO2lmKCExIT09dGhpcy5kYXRhLmhpZ2hsaWdodCYmKHRoaXMuZGF0YS5oaWdobGlnaHQ9ITEsZT0hMCksIXMpcmV0dXJuIHRoaXMuZmluYWxQb3NiYXI9e3dpZHRoOjAsbGVmdDowfSx2b2lkIHRoaXMuX19zZXRQb3NpdGlvbkJhcigwLDApO3ZhciBuPWkucGFyZW50Tm9kZS5vZmZzZXRMZWZ0O2UmJnRoaXMub2xkRWwmJnRoaXMuX19zZXRQb3NpdGlvbkJhcih0aGlzLm9sZEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHRoaXMub2xkRWwub2Zmc2V0TGVmdC1uKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgZT1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLG89cy5vZmZzZXRMZWZ0LW47aS5jbGFzc0xpc3QucmVtb3ZlKFwiY29udHJhY3RcIiksdC5vbGRFbD1zLHQuZmluYWxQb3NiYXI9e3dpZHRoOmUsbGVmdDpvfSx0Ll9fc2V0UG9zaXRpb25CYXIodC5wb3NiYXIubGVmdDxvP28rZS10LnBvc2Jhci5sZWZ0OnQucG9zYmFyLmxlZnQrdC5wb3NiYXIud2lkdGgtbyx0LnBvc2Jhci5sZWZ0PG8/dC5wb3NiYXIubGVmdDpvKX0sMjApfSxfX3NldFBvc2l0aW9uQmFyOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5wb3NiYXIud2lkdGghPT10fHx0aGlzLnBvc2Jhci5sZWZ0IT09ZSl7dGhpcy5wb3NiYXI9e3dpZHRoOnQsbGVmdDplfTt2YXIgaT10aGlzLiRxLmkxOG4ucnRsP2UrdDplO3RoaXMuJHJlZnMucG9zYmFyLnN0eWxlLnRyYW5zZm9ybT1cInRyYW5zbGF0ZVgoXCIraStcInB4KSBzY2FsZVgoXCIrdCtcIilcIn1lbHNlIHRoaXMuX191cGRhdGVQb3NiYXJUcmFuc2l0aW9uKCl9LF9fdXBkYXRlUG9zYmFyVHJhbnNpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuZmluYWxQb3NiYXIud2lkdGg9PT10aGlzLnBvc2Jhci53aWR0aCYmdGhpcy5maW5hbFBvc2Jhci5sZWZ0PT09dGhpcy5wb3NiYXIubGVmdClyZXR1cm4gdGhpcy5wb3NiYXI9e30sdm9pZCghMCE9PXRoaXMuZGF0YS5oaWdobGlnaHQmJih0aGlzLmRhdGEuaGlnaGxpZ2h0PSEwKSk7dGhpcy4kcmVmcy5wb3NiYXIuY2xhc3NMaXN0LmFkZChcImNvbnRyYWN0XCIpLHRoaXMuX19zZXRQb3NpdGlvbkJhcih0aGlzLmZpbmFsUG9zYmFyLndpZHRoLHRoaXMuZmluYWxQb3NiYXIubGVmdCl9LF9fcmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wJiYodGhpcy5zY3JvbGxlcldpZHRoPXdpZHRoKHRoaXMuJHJlZnMuc2Nyb2xsZXIpLDA9PT10aGlzLnNjcm9sbGVyV2lkdGgmJjA9PT10aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbFdpZHRofHwodGhpcy5zY3JvbGxlcldpZHRoKzU8dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxXaWR0aD8odGhpcy4kcmVmcy50YWJzLmNsYXNzTGlzdC5hZGQoXCJzY3JvbGxhYmxlXCIpLHRoaXMuc2Nyb2xsYWJsZT0hMCx0aGlzLl9fdXBkYXRlU2Nyb2xsSW5kaWNhdG9yKCkpOih0aGlzLiRyZWZzLnRhYnMuY2xhc3NMaXN0LnJlbW92ZShcInNjcm9sbGFibGVcIiksdGhpcy5zY3JvbGxhYmxlPSExKSkpfSxfX3VwZGF0ZVNjcm9sbEluZGljYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcCYmdGhpcy5zY3JvbGxhYmxlKXt2YXIgdD10aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQrd2lkdGgodGhpcy4kcmVmcy5zY3JvbGxlcikrNT49dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxXaWR0aD9cImFkZFwiOlwicmVtb3ZlXCI7dGhpcy4kcmVmcy5sZWZ0U2Nyb2xsLmNsYXNzTGlzdFt0aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQ8PTA/XCJhZGRcIjpcInJlbW92ZVwiXShcImRpc2FibGVkXCIpLHRoaXMuJHJlZnMucmlnaHRTY3JvbGwuY2xhc3NMaXN0W3RdKFwiZGlzYWJsZWRcIil9fSxfX2dldFRhYkVsQnlOYW1lOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJGNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXQmJmUuJGVsJiYxPT09ZS4kZWwubm9kZVR5cGV9KTtpZihlKXJldHVybiBlLiRlbH0sX19maW5kVGFiQW5kU2Nyb2xsOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5fX3Njcm9sbFRvVGFiKGkuX19nZXRUYWJFbEJ5TmFtZSh0KSxlKX0sNCpkZWJvdW5jZURlbGF5KX0sX19zY3JvbGxUb1RhYjpmdW5jdGlvbih0LGUpe2lmKHQmJnRoaXMuc2Nyb2xsYWJsZSl7dmFyIGk9dGhpcy4kcmVmcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1zLndpZHRoLG89cy5sZWZ0LWkubGVmdDtvPDA/ZT90aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQrPW86dGhpcy5fX2FuaW1TY3JvbGxUbyh0aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQrbyk6KG8rPW4tdGhpcy4kcmVmcy5zY3JvbGxlci5vZmZzZXRXaWR0aCk+MCYmKGU/dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0Kz1vOnRoaXMuX19hbmltU2Nyb2xsVG8odGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0K28pKX19LF9fYW5pbVNjcm9sbFRvOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fX3N0b3BBbmltU2Nyb2xsKCksdGhpcy5fX3Njcm9sbFRvd2FyZHModCksdGhpcy5zY3JvbGxUaW1lcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuX19zY3JvbGxUb3dhcmRzKHQpJiZlLl9fc3RvcEFuaW1TY3JvbGwoKX0sNSl9LF9fc2Nyb2xsVG9TdGFydDpmdW5jdGlvbigpe3RoaXMuX19hbmltU2Nyb2xsVG8oMCl9LF9fc2Nyb2xsVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9fYW5pbVNjcm9sbFRvKDk5OTkpfSxfX3N0b3BBbmltU2Nyb2xsOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLnNjcm9sbFRpbWVyKX0sX19zY3JvbGxUb3dhcmRzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCxpPXQ8ZT8tMToxLHM9ITE7cmV0dXJuKGUrPWkqc2Nyb2xsTmF2aWdhdGlvblNwZWVkKTwwPyhzPSEwLGU9MCk6KC0xPT09aSYmZTw9dHx8MT09PWkmJmU+PXQpJiYocz0hMCxlPXQpLHRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lLHN9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYnMgZmxleCBuby13cmFwIG92ZXJmbG93LWhpZGRlblwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYnMtaGVhZCByb3dcIixyZWY6XCJ0YWJzXCIsY2xhc3M6dGhpcy5pbm5lckNsYXNzZXN9LFt0KFwiZGl2XCIse3JlZjpcInNjcm9sbGVyXCIsc3RhdGljQ2xhc3M6XCJxLXRhYnMtc2Nyb2xsZXIgcm93IG5vLXdyYXBcIn0sW3RoaXMuJHNsb3RzLnRpdGxlLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyZWxhdGl2ZS1wb3NpdGlvbiBzZWxmLXN0cmV0Y2ggcS10YWJzLWdsb2JhbC1iYXItY29udGFpbmVyXCIsY2xhc3M6dGhpcy5wb3NiYXJDbGFzc2VzfSxbdChcImRpdlwiLHtyZWY6XCJwb3NiYXJcIixzdGF0aWNDbGFzczpcInEtdGFicy1iYXIgcS10YWJzLWdsb2JhbC1iYXJcIixjbGFzczp0aGlzLmRhdGEudW5kZXJsaW5lQ2xhc3Msb246e3RyYW5zaXRpb25lbmQ6dGhpcy5fX3VwZGF0ZVBvc2JhclRyYW5zaXRpb259fSldKV0pLHQoXCJkaXZcIix7cmVmOlwibGVmdFNjcm9sbFwiLHN0YXRpY0NsYXNzOlwicm93IGZsZXgtY2VudGVyIHEtdGFicy1sZWZ0LXNjcm9sbFwiLG9uOnttb3VzZWRvd246dGhpcy5fX3Njcm9sbFRvU3RhcnQsdG91Y2hzdGFydDp0aGlzLl9fc2Nyb2xsVG9TdGFydCxtb3VzZXVwOnRoaXMuX19zdG9wQW5pbVNjcm9sbCxtb3VzZWxlYXZlOnRoaXMuX19zdG9wQW5pbVNjcm9sbCx0b3VjaGVuZDp0aGlzLl9fc3RvcEFuaW1TY3JvbGx9fSxbdChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnRhYnMubGVmdH19KV0pLHQoXCJkaXZcIix7cmVmOlwicmlnaHRTY3JvbGxcIixzdGF0aWNDbGFzczpcInJvdyBmbGV4LWNlbnRlciBxLXRhYnMtcmlnaHQtc2Nyb2xsXCIsb246e21vdXNlZG93bjp0aGlzLl9fc2Nyb2xsVG9FbmQsdG91Y2hzdGFydDp0aGlzLl9fc2Nyb2xsVG9FbmQsbW91c2V1cDp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsbW91c2VsZWF2ZTp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsdG91Y2hlbmQ6dGhpcy5fX3N0b3BBbmltU2Nyb2xsfX0sW3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi50YWJzLnJpZ2h0fX0pXSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzLXBhbmVzXCIsY2xhc3M6dGhpcy5wYW5lc0NvbnRhaW5lckNsYXNzLGRpcmVjdGl2ZXM6dGhpcy5zd2lwZWFibGU/W3tuYW1lOlwidG91Y2gtc3dpcGVcIix2YWx1ZTp0aGlzLl9fc3dpcGV9XTpudWxsfSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy50aW1lcj1udWxsLHRoaXMuc2Nyb2xsVGltZXI9bnVsbCx0aGlzLmJ1ZmZlclRpbWVyPW51bGwsdGhpcy5idWZmZXI9W10sdGhpcy5zY3JvbGxhYmxlPSF0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3AsdGhpcy5fX3JlZHJhdz1kZWJvdW5jZSh0aGlzLl9fcmVkcmF3LGRlYm91bmNlRGVsYXkpLHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3I9ZGVib3VuY2UodGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcixkZWJvdW5jZURlbGF5KX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LiRyZWZzLnNjcm9sbGVyJiYodC4kcmVmcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdC5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdC5fX3JlZHJhdyxsaXN0ZW5PcHRzLnBhc3NpdmUpLFwiXCIhPT10LmRhdGEudGFiTmFtZSYmdC52YWx1ZSYmdC5zZWxlY3RUYWIodC52YWx1ZSksdC5fX3JlZHJhdygpLHQuX19maW5kVGFiQW5kU2Nyb2xsKHQuZGF0YS50YWJOYW1lLCEwKSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5idWZmZXJUaW1lciksdGhpcy5fX3N0b3BBbmltU2Nyb2xsKCksdGhpcy4kcmVmcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX3JlZHJhdyxsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuX19yZWRyYXcuY2FuY2VsKCksdGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvci5jYW5jZWwoKX19LFRvcD17Y29tcHV0ZWQ6e21hcmdpbmFsc1Byb3BzOmZ1bmN0aW9uKCl7cmV0dXJue3BhZ2luYXRpb246dGhpcy5jb21wdXRlZFBhZ2luYXRpb24scGFnZXNOdW1iZXI6dGhpcy5wYWdlc051bWJlcixpc0ZpcnN0UGFnZTp0aGlzLmlzRmlyc3RQYWdlLGlzTGFzdFBhZ2U6dGhpcy5pc0xhc3RQYWdlLHByZXZQYWdlOnRoaXMucHJldlBhZ2UsbmV4dFBhZ2U6dGhpcy5uZXh0UGFnZSxpbkZ1bGxzY3JlZW46dGhpcy5pbkZ1bGxzY3JlZW4sdG9nZ2xlRnVsbHNjcmVlbjp0aGlzLnRvZ2dsZUZ1bGxzY3JlZW59fX0sbWV0aG9kczp7Z2V0VG9wOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHNjb3BlZFNsb3RzLnRvcCxpPXRoaXMuJHNjb3BlZFNsb3RzW1widG9wLWxlZnRcIl0scz10aGlzLiRzY29wZWRTbG90c1tcInRvcC1yaWdodFwiXSxuPXRoaXMuJHNjb3BlZFNsb3RzW1widG9wLXNlbGVjdGlvblwiXSxvPXRoaXMuaGFzU2VsZWN0aW9uTW9kZSYmbiYmdGhpcy5yb3dzU2VsZWN0ZWROdW1iZXI+MCxyPVwicS10YWJsZS10b3AgcmVsYXRpdmUtcG9zaXRpb24gcm93IGl0ZW1zLWNlbnRlclwiLGE9W107cmV0dXJuIGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpyfSxbZSh0aGlzLm1hcmdpbmFsc1Byb3BzKV0pOihvP2EucHVzaChuKHRoaXMubWFyZ2luYWxzUHJvcHMpKTppP2EucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb250cm9sXCJ9LFtpKHRoaXMubWFyZ2luYWxzUHJvcHMpXSkpOnRoaXMudGl0bGUmJmEucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb250cm9sXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS10aXRsZVwifSx0aGlzLnRpdGxlKV0pKSxzJiYoYS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLXNlcGFyYXRvciBjb2xcIn0pKSxhLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbcyh0aGlzLm1hcmdpbmFsc1Byb3BzKV0pKSksMCE9PWEubGVuZ3RoP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6cn0sYSk6dm9pZCAwKX19fSxRVGg9e25hbWU6XCJRVGhcIixwcm9wczp7cHJvcHM6T2JqZWN0LGF1dG9XaWR0aDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzO2lmKCF0aGlzLnByb3BzKXJldHVybiB0KFwidGRcIix7Y2xhc3M6e1wicS10YWJsZS1jb2wtYXV0by13aWR0aFwiOnRoaXMuYXV0b1dpZHRofX0sdGhpcy4kc2xvdHMuZGVmYXVsdCk7dmFyIHM9dGhpcy4kdm5vZGUua2V5LG49W10uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpO2lmKHMpe2lmKCEoZT10aGlzLnByb3BzLmNvbHNNYXBbc10pKXJldHVybn1lbHNlIGU9dGhpcy5wcm9wcy5jb2w7ZS5zb3J0YWJsZSYmbltcInJpZ2h0XCI9PT1lLmFsaWduP1widW5zaGlmdFwiOlwicHVzaFwiXSh0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udGFibGUuYXJyb3dVcH0sc3RhdGljQ2xhc3M6ZS5fX2ljb25DbGFzc30pKTtyZXR1cm4gdChcInRoXCIse2NsYXNzOltlLl9fdGhDbGFzcyx7XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCI6dGhpcy5hdXRvV2lkdGh9XSxvbjplLnNvcnRhYmxlP3tjbGljazpmdW5jdGlvbigpe2kucHJvcHMuc29ydChlKX19Om51bGx9LG4pfX0sVGFibGVIZWFkZXI9e21ldGhvZHM6e2dldFRhYmxlSGVhZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVt0aGlzLmdldFRhYmxlSGVhZGVyUm93KHQpXTtyZXR1cm4gdGhpcy5sb2FkaW5nJiZlLnB1c2godChcInRyXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1wcm9ncmVzcyBhbmltYXRlLWZhZGVcIn0sW3QoXCJ0ZFwiLHthdHRyczp7Y29sc3BhbjpcIjEwMCVcIn19LFt0KFFQcm9ncmVzcyx7cHJvcHM6e2NvbG9yOnRoaXMuY29sb3IsaW5kZXRlcm1pbmF0ZTohMCxoZWlnaHQ6XCIycHhcIn19KV0pXSkpLHQoXCJ0aGVhZFwiLGUpfSxnZXRUYWJsZUhlYWRlclJvdzpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMscz10aGlzLiRzY29wZWRTbG90cy5oZWFkZXIsbj10aGlzLiRzY29wZWRTbG90c1tcImhlYWRlci1jZWxsXCJdO2lmKHMpcmV0dXJuIHModGhpcy5hZGRUYWJsZUhlYWRlclJvd01ldGEoe2hlYWRlcjohMCxjb2xzOnRoaXMuY29tcHV0ZWRDb2xzLHNvcnQ6dGhpcy5zb3J0LGNvbHNNYXA6dGhpcy5jb21wdXRlZENvbHNNYXB9KSk7ZT1uP2Z1bmN0aW9uKHQpe3JldHVybiBuKHtjb2w6dCxjb2xzOmkuY29tcHV0ZWRDb2xzLHNvcnQ6aS5zb3J0LGNvbHNNYXA6aS5jb21wdXRlZENvbHNNYXB9KX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQoUVRoLHtrZXk6ZS5uYW1lLHByb3BzOntwcm9wczp7Y29sOmUsY29sczppLmNvbXB1dGVkQ29scyxzb3J0Omkuc29ydCxjb2xzTWFwOmkuY29tcHV0ZWRDb2xzTWFwfX0sc3R5bGU6ZS5zdHlsZSxjbGFzczplLmNsYXNzZXN9LGUubGFiZWwpfTt2YXIgbz10aGlzLmNvbXB1dGVkQ29scy5tYXAoZSk7cmV0dXJuIHRoaXMuc2luZ2xlU2VsZWN0aW9uJiYhdGhpcy5ncmlkP28udW5zaGlmdCh0KFwidGhcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCJ9LFtcIiBcIl0pKTp0aGlzLm11bHRpcGxlU2VsZWN0aW9uJiZvLnVuc2hpZnQodChcInRoXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb2wtYXV0by13aWR0aFwifSxbdChRQ2hlY2tib3gse3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLHZhbHVlOnRoaXMuc29tZVJvd3NTZWxlY3RlZD9udWxsOnRoaXMuYWxsUm93c1NlbGVjdGVkLGRhcms6dGhpcy5kYXJrfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7aS5zb21lUm93c1NlbGVjdGVkJiYodD0hMSksaS5fX3VwZGF0ZVNlbGVjdGlvbihpLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbaS5yb3dLZXldfSksaS5jb21wdXRlZFJvd3MsdCl9fX0pXSkpLHQoXCJ0clwiLG8pfSxhZGRUYWJsZUhlYWRlclJvd01ldGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwic2VsZWN0ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuc29tZVJvd3NTZWxlY3RlZD9cInNvbWVcIjplLmFsbFJvd3NTZWxlY3RlZH0sc2V0OmZ1bmN0aW9uKHQpe2Uuc29tZVJvd3NTZWxlY3RlZCYmKHQ9ITEpLGUuX191cGRhdGVTZWxlY3Rpb24oZS5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0W2Uucm93S2V5XX0pLGUuY29tcHV0ZWRSb3dzLHQpfX0pLHQucGFydGlhbFNlbGVjdGVkPXRoaXMuc29tZVJvd3NTZWxlY3RlZCx0Lm11bHRpcGxlU2VsZWN0PSEwKSx0fX19LFRhYmxlQm9keT17bWV0aG9kczp7Z2V0VGFibGVCb2R5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLiRzY29wZWRTbG90cy5ib2R5LHM9dGhpcy4kc2NvcGVkU2xvdHNbXCJib2R5LWNlbGxcIl0sbj10aGlzLiRzY29wZWRTbG90c1tcInRvcC1yb3dcIl0sbz10aGlzLiRzY29wZWRTbG90c1tcImJvdHRvbS1yb3dcIl0scj1bXTtyZXR1cm4gcj1pP3RoaXMuY29tcHV0ZWRSb3dzLm1hcChmdW5jdGlvbih0KXt2YXIgcz10W2Uucm93S2V5XSxuPWUuaXNSb3dTZWxlY3RlZChzKTtyZXR1cm4gaShlLmFkZEJvZHlSb3dNZXRhKHtrZXk6cyxyb3c6dCxjb2xzOmUuY29tcHV0ZWRDb2xzLGNvbHNNYXA6ZS5jb21wdXRlZENvbHNNYXAsX190ckNsYXNzOm4/XCJzZWxlY3RlZFwiOlwiXCJ9KSl9KTp0aGlzLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24oaSl7dmFyIG49aVtlLnJvd0tleV0sbz1lLmlzUm93U2VsZWN0ZWQobikscj1zP2UuY29tcHV0ZWRDb2xzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcyhlLmFkZEJvZHlDZWxsTWV0YURhdGEoe3JvdzppLGNvbDp0fSkpfSk6ZS5jb21wdXRlZENvbHMubWFwKGZ1bmN0aW9uKHMpe3ZhciBuPWUuJHNjb3BlZFNsb3RzW1wiYm9keS1jZWxsLVwiK3MubmFtZV07cmV0dXJuIG4/bihlLmFkZEJvZHlDZWxsTWV0YURhdGEoe3JvdzppLGNvbDpzfSkpOnQoXCJ0ZFwiLHtzdGF0aWNDbGFzczpzLl9fdGRDbGFzcyxzdHlsZTpzLnN0eWxlLGNsYXNzOnMuY2xhc3Nlc30sZS5nZXRDZWxsVmFsdWUocyxpKSl9KTtyZXR1cm4gZS5oYXNTZWxlY3Rpb25Nb2RlJiZyLnVuc2hpZnQodChcInRkXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb2wtYXV0by13aWR0aFwifSxbdChRQ2hlY2tib3gse3Byb3BzOnt2YWx1ZTpvLGNvbG9yOmUuY29sb3IsZGFyazplLmRhcmt9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLl9fdXBkYXRlU2VsZWN0aW9uKFtuXSxbaV0sdCl9fX0pXSkpLHQoXCJ0clwiLHtrZXk6bixjbGFzczp7c2VsZWN0ZWQ6b319LHIpfSksbiYmci51bnNoaWZ0KG4oe2NvbHM6dGhpcy5jb21wdXRlZENvbHN9KSksbyYmci5wdXNoKG8oe2NvbHM6dGhpcy5jb21wdXRlZENvbHN9KSksdChcInRib2R5XCIscil9LGFkZEJvZHlSb3dNZXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaGFzU2VsZWN0aW9uTW9kZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJzZWxlY3RlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pc1Jvd1NlbGVjdGVkKHQua2V5KX0sc2V0OmZ1bmN0aW9uKGkpe2UuX191cGRhdGVTZWxlY3Rpb24oW3Qua2V5XSxbdC5yb3ddLGkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiZXhwYW5kXCIse2dldDpmdW5jdGlvbigpe3JldHVybiEwPT09ZS5yb3dzRXhwYW5kZWRbdC5rZXldfSxzZXQ6ZnVuY3Rpb24oaSl7ZS4kc2V0KGUucm93c0V4cGFuZGVkLHQua2V5LGkpfX0pLHQuY29scz10LmNvbHMubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPU9iamVjdC5hc3NpZ24oe30saSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Q2VsbFZhbHVlKGksdC5yb3cpfX0pLHN9KSx0fSxhZGRCb2R5Q2VsbE1ldGFEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Q2VsbFZhbHVlKHQuY29sLHQucm93KX19KSx0fSxnZXRDZWxsVmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmZpZWxkP3QuZmllbGQoZSk6ZVt0LmZpZWxkXTtyZXR1cm4gdC5mb3JtYXQ/dC5mb3JtYXQoaSk6aX19fSxCb3R0b209e2NvbXB1dGVkOntuYXZJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuJHEuaWNvbi50YWJsZS5wcmV2UGFnZSx0aGlzLiRxLmljb24udGFibGUubmV4dFBhZ2VdO3JldHVybiB0aGlzLiRxLmkxOG4ucnRsP3QucmV2ZXJzZSgpOnR9fSxtZXRob2RzOntnZXRCb3R0b206ZnVuY3Rpb24odCl7aWYoIXRoaXMuaGlkZUJvdHRvbSl7aWYodGhpcy5ub3RoaW5nVG9EaXNwbGF5KXt2YXIgZT10aGlzLmZpbHRlcj90aGlzLm5vUmVzdWx0c0xhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUubm9SZXN1bHRzOnRoaXMubG9hZGluZz90aGlzLmxvYWRpbmdMYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLmxvYWRpbmc6dGhpcy5ub0RhdGFMYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLm5vRGF0YTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtYm90dG9tIHJvdyBpdGVtcy1jZW50ZXIgcS10YWJsZS1ub2RhdGFcIn0sW3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi50YWJsZS53YXJuaW5nfX0pLGVdKX12YXIgaT10aGlzLiRzY29wZWRTbG90cy5ib3R0b207cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWJvdHRvbSByb3cgaXRlbXMtY2VudGVyXCIsY2xhc3M6aT9udWxsOlwianVzdGlmeS1lbmRcIn0saT9baSh0aGlzLm1hcmdpbmFsc1Byb3BzKV06dGhpcy5nZXRQYWdpbmF0aW9uUm93KHQpKX19LGdldFBhZ2luYXRpb25Sb3c6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnJvd3NQZXJQYWdlLHM9dGhpcy5wYWdpbmF0aW9uTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5wYWdpbmF0aW9uLG49dGhpcy4kc2NvcGVkU2xvdHMucGFnaW5hdGlvbjtyZXR1cm5bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbdChcImRpdlwiLFt0aGlzLmhhc1NlbGVjdGlvbk1vZGUmJnRoaXMucm93c1NlbGVjdGVkTnVtYmVyPjA/KHRoaXMuc2VsZWN0ZWRSb3dzTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5zZWxlY3RlZFJlY29yZHMpKHRoaXMucm93c1NlbGVjdGVkTnVtYmVyKTpcIlwiXSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1zZXBhcmF0b3IgY29sXCJ9KSx0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGg+MSYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWJvdHRvbS1pdGVtXCJ9LFt0aGlzLnJvd3NQZXJQYWdlTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5yZWNvcmRzUGVyUGFnZV0pLHQoUVNlbGVjdCx7c3RhdGljQ2xhc3M6XCJpbmxpbmUgcS10YWJsZS1ib3R0b20taXRlbVwiLHByb3BzOntjb2xvcjp0aGlzLmNvbG9yLHZhbHVlOmksb3B0aW9uczp0aGlzLmNvbXB1dGVkUm93c1BlclBhZ2VPcHRpb25zLGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLnNldFBhZ2luYXRpb24oe3BhZ2U6MSxyb3dzUGVyUGFnZTp0fSl9fX0pXSl8fHZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb250cm9sXCJ9LFtuP24odGhpcy5tYXJnaW5hbHNQcm9wcyk6W3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1ib3R0b20taXRlbVwifSxbaT9zKHRoaXMuZmlyc3RSb3dJbmRleCsxLE1hdGgubWluKHRoaXMubGFzdFJvd0luZGV4LHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyKSx0aGlzLmNvbXB1dGVkUm93c051bWJlcik6cygxLHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyLHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyKV0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMuY29sb3Iscm91bmQ6ITAsaWNvbjp0aGlzLm5hdkljb25bMF0sZGVuc2U6ITAsZmxhdDohMCxkaXNhYmxlOnRoaXMuaXNGaXJzdFBhZ2V9LG9uOntjbGljazp0aGlzLnByZXZQYWdlfX0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMuY29sb3Iscm91bmQ6ITAsaWNvbjp0aGlzLm5hdkljb25bMV0sZGVuc2U6ITAsZmxhdDohMCxkaXNhYmxlOnRoaXMuaXNMYXN0UGFnZX0sb246e2NsaWNrOnRoaXMubmV4dFBhZ2V9fSldXSldfX19O2Z1bmN0aW9uIHNvcnREYXRlKHQsZSl7cmV0dXJuIG5ldyBEYXRlKHQpLW5ldyBEYXRlKGUpfXZhciBTb3J0PXtwcm9wczp7c29ydE1ldGhvZDp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLmNvbHVtbnMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZX0pO2lmKG51bGw9PT1zfHx2b2lkIDA9PT1zLmZpZWxkKXJldHVybiB0O3ZhciBuPWk/LTE6MSxvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZmllbGQ/ZnVuY3Rpb24odCl7cmV0dXJuIHMuZmllbGQodCl9OmZ1bmN0aW9uKHQpe3JldHVybiB0W3MuZmllbGRdfTtyZXR1cm4gdC5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIGkscj1vKHQpLGE9byhlKTtyZXR1cm4gbnVsbD09PXJ8fHZvaWQgMD09PXI/LTEqbjpudWxsPT09YXx8dm9pZCAwPT09YT8xKm46cy5zb3J0P3Muc29ydChyLGEpKm46aXNOdW1iZXIocikmJmlzTnVtYmVyKGEpPyhyLWEpKm46aXNEYXRlKHIpJiZpc0RhdGUoYSk/c29ydERhdGUocixhKSpuOlwiYm9vbGVhblwiPT10eXBlb2YgciYmXCJib29sZWFuXCI9PXR5cGVvZiBhPyh0LWUpKm46KHI9KGk9W3IsYV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0K1wiXCIpLnRvTG93ZXJDYXNlKCl9KSlbMF0pPChhPWlbMV0pPy0xKm46cj09PWE/MDpufSl9fX0sY29tcHV0ZWQ6e2NvbHVtblRvU29ydDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnNvcnRCeTtpZih0KXJldHVybiB0aGlzLmNvbHVtbnMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dH0pfHxudWxsfX0sbWV0aG9kczp7c29ydDpmdW5jdGlvbih0KXt0PT09T2JqZWN0KHQpJiYodD10Lm5hbWUpO3ZhciBlPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGk9ZS5zb3J0Qnkscz1lLmRlc2NlbmRpbmc7aSE9PXQ/KGk9dCxzPSExKTp0aGlzLmJpbmFyeVN0YXRlU29ydD9zPSFzOnM/aT1udWxsOnM9ITAsdGhpcy5zZXRQYWdpbmF0aW9uKHtzb3J0Qnk6aSxkZXNjZW5kaW5nOnMscGFnZToxfSl9fX0sRmlsdGVyPXtwcm9wczp7ZmlsdGVyOltTdHJpbmcsT2JqZWN0XSxmaWx0ZXJNZXRob2Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbih0LGUsaSxzKXt2b2lkIDA9PT1pJiYoaT10aGlzLmNvbXB1dGVkQ29scyksdm9pZCAwPT09cyYmKHM9dGhpcy5nZXRDZWxsVmFsdWUpO3ZhciBuPWU/ZS50b0xvd2VyQ2FzZSgpOlwiXCI7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBpLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT0ocyhlLHQpK1wiXCIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihuKX0pfSl9fX0sd2F0Y2g6e2ZpbHRlcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LnNldFBhZ2luYXRpb24oe3BhZ2U6MX0sITApfSl9fX07ZnVuY3Rpb24gc2FtZVBhZ2luYXRpb24odCxlKXtmb3IodmFyIGkgaW4gZSlpZihlW2ldIT09dFtpXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmaXhQYWdpbmF0aW9uKHQpe3JldHVybiB0LnBhZ2U8MSYmKHQucGFnZT0xKSx2b2lkIDAhPT10LnJvd3NQZXJQYWdlJiZ0LnJvd3NQZXJQYWdlPDEmJih0LnJvd3NQZXJQYWdlPTApLHR9dmFyIFBhZ2luYXRpb249e3Byb3BzOntwYWdpbmF0aW9uOk9iamVjdCxyb3dzUGVyUGFnZU9wdGlvbnM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblszLDUsNywxMCwxNSwyMCwyNSw1MCwwXX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lubmVyUGFnaW5hdGlvbjp7c29ydEJ5Om51bGwsZGVzY2VuZGluZzohMSxwYWdlOjEscm93c1BlclBhZ2U6NX19fSxjb21wdXRlZDp7Y29tcHV0ZWRQYWdpbmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZpeFBhZ2luYXRpb24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmlubmVyUGFnaW5hdGlvbix0aGlzLnBhZ2luYXRpb24pKX0sZmlyc3RSb3dJbmRleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uO3JldHVybih0LnBhZ2UtMSkqdC5yb3dzUGVyUGFnZX0sbGFzdFJvd0luZGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb21wdXRlZFBhZ2luYXRpb247cmV0dXJuIHQucGFnZSp0LnJvd3NQZXJQYWdlfSxpc0ZpcnN0UGFnZTpmdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucGFnZX0scGFnZXNOdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLmNlaWwodGhpcy5jb21wdXRlZFJvd3NOdW1iZXIvdGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucm93c1BlclBhZ2UpKX0saXNMYXN0UGFnZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXN0Um93SW5kZXh8fHRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnBhZ2U+PXRoaXMucGFnZXNOdW1iZXJ9LGNvbXB1dGVkUm93c1BlclBhZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybntsYWJlbDowPT09ZT90LiRxLmkxOG4udGFibGUuYWxsUm93czpcIlwiK2UsdmFsdWU6ZX19KX19LHdhdGNoOntwYWdlc051bWJlcjpmdW5jdGlvbih0LGUpe2lmKHQhPT1lKXt2YXIgaT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5wYWdlO3QmJiFpP3RoaXMuc2V0UGFnaW5hdGlvbih7cGFnZToxfSk6dDxpJiZ0aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6dH0pfX19LG1ldGhvZHM6e19fc2VuZFNlcnZlclJlcXVlc3Q6ZnVuY3Rpb24odCl7dGhpcy5yZXF1ZXN0U2VydmVySW50ZXJhY3Rpb24oe3BhZ2luYXRpb246dCxmaWx0ZXI6dGhpcy5maWx0ZXJ9KX0sc2V0UGFnaW5hdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPWZpeFBhZ2luYXRpb24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmNvbXB1dGVkUGFnaW5hdGlvbix0KSk7c2FtZVBhZ2luYXRpb24odGhpcy5jb21wdXRlZFBhZ2luYXRpb24saSk/dGhpcy5pc1NlcnZlclNpZGUmJmUmJnRoaXMuX19zZW5kU2VydmVyUmVxdWVzdChpKTp0aGlzLmlzU2VydmVyU2lkZT90aGlzLl9fc2VuZFNlcnZlclJlcXVlc3QoaSk6dGhpcy5wYWdpbmF0aW9uP3RoaXMuJGVtaXQoXCJ1cGRhdGU6cGFnaW5hdGlvblwiLGkpOnRoaXMuaW5uZXJQYWdpbmF0aW9uPWl9LHByZXZQYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucGFnZTt0PjEmJnRoaXMuc2V0UGFnaW5hdGlvbih7cGFnZTp0LTF9KX0sbmV4dFBhZ2U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbixlPXQucGFnZSxpPXQucm93c1BlclBhZ2U7dGhpcy5sYXN0Um93SW5kZXg+MCYmZSppPHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyJiZ0aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6ZSsxfSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcInVwZGF0ZTpwYWdpbmF0aW9uXCIsT2JqZWN0LmFzc2lnbih7fSx0aGlzLmNvbXB1dGVkUGFnaW5hdGlvbikpfX0sUm93U2VsZWN0aW9uPXtwcm9wczp7c2VsZWN0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0Olwibm9uZVwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJzaW5nbGVcIixcIm11bHRpcGxlXCIsXCJub25lXCJdLmluY2x1ZGVzKHQpfX0sc2VsZWN0ZWQ6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX19LGNvbXB1dGVkOntzZWxlY3RlZEtleXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307cmV0dXJuIHRoaXMuc2VsZWN0ZWQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3Qucm93S2V5XX0pLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT0hMH0pLGV9LGhhc1NlbGVjdGlvbk1vZGU6ZnVuY3Rpb24oKXtyZXR1cm5cIm5vbmVcIiE9PXRoaXMuc2VsZWN0aW9ufSxzaW5nbGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm5cInNpbmdsZVwiPT09dGhpcy5zZWxlY3Rpb259LG11bHRpcGxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuXCJtdWx0aXBsZVwiPT09dGhpcy5zZWxlY3Rpb259LGFsbFJvd3NTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5tdWx0aXBsZVNlbGVjdGlvbilyZXR1cm4gdGhpcy5jb21wdXRlZFJvd3MubGVuZ3RoPjAmJnRoaXMuY29tcHV0ZWRSb3dzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiEwPT09dC5zZWxlY3RlZEtleXNbZVt0LnJvd0tleV1dfSl9LHNvbWVSb3dzU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24pcmV0dXJuIXRoaXMuYWxsUm93c1NlbGVjdGVkJiZ0aGlzLmNvbXB1dGVkUm93cy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiEwPT09dC5zZWxlY3RlZEtleXNbZVt0LnJvd0tleV1dfSl9LHJvd3NTZWxlY3RlZE51bWJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkLmxlbmd0aH19LG1ldGhvZHM6e2lzUm93U2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10aGlzLnNlbGVjdGVkS2V5c1t0XX0sY2xlYXJTZWxlY3Rpb246ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsW10pfSxfX3VwZGF0ZVNlbGVjdGlvbjpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczt0aGlzLnNpbmdsZVNlbGVjdGlvbj90aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsaT9lOltdKTp0aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsaT90aGlzLnNlbGVjdGVkLmNvbmNhdChlKTp0aGlzLnNlbGVjdGVkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hdC5pbmNsdWRlcyhlW3Mucm93S2V5XSl9KSl9fX0sQ29sdW1uU2VsZWN0aW9uPXtwcm9wczp7dmlzaWJsZUNvbHVtbnM6QXJyYXl9LGNvbXB1dGVkOntjb21wdXRlZENvbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24saT1lLnNvcnRCeSxzPWUuZGVzY2VuZGluZztyZXR1cm4odGhpcy52aXNpYmxlQ29sdW1ucz90aGlzLmNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcXVpcmVkfHx0LnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGUubmFtZSl9KTp0aGlzLmNvbHVtbnMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlnbj10LmFsaWdufHxcInJpZ2h0XCIsdC5fX2ljb25DbGFzcz1cInEtdGFibGUtc29ydC1pY29uIHEtdGFibGUtc29ydC1pY29uLVwiK3QuYWxpZ24sdC5fX3RoQ2xhc3M9XCJ0ZXh0LVwiK3QuYWxpZ24rKHQuc29ydGFibGU/XCIgc29ydGFibGVcIjpcIlwiKSsodC5uYW1lPT09aT9cIiBzb3J0ZWQgXCIrKHM/XCJzb3J0LWRlc2NcIjpcIlwiKTpcIlwiKSx0Ll9fdGRDbGFzcz1cInRleHQtXCIrdC5hbGlnbix0fSl9LGNvbXB1dGVkQ29sc01hcDpmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmNvbXB1dGVkQ29scy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZS5uYW1lXT1lfSksdH19fSxFeHBhbmQ9e2RhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cm93c0V4cGFuZGVkOnt9fX19LFFUYWJsZT17bmFtZTpcIlFUYWJsZVwiLG1peGluczpbRnVsbHNjcmVlbk1peGluLFRvcCxUYWJsZUhlYWRlcixUYWJsZUJvZHksQm90dG9tLFNvcnQsRmlsdGVyLFBhZ2luYXRpb24sUm93U2VsZWN0aW9uLENvbHVtblNlbGVjdGlvbixFeHBhbmRdLHByb3BzOntkYXRhOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHJvd0tleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImlkXCJ9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleS04XCJ9LGdyaWQ6Qm9vbGVhbixkZW5zZTpCb29sZWFuLGNvbHVtbnM6QXJyYXksbG9hZGluZzpCb29sZWFuLHRpdGxlOlN0cmluZyxoaWRlSGVhZGVyOkJvb2xlYW4saGlkZUJvdHRvbTpCb29sZWFuLGRhcms6Qm9vbGVhbixzZXBhcmF0b3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJob3Jpem9udGFsXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImhvcml6b250YWxcIixcInZlcnRpY2FsXCIsXCJjZWxsXCIsXCJub25lXCJdLmluY2x1ZGVzKHQpfX0sYmluYXJ5U3RhdGVTb3J0OkJvb2xlYW4sbm9EYXRhTGFiZWw6U3RyaW5nLG5vUmVzdWx0c0xhYmVsOlN0cmluZyxsb2FkaW5nTGFiZWw6U3RyaW5nLHNlbGVjdGVkUm93c0xhYmVsOkZ1bmN0aW9uLHJvd3NQZXJQYWdlTGFiZWw6U3RyaW5nLHBhZ2luYXRpb25MYWJlbDpGdW5jdGlvbix0YWJsZVN0eWxlOnt0eXBlOltTdHJpbmcsQXJyYXksT2JqZWN0XSxkZWZhdWx0OlwiXCJ9LHRhYmxlQ2xhc3M6e3R5cGU6W1N0cmluZyxBcnJheSxPYmplY3RdLGRlZmF1bHQ6XCJcIn19LGNvbXB1dGVkOntjb21wdXRlZERhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEuc2xpY2UoKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX2luZGV4PWUsdH0pO2lmKDA9PT10Lmxlbmd0aClyZXR1cm57cm93c051bWJlcjowLHJvd3M6W119O2lmKHRoaXMuaXNTZXJ2ZXJTaWRlKXJldHVybntyb3dzOnR9O3ZhciBlPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGk9ZS5zb3J0Qnkscz1lLmRlc2NlbmRpbmcsbj1lLnJvd3NQZXJQYWdlO3RoaXMuZmlsdGVyJiYodD10aGlzLmZpbHRlck1ldGhvZCh0LHRoaXMuZmlsdGVyLHRoaXMuY29tcHV0ZWRDb2xzLHRoaXMuZ2V0Q2VsbFZhbHVlKSksdGhpcy5jb2x1bW5Ub1NvcnQmJih0PXRoaXMuc29ydE1ldGhvZCh0LGkscykpO3ZhciBvPXQubGVuZ3RoO3JldHVybiBuJiYodD10LnNsaWNlKHRoaXMuZmlyc3RSb3dJbmRleCx0aGlzLmxhc3RSb3dJbmRleCkpLHtyb3dzTnVtYmVyOm8scm93czp0fX0sY29tcHV0ZWRSb3dzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcHV0ZWREYXRhLnJvd3N9LGNvbXB1dGVkUm93c051bWJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzU2VydmVyU2lkZT90aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5yb3dzTnVtYmVyfHwwOnRoaXMuY29tcHV0ZWREYXRhLnJvd3NOdW1iZXJ9LG5vdGhpbmdUb0Rpc3BsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuY29tcHV0ZWRSb3dzLmxlbmd0aH0saXNTZXJ2ZXJTaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnJvd3NOdW1iZXJ9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7Y2xhc3M6e1wicS10YWJsZS1ncmlkXCI6dGhpcy5ncmlkLFwicS10YWJsZS1jb250YWluZXJcIjohMCxcInEtdGFibGUtZGFya1wiOnRoaXMuZGFyayxcInEtdGFibGUtZGVuc2VcIjp0aGlzLmRlbnNlLGZ1bGxzY3JlZW46dGhpcy5pbkZ1bGxzY3JlZW4sc2Nyb2xsOnRoaXMuaW5GdWxsc2NyZWVufX0sW3RoaXMuZ2V0VG9wKHQpLHRoaXMuZ2V0Qm9keSh0KSx0aGlzLmdldEJvdHRvbSh0KV0pfSxtZXRob2RzOntyZXF1ZXN0U2VydmVySW50ZXJhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2UuJGVtaXQoXCJyZXF1ZXN0XCIse3BhZ2luYXRpb246dC5wYWdpbmF0aW9ufHxlLmNvbXB1dGVkUGFnaW5hdGlvbixmaWx0ZXI6dC5maWx0ZXJ8fGUuZmlsdGVyLGdldENlbGxWYWx1ZTplLmdldENlbGxWYWx1ZX0pfSl9LGdldEJvZHk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPSF0aGlzLmhpZGVIZWFkZXI7aWYodGhpcy5ncmlkKXt2YXIgcz10aGlzLiRzY29wZWRTbG90cy5pdGVtO2lmKHZvaWQgMCE9PXMpcmV0dXJuW2kmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLW1pZGRsZSBzY3JvbGxcIn0sW3QoXCJ0YWJsZVwiLHtzdGF0aWNDbGFzczpcInEtdGFibGVcIisodGhpcy5kYXJrP1wiIHEtdGFibGUtZGFya1wiOlwiXCIpfSxbdGhpcy5nZXRUYWJsZUhlYWRlcih0KV0pXSl8fG51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvd1wifSx0aGlzLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24odCl7dmFyIGk9dFtlLnJvd0tleV0sbj1lLmlzUm93U2VsZWN0ZWQoaSk7cmV0dXJuIHMoZS5hZGRCb2R5Um93TWV0YSh7a2V5Omkscm93OnQsY29sczplLmNvbXB1dGVkQ29scyxjb2xzTWFwOmUuY29tcHV0ZWRDb2xzTWFwLF9fdHJDbGFzczpuP1wic2VsZWN0ZWRcIjpcIlwifSkpfSkpXX1yZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtbWlkZGxlIHNjcm9sbFwiLGNsYXNzOnRoaXMudGFibGVDbGFzcyxzdHlsZTp0aGlzLnRhYmxlU3R5bGV9LFt0KFwidGFibGVcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlIHEtdGFibGUtXCIrdGhpcy5zZXBhcmF0b3IrXCItc2VwYXJhdG9yXCIrKHRoaXMuZGFyaz9cIiBxLXRhYmxlLWRhcmtcIjpcIlwiKX0sW2kmJnRoaXMuZ2V0VGFibGVIZWFkZXIodCl8fG51bGwsdGhpcy5nZXRUYWJsZUJvZHkodCldKV0pfX19LFFUcj17bmFtZTpcIlFUclwiLHByb3BzOntwcm9wczpPYmplY3R9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInRyXCIsIXRoaXMucHJvcHN8fHRoaXMucHJvcHMuaGVhZGVyP3t9OntjbGFzczp0aGlzLnByb3BzLl9fdHJDbGFzc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRVGQ9e25hbWU6XCJRVGRcIixwcm9wczp7cHJvcHM6T2JqZWN0LGF1dG9XaWR0aDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJvcHMpcmV0dXJuIHQoXCJ0ZFwiLHtjbGFzczp7XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCI6dGhpcy5hdXRvV2lkdGh9fSx0aGlzLiRzbG90cy5kZWZhdWx0KTt2YXIgZSxpPXRoaXMuJHZub2RlLmtleTtpZihpKXtpZighKGU9dGhpcy5wcm9wcy5jb2xzTWFwW2ldKSlyZXR1cm59ZWxzZSBlPXRoaXMucHJvcHMuY29sO3JldHVybiB0KFwidGRcIix7Y2xhc3M6W2UuX190ZENsYXNzLHtcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIjp0aGlzLmF1dG9XaWR0aH1dfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFUYWJsZUNvbHVtbnM9e25hbWU6XCJRVGFibGVDb2x1bW5zXCIscHJvcHM6e3ZhbHVlOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfSxsYWJlbDpTdHJpbmcsY29sdW1uczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sY29sb3I6U3RyaW5nLGRhcms6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NvbXB1dGVkT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnJlcXVpcmVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt2YWx1ZTp0Lm5hbWUsbGFiZWw6dC5sYWJlbH19KX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFFTZWxlY3Qse3Byb3BzOnttdWx0aXBsZTohMCx0b2dnbGU6ITAsdmFsdWU6dGhpcy52YWx1ZSxvcHRpb25zOnRoaXMuY29tcHV0ZWRPcHRpb25zLGRpc3BsYXlWYWx1ZTp0aGlzLmxhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUuY29sdW1ucyxjb2xvcjp0aGlzLmNvbG9yLGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLiRlbWl0KFwiaW5wdXRcIix0KX0sY2hhbmdlOmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJjaGFuZ2VcIix0KX19fSl9fSxRVGltZWxpbmU9e25hbWU6XCJRVGltZWxpbmVcIixwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue19fdGltZWxpbmU6dGhpc319LHByb3BzOntjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0scmVzcG9uc2l2ZTpCb29sZWFuLG5vSG92ZXI6Qm9vbGVhbixkYXJrOkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInVsXCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZVwiLGNsYXNzOntcInEtdGltZWxpbmUtZGFya1wiOnRoaXMuZGFyayxcInEtdGltZWxpbmUtcmVzcG9uc2l2ZVwiOnRoaXMucmVzcG9uc2l2ZSxcInEtdGltZWxpbmUtaG92ZXJcIjohdGhpcy5ub0hvdmVyfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRVGltZWxpbmVFbnRyeT17bmFtZTpcIlFUaW1lbGluZUVudHJ5XCIsaW5qZWN0OntfX3RpbWVsaW5lOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFUaW1lbGluZUVudHJ5IG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFUaW1lbGluZVwiKX19fSxwcm9wczp7aGVhZGluZzpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImgzXCJ9LHNpZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJyaWdodFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJsZWZ0XCIsXCJyaWdodFwiXS5pbmNsdWRlcyh0KX19LGljb246U3RyaW5nLGNvbG9yOlN0cmluZyx0aXRsZTpTdHJpbmcsc3VidGl0bGU6U3RyaW5nfSxjb21wdXRlZDp7Y29sb3JDbGFzczpmdW5jdGlvbigpe3JldHVyblwidGV4dC1cIisodGhpcy5jb2xvcnx8dGhpcy5fX3RpbWVsaW5lLmNvbG9yKX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcInEtdGltZWxpbmUtZW50cnktXCIrKFwibGVmdFwiPT09dGhpcy5zaWRlP1wibGVmdFwiOlwicmlnaHRcIiksdGhpcy5pY29uP1wicS10aW1lbGluZS1lbnRyeS13aXRoLWljb25cIjpcIlwiXX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oZWFkaW5nP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLWhlYWRpbmdcIn0sW3QoXCJkaXZcIiksdChcImRpdlwiKSx0KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtaGVhZGluZy10aXRsZVwifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pOnQoXCJsaVwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtZW50cnlcIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0aGlzLiRzbG90cy5zdWJ0aXRsZXx8dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtc3VidGl0bGVcIn0sW3QoXCJzcGFuXCIsdGhpcy5zdWJ0aXRsZSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZS1kb3RcIixjbGFzczp0aGlzLmNvbG9yQ2xhc3N9LFt0aGlzLmljb24/dChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy5pY29ufX0pOm51bGxdKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZS1jb250ZW50XCJ9LCh0aGlzLiRzbG90cy50aXRsZXx8W3QoXCJoNlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtdGl0bGVcIn0sW3RoaXMudGl0bGVdKV0pLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KSldKX19LFFUb29sYmFyPXtuYW1lOlwiUVRvb2xiYXJcIixwcm9wczp7Y29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRleHRDb2xvcjpTdHJpbmcsaW52ZXJ0ZWQ6Qm9vbGVhbixnbG9zc3k6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLXRvb2xiYXItXCIrKHRoaXMuaW52ZXJ0ZWQ/XCJpbnZlcnRlZFwiOlwibm9ybWFsXCIpXTtyZXR1cm4gdGhpcy5nbG9zc3kmJnQucHVzaChcImdsb3NzeVwiKSx0aGlzLmludmVydGVkP3QucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHx0aGlzLmNvbG9yKSk6KHQucHVzaChcImJnLVwiK3RoaXMuY29sb3IpLHQucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHxcIndoaXRlXCIpKSksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbGJhciByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXIgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVRvb2xiYXJUaXRsZT17bmFtZTpcIlFUb29sYmFyVGl0bGVcIixwcm9wczp7c2hyaW5rOkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbGJhci10aXRsZVwiLGNsYXNzOnRoaXMuc2hyaW5rP1wiY29sLWF1dG9cIjpudWxsfSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLiRzbG90cy5zdWJ0aXRsZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10b29sYmFyLXN1YnRpdGxlXCJ9LHRoaXMuJHNsb3RzLnN1YnRpdGxlKTpudWxsXSl9fSxRVHJlZT17bmFtZTpcIlFUcmVlXCIsZGlyZWN0aXZlczp7UmlwcGxlOlJpcHBsZX0scHJvcHM6e25vZGVzOkFycmF5LG5vZGVLZXk6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxsYWJlbEtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImxhYmVsXCJ9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleVwifSxjb250cm9sQ29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsZGFyazpCb29sZWFuLGljb246U3RyaW5nLHRpY2tTdHJhdGVneTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm5vbmVcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibm9uZVwiLFwic3RyaWN0XCIsXCJsZWFmXCIsXCJsZWFmLWZpbHRlcmVkXCJdLmluY2x1ZGVzKHQpfX0sdGlja2VkOkFycmF5LGV4cGFuZGVkOkFycmF5LHNlbGVjdGVkOnt9LGRlZmF1bHRFeHBhbmRBbGw6Qm9vbGVhbixhY2NvcmRpb246Qm9vbGVhbixmaWx0ZXI6U3RyaW5nLGZpbHRlck1ldGhvZDp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0W3RoaXMubGFiZWxLZXldJiZ0W3RoaXMubGFiZWxLZXldLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpKT4tMX19LGR1cmF0aW9uOk51bWJlcixub05vZGVzTGFiZWw6U3RyaW5nLG5vUmVzdWx0c0xhYmVsOlN0cmluZ30sY29tcHV0ZWQ6e2hhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vUmlwcGxlfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW1widGV4dC1cIit0aGlzLmNvbG9yLHtcInEtdHJlZS1kYXJrXCI6dGhpcy5kYXJrfV19LGhhc1NlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnNlbGVjdGVkfSxjb21wdXRlZEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29ufHx0aGlzLiRxLmljb24udHJlZS5pY29ufSxjb21wdXRlZENvbnRyb2xDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2xDb2xvcnx8dGhpcy5jb2xvcn0sY29udGVudENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8KHRoaXMuZGFyaz9cIndoaXRlXCI6XCJibGFja1wiKSl9LG1ldGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e30saT1mdW5jdGlvbihzLG4pe3ZhciBvPXMudGlja1N0cmF0ZWd5fHwobj9uLnRpY2tTdHJhdGVneTp0LnRpY2tTdHJhdGVneSkscj1zW3Qubm9kZUtleV0sYT1zLmNoaWxkcmVuJiZzLmNoaWxkcmVuLmxlbmd0aD4wLGw9IWEsYz0hcy5kaXNhYmxlZCYmdC5oYXNTZWxlY3Rpb24mJiExIT09cy5zZWxlY3RhYmxlLGg9IXMuZGlzYWJsZWQmJiExIT09cy5leHBhbmRhYmxlLHU9XCJub25lXCIhPT1vLGQ9XCJzdHJpY3RcIj09PW8scD1cImxlYWYtZmlsdGVyZWRcIj09PW8sZj1cImxlYWZcIj09PW98fFwibGVhZi1maWx0ZXJlZFwiPT09byxtPSFzLmRpc2FibGVkJiYhMSE9PXMudGlja2FibGU7ZiYmbSYmbiYmIW4udGlja2FibGUmJihtPSExKTt2YXIgZz1zLmxhenk7ZyYmdC5sYXp5W3JdJiYoZz10Lmxhenlbcl0pO3ZhciB2PXtrZXk6cixwYXJlbnQ6bixpc1BhcmVudDphLGlzTGVhZjpsLGxhenk6ZyxkaXNhYmxlZDpzLmRpc2FibGVkLGxpbms6Y3x8aCYmKGF8fCEwPT09ZyksY2hpbGRyZW46W10sbWF0Y2hlc0ZpbHRlcjohdC5maWx0ZXJ8fHQuZmlsdGVyTWV0aG9kKHMsdC5maWx0ZXIpLHNlbGVjdGVkOnI9PT10LnNlbGVjdGVkJiZjLHNlbGVjdGFibGU6YyxleHBhbmRlZDohIWEmJnQuaW5uZXJFeHBhbmRlZC5pbmNsdWRlcyhyKSxleHBhbmRhYmxlOmgsbm9UaWNrOnMubm9UaWNrfHwhZCYmZyYmXCJsb2FkZWRcIiE9PWcsdGlja2FibGU6bSx0aWNrU3RyYXRlZ3k6byxoYXNUaWNraW5nOnUsc3RyaWN0VGlja2luZzpkLGxlYWZGaWx0ZXJlZFRpY2tpbmc6cCxsZWFmVGlja2luZzpmLHRpY2tlZDpkP3QuaW5uZXJUaWNrZWQuaW5jbHVkZXMocik6ISFsJiZ0LmlubmVyVGlja2VkLmluY2x1ZGVzKHIpfTtpZihlW3JdPXYsYSYmKHYuY2hpbGRyZW49cy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGkodCx2KX0pLHQuZmlsdGVyJiYodi5tYXRjaGVzRmlsdGVyfHwodi5tYXRjaGVzRmlsdGVyPXYuY2hpbGRyZW4uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaGVzRmlsdGVyfSkpLHYubWF0Y2hlc0ZpbHRlciYmIXYubm9UaWNrJiYhdi5kaXNhYmxlZCYmdi50aWNrYWJsZSYmcCYmdi5jaGlsZHJlbi5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4hdC5tYXRjaGVzRmlsdGVyfHx0Lm5vVGlja3x8IXQudGlja2FibGV9KSYmKHYudGlja2FibGU9ITEpKSx2Lm1hdGNoZXNGaWx0ZXImJih2Lm5vVGlja3x8ZHx8IXYuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9UaWNrfSl8fCh2Lm5vVGljaz0hMCksZiYmKHYudGlja2VkPSExLHYuaW5kZXRlcm1pbmF0ZT12LmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5kZXRlcm1pbmF0ZX0pLCF2LmluZGV0ZXJtaW5hdGUpKSkpe3ZhciBiPXYuY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlja2VkP3QrMTp0fSwwKTtiPT09di5jaGlsZHJlbi5sZW5ndGg/di50aWNrZWQ9ITA6Yj4wJiYodi5pbmRldGVybWluYXRlPSEwKX1yZXR1cm4gdn07cmV0dXJuIHRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaSh0LG51bGwpfSksZX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bGF6eTp7fSxpbm5lclRpY2tlZDp0aGlzLnRpY2tlZHx8W10saW5uZXJFeHBhbmRlZDp0aGlzLmV4cGFuZGVkfHxbXX19LHdhdGNoOnt0aWNrZWQ6ZnVuY3Rpb24odCl7dGhpcy5pbm5lclRpY2tlZD10fSxleHBhbmRlZDpmdW5jdGlvbih0KXt0aGlzLmlubmVyRXhwYW5kZWQ9dH19LG1ldGhvZHM6e2dldE5vZGVCeUtleTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10ucmVkdWNlLHM9ZnVuY3Rpb24obixvKXtyZXR1cm4gbnx8IW8/bjpBcnJheS5pc0FycmF5KG8pP2kuY2FsbChPYmplY3QobykscyxuKTpvW2Uubm9kZUtleV09PT10P286by5jaGlsZHJlbj9zKG51bGwsby5jaGlsZHJlbik6dm9pZCAwfTtyZXR1cm4gcyhudWxsLHRoaXMubm9kZXMpfSxnZXRUaWNrZWROb2RlczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5uZXJUaWNrZWQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldE5vZGVCeUtleShlKX0pfSxnZXRFeHBhbmRlZE5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbm5lckV4cGFuZGVkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXROb2RlQnlLZXkoZSl9KX0saXNFeHBhbmRlZDpmdW5jdGlvbih0KXtyZXR1cm4hKCF0fHwhdGhpcy5tZXRhW3RdKSYmdGhpcy5tZXRhW3RdLmV4cGFuZGVkfSxjb2xsYXBzZUFsbDpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuZXhwYW5kZWQ/dGhpcy4kZW1pdChcInVwZGF0ZTpleHBhbmRlZFwiLFtdKTp0aGlzLmlubmVyRXhwYW5kZWQ9W119LGV4cGFuZEFsbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmlubmVyRXhwYW5kZWQsaT1mdW5jdGlvbihzKXtzLmNoaWxkcmVuJiZzLmNoaWxkcmVuLmxlbmd0aD4wJiYhMSE9PXMuZXhwYW5kYWJsZSYmITAhPT1zLmRpc2FibGVkJiYoZS5wdXNoKHNbdC5ub2RlS2V5XSkscy5jaGlsZHJlbi5mb3JFYWNoKGkpKX07dGhpcy5ub2Rlcy5mb3JFYWNoKGkpLHZvaWQgMCE9PXRoaXMuZXhwYW5kZWQ/dGhpcy4kZW1pdChcInVwZGF0ZTpleHBhbmRlZFwiLGUpOnRoaXMuaW5uZXJFeHBhbmRlZD1lfSxzZXRFeHBhbmRlZDpmdW5jdGlvbih0LGUsaSxzKXt2YXIgbj10aGlzO2lmKHZvaWQgMD09PWkmJihpPXRoaXMuZ2V0Tm9kZUJ5S2V5KHQpKSx2b2lkIDA9PT1zJiYocz10aGlzLm1ldGFbdF0pLHMubGF6eSYmXCJsb2FkZWRcIiE9PXMubGF6eSl7aWYoXCJsb2FkaW5nXCI9PT1zLmxhenkpcmV0dXJuO3RoaXMuJHNldCh0aGlzLmxhenksdCxcImxvYWRpbmdcIiksdGhpcy4kZW1pdChcImxhenktbG9hZFwiLHtub2RlOmksa2V5OnQsZG9uZTpmdW5jdGlvbihlKXtuLmxhenlbdF09XCJsb2FkZWRcIixlJiYoaS5jaGlsZHJlbj1lKSxuLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBlPW4ubWV0YVt0XTtlJiZlLmlzUGFyZW50JiZuLl9fc2V0RXhwYW5kZWQodCwhMCl9KX0sZmFpbDpmdW5jdGlvbigpe24uJGRlbGV0ZShuLmxhenksdCl9fSl9ZWxzZSBzLmlzUGFyZW50JiZzLmV4cGFuZGFibGUmJnRoaXMuX19zZXRFeHBhbmRlZCh0LGUpfSxfX3NldEV4cGFuZGVkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPXRoaXMuaW5uZXJFeHBhbmRlZCxuPXZvaWQgMCE9PXRoaXMuZXhwYW5kZWQ7aWYobiYmKHM9cy5zbGljZSgpKSxlKXtpZih0aGlzLmFjY29yZGlvbiYmdGhpcy5tZXRhW3RdKXt2YXIgbz1bXTt0aGlzLm1ldGFbdF0ucGFyZW50P3RoaXMubWV0YVt0XS5wYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXtlLmtleSE9PXQmJmUuZXhwYW5kYWJsZSYmby5wdXNoKGUua2V5KX0pOnRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcz1lW2kubm9kZUtleV07cyE9PXQmJm8ucHVzaChzKX0pLG8ubGVuZ3RoPjAmJihzPXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFvLmluY2x1ZGVzKHQpfSkpfXM9cy5jb25jYXQoW3RdKS5maWx0ZXIoZnVuY3Rpb24odCxlLGkpe3JldHVybiBpLmluZGV4T2YodCk9PT1lfSl9ZWxzZSBzPXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pO24/dGhpcy4kZW1pdChcInVwZGF0ZTpleHBhbmRlZFwiLHMpOnRoaXMuaW5uZXJFeHBhbmRlZD1zfSxpc1RpY2tlZDpmdW5jdGlvbih0KXtyZXR1cm4hKCF0fHwhdGhpcy5tZXRhW3RdKSYmdGhpcy5tZXRhW3RdLnRpY2tlZH0sc2V0VGlja2VkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5pbm5lclRpY2tlZCxzPXZvaWQgMCE9PXRoaXMudGlja2VkO3MmJihpPWkuc2xpY2UoKSksaT1lP2kuY29uY2F0KHQpLmZpbHRlcihmdW5jdGlvbih0LGUsaSl7cmV0dXJuIGkuaW5kZXhPZih0KT09PWV9KTppLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hdC5pbmNsdWRlcyhlKX0pLHMmJnRoaXMuJGVtaXQoXCJ1cGRhdGU6dGlja2VkXCIsaSl9LF9fZ2V0U2xvdFNjb3BlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLG49e3RyZWU6dGhpcyxub2RlOnQsa2V5OmksY29sb3I6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFya307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiZXhwYW5kZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZXhwYW5kZWR9LHNldDpmdW5jdGlvbih0KXt0IT09ZS5leHBhbmRlZCYmcy5zZXRFeHBhbmRlZChpLHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwidGlja2VkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLnRpY2tlZH0sc2V0OmZ1bmN0aW9uKHQpe3QhPT1lLnRpY2tlZCYmcy5zZXRUaWNrZWQoW2ldLHQpfX0pLG59LF9fZ2V0Q2hpbGRyZW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO3JldHVybih0aGlzLmZpbHRlcj9lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaS5tZXRhW3RbaS5ub2RlS2V5XV0ubWF0Y2hlc0ZpbHRlcn0pOmUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaS5fX2dldE5vZGUodCxlKX0pfSxfX2dldE5vZGVNZWRpYTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtaWNvbiBxLW1yLXNtXCIscHJvcHM6e25hbWU6ZS5pY29uLGNvbG9yOmUuaWNvbkNvbG9yfX0pOmUuaW1nfHxlLmF2YXRhcj90KFwiaW1nXCIse3N0YXRpY0NsYXNzOlwicS10cmVlLWltZyBxLW1yLXNtXCIsY2xhc3M6e2F2YXRhcjplLmF2YXRhcn0sYXR0cnM6e3NyYzplLmltZ3x8ZS5hdmF0YXJ9fSk6dm9pZCAwfSxfX2dldE5vZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLHM9ZVt0aGlzLm5vZGVLZXldLG49dGhpcy5tZXRhW3NdLG89ZS5oZWFkZXImJnRoaXMuJHNjb3BlZFNsb3RzW1wiaGVhZGVyLVwiK2UuaGVhZGVyXXx8dGhpcy4kc2NvcGVkU2xvdHNbXCJkZWZhdWx0LWhlYWRlclwiXSxyPW4uaXNQYXJlbnQ/dGhpcy5fX2dldENoaWxkcmVuKHQsZS5jaGlsZHJlbik6W10sYT1yLmxlbmd0aD4wfHxuLmxhenkmJlwibG9hZGVkXCIhPT1uLmxhenksbD1lLmJvZHkmJnRoaXMuJHNjb3BlZFNsb3RzW1wiYm9keS1cIitlLmJvZHldfHx0aGlzLiRzY29wZWRTbG90c1tcImRlZmF1bHQtYm9keVwiXSxjPW98fGw/dGhpcy5fX2dldFNsb3RTY29wZShlLG4scyk6bnVsbDtyZXR1cm4gbCYmKGw9dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlLWJvZHkgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3QoXCJkaXZcIix7Y2xhc3M6dGhpcy5jb250ZW50Q2xhc3N9LFtsKGMpXSldKSksdChcImRpdlwiLHtrZXk6cyxzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlXCIsY2xhc3M6e1wicS10cmVlLW5vZGUtcGFyZW50XCI6YSxcInEtdHJlZS1ub2RlLWNoaWxkXCI6IWF9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlLWhlYWRlciByZWxhdGl2ZS1wb3NpdGlvbiByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp7XCJxLXRyZWUtbm9kZS1saW5rXCI6bi5saW5rLFwicS10cmVlLW5vZGUtc2VsZWN0ZWRcIjpuLnNlbGVjdGVkLGRpc2FibGVkOm4uZGlzYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkNsaWNrKGUsbil9fSxkaXJlY3RpdmVzOm4uc2VsZWN0YWJsZT9be25hbWU6XCJyaXBwbGVcIn1dOm51bGx9LFtcImxvYWRpbmdcIj09PW4ubGF6eT90KFFTcGlubmVyLHtzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlLWhlYWRlci1tZWRpYSBxLW1yLXhzXCIscHJvcHM6e2NvbG9yOnRoaXMuY29tcHV0ZWRDb250cm9sQ29sb3J9fSk6YT90KFFJY29uLHtzdGF0aWNDbGFzczpcInEtdHJlZS1hcnJvdyBxLW1yLXhzIHRyYW5zaXRpb24tZ2VuZXJpY1wiLGNsYXNzOntcInEtdHJlZS1hcnJvdy1yb3RhdGVcIjpuLmV4cGFuZGVkfSxwcm9wczp7bmFtZTp0aGlzLmNvbXB1dGVkSWNvbn0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe2kuX19vbkV4cGFuZENsaWNrKGUsbix0KX19fSk6bnVsbCx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInJvdyBuby13cmFwIGl0ZW1zLWNlbnRlclwiLGNsYXNzOnRoaXMuY29udGVudENsYXNzfSxbbi5oYXNUaWNraW5nJiYhbi5ub1RpY2s/dChRQ2hlY2tib3gse3N0YXRpY0NsYXNzOlwicS1tci14c1wiLHByb3BzOnt2YWx1ZTpuLmluZGV0ZXJtaW5hdGU/bnVsbDpuLnRpY2tlZCxjb2xvcjp0aGlzLmNvbXB1dGVkQ29udHJvbENvbG9yLGRhcms6dGhpcy5kYXJrLGtlZXBDb2xvcjohMCxkaXNhYmxlOiFuLnRpY2thYmxlfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7aS5fX29uVGlja2VkQ2xpY2soZSxuLHQpfX19KTpudWxsLG8/byhjKTpbdGhpcy5fX2dldE5vZGVNZWRpYSh0LGUpLHQoXCJzcGFuXCIsZVt0aGlzLmxhYmVsS2V5XSldXSldKSxhP3QoUVNsaWRlVHJhbnNpdGlvbix7cHJvcHM6e2R1cmF0aW9uOnRoaXMuZHVyYXRpb259fSxbdChcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTpuLmV4cGFuZGVkfV0sc3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1jb2xsYXBzaWJsZVwiLGNsYXNzOlwidGV4dC1cIit0aGlzLmNvbG9yfSxbbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10cmVlLWNoaWxkcmVuXCIsY2xhc3M6e2Rpc2FibGVkOm4uZGlzYWJsZWR9fSxyKV0pXSk6bF0pfSxfX29uQ2xpY2s6ZnVuY3Rpb24odCxlKXt0aGlzLmhhc1NlbGVjdGlvbj9lLnNlbGVjdGFibGUmJnRoaXMuJGVtaXQoXCJ1cGRhdGU6c2VsZWN0ZWRcIixlLmtleSE9PXRoaXMuc2VsZWN0ZWQ/ZS5rZXk6bnVsbCk6dGhpcy5fX29uRXhwYW5kQ2xpY2sodCxlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmhhbmRsZXImJnQuaGFuZGxlcih0KX0sX19vbkV4cGFuZENsaWNrOmZ1bmN0aW9uKHQsZSxpKXt2b2lkIDAhPT1pJiZpLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2V0RXhwYW5kZWQoZS5rZXksIWUuZXhwYW5kZWQsdCxlKX0sX19vblRpY2tlZENsaWNrOmZ1bmN0aW9uKHQsZSxpKXtpZihlLmluZGV0ZXJtaW5hdGUmJmkmJihpPSExKSxlLnN0cmljdFRpY2tpbmcpdGhpcy5zZXRUaWNrZWQoW2Uua2V5XSxpKTtlbHNlIGlmKGUubGVhZlRpY2tpbmcpe3ZhciBzPVtdLG49ZnVuY3Rpb24odCl7dC5pc1BhcmVudD8oaXx8dC5ub1RpY2t8fCF0LnRpY2thYmxlfHxzLnB1c2godC5rZXkpLHQubGVhZlRpY2tpbmcmJnQuY2hpbGRyZW4uZm9yRWFjaChuKSk6dC5ub1RpY2t8fCF0LnRpY2thYmxlfHx0LmxlYWZGaWx0ZXJlZFRpY2tpbmcmJiF0Lm1hdGNoZXNGaWx0ZXJ8fHMucHVzaCh0LmtleSl9O24oZSksdGhpcy5zZXRUaWNrZWQocyxpKX19fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2dldENoaWxkcmVuKHQsdGhpcy5ub2Rlcyk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRyZWUgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LDA9PT1lLmxlbmd0aD90aGlzLmZpbHRlcj90aGlzLm5vUmVzdWx0c0xhYmVsfHx0aGlzLiRxLmkxOG4udHJlZS5ub1Jlc3VsdHM6dGhpcy5ub05vZGVzTGFiZWx8fHRoaXMuJHEuaTE4bi50cmVlLm5vTm9kZXM6ZSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRFeHBhbmRBbGwmJnRoaXMuZXhwYW5kQWxsKCl9fTtmdW5jdGlvbiBpbml0RmlsZSh0KXt0Ll9fZG9uZVVwbG9hZGluZz0hMSx0Ll9fZmFpbGVkPSExLHQuX191cGxvYWRlZD0wLHQuX19wcm9ncmVzcz0wfXZhciBRVXBsb2FkZXI9e25hbWU6XCJRVXBsb2FkZXJcIixtaXhpbnM6W0ZyYW1lTWl4aW5dLHByb3BzOntuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmlsZVwifSxoZWFkZXJzOk9iamVjdCx1cmw6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx1cmxGYWN0b3J5Ont0eXBlOkZ1bmN0aW9uLHJlcXVpcmVkOiExfSx1cGxvYWRGYWN0b3J5OkZ1bmN0aW9uLGFkZGl0aW9uYWxGaWVsZHM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX0sbm9Db250ZW50VHlwZTpCb29sZWFuLG1ldGhvZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlBPU1RcIn0sZmlsdGVyOkZ1bmN0aW9uLGV4dGVuc2lvbnM6U3RyaW5nLG11bHRpcGxlOkJvb2xlYW4saGlkZVVwbG9hZEJ1dHRvbjpCb29sZWFuLGhpZGVVcGxvYWRQcm9ncmVzczpCb29sZWFuLG5vVGh1bWJuYWlsczpCb29sZWFuLGF1dG9FeHBhbmQ6Qm9vbGVhbixleHBhbmRTdHlsZTpbQXJyYXksU3RyaW5nLE9iamVjdF0sZXhwYW5kQ2xhc3M6W0FycmF5LFN0cmluZyxPYmplY3RdLHdpdGhDcmVkZW50aWFsczpCb29sZWFuLHNlbmRSYXc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntxdWV1ZTpbXSxmaWxlczpbXSx1cGxvYWRpbmc6ITEsdXBsb2FkZWRTaXplOjAsdG90YWxTaXplOjAseGhyczpbXSxmb2N1c2VkOiExLGRuZDohMSxleHBhbmRlZDohMX19LGNvbXB1dGVkOntxdWV1ZUxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlLmxlbmd0aH0saGFzRXhwYW5kZWRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoPjB9LGxhYmVsOmZ1bmN0aW9uKCl7dmFyIHQ9aHVtYW5TdG9yYWdlU2l6ZSh0aGlzLnRvdGFsU2l6ZSk7cmV0dXJuIHRoaXMudXBsb2FkaW5nP3RoaXMucHJvZ3Jlc3MudG9GaXhlZCgyKStcIiUgKFwiK2h1bWFuU3RvcmFnZVNpemUodGhpcy51cGxvYWRlZFNpemUpK1wiIC8gXCIrdCtcIilcIjp0aGlzLnF1ZXVlTGVuZ3RoK1wiIChcIit0K1wiKVwifSxwcm9ncmVzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvdGFsU2l6ZT9NYXRoLm1pbig5OS45OSx0aGlzLnVwbG9hZGVkU2l6ZS90aGlzLnRvdGFsU2l6ZSoxMDApOjB9LGFkZERpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZXx8IXRoaXMubXVsdGlwbGUmJnRoaXMucXVldWVMZW5ndGg+PTF9LGZpbGVzU3R5bGU6ZnVuY3Rpb24oKXtpZih0aGlzLm1heEhlaWdodClyZXR1cm57bWF4SGVpZ2h0OnRoaXMubWF4SGVpZ2h0fX0sZG5kQ2xhc3M6ZnVuY3Rpb24oKXt2YXIgdD1bXCJ0ZXh0LVwiK3RoaXMuY29sb3JdO3JldHVybiB0aGlzLmlzSW52ZXJ0ZWQmJnQucHVzaChcImludmVydGVkXCIpLHR9LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLXVwbG9hZGVyLWV4cGFuZGVkXCI6dGhpcy5leHBhbmRlZCxcInEtdXBsb2FkZXItZGFya1wiOnRoaXMuZGFyayxcInEtdXBsb2FkZXItZmlsZXMtbm8tYm9yZGVyXCI6dGhpcy5pc0ludmVydGVkfHwhdGhpcy5oaWRlVW5kZXJsaW5lfX0scHJvZ3Jlc3NDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhcms/XCJ3aGl0ZVwiOlwiZ3JleVwifSxjb21wdXRlZEV4dGVuc2lvbnM6ZnVuY3Rpb24oKXtpZih0aGlzLmV4dGVuc2lvbnMpcmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5zcGxpdChcIixcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0PXQudHJpbSgpKS5lbmRzV2l0aChcIi8qXCIpJiYodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpLHR9KX19LHdhdGNoOntoYXNFeHBhbmRlZENvbnRlbnQ6ZnVuY3Rpb24odCl7ITE9PT10P3RoaXMuZXhwYW5kZWQ9ITE6dGhpcy5hdXRvRXhwYW5kJiYodGhpcy5leHBhbmRlZD0hMCl9fSxtZXRob2RzOnthZGQ6ZnVuY3Rpb24odCl7dCYmdGhpcy5fX2FkZChudWxsLHQpfSxfX29uRHJhZ092ZXI6ZnVuY3Rpb24odCl7c3RvcEFuZFByZXZlbnQodCksdGhpcy5kbmQ9ITB9LF9fb25EcmFnTGVhdmU6ZnVuY3Rpb24odCl7c3RvcEFuZFByZXZlbnQodCksdGhpcy5kbmQ9ITF9LF9fb25Ecm9wOmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZG5kPSExO3ZhciBlPXQuZGF0YVRyYW5zZmVyLmZpbGVzOzAhPT1lLmxlbmd0aCYmKGU9dGhpcy5tdWx0aXBsZT9lOltlWzBdXSx0aGlzLl9fYWRkKG51bGwsZSkpfSxfX2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodCxmdW5jdGlvbih0KXtyZXR1cm4gZS5jb21wdXRlZEV4dGVuc2lvbnMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC50eXBlLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChlLnRvVXBwZXJDYXNlKCkpfHx0Lm5hbWUudG9VcHBlckNhc2UoKS5lbmRzV2l0aChlLnRvVXBwZXJDYXNlKCkpfSl9KX0sX19hZGQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2lmKCF0aGlzLmFkZERpc2FibGVkJiYoZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlfHx0LnRhcmdldC5maWxlcyksIXRoaXMuZXh0ZW5zaW9uc3x8MCE9PShlPXRoaXMuX19maWx0ZXIoZSkpLmxlbmd0aCkpe3RoaXMuJHJlZnMuZmlsZS52YWx1ZT1cIlwiO3ZhciBzPVtdO2U9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIWkucXVldWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC5uYW1lPT09ZS5uYW1lfSl9KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmZpbHRlciYmKGU9dGhpcy5maWx0ZXIoZSkpLChlPWUubWFwKGZ1bmN0aW9uKHQpe2lmKGluaXRGaWxlKHQpLHQuX19zaXplPWh1bWFuU3RvcmFnZVNpemUodC5zaXplKSx0Ll9fdGltZXN0YW1wPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGkubm9UaHVtYm5haWxzfHwhdC50eXBlLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChcIklNQUdFXCIpKWkucXVldWUucHVzaCh0KTtlbHNle3ZhciBlPW5ldyBGaWxlUmVhZGVyLG49bmV3IFByb21pc2UoZnVuY3Rpb24ocyxuKXtlLm9ubG9hZD1mdW5jdGlvbihlKXt2YXIgbj1uZXcgSW1hZ2U7bi5zcmM9ZS50YXJnZXQucmVzdWx0LHQuX19pbWc9bixpLnF1ZXVlLnB1c2godCksaS5fX2NvbXB1dGVUb3RhbFNpemUoKSxzKCEwKX0sZS5vbmVycm9yPWZ1bmN0aW9uKHQpe24odCl9fSk7ZS5yZWFkQXNEYXRhVVJMKHQpLHMucHVzaChuKX1yZXR1cm4gdH0pKS5sZW5ndGg+MCYmKHRoaXMuZmlsZXM9dGhpcy5maWxlcy5jb25jYXQoZSksUHJvbWlzZS5hbGwocykudGhlbihmdW5jdGlvbigpe2kuJGVtaXQoXCJhZGRcIixlKX0pLHRoaXMuX19jb21wdXRlVG90YWxTaXplKCkpfX0sX19jb21wdXRlVG90YWxTaXplOmZ1bmN0aW9uKCl7dGhpcy50b3RhbFNpemU9dGhpcy5xdWV1ZUxlbmd0aD90aGlzLnF1ZXVlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zaXplfSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pOjB9LF9fcmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZSxpPXQuX19kb25lVXBsb2FkaW5nO3RoaXMudXBsb2FkaW5nJiYhaT8odGhpcy4kZW1pdChcInJlbW92ZTphYm9ydFwiLHQsdC54aHIpLHQueGhyJiZ0Lnhoci5hYm9ydCgpLHRoaXMudXBsb2FkZWRTaXplLT10Ll9fdXBsb2FkZWQpOnRoaXMuJGVtaXQoXCJyZW1vdmU6XCIrKGk/XCJkb25lXCI6XCJjYW5jZWxcIiksdCx0LnhociksaXx8KHRoaXMucXVldWU9dGhpcy5xdWV1ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZSE9PWV9KSksdC5fX3JlbW92ZWQ9ITAsdGhpcy5maWxlcz10aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lIT09ZX0pLHRoaXMuZmlsZXMubGVuZ3RofHwodGhpcy51cGxvYWRpbmc9ITEpLHRoaXMuX19jb21wdXRlVG90YWxTaXplKCl9LF9fcGljazpmdW5jdGlvbigpeyF0aGlzLmFkZERpc2FibGVkJiZ0aGlzLiRxLnBsYXRmb3JtLmlzLm1vemlsbGEmJnRoaXMuJHJlZnMuZmlsZS5jbGljaygpfSxfX2dldFVwbG9hZFByb21pc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihpbml0RmlsZSh0KSx0aGlzLnVwbG9hZEZhY3Rvcnkpe3ZhciBpPWZ1bmN0aW9uKGkpe3ZhciBzPWkqdC5zaXplO2UudXBsb2FkZWRTaXplKz1zLXQuX191cGxvYWRlZCx0Ll9fdXBsb2FkZWQ9cyx0Ll9fcHJvZ3Jlc3M9TWF0aC5taW4oOTkscGFyc2VJbnQoMTAwKmksMTApKSxlLiRmb3JjZVVwZGF0ZSgpfTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocyxuKXtlLnVwbG9hZEZhY3RvcnkodCxpKS50aGVuKGZ1bmN0aW9uKHQpe3QuX19kb25lVXBsb2FkaW5nPSEwLHQuX19wcm9ncmVzcz0xMDAsZS4kZW1pdChcInVwbG9hZGVkXCIsdCksZS4kZm9yY2VVcGRhdGUoKSxzKHQpfSkuY2F0Y2goZnVuY3Rpb24oaSl7dC5fX2ZhaWxlZD0hMCxlLiRlbWl0KFwiZmFpbFwiLHQpLGUuJGZvcmNlVXBkYXRlKCksbihpKX0pfSl9dmFyIHM9bmV3IEZvcm1EYXRhLG49bmV3IFhNTEh0dHBSZXF1ZXN0O3RyeXt0aGlzLmFkZGl0aW9uYWxGaWVsZHMuZm9yRWFjaChmdW5jdGlvbih0KXtzLmFwcGVuZCh0Lm5hbWUsdC52YWx1ZSl9KSwhMCE9PXRoaXMubm9Db250ZW50VHlwZSYmcy5hcHBlbmQoXCJDb250ZW50LVR5cGVcIix0LnR5cGV8fFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpLHMuYXBwZW5kKHRoaXMubmFtZSx0KX1jYXRjaCh0KXtyZXR1cm59cmV0dXJuIHQueGhyPW4sbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIixmdW5jdGlvbihpKXtpZighdC5fX3JlbW92ZWQpe2kucGVyY2VudD1pLnRvdGFsP2kubG9hZGVkL2kudG90YWw6MDt2YXIgcz1pLnBlcmNlbnQqdC5zaXplO2UudXBsb2FkZWRTaXplKz1zLXQuX191cGxvYWRlZCx0Ll9fdXBsb2FkZWQ9cyx0Ll9fcHJvZ3Jlc3M9TWF0aC5taW4oOTkscGFyc2VJbnQoMTAwKmkucGVyY2VudCwxMCkpfX0sITEpLG4ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bi5yZWFkeVN0YXRlPDR8fChuLnN0YXR1cyYmbi5zdGF0dXM8NDAwPyh0Ll9fZG9uZVVwbG9hZGluZz0hMCx0Ll9fcHJvZ3Jlc3M9MTAwLGUuJGVtaXQoXCJ1cGxvYWRlZFwiLHQsbiksaSh0KSk6KHQuX19mYWlsZWQ9ITAsZS4kZW1pdChcImZhaWxcIix0LG4pLG8obikpKX0sbi5vbmVycm9yPWZ1bmN0aW9uKCl7dC5fX2ZhaWxlZD0hMCxlLiRlbWl0KFwiZmFpbFwiLHQsbiksbyhuKX0sKGUudXJsRmFjdG9yeT9lLnVybEZhY3RvcnkodCk6UHJvbWlzZS5yZXNvbHZlKGUudXJsKSkudGhlbihmdW5jdGlvbihpKXtuLm9wZW4oZS5tZXRob2QsaSwhMCksZS53aXRoQ3JlZGVudGlhbHMmJihuLndpdGhDcmVkZW50aWFscz0hMCksZS5oZWFkZXJzJiZPYmplY3Qua2V5cyhlLmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24odCl7bi5zZXRSZXF1ZXN0SGVhZGVyKHQsZS5oZWFkZXJzW3RdKX0pLGUueGhycy5wdXNoKG4pLGUuc2VuZFJhdz9uLnNlbmQodCk6bi5zZW5kKHMpfSl9KX0scGljazpmdW5jdGlvbigpe3RoaXMuYWRkRGlzYWJsZWR8fHRoaXMuJHJlZnMuZmlsZS5jbGljaygpfSx1cGxvYWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5xdWV1ZUxlbmd0aDtpZighdGhpcy5kaXNhYmxlJiYwIT09ZSl7dmFyIGk9MDt0aGlzLnVwbG9hZGVkU2l6ZT0wLHRoaXMudXBsb2FkaW5nPSEwLHRoaXMueGhycz1bXSx0aGlzLiRlbWl0KFwic3RhcnRcIik7dmFyIHM9ZnVuY3Rpb24oKXsrK2k9PT1lJiYodC51cGxvYWRpbmc9ITEsdC54aHJzPVtdLHQucXVldWU9dC5xdWV1ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuX19kb25lVXBsb2FkaW5nfSksdC5fX2NvbXB1dGVUb3RhbFNpemUoKSx0LiRlbWl0KFwiZmluaXNoXCIpKX07dGhpcy5xdWV1ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX19nZXRVcGxvYWRQcm9taXNlKGUpfSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRoZW4ocykuY2F0Y2gocyl9KX19LGFib3J0OmZ1bmN0aW9uKCl7dGhpcy54aHJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hYm9ydCgpfSksdGhpcy51cGxvYWRpbmc9ITEsdGhpcy4kZW1pdChcImFib3J0XCIpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuYWJvcnQoKSx0aGlzLmZpbGVzPVtdLHRoaXMucXVldWU9W10sdGhpcy5leHBhbmRlZD0hMSx0aGlzLl9fY29tcHV0ZVRvdGFsU2l6ZSgpLHRoaXMuJGVtaXQoXCJyZXNldFwiKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgZWxsaXBzaXNcIixjbGFzczp0aGlzLmFsaWduQ2xhc3N9LFt0aGlzLmxhYmVsXSldO3JldHVybiB0aGlzLnVwbG9hZGluZz9pLnB1c2godGhpcy4kc2xvdHMubG9hZGluZz90KFwiZGl2XCIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1lbmQgc2VsZi1jZW50ZXIgcS1pZi1jb250cm9sXCJ9LHRoaXMuJHNsb3RzLmxvYWRpbmcpOnQoUVNwaW5uZXIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1lbmQgc2VsZi1jZW50ZXJcIixwcm9wczp7c2l6ZTpcIjI0cHhcIn19KSx0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtZW5kIHNlbGYtY2VudGVyIHEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi51cGxvYWRlcltcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5hYm9ydH19KSk6KGkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtdXBsb2FkZXItcGljay1idXR0b24gc2VsZi1jZW50ZXIgcS1pZi1jb250cm9sIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlblwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi51cGxvYWRlci5hZGR9LGF0dHJzOntkaXNhYmxlZDp0aGlzLmFkZERpc2FibGVkfX0sW3QoXCJpbnB1dFwiLHtyZWY6XCJmaWxlXCIsc3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLWlucHV0IGFic29sdXRlLWZ1bGwgY3Vyc29yLXBvaW50ZXJcIixhdHRyczpPYmplY3QuYXNzaWduKHt0eXBlOlwiZmlsZVwiLGFjY2VwdDp0aGlzLmV4dGVuc2lvbnN9LHRoaXMubXVsdGlwbGU/e211bHRpcGxlOiEwfTp7fSksb246e2NoYW5nZTp0aGlzLl9fYWRkfX0pXSkpLHRoaXMuaGlkZVVwbG9hZEJ1dHRvbnx8aS5wdXNoKHQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sIHNlbGYtY2VudGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnVwbG9hZGVyLnVwbG9hZH0sYXR0cnM6e2Rpc2FibGVkOjA9PT10aGlzLnF1ZXVlTGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy51cGxvYWR9fSkpKSx0aGlzLmhhc0V4cGFuZGVkQ29udGVudCYmaS5wdXNoKHQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sIGdlbmVyaWNfdHJhbnNpdGlvbiBzZWxmLWNlbnRlclwiLGNsYXNzOntcInJvdGF0ZS0xODBcIjp0aGlzLmV4cGFuZGVkfSxwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udXBsb2FkZXIuZXhwYW5kfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLmV4cGFuZGVkPSFlLmV4cGFuZGVkfX19KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdXBsb2FkZXIgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXMsb246e2RyYWdvdmVyOnRoaXMuX19vbkRyYWdPdmVyfX0sW3QoUUlucHV0RnJhbWUse3JlZjpcImlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixhbGlnbjp0aGlzLmFsaWduLG5vUGFyZW50RmllbGQ6dGhpcy5ub1BhcmVudEZpZWxkLGxlbmd0aDp0aGlzLnF1ZXVlTGVuZ3RoLGFkZGl0aW9uYWxMZW5ndGg6ITB9fSxpKSx0KFFTbGlkZVRyYW5zaXRpb24sW3QoXCJkaXZcIix7Y2xhc3M6dGhpcy5leHBhbmRDbGFzcyxzdHlsZTp0aGlzLmV4cGFuZFN0eWxlLGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuZXhwYW5kZWR9XX0sW3QoUUxpc3Qse3N0YXRpY0NsYXNzOlwicS11cGxvYWRlci1maWxlcyBxLXB5LW5vbmUgc2Nyb2xsXCIsc3R5bGU6dGhpcy5maWxlc1N0eWxlLHByb3BzOntkYXJrOnRoaXMuZGFya319LHRoaXMuZmlsZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFFJdGVtLHtrZXk6aS5uYW1lK2kuX190aW1lc3RhbXAsc3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLWZpbGUgcS1wYS14c1wifSxbIWUuaGlkZVVwbG9hZFByb2dyZXNzJiZ0KFFQcm9ncmVzcyx7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLXByb2dyZXNzLWJnIGFic29sdXRlLWZ1bGxcIixwcm9wczp7Y29sb3I6aS5fX2ZhaWxlZD9cIm5lZ2F0aXZlXCI6ZS5wcm9ncmVzc0NvbG9yLHBlcmNlbnRhZ2U6aS5fX3Byb2dyZXNzLGhlaWdodDpcIjEwMCVcIn19KXx8dm9pZCAwLCFlLmhpZGVVcGxvYWRQcm9ncmVzcyYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdXBsb2FkZXItcHJvZ3Jlc3MtdGV4dCBhYnNvbHV0ZVwifSxbaS5fX3Byb2dyZXNzK1wiJVwiXSl8fHZvaWQgMCx0KFFJdGVtU2lkZSx7cHJvcHM6aS5fX2ltZz97aW1hZ2U6aS5fX2ltZy5zcmN9OntpY29uOmUuJHEuaWNvbi51cGxvYWRlci5maWxlLGNvbG9yOmUuY29sb3J9fSksdChRSXRlbU1haW4se3Byb3BzOntsYWJlbDppLm5hbWUsc3VibGFiZWw6aS5fX3NpemV9fSksdChRSXRlbVNpZGUse3Byb3BzOntyaWdodDohMH19LFt0KFFJdGVtVGlsZSx7c3RhdGljQ2xhc3M6XCJjdXJzb3ItcG9pbnRlclwiLHByb3BzOntpY29uOmUuJHEuaWNvbi51cGxvYWRlcltpLl9fZG9uZVVwbG9hZGluZz9cImRvbmVcIjpcImNsZWFyXCJdLGNvbG9yOmUuY29sb3J9LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbigpe2UuX19yZW1vdmUoaSl9fX0pXSldKX0pKV0pXSksdGhpcy5kbmQmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLWRuZCBmbGV4IHJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYWJzb2x1dGUtZnVsbFwiLGNsYXNzOnRoaXMuZG5kQ2xhc3Msb246e2RyYWdlbnRlcjpzdG9wQW5kUHJldmVudCxkcmFnb3ZlcjpzdG9wQW5kUHJldmVudCxkcmFnbGVhdmU6dGhpcy5fX29uRHJhZ0xlYXZlLGRyb3A6dGhpcy5fX29uRHJvcH19KXx8dm9pZCAwXSl9fSxRVmlkZW89e25hbWU6XCJRVmlkZW9cIixwcm9wczp7c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGNvbXB1dGVkOntpZnJhbWVEYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2F0dHJzOntzcmM6dGhpcy5zcmMsZnJhbWVib3JkZXI6XCIwXCIsYWxsb3dmdWxsc2NyZWVuOiEwfX19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXZpZGVvXCJ9LFt0KFwiaWZyYW1lXCIsdGhpcy5pZnJhbWVEYXRhKV0pfX0sY29tcG9uZW50cyQxPU9iamVjdC5mcmVlemUoe1FBY3Rpb25TaGVldDpRQWN0aW9uU2hlZXQsUUFqYXhCYXI6UUFqYXhCYXIsUUFsZXJ0OlFBbGVydCxRQXV0b2NvbXBsZXRlOlFBdXRvY29tcGxldGUsUUJyZWFkY3J1bWJzOlFCcmVhZGNydW1icyxRQnJlYWRjcnVtYnNFbDpRQnJlYWRjcnVtYnNFbCxRQnRuOlFCdG4sUUJ0bkdyb3VwOlFCdG5Hcm91cCxRQnRuRHJvcGRvd246UUJ0bkRyb3Bkb3duLFFCdG5Ub2dnbGU6UUJ0blRvZ2dsZSxRQ2FyZDpRQ2FyZCxRQ2FyZFRpdGxlOlFDYXJkVGl0bGUsUUNhcmRNYWluOlFDYXJkTWFpbixRQ2FyZEFjdGlvbnM6UUNhcmRBY3Rpb25zLFFDYXJkTWVkaWE6UUNhcmRNZWRpYSxRQ2FyZFNlcGFyYXRvcjpRQ2FyZFNlcGFyYXRvcixRQ2Fyb3VzZWw6UUNhcm91c2VsLFFDYXJvdXNlbFNsaWRlOlFDYXJvdXNlbFNsaWRlLFFDYXJvdXNlbENvbnRyb2w6UUNhcm91c2VsQ29udHJvbCxRQ2hhdE1lc3NhZ2U6UUNoYXRNZXNzYWdlLFFDaGVja2JveDpRQ2hlY2tib3gsUUNoaXA6UUNoaXAsUUNoaXBzSW5wdXQ6UUNoaXBzSW5wdXQsUUNvbGxhcHNpYmxlOlFDb2xsYXBzaWJsZSxRQ29sb3I6UUNvbG9yLFFDb2xvclBpY2tlcjpRQ29sb3JQaWNrZXIsUUNvbnRleHRNZW51OlFDb250ZXh0TWVudSxRRGF0ZXRpbWU6UURhdGV0aW1lLFFEYXRldGltZVBpY2tlcjpRRGF0ZXRpbWVQaWNrZXIsUURpYWxvZzpRRGlhbG9nLFFFZGl0b3I6UUVkaXRvcixRRmFiOlFGYWIsUUZhYkFjdGlvbjpRRmFiQWN0aW9uLFFGaWVsZDpRRmllbGQsUUljb246UUljb24sUUluZmluaXRlU2Nyb2xsOlFJbmZpbml0ZVNjcm9sbCxRSW5uZXJMb2FkaW5nOlFJbm5lckxvYWRpbmcsUUlucHV0OlFJbnB1dCxRSW5wdXRGcmFtZTpRSW5wdXRGcmFtZSxRSnVtYm90cm9uOlFKdW1ib3Ryb24sUUtub2I6UUtub2IsUUxheW91dDpRTGF5b3V0LFFMYXlvdXREcmF3ZXI6UUxheW91dERyYXdlcixRTGF5b3V0Rm9vdGVyOlFMYXlvdXRGb290ZXIsUUxheW91dEhlYWRlcjpRTGF5b3V0SGVhZGVyLFFQYWdlOlFQYWdlLFFQYWdlQ29udGFpbmVyOlFQYWdlQ29udGFpbmVyLFFQYWdlU3RpY2t5OlFQYWdlU3RpY2t5LFFJdGVtOlFJdGVtLFFJdGVtU2VwYXJhdG9yOlFJdGVtU2VwYXJhdG9yLFFJdGVtTWFpbjpRSXRlbU1haW4sUUl0ZW1TaWRlOlFJdGVtU2lkZSxRSXRlbVRpbGU6UUl0ZW1UaWxlLFFJdGVtV3JhcHBlcjpRSXRlbVdyYXBwZXIsUUxpc3Q6UUxpc3QsUUxpc3RIZWFkZXI6UUxpc3RIZWFkZXIsUU1vZGFsOlFNb2RhbCxRTW9kYWxMYXlvdXQ6UU1vZGFsTGF5b3V0LFFOb1NzcjpRTm9Tc3IsUVJlc2l6ZU9ic2VydmFibGU6UVJlc2l6ZU9ic2VydmFibGUsUVNjcm9sbE9ic2VydmFibGU6UVNjcm9sbE9ic2VydmFibGUsUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGU6UVdpbmRvd1Jlc2l6ZU9ic2VydmFibGUsUU9wdGlvbkdyb3VwOlFPcHRpb25Hcm91cCxRUGFnaW5hdGlvbjpRUGFnaW5hdGlvbixRUGFyYWxsYXg6UVBhcmFsbGF4LFFQb3BvdmVyOlFQb3BvdmVyLFFQb3B1cEVkaXQ6UVBvcHVwRWRpdCxRUHJvZ3Jlc3M6UVByb2dyZXNzLFFQdWxsVG9SZWZyZXNoOlFQdWxsVG9SZWZyZXNoLFFSYWRpbzpRUmFkaW8sUVJhbmdlOlFSYW5nZSxRUmF0aW5nOlFSYXRpbmcsUVNjcm9sbEFyZWE6UVNjcm9sbEFyZWEsUVNlYXJjaDpRU2VhcmNoLFFTZWxlY3Q6UVNlbGVjdCxRU2xpZGVUcmFuc2l0aW9uOlFTbGlkZVRyYW5zaXRpb24sUVNsaWRlcjpRU2xpZGVyLFFTcGlubmVyOlFTcGlubmVyLFFTcGlubmVyQXVkaW86UVNwaW5uZXJBdWRpbyxRU3Bpbm5lckJhbGw6UVNwaW5uZXJCYWxsLFFTcGlubmVyQmFyczpRU3Bpbm5lckJhcnMsUVNwaW5uZXJDaXJjbGVzOlFTcGlubmVyQ2lyY2xlcyxRU3Bpbm5lckNvbW1lbnQ6UVNwaW5uZXJDb21tZW50LFFTcGlubmVyQ3ViZTpRU3Bpbm5lckN1YmUsUVNwaW5uZXJEb3RzOlFTcGlubmVyRG90cyxRU3Bpbm5lckZhY2Vib29rOlFTcGlubmVyRmFjZWJvb2ssUVNwaW5uZXJHZWFyczpRU3Bpbm5lckdlYXJzLFFTcGlubmVyR3JpZDpRU3Bpbm5lckdyaWQsUVNwaW5uZXJIZWFydHM6UVNwaW5uZXJIZWFydHMsUVNwaW5uZXJIb3VyZ2xhc3M6UVNwaW5uZXJIb3VyZ2xhc3MsUVNwaW5uZXJJbmZpbml0eTpRU3Bpbm5lckluZmluaXR5LFFTcGlubmVySW9zOlFTcGlubmVyX2lvcyxRU3Bpbm5lck1hdDpEZWZhdWx0U3Bpbm5lcixRU3Bpbm5lck92YWw6UVNwaW5uZXJPdmFsLFFTcGlubmVyUGllOlFTcGlubmVyUGllLFFTcGlubmVyUHVmZjpRU3Bpbm5lclB1ZmYsUVNwaW5uZXJSYWRpbzpRU3Bpbm5lclJhZGlvLFFTcGlubmVyUmluZ3M6UVNwaW5uZXJSaW5ncyxRU3Bpbm5lclRhaWw6UVNwaW5uZXJUYWlsLFFTdGVwOlFTdGVwLFFTdGVwcGVyOlFTdGVwcGVyLFFTdGVwcGVyTmF2aWdhdGlvbjpRU3RlcHBlck5hdmlnYXRpb24sUVJvdXRlVGFiOlFSb3V0ZVRhYixRVGFiOlFUYWIsUVRhYlBhbmU6UVRhYlBhbmUsUVRhYnM6UVRhYnMsUVRhYmxlOlFUYWJsZSxRVGg6UVRoLFFUcjpRVHIsUVRkOlFUZCxRVGFibGVDb2x1bW5zOlFUYWJsZUNvbHVtbnMsUVRpbWVsaW5lOlFUaW1lbGluZSxRVGltZWxpbmVFbnRyeTpRVGltZWxpbmVFbnRyeSxRVG9nZ2xlOlFUb2dnbGUsUVRvb2xiYXI6UVRvb2xiYXIsUVRvb2xiYXJUaXRsZTpRVG9vbGJhclRpdGxlLFFUb29sdGlwOlFUb29sdGlwLFFUcmVlOlFUcmVlLFFVcGxvYWRlcjpRVXBsb2FkZXIsUVZpZGVvOlFWaWRlb30pO2Z1bmN0aW9uIHVwZGF0ZUJpbmRpbmcodCxlKXt2YXIgaT1lLnZhbHVlLHM9KGUubW9kaWZpZXJzLHQuX19xYmFja3RvdG9wKTtpZihpKXtpZihcIm51bWJlclwiPT10eXBlb2YgaSlyZXR1cm4gcy5vZmZzZXQ9aSx2b2lkIHMudXBkYXRlKCk7aWYoaSYmT2JqZWN0KGkpIT09aSljb25zb2xlLmVycm9yKFwidi1iYWNrLXRvLXRvcCByZXF1aXJlcyBhbiBvYmplY3Qge29mZnNldCwgZHVyYXRpb259IGFzIHBhcmFtZXRlclwiLHQpO2Vsc2V7aWYoaS5vZmZzZXQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBpLm9mZnNldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFwidi1iYWNrLXRvLXRvcCByZXF1aXJlcyBhIG51bWJlciBhcyBvZmZzZXRcIix0KTtzLm9mZnNldD1pLm9mZnNldH1pZihpLmR1cmF0aW9uKXtpZihcIm51bWJlclwiIT10eXBlb2YgaS5kdXJhdGlvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFwidi1iYWNrLXRvLXRvcCByZXF1aXJlcyBhIG51bWJlciBhcyBkdXJhdGlvblwiLHQpO3MuZHVyYXRpb249aS5kdXJhdGlvbn1zLnVwZGF0ZSgpfX1lbHNlIHMudXBkYXRlKCl9dmFyIGJhY2tUb1RvcD17bmFtZTpcImJhY2stdG8tdG9wXCIsYmluZDpmdW5jdGlvbih0KXt2YXIgZT17b2Zmc2V0OjIwMCxkdXJhdGlvbjozMDAsdXBkYXRlTm93OmZ1bmN0aW9uKCl7dmFyIGk9Z2V0U2Nyb2xsUG9zaXRpb24oZS5zY3JvbGxUYXJnZXQpPD1lLm9mZnNldDtpIT09dC5jbGFzc0xpc3QuY29udGFpbnMoXCJoaWRkZW5cIikmJnQuY2xhc3NMaXN0W2k/XCJhZGRcIjpcInJlbW92ZVwiXShcImhpZGRlblwiKX0sZ29Ub1RvcDpmdW5jdGlvbigpe3NldFNjcm9sbFBvc2l0aW9uKGUuc2Nyb2xsVGFyZ2V0LDAsZS5hbmltYXRlP2UuZHVyYXRpb246MCl9LGdvVG9Ub3BLZXk6ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnNldFNjcm9sbFBvc2l0aW9uKGUuc2Nyb2xsVGFyZ2V0LDAsZS5hbmltYXRlP2UuZHVyYXRpb246MCl9fTtlLnVwZGF0ZT1kZWJvdW5jZShlLnVwZGF0ZU5vdywyNSksdC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpLHQuX19xYmFja3RvdG9wPWV9LGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fX3FiYWNrdG90b3A7aS5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHQpLGkuYW5pbWF0ZT1lLm1vZGlmaWVycy5hbmltYXRlLHVwZGF0ZUJpbmRpbmcodCxlKSxpLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS51cGRhdGUsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLGkudXBkYXRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixpLmdvVG9Ub3ApLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsaS5nb1RvVG9wS2V5KX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7SlNPTi5zdHJpbmdpZnkoZS5vbGRWYWx1ZSkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKT91cGRhdGVCaW5kaW5nKHQsZSk6c2V0VGltZW91dChmdW5jdGlvbigpe3QuX19xYmFja3RvdG9wJiZ0Ll9fcWJhY2t0b3RvcC51cGRhdGVOb3coKX0sMCl9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcWJhY2t0b3RvcDtlJiYoZS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGUudXBkYXRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixlLnVwZGF0ZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5nb1RvVG9wKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUuZ29Ub1RvcEtleSksZGVsZXRlIHQuX19xYmFja3RvdG9wKX19LGNsb3NlT3ZlcmxheT17bmFtZTpcImNsb3NlLW92ZXJsYXlcIixiaW5kOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9aS5jb21wb25lbnRJbnN0YW5jZTtlPWUuJHBhcmVudDspe3ZhciBzPWUuJG9wdGlvbnMubmFtZTtpZihcIlFQb3BvdmVyXCI9PT1zfHxcIlFNb2RhbFwiPT09cyl7ZS5oaWRlKHQpO2JyZWFrfX19LG49ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnModCl9O3QuX19xY2xvc2U9e2hhbmRsZXI6cyxoYW5kbGVyS2V5Om59LHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIscyksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixuKX0sdW5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX19xY2xvc2U7ZSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5oYW5kbGVyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUuaGFuZGxlcktleSksZGVsZXRlIHQuX19xY2xvc2UpfX0sZ29CYWNrPXtuYW1lOlwiZ28tYmFja1wiLGJpbmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPWUudmFsdWUsbj1lLm1vZGlmaWVycyxvPXt2YWx1ZTpzLHBvc2l0aW9uOndpbmRvdy5oaXN0b3J5Lmxlbmd0aC0xLHNpbmdsZTpuLnNpbmdsZX07UGxhdGZvcm0uaXMuY29yZG92YT9vLmdvQmFjaz1mdW5jdGlvbigpe2kuY29udGV4dC4kcm91dGVyLmdvKG8uc2luZ2xlPy0xOm8ucG9zaXRpb24td2luZG93Lmhpc3RvcnkubGVuZ3RoKX06by5nb0JhY2s9ZnVuY3Rpb24oKXtpLmNvbnRleHQuJHJvdXRlci5yZXBsYWNlKG8udmFsdWUpfSxvLmdvQmFja0tleT1mdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmby5nb0JhY2sodCl9LHQuX19xZ29iYWNrPW8sdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixvLmdvQmFjayksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixvLmdvQmFja0tleSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2Uub2xkVmFsdWUhPT1lLnZhbHVlJiYodC5fX3Fnb2JhY2sudmFsdWU9ZS52YWx1ZSl9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcWdvYmFjaztlJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixlLmdvQmFjayksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlLmdvQmFja0tleSksZGVsZXRlIHQuX19xZ29iYWNrKX19O2Z1bmN0aW9uIHVwZGF0ZUJpbmRpbmckMSh0LGUpe3ZhciBpPXQuX19xc2Nyb2xsZmlyZTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnZhbHVlKXJldHVybiBpLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwpLHZvaWQgY29uc29sZS5lcnJvcihcInYtc2Nyb2xsLWZpcmUgcmVxdWlyZXMgYSBmdW5jdGlvbiBhcyBwYXJhbWV0ZXJcIix0KTtpLmhhbmRsZXI9ZS52YWx1ZSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9sZFZhbHVlJiYoaS5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkuc2Nyb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSksaS5zY3JvbGwoKSl9dmFyIHNjcm9sbEZpcmU9e25hbWU6XCJzY3JvbGwtZmlyZVwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT17c2Nyb2xsOmRlYm91bmNlKGZ1bmN0aW9uKCl7dmFyIGUscztpLnNjcm9sbFRhcmdldD09PXdpbmRvdz8ocz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxlPXdpbmRvdy5pbm5lckhlaWdodCk6KHM9b2Zmc2V0KHQpLnRvcCtoZWlnaHQodCksZT1vZmZzZXQoaS5zY3JvbGxUYXJnZXQpLnRvcCtoZWlnaHQoaS5zY3JvbGxUYXJnZXQpKSxzPjAmJnM8ZSYmKGkuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixpLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGkuaGFuZGxlcih0KSl9LDI1KX07dC5fX3FzY3JvbGxmaXJlPWl9LGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dC5fX3FzY3JvbGxmaXJlLnNjcm9sbFRhcmdldD1nZXRTY3JvbGxUYXJnZXQodCksdXBkYXRlQmluZGluZyQxKHQsZSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2UudmFsdWUhPT1lLm9sZFZhbHVlJiZ1cGRhdGVCaW5kaW5nJDEodCxlKX0sdW5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX19xc2Nyb2xsZmlyZTtlJiYoZS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGUuc2Nyb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSksZGVsZXRlIHQuX19xc2Nyb2xsZmlyZSl9fTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nJDIodCxlKXt2YXIgaT10Ll9fcXNjcm9sbDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnZhbHVlKXJldHVybiBpLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSx2b2lkIGNvbnNvbGUuZXJyb3IoXCJ2LXNjcm9sbCByZXF1aXJlcyBhIGZ1bmN0aW9uIGFzIHBhcmFtZXRlclwiLHQpO2kuaGFuZGxlcj1lLnZhbHVlLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUub2xkVmFsdWUmJmkuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixpLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpfXZhciBzY3JvbGwkMT17bmFtZTpcInNjcm9sbFwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT17c2Nyb2xsOmZ1bmN0aW9uKCl7aS5oYW5kbGVyKGdldFNjcm9sbFBvc2l0aW9uKGkuc2Nyb2xsVGFyZ2V0KSxnZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb24oaS5zY3JvbGxUYXJnZXQpKX19O3QuX19xc2Nyb2xsPWl9LGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dC5fX3FzY3JvbGwuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0KSx1cGRhdGVCaW5kaW5nJDIodCxlKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7ZS5vbGRWYWx1ZSE9PWUudmFsdWUmJnVwZGF0ZUJpbmRpbmckMih0LGUpfSx1bmJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fX3FzY3JvbGw7ZSYmKGUuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixlLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGRlbGV0ZSB0Ll9fcXNjcm9sbCl9fTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nJDModCxlKXt2YXIgaT10Ll9fcXRvdWNoaG9sZDtpLmR1cmF0aW9uPXBhcnNlSW50KGUuYXJnLDEwKXx8NjAwLGUub2xkVmFsdWUhPT1lLnZhbHVlJiYoaS5oYW5kbGVyPWUudmFsdWUpfXZhciB0b3VjaEhvbGQ9e25hbWU6XCJ0b3VjaC1ob2xkXCIsYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPSFlLm1vZGlmaWVycy5ub01vdXNlLHM9ZS5tb2RpZmllcnMuc3RvcCxuPWUubW9kaWZpZXJzLnByZXZlbnQsbz17bW91c2VTdGFydDpmdW5jdGlvbih0KXtsZWZ0Q2xpY2sodCkmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsby5tb3VzZUFib3J0KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLG8ubW91c2VBYm9ydCksby5zdGFydCh0KSl9LG1vdXNlQWJvcnQ6ZnVuY3Rpb24odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG8ubW91c2VBYm9ydCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixvLm1vdXNlQWJvcnQpLG8uYWJvcnQodCl9LHN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3MmJnQuc3RvcFByb3BhZ2F0aW9uKCksbiYmdC5wcmV2ZW50RGVmYXVsdCgpLG8udGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2kmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsby5tb3VzZUFib3J0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLG8ubW91c2VBYm9ydCkpLG8uaGFuZGxlcih7ZXZ0OnQscG9zaXRpb246cG9zaXRpb24odCksZHVyYXRpb246KG5ldyBEYXRlKS5nZXRUaW1lKCktZX0pfSxvLmR1cmF0aW9uKX0sYWJvcnQ6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KG8udGltZXIpLG8udGltZXI9bnVsbH19O3QuX19xdG91Y2hob2xkPW8sdXBkYXRlQmluZGluZyQzKHQsZSksaSYmdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsby5tb3VzZVN0YXJ0KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsby5zdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsby5hYm9ydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixvLmFib3J0KX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dXBkYXRlQmluZGluZyQzKHQsZSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xdG91Y2hob2xkO2kmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsaS5zdGFydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixpLmFib3J0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixpLmFib3J0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixpLm1vdXNlU3RhcnQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixpLm1vdXNlQWJvcnQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsaS5tb3VzZUFib3J0KSxkZWxldGUgdC5fX3F0b3VjaGhvbGQpfX0sZGlyZWN0aXZlcz1PYmplY3QuZnJlZXplKHtCYWNrVG9Ub3A6YmFja1RvVG9wLENsb3NlT3ZlcmxheTpjbG9zZU92ZXJsYXksR29CYWNrOmdvQmFjayxSaXBwbGU6UmlwcGxlLFNjcm9sbEZpcmU6c2Nyb2xsRmlyZSxTY3JvbGw6c2Nyb2xsJDEsVG91Y2hIb2xkOnRvdWNoSG9sZCxUb3VjaFBhbjpUb3VjaFBhbixUb3VjaFN3aXBlOlRvdWNoU3dpcGV9KTtmdW5jdGlvbiBvYmplY3RXaXRob3V0UHJvcGVydGllcyh0LGUpe3ZhciBpPXt9O2Zvcih2YXIgcyBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHMpJiYtMT09PWUuaW5kZXhPZihzKSYmKGlbc109dFtzXSk7cmV0dXJuIGl9ZnVuY3Rpb24gbW9kYWxGbih0LGUpe3JldHVybiBmdW5jdGlvbihpLHMpe3ZhciBuPWkuY2xhc3NOYW1lLG89b2JqZWN0V2l0aG91dFByb3BlcnRpZXMoaSxbXCJjbGFzc05hbWVcIl0pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihpLHIpe2lmKGlzU1NSKXJldHVybiBpKCk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO3ZhciBsPWZ1bmN0aW9uKHQpe2kodCksaC4kZGVzdHJveSgpfSxjPWZ1bmN0aW9uKHQpe3IodHx8bmV3IEVycm9yKSxoLiRkZXN0cm95KCl9LGg9bmV3IGUoe2VsOmEsZGF0YTpmdW5jdGlvbigpe3JldHVybntwcm9wczpvfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKHQse3JlZjpcIm1vZGFsXCIscHJvcHM6byxjbGFzczpuLG9uOntvazpsLGNhbmNlbDpjfX0pfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5tb2RhbC5zaG93KCl9fSk7cyYmcy50aGVuKGwsYyl9KX19dmFyIG1ldGFWYWx1ZSxhY3Rpb25TaGVldD17aW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWU7dGhpcy5jcmVhdGU9ZS5hY3Rpb25TaGVldD1tb2RhbEZuKFFBY3Rpb25TaGVldCxpKX19O2Z1bmN0aW9uIGdldFByb3AoKXtyZXR1cm4gUGxhdGZvcm0uaXMud2lucGhvbmU/XCJtc2FwcGxpY2F0aW9uLW5hdmJ1dHRvbi1jb2xvclwiOlBsYXRmb3JtLmlzLnNhZmFyaT9cImFwcGxlLW1vYmlsZS13ZWItYXBwLXN0YXR1cy1iYXItc3R5bGVcIjpcInRoZW1lLWNvbG9yXCJ9ZnVuY3Rpb24gZ2V0TWV0YVRhZyh0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIk1FVEFcIik7Zm9yKHZhciBpIGluIGUpaWYoZVtpXS5uYW1lPT09dClyZXR1cm4gZVtpXX1mdW5jdGlvbiBzZXRDb2xvcih0KXt2b2lkIDA9PT1tZXRhVmFsdWUmJihtZXRhVmFsdWU9Z2V0UHJvcCgpKTt2YXIgZT1nZXRNZXRhVGFnKG1ldGFWYWx1ZSksaT12b2lkIDA9PT1lO2kmJihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpKS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsbWV0YVZhbHVlKSxlLnNldEF0dHJpYnV0ZShcImNvbnRlbnRcIix0KSxpJiZkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBhZGRyZXNzYmFyQ29sb3I9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPSh0LlZ1ZSx0LmNmZyk7dGhpcy5zZXQ9IWlzU1NSJiZQbGF0Zm9ybS5pcy5tb2JpbGUmJihQbGF0Zm9ybS5pcy5jb3Jkb3ZhfHxQbGF0Zm9ybS5pcy53aW5waG9uZXx8UGxhdGZvcm0uaXMuc2FmYXJpfHxQbGF0Zm9ybS5pcy53ZWJraXR8fFBsYXRmb3JtLmlzLnZpdmFsZGkpP2Z1bmN0aW9uKHQpe3ZhciBlPXR8fGdldEJyYW5kKFwicHJpbWFyeVwiKTtQbGF0Zm9ybS5pcy5jb3Jkb3ZhJiZ3aW5kb3cuU3RhdHVzQmFyP3dpbmRvdy5TdGF0dXNCYXIuYmFja2dyb3VuZENvbG9yQnlIZXhTdHJpbmcoZSk6c2V0Q29sb3IoZSl9OmZ1bmN0aW9uKCl7fSxlLmFkZHJlc3NiYXJDb2xvcj10aGlzLGkuYWRkcmVzc2JhckNvbG9yJiZ0aGlzLnNldChpLmFkZHJlc3NiYXJDb2xvcil9fSxwcmVmaXhlcz17fSxhcHBGdWxsc2NyZWVuPXtpc0NhcGFibGU6ITEsaXNBY3RpdmU6ITEscmVxdWVzdDpmdW5jdGlvbih0KXt0aGlzLmlzQ2FwYWJsZSYmIXRoaXMuaXNBY3RpdmUmJih0PXR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClbcHJlZml4ZXMucmVxdWVzdF0oKX0sZXhpdDpmdW5jdGlvbigpe3RoaXMuaXNDYXBhYmxlJiZ0aGlzLmlzQWN0aXZlJiZkb2N1bWVudFtwcmVmaXhlcy5leGl0XSgpfSx0b2dnbGU6ZnVuY3Rpb24odCl7dGhpcy5pc0FjdGl2ZT90aGlzLmV4aXQoKTp0aGlzLnJlcXVlc3QodCl9LGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQuJHEscz10LlZ1ZTtpLmZ1bGxzY3JlZW49dGhpcyxpc1NTUnx8KHByZWZpeGVzLnJlcXVlc3Q9W1wicmVxdWVzdEZ1bGxzY3JlZW5cIixcIm1zUmVxdWVzdEZ1bGxzY3JlZW5cIixcIm1velJlcXVlc3RGdWxsU2NyZWVuXCIsXCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlblwiXS5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbdF19KSx0aGlzLmlzQ2FwYWJsZT12b2lkIDAhPT1wcmVmaXhlcy5yZXF1ZXN0LHRoaXMuaXNDYXBhYmxlJiYocHJlZml4ZXMuZXhpdD1bXCJleGl0RnVsbHNjcmVlblwiLFwibXNFeGl0RnVsbHNjcmVlblwiLFwibW96Q2FuY2VsRnVsbFNjcmVlblwiLFwid2Via2l0RXhpdEZ1bGxzY3JlZW5cIl0uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnRbdF19KSx0aGlzLmlzQWN0aXZlPSEhKGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpLFtcIm9uZnVsbHNjcmVlbmNoYW5nZVwiLFwib25tc2Z1bGxzY3JlZW5jaGFuZ2VcIixcIm9ubW96ZnVsbHNjcmVlbmNoYW5nZVwiLFwib253ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnRbdF09ZnVuY3Rpb24oKXtlLmlzQWN0aXZlPSFlLmlzQWN0aXZlfX0pLHMudXRpbC5kZWZpbmVSZWFjdGl2ZSh0aGlzLFwiaXNBY3RpdmVcIix0aGlzLmlzQWN0aXZlKSkpfX0sYXBwVmlzaWJpbGl0eT17YXBwVmlzaWJsZTohMSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LiRxLHM9dC5WdWU7aWYoaXNTU1IpdGhpcy5hcHBWaXNpYmxlPWkuYXBwVmlzaWJsZT0hMDtlbHNle3ZhciBuLG87dm9pZCAwIT09ZG9jdW1lbnQuaGlkZGVuPyhuPVwiaGlkZGVuXCIsbz1cInZpc2liaWxpdHljaGFuZ2VcIik6dm9pZCAwIT09ZG9jdW1lbnQubXNIaWRkZW4/KG49XCJtc0hpZGRlblwiLG89XCJtc3Zpc2liaWxpdHljaGFuZ2VcIik6dm9pZCAwIT09ZG9jdW1lbnQud2Via2l0SGlkZGVuJiYobj1cIndlYmtpdEhpZGRlblwiLG89XCJ3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlXCIpO3ZhciByPWZ1bmN0aW9uKCl7ZS5hcHBWaXNpYmxlPWkuYXBwVmlzaWJsZT0hZG9jdW1lbnRbbl19O3IoKSxvJiZ2b2lkIDAhPT1kb2N1bWVudFtuXSYmKHMudXRpbC5kZWZpbmVSZWFjdGl2ZShpLFwiYXBwVmlzaWJsZVwiLHRoaXMuYXBwVmlzaWJsZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihvLHIsITEpKX19fTtmdW5jdGlvbiBlbmNvZGUodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KX1mdW5jdGlvbiBkZWNvZGUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1mdW5jdGlvbiBzdHJpbmdpZnlDb29raWVWYWx1ZSh0KXtyZXR1cm4gZW5jb2RlKHQ9PT1PYmplY3QodCk/SlNPTi5zdHJpbmdpZnkodCk6XCJcIit0KX1mdW5jdGlvbiByZWFkKHQpe2lmKFwiXCI9PT10KXJldHVybiB0OzA9PT10LmluZGV4T2YoJ1wiJykmJih0PXQuc2xpY2UoMSwtMSkucmVwbGFjZSgvXFxcXFwiL2csJ1wiJykucmVwbGFjZSgvXFxcXFxcXFwvZyxcIlxcXFxcIikpLHQ9ZGVjb2RlKHQucmVwbGFjZSgvXFwrL2csXCIgXCIpKTt0cnl7dD1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe31yZXR1cm4gdH1mdW5jdGlvbiBzZXQodCxlLGkscyl7dmFyIG4sbztpZih2b2lkIDA9PT1pJiYoaT17fSksdm9pZCAwIT09aS5leHBpcmVzKXtpZihvPXBhcnNlSW50KGkuZXhwaXJlcywxMCksaXNOYU4obykpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcIlF1YXNhciBjb29raWU6IGV4cGlyZXMgbmVlZHMgdG8gYmUgYSBudW1iZXJcIik7KG49bmV3IERhdGUpLnNldE1pbGxpc2Vjb25kcyhuLmdldE1pbGxpc2Vjb25kcygpKzg2NGU1Km8pfXZhciByPWVuY29kZSh0KStcIj1cIitzdHJpbmdpZnlDb29raWVWYWx1ZShlKSxhPVtyLHZvaWQgMCE9PW4/XCI7IEV4cGlyZXM9XCIrbi50b1VUQ1N0cmluZygpOlwiXCIsaS5wYXRoP1wiOyBQYXRoPVwiK2kucGF0aDpcIlwiLGkuZG9tYWluP1wiOyBEb21haW49XCIraS5kb21haW46XCJcIixpLmh0dHBPbmx5P1wiOyBIdHRwT25seVwiOlwiXCIsaS5zZWN1cmU/XCI7IFNlY3VyZVwiOlwiXCJdLmpvaW4oXCJcIik7aWYocyl7cy5yZXEucUNvb2tpZXM/cy5yZXEucUNvb2tpZXMucHVzaChhKTpzLnJlcS5xQ29va2llcz1bYV0scy5yZXMuc2V0SGVhZGVyKFwiU2V0LUNvb2tpZVwiLHMucmVxLnFDb29raWVzKTt2YXIgbD1zLnJlcS5oZWFkZXJzLmNvb2tpZXx8XCJcIjtpZih2b2lkIDAhPT1uJiZvPDApe3ZhciBjPWdldCh0LHMpO3ZvaWQgMCE9PWMmJihsPWwucmVwbGFjZSh0K1wiPVwiK2MrXCI7IFwiLFwiXCIpLnJlcGxhY2UoXCI7IFwiK3QrXCI9XCIrYyxcIlwiKS5yZXBsYWNlKHQrXCI9XCIrYyxcIlwiKSl9ZWxzZSBsPWw/citcIjsgXCIrbDphO3MucmVxLmhlYWRlcnMuY29va2llPWx9ZWxzZSBkb2N1bWVudC5jb29raWU9YX1mdW5jdGlvbiBnZXQodCxlKXtmb3IodmFyIGkscyxuLG89dD92b2lkIDA6e30scj1lP2UucmVxLmhlYWRlcnM6ZG9jdW1lbnQsYT1yLmNvb2tpZT9yLmNvb2tpZS5zcGxpdChcIjsgXCIpOltdLGw9MCxjPWEubGVuZ3RoO2w8YztsKyspaWYocz1kZWNvZGUoKGk9YVtsXS5zcGxpdChcIj1cIikpLnNoaWZ0KCkpLG49aS5qb2luKFwiPVwiKSx0KXtpZih0PT09cyl7bz1yZWFkKG4pO2JyZWFrfX1lbHNlIG9bc109bjtyZXR1cm4gb31mdW5jdGlvbiByZW1vdmUodCxlLGkpe3NldCh0LFwiXCIsT2JqZWN0LmFzc2lnbih7fSxlLHtleHBpcmVzOi0xfSksaSl9ZnVuY3Rpb24gaGFzKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWdldCh0LGUpfWZ1bmN0aW9uIGdldE9iamVjdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGU9dC5zc3I7cmV0dXJue2dldDpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0KHQsZSl9LHNldDpmdW5jdGlvbih0LGkscyl7cmV0dXJuIHNldCh0LGkscyxlKX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiBoYXModCxlKX0scmVtb3ZlOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHJlbW92ZSh0LGksZSl9LGFsbDpmdW5jdGlvbigpe3JldHVybiBnZXQobnVsbCxlKX19fXZhciB2bSx0aW1lb3V0LHVwZGF0ZUlkLHNzclRha2VvdmVyLGNvb2tpZXM9e3BhcnNlU1NSOmZ1bmN0aW9uKHQpe3JldHVybiB0P2dldE9iamVjdCh7c3NyOnR9KTp0aGlzfSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT10LnF1ZXVlcztpc1NTUj9pLnNlcnZlci5wdXNoKGZ1bmN0aW9uKHQsZSl7dC5jb29raWVzPWdldE9iamVjdChlKX0pOihPYmplY3QuYXNzaWduKHRoaXMsZ2V0T2JqZWN0KCkpLGUuY29va2llcz10aGlzKX19LGRpYWxvZz17aW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWU7dGhpcy5jcmVhdGU9ZS5kaWFsb2c9bW9kYWxGbihRRGlhbG9nLGkpfX0sbG9hZGluZ0Jhcj17c3RhcnQ6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LGluY3JlbWVudDpmdW5jdGlvbigpe30saW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWUscz10LmNmZztpZihpc1NTUillLmxvYWRpbmdCYXI9dGhpcztlbHNle3ZhciBuPWUubG9hZGluZ0Jhcj1uZXcgaSh7cmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFFBamF4QmFyLHtyZWY6XCJiYXJcIixwcm9wczpzLmxvYWRpbmdCYXJ9KX19KS4kbW91bnQoKS4kcmVmcy5iYXI7T2JqZWN0LmFzc2lnbih0aGlzLHtzdGFydDpuLnN0YXJ0LHN0b3A6bi5zdG9wLGluY3JlbWVudDpuLmluY3JlbWVudH0pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZS5sb2FkaW5nQmFyLiRwYXJlbnQuJGVsKX19fSxwcm9wcz17fSxkZWZhdWx0cz17ZGVsYXk6MCxtZXNzYWdlOiExLHNwaW5uZXJTaXplOjgwLHNwaW5uZXJDb2xvcjpcIndoaXRlXCIsbWVzc2FnZUNvbG9yOlwid2hpdGVcIixzcGlubmVyOlFTcGlubmVyLGN1c3RvbUNsYXNzOiExfSxzdGF0aWNDbGFzcz1cInEtbG9hZGluZyBhbmltYXRlLWZhZGUgZnVsbHNjcmVlbiBjb2x1bW4gZmxleC1jZW50ZXIgei1tYXhcIixsb2FkaW5nPXtpc0FjdGl2ZTohMSxzaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aXNTU1J8fChcInN0cmluZ1wiPT10eXBlb2YocHJvcHM9T2JqZWN0LmFzc2lnbih7fSxkZWZhdWx0cyx0KSkuY3VzdG9tQ2xhc3MmJihwcm9wcy5jdXN0b21DbGFzcz1wcm9wcy5jdXN0b21DbGFzcy50cmltKCkpLHRoaXMuaXNBY3RpdmU/dm0mJnZtLiRmb3JjZVVwZGF0ZSgpOih0aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aW1lb3V0PW51bGw7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcIndpdGgtbG9hZGluZ1wiKSx2bT1uZXcgZS5fX1Z1ZSh7bmFtZTpcIlFMb2FkaW5nXCIsZWw6dCxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6c3RhdGljQ2xhc3MsY2xhc3M6cHJvcHMuY3VzdG9tQ2xhc3N9LFt0KHByb3BzLnNwaW5uZXIse3Byb3BzOntjb2xvcjpwcm9wcy5zcGlubmVyQ29sb3Isc2l6ZTpwcm9wcy5zcGlubmVyU2l6ZX19KSxwcm9wcy5tZXNzYWdlP3QoXCJkaXZcIix7Y2xhc3M6XCJ0ZXh0LVwiK3Byb3BzLm1lc3NhZ2VDb2xvcixkb21Qcm9wczp7aW5uZXJIVE1MOnByb3BzLm1lc3NhZ2V9fSk6bnVsbF0pfX0pfSxwcm9wcy5kZWxheSksdGhpcy5pc0FjdGl2ZT0hMCkpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5pc0FjdGl2ZSYmKHRpbWVvdXQ/KGNsZWFyVGltZW91dCh0aW1lb3V0KSx0aW1lb3V0PW51bGwpOih2bS4kZGVzdHJveSgpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIndpdGgtbG9hZGluZ1wiKSx2bS4kZWwucmVtb3ZlKCksdm09bnVsbCksdGhpcy5pc0FjdGl2ZT0hMSl9LHNldERlZmF1bHRzOmZ1bmN0aW9uKHQpe09iamVjdC5hc3NpZ24oZGVmYXVsdHMsdCl9LF9fVnVlOm51bGwsaW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWUscz10LmNmZy5sb2FkaW5nO3MmJnRoaXMuc2V0RGVmYXVsdHMocyksZS5sb2FkaW5nPXRoaXMsdGhpcy5fX1Z1ZT1pfX07ZnVuY3Rpb24gbm9ybWFsaXplKHQpe3QudGl0bGUmJih0LnRpdGxlPXQudGl0bGVUZW1wbGF0ZT90LnRpdGxlVGVtcGxhdGUodC50aXRsZXx8XCJcIik6dC50aXRsZSxkZWxldGUgdC50aXRsZVRlbXBsYXRlKSxbW1wibWV0YVwiLFwiY29udGVudFwiXSxbXCJsaW5rXCIsXCJocmVmXCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPXRbZVswXV0scz1lWzFdO2Zvcih2YXIgbiBpbiBpKXt2YXIgbz1pW25dO28udGVtcGxhdGUmJigxPT09T2JqZWN0LmtleXMobykubGVuZ3RoP2RlbGV0ZSBpW25dOihvW3NdPW8udGVtcGxhdGUob1tzXXx8XCJcIiksZGVsZXRlIG8udGVtcGxhdGUpKX19KX1mdW5jdGlvbiBjaGFuZ2VkKHQsZSl7aWYoT2JqZWN0LmtleXModCkubGVuZ3RoIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgaSBpbiB0KWlmKHRbaV0hPT1lW2ldKXJldHVybiEwfWZ1bmN0aW9uIGJvZHlGaWx0ZXIodCl7cmV0dXJuIVtcImNsYXNzXCIsXCJzdHlsZVwiXS5pbmNsdWRlcyh0KX1mdW5jdGlvbiBodG1sRmlsdGVyKHQpe3JldHVybiFbXCJsYW5nXCIsXCJkaXJcIl0uaW5jbHVkZXModCl9ZnVuY3Rpb24gZGlmZih0LGUpe3ZhciBpPXt9LHM9e307cmV0dXJuIHQ/KHQudGl0bGUhPT1lLnRpdGxlJiYoaS50aXRsZT1lLnRpdGxlKSxbXCJtZXRhXCIsXCJsaW5rXCIsXCJzY3JpcHRcIixcImh0bWxBdHRyXCIsXCJib2R5QXR0clwiXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvPXRbbl0scj1lW25dO2lmKHNbbl09W10sbyl7Zm9yKHZhciBhIGluIGlbbl09e30sbylyLmhhc093blByb3BlcnR5KGEpfHxzW25dLnB1c2goYSk7Zm9yKHZhciBsIGluIHIpby5oYXNPd25Qcm9wZXJ0eShsKT9jaGFuZ2VkKG9bbF0scltsXSkmJihzW25dLnB1c2gobCksaVtuXVtsXT1yW2xdKTppW25dW2xdPXJbbF19ZWxzZSBpW25dPXJ9KSx7YWRkOmkscmVtb3ZlOnN9KTp7YWRkOmUscmVtb3ZlOnN9fWZ1bmN0aW9uIGFwcGx5KHQpe3ZhciBlPXQuYWRkLGk9dC5yZW1vdmU7ZS50aXRsZSYmKGRvY3VtZW50LnRpdGxlPWUudGl0bGUpLE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoW1wibWV0YVwiLFwibGlua1wiLFwic2NyaXB0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RvY3VtZW50LmhlYWQucXVlcnlTZWxlY3Rvcih0KydbZGF0YS1xbWV0YT1cIicrZSsnXCJdJykucmVtb3ZlKCl9KX0pLGkuaHRtbEF0dHIuZmlsdGVyKGh0bWxGaWx0ZXIpLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0KX0pLGkuYm9keUF0dHIuZmlsdGVyKGJvZHlGaWx0ZXIpLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUodCl9KSksW1wibWV0YVwiLFwibGlua1wiLFwic2NyaXB0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9ZVt0XTtmb3IodmFyIHMgaW4gaSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtmb3IodmFyIG8gaW4gaVtzXSlcImlubmVySFRNTFwiIT09byYmbi5zZXRBdHRyaWJ1dGUobyxpW3NdW29dKTtuLnNldEF0dHJpYnV0ZShcImRhdGEtcW1ldGFcIixzKSxcInNjcmlwdFwiPT09dCYmKG4uaW5uZXJIVE1MPWlbc10uaW5uZXJIVE1MfHxcIlwiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG4pfX0pLE9iamVjdC5rZXlzKGUuaHRtbEF0dHIpLmZpbHRlcihodG1sRmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUodCxlLmh0bWxBdHRyW3RdfHxcIlwiKX0pLE9iamVjdC5rZXlzKGUuYm9keUF0dHIpLmZpbHRlcihib2R5RmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKHQsZS5ib2R5QXR0clt0XXx8XCJcIil9KX1mdW5jdGlvbiBwYXJzZU1ldGEodCxlKXtpZighdC5faW5hY3RpdmUpe3ZhciBpPXQuJG9wdGlvbnMubWV0YTtpJiYoZXh0ZW5kKCEwLGUsdC5fX3FNZXRhKSxpLnN0b3BQcm9wYWdhdGlvbil8fHQuJGNoaWxkcmVuJiZ0LiRjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3BhcnNlTWV0YSh0LGUpfSl9fWZ1bmN0aW9uIHVwZGF0ZUNsaWVudCgpe2lmKHNzclRha2VvdmVyKXJldHVybiBzc3JUYWtlb3Zlcj0hMSx0aGlzLiRyb290Ll9fY3VycmVudE1ldGE9d2luZG93Ll9fUV9NRVRBX18sdm9pZCBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoXCJzY3JpcHRbZGF0YS1xbWV0YS1pbml0XVwiKS5yZW1vdmUoKTt2YXIgdD17dGl0bGU6XCJcIix0aXRsZVRlbXBsYXRlOm51bGwsbWV0YTp7fSxsaW5rOnt9LHNjcmlwdDp7fSxodG1sQXR0cjp7fSxib2R5QXR0cjp7fX07cGFyc2VNZXRhKHRoaXMuJHJvb3QsdCksbm9ybWFsaXplKHQpLGFwcGx5KGRpZmYodGhpcy4kcm9vdC5fX2N1cnJlbnRNZXRhLHQpKSx0aGlzLiRyb290Ll9fY3VycmVudE1ldGE9dH1mdW5jdGlvbiBnZXRBdHRyKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT10W2VdO3JldHVybiBlKyh2b2lkIDAhPT1pPyc9XCInK2krJ1wiJzpcIlwiKX19ZnVuY3Rpb24gZ2V0SGVhZCh0KXt2YXIgZT1cIlwiO3JldHVybiB0LnRpdGxlJiYoZSs9XCI8dGl0bGU+XCIrdC50aXRsZStcIjwvdGl0bGU+XCIpLFtcIm1ldGFcIixcImxpbmtcIixcInNjcmlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPXRbaV07Zm9yKHZhciBuIGluIHMpe3ZhciBvPU9iamVjdC5rZXlzKHNbbl0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm5cImlubmVySFRNTFwiIT09dH0pLm1hcChnZXRBdHRyKHNbbl0pKTtlKz1cIjxcIitpK1wiIFwiK28uam9pbihcIiBcIikrJyBkYXRhLXFtZXRhPVwiJytuKydcIj4nLFwic2NyaXB0XCI9PT1pJiYoZSs9KHNbbl0uaW5uZXJIVE1MfHxcIlwiKStcIjxcXC9zY3JpcHQ+XCIpfX0pLGV9ZnVuY3Rpb24gZ2V0U2VydmVyTWV0YSh0LGUpe3ZhciBpPXt0aXRsZTpcIlwiLHRpdGxlVGVtcGxhdGU6bnVsbCxtZXRhOnt9LGxpbms6e30saHRtbEF0dHI6e30sYm9keUF0dHI6e30sbm9zY3JpcHQ6e319O3BhcnNlTWV0YSh0LGkpLG5vcm1hbGl6ZShpKTt2YXIgcz17XCIlJVFfSFRNTF9BVFRSUyUlXCI6T2JqZWN0LmtleXMoaS5odG1sQXR0cikuZmlsdGVyKGh0bWxGaWx0ZXIpLm1hcChnZXRBdHRyKGkuaHRtbEF0dHIpKS5qb2luKFwiIFwiKSxcIiUlUV9IRUFEX1RBR1MlJVwiOmdldEhlYWQoaSksXCIlJVFfQk9EWV9BVFRSUyUlXCI6T2JqZWN0LmtleXMoaS5ib2R5QXR0cikuZmlsdGVyKGJvZHlGaWx0ZXIpLm1hcChnZXRBdHRyKGkuYm9keUF0dHIpKS5qb2luKFwiIFwiKSxcIiUlUV9CT0RZX1RBR1MlJVwiOk9iamVjdC5rZXlzKGkubm9zY3JpcHQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4nPG5vc2NyaXB0IGRhdGEtcW1ldGE9XCInK3QrJ1wiPicraS5ub3NjcmlwdFt0XStcIjwvbm9zY3JpcHQ+XCJ9KS5qb2luKFwiXCIpK1wiPHNjcmlwdCBkYXRhLXFtZXRhLWluaXQ+d2luZG93Ll9fUV9NRVRBX189XCIrKGRlbGV0ZSBpLm5vc2NyaXB0JiZKU09OLnN0cmluZ2lmeShpKSkrXCI8XFwvc2NyaXB0PlwifTtyZXR1cm4gT2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtlPWUucmVwbGFjZSh0LHNbdF0pfSksZX1mdW5jdGlvbiBiZWZvcmVDcmVhdGUoKXt0aGlzLiRvcHRpb25zLm1ldGEmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLiRvcHRpb25zLm1ldGE/KHRoaXMuJG9wdGlvbnMuY29tcHV0ZWR8fCh0aGlzLiRvcHRpb25zLmNvbXB1dGVkPXt9KSx0aGlzLiRvcHRpb25zLmNvbXB1dGVkLl9fcU1ldGE9dGhpcy4kb3B0aW9ucy5tZXRhKTp0aGlzLl9fcU1ldGE9dGhpcy4kb3B0aW9ucy5tZXRhKX1mdW5jdGlvbiB0cmlnZ2VyTWV0YSgpe3RoaXMuJG9wdGlvbnMubWV0YSYmdGhpcy5fX3FNZXRhVXBkYXRlKCl9dmFyIG1ldGE9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC5xdWV1ZXMsaT10LlZ1ZTtpc1NTUj8oaS5wcm90b3R5cGUuJGdldE1ldGFIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZ2V0U2VydmVyTWV0YSh0LGUpfX0saS5taXhpbih7YmVmb3JlQ3JlYXRlOmJlZm9yZUNyZWF0ZX0pLGUuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXtlLnNzci5RX0hUTUxfQVRUUlMrPVwiICUlUV9IVE1MX0FUVFJTJSVcIixPYmplY3QuYXNzaWduKGUuc3NyLHtRX0hFQURfVEFHUzpcIiUlUV9IRUFEX1RBR1MlJVwiLFFfQk9EWV9BVFRSUzpcIiUlUV9CT0RZX0FUVFJTJSVcIixRX0JPRFlfVEFHUzpcIiUlUV9CT0RZX1RBR1MlJVwifSl9KSk6KHNzclRha2VvdmVyPWZyb21TU1IsaS5taXhpbih7YmVmb3JlQ3JlYXRlOmJlZm9yZUNyZWF0ZSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kb3B0aW9ucy5tZXRhJiYodGhpcy5fX3FNZXRhVW53YXRjaD10aGlzLiR3YXRjaChcIl9fcU1ldGFcIix0aGlzLl9fcU1ldGFVcGRhdGUpKX0sYWN0aXZhdGVkOnRyaWdnZXJNZXRhLGRlYWN0aXZhdGVkOnRyaWdnZXJNZXRhLGJlZm9yZU1vdW50OnRyaWdnZXJNZXRhLGRlc3Ryb3llZDpmdW5jdGlvbigpe3RoaXMuJG9wdGlvbnMubWV0YSYmKHRoaXMuX19xTWV0YVVud2F0Y2goKSx0aGlzLl9fcU1ldGFVcGRhdGUoKSl9LG1ldGhvZHM6e19fcU1ldGFVcGRhdGU6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodXBkYXRlSWQpLHVwZGF0ZUlkPXNldFRpbWVvdXQodXBkYXRlQ2xpZW50LmJpbmQodGhpcyksNTApfX19KSl9fSxkZWZhdWx0cyQxPXt9LHBvc2l0aW9uTGlzdD1bXCJ0b3AtbGVmdFwiLFwidG9wLXJpZ2h0XCIsXCJib3R0b20tbGVmdFwiLFwiYm90dG9tLXJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIixcImNlbnRlclwiXTtmdW5jdGlvbiBpbml0KHQpe3ZhciBlPXQuVnVlLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLHRoaXMuX192bT1uZXcgZSh7bmFtZTpcIlFOb3RpZmljYXRpb25zXCIsZGF0YTp7bm90aWZzOntjZW50ZXI6W10sbGVmdDpbXSxyaWdodDpbXSx0b3A6W10sXCJ0b3AtbGVmdFwiOltdLFwidG9wLXJpZ2h0XCI6W10sYm90dG9tOltdLFwiYm90dG9tLWxlZnRcIjpbXSxcImJvdHRvbS1yaWdodFwiOltdfX0sbWV0aG9kczp7YWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJOb3RpZnk6IHBhcmFtZXRlciByZXF1aXJlZFwiKSwhMTt2YXIgaT1PYmplY3QuYXNzaWduKHt9LGRlZmF1bHRzJDEsXCJzdHJpbmdcIj09dHlwZW9mIHQ/e21lc3NhZ2U6dH06Y2xvbmUodCkpO2lmKGkucG9zaXRpb24pe2lmKCFwb3NpdGlvbkxpc3QuaW5jbHVkZXMoaS5wb3NpdGlvbikpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJOb3RpZnk6IHdyb25nIHBvc2l0aW9uOiBcIitpLnBvc2l0aW9uKSwhMX1lbHNlIGkucG9zaXRpb249XCJib3R0b21cIjtpZihpLl9fdWlkPXVpZCgpLHZvaWQgMD09PWkudGltZW91dClpLnRpbWVvdXQ9NWUzO2Vsc2V7dmFyIHM9cGFyc2VJbnQoaS50aW1lb3V0LDEwKTtpZihpc05hTihzKXx8czwwKXJldHVybiBjb25zb2xlLmVycm9yKFwiTm90aWZ5OiB3cm9uZyB0aW1lb3V0OiBcIitpLnRpbWVvdXQpLCExO2kudGltZW91dD1zfXZhciBuPWZ1bmN0aW9uKCl7ZS5yZW1vdmUoaSl9O2lmKHQuYWN0aW9ucyYmKGkuYWN0aW9ucz10LmFjdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFuZGxlcixpPWNsb25lKHQpO3JldHVybiBpLmhhbmRsZXI9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbigpe2UoKSwhdC5ub0Rpc21pc3MmJm4oKX06ZnVuY3Rpb24oKXtyZXR1cm4gbigpfSxpfSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQub25EaXNtaXNzJiYoaS5vbkRpc21pc3M9dC5vbkRpc21pc3MpLGkuY2xvc2VCdG4pe3ZhciBvPVt7Y2xvc2VCdG46ITAsbGFiZWw6aS5jbG9zZUJ0bixoYW5kbGVyOm59XTtpLmFjdGlvbnM9aS5hY3Rpb25zP2kuYWN0aW9ucy5jb25jYXQobyk6b31pLnRpbWVvdXQ+MCYmKGkuX190aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuKCl9LGkudGltZW91dCsxZTMpKTt2YXIgcj1pLnBvc2l0aW9uLmluZGV4T2YoXCJ0b3BcIik+LTE/XCJ1bnNoaWZ0XCI6XCJwdXNoXCI7cmV0dXJuIHRoaXMubm90aWZzW2kucG9zaXRpb25dW3JdKGkpLG59LHJlbW92ZTpmdW5jdGlvbih0KXt0Ll9fdGltZW91dCYmY2xlYXJUaW1lb3V0KHQuX190aW1lb3V0KTt2YXIgZT10aGlzLm5vdGlmc1t0LnBvc2l0aW9uXS5pbmRleE9mKHQpO2lmKC0xIT09ZSl7dmFyIGk9dGhpcy4kcmVmc1tcIm5vdGlmX1wiK3QuX191aWRdO2lmKGkmJmkuJGVsKXt2YXIgcz1pLiRlbDtzLnN0eWxlLmxlZnQ9cy5vZmZzZXRMZWZ0K1wicHhcIixzLnN0eWxlLndpZHRoPWdldENvbXB1dGVkU3R5bGUocykud2lkdGh9dGhpcy5ub3RpZnNbdC5wb3NpdGlvbl0uc3BsaWNlKGUsMSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5vbkRpc21pc3MmJnQub25EaXNtaXNzKCl9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW5vdGlmaWNhdGlvbnNcIn0scG9zaXRpb25MaXN0Lm1hcChmdW5jdGlvbihpKXt2YXIgcz1bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLmluY2x1ZGVzKGkpP1wiY2VudGVyXCI6aS5pbmRleE9mKFwidG9wXCIpPi0xP1widG9wXCI6XCJib3R0b21cIixuPWkuaW5kZXhPZihcImxlZnRcIik+LTE/XCJzdGFydFwiOmkuaW5kZXhPZihcInJpZ2h0XCIpPi0xP1wiZW5kXCI6XCJjZW50ZXJcIixvPVtcImxlZnRcIixcInJpZ2h0XCJdLmluY2x1ZGVzKGkpP1wiaXRlbXMtXCIrKFwibGVmdFwiPT09aT9cInN0YXJ0XCI6XCJlbmRcIikrXCIganVzdGlmeS1jZW50ZXJcIjpcImNlbnRlclwiPT09aT9cImZsZXgtY2VudGVyXCI6XCJpdGVtcy1cIituO3JldHVybiB0KFwidHJhbnNpdGlvbi1ncm91cFwiLHtrZXk6aSxzdGF0aWNDbGFzczpcInEtbm90aWZpY2F0aW9uLWxpc3QgcS1ub3RpZmljYXRpb24tbGlzdC1cIitzK1wiIGZpeGVkIGNvbHVtbiBcIitvLHRhZzpcImRpdlwiLHByb3BzOntuYW1lOlwicS1ub3RpZmljYXRpb24tXCIraSxtb2RlOlwib3V0LWluXCJ9fSxlLm5vdGlmc1tpXS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQoUUFsZXJ0LHtyZWY6XCJub3RpZl9cIitlLl9fdWlkLGtleTplLl9fdWlkLHN0YXRpY0NsYXNzOlwicS1ub3RpZmljYXRpb25cIixwcm9wczplfSxbZS5tZXNzYWdlXSl9KSl9KSl9fSksdGhpcy5fX3ZtLiRtb3VudChpKX12YXIgbm90aWZ5PXtjcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGlzU1NSP2Z1bmN0aW9uKCl7fTp0aGlzLl9fdm0uYWRkKHQpfSxzZXREZWZhdWx0czpmdW5jdGlvbih0KXtPYmplY3QuYXNzaWduKGRlZmF1bHRzJDEsdCl9LGluc3RhbGw6ZnVuY3Rpb24odCl7aWYoaXNTU1IpcmV0dXJuIHQuJHEubm90aWZ5PWZ1bmN0aW9uKCl7fSx2b2lkKHQuJHEubm90aWZ5LnNldERlZmF1bHRzPWZ1bmN0aW9uKCl7fSk7aW5pdC5jYWxsKHRoaXMsdCksdC5jZmcubm90aWZ5JiZ0aGlzLnNldERlZmF1bHRzKHQuY2ZnLm5vdGlmeSksdC4kcS5ub3RpZnk9dGhpcy5jcmVhdGUuYmluZCh0aGlzKSx0LiRxLm5vdGlmeS5zZXREZWZhdWx0cz10aGlzLnNldERlZmF1bHRzfX0sU0laRV9MSVNUPVtcInNtXCIsXCJtZFwiLFwibGdcIixcInhsXCJdLHNjcmVlbj17d2lkdGg6MCxzaXplczp7c206NTc2LG1kOjc2OCxsZzo5OTIseGw6MTIwMH0sbHQ6e3NtOiEwLG1kOiEwLGxnOiEwLHhsOiEwfSxndDp7fSx4czohMCxzZXRTaXplczpmdW5jdGlvbigpe30sc2V0RGVib3VuY2U6ZnVuY3Rpb24oKXt9LGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQuJHEscz10LnF1ZXVlcyxuPXQuVnVlO2lmKGlzU1NSKWkuc2NyZWVuPXRoaXM7ZWxzZXt2YXIgbyxyLGE9ZnVuY3Rpb24odCl7dmFyIGk9d2luZG93LmlubmVyV2lkdGgscz1lLnNpemVzO3QmJmk9PT1lLndpZHRofHwoZS53aWR0aD1pLGUuZ3QueHM9aT49cy5zbSxlLmd0LnNtPWk+PXMubWQsZS5ndC5tZD1pPj1zLmxnLGUuZ3QubGc9aT49cy54bCxlLmx0LnNtPWk8cy5zbSxlLmx0Lm1kPWk8cy5tZCxlLmx0LmxnPWk8cy5sZyxlLmx0LnhsPWk8cy54bCxlLnhzPWUubHQuc20sZS5zbT1lLmd0LnhzJiZlLmx0Lm1kLGUubWQ9ZS5ndC5zbSYmZS5sdC5sZyxlLmxnPWUuZ3QubWQmJmUubHQueGwsZS54bD1pPnMueGwpfSxsPXt9O3RoaXMuc2V0U2l6ZXM9ZnVuY3Rpb24odCl7U0laRV9MSVNULmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXSYmKGxbZV09dFtlXSl9KX0sdGhpcy5zZXREZWJvdW5jZT1mdW5jdGlvbih0KXtyPXR9O3ZhciBjPWZ1bmN0aW9uKCl7dmFyIHQ9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTt0LmdldFByb3BlcnR5VmFsdWUoXCItLXEtc2l6ZS1zbVwiKSYmU0laRV9MSVNULmZvckVhY2goZnVuY3Rpb24oaSl7ZS5zaXplc1tpXT1wYXJzZUludCh0LmdldFByb3BlcnR5VmFsdWUoXCItLXEtc2l6ZS1cIitpKSwxMCl9KSxlLnNldFNpemVzPWZ1bmN0aW9uKHQpe1NJWkVfTElTVC5mb3JFYWNoKGZ1bmN0aW9uKGkpe3RbaV0mJihlLnNpemVzW2ldPXRbaV0pfSksYSgpfSxlLnNldERlYm91bmNlPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7YSghMCl9O28mJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsbyxsaXN0ZW5PcHRzLnBhc3NpdmUpLG89dD4wP2RlYm91bmNlKGUsdCk6ZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG8sbGlzdGVuT3B0cy5wYXNzaXZlKX0sZS5zZXREZWJvdW5jZShyfHwxMDApLE9iamVjdC5rZXlzKGwpLmxlbmd0aD4wPyhlLnNldFNpemVzKGwpLGw9bnVsbCk6YSgpfTtmcm9tU1NSP3MudGFrZW92ZXIucHVzaChjKTpjKCksbi51dGlsLmRlZmluZVJlYWN0aXZlKGksXCJzY3JlZW5cIix0aGlzKX19fTtmdW5jdGlvbiBlbmNvZGUkMSh0KXtyZXR1cm5cIltvYmplY3QgRGF0ZV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT9cIl9fcV9kYXRlfFwiK3QudG9VVENTdHJpbmcoKTpcIltvYmplY3QgUmVnRXhwXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpP1wiX19xX2V4cHJ8XCIrdC5zb3VyY2U6XCJudW1iZXJcIj09dHlwZW9mIHQ/XCJfX3FfbnVtYnxcIit0OlwiYm9vbGVhblwiPT10eXBlb2YgdD9cIl9fcV9ib29sfFwiKyh0P1wiMVwiOlwiMFwiKTpcInN0cmluZ1wiPT10eXBlb2YgdD9cIl9fcV9zdHJufFwiK3Q6XCJmdW5jdGlvblwiPT10eXBlb2YgdD9cIl9fcV9zdHJufFwiK3QudG9TdHJpbmcoKTp0PT09T2JqZWN0KHQpP1wiX19xX29ianR8XCIrSlNPTi5zdHJpbmdpZnkodCk6dH1mdW5jdGlvbiBkZWNvZGUkMSh0KXt2YXIgZSxpO2lmKHQubGVuZ3RoPDkpcmV0dXJuIHQ7c3dpdGNoKGU9dC5zdWJzdHIoMCw4KSxpPXQuc3Vic3RyaW5nKDkpLGUpe2Nhc2VcIl9fcV9kYXRlXCI6cmV0dXJuIG5ldyBEYXRlKGkpO2Nhc2VcIl9fcV9leHByXCI6cmV0dXJuIG5ldyBSZWdFeHAoaSk7Y2FzZVwiX19xX251bWJcIjpyZXR1cm4gTnVtYmVyKGkpO2Nhc2VcIl9fcV9ib29sXCI6cmV0dXJuIEJvb2xlYW4oXCIxXCI9PT1pKTtjYXNlXCJfX3Ffc3RyblwiOnJldHVyblwiXCIraTtjYXNlXCJfX3Ffb2JqdFwiOnJldHVybiBKU09OLnBhcnNlKGkpO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGdldEVtcHR5U3RvcmFnZSgpe3ZhciB0PWZ1bmN0aW9uKCl7fTtyZXR1cm57aGFzOnQsZ2V0OntsZW5ndGg6dCxpdGVtOnQsaW5kZXg6dCxhbGw6dH0sc2V0OnQscmVtb3ZlOnQsY2xlYXI6dCxpc0VtcHR5OnR9fWZ1bmN0aW9uIGdldFN0b3JhZ2UodCl7dmFyIGU9d2luZG93W3QrXCJTdG9yYWdlXCJdLGk9ZnVuY3Rpb24odCl7dmFyIGk9ZS5nZXRJdGVtKHQpO3JldHVybiBpP2RlY29kZSQxKGkpOm51bGx9O3JldHVybntoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT1lLmdldEl0ZW0odCl9LGdldDp7bGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVuZ3RofSxpdGVtOmksaW5kZXg6ZnVuY3Rpb24odCl7aWYodDxlLmxlbmd0aClyZXR1cm4gaShlLmtleSh0KSl9LGFsbDpmdW5jdGlvbigpe2Zvcih2YXIgdCxzPXt9LG49ZS5sZW5ndGgsbz0wO288bjtvKyspc1t0PWUua2V5KG8pXT1pKHQpO3JldHVybiBzfX0sc2V0OmZ1bmN0aW9uKHQsaSl7ZS5zZXRJdGVtKHQsZW5jb2RlJDEoaSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7ZS5yZW1vdmVJdGVtKHQpfSxjbGVhcjpmdW5jdGlvbigpe2UuY2xlYXIoKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiAwPT09ZS5sZW5ndGh9fX12YXIgbG9jYWxTdG9yYWdlPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT1pc1NTUnx8IWhhc1dlYlN0b3JhZ2U/Z2V0RW1wdHlTdG9yYWdlKCk6Z2V0U3RvcmFnZShcImxvY2FsXCIpO2UubG9jYWxTdG9yYWdlPWksT2JqZWN0LmFzc2lnbih0aGlzLGkpfX0sc2Vzc2lvblN0b3JhZ2U9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPWlzU1NSfHwhaGFzV2ViU3RvcmFnZT9nZXRFbXB0eVN0b3JhZ2UoKTpnZXRTdG9yYWdlKFwic2Vzc2lvblwiKTtlLnNlc3Npb25TdG9yYWdlPWksT2JqZWN0LmFzc2lnbih0aGlzLGkpfX0scGx1Z2lucz1PYmplY3QuZnJlZXplKHtBY3Rpb25TaGVldDphY3Rpb25TaGVldCxBZGRyZXNzYmFyQ29sb3I6YWRkcmVzc2JhckNvbG9yLEFwcEZ1bGxzY3JlZW46YXBwRnVsbHNjcmVlbixBcHBWaXNpYmlsaXR5OmFwcFZpc2liaWxpdHksQ29va2llczpjb29raWVzLERpYWxvZzpkaWFsb2csTG9hZGluZ0Jhcjpsb2FkaW5nQmFyLExvYWRpbmc6bG9hZGluZyxNZXRhOm1ldGEsTm90aWZ5Om5vdGlmeSxQbGF0Zm9ybTpQbGF0Zm9ybSxTY3JlZW46c2NyZWVuLExvY2FsU3RvcmFnZTpsb2NhbFN0b3JhZ2UsU2Vzc2lvblN0b3JhZ2U6c2Vzc2lvblN0b3JhZ2V9KTtmdW5jdGlvbiBvcGVuVXJsKHQsZSl7aWYoUGxhdGZvcm0uaXMuY29yZG92YSYmbmF2aWdhdG9yJiZuYXZpZ2F0b3IuYXBwKXJldHVybiBuYXZpZ2F0b3IuYXBwLmxvYWRVcmwodCx7b3BlbkV4dGVybmFsOiEwfSk7dmFyIGk9d2luZG93Lm9wZW4odCxcIl9ibGFua1wiKTtpZihpKXJldHVybiBpLmZvY3VzKCksaTtlJiZlKCl9ZnVuY3Rpb24gbm9vcCgpe312YXIgaW5kZXhfZXNtPU9iamVjdC5hc3NpZ24oe30sVnVlUGx1Z2luLHtpbnN0YWxsOmZ1bmN0aW9uKHQsZSl7VnVlUGx1Z2luLmluc3RhbGwodCxPYmplY3QuYXNzaWduKHt9LHtjb21wb25lbnRzOmNvbXBvbmVudHMkMSxkaXJlY3RpdmVzOmRpcmVjdGl2ZXMscGx1Z2luczpwbHVnaW5zfSxlKSl9fSk7ZXhwb3J0IGRlZmF1bHQgaW5kZXhfZXNtO2V4cG9ydHtRQWN0aW9uU2hlZXQsUUFqYXhCYXIsUUFsZXJ0LFFBdXRvY29tcGxldGUsUUJyZWFkY3J1bWJzLFFCcmVhZGNydW1ic0VsLFFCdG4sUUJ0bkdyb3VwLFFCdG5Ecm9wZG93bixRQnRuVG9nZ2xlLFFDYXJkLFFDYXJkVGl0bGUsUUNhcmRNYWluLFFDYXJkQWN0aW9ucyxRQ2FyZE1lZGlhLFFDYXJkU2VwYXJhdG9yLFFDYXJvdXNlbCxRQ2Fyb3VzZWxTbGlkZSxRQ2Fyb3VzZWxDb250cm9sLFFDaGF0TWVzc2FnZSxRQ2hlY2tib3gsUUNoaXAsUUNoaXBzSW5wdXQsUUNvbGxhcHNpYmxlLFFDb2xvcixRQ29sb3JQaWNrZXIsUUNvbnRleHRNZW51LFFEYXRldGltZSxRRGF0ZXRpbWVQaWNrZXIsUURpYWxvZyxRRWRpdG9yLFFGYWIsUUZhYkFjdGlvbixRRmllbGQsUUljb24sUUluZmluaXRlU2Nyb2xsLFFJbm5lckxvYWRpbmcsUUlucHV0LFFJbnB1dEZyYW1lLFFKdW1ib3Ryb24sUUtub2IsUUxheW91dCxRTGF5b3V0RHJhd2VyLFFMYXlvdXRGb290ZXIsUUxheW91dEhlYWRlcixRUGFnZSxRUGFnZUNvbnRhaW5lcixRUGFnZVN0aWNreSxRSXRlbSxRSXRlbVNlcGFyYXRvcixRSXRlbU1haW4sUUl0ZW1TaWRlLFFJdGVtVGlsZSxRSXRlbVdyYXBwZXIsUUxpc3QsUUxpc3RIZWFkZXIsUU1vZGFsLFFNb2RhbExheW91dCxRTm9Tc3IsUVJlc2l6ZU9ic2VydmFibGUsUVNjcm9sbE9ic2VydmFibGUsUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGUsUU9wdGlvbkdyb3VwLFFQYWdpbmF0aW9uLFFQYXJhbGxheCxRUG9wb3ZlcixRUG9wdXBFZGl0LFFQcm9ncmVzcyxRUHVsbFRvUmVmcmVzaCxRUmFkaW8sUVJhbmdlLFFSYXRpbmcsUVNjcm9sbEFyZWEsUVNlYXJjaCxRU2VsZWN0LFFTbGlkZVRyYW5zaXRpb24sUVNsaWRlcixRU3Bpbm5lcixRU3Bpbm5lckF1ZGlvLFFTcGlubmVyQmFsbCxRU3Bpbm5lckJhcnMsUVNwaW5uZXJDaXJjbGVzLFFTcGlubmVyQ29tbWVudCxRU3Bpbm5lckN1YmUsUVNwaW5uZXJEb3RzLFFTcGlubmVyRmFjZWJvb2ssUVNwaW5uZXJHZWFycyxRU3Bpbm5lckdyaWQsUVNwaW5uZXJIZWFydHMsUVNwaW5uZXJIb3VyZ2xhc3MsUVNwaW5uZXJJbmZpbml0eSxRU3Bpbm5lcl9pb3MgYXMgUVNwaW5uZXJJb3MsRGVmYXVsdFNwaW5uZXIgYXMgUVNwaW5uZXJNYXQsUVNwaW5uZXJPdmFsLFFTcGlubmVyUGllLFFTcGlubmVyUHVmZixRU3Bpbm5lclJhZGlvLFFTcGlubmVyUmluZ3MsUVNwaW5uZXJUYWlsLFFTdGVwLFFTdGVwcGVyLFFTdGVwcGVyTmF2aWdhdGlvbixRUm91dGVUYWIsUVRhYixRVGFiUGFuZSxRVGFicyxRVGFibGUsUVRoLFFUcixRVGQsUVRhYmxlQ29sdW1ucyxRVGltZWxpbmUsUVRpbWVsaW5lRW50cnksUVRvZ2dsZSxRVG9vbGJhcixRVG9vbGJhclRpdGxlLFFUb29sdGlwLFFUcmVlLFFVcGxvYWRlcixRVmlkZW8sYmFja1RvVG9wIGFzIEJhY2tUb1RvcCxjbG9zZU92ZXJsYXkgYXMgQ2xvc2VPdmVybGF5LGdvQmFjayBhcyBHb0JhY2ssUmlwcGxlLHNjcm9sbEZpcmUgYXMgU2Nyb2xsRmlyZSxzY3JvbGwkMSBhcyBTY3JvbGwsdG91Y2hIb2xkIGFzIFRvdWNoSG9sZCxUb3VjaFBhbixUb3VjaFN3aXBlLGFjdGlvblNoZWV0IGFzIEFjdGlvblNoZWV0LGFkZHJlc3NiYXJDb2xvciBhcyBBZGRyZXNzYmFyQ29sb3IsYXBwRnVsbHNjcmVlbiBhcyBBcHBGdWxsc2NyZWVuLGFwcFZpc2liaWxpdHkgYXMgQXBwVmlzaWJpbGl0eSxjb29raWVzIGFzIENvb2tpZXMsZGlhbG9nIGFzIERpYWxvZyxsb2FkaW5nQmFyIGFzIExvYWRpbmdCYXIsbG9hZGluZyBhcyBMb2FkaW5nLG1ldGEgYXMgTWV0YSxub3RpZnkgYXMgTm90aWZ5LFBsYXRmb3JtLHNjcmVlbiBhcyBTY3JlZW4sbG9jYWxTdG9yYWdlIGFzIExvY2FsU3RvcmFnZSxzZXNzaW9uU3RvcmFnZSBhcyBTZXNzaW9uU3RvcmFnZSxhbmltYXRlLGNsb25lLGNvbG9ycyxkYXRlLGRlYm91bmNlLGRvbSxlYXNpbmcsZXZlbnQsZXh0ZW5kLGZpbHRlcixmb3JtYXQsZnJhbWVEZWJvdW5jZSxub29wLG9wZW5VcmwgYXMgb3BlblVSTCxzY3JvbGwsdGhyb3R0bGUsdWlkfTsiLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9xdWFzYXIubWF0LmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjYzYmI0ZDYwXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3F1YXNhci5tYXQuY3NzXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vcXVhc2FyLm1hdC5jc3NcIik7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiYXBwXCIgfSxcbiAgICBbXG4gICAgICBfdm0uX20oMCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4LCBlbW9qaTogXCI6c2FudGE6OnNraW4tdG9uZS0zOlwiLCBzaXplOiAzMiB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleCxcbiAgICAgICAgICAgICAgZW1vamk6IFwic2FudGFcIixcbiAgICAgICAgICAgICAgc2V0OiBcImVtb2ppb25lXCIsXG4gICAgICAgICAgICAgIHNpemU6IDMyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamk6IF92bS5zYW50YUVtb2ppT2JqZWN0LCBzaXplOiAzMiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgICAgX2MoXCJidXR0b25cIiwgeyBvbjogeyBjbGljazogX3ZtLnRvZ2dsZVZpc2libGUgfSB9LCBbXG4gICAgICAgICAgX3ZtLl92KFwiU2hvdyAvIGhpZGUgdGhlIHBpY2tlclwiKVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5zbWlsZSkgfSxcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnRvZ2dsZVZpc2libGUgfVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fbChcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgXCJuYXRpdmVcIixcbiAgICAgICAgICAgICAgXCJhcHBsZVwiLFxuICAgICAgICAgICAgICBcImdvb2dsZVwiLFxuICAgICAgICAgICAgICBcInR3aXR0ZXJcIixcbiAgICAgICAgICAgICAgXCJlbW9qaW9uZVwiLFxuICAgICAgICAgICAgICBcIm1lc3NlbmdlclwiLFxuICAgICAgICAgICAgICBcImZhY2Vib29rXCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmdW5jdGlvbihzZXQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogc2V0LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogX3ZtLmFjdGl2ZVNldCA9PSBzZXQgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uYWN0aXZlU2V0ID0gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3Moc2V0KSArIFwiXFxuICAgICAgXCIpXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXNWaXNpYmxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICAgIHNldDogX3ZtLmFjdGl2ZVNldCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uZW1vamksXG4gICAgICAgICAgICAgICAgICBlbW9qaVRvb2x0aXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgZW1vamlTaXplOiAzMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc2VsZWN0OiBfdm0uc2hvd0Vtb2ppIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW192bS5fdihfdm0uX3MoX3ZtLmVtb2ppc091dHB1dCkpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9tKDEpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiUURpYWxvZyBFeGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwicS1idG5cIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgbGFiZWw6IFwiT3BlbiBRRGlhbG9nXCIgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZW1vamlQaWNrZXJEaWFsb2cgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwicS1kaWFsb2dcIiwge1xuICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYm9keVwiLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIF9jKFwicGlja2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamlTaXplOiAyNCwgbmF0aXZlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJveHk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0pLFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIHZhbHVlOiBfdm0uZW1vamlQaWNrZXJEaWFsb2csXG4gICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyRGlhbG9nID0gJCR2XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImVtb2ppUGlja2VyRGlhbG9nXCJcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJDdXN0b20gU2VhcmNoIEFuZCBQcmV2aWV3IFRlbXBsYXRlcyBFeGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LCBbXG4gICAgICAgIF92bS5fdihcbiAgICAgICAgICAnXFxuICAgIEFsc28gaGVyZSB3ZSB1c2UgXCJTdGF0aWNQaWNrZXJcIiB3aGljaCBkb2VzIG5vdCB1c2UgdmlydHVhbCBzY3JvbGxlciAoaXQgaXNcXG4gICAgc2xvd2VyLCBidXQgZWFzaWVyIHRvIGN1c3RvbWl6ZSB3aXRoIGNzcylcXG4gICdcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiU3RhdGljUGlja2VyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgbmF0aXZlOiB0cnVlIH0sXG4gICAgICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJzZWFyY2hUZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbihzbG90UHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBzbG90UHJvcHMuaTE4bi5zZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzbG90UHJvcHMub25TZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2V5OiBcInByZXZpZXdUZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbihzbG90UHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJFbW9qaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHNsb3RQcm9wcy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IHNsb3RQcm9wcy5lbW9qaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNsb3RQcm9wcy5lbW9qaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwicG9pbnRfdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogc2xvdFByb3BzLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpbjogc2xvdFByb3BzLmVtb2ppUHJvcHMuc2tpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogc2xvdFByb3BzLmVtb2ppUHJvcHMuc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90UHJvcHMuZW1vamlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiflwiICsgc2xvdFByb3BzLmVtb2ppLm5hbWUgKyBcIn5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDaG9vc2UuLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVzXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90UHJvcHMuZW1vamkgPyBzbG90UHJvcHMuZW1vamkuY29sb25zIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdKVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJGaWx0ZXJlZCBwaWNrZXIgZXhhbXBsZVwiKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlBpY2tlclwiLCB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBuYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgIGVtb2ppOiBcImZsYWctdGZcIixcbiAgICAgICAgICAgICAgZW1vamlTaXplOiAxOCxcbiAgICAgICAgICAgICAgZGF0YTogX3ZtLmluZGV4RmlsdGVyZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW1xuICAgICAgX2MoXCJoMVwiLCBbX3ZtLl92KFwiRW1vamkgTWFydCBWdWUg8J+PrFwiKV0pXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3ctc21hbGxcIiB9LCBbXG4gICAgICBfYyhcImlmcmFtZVwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgc3JjOlxuICAgICAgICAgICAgXCJodHRwczovL2doYnRucy5jb20vZ2l0aHViLWJ0bi5odG1sP3VzZXI9c2VyZWJyb3YmcmVwbz1lbW9qaS1tYXJ0LXZ1ZSZ0eXBlPXN0YXImY291bnQ9dHJ1ZVwiLFxuICAgICAgICAgIGZyYW1lQm9yZGVyOiBcIjBcIixcbiAgICAgICAgICBzY3JvbGxpbmc6IFwiMFwiLFxuICAgICAgICAgIHdpZHRoOiBcIjkwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMjBweFwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSlcbiAgfVxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS52aWV3LmNhblJlbmRlclxuICAgID8gX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1lbW9qaVwiLFxuICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBfdm0udmlldy50aXRsZSwgXCJkYXRhLXRpdGxlXCI6IF92bS50aXRsZSB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBtb3VzZWVudGVyOiBfdm0ub25Nb3VzZUVudGVyLFxuICAgICAgICAgICAgbW91c2VsZWF2ZTogX3ZtLm9uTW91c2VMZWF2ZSxcbiAgICAgICAgICAgIGNsaWNrOiBfdm0ub25DbGlja1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0udmlldy5jc3NDbGFzcywgc3R5bGU6IF92bS52aWV3LmNzc1N0eWxlIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnZpZXcuY29udGVudCkpXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0XCIsIHN0eWxlOiBfdm0uY3VzdG9tU3R5bGVzIH0sXG4gICAgW1xuICAgICAgX3ZtLnNob3dDYXRlZ29yaWVzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1hbmNob3JzXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhbmNob3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBfdm0uY29sb3IsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzOiBfdm0uY2F0ZWdvcmllcyxcbiAgICAgICAgICAgICAgICAgIFwiYWN0aXZlLWNhdGVnb3J5XCI6IF92bS5hY3RpdmVDYXRlZ29yeVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbkFuY2hvckNsaWNrIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fdChcbiAgICAgICAgXCJzZWFyY2hUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dTZWFyY2hcbiAgICAgICAgICAgID8gX2MoXCJzZWFyY2hcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogXCJzZWFyY2hcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIFwiYXV0by1mb2N1c1wiOiBfdm0uYXV0b0ZvY3VzLFxuICAgICAgICAgICAgICAgICAgXCJvbi1zZWFyY2hcIjogX3ZtLm9uU2VhcmNoXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBzZWFyY2g6IF92bS5vblNlYXJjaCB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICBpMThuOiBfdm0uaTE4bixcbiAgICAgICAgICBhdXRvRm9jdXM6IF92bS5hdXRvRm9jdXMsXG4gICAgICAgICAgb25TZWFyY2g6IF92bS5vblNlYXJjaFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiY2F0ZWdvcnlcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInNlYXJjaEVtb2ppc1wiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXNlYXJjaC1yZXN1bHRzXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgaWQ6IFwic2VhcmNoXCIsXG4gICAgICAgICAgbmFtZTogXCJTZWFyY2hcIixcbiAgICAgICAgICBlbW9qaXM6IF92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wc1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcIkR5bmFtaWNTY3JvbGxlclwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogIV92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIiFzZWFyY2hFbW9qaXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVmOiBcImR5blNjcm9sbGVyXCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcInNjcm9sbGVyXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaXRlbXM6IF92bS5zY3JvbGxlckNhdGVnb3JpZXMsXG4gICAgICAgICAgXCJtaW4taXRlbS1zaXplXCI6IDYwLFxuICAgICAgICAgIGJ1ZmZlcjogNDAwLFxuICAgICAgICAgIFwia2V5LWZpZWxkXCI6IFwiaWRcIixcbiAgICAgICAgICBcImVtaXQtdXBkYXRlXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgb246IHsgdXBkYXRlOiBfdm0ub25TY3JvbGxVcGRhdGUgfSxcbiAgICAgICAgc2NvcGVkU2xvdHM6IF92bS5fdShbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSByZWYuaXRlbVxuICAgICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVmLmFjdGl2ZVxuICAgICAgICAgICAgICB2YXIgaW5kZXggPSByZWYuaW5kZXhcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiRHluYW1pY1Njcm9sbGVySXRlbVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpdGVtOiBpdGVtLCBhY3RpdmU6IGFjdGl2ZSwgXCJkYXRhLWluZGV4XCI6IGluZGV4IH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiY2F0ZWdvcnlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnNob3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXRlbS5zaG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGtleTogaXRlbS5jYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IFwiY2F0ZWdvcmllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuOiBpdGVtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5jYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppczogaXRlbS5jYXRlZ29yeS5lbW9qaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVtb2ppLXByb3BzXCI6IGl0ZW0uZW1vamlQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl90KFxuICAgICAgICBcInByZXZpZXdUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dQcmV2aWV3XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1wcmV2aWV3XCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInByZXZpZXdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdm0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgZW1vamk6IF92bS5wcmV2aWV3RW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJpZGxlLWVtb2ppXCI6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJzaG93LXNraW4tdG9uZXNcIjogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcInNraW4tcHJvcHNcIjogX3ZtLnNraW5Qcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcIm9uLXNraW4tY2hhbmdlXCI6IF92bS5vblNraW5DaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgdGl0bGU6IF92bS50aXRsZSxcbiAgICAgICAgICBlbW9qaTogX3ZtLnByZXZpZXdFbW9qaSxcbiAgICAgICAgICBpZGxlRW1vamk6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgc2hvd1NraW5Ub25lczogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgZW1vamlQcm9wczogX3ZtLmVtb2ppUHJvcHMsXG4gICAgICAgICAgc2tpblByb3BzOiBfdm0uc2tpblByb3BzLFxuICAgICAgICAgIG9uU2tpbkNoYW5nZTogX3ZtLm9uU2tpbkNoYW5nZVxuICAgICAgICB9XG4gICAgICApXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0IGVtb2ppLW1hcnQtc3RhdGljXCIsIHN0eWxlOiBfdm0uY3VzdG9tU3R5bGVzIH0sXG4gICAgW1xuICAgICAgX3ZtLnNob3dDYXRlZ29yaWVzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1hbmNob3JzXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhbmNob3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBfdm0uY29sb3IsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzOiBfdm0uY2F0ZWdvcmllcyxcbiAgICAgICAgICAgICAgICAgIFwiYWN0aXZlLWNhdGVnb3J5XCI6IF92bS5hY3RpdmVDYXRlZ29yeVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbkFuY2hvckNsaWNrIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fdChcbiAgICAgICAgXCJzZWFyY2hUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dTZWFyY2hcbiAgICAgICAgICAgID8gX2MoXCJzZWFyY2hcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogXCJzZWFyY2hcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIFwiYXV0by1mb2N1c1wiOiBfdm0uYXV0b0ZvY3VzLFxuICAgICAgICAgICAgICAgICAgXCJvbi1zZWFyY2hcIjogX3ZtLm9uU2VhcmNoXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBzZWFyY2g6IF92bS5vblNlYXJjaCB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICBpMThuOiBfdm0uaTE4bixcbiAgICAgICAgICBhdXRvRm9jdXM6IF92bS5hdXRvRm9jdXMsXG4gICAgICAgICAgb25TZWFyY2g6IF92bS5vblNlYXJjaFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcInNjcm9sbFwiLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtc2Nyb2xsXCIsXG4gICAgICAgICAgb246IHsgc2Nyb2xsOiBfdm0ub25TY3JvbGwgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJjYXRlZ29yeVwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VhcmNoRW1vamlzLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VhcmNoRW1vamlzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgaWQ6IFwic2VhcmNoXCIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiU2VhcmNoXCIsXG4gICAgICAgICAgICAgIGVtb2ppczogX3ZtLnNlYXJjaEVtb2ppcyxcbiAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9sKF92bS5maWx0ZXJlZENhdGVnb3JpZXMsIGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXCJjYXRlZ29yeVwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgIV92bS5zZWFyY2hFbW9qaXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKF92bS5pbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkpLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgXCIhc2VhcmNoRW1vamlzICYmIChpbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBhY3RpdmVDYXRlZ29yeSlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAga2V5OiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgcmVmOiBcImNhdGVnb3JpZXNcIixcbiAgICAgICAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5Lm5hbWUsXG4gICAgICAgICAgICAgICAgZW1vamlzOiBjYXRlZ29yeS5lbW9qaXMsXG4gICAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl90KFxuICAgICAgICBcInByZXZpZXdUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dQcmV2aWV3XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1wcmV2aWV3XCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInByZXZpZXdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdm0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgZW1vamk6IF92bS5wcmV2aWV3RW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJpZGxlLWVtb2ppXCI6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJzaG93LXNraW4tdG9uZXNcIjogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcInNraW4tcHJvcHNcIjogX3ZtLnNraW5Qcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcIm9uLXNraW4tY2hhbmdlXCI6IF92bS5vblNraW5DaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgdGl0bGU6IF92bS50aXRsZSxcbiAgICAgICAgICBlbW9qaTogX3ZtLnByZXZpZXdFbW9qaSxcbiAgICAgICAgICBpZGxlRW1vamk6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgc2hvd1NraW5Ub25lczogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgZW1vamlQcm9wczogX3ZtLmVtb2ppUHJvcHMsXG4gICAgICAgICAgc2tpblByb3BzOiBfdm0uc2tpblByb3BzLFxuICAgICAgICAgIG9uU2tpbkNoYW5nZTogX3ZtLm9uU2tpbkNoYW5nZVxuICAgICAgICB9XG4gICAgICApXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWFuY2hvcnNcIiB9LFxuICAgIF92bS5fbChfdm0uY2F0ZWdvcmllcywgZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybiBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtYW5jaG9yXCI6IHRydWUsXG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtYW5jaG9yLXNlbGVjdGVkXCI6IGNhdGVnb3J5LmlkID09IF92bS5hY3RpdmVDYXRlZ29yeS5pZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGNvbG9yOiBjYXRlZ29yeS5pZCA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkuaWQgPyBfdm0uY29sb3IgOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdHRyczogeyBcImRhdGEtdGl0bGVcIjogX3ZtLmkxOG4uY2F0ZWdvcmllc1tjYXRlZ29yeS5pZF0gfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRlbWl0KFwiY2xpY2tcIiwgY2F0ZWdvcnkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0uc3Znc1tjYXRlZ29yeS5pZF0pIH0gfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1hbmNob3ItYmFyXCIsXG4gICAgICAgICAgICBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IF92bS5jb2xvciB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIH0pLFxuICAgIDBcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLmlzVmlzaWJsZSAmJiAoX3ZtLmlzU2VhcmNoIHx8IF92bS5oYXNSZXN1bHRzKVxuICAgID8gX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LWNhdGVnb3J5XCI6IHRydWUsXG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtbm8tcmVzdWx0c1wiOiAhX3ZtLmhhc1Jlc3VsdHNcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWxcIiB9LCBbXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLmkxOG4uY2F0ZWdvcmllc1tfdm0uaWRdKSldKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9sKF92bS5lbW9qaU9iamVjdHMsIGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgdmFyIGVtb2ppT2JqZWN0ID0gcmVmLmVtb2ppT2JqZWN0XG4gICAgICAgICAgICB2YXIgZW1vamlWaWV3ID0gcmVmLmVtb2ppVmlld1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgZW1vamlWaWV3LmNhblJlbmRlclxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1lbW9qaVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdGl0bGVcIjogZW1vamlPYmplY3Quc2hvcnRfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBlbW9qaVZpZXcudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUHJvcHMub25FbnRlcihlbW9qaVZpZXcuZ2V0RW1vamkoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUHJvcHMub25MZWF2ZShlbW9qaVZpZXcuZ2V0RW1vamkoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5lbW9qaVByb3BzLm9uQ2xpY2soZW1vamlWaWV3LmdldEVtb2ppKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGVtb2ppVmlldy5jc3NDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IGVtb2ppVmlldy5jc3NTdHlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGVtb2ppVmlldy5jb250ZW50KSldXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5oYXNSZXN1bHRzXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJlbW9qaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgZW1vamk6IFwic2xldXRoX29yX3NweVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgIHNraW46IF92bS5lbW9qaVByb3BzLnNraW4sXG4gICAgICAgICAgICAgICAgICAgICAgc2V0OiBfdm0uZW1vamlQcm9wcy5zZXRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LW5vLXJlc3VsdHMtbGFiZWxcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmkxOG4ubm90Zm91bmQpKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlld1wiIH0sXG4gICAgW1xuICAgICAgX3ZtLmVtb2ppXG4gICAgICAgID8gW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uZW1vamksXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICBza2luOiBfdm0uZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IF92bS5lbW9qaVByb3BzLnNldFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctbmFtZVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5lbW9qaS5uYW1lKSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lc1wiIH0sXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5lbW9qaVNob3J0TmFtZXMsIGZ1bmN0aW9uKHNob3J0TmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogc2hvcnROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiOlwiICsgX3ZtLl9zKHNob3J0TmFtZSkgKyBcIjpcIildXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb3RpY29uc1wiIH0sXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5lbW9qaUVtb3RpY29ucywgZnVuY3Rpb24oZW1vdGljb24pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGVtb3RpY29uLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvblwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGVtb3RpY29uKSldXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vamlcIiB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJlbW9qaVwiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZW1vamk6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICBza2luOiBfdm0uZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IF92bS5lbW9qaVByb3BzLnNldFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC10aXRsZS1sYWJlbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0uc2hvd1NraW5Ub25lc1xuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LXNraW5zXCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJza2luc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2tpbjogX3ZtLnNraW5Qcm9wcy5za2luIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25Ta2luQ2hhbmdlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXNlYXJjaFwiIH0sIFtcbiAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsdWVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJ0ZXh0XCIsIHBsYWNlaG9sZGVyOiBfdm0uaTE4bi5zZWFyY2ggfSxcbiAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0udmFsdWUgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGlucHV0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBfdm0udmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczoge1xuICAgICAgICBcImVtb2ppLW1hcnQtc2tpbi1zd2F0Y2hlc1wiOiB0cnVlLFxuICAgICAgICBcImVtb2ppLW1hcnQtc2tpbi1zd2F0Y2hlcy1vcGVuZWRcIjogX3ZtLm9wZW5lZFxuICAgICAgfVxuICAgIH0sXG4gICAgX3ZtLl9sKDYsIGZ1bmN0aW9uKHNraW5Ub25lKSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBza2luVG9uZSxcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoXCI6IHRydWUsXG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtc2tpbi1zd2F0Y2gtc2VsZWN0ZWRcIjogX3ZtLnNraW4gPT0gc2tpblRvbmVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwiZW1vamktbWFydC1za2luIGVtb2ppLW1hcnQtc2tpbi10b25lLVwiICsgc2tpblRvbmUsXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNsaWNrKHNraW5Ub25lKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIH0pLFxuICAgIDBcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIpO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjcwNDJjNzhhXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4gIE1vZGlmaWVkIGJ5IEV2YW4gWW91IEB5eXg5OTA4MDNcbiovXG5cbmltcG9ydCBsaXN0VG9TdHlsZXMgZnJvbSAnLi9saXN0VG9TdHlsZXMnXG5cbnZhciBoYXNEb2N1bWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcblxuaWYgKHR5cGVvZiBERUJVRyAhPT0gJ3VuZGVmaW5lZCcgJiYgREVCVUcpIHtcbiAgaWYgKCFoYXNEb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAndnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiAnICtcbiAgICBcIlVzZSB7IHRhcmdldDogJ25vZGUnIH0gaW4geW91ciBXZWJwYWNrIGNvbmZpZyB0byBpbmRpY2F0ZSBhIHNlcnZlci1yZW5kZXJpbmcgZW52aXJvbm1lbnQuXCJcbiAgKSB9XG59XG5cbi8qXG50eXBlIFN0eWxlT2JqZWN0ID0ge1xuICBpZDogbnVtYmVyO1xuICBwYXJ0czogQXJyYXk8U3R5bGVPYmplY3RQYXJ0PlxufVxuXG50eXBlIFN0eWxlT2JqZWN0UGFydCA9IHtcbiAgY3NzOiBzdHJpbmc7XG4gIG1lZGlhOiBzdHJpbmc7XG4gIHNvdXJjZU1hcDogP3N0cmluZ1xufVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0gey8qXG4gIFtpZDogbnVtYmVyXToge1xuICAgIGlkOiBudW1iZXIsXG4gICAgcmVmczogbnVtYmVyLFxuICAgIHBhcnRzOiBBcnJheTwob2JqPzogU3R5bGVPYmplY3RQYXJ0KSA9PiB2b2lkPlxuICB9XG4qL31cblxudmFyIGhlYWQgPSBoYXNEb2N1bWVudCAmJiAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdKVxudmFyIHNpbmdsZXRvbkVsZW1lbnQgPSBudWxsXG52YXIgc2luZ2xldG9uQ291bnRlciA9IDBcbnZhciBpc1Byb2R1Y3Rpb24gPSBmYWxzZVxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxudmFyIG9wdGlvbnMgPSBudWxsXG52YXIgc3NySWRLZXkgPSAnZGF0YS12dWUtc3NyLWlkJ1xuXG4vLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbi8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcbnZhciBpc09sZElFID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRTdHlsZXNDbGllbnQgKHBhcmVudElkLCBsaXN0LCBfaXNQcm9kdWN0aW9uLCBfb3B0aW9ucykge1xuICBpc1Byb2R1Y3Rpb24gPSBfaXNQcm9kdWN0aW9uXG5cbiAgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbGlzdClcbiAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcbiAgICB2YXIgbWF5UmVtb3ZlID0gW11cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgICBkb21TdHlsZS5yZWZzLS1cbiAgICAgIG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKVxuICAgIH1cbiAgICBpZiAobmV3TGlzdCkge1xuICAgICAgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBuZXdMaXN0KVxuICAgICAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXMgPSBbXVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldXG4gICAgICBpZiAoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZG9tU3R5bGUucGFydHNbal0oKVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcyAvKiBBcnJheTxTdHlsZU9iamVjdD4gKi8pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICBkb21TdHlsZS5yZWZzKytcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSlcbiAgICAgIH1cbiAgICAgIGZvciAoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgaWYgKGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA+IGl0ZW0ucGFydHMubGVuZ3RoKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA9IGl0ZW0ucGFydHMubGVuZ3RoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYXJ0cyA9IFtdXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIHN0eWxlc0luRG9tW2l0ZW0uaWRdID0geyBpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50ICgpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcbiAgc3R5bGVFbGVtZW50LnR5cGUgPSAndGV4dC9jc3MnXG4gIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KVxuICByZXR1cm4gc3R5bGVFbGVtZW50XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gIHZhciB1cGRhdGUsIHJlbW92ZVxuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3R5bGVbJyArIHNzcklkS2V5ICsgJ349XCInICsgb2JqLmlkICsgJ1wiXScpXG5cbiAgaWYgKHN0eWxlRWxlbWVudCkge1xuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGFuZCBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAvLyBzaW1wbHkgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBub29wXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGJ1dCBpbiBkZXYgbW9kZS5cbiAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBDaHJvbWUgY2FuJ3QgaGFuZGxlIHNvdXJjZSBtYXAgaW4gc2VydmVyLXJlbmRlcmVkXG4gICAgICAvLyBzdHlsZSB0YWdzIC0gc291cmNlIG1hcHMgaW4gPHN0eWxlPiBvbmx5IHdvcmtzIGlmIHRoZSBzdHlsZSB0YWcgaXNcbiAgICAgIC8vIGNyZWF0ZWQgYW5kIGluc2VydGVkIGR5bmFtaWNhbGx5LiBTbyB3ZSByZW1vdmUgdGhlIHNlcnZlciByZW5kZXJlZFxuICAgICAgLy8gc3R5bGVzIGFuZCBpbmplY3QgbmV3IG9uZXMuXG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzT2xkSUUpIHtcbiAgICAvLyB1c2Ugc2luZ2xldG9uIG1vZGUgZm9yIElFOS5cbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrK1xuICAgIHN0eWxlRWxlbWVudCA9IHNpbmdsZXRvbkVsZW1lbnQgfHwgKHNpbmdsZXRvbkVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKSlcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCBmYWxzZSlcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCB0cnVlKVxuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBtdWx0aS1zdHlsZS10YWcgbW9kZSBpbiBhbGwgb3RoZXIgY2FzZXNcbiAgICBzdHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQpXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZShvYmopXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcbiAgICAgICAgICBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuICAgICAgICAgIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgdGV4dFN0b3JlID0gW11cblxuICByZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgIHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudFxuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpXG4gIH1cbn0pKClcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGVFbGVtZW50LCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLmNzc1xuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKVxuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKVxuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGVFbGVtZW50LmNoaWxkTm9kZXNcbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSlcbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChjc3NOb2RlKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZUVsZW1lbnQsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzc1xuICB2YXIgbWVkaWEgPSBvYmoubWVkaWFcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXBcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKVxuICB9XG4gIGlmIChvcHRpb25zLnNzcklkKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShzc3JJZEtleSwgb2JqLmlkKVxuICB9XG5cbiAgaWYgKHNvdXJjZU1hcCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZGV2dG9vbHMvZG9jcy9qYXZhc2NyaXB0LWRlYnVnZ2luZ1xuICAgIC8vIHRoaXMgbWFrZXMgc291cmNlIG1hcHMgaW5zaWRlIHN0eWxlIHRhZ3Mgd29yayBwcm9wZXJseSBpbiBDaHJvbWVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VVUkw9JyArIHNvdXJjZU1hcC5zb3VyY2VzWzBdICsgJyAqLydcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwnICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArICcgKi8nXG4gIH1cblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzXG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpXG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKVxuICB9XG59XG4iLCIvKipcbiAqIFRyYW5zbGF0ZXMgdGhlIGxpc3QgZm9ybWF0IHByb2R1Y2VkIGJ5IGNzcy1sb2FkZXIgaW50byBzb21ldGhpbmdcbiAqIGVhc2llciB0byBtYW5pcHVsYXRlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElkLCBsaXN0KSB7XG4gIHZhciBzdHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgdmFyIGlkID0gaXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXVxuICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBpZDogcGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAgICBpZiAoIW5ld1N0eWxlc1tpZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7IGlkOiBpZCwgcGFydHM6IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuXG52YXIgY29uZmlnID0ge1xuICBpdGVtc0xpbWl0OiAxMDAwXG59O1xuXG5mdW5jdGlvbiBnZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbigpIHtcblx0dmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cblx0dmFyIG1zaWUgPSB1YS5pbmRleE9mKCdNU0lFICcpO1xuXHRpZiAobXNpZSA+IDApIHtcblx0XHQvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcblx0XHRyZXR1cm4gcGFyc2VJbnQodWEuc3Vic3RyaW5nKG1zaWUgKyA1LCB1YS5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCk7XG5cdH1cblxuXHR2YXIgdHJpZGVudCA9IHVhLmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cdGlmICh0cmlkZW50ID4gMCkge1xuXHRcdC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuXHRcdHZhciBydiA9IHVhLmluZGV4T2YoJ3J2OicpO1xuXHRcdHJldHVybiBwYXJzZUludCh1YS5zdWJzdHJpbmcocnYgKyAzLCB1YS5pbmRleE9mKCcuJywgcnYpKSwgMTApO1xuXHR9XG5cblx0dmFyIGVkZ2UgPSB1YS5pbmRleE9mKCdFZGdlLycpO1xuXHRpZiAoZWRnZSA+IDApIHtcblx0XHQvLyBFZGdlIChJRSAxMispID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuXHRcdHJldHVybiBwYXJzZUludCh1YS5zdWJzdHJpbmcoZWRnZSArIDUsIHVhLmluZGV4T2YoJy4nLCBlZGdlKSksIDEwKTtcblx0fVxuXG5cdC8vIG90aGVyIGJyb3dzZXJcblx0cmV0dXJuIC0xO1xufVxuXG52YXIgaXNJRSA9IHZvaWQgMDtcblxuZnVuY3Rpb24gaW5pdENvbXBhdCgpIHtcblx0aWYgKCFpbml0Q29tcGF0LmluaXQpIHtcblx0XHRpbml0Q29tcGF0LmluaXQgPSB0cnVlO1xuXHRcdGlzSUUgPSBnZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbigpICE9PSAtMTtcblx0fVxufVxuXG52YXIgUmVzaXplT2JzZXJ2ZXIgPSB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdHZhciBfdm0gPSB0aGlzO3ZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7cmV0dXJuIF9jKCdkaXYnLCB7IHN0YXRpY0NsYXNzOiBcInJlc2l6ZS1vYnNlcnZlclwiLCBhdHRyczogeyBcInRhYmluZGV4XCI6IFwiLTFcIiB9IH0pO1xuXHR9LCBzdGF0aWNSZW5kZXJGbnM6IFtdLCBfc2NvcGVJZDogJ2RhdGEtdi1iMzI5ZWU0YycsXG5cdG5hbWU6ICdyZXNpemUtb2JzZXJ2ZXInLFxuXG5cdG1ldGhvZHM6IHtcblx0XHRjb21wYXJlQW5kTm90aWZ5OiBmdW5jdGlvbiBjb21wYXJlQW5kTm90aWZ5KCkge1xuXHRcdFx0aWYgKHRoaXMuX3cgIT09IHRoaXMuJGVsLm9mZnNldFdpZHRoIHx8IHRoaXMuX2ggIT09IHRoaXMuJGVsLm9mZnNldEhlaWdodCkge1xuXHRcdFx0XHR0aGlzLl93ID0gdGhpcy4kZWwub2Zmc2V0V2lkdGg7XG5cdFx0XHRcdHRoaXMuX2ggPSB0aGlzLiRlbC5vZmZzZXRIZWlnaHQ7XG5cdFx0XHRcdHRoaXMuJGVtaXQoJ25vdGlmeScpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YWRkUmVzaXplSGFuZGxlcnM6IGZ1bmN0aW9uIGFkZFJlc2l6ZUhhbmRsZXJzKCkge1xuXHRcdFx0dGhpcy5fcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlldy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmNvbXBhcmVBbmROb3RpZnkpO1xuXHRcdFx0dGhpcy5jb21wYXJlQW5kTm90aWZ5KCk7XG5cdFx0fSxcblx0XHRyZW1vdmVSZXNpemVIYW5kbGVyczogZnVuY3Rpb24gcmVtb3ZlUmVzaXplSGFuZGxlcnMoKSB7XG5cdFx0XHRpZiAodGhpcy5fcmVzaXplT2JqZWN0ICYmIHRoaXMuX3Jlc2l6ZU9iamVjdC5vbmxvYWQpIHtcblx0XHRcdFx0aWYgKCFpc0lFICYmIHRoaXMuX3Jlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQpIHtcblx0XHRcdFx0XHR0aGlzLl9yZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuY29tcGFyZUFuZE5vdGlmeSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVsZXRlIHRoaXMuX3Jlc2l6ZU9iamVjdC5vbmxvYWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdGluaXRDb21wYXQoKTtcblx0XHR0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRfdGhpcy5fdyA9IF90aGlzLiRlbC5vZmZzZXRXaWR0aDtcblx0XHRcdF90aGlzLl9oID0gX3RoaXMuJGVsLm9mZnNldEhlaWdodDtcblx0XHR9KTtcblx0XHR2YXIgb2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb2JqZWN0Jyk7XG5cdFx0dGhpcy5fcmVzaXplT2JqZWN0ID0gb2JqZWN0O1xuXHRcdG9iamVjdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcblx0XHRvYmplY3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIC0xKTtcblx0XHRvYmplY3Qub25sb2FkID0gdGhpcy5hZGRSZXNpemVIYW5kbGVycztcblx0XHRvYmplY3QudHlwZSA9ICd0ZXh0L2h0bWwnO1xuXHRcdGlmIChpc0lFKSB7XG5cdFx0XHR0aGlzLiRlbC5hcHBlbmRDaGlsZChvYmplY3QpO1xuXHRcdH1cblx0XHRvYmplY3QuZGF0YSA9ICdhYm91dDpibGFuayc7XG5cdFx0aWYgKCFpc0lFKSB7XG5cdFx0XHR0aGlzLiRlbC5hcHBlbmRDaGlsZChvYmplY3QpO1xuXHRcdH1cblx0fSxcblx0YmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0XHR0aGlzLnJlbW92ZVJlc2l6ZUhhbmRsZXJzKCk7XG5cdH1cbn07XG5cbi8vIEluc3RhbGwgdGhlIGNvbXBvbmVudHNcbmZ1bmN0aW9uIGluc3RhbGwoVnVlJCQxKSB7XG5cdFZ1ZSQkMS5jb21wb25lbnQoJ3Jlc2l6ZS1vYnNlcnZlcicsIFJlc2l6ZU9ic2VydmVyKTtcblx0VnVlJCQxLmNvbXBvbmVudCgnUmVzaXplT2JzZXJ2ZXInLCBSZXNpemVPYnNlcnZlcik7XG59XG5cbi8vIFBsdWdpblxudmFyIHBsdWdpbiQyID0ge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmVyc2lvbjogXCIwLjQuNVwiLFxuXHRpbnN0YWxsOiBpbnN0YWxsXG59O1xuXG4vLyBBdXRvLWluc3RhbGxcbnZhciBHbG9iYWxWdWUkMSA9IG51bGw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0R2xvYmFsVnVlJDEgPSB3aW5kb3cuVnVlO1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuXHRHbG9iYWxWdWUkMSA9IGdsb2JhbC5WdWU7XG59XG5pZiAoR2xvYmFsVnVlJDEpIHtcblx0R2xvYmFsVnVlJDEudXNlKHBsdWdpbiQyKTtcbn1cblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmo7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5cblxuXG5cblxudmFyIGFzeW5jR2VuZXJhdG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBd2FpdFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gQXN5bmNHZW5lcmF0b3IoZ2VuKSB7XG4gICAgdmFyIGZyb250LCBiYWNrO1xuXG4gICAgZnVuY3Rpb24gc2VuZChrZXksIGFyZykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgYXJnOiBhcmcsXG4gICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGJhY2spIHtcbiAgICAgICAgICBiYWNrID0gYmFjay5uZXh0ID0gcmVxdWVzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcm9udCA9IGJhY2sgPSByZXF1ZXN0O1xuICAgICAgICAgIHJlc3VtZShrZXksIGFyZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3VtZShrZXksIGFyZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBd2FpdFZhbHVlKSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlLnZhbHVlKS50aGVuKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJlc3VtZShcIm5leHRcIiwgYXJnKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXN1bWUoXCJ0aHJvd1wiLCBhcmcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldHRsZShyZXN1bHQuZG9uZSA/IFwicmV0dXJuXCIgOiBcIm5vcm1hbFwiLCByZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0dGxlKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXR0bGUodHlwZSwgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwicmV0dXJuXCI6XG4gICAgICAgICAgZnJvbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgZnJvbnQucmVqZWN0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGZyb250LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZnJvbnQgPSBmcm9udC5uZXh0O1xuXG4gICAgICBpZiAoZnJvbnQpIHtcbiAgICAgICAgcmVzdW1lKGZyb250LmtleSwgZnJvbnQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhY2sgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludm9rZSA9IHNlbmQ7XG5cbiAgICBpZiAodHlwZW9mIGdlbi5yZXR1cm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5yZXR1cm4gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvcikge1xuICAgIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICB9XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcIm5leHRcIiwgYXJnKTtcbiAgfTtcblxuICBBc3luY0dlbmVyYXRvci5wcm90b3R5cGUudGhyb3cgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcInRocm93XCIsIGFyZyk7XG4gIH07XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLnJldHVybiA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlKFwicmV0dXJuXCIsIGFyZyk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB3cmFwOiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN5bmNHZW5lcmF0b3IoZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgYXdhaXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBBd2FpdFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH07XG59KCk7XG5cblxuXG5cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgdG9Db25zdW1hYmxlQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oYXJyKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gcHJvY2Vzc09wdGlvbnModmFsdWUpIHtcblx0dmFyIG9wdGlvbnMgPSB2b2lkIDA7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBTaW1wbGUgb3B0aW9ucyAoY2FsbGJhY2stb25seSlcblx0XHRvcHRpb25zID0ge1xuXHRcdFx0Y2FsbGJhY2s6IHZhbHVlXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHQvLyBPcHRpb25zIG9iamVjdFxuXHRcdG9wdGlvbnMgPSB2YWx1ZTtcblx0fVxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gdGhyb3R0bGUoY2FsbGJhY2ssIGRlbGF5KSB7XG5cdHZhciB0aW1lb3V0ID0gdm9pZCAwO1xuXHR2YXIgbGFzdFN0YXRlID0gdm9pZCAwO1xuXHR2YXIgY3VycmVudEFyZ3MgPSB2b2lkIDA7XG5cdHZhciB0aHJvdHRsZWQgPSBmdW5jdGlvbiB0aHJvdHRsZWQoc3RhdGUpIHtcblx0XHRmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcblx0XHRcdGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRBcmdzID0gYXJncztcblx0XHRpZiAodGltZW91dCAmJiBzdGF0ZSA9PT0gbGFzdFN0YXRlKSByZXR1cm47XG5cdFx0bGFzdFN0YXRlID0gc3RhdGU7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQodG9Db25zdW1hYmxlQXJyYXkoY3VycmVudEFyZ3MpKSk7XG5cdFx0XHR0aW1lb3V0ID0gMDtcblx0XHR9LCBkZWxheSk7XG5cdH07XG5cdHRocm90dGxlZC5fY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHR9O1xuXHRyZXR1cm4gdGhyb3R0bGVkO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWwodmFsMSwgdmFsMikge1xuXHRpZiAodmFsMSA9PT0gdmFsMikgcmV0dXJuIHRydWU7XG5cdGlmICgodHlwZW9mIHZhbDEgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbDEpKSA9PT0gJ29iamVjdCcpIHtcblx0XHRmb3IgKHZhciBrZXkgaW4gdmFsMSkge1xuXHRcdFx0aWYgKCFkZWVwRXF1YWwodmFsMVtrZXldLCB2YWwyW2tleV0pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVmlzaWJpbGl0eVN0YXRlID0gZnVuY3Rpb24gKCkge1xuXHRmdW5jdGlvbiBWaXNpYmlsaXR5U3RhdGUoZWwsIG9wdGlvbnMsIHZub2RlKSB7XG5cdFx0Y2xhc3NDYWxsQ2hlY2sodGhpcywgVmlzaWJpbGl0eVN0YXRlKTtcblxuXHRcdHRoaXMuZWwgPSBlbDtcblx0XHR0aGlzLm9ic2VydmVyID0gbnVsbDtcblx0XHR0aGlzLmZyb3plbiA9IGZhbHNlO1xuXHRcdHRoaXMuY3JlYXRlT2JzZXJ2ZXIob3B0aW9ucywgdm5vZGUpO1xuXHR9XG5cblx0Y3JlYXRlQ2xhc3MoVmlzaWJpbGl0eVN0YXRlLCBbe1xuXHRcdGtleTogJ2NyZWF0ZU9ic2VydmVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY3JlYXRlT2JzZXJ2ZXIob3B0aW9ucywgdm5vZGUpIHtcblx0XHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0XHRcdGlmICh0aGlzLm9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMuZGVzdHJveU9ic2VydmVyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZyb3plbikgcmV0dXJuO1xuXG5cdFx0XHR0aGlzLm9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdFx0dGhpcy5jYWxsYmFjayA9IHRoaXMub3B0aW9ucy5jYWxsYmFjaztcblx0XHRcdC8vIFRocm90dGxlXG5cdFx0XHRpZiAodGhpcy5jYWxsYmFjayAmJiB0aGlzLm9wdGlvbnMudGhyb3R0bGUpIHtcblx0XHRcdFx0dGhpcy5jYWxsYmFjayA9IHRocm90dGxlKHRoaXMuY2FsbGJhY2ssIHRoaXMub3B0aW9ucy50aHJvdHRsZSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMub2xkUmVzdWx0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHR0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG5cdFx0XHRcdHZhciBlbnRyeSA9IGVudHJpZXNbMF07XG5cdFx0XHRcdGlmIChfdGhpcy5jYWxsYmFjaykge1xuXHRcdFx0XHRcdC8vIFVzZSBpc0ludGVyc2VjdGluZyBpZiBwb3NzaWJsZSBiZWNhdXNlIGJyb3dzZXJzIGNhbiByZXBvcnQgaXNJbnRlcnNlY3RpbmcgYXMgdHJ1ZSwgYnV0IGludGVyc2VjdGlvblJhdGlvIGFzIDAsIHdoZW4gc29tZXRoaW5nIHZlcnkgc2xvd2x5IGVudGVycyB0aGUgdmlld3BvcnQuXG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIGVudHJ5LmludGVyc2VjdGlvblJhdGlvID49IF90aGlzLnRocmVzaG9sZDtcblx0XHRcdFx0XHRpZiAocmVzdWx0ID09PSBfdGhpcy5vbGRSZXN1bHQpIHJldHVybjtcblx0XHRcdFx0XHRfdGhpcy5vbGRSZXN1bHQgPSByZXN1bHQ7XG5cdFx0XHRcdFx0X3RoaXMuY2FsbGJhY2socmVzdWx0LCBlbnRyeSk7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiBfdGhpcy5vcHRpb25zLm9uY2UpIHtcblx0XHRcdFx0XHRcdF90aGlzLmZyb3plbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRfdGhpcy5kZXN0cm95T2JzZXJ2ZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXMub3B0aW9ucy5pbnRlcnNlY3Rpb24pO1xuXG5cdFx0XHQvLyBXYWl0IGZvciB0aGUgZWxlbWVudCB0byBiZSBpbiBkb2N1bWVudFxuXHRcdFx0dm5vZGUuY29udGV4dC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRfdGhpcy5vYnNlcnZlci5vYnNlcnZlKF90aGlzLmVsKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2Rlc3Ryb3lPYnNlcnZlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3lPYnNlcnZlcigpIHtcblx0XHRcdGlmICh0aGlzLm9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR0aGlzLm9ic2VydmVyID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FuY2VsIHRocm90dGxlZCBjYWxsXG5cdFx0XHRpZiAodGhpcy5jYWxsYmFjayAmJiB0aGlzLmNhbGxiYWNrLl9jbGVhcikge1xuXHRcdFx0XHR0aGlzLmNhbGxiYWNrLl9jbGVhcigpO1xuXHRcdFx0XHR0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICd0aHJlc2hvbGQnLFxuXHRcdGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5pbnRlcnNlY3Rpb24gJiYgdGhpcy5vcHRpb25zLmludGVyc2VjdGlvbi50aHJlc2hvbGQgfHwgMDtcblx0XHR9XG5cdH1dKTtcblx0cmV0dXJuIFZpc2liaWxpdHlTdGF0ZTtcbn0oKTtcblxuZnVuY3Rpb24gYmluZChlbCwgX3JlZiwgdm5vZGUpIHtcblx0dmFyIHZhbHVlID0gX3JlZi52YWx1ZTtcblxuXHRpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAndW5kZWZpbmVkJykge1xuXHRcdGNvbnNvbGUud2FybignW3Z1ZS1vYnNlcnZlLXZpc2liaWxpdHldIEludGVyc2VjdGlvbk9ic2VydmVyIEFQSSBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgYnJvd3Nlci4gUGxlYXNlIGluc3RhbGwgdGhpcyBwb2x5ZmlsbDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9JbnRlcnNlY3Rpb25PYnNlcnZlci90cmVlL21hc3Rlci9wb2x5ZmlsbCcpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzdGF0ZSA9IG5ldyBWaXNpYmlsaXR5U3RhdGUoZWwsIHZhbHVlLCB2bm9kZSk7XG5cdFx0ZWwuX3Z1ZV92aXNpYmlsaXR5U3RhdGUgPSBzdGF0ZTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGUoZWwsIF9yZWYyLCB2bm9kZSkge1xuXHR2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZSxcblx0ICAgIG9sZFZhbHVlID0gX3JlZjIub2xkVmFsdWU7XG5cblx0aWYgKGRlZXBFcXVhbCh2YWx1ZSwgb2xkVmFsdWUpKSByZXR1cm47XG5cdHZhciBzdGF0ZSA9IGVsLl92dWVfdmlzaWJpbGl0eVN0YXRlO1xuXHRpZiAoc3RhdGUpIHtcblx0XHRzdGF0ZS5jcmVhdGVPYnNlcnZlcih2YWx1ZSwgdm5vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdGJpbmQoZWwsIHsgdmFsdWU6IHZhbHVlIH0sIHZub2RlKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoZWwpIHtcblx0dmFyIHN0YXRlID0gZWwuX3Z1ZV92aXNpYmlsaXR5U3RhdGU7XG5cdGlmIChzdGF0ZSkge1xuXHRcdHN0YXRlLmRlc3Ryb3lPYnNlcnZlcigpO1xuXHRcdGRlbGV0ZSBlbC5fdnVlX3Zpc2liaWxpdHlTdGF0ZTtcblx0fVxufVxuXG52YXIgT2JzZXJ2ZVZpc2liaWxpdHkgPSB7XG5cdGJpbmQ6IGJpbmQsXG5cdHVwZGF0ZTogdXBkYXRlLFxuXHR1bmJpbmQ6IHVuYmluZFxufTtcblxuLy8gSW5zdGFsbCB0aGUgY29tcG9uZW50c1xuZnVuY3Rpb24gaW5zdGFsbCQxKFZ1ZSQkMSkge1xuXHRWdWUkJDEuZGlyZWN0aXZlKCdvYnNlcnZlLXZpc2liaWxpdHknLCBPYnNlcnZlVmlzaWJpbGl0eSk7XG5cdC8qIC0tIEFkZCBtb3JlIGNvbXBvbmVudHMgaGVyZSAtLSAqL1xufVxuXG4vKiAtLSBQbHVnaW4gZGVmaW5pdGlvbiAmIEF1dG8taW5zdGFsbCAtLSAqL1xuLyogWW91IHNob3VsZG4ndCBoYXZlIHRvIG1vZGlmeSB0aGUgY29kZSBiZWxvdyAqL1xuXG4vLyBQbHVnaW5cbnZhciBwbHVnaW4kNCA9IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5cdHZlcnNpb246IFwiMC40LjNcIixcblx0aW5zdGFsbDogaW5zdGFsbCQxXG59O1xuXG4vLyBBdXRvLWluc3RhbGxcbnZhciBHbG9iYWxWdWUkMiA9IG51bGw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0R2xvYmFsVnVlJDIgPSB3aW5kb3cuVnVlO1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuXHRHbG9iYWxWdWUkMiA9IGdsb2JhbC5WdWU7XG59XG5pZiAoR2xvYmFsVnVlJDIpIHtcblx0R2xvYmFsVnVlJDIudXNlKHBsdWdpbiQ0KTtcbn1cblxudmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTtcblxuXG5cblxuXG5mdW5jdGlvbiBjcmVhdGVDb21tb25qc01vZHVsZShmbiwgbW9kdWxlKSB7XG5cdHJldHVybiBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH0sIGZuKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMpLCBtb2R1bGUuZXhwb3J0cztcbn1cblxudmFyIHNjcm9sbHBhcmVudCA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIHVuZGVmaW5lZCA9PT0gXCJmdW5jdGlvblwiICYmIHVuZGVmaW5lZC5hbWQpIHtcbiAgICB1bmRlZmluZWQoW10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5TY3JvbGxwYXJlbnQgPSBmYWN0b3J5KCk7XG4gIH1cbn0oY29tbW9uanNHbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZ2V4ID0gLyhhdXRvfHNjcm9sbCkvO1xuXG4gIHZhciBwYXJlbnRzID0gZnVuY3Rpb24gKG5vZGUsIHBzKSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgeyByZXR1cm4gcHM7IH1cblxuICAgIHJldHVybiBwYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgcHMuY29uY2F0KFtub2RlXSkpO1xuICB9O1xuXG4gIHZhciBzdHlsZSA9IGZ1bmN0aW9uIChub2RlLCBwcm9wKSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgfTtcblxuICB2YXIgb3ZlcmZsb3cgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBzdHlsZShub2RlLCBcIm92ZXJmbG93XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy15XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy14XCIpO1xuICB9O1xuXG4gIHZhciBzY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgcmV0dXJuIHJlZ2V4LnRlc3Qob3ZlcmZsb3cobm9kZSkpO1xuICB9O1xuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdmFyIHBzID0gcGFyZW50cyhub2RlLnBhcmVudE5vZGUsIFtdKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzY3JvbGwocHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBwc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH07XG5cbiAgcmV0dXJuIHNjcm9sbFBhcmVudDtcbn0pKTtcbn0pO1xuXG52YXIgX3R5cGVvZiQxID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuXG5cblxuXG5cbnZhciBhc3luY0dlbmVyYXRvciQxID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBd2FpdFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gQXN5bmNHZW5lcmF0b3IoZ2VuKSB7XG4gICAgdmFyIGZyb250LCBiYWNrO1xuXG4gICAgZnVuY3Rpb24gc2VuZChrZXksIGFyZykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgYXJnOiBhcmcsXG4gICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGJhY2spIHtcbiAgICAgICAgICBiYWNrID0gYmFjay5uZXh0ID0gcmVxdWVzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcm9udCA9IGJhY2sgPSByZXF1ZXN0O1xuICAgICAgICAgIHJlc3VtZShrZXksIGFyZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3VtZShrZXksIGFyZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBd2FpdFZhbHVlKSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlLnZhbHVlKS50aGVuKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJlc3VtZShcIm5leHRcIiwgYXJnKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXN1bWUoXCJ0aHJvd1wiLCBhcmcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldHRsZShyZXN1bHQuZG9uZSA/IFwicmV0dXJuXCIgOiBcIm5vcm1hbFwiLCByZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0dGxlKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXR0bGUodHlwZSwgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwicmV0dXJuXCI6XG4gICAgICAgICAgZnJvbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgZnJvbnQucmVqZWN0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGZyb250LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZnJvbnQgPSBmcm9udC5uZXh0O1xuXG4gICAgICBpZiAoZnJvbnQpIHtcbiAgICAgICAgcmVzdW1lKGZyb250LmtleSwgZnJvbnQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhY2sgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludm9rZSA9IHNlbmQ7XG5cbiAgICBpZiAodHlwZW9mIGdlbi5yZXR1cm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5yZXR1cm4gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvcikge1xuICAgIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICB9XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcIm5leHRcIiwgYXJnKTtcbiAgfTtcblxuICBBc3luY0dlbmVyYXRvci5wcm90b3R5cGUudGhyb3cgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcInRocm93XCIsIGFyZyk7XG4gIH07XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLnJldHVybiA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlKFwicmV0dXJuXCIsIGFyZyk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB3cmFwOiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN5bmNHZW5lcmF0b3IoZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgYXdhaXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBBd2FpdFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH07XG59KCk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbnZhciBwcm9wcyA9IHtcbiAgaXRlbXM6IHtcbiAgICB0eXBlOiBBcnJheSxcbiAgICByZXF1aXJlZDogdHJ1ZVxuICB9LFxuXG4gIGtleUZpZWxkOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdpZCdcbiAgfSxcblxuICBkaXJlY3Rpb246IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJ3ZlcnRpY2FsJyxcbiAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFsndmVydGljYWwnLCAnaG9yaXpvbnRhbCddLmluY2x1ZGVzKHZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNpbXBsZUFycmF5KCkge1xuICByZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggJiYgX3R5cGVvZiQxKHRoaXMuaXRlbXNbMF0pICE9PSAnb2JqZWN0Jztcbn1cblxudmFyIHN1cHBvcnRzUGFzc2l2ZSA9IGZhbHNlO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxudmFyIHVpZCA9IDA7XG5cbnZhciBSZWN5Y2xlU2Nyb2xsZXIgPSB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdm0gPSB0aGlzO3ZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7cmV0dXJuIF9jKCdkaXYnLCB7IGRpcmVjdGl2ZXM6IFt7IG5hbWU6IFwib2JzZXJ2ZS12aXNpYmlsaXR5XCIsIHJhd05hbWU6IFwidi1vYnNlcnZlLXZpc2liaWxpdHlcIiwgdmFsdWU6IF92bS5oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBleHByZXNzaW9uOiBcImhhbmRsZVZpc2liaWxpdHlDaGFuZ2VcIiB9XSwgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJcIiwgY2xhc3M6IGRlZmluZVByb3BlcnR5KHsgcmVhZHk6IF92bS5yZWFkeSwgJ3BhZ2UtbW9kZSc6IF92bS5wYWdlTW9kZSB9LCAnZGlyZWN0aW9uLScgKyBfdm0uZGlyZWN0aW9uLCB0cnVlKSwgb246IHsgXCImc2Nyb2xsXCI6IGZ1bmN0aW9uIHNjcm9sbCgkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZVNjcm9sbCgkZXZlbnQpO1xuICAgICAgICB9IH0gfSwgW192bS4kc2xvdHMuYmVmb3JlID8gX2MoJ2RpdicsIHsgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJfX3Nsb3RcIiB9LCBbX3ZtLl90KFwiYmVmb3JlXCIpXSwgMikgOiBfdm0uX2UoKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ2RpdicsIHsgcmVmOiBcIndyYXBwZXJcIiwgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlclwiLCBzdHlsZTogZGVmaW5lUHJvcGVydHkoe30sIF92bS5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAnbWluSGVpZ2h0JyA6ICdtaW5XaWR0aCcsIF92bS50b3RhbFNpemUgKyAncHgnKSB9LCBfdm0uX2woX3ZtLnBvb2wsIGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICByZXR1cm4gX2MoJ2RpdicsIHsga2V5OiB2aWV3Lm5yLmlkLCBzdGF0aWNDbGFzczogXCJ2dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3XCIsIGNsYXNzOiB7IGhvdmVyOiBfdm0uaG92ZXJLZXkgPT09IHZpZXcubnIua2V5IH0sIHN0eWxlOiBfdm0ucmVhZHkgPyB7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZScgKyAoX3ZtLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/ICdZJyA6ICdYJykgKyAnKCcgKyB2aWV3LnBvc2l0aW9uICsgJ3B4KScgfSA6IG51bGwsIG9uOiB7IFwibW91c2VlbnRlclwiOiBmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCkge1xuICAgICAgICAgICAgX3ZtLmhvdmVyS2V5ID0gdmlldy5uci5rZXk7XG4gICAgICAgICAgfSwgXCJtb3VzZWxlYXZlXCI6IGZ1bmN0aW9uIG1vdXNlbGVhdmUoJGV2ZW50KSB7XG4gICAgICAgICAgICBfdm0uaG92ZXJLZXkgPSBudWxsO1xuICAgICAgICAgIH0gfSB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiLCBudWxsLCB7IGl0ZW06IHZpZXcuaXRlbSwgaW5kZXg6IHZpZXcubnIuaW5kZXgsIGFjdGl2ZTogdmlldy5uci51c2VkIH0pXSwgMik7XG4gICAgfSksIDApLCBfdm0uX3YoXCIgXCIpLCBfdm0uJHNsb3RzLmFmdGVyID8gX2MoJ2RpdicsIHsgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJfX3Nsb3RcIiB9LCBbX3ZtLl90KFwiYWZ0ZXJcIildLCAyKSA6IF92bS5fZSgpLCBfdm0uX3YoXCIgXCIpLCBfYygnUmVzaXplT2JzZXJ2ZXInLCB7IG9uOiB7IFwibm90aWZ5XCI6IF92bS5oYW5kbGVSZXNpemUgfSB9KV0sIDEpO1xuICB9LCBzdGF0aWNSZW5kZXJGbnM6IFtdLFxuICBuYW1lOiAnUmVjeWNsZVNjcm9sbGVyJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgUmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyXG4gIH0sXG5cbiAgZGlyZWN0aXZlczoge1xuICAgIE9ic2VydmVWaXNpYmlsaXR5OiBPYnNlcnZlVmlzaWJpbGl0eVxuICB9LFxuXG4gIHByb3BzOiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcblxuICAgIGl0ZW1TaXplOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcblxuICAgIG1pbkl0ZW1TaXplOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG5cbiAgICBzaXplRmllbGQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdzaXplJ1xuICAgIH0sXG5cbiAgICB0eXBlRmllbGQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd0eXBlJ1xuICAgIH0sXG5cbiAgICBidWZmZXI6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDIwMFxuICAgIH0sXG5cbiAgICBwYWdlTW9kZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIHByZXJlbmRlcjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBlbWl0VXBkYXRlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0pLFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvb2w6IFtdLFxuICAgICAgdG90YWxTaXplOiAwLFxuICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgaG92ZXJLZXk6IG51bGxcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzaXplczogZnVuY3Rpb24gc2l6ZXMoKSB7XG4gICAgICBpZiAodGhpcy5pdGVtU2l6ZSA9PT0gbnVsbCkge1xuICAgICAgICB2YXIgc2l6ZXMgPSB7XG4gICAgICAgICAgJy0xJzogeyBhY2N1bXVsYXRvcjogMCB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICAgIHZhciBmaWVsZCA9IHRoaXMuc2l6ZUZpZWxkO1xuICAgICAgICB2YXIgbWluSXRlbVNpemUgPSB0aGlzLm1pbkl0ZW1TaXplO1xuICAgICAgICB2YXIgYWNjdW11bGF0b3IgPSAwO1xuICAgICAgICB2YXIgY3VycmVudCA9IHZvaWQgMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBjdXJyZW50ID0gaXRlbXNbaV1bZmllbGRdIHx8IG1pbkl0ZW1TaXplO1xuICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGN1cnJlbnQ7XG4gICAgICAgICAgc2l6ZXNbaV0gPSB7IGFjY3VtdWxhdG9yOiBhY2N1bXVsYXRvciwgc2l6ZTogY3VycmVudCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaXplcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuXG5cbiAgICBzaW1wbGVBcnJheTogc2ltcGxlQXJyYXlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGl0ZW1zOiBmdW5jdGlvbiBpdGVtcygpIHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKHRydWUpO1xuICAgIH0sXG4gICAgcGFnZU1vZGU6IGZ1bmN0aW9uIHBhZ2VNb2RlKCkge1xuICAgICAgdGhpcy5hcHBseVBhZ2VNb2RlKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgfSxcblxuXG4gICAgc2l6ZXM6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGRlZXA6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLiRfc3RhcnRJbmRleCA9IDA7XG4gICAgdGhpcy4kX2VuZEluZGV4ID0gMDtcbiAgICB0aGlzLiRfdmlld3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy4kX3VudXNlZFZpZXdzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuJF9zY3JvbGxEaXJ0eSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuJGlzU2VydmVyKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmFwcGx5UGFnZU1vZGUoKTtcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy51cGRhdGVWaXNpYmxlSXRlbXModHJ1ZSk7XG4gICAgICBfdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRWaWV3OiBmdW5jdGlvbiBhZGRWaWV3KHBvb2wsIGluZGV4LCBpdGVtLCBrZXksIHR5cGUpIHtcbiAgICAgIHZhciB2aWV3ID0ge1xuICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICBwb3NpdGlvbjogMFxuICAgICAgfTtcbiAgICAgIHZhciBub25SZWFjdGl2ZSA9IHtcbiAgICAgICAgaWQ6IHVpZCsrLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIHVzZWQ6IHRydWUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZXcsICducicsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5vblJlYWN0aXZlXG4gICAgICB9KTtcbiAgICAgIHBvb2wucHVzaCh2aWV3KTtcbiAgICAgIHJldHVybiB2aWV3O1xuICAgIH0sXG4gICAgdW51c2VWaWV3OiBmdW5jdGlvbiB1bnVzZVZpZXcodmlldykge1xuICAgICAgdmFyIGZha2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICB2YXIgdW51c2VkVmlld3MgPSB0aGlzLiRfdW51c2VkVmlld3M7XG4gICAgICB2YXIgdHlwZSA9IHZpZXcubnIudHlwZTtcbiAgICAgIHZhciB1bnVzZWRQb29sID0gdW51c2VkVmlld3MuZ2V0KHR5cGUpO1xuICAgICAgaWYgKCF1bnVzZWRQb29sKSB7XG4gICAgICAgIHVudXNlZFBvb2wgPSBbXTtcbiAgICAgICAgdW51c2VkVmlld3Muc2V0KHR5cGUsIHVudXNlZFBvb2wpO1xuICAgICAgfVxuICAgICAgdW51c2VkUG9vbC5wdXNoKHZpZXcpO1xuICAgICAgaWYgKCFmYWtlKSB7XG4gICAgICAgIHZpZXcubnIudXNlZCA9IGZhbHNlO1xuICAgICAgICB2aWV3LnBvc2l0aW9uID0gLTk5OTk7XG4gICAgICAgIHRoaXMuJF92aWV3cy5kZWxldGUodmlldy5uci5rZXkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlUmVzaXplOiBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdyZXNpemUnKTtcbiAgICAgIGlmICh0aGlzLnJlYWR5KSB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgfSxcbiAgICBoYW5kbGVTY3JvbGw6IGZ1bmN0aW9uIGhhbmRsZVNjcm9sbChldmVudCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy4kX3Njcm9sbERpcnR5KSB7XG4gICAgICAgIHRoaXMuJF9zY3JvbGxEaXJ0eSA9IHRydWU7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLiRfc2Nyb2xsRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgIHZhciBfdXBkYXRlVmlzaWJsZUl0ZW1zID0gX3RoaXMyLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSksXG4gICAgICAgICAgICAgIGNvbnRpbnVvdXMgPSBfdXBkYXRlVmlzaWJsZUl0ZW1zLmNvbnRpbnVvdXM7XG5cbiAgICAgICAgICAvLyBJdCBzZWVtcyBzb21ldGltZXMgY2hyb21lIGRvZXNuJ3QgZmlyZSBzY3JvbGwgZXZlbnQgOi9cbiAgICAgICAgICAvLyBXaGVuIG5vbiBjb250aW5vdXMgc2Nyb2xsaW5nIGlzIGVuZGluZywgd2UgZm9yY2UgYSByZWZyZXNoXG5cblxuICAgICAgICAgIGlmICghY29udGludW91cykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzMi4kX3JlZnJlc2hUaW1vdXQpO1xuICAgICAgICAgICAgX3RoaXMyLiRfcmVmcmVzaFRpbW91dCA9IHNldFRpbWVvdXQoX3RoaXMyLmhhbmRsZVNjcm9sbCwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlVmlzaWJpbGl0eUNoYW5nZShpc1Zpc2libGUsIGVudHJ5KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMucmVhZHkpIHtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSB8fCBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggIT09IDAgfHwgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUnKTtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVZpc2libGVJdGVtczogZnVuY3Rpb24gdXBkYXRlVmlzaWJsZUl0ZW1zKGNoZWNrSXRlbSkge1xuICAgICAgdmFyIGl0ZW1TaXplID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgIHZhciB0eXBlRmllbGQgPSB0aGlzLnR5cGVGaWVsZDtcbiAgICAgIHZhciBrZXlGaWVsZCA9IHRoaXMuc2ltcGxlQXJyYXkgPyBudWxsIDogdGhpcy5rZXlGaWVsZDtcbiAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICB2YXIgY291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgc2l6ZXMgPSB0aGlzLnNpemVzO1xuICAgICAgdmFyIHZpZXdzID0gdGhpcy4kX3ZpZXdzO1xuICAgICAgdmFyIHVudXNlZFZpZXdzID0gdGhpcy4kX3VudXNlZFZpZXdzO1xuICAgICAgdmFyIHBvb2wgPSB0aGlzLnBvb2w7XG4gICAgICB2YXIgc3RhcnRJbmRleCA9IHZvaWQgMCxcbiAgICAgICAgICBlbmRJbmRleCA9IHZvaWQgMDtcbiAgICAgIHZhciB0b3RhbFNpemUgPSB2b2lkIDA7XG5cbiAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgc3RhcnRJbmRleCA9IGVuZEluZGV4ID0gdG90YWxTaXplID0gMDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4kaXNTZXJ2ZXIpIHtcbiAgICAgICAgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGVuZEluZGV4ID0gdGhpcy5wcmVyZW5kZXI7XG4gICAgICAgIHRvdGFsU2l6ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc2Nyb2xsID0gdGhpcy5nZXRTY3JvbGwoKTtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICBzY3JvbGwuc3RhcnQgLT0gYnVmZmVyO1xuICAgICAgICBzY3JvbGwuZW5kICs9IGJ1ZmZlcjtcblxuICAgICAgICAvLyBWYXJpYWJsZSBzaXplIG1vZGVcbiAgICAgICAgaWYgKGl0ZW1TaXplID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGggPSB2b2lkIDA7XG4gICAgICAgICAgdmFyIGEgPSAwO1xuICAgICAgICAgIHZhciBiID0gY291bnQgLSAxO1xuICAgICAgICAgIHZhciBpID0gfn4oY291bnQgLyAyKTtcbiAgICAgICAgICB2YXIgb2xkSSA9IHZvaWQgMDtcblxuICAgICAgICAgIC8vIFNlYXJjaGluZyBmb3Igc3RhcnRJbmRleFxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIG9sZEkgPSBpO1xuICAgICAgICAgICAgaCA9IHNpemVzW2ldLmFjY3VtdWxhdG9yO1xuICAgICAgICAgICAgaWYgKGggPCBzY3JvbGwuc3RhcnQpIHtcbiAgICAgICAgICAgICAgYSA9IGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCBjb3VudCAtIDEgJiYgc2l6ZXNbaSArIDFdLmFjY3VtdWxhdG9yID4gc2Nyb2xsLnN0YXJ0KSB7XG4gICAgICAgICAgICAgIGIgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IH5+KChhICsgYikgLyAyKTtcbiAgICAgICAgICB9IHdoaWxlIChpICE9PSBvbGRJKTtcbiAgICAgICAgICBpIDwgMCAmJiAoaSA9IDApO1xuICAgICAgICAgIHN0YXJ0SW5kZXggPSBpO1xuXG4gICAgICAgICAgLy8gRm9yIGNvbnRhaW5lciBzdHlsZVxuICAgICAgICAgIHRvdGFsU2l6ZSA9IHNpemVzW2NvdW50IC0gMV0uYWNjdW11bGF0b3I7XG5cbiAgICAgICAgICAvLyBTZWFyY2hpbmcgZm9yIGVuZEluZGV4XG4gICAgICAgICAgZm9yIChlbmRJbmRleCA9IGk7IGVuZEluZGV4IDwgY291bnQgJiYgc2l6ZXNbZW5kSW5kZXhdLmFjY3VtdWxhdG9yIDwgc2Nyb2xsLmVuZDsgZW5kSW5kZXgrKykge31cbiAgICAgICAgICBpZiAoZW5kSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVuZEluZGV4Kys7XG4gICAgICAgICAgICAvLyBCb3VuZHNcbiAgICAgICAgICAgIGVuZEluZGV4ID4gY291bnQgJiYgKGVuZEluZGV4ID0gY291bnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGaXhlZCBzaXplIG1vZGVcbiAgICAgICAgICBzdGFydEluZGV4ID0gfn4oc2Nyb2xsLnN0YXJ0IC8gaXRlbVNpemUpO1xuICAgICAgICAgIGVuZEluZGV4ID0gTWF0aC5jZWlsKHNjcm9sbC5lbmQgLyBpdGVtU2l6ZSk7XG5cbiAgICAgICAgICAvLyBCb3VuZHNcbiAgICAgICAgICBzdGFydEluZGV4IDwgMCAmJiAoc3RhcnRJbmRleCA9IDApO1xuICAgICAgICAgIGVuZEluZGV4ID4gY291bnQgJiYgKGVuZEluZGV4ID0gY291bnQpO1xuXG4gICAgICAgICAgdG90YWxTaXplID0gY291bnQgKiBpdGVtU2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW5kSW5kZXggLSBzdGFydEluZGV4ID4gY29uZmlnLml0ZW1zTGltaXQpIHtcbiAgICAgICAgdGhpcy5pdGVtc0xpbWl0RXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b3RhbFNpemUgPSB0b3RhbFNpemU7XG5cbiAgICAgIHZhciB2aWV3ID0gdm9pZCAwO1xuXG4gICAgICB2YXIgY29udGludW91cyA9IHN0YXJ0SW5kZXggPD0gdGhpcy4kX2VuZEluZGV4ICYmIGVuZEluZGV4ID49IHRoaXMuJF9zdGFydEluZGV4O1xuICAgICAgdmFyIHVudXNlZEluZGV4ID0gdm9pZCAwO1xuXG4gICAgICBpZiAodGhpcy4kX2NvbnRpbnVvdXMgIT09IGNvbnRpbnVvdXMpIHtcbiAgICAgICAgaWYgKGNvbnRpbnVvdXMpIHtcbiAgICAgICAgICB2aWV3cy5jbGVhcigpO1xuICAgICAgICAgIHVudXNlZFZpZXdzLmNsZWFyKCk7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsID0gcG9vbC5sZW5ndGg7IF9pIDwgbDsgX2krKykge1xuICAgICAgICAgICAgdmlldyA9IHBvb2xbX2ldO1xuICAgICAgICAgICAgdGhpcy51bnVzZVZpZXcodmlldyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJF9jb250aW51b3VzID0gY29udGludW91cztcbiAgICAgIH0gZWxzZSBpZiAoY29udGludW91cykge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSAwLCBfbCA9IHBvb2wubGVuZ3RoOyBfaTIgPCBfbDsgX2kyKyspIHtcbiAgICAgICAgICB2aWV3ID0gcG9vbFtfaTJdO1xuICAgICAgICAgIGlmICh2aWV3Lm5yLnVzZWQpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB2aWV3IGl0ZW0gaW5kZXhcbiAgICAgICAgICAgIGlmIChjaGVja0l0ZW0pIHtcbiAgICAgICAgICAgICAgdmlldy5uci5pbmRleCA9IGl0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBrZXlGaWVsZCA/IGl0ZW1ba2V5RmllbGRdID09PSB2aWV3Lml0ZW1ba2V5RmllbGRdIDogaXRlbSA9PT0gdmlldy5pdGVtO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaW5kZXggaXMgc3RpbGwgaW4gdmlzaWJsZSByYW5nZVxuICAgICAgICAgICAgaWYgKHZpZXcubnIuaW5kZXggPT09IC0xIHx8IHZpZXcubnIuaW5kZXggPCBzdGFydEluZGV4IHx8IHZpZXcubnIuaW5kZXggPj0gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgdGhpcy51bnVzZVZpZXcodmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGludW91cykge1xuICAgICAgICB1bnVzZWRJbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW0gPSB2b2lkIDAsXG4gICAgICAgICAgdHlwZSA9IHZvaWQgMCxcbiAgICAgICAgICB1bnVzZWRQb29sID0gdm9pZCAwO1xuICAgICAgdmFyIHYgPSB2b2lkIDA7XG4gICAgICBmb3IgKHZhciBfaTMgPSBzdGFydEluZGV4OyBfaTMgPCBlbmRJbmRleDsgX2kzKyspIHtcbiAgICAgICAgaXRlbSA9IGl0ZW1zW19pM107XG4gICAgICAgIHZhciBrZXkgPSBrZXlGaWVsZCA/IGl0ZW1ba2V5RmllbGRdIDogaXRlbTtcbiAgICAgICAgdmlldyA9IHZpZXdzLmdldChrZXkpO1xuXG4gICAgICAgIGlmICghaXRlbVNpemUgJiYgIXNpemVzW19pM10uc2l6ZSkge1xuICAgICAgICAgIGlmICh2aWV3KSB0aGlzLnVudXNlVmlldyh2aWV3KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIHZpZXcgYXNzaWduZWQgdG8gaXRlbVxuICAgICAgICBpZiAoIXZpZXcpIHtcbiAgICAgICAgICB0eXBlID0gaXRlbVt0eXBlRmllbGRdO1xuXG4gICAgICAgICAgaWYgKGNvbnRpbnVvdXMpIHtcbiAgICAgICAgICAgIHVudXNlZFBvb2wgPSB1bnVzZWRWaWV3cy5nZXQodHlwZSk7XG4gICAgICAgICAgICAvLyBSZXVzZSBleGlzdGluZyB2aWV3XG4gICAgICAgICAgICBpZiAodW51c2VkUG9vbCAmJiB1bnVzZWRQb29sLmxlbmd0aCkge1xuICAgICAgICAgICAgICB2aWV3ID0gdW51c2VkUG9vbC5wb3AoKTtcbiAgICAgICAgICAgICAgdmlldy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgICAgdmlldy5uci51c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmlldy5uci5pbmRleCA9IF9pMztcbiAgICAgICAgICAgICAgdmlldy5uci5rZXkgPSBrZXk7XG4gICAgICAgICAgICAgIHZpZXcubnIudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2aWV3ID0gdGhpcy5hZGRWaWV3KHBvb2wsIF9pMywgaXRlbSwga2V5LCB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW51c2VkUG9vbCA9IHVudXNlZFZpZXdzLmdldCh0eXBlKTtcbiAgICAgICAgICAgIHYgPSB1bnVzZWRJbmRleC5nZXQodHlwZSkgfHwgMDtcbiAgICAgICAgICAgIC8vIFVzZSBleGlzdGluZyB2aWV3XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGlmIHRoZXkgYXJlIGFscmVhZHkgdXNlZFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgbm90IGluIGNvbnRpbm91cyBzY3JvbGxpbmdcbiAgICAgICAgICAgIGlmICh1bnVzZWRQb29sICYmIHYgPCB1bnVzZWRQb29sLmxlbmd0aCkge1xuICAgICAgICAgICAgICB2aWV3ID0gdW51c2VkUG9vbFt2XTtcbiAgICAgICAgICAgICAgdmlldy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgICAgdmlldy5uci51c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmlldy5uci5pbmRleCA9IF9pMztcbiAgICAgICAgICAgICAgdmlldy5uci5rZXkgPSBrZXk7XG4gICAgICAgICAgICAgIHZpZXcubnIudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIHVudXNlZEluZGV4LnNldCh0eXBlLCB2ICsgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2aWV3ID0gdGhpcy5hZGRWaWV3KHBvb2wsIF9pMywgaXRlbSwga2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgdGhpcy51bnVzZVZpZXcodmlldywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZpZXdzLnNldChrZXksIHZpZXcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXcubnIudXNlZCA9IHRydWU7XG4gICAgICAgICAgdmlldy5pdGVtID0gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBwb3NpdGlvblxuICAgICAgICBpZiAoaXRlbVNpemUgPT09IG51bGwpIHtcbiAgICAgICAgICB2aWV3LnBvc2l0aW9uID0gc2l6ZXNbX2kzIC0gMV0uYWNjdW11bGF0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlldy5wb3NpdGlvbiA9IF9pMyAqIGl0ZW1TaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJF9zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgIHRoaXMuJF9lbmRJbmRleCA9IGVuZEluZGV4O1xuXG4gICAgICBpZiAodGhpcy5lbWl0VXBkYXRlKSB0aGlzLiRlbWl0KCd1cGRhdGUnLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRpbnVvdXM6IGNvbnRpbnVvdXNcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRMaXN0ZW5lclRhcmdldDogZnVuY3Rpb24gZ2V0TGlzdGVuZXJUYXJnZXQoKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gc2Nyb2xscGFyZW50KHRoaXMuJGVsKTtcbiAgICAgIC8vIEZpeCBnbG9iYWwgc2Nyb2xsIHRhcmdldCBmb3IgQ2hyb21lIGFuZCBTYWZhcmlcbiAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgKHRhcmdldCA9PT0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCB0YXJnZXQgPT09IHdpbmRvdy5kb2N1bWVudC5ib2R5KSkge1xuICAgICAgICB0YXJnZXQgPSB3aW5kb3c7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZ2V0U2Nyb2xsOiBmdW5jdGlvbiBnZXRTY3JvbGwoKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbCxcbiAgICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbjtcblxuICAgICAgdmFyIGlzVmVydGljYWwgPSBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCc7XG4gICAgICB2YXIgc2Nyb2xsU3RhdGUgPSB2b2lkIDA7XG5cbiAgICAgIGlmICh0aGlzLnBhZ2VNb2RlKSB7XG4gICAgICAgIHZhciBib3VuZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdmFyIGJvdW5kc1NpemUgPSBpc1ZlcnRpY2FsID8gYm91bmRzLmhlaWdodCA6IGJvdW5kcy53aWR0aDtcbiAgICAgICAgdmFyIHN0YXJ0ID0gLShpc1ZlcnRpY2FsID8gYm91bmRzLnRvcCA6IGJvdW5kcy5sZWZ0KTtcbiAgICAgICAgdmFyIHNpemUgPSBpc1ZlcnRpY2FsID8gd2luZG93LmlubmVySGVpZ2h0IDogd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICBzaXplICs9IHN0YXJ0O1xuICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgKyBzaXplID4gYm91bmRzU2l6ZSkge1xuICAgICAgICAgIHNpemUgPSBib3VuZHNTaXplIC0gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgc2Nyb2xsU3RhdGUgPSB7XG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgIGVuZDogc3RhcnQgKyBzaXplXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgICAgc2Nyb2xsU3RhdGUgPSB7XG4gICAgICAgICAgc3RhcnQ6IGVsLnNjcm9sbFRvcCxcbiAgICAgICAgICBlbmQ6IGVsLnNjcm9sbFRvcCArIGVsLmNsaWVudEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Nyb2xsU3RhdGUgPSB7XG4gICAgICAgICAgc3RhcnQ6IGVsLnNjcm9sbExlZnQsXG4gICAgICAgICAgZW5kOiBlbC5zY3JvbGxMZWZ0ICsgZWwuY2xpZW50V2lkdGhcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjcm9sbFN0YXRlO1xuICAgIH0sXG4gICAgYXBwbHlQYWdlTW9kZTogZnVuY3Rpb24gYXBwbHlQYWdlTW9kZSgpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VNb2RlKSB7XG4gICAgICAgIHRoaXMuYWRkTGlzdGVuZXJzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkTGlzdGVuZXJzOiBmdW5jdGlvbiBhZGRMaXN0ZW5lcnMoKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyVGFyZ2V0ID0gdGhpcy5nZXRMaXN0ZW5lclRhcmdldCgpO1xuICAgICAgdGhpcy5saXN0ZW5lclRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCwgc3VwcG9ydHNQYXNzaXZlID8ge1xuICAgICAgICBwYXNzaXZlOiB0cnVlXG4gICAgICB9IDogZmFsc2UpO1xuICAgICAgdGhpcy5saXN0ZW5lclRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmhhbmRsZVJlc2l6ZSk7XG4gICAgfSxcbiAgICByZW1vdmVMaXN0ZW5lcnM6IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgIGlmICghdGhpcy5saXN0ZW5lclRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdGVuZXJUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgdGhpcy5saXN0ZW5lclRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmhhbmRsZVJlc2l6ZSk7XG5cbiAgICAgIHRoaXMubGlzdGVuZXJUYXJnZXQgPSBudWxsO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9JdGVtOiBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oaW5kZXgpIHtcbiAgICAgIHZhciBzY3JvbGwgPSB2b2lkIDA7XG4gICAgICBpZiAodGhpcy5pdGVtU2l6ZSA9PT0gbnVsbCkge1xuICAgICAgICBzY3JvbGwgPSBpbmRleCA+IDAgPyB0aGlzLnNpemVzW2luZGV4IC0gMV0uYWNjdW11bGF0b3IgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Nyb2xsID0gaW5kZXggKiB0aGlzLml0ZW1TaXplO1xuICAgICAgfVxuICAgICAgdGhpcy5zY3JvbGxUb1Bvc2l0aW9uKHNjcm9sbCk7XG4gICAgfSxcbiAgICBzY3JvbGxUb1Bvc2l0aW9uOiBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgdGhpcy4kZWwuc2Nyb2xsVG9wID0gcG9zaXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbC5zY3JvbGxMZWZ0ID0gcG9zaXRpb247XG4gICAgICB9XG4gICAgfSxcbiAgICBpdGVtc0xpbWl0RXJyb3I6IGZ1bmN0aW9uIGl0ZW1zTGltaXRFcnJvcigpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0l0IHNlZW1zIHRoZSBzY3JvbGxlciBlbGVtZW50IGlzblxcJ3Qgc2Nyb2xsaW5nLCBzbyBpdCB0cmllcyB0byByZW5kZXIgYWxsIHRoZSBpdGVtcyBhdCBvbmNlLicsICdTY3JvbGxlcjonLCBfdGhpczQuJGVsKTtcbiAgICAgICAgY29uc29sZS5sb2coJ01ha2Ugc3VyZSB0aGUgc2Nyb2xsZXIgaGFzIGEgZml4ZWQgaGVpZ2h0IChvciB3aWR0aCkgYW5kIFxcJ292ZXJmbG93LXlcXCcgKG9yIFxcJ292ZXJmbG93LXhcXCcpIHNldCB0byBcXCdhdXRvXFwnIHNvIGl0IGNhbiBzY3JvbGwgY29ycmVjdGx5IGFuZCBvbmx5IHJlbmRlciB0aGUgaXRlbXMgdmlzaWJsZSBpbiB0aGUgc2Nyb2xsIHZpZXdwb3J0LicpO1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbmRlcmVkIGl0ZW1zIGxpbWl0IHJlYWNoZWQnKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBEeW5hbWljU2Nyb2xsZXIgPSB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdm0gPSB0aGlzO3ZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7cmV0dXJuIF9jKCdSZWN5Y2xlU2Nyb2xsZXInLCBfdm0uX2coX3ZtLl9iKHsgcmVmOiBcInNjcm9sbGVyXCIsIGF0dHJzOiB7IFwiaXRlbXNcIjogX3ZtLml0ZW1zV2l0aFNpemUsIFwibWluLWl0ZW0tc2l6ZVwiOiBfdm0ubWluSXRlbVNpemUsIFwiZGlyZWN0aW9uXCI6IF92bS5kaXJlY3Rpb24sIFwia2V5LWZpZWxkXCI6IFwiaWRcIiB9LCBvbjogeyBcInJlc2l6ZVwiOiBfdm0ub25TY3JvbGxlclJlc2l6ZSwgXCJ2aXNpYmxlXCI6IF92bS5vblNjcm9sbGVyVmlzaWJsZSB9LCBzY29wZWRTbG90czogX3ZtLl91KFt7IGtleTogXCJkZWZhdWx0XCIsIGZuOiBmdW5jdGlvbiBmbihfcmVmKSB7XG4gICAgICAgICAgdmFyIGl0ZW1XaXRoU2l6ZSA9IF9yZWYuaXRlbSxcbiAgICAgICAgICAgICAgaW5kZXggPSBfcmVmLmluZGV4LFxuICAgICAgICAgICAgICBhY3RpdmUgPSBfcmVmLmFjdGl2ZTtcbiAgICAgICAgICByZXR1cm4gW192bS5fdChcImRlZmF1bHRcIiwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgaXRlbTogaXRlbVdpdGhTaXplLml0ZW0sXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBhY3RpdmU6IGFjdGl2ZSxcbiAgICAgICAgICAgIGl0ZW1XaXRoU2l6ZTogaXRlbVdpdGhTaXplXG4gICAgICAgICAgfSldO1xuICAgICAgICB9IH1dKSB9LCAnUmVjeWNsZVNjcm9sbGVyJywgX3ZtLiRhdHRycywgZmFsc2UpLCBfdm0ubGlzdGVuZXJzKSwgW19jKCd0ZW1wbGF0ZScsIHsgc2xvdDogXCJiZWZvcmVcIiB9LCBbX3ZtLl90KFwiYmVmb3JlXCIpXSwgMiksIF92bS5fdihcIiBcIiksIF9jKCd0ZW1wbGF0ZScsIHsgc2xvdDogXCJhZnRlclwiIH0sIFtfdm0uX3QoXCJhZnRlclwiKV0sIDIpXSwgMik7XG4gIH0sIHN0YXRpY1JlbmRlckZuczogW10sXG4gIG5hbWU6ICdEeW5hbWljU2Nyb2xsZXInLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBSZWN5Y2xlU2Nyb2xsZXI6IFJlY3ljbGVTY3JvbGxlclxuICB9LFxuXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdnNjcm9sbERhdGE6IHRoaXMudnNjcm9sbERhdGEsXG4gICAgICB2c2Nyb2xsUGFyZW50OiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcblxuICAgIG1pbkl0ZW1TaXplOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0pLFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZzY3JvbGxEYXRhOiB7XG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgc2l6ZXM6IHt9LFxuICAgICAgICB2YWxpZFNpemVzOiB7fSxcbiAgICAgICAga2V5RmllbGQ6IHRoaXMua2V5RmllbGQsXG4gICAgICAgIHNpbXBsZUFycmF5OiBmYWxzZVxuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHNpbXBsZUFycmF5OiBzaW1wbGVBcnJheSxcblxuICAgIGl0ZW1zV2l0aFNpemU6IGZ1bmN0aW9uIGl0ZW1zV2l0aFNpemUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLFxuICAgICAgICAgIGtleUZpZWxkID0gdGhpcy5rZXlGaWVsZCxcbiAgICAgICAgICBzaW1wbGVBcnJheSQkMSA9IHRoaXMuc2ltcGxlQXJyYXk7XG5cbiAgICAgIHZhciBzaXplcyA9IHRoaXMudnNjcm9sbERhdGEuc2l6ZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIHZhciBpZCA9IHNpbXBsZUFycmF5JCQxID8gaSA6IGl0ZW1ba2V5RmllbGRdO1xuICAgICAgICB2YXIgc2l6ZSA9IHNpemVzW2lkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaXplID09PSAndW5kZWZpbmVkJyAmJiAhdGhpcy4kX3VuZGVmaW5lZE1hcFtpZF0pIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy4kX3VuZGVmaW5lZFNpemVzKys7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJF91bmRlZmluZWRNYXBbaWRdID0gdHJ1ZTtcbiAgICAgICAgICBzaXplID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICBsaXN0ZW5lcnM6IGZ1bmN0aW9uIGxpc3RlbmVycygpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLiRsaXN0ZW5lcnMpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ3Jlc2l6ZScgJiYga2V5ICE9PSAndmlzaWJsZScpIHtcbiAgICAgICAgICBsaXN0ZW5lcnNba2V5XSA9IHRoaXMuJGxpc3RlbmVyc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGl0ZW1zOiBmdW5jdGlvbiBpdGVtcygpIHtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoZmFsc2UpO1xuICAgIH0sXG5cblxuICAgIHNpbXBsZUFycmF5OiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudnNjcm9sbERhdGEuc2ltcGxlQXJyYXkgPSB2YWx1ZTtcbiAgICAgIH0sXG5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH0sXG5cbiAgICBkaXJlY3Rpb246IGZ1bmN0aW9uIGRpcmVjdGlvbih2YWx1ZSkge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSh0cnVlKTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLiRfdXBkYXRlcyA9IFtdO1xuICAgIHRoaXMuJF91bmRlZmluZWRTaXplcyA9IDA7XG4gICAgdGhpcy4kX3VuZGVmaW5lZE1hcCA9IHt9O1xuICB9LFxuICBhY3RpdmF0ZWQ6IGZ1bmN0aW9uIGFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLnZzY3JvbGxEYXRhLmFjdGl2ZSA9IHRydWU7XG4gIH0sXG4gIGRlYWN0aXZhdGVkOiBmdW5jdGlvbiBkZWFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLnZzY3JvbGxEYXRhLmFjdGl2ZSA9IGZhbHNlO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU2Nyb2xsZXJSZXNpemU6IGZ1bmN0aW9uIG9uU2Nyb2xsZXJSZXNpemUoKSB7XG4gICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLiRyZWZzLnNjcm9sbGVyO1xuICAgICAgaWYgKHNjcm9sbGVyKSB7XG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ3Jlc2l6ZScpO1xuICAgIH0sXG4gICAgb25TY3JvbGxlclZpc2libGU6IGZ1bmN0aW9uIG9uU2Nyb2xsZXJWaXNpYmxlKCkge1xuICAgICAgdGhpcy4kZW1pdCgndnNjcm9sbDp1cGRhdGUnLCB7IGZvcmNlOiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUnKTtcbiAgICB9LFxuICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgIHZhciBjbGVhciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgaWYgKGNsZWFyIHx8IHRoaXMuc2ltcGxlQXJyYXkpIHtcbiAgICAgICAgdGhpcy52c2Nyb2xsRGF0YS52YWxpZFNpemVzID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCd2c2Nyb2xsOnVwZGF0ZScsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgICBzY3JvbGxUb0l0ZW06IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShpbmRleCkge1xuICAgICAgdmFyIHNjcm9sbGVyID0gdGhpcy4kcmVmcy5zY3JvbGxlcjtcbiAgICAgIGlmIChzY3JvbGxlcikgc2Nyb2xsZXIuc2Nyb2xsVG9JdGVtKGluZGV4KTtcbiAgICB9LFxuICAgIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShpdGVtKSB7XG4gICAgICB2YXIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgdmFyIGlkID0gdGhpcy5zaW1wbGVBcnJheSA/IGluZGV4ICE9IG51bGwgPyBpbmRleCA6IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKSA6IGl0ZW1bdGhpcy5rZXlGaWVsZF07XG4gICAgICByZXR1cm4gdGhpcy52c2Nyb2xsRGF0YS5zaXplc1tpZF0gfHwgMDtcbiAgICB9LFxuICAgIHNjcm9sbFRvQm90dG9tOiBmdW5jdGlvbiBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRfc2Nyb2xsaW5nVG9Cb3R0b20pIHJldHVybjtcbiAgICAgIHRoaXMuJF9zY3JvbGxpbmdUb0JvdHRvbSA9IHRydWU7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIC8vIEl0ZW0gaXMgaW5zZXJ0ZWQgdG8gdGhlIERPTVxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJdGVtIHNpemVzIGFyZSBjb21wdXRlZFxuICAgICAgICB2YXIgY2IgPSBmdW5jdGlvbiBjYigpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgaWYgKF90aGlzLiRfdW5kZWZpbmVkU2l6ZXMgPT09IDApIHtcbiAgICAgICAgICAgIF90aGlzLiRfc2Nyb2xsaW5nVG9Cb3R0b20gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBEeW5hbWljU2Nyb2xsZXJJdGVtID0ge1xuICBuYW1lOiAnRHluYW1pY1Njcm9sbGVySXRlbScsXG5cbiAgaW5qZWN0OiBbJ3ZzY3JvbGxEYXRhJywgJ3ZzY3JvbGxQYXJlbnQnXSxcblxuICBwcm9wczoge1xuICAgIGl0ZW06IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcblxuICAgIHdhdGNoRGF0YToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIGFjdGl2ZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcblxuICAgIGluZGV4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgc2l6ZURlcGVuZGVuY2llczoge1xuICAgICAgdHlwZTogW0FycmF5LCBPYmplY3RdLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG5cbiAgICBlbWl0UmVzaXplOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlkOiBmdW5jdGlvbiBpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZzY3JvbGxEYXRhLnNpbXBsZUFycmF5ID8gdGhpcy5pbmRleCA6IHRoaXMuaXRlbVt0aGlzLnZzY3JvbGxEYXRhLmtleUZpZWxkXTtcbiAgICB9LFxuICAgIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52c2Nyb2xsRGF0YS52YWxpZFNpemVzW3RoaXMuaWRdICYmIHRoaXMudnNjcm9sbERhdGEuc2l6ZXNbdGhpcy5pZF0gfHwgMDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB3YXRjaERhdGE6ICd1cGRhdGVXYXRjaERhdGEnLFxuXG4gICAgaWQ6IGZ1bmN0aW9uIGlkKCkge1xuICAgICAgaWYgKCF0aGlzLnNpemUpIHtcbiAgICAgICAgdGhpcy5vbkRhdGFVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFjdGl2ZTogZnVuY3Rpb24gYWN0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdGhpcy4kX3BlbmRpbmdWU2Nyb2xsVXBkYXRlID09PSB0aGlzLmlkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgIHRoaXMuJF9mb3JjZU5leHRWU2Nyb2xsVXBkYXRlID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZVdhdGNoRGF0YSgpO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3Aoaykge1xuICAgICAgX3RoaXMuJHdhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnNpemVEZXBlbmRlbmNpZXNba107XG4gICAgICB9LCBfdGhpcy5vbkRhdGFVcGRhdGUpO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBrIGluIHRoaXMuc2l6ZURlcGVuZGVuY2llcykge1xuICAgICAgX2xvb3Aoayk7XG4gICAgfVxuXG4gICAgdGhpcy52c2Nyb2xsUGFyZW50LiRvbigndnNjcm9sbDp1cGRhdGUnLCB0aGlzLm9uVnNjcm9sbFVwZGF0ZSk7XG4gICAgdGhpcy52c2Nyb2xsUGFyZW50LiRvbigndnNjcm9sbDp1cGRhdGUtc2l6ZScsIHRoaXMub25Wc2Nyb2xsVXBkYXRlU2l6ZSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMudnNjcm9sbERhdGEuYWN0aXZlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcbiAgICB9XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy52c2Nyb2xsUGFyZW50LiRvZmYoJ3ZzY3JvbGw6dXBkYXRlJywgdGhpcy5vblZzY3JvbGxVcGRhdGUpO1xuICAgIHRoaXMudnNjcm9sbFBhcmVudC4kb2ZmKCd2c2Nyb2xsOnVwZGF0ZS1zaXplJywgdGhpcy5vblZzY3JvbGxVcGRhdGVTaXplKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVTaXplOiBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlICYmIHRoaXMudnNjcm9sbERhdGEuYWN0aXZlKSB7XG4gICAgICAgIGlmICh0aGlzLiRfcGVuZGluZ1NpemVVcGRhdGUgIT09IHRoaXMuaWQpIHtcbiAgICAgICAgICB0aGlzLiRfcGVuZGluZ1NpemVVcGRhdGUgPSB0aGlzLmlkO1xuICAgICAgICAgIHRoaXMuJF9mb3JjZU5leHRWU2Nyb2xsVXBkYXRlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLiRfcGVuZGluZ1ZTY3JvbGxVcGRhdGUgPSBudWxsO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSAmJiB0aGlzLnZzY3JvbGxEYXRhLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlU2l6ZSh0aGlzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJF9mb3JjZU5leHRWU2Nyb2xsVXBkYXRlID0gdGhpcy5pZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEJvdW5kczogZnVuY3Rpb24gZ2V0Qm91bmRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH0sXG4gICAgdXBkYXRlV2F0Y2hEYXRhOiBmdW5jdGlvbiB1cGRhdGVXYXRjaERhdGEoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMud2F0Y2hEYXRhKSB7XG4gICAgICAgIHRoaXMuJF93YXRjaERhdGEgPSB0aGlzLiR3YXRjaCgnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIub25EYXRhVXBkYXRlKCk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLiRfd2F0Y2hEYXRhKSB7XG4gICAgICAgIHRoaXMuJF93YXRjaERhdGEoKTtcbiAgICAgICAgdGhpcy4kX3dhdGNoRGF0YSA9IG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblZzY3JvbGxVcGRhdGU6IGZ1bmN0aW9uIG9uVnNjcm9sbFVwZGF0ZShfcmVmKSB7XG4gICAgICB2YXIgZm9yY2UgPSBfcmVmLmZvcmNlO1xuXG4gICAgICBpZiAoIXRoaXMuYWN0aXZlICYmIGZvcmNlKSB7XG4gICAgICAgIHRoaXMuJF9wZW5kaW5nVlNjcm9sbFVwZGF0ZSA9IHRoaXMuaWQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4kX2ZvcmNlTmV4dFZTY3JvbGxVcGRhdGUgPT09IHRoaXMuaWQgfHwgZm9yY2UgfHwgIXRoaXMuc2l6ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRGF0YVVwZGF0ZTogZnVuY3Rpb24gb25EYXRhVXBkYXRlKCkge1xuICAgICAgdGhpcy51cGRhdGVTaXplKCk7XG4gICAgfSxcbiAgICBjb21wdXRlU2l6ZTogZnVuY3Rpb24gY29tcHV0ZVNpemUoaWQpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczMuaWQgPT09IGlkKSB7XG4gICAgICAgICAgdmFyIGJvdW5kcyA9IF90aGlzMy5nZXRCb3VuZHMoKTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgucm91bmQoX3RoaXMzLnZzY3JvbGxQYXJlbnQuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gYm91bmRzLmhlaWdodCA6IGJvdW5kcy53aWR0aCk7XG4gICAgICAgICAgaWYgKHNpemUgJiYgX3RoaXMzLnNpemUgIT09IHNpemUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczMudnNjcm9sbFBhcmVudC4kX3VuZGVmaW5lZE1hcFtpZF0pIHtcbiAgICAgICAgICAgICAgX3RoaXMzLnZzY3JvbGxQYXJlbnQuJF91bmRlZmluZWRTaXplcy0tO1xuICAgICAgICAgICAgICBfdGhpczMudnNjcm9sbFBhcmVudC4kX3VuZGVmaW5lZE1hcFtpZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpczMuJHNldChfdGhpczMudnNjcm9sbERhdGEuc2l6ZXMsIF90aGlzMy5pZCwgc2l6ZSk7XG4gICAgICAgICAgICBfdGhpczMuJHNldChfdGhpczMudnNjcm9sbERhdGEudmFsaWRTaXplcywgX3RoaXMzLmlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChfdGhpczMuZW1pdFJlc2l6ZSkgX3RoaXMzLiRlbWl0KCdyZXNpemUnLCBfdGhpczMuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpczMuJF9wZW5kaW5nU2l6ZVVwZGF0ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHJldHVybiBoKHRoaXMudGFnLCB0aGlzLiRzbG90cy5kZWZhdWx0KTtcbiAgfVxufTtcblxudmFyIElkU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYkaWRQcm9wID0gX3JlZi5pZFByb3AsXG4gICAgICBpZFByb3AgPSBfcmVmJGlkUHJvcCA9PT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKHZtKSB7XG4gICAgcmV0dXJuIHZtLml0ZW0uaWQ7XG4gIH0gOiBfcmVmJGlkUHJvcDtcblxuICB2YXIgc3RvcmUgPSB7fTtcbiAgdmFyIHZtID0gbmV3IFZ1ZSh7XG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0b3JlOiBzdG9yZVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHJldHVybiB7XG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkU3RhdGU6IG51bGxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy4kX2lkID0gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgaWRQcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuJF9nZXRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gaWRQcm9wLmNhbGwoX3RoaXMsIF90aGlzKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJF9nZXRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXNbaWRQcm9wXTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJHdhdGNoKHRoaXMuJF9nZXRJZCwge1xuICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczIuJF9pZCA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRfdXBkYXRlSWRTdGF0ZSgpO1xuICAgIH0sXG4gICAgYmVmb3JlVXBkYXRlOiBmdW5jdGlvbiBiZWZvcmVVcGRhdGUoKSB7XG4gICAgICB0aGlzLiRfdXBkYXRlSWRTdGF0ZSgpO1xuICAgIH0sXG5cblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZSBhbiBpZFN0YXRlXG4gICAgICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGlkIFVuaXF1ZSBpZCBmb3IgdGhlIGRhdGFcbiAgICAgICAqL1xuICAgICAgJF9pZFN0YXRlSW5pdDogZnVuY3Rpb24gJF9pZFN0YXRlSW5pdChpZCkge1xuICAgICAgICB2YXIgZmFjdG9yeSA9IHRoaXMuJG9wdGlvbnMuaWRTdGF0ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBmYWN0b3J5LmNhbGwodGhpcywgdGhpcyk7XG4gICAgICAgICAgdm0uJHNldChzdG9yZSwgaWQsIGRhdGEpO1xuICAgICAgICAgIHRoaXMuJF9pZCA9IGlkO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW21peGluIElkU3RhdGVdIE1pc3NpbmcgYGlkU3RhdGVgIGZ1bmN0aW9uIG9uIGNvbXBvbmVudCBkZWZpbml0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG5cbiAgICAgIC8qKlxuICAgICAgICogRW5zdXJlIGlkU3RhdGUgaXMgY3JlYXRlZCBhbmQgdXAtdG8tZGF0ZVxuICAgICAgICovXG4gICAgICAkX3VwZGF0ZUlkU3RhdGU6IGZ1bmN0aW9uICRfdXBkYXRlSWRTdGF0ZSgpIHtcbiAgICAgICAgdmFyIGlkID0gdGhpcy4kX2dldElkKCk7XG4gICAgICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdObyBpZCBmb3VuZCBmb3IgSWRTdGF0ZSB3aXRoIGlkUHJvcDogXFwnJyArIGlkUHJvcCArICdcXCcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9PSB0aGlzLiRfaWQpIHtcbiAgICAgICAgICBpZiAoIXN0b3JlW2lkXSkge1xuICAgICAgICAgICAgdGhpcy4kX2lkU3RhdGVJbml0KGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pZFN0YXRlID0gc3RvcmVbaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJDb21wb25lbnRzKFZ1ZSQkMSwgcHJlZml4KSB7XG4gIFZ1ZSQkMS5jb21wb25lbnQocHJlZml4ICsgJ3JlY3ljbGUtc2Nyb2xsZXInLCBSZWN5Y2xlU2Nyb2xsZXIpO1xuICBWdWUkJDEuY29tcG9uZW50KHByZWZpeCArICdSZWN5Y2xlU2Nyb2xsZXInLCBSZWN5Y2xlU2Nyb2xsZXIpO1xuICBWdWUkJDEuY29tcG9uZW50KHByZWZpeCArICdkeW5hbWljLXNjcm9sbGVyJywgRHluYW1pY1Njcm9sbGVyKTtcbiAgVnVlJCQxLmNvbXBvbmVudChwcmVmaXggKyAnRHluYW1pY1Njcm9sbGVyJywgRHluYW1pY1Njcm9sbGVyKTtcbiAgVnVlJCQxLmNvbXBvbmVudChwcmVmaXggKyAnZHluYW1pYy1zY3JvbGxlci1pdGVtJywgRHluYW1pY1Njcm9sbGVySXRlbSk7XG4gIFZ1ZSQkMS5jb21wb25lbnQocHJlZml4ICsgJ0R5bmFtaWNTY3JvbGxlckl0ZW0nLCBEeW5hbWljU2Nyb2xsZXJJdGVtKTtcbn1cblxudmFyIHBsdWdpbiA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZlcnNpb246IFwiMS4wLjAtcmMuMlwiLFxuICBpbnN0YWxsOiBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSQkMSwgb3B0aW9ucykge1xuICAgIHZhciBmaW5hbE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICBpbnN0YWxsQ29tcG9uZW50czogdHJ1ZSxcbiAgICAgIGNvbXBvbmVudHNQcmVmaXg6ICcnXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZmluYWxPcHRpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIGZpbmFsT3B0aW9uc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25maWdba2V5XSA9IGZpbmFsT3B0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaW5hbE9wdGlvbnMuaW5zdGFsbENvbXBvbmVudHMpIHtcbiAgICAgIHJlZ2lzdGVyQ29tcG9uZW50cyhWdWUkJDEsIGZpbmFsT3B0aW9ucy5jb21wb25lbnRzUHJlZml4KTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIEF1dG8taW5zdGFsbFxudmFyIEdsb2JhbFZ1ZSA9IG51bGw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgR2xvYmFsVnVlID0gd2luZG93LlZ1ZTtcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgR2xvYmFsVnVlID0gZ2xvYmFsLlZ1ZTtcbn1cbmlmIChHbG9iYWxWdWUpIHtcbiAgR2xvYmFsVnVlLnVzZShwbHVnaW4pO1xufVxuXG5leHBvcnQgeyBSZWN5Y2xlU2Nyb2xsZXIsIER5bmFtaWNTY3JvbGxlciwgRHluYW1pY1Njcm9sbGVySXRlbSwgSWRTdGF0ZSB9O1xuZXhwb3J0IGRlZmF1bHQgcGx1Z2luO1xuIiwiLyohXG4gKiBWdWUuanMgdjIuNi4xMFxuICogKGMpIDIwMTQtMjAxOSBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxudmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbi8vIFRoZXNlIGhlbHBlcnMgcHJvZHVjZSBiZXR0ZXIgVk0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5jdGlvbiBpbmxpbmluZy5cbmZ1bmN0aW9uIGlzVW5kZWYgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVmICh2KSB7XG4gIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc1RydWUgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHRydWVcbn1cblxuZnVuY3Rpb24gaXNGYWxzZSAodikge1xuICByZXR1cm4gdiA9PT0gZmFsc2Vcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmltaXRpdmUuXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cblxuLyoqXG4gKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIE9iamVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSwgZS5nLiwgW29iamVjdCBPYmplY3RdLlxuICovXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gdG9SYXdUeXBlICh2YWx1ZSkge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG4vKipcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2YWwpXG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSAodmFsKSB7XG4gIHJldHVybiAoXG4gICAgaXNEZWYodmFsKSAmJlxuICAgIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2YWwuY2F0Y2ggPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICovXG5mdW5jdGlvbiB0b1N0cmluZyAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbFxuICAgID8gJydcbiAgICA6IEFycmF5LmlzQXJyYXkodmFsKSB8fCAoaXNQbGFpbk9iamVjdCh2YWwpICYmIHZhbC50b1N0cmluZyA9PT0gX3RvU3RyaW5nKVxuICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpXG4gICAgICA6IFN0cmluZyh2YWwpXG59XG5cbi8qKlxuICogQ29udmVydCBhbiBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIgKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxufVxuXG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAgKFxuICBzdHIsXG4gIGV4cGVjdHNMb3dlckNhc2Vcbikge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXTsgfVxuICAgIDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICovXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XG5cbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSBhbiBhcnJheS5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGFyci5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYWNoZWQgKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAoZnVuY3Rpb24gY2FjaGVkRm4gKHN0cikge1xuICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKVxuICB9KVxufVxuXG4vKipcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbnZhciBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xudmFyIGNhbWVsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7IH0pXG59KTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICovXG52YXIgY2FwaXRhbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSlcbn0pO1xuXG4vKipcbiAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gKi9cbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnLSQxJykudG9Mb3dlckNhc2UoKVxufSk7XG5cbi8qKlxuICogU2ltcGxlIGJpbmQgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0LFxuICogZS5nLiwgUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHksIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlXG4gKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAqIEJ1dCByZW1vdmluZyBpdCB3b3VsZCBtZWFuIGJyZWFraW5nIGNvZGUgdGhhdCB3YXMgYWJsZSB0byBydW4gaW5cbiAqIFBoYW50b21KUyAxLngsIHNvIHRoaXMgbXVzdCBiZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBwb2x5ZmlsbEJpbmQgKGZuLCBjdHgpIHtcbiAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbFxuICAgICAgPyBsID4gMVxuICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxuICAgICAgOiBmbi5jYWxsKGN0eClcbiAgfVxuXG4gIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgcmV0dXJuIGJvdW5kRm5cbn1cblxuZnVuY3Rpb24gbmF0aXZlQmluZCAoZm4sIGN0eCkge1xuICByZXR1cm4gZm4uYmluZChjdHgpXG59XG5cbnZhciBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgPyBuYXRpdmVCaW5kXG4gIDogcG9seWZpbGxCaW5kO1xuXG4vKipcbiAqIENvbnZlcnQgYW4gQXJyYXktbGlrZSBvYmplY3QgdG8gYSByZWFsIEFycmF5LlxuICovXG5mdW5jdGlvbiB0b0FycmF5IChsaXN0LCBzdGFydCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gIHZhciBpID0gbGlzdC5sZW5ndGggLSBzdGFydDtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSkge1xuICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRlbmQgKHRvLCBfZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdCAoYXJyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyW2ldKSB7XG4gICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUGVyZm9ybSBubyBvcGVyYXRpb24uXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcbiAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAqL1xuZnVuY3Rpb24gbm9vcCAoYSwgYiwgYykge31cblxuLyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gKi9cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9O1xuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50JyxcbiAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAnbW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnLFxuICAnZXJyb3JDYXB0dXJlZCcsXG4gICdzZXJ2ZXJQcmVmZXRjaCdcbl07XG5cbi8qICAqL1xuXG5cblxudmFyIGNvbmZpZyA9ICh7XG4gIC8qKlxuICAgKiBPcHRpb24gbWVyZ2Ugc3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAqL1xuICBzaWxlbnQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgKi9cbiAgcHJvZHVjdGlvblRpcDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZGV2dG9vbHNcbiAgICovXG4gIGRldnRvb2xzOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAqL1xuICBwZXJmb3JtYW5jZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXG4gICAqL1xuICBlcnJvckhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgKi9cbiAgd2FybkhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIElnbm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgKi9cbiAgaWdub3JlZEVsZW1lbnRzOiBbXSxcblxuICAvKipcbiAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXG4gICAqIGNvbXBvbmVudC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRUYWc6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxuICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZEF0dHI6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XG4gICAqL1xuICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSByZWFsIHRhZyBuYW1lIGZvciB0aGUgc3BlY2lmaWMgcGxhdGZvcm0uXG4gICAqL1xuICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIG11c3RVc2VQcm9wOiBubyxcblxuICAvKipcbiAgICogUGVyZm9ybSB1cGRhdGVzIGFzeW5jaHJvbm91c2x5LiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFZ1ZSBUZXN0IFV0aWxzXG4gICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAqL1xuICBhc3luYzogdHJ1ZSxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICovXG4gIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXG59KTtcblxuLyogICovXG5cbi8qKlxuICogdW5pY29kZSBsZXR0ZXJzIHVzZWQgZm9yIHBhcnNpbmcgaHRtbCB0YWdzLCBjb21wb25lbnQgbmFtZXMgYW5kIHByb3BlcnR5IHBhdGhzLlxuICogdXNpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1My9zZW1hbnRpY3Mtc2NyaXB0aW5nLmh0bWwjcG90ZW50aWFsY3VzdG9tZWxlbWVudG5hbWVcbiAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAqL1xudmFyIHVuaWNvZGVSZWdFeHAgPSAvYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQgKHN0cikge1xuICB2YXIgYyA9IChzdHIgKyAnJykuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1RlxufVxuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYgKG9iaiwga2V5LCB2YWwsIGVudW1lcmFibGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgdmFsdWU6IHZhbCxcbiAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHNpbXBsZSBwYXRoLlxuICovXG52YXIgYmFpbFJFID0gbmV3IFJlZ0V4cCgoXCJbXlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiLiRfXFxcXGRdXCIpKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFvYmopIHsgcmV0dXJuIH1cbiAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgfVxuICAgIHJldHVybiBvYmpcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG52YXIgaGFzUHJvdG8gPSAnX19wcm90b19fJyBpbiB7fTtcblxuLy8gQnJvd3NlciBlbnZpcm9ubWVudCBzbmlmZmluZ1xudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xudmFyIGluV2VleCA9IHR5cGVvZiBXWEVudmlyb25tZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhIVdYRW52aXJvbm1lbnQucGxhdGZvcm07XG52YXIgd2VleFBsYXRmb3JtID0gaW5XZWV4ICYmIFdYRW52aXJvbm1lbnQucGxhdGZvcm0udG9Mb3dlckNhc2UoKTtcbnZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xudmFyIGlzSUUgPSBVQSAmJiAvbXNpZXx0cmlkZW50Ly50ZXN0KFVBKTtcbnZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xudmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xudmFyIGlzQW5kcm9pZCA9IChVQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lkJykgPiAwKSB8fCAod2VleFBsYXRmb3JtID09PSAnYW5kcm9pZCcpO1xudmFyIGlzSU9TID0gKFVBICYmIC9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChVQSkpIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdpb3MnKTtcbnZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xudmFyIGlzUGhhbnRvbUpTID0gVUEgJiYgL3BoYW50b21qcy8udGVzdChVQSk7XG52YXIgaXNGRiA9IFVBICYmIFVBLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLyk7XG5cbi8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbnZhciBuYXRpdmVXYXRjaCA9ICh7fSkud2F0Y2g7XG5cbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbmlmIChpbkJyb3dzZXIpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSkpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbi8vIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgY2FuIHNldCBWVUVfRU5WXG52YXIgX2lzU2VydmVyO1xudmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3NlciAmJiAhaW5XZWV4ICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkZXRlY3QgcHJlc2VuY2Ugb2YgdnVlLXNlcnZlci1yZW5kZXJlciBhbmQgYXZvaWRcbiAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgIF9pc1NlcnZlciA9IGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICB9IGVsc2Uge1xuICAgICAgX2lzU2VydmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBfaXNTZXJ2ZXJcbn07XG5cbi8vIGRldGVjdCBkZXZ0b29sc1xudmFyIGRldnRvb2xzID0gaW5Ccm93c2VyICYmIHdpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaXNOYXRpdmUgKEN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChDdG9yLnRvU3RyaW5nKCkpXG59XG5cbnZhciBoYXNTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTeW1ib2wpICYmXG4gIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xuXG52YXIgX1NldDtcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbmlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gIC8vIHVzZSBuYXRpdmUgU2V0IHdoZW4gYXZhaWxhYmxlLlxuICBfU2V0ID0gU2V0O1xufSBlbHNlIHtcbiAgLy8gYSBub24tc3RhbmRhcmQgU2V0IHBvbHlmaWxsIHRoYXQgb25seSB3b3JrcyB3aXRoIHByaW1pdGl2ZSBrZXlzLlxuICBfU2V0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0W2tleV0gPT09IHRydWVcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNldDtcbiAgfSgpKTtcbn1cblxuLyogICovXG5cbnZhciB3YXJuID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG5vb3ApO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaGFzQ29uc29sZSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGNsYXNzaWZ5UkUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pXG4gICAgLnJlcGxhY2UoL1stX10vZywgJycpOyB9O1xuXG4gIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcblxuICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbVnVlIHdhcm5dOiBcIiArIG1zZyArIHRyYWNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIiArIG1zZyArIChcbiAgICAgICAgdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnXG4gICAgICApKTtcbiAgICB9XG4gIH07XG5cbiAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm07XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAoXCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkID0gMDtcblxuLyoqXG4gKiBBIGRlcCBpcyBhbiBvYnNlcnZhYmxlIHRoYXQgY2FuIGhhdmUgbXVsdGlwbGVcbiAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gKi9cbnZhciBEZXAgPSBmdW5jdGlvbiBEZXAgKCkge1xuICB0aGlzLmlkID0gdWlkKys7XG4gIHRoaXMuc3VicyA9IFtdO1xufTtcblxuRGVwLnByb3RvdHlwZS5hZGRTdWIgPSBmdW5jdGlvbiBhZGRTdWIgKHN1Yikge1xuICB0aGlzLnN1YnMucHVzaChzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiByZW1vdmVTdWIgKHN1Yikge1xuICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICBpZiAoRGVwLnRhcmdldCkge1xuICAgIERlcC50YXJnZXQuYWRkRGVwKHRoaXMpO1xuICB9XG59O1xuXG5EZXAucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSAoKSB7XG4gIC8vIHN0YWJpbGl6ZSB0aGUgc3Vic2NyaWJlciBsaXN0IGZpcnN0XG4gIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAvLyBzdWJzIGFyZW4ndCBzb3J0ZWQgaW4gc2NoZWR1bGVyIGlmIG5vdCBydW5uaW5nIGFzeW5jXG4gICAgLy8gd2UgbmVlZCB0byBzb3J0IHRoZW0gbm93IHRvIG1ha2Ugc3VyZSB0aGV5IGZpcmUgaW4gY29ycmVjdFxuICAgIC8vIG9yZGVyXG4gICAgc3Vicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHN1YnNbaV0udXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIFRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIFRoaXMgaXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2Ugb25seSBvbmUgd2F0Y2hlclxuLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXG5EZXAudGFyZ2V0ID0gbnVsbDtcbnZhciB0YXJnZXRTdGFjayA9IFtdO1xuXG5mdW5jdGlvbiBwdXNoVGFyZ2V0ICh0YXJnZXQpIHtcbiAgdGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICBEZXAudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBwb3BUYXJnZXQgKCkge1xuICB0YXJnZXRTdGFjay5wb3AoKTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrW3RhcmdldFN0YWNrLmxlbmd0aCAtIDFdO1xufVxuXG4vKiAgKi9cblxudmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUgKFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICB0ZXh0LFxuICBlbG0sXG4gIGNvbnRleHQsXG4gIGNvbXBvbmVudE9wdGlvbnMsXG4gIGFzeW5jRmFjdG9yeVxuKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMuZWxtID0gZWxtO1xuICB0aGlzLm5zID0gdW5kZWZpbmVkO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLmZuQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mbk9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5TY29wZUlkID0gdW5kZWZpbmVkO1xuICB0aGlzLmtleSA9IGRhdGEgJiYgZGF0YS5rZXk7XG4gIHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICB0aGlzLnJhdyA9IGZhbHNlO1xuICB0aGlzLmlzU3RhdGljID0gZmFsc2U7XG4gIHRoaXMuaXNSb290SW5zZXJ0ID0gdHJ1ZTtcbiAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgdGhpcy5pc0Nsb25lZCA9IGZhbHNlO1xuICB0aGlzLmlzT25jZSA9IGZhbHNlO1xuICB0aGlzLmFzeW5jRmFjdG9yeSA9IGFzeW5jRmFjdG9yeTtcbiAgdGhpcy5hc3luY01ldGEgPSB1bmRlZmluZWQ7XG4gIHRoaXMuaXNBc3luY1BsYWNlaG9sZGVyID0gZmFsc2U7XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjaGlsZDogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4vLyBERVBSRUNBVEVEOiBhbGlhcyBmb3IgY29tcG9uZW50SW5zdGFuY2UgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucHJvdG90eXBlQWNjZXNzb3JzLmNoaWxkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2Vcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWTm9kZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIGlmICggdGV4dCA9PT0gdm9pZCAwICkgdGV4dCA9ICcnO1xuXG4gIHZhciBub2RlID0gbmV3IFZOb2RlKCk7XG4gIG5vZGUudGV4dCA9IHRleHQ7XG4gIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcbiAgcmV0dXJuIG5vZGVcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSAodmFsKSB7XG4gIHJldHVybiBuZXcgVk5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgU3RyaW5nKHZhbCkpXG59XG5cbi8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXG4vLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbi8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG5mdW5jdGlvbiBjbG9uZVZOb2RlICh2bm9kZSkge1xuICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKFxuICAgIHZub2RlLnRhZyxcbiAgICB2bm9kZS5kYXRhLFxuICAgIC8vICM3OTc1XG4gICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgLy8gYSBjaGlsZC5cbiAgICB2bm9kZS5jaGlsZHJlbiAmJiB2bm9kZS5jaGlsZHJlbi5zbGljZSgpLFxuICAgIHZub2RlLnRleHQsXG4gICAgdm5vZGUuZWxtLFxuICAgIHZub2RlLmNvbnRleHQsXG4gICAgdm5vZGUuY29tcG9uZW50T3B0aW9ucyxcbiAgICB2bm9kZS5hc3luY0ZhY3RvcnlcbiAgKTtcbiAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gIGNsb25lZC5pc1N0YXRpYyA9IHZub2RlLmlzU3RhdGljO1xuICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICBjbG9uZWQuZm5Db250ZXh0ID0gdm5vZGUuZm5Db250ZXh0O1xuICBjbG9uZWQuZm5PcHRpb25zID0gdm5vZGUuZm5PcHRpb25zO1xuICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICBjbG9uZWQuYXN5bmNNZXRhID0gdm5vZGUuYXN5bmNNZXRhO1xuICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICByZXR1cm4gY2xvbmVkXG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG5cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVhdGUoYXJyYXlQcm90byk7XG5cbnZhciBtZXRob2RzVG9QYXRjaCA9IFtcbiAgJ3B1c2gnLFxuICAncG9wJyxcbiAgJ3NoaWZ0JyxcbiAgJ3Vuc2hpZnQnLFxuICAnc3BsaWNlJyxcbiAgJ3NvcnQnLFxuICAncmV2ZXJzZSdcbl07XG5cbi8qKlxuICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXG4gKi9cbm1ldGhvZHNUb1BhdGNoLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgdmFyIG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICBkZWYoYXJyYXlNZXRob2RzLCBtZXRob2QsIGZ1bmN0aW9uIG11dGF0b3IgKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NwbGljZSc6XG4gICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKGluc2VydGVkKSB7IG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7IH1cbiAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgfSk7XG59KTtcblxuLyogICovXG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4vKipcbiAqIEluIHNvbWUgY2FzZXMgd2UgbWF5IHdhbnQgdG8gZGlzYWJsZSBvYnNlcnZhdGlvbiBpbnNpZGUgYSBjb21wb25lbnQnc1xuICogdXBkYXRlIGNvbXB1dGF0aW9uLlxuICovXG52YXIgc2hvdWxkT2JzZXJ2ZSA9IHRydWU7XG5cbmZ1bmN0aW9uIHRvZ2dsZU9ic2VydmluZyAodmFsdWUpIHtcbiAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIE9ic2VydmVyIGNsYXNzIHRoYXQgaXMgYXR0YWNoZWQgdG8gZWFjaCBvYnNlcnZlZFxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxuICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAqIGNvbGxlY3QgZGVwZW5kZW5jaWVzIGFuZCBkaXNwYXRjaCB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSBmdW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzLmRlcCA9IG5ldyBEZXAoKTtcbiAgdGhpcy52bUNvdW50ID0gMDtcbiAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmIChoYXNQcm90bykge1xuICAgICAgcHJvdG9BdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5QXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzLCBhcnJheUtleXMpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53YWxrKHZhbHVlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXYWxrIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvXG4gKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAqIHZhbHVlIHR5cGUgaXMgT2JqZWN0LlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIHdhbGsgKG9iaikge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iaiwga2V5c1tpXSk7XG4gIH1cbn07XG5cbi8qKlxuICogT2JzZXJ2ZSBhIGxpc3Qgb2YgQXJyYXkgaXRlbXMuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiBvYnNlcnZlQXJyYXkgKGl0ZW1zKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb2JzZXJ2ZShpdGVtc1tpXSk7XG4gIH1cbn07XG5cbi8vIGhlbHBlcnNcblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBpbnRlcmNlcHRpbmdcbiAqIHRoZSBwcm90b3R5cGUgY2hhaW4gdXNpbmcgX19wcm90b19fXG4gKi9cbmZ1bmN0aW9uIHByb3RvQXVnbWVudCAodGFyZ2V0LCBzcmMpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbiAgdGFyZ2V0Ll9fcHJvdG9fXyA9IHNyYztcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xufVxuXG4vKipcbiAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmluaW5nXG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYjtcbiAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgb2IgPSB2YWx1ZS5fX29iX187XG4gIH0gZWxzZSBpZiAoXG4gICAgc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICFpc1NlcnZlclJlbmRlcmluZygpICYmXG4gICAgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgIXZhbHVlLl9pc1Z1ZVxuICApIHtcbiAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGFzUm9vdERhdGEgJiYgb2IpIHtcbiAgICBvYi52bUNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIG9iXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcmVhY3RpdmUgcHJvcGVydHkgb24gYW4gT2JqZWN0LlxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2ZSQkMSAoXG4gIG9iaixcbiAga2V5LFxuICB2YWwsXG4gIGN1c3RvbVNldHRlcixcbiAgc2hhbGxvd1xuKSB7XG4gIHZhciBkZXAgPSBuZXcgRGVwKCk7XG5cbiAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgdmFyIGdldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LmdldDtcbiAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgaWYgKCghZ2V0dGVyIHx8IHNldHRlcikgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIHZhbCA9IG9ialtrZXldO1xuICB9XG5cbiAgdmFyIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKHZhbCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gcmVhY3RpdmVHZXR0ZXIgKCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgIGlmIChnZXR0ZXIgJiYgIXNldHRlcikgeyByZXR1cm4gfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJ2F0IHJ1bnRpbWUgLSBkZWNsYXJlIGl0IHVwZnJvbnQgaW4gdGhlIGRhdGEgb3B0aW9uLidcbiAgICApO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoIW9iKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGRlZmluZVJlYWN0aXZlJCQxKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gIG9iLmRlcC5ub3RpZnkoKTtcbiAgcmV0dXJuIHZhbFxufVxuXG4vKipcbiAqIERlbGV0ZSBhIHByb3BlcnR5IGFuZCB0cmlnZ2VyIGNoYW5nZSBpZiBuZWNlc3NhcnkuXG4gKi9cbmZ1bmN0aW9uIGRlbCAodGFyZ2V0LCBrZXkpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IGRlbGV0ZSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAnLSBqdXN0IHNldCBpdCB0byBudWxsLidcbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XTtcbiAgaWYgKCFvYikge1xuICAgIHJldHVyblxuICB9XG4gIG9iLmRlcC5ub3RpZnkoKTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICogd2UgY2Fubm90IGludGVyY2VwdCBhcnJheSBlbGVtZW50IGFjY2VzcyBsaWtlIHByb3BlcnR5IGdldHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICBmb3IgKHZhciBlID0gKHZvaWQgMCksIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZSA9IHZhbHVlW2ldO1xuICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBkZXBlbmRBcnJheShlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogT3B0aW9uIG92ZXJ3cml0aW5nIHN0cmF0ZWdpZXMgYXJlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZVxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICovXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICdjcmVhdGlvbiB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0U3RyYXQocGFyZW50LCBjaGlsZClcbiAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhICh0bywgZnJvbSkge1xuICBpZiAoIWZyb20pIHsgcmV0dXJuIHRvIH1cbiAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG5cbiAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICA/IFJlZmxlY3Qub3duS2V5cyhmcm9tKVxuICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICAvLyBpbiBjYXNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBvYnNlcnZlZC4uLlxuICAgIGlmIChrZXkgPT09ICdfX29iX18nKSB7IGNvbnRpbnVlIH1cbiAgICB0b1ZhbCA9IHRvW2tleV07XG4gICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICBpZiAoIWhhc093bih0bywga2V5KSkge1xuICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0b1ZhbCAhPT0gZnJvbVZhbCAmJlxuICAgICAgaXNQbGFpbk9iamVjdCh0b1ZhbCkgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbClcbiAgICApIHtcbiAgICAgIG1lcmdlRGF0YSh0b1ZhbCwgZnJvbVZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIC8vIGluIGEgVnVlLmV4dGVuZCBtZXJnZSwgYm90aCBzaG91bGQgYmUgZnVuY3Rpb25zXG4gICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgfVxuICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAvLyBtZXJnZWQgcmVzdWx0IG9mIGJvdGggZnVuY3Rpb25zLi4uIG5vIG5lZWQgdG9cbiAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkRGF0YUZuICgpIHtcbiAgICAgIHJldHVybiBtZXJnZURhdGEoXG4gICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGhpcykgOiBjaGlsZFZhbCxcbiAgICAgICAgdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbiAoKSB7XG4gICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0sIHZtKVxuICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgdmFyIGRlZmF1bHREYXRhID0gdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICBpZiAoaW5zdGFuY2VEYXRhKSB7XG4gICAgICAgIHJldHVybiBtZXJnZURhdGEoaW5zdGFuY2VEYXRhLCBkZWZhdWx0RGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm1cbikge1xuICBpZiAoIXZtKSB7XG4gICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAgICB2bVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsKVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pXG59O1xuXG4vKipcbiAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbFxuKSB7XG4gIHZhciByZXMgPSBjaGlsZFZhbFxuICAgID8gcGFyZW50VmFsXG4gICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgID8gY2hpbGRWYWxcbiAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgOiBwYXJlbnRWYWw7XG4gIHJldHVybiByZXNcbiAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICA6IHJlc1xufVxuXG5mdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5MSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICBzdHJhdHNbaG9va10gPSBtZXJnZUhvb2s7XG59KTtcblxuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICBpZiAoY2hpbGRWYWwpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSB7fTtcbiAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgZm9yICh2YXIga2V5JDEgaW4gY2hpbGRWYWwpIHtcbiAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZFZhbFtrZXkkMV07XG4gICAgaWYgKHBhcmVudCAmJiAhQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICB9XG4gICAgcmV0W2tleSQxXSA9IHBhcmVudFxuICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgfVxuICByZXR1cm4gcmV0XG59O1xuXG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG5zdHJhdHMubWV0aG9kcyA9XG5zdHJhdHMuaW5qZWN0ID1cbnN0cmF0cy5jb21wdXRlZCA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIGlmIChjaGlsZFZhbCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghbmV3IFJlZ0V4cCgoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUocHJvcHMpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9wdGlvbnMsIHZtKSB7XG4gIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgaWYgKCFpbmplY3QpIHsgcmV0dXJuIH1cbiAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYkJDEsIHVwZGF0ZTogZGVmJCQxIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gIH1cblxuICBub3JtYWxpemVQcm9wcyhjaGlsZCwgdm0pO1xuICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGlsZCk7XG5cbiAgLy8gQXBwbHkgZXh0ZW5kcyBhbmQgbWl4aW5zIG9uIHRoZSBjaGlsZCBvcHRpb25zLFxuICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgLy8gT25seSBtZXJnZWQgb3B0aW9ucyBoYXMgdGhlIF9iYXNlIHByb3BlcnR5LlxuICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgaWYgKGNoaWxkLmV4dGVuZHMpIHtcbiAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTtcbiAgICB9XG4gICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZC5taXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvcHRpb25zID0ge307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0eXBlLFxuICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNzZXRzW2lkXSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gIHZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1cbiAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBib29sZWFuIGNhc3RpbmdcbiAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIG9ic2VydmUodmFsdWUpO1xuICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gIH1cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAvLyBza2lwIHZhbGlkYXRpb24gZm9yIHdlZXggcmVjeWNsZS1saXN0IGNoaWxkIGNvbXBvbmVudCBwcm9wc1xuICAgICEoZmFsc2UpXG4gICkge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIHByb3AgXCInICsga2V5ICsgJ1wiOiAnICtcbiAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgaWYgKHZtICYmIHZtLiRvcHRpb25zLnByb3BzRGF0YSAmJlxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiB2bS5fcHJvcHNba2V5XVxuICB9XG4gIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gIC8vIGEgdmFsdWUgaXMgRnVuY3Rpb24gaWYgaXRzIHByb3RvdHlwZSBpcyBmdW5jdGlvbiBldmVuIGFjcm9zcyBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgPyBkZWYuY2FsbCh2bSlcbiAgICA6IGRlZlxufVxuXG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcCAoXG4gIHByb3AsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICB2bSxcbiAgYWJzZW50XG4pIHtcbiAgaWYgKHByb3AucmVxdWlyZWQgJiYgYWJzZW50KSB7XG4gICAgd2FybihcbiAgICAgICdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XG4gIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gIGlmICh0eXBlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlID0gW3R5cGVdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoICYmICF2YWxpZDsgaSsrKSB7XG4gICAgICB2YXIgYXNzZXJ0ZWRUeXBlID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZVtpXSk7XG4gICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICB9XG4gIH1cblxuICBpZiAoIXZhbGlkKSB7XG4gICAgd2FybihcbiAgICAgIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICBpZiAodmFsaWRhdG9yKSB7XG4gICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbmZ1bmN0aW9uIGFzc2VydFR5cGUgKHZhbHVlLCB0eXBlKSB7XG4gIHZhciB2YWxpZDtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgIHZhciB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgdmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB2YWxpZCxcbiAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICB9XG59XG5cbi8qKlxuICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICogYmVjYXVzZSBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjayB3aWxsIGZhaWwgd2hlbiBydW5uaW5nXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUgKGZuKSB7XG4gIHZhciBtYXRjaCA9IGZuICYmIGZuLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbn1cblxuZnVuY3Rpb24gaXNTYW1lVHlwZSAoYSwgYikge1xuICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlSW5kZXggKHR5cGUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgcmV0dXJuIGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlcywgdHlwZSkgPyAwIDogLTFcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXNbaV0sIHR5cGUpKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gLTFcbn1cblxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlIChuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICB2YXIgbWVzc2FnZSA9IFwiSW52YWxpZCBwcm9wOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLlwiICtcbiAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XG4gIHZhciByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciByZWNlaXZlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKTtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGVjdGVkIHZhbHVlXG4gIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XG4gICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgZXhwZWN0ZWRWYWx1ZTtcbiAgfVxuICBtZXNzYWdlICs9IFwiLCBnb3QgXCIgKyByZWNlaXZlZFR5cGUgKyBcIiBcIjtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IHJlY2VpdmVkIHZhbHVlXG4gIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCJ3aXRoIHZhbHVlIFwiICsgcmVjZWl2ZWRWYWx1ZSArIFwiLlwiO1xuICB9XG4gIHJldHVybiBtZXNzYWdlXG59XG5cbmZ1bmN0aW9uIHN0eWxlVmFsdWUgKHZhbHVlLCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgIHJldHVybiAoXCJcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgcmV0dXJuIChcIlwiICsgKE51bWJlcih2YWx1ZSkpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCJcIiArIHZhbHVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSAodmFsdWUpIHtcbiAgdmFyIGV4cGxpY2l0VHlwZXMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddO1xuICByZXR1cm4gZXhwbGljaXRUeXBlcy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KVxufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4gKCkge1xuICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHJldHVybiBhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGVsZW0udG9Mb3dlckNhc2UoKSA9PT0gJ2Jvb2xlYW4nOyB9KVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgLy8gRGVhY3RpdmF0ZSBkZXBzIHRyYWNraW5nIHdoaWxlIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxlciB0byBhdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSByZW5kZXJpbmcuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIGlmICh2bSkge1xuICAgICAgdmFyIGN1ciA9IHZtO1xuICAgICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgIGlmIChob29rcykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gaG9va3NbaV0uY2FsbChjdXIsIGVyciwgdm0sIGluZm8pID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHsgcmV0dXJuIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZSwgY3VyLCAnZXJyb3JDYXB0dXJlZCBob29rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nIChcbiAgaGFuZGxlcixcbiAgY29udGV4dCxcbiAgYXJncyxcbiAgdm0sXG4gIGluZm9cbikge1xuICB2YXIgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgIGlmIChyZXMgJiYgIXJlcy5faXNWdWUgJiYgaXNQcm9taXNlKHJlcykgJiYgIXJlcy5faGFuZGxlZCkge1xuICAgICAgcmVzLmNhdGNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyArIFwiIChQcm9taXNlL2FzeW5jKVwiKTsgfSk7XG4gICAgICAvLyBpc3N1ZSAjOTUxMVxuICAgICAgLy8gYXZvaWQgY2F0Y2ggdHJpZ2dlcmluZyBtdWx0aXBsZSB0aW1lcyB3aGVuIG5lc3RlZCBjYWxsc1xuICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAoY29uZmlnLmVycm9ySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWYgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB0aHJvd3MgdGhlIG9yaWdpbmFsIGVycm9yIGluIHRoZSBoYW5kbGVyLFxuICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgaWYgKGUgIT09IGVycikge1xuICAgICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG5cbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgdmFyIHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gSW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbikpIHtcbiAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgdmFyIGNvdW50ZXIgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyKSk7XG4gIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGUsIHtcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gIH0pO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgIHRleHROb2RlLmRhdGEgPSBTdHJpbmcoY291bnRlcik7XG4gIH07XG4gIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgLy8gVGVjaGluaWNhbGx5IGl0IGxldmVyYWdlcyB0aGUgKG1hY3JvKSB0YXNrIHF1ZXVlLFxuICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBGYWxsYmFjayB0byBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gIHZhciBfcmVzb2x2ZTtcbiAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCBjdHgsICduZXh0VGljaycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgfVxuICB9KTtcbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgcGVuZGluZyA9IHRydWU7XG4gICAgdGltZXJGdW5jKCk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSlcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbnZhciBpbml0UHJveHk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsJyArXG4gICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgKTtcblxuICB2YXIgd2Fybk5vblByZXNlbnQgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgJ3JlZmVyZW5jZWQgZHVyaW5nIHJlbmRlci4gTWFrZSBzdXJlIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyByZWFjdGl2ZSwgJyArXG4gICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvcmVhY3Rpdml0eS5odG1sI0RlY2xhcmluZy1SZWFjdGl2ZS1Qcm9wZXJ0aWVzLicsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciB3YXJuUmVzZXJ2ZWRQcmVmaXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIiArIGtleSArIFwiXFxcIiBiZWNhdXNlIFwiICtcbiAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXG4gICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9hcGkvI2RhdGEnLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgaGFzUHJveHkgPVxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuXG4gIGlmIChoYXNQcm94eSkge1xuICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCAodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJBdm9pZCBvdmVyd3JpdGluZyBidWlsdC1pbiBtb2RpZmllciBpbiBjb25maWcua2V5Q29kZXM6IC5cIiArIGtleSkpO1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGhhc0hhbmRsZXIgPSB7XG4gICAgaGFzOiBmdW5jdGlvbiBoYXMgKHRhcmdldCwga2V5KSB7XG4gICAgICB2YXIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgIHZhciBpc0FsbG93ZWQgPSBhbGxvd2VkR2xvYmFscyhrZXkpIHx8XG4gICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuY2hhckF0KDApID09PSAnXycgJiYgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkXG4gICAgfVxuICB9O1xuXG4gIHZhciBnZXRIYW5kbGVyID0ge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICh0YXJnZXQsIGtleSkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5kbGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbnZhciBtYXJrO1xudmFyIG1lYXN1cmU7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBwZXJmID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChcbiAgICBwZXJmICYmXG4gICAgcGVyZi5tYXJrICYmXG4gICAgcGVyZi5tZWFzdXJlICYmXG4gICAgcGVyZi5jbGVhck1hcmtzICYmXG4gICAgcGVyZi5jbGVhck1lYXN1cmVzXG4gICkge1xuICAgIG1hcmsgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiBwZXJmLm1hcmsodGFnKTsgfTtcbiAgICBtZWFzdXJlID0gZnVuY3Rpb24gKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpIHtcbiAgICAgIHBlcmYubWVhc3VyZShuYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3MoZW5kVGFnKTtcbiAgICAgIC8vIHBlcmYuY2xlYXJNZWFzdXJlcyhuYW1lKVxuICAgIH07XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBub3JtYWxpemVFdmVudCA9IGNhY2hlZChmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgcGFzc2l2ZSA9IG5hbWUuY2hhckF0KDApID09PSAnJic7XG4gIG5hbWUgPSBwYXNzaXZlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHZhciBvbmNlJCQxID0gbmFtZS5jaGFyQXQoMCkgPT09ICd+JzsgLy8gUHJlZml4ZWQgbGFzdCwgY2hlY2tlZCBmaXJzdFxuICBuYW1lID0gb25jZSQkMSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgY2FwdHVyZSA9IG5hbWUuY2hhckF0KDApID09PSAnISc7XG4gIG5hbWUgPSBjYXB0dXJlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBvbmNlOiBvbmNlJCQxLFxuICAgIGNhcHR1cmU6IGNhcHR1cmUsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9XG59KTtcblxuZnVuY3Rpb24gY3JlYXRlRm5JbnZva2VyIChmbnMsIHZtKSB7XG4gIGZ1bmN0aW9uIGludm9rZXIgKCkge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIHZhciBmbnMgPSBpbnZva2VyLmZucztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbnMpKSB7XG4gICAgICB2YXIgY2xvbmVkID0gZm5zLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsb25lZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjbG9uZWRbaV0sIG51bGwsIGFyZ3VtZW50cyQxLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBoYW5kbGVyIHJldHVybiB2YWx1ZSBmb3Igc2luZ2xlIGhhbmRsZXJzXG4gICAgICByZXR1cm4gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoZm5zLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKVxuICAgIH1cbiAgfVxuICBpbnZva2VyLmZucyA9IGZucztcbiAgcmV0dXJuIGludm9rZXJcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGlzdGVuZXJzIChcbiAgb24sXG4gIG9sZE9uLFxuICBhZGQsXG4gIHJlbW92ZSQkMSxcbiAgY3JlYXRlT25jZUhhbmRsZXIsXG4gIHZtXG4pIHtcbiAgdmFyIG5hbWUsIGRlZiQkMSwgY3VyLCBvbGQsIGV2ZW50O1xuICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICBkZWYkJDEgPSBjdXIgPSBvbltuYW1lXTtcbiAgICBvbGQgPSBvbGRPbltuYW1lXTtcbiAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgIGlmIChpc1VuZGVmKGN1cikpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIGhhbmRsZXIgZm9yIGV2ZW50IFxcXCJcIiArIChldmVudC5uYW1lKSArIFwiXFxcIjogZ290IFwiICsgU3RyaW5nKGN1ciksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4gICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZUZuSW52b2tlcihjdXIsIHZtKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1RydWUoZXZlbnQub25jZSkpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVPbmNlSGFuZGxlcihldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUpO1xuICAgICAgfVxuICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSwgZXZlbnQucGFyYW1zKTtcbiAgICB9IGVsc2UgaWYgKGN1ciAhPT0gb2xkKSB7XG4gICAgICBvbGQuZm5zID0gY3VyO1xuICAgICAgb25bbmFtZV0gPSBvbGQ7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBvbGRPbikge1xuICAgIGlmIChpc1VuZGVmKG9uW25hbWVdKSkge1xuICAgICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICAgIHJlbW92ZSQkMShldmVudC5uYW1lLCBvbGRPbltuYW1lXSwgZXZlbnQuY2FwdHVyZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBtZXJnZVZOb2RlSG9vayAoZGVmLCBob29rS2V5LCBob29rKSB7XG4gIGlmIChkZWYgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIGRlZiA9IGRlZi5kYXRhLmhvb2sgfHwgKGRlZi5kYXRhLmhvb2sgPSB7fSk7XG4gIH1cbiAgdmFyIGludm9rZXI7XG4gIHZhciBvbGRIb29rID0gZGVmW2hvb2tLZXldO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWRIb29rICgpIHtcbiAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgLy8gaW1wb3J0YW50OiByZW1vdmUgbWVyZ2VkIGhvb2sgdG8gZW5zdXJlIGl0J3MgY2FsbGVkIG9ubHkgb25jZVxuICAgIC8vIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrXG4gICAgcmVtb3ZlKGludm9rZXIuZm5zLCB3cmFwcGVkSG9vayk7XG4gIH1cblxuICBpZiAoaXNVbmRlZihvbGRIb29rKSkge1xuICAgIC8vIG5vIGV4aXN0aW5nIGhvb2tcbiAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFt3cmFwcGVkSG9va10pO1xuICB9IGVsc2Uge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xuICAgICAgLy8gYWxyZWFkeSBhIG1lcmdlZCBpbnZva2VyXG4gICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgIGludm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBwbGFpbiBob29rXG4gICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFtvbGRIb29rLCB3cmFwcGVkSG9va10pO1xuICAgIH1cbiAgfVxuXG4gIGludm9rZXIubWVyZ2VkID0gdHJ1ZTtcbiAgZGVmW2hvb2tLZXldID0gaW52b2tlcjtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEgKFxuICBkYXRhLFxuICBDdG9yLFxuICB0YWdcbikge1xuICAvLyB3ZSBhcmUgb25seSBleHRyYWN0aW5nIHJhdyB2YWx1ZXMgaGVyZS5cbiAgLy8gdmFsaWRhdGlvbiBhbmQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGNoaWxkXG4gIC8vIGNvbXBvbmVudCBpdHNlbGYuXG4gIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzVW5kZWYocHJvcE9wdGlvbnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzO1xuICB2YXIgcHJvcHMgPSBkYXRhLnByb3BzO1xuICBpZiAoaXNEZWYoYXR0cnMpIHx8IGlzRGVmKHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIGtleUluTG93ZXJDYXNlID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgIT09IGtleUluTG93ZXJDYXNlICYmXG4gICAgICAgICAgYXR0cnMgJiYgaGFzT3duKGF0dHJzLCBrZXlJbkxvd2VyQ2FzZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGlwKFxuICAgICAgICAgICAgXCJQcm9wIFxcXCJcIiArIGtleUluTG93ZXJDYXNlICsgXCJcXFwiIGlzIHBhc3NlZCB0byBjb21wb25lbnQgXCIgK1xuICAgICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodGFnIHx8IEN0b3IpKSArIFwiLCBidXQgdGhlIGRlY2xhcmVkIHByb3AgbmFtZSBpc1wiICtcbiAgICAgICAgICAgIFwiIFxcXCJcIiArIGtleSArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBjYW1lbENhc2VkIFwiICtcbiAgICAgICAgICAgIFwicHJvcHMgbmVlZCB0byB1c2UgdGhlaXIga2ViYWItY2FzZSBlcXVpdmFsZW50cyB3aGVuIHVzaW5nIGluLURPTSBcIiArXG4gICAgICAgICAgICBcInRlbXBsYXRlcy4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgYWx0S2V5ICsgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2hlY2tQcm9wKHJlcywgcHJvcHMsIGtleSwgYWx0S2V5LCB0cnVlKSB8fFxuICAgICAgY2hlY2tQcm9wKHJlcywgYXR0cnMsIGtleSwgYWx0S2V5LCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wIChcbiAgcmVzLFxuICBoYXNoLFxuICBrZXksXG4gIGFsdEtleSxcbiAgcHJlc2VydmVcbikge1xuICBpZiAoaXNEZWYoaGFzaCkpIHtcbiAgICBpZiAoaGFzT3duKGhhc2gsIGtleSkpIHtcbiAgICAgIHJlc1trZXldID0gaGFzaFtrZXldO1xuICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKGhhc093bihoYXNoLCBhbHRLZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hbYWx0S2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hbYWx0S2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vKiAgKi9cblxuLy8gVGhlIHRlbXBsYXRlIGNvbXBpbGVyIGF0dGVtcHRzIHRvIG1pbmltaXplIHRoZSBuZWVkIGZvciBub3JtYWxpemF0aW9uIGJ5XG4vLyBzdGF0aWNhbGx5IGFuYWx5emluZyB0aGUgdGVtcGxhdGUgYXQgY29tcGlsZSB0aW1lLlxuLy9cbi8vIEZvciBwbGFpbiBIVE1MIG1hcmt1cCwgbm9ybWFsaXphdGlvbiBjYW4gYmUgY29tcGxldGVseSBza2lwcGVkIGJlY2F1c2UgdGhlXG4vLyBnZW5lcmF0ZWQgcmVuZGVyIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIEFycmF5PFZOb2RlPi4gVGhlcmUgYXJlXG4vLyB0d28gY2FzZXMgd2hlcmUgZXh0cmEgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQ6XG5cbi8vIDEuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbXBvbmVudHMgLSBiZWNhdXNlIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcbi8vIG1heSByZXR1cm4gYW4gQXJyYXkgaW5zdGVhZCBvZiBhIHNpbmdsZSByb290LiBJbiB0aGlzIGNhc2UsIGp1c3QgYSBzaW1wbGVcbi8vIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkIC0gaWYgYW55IGNoaWxkIGlzIGFuIEFycmF5LCB3ZSBmbGF0dGVuIHRoZSB3aG9sZVxuLy8gdGhpbmcgd2l0aCBBcnJheS5wcm90b3R5cGUuY29uY2F0LiBJdCBpcyBndWFyYW50ZWVkIHRvIGJlIG9ubHkgMS1sZXZlbCBkZWVwXG4vLyBiZWNhdXNlIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhbHJlYWR5IG5vcm1hbGl6ZSB0aGVpciBvd24gY2hpbGRyZW4uXG5mdW5jdGlvbiBzaW1wbGVOb3JtYWxpemVDaGlsZHJlbiAoY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuW2ldKSkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGNoaWxkcmVuKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbi8vIGUuZy4gPHRlbXBsYXRlPiwgPHNsb3Q+LCB2LWZvciwgb3Igd2hlbiB0aGUgY2hpbGRyZW4gaXMgcHJvdmlkZWQgYnkgdXNlclxuLy8gd2l0aCBoYW5kLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucyAvIEpTWC4gSW4gc3VjaCBjYXNlcyBhIGZ1bGwgbm9ybWFsaXphdGlvblxuLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG5mdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbiAoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIGlzUHJpbWl0aXZlKGNoaWxkcmVuKVxuICAgID8gW2NyZWF0ZVRleHRWTm9kZShjaGlsZHJlbildXG4gICAgOiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKVxuICAgICAgPyBub3JtYWxpemVBcnJheUNoaWxkcmVuKGNoaWxkcmVuKVxuICAgICAgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZSAobm9kZSkge1xuICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheUNoaWxkcmVuIChjaGlsZHJlbiwgbmVzdGVkSW5kZXgpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICB2YXIgaSwgYywgbGFzdEluZGV4LCBsYXN0O1xuICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBjID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGlzVW5kZWYoYykgfHwgdHlwZW9mIGMgPT09ICdib29sZWFuJykgeyBjb250aW51ZSB9XG4gICAgbGFzdEluZGV4ID0gcmVzLmxlbmd0aCAtIDE7XG4gICAgbGFzdCA9IHJlc1tsYXN0SW5kZXhdO1xuICAgIC8vICBuZXN0ZWRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjKSkge1xuICAgICAgaWYgKGMubGVuZ3RoID4gMCkge1xuICAgICAgICBjID0gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjLCAoKG5lc3RlZEluZGV4IHx8ICcnKSArIFwiX1wiICsgaSkpO1xuICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIGlmIChpc1RleHROb2RlKGNbMF0pICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyAoY1swXSkudGV4dCk7XG4gICAgICAgICAgYy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoLmFwcGx5KHJlcywgYyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgaWYgKGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAvLyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgU1NSIGh5ZHJhdGlvbiBiZWNhdXNlIHRleHQgbm9kZXMgYXJlXG4gICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwgc3RyaW5nc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjKTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgLy8gY29udmVydCBwcmltaXRpdmUgdG8gdm5vZGVcbiAgICAgICAgcmVzLnB1c2goY3JlYXRlVGV4dFZOb2RlKGMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzVGV4dE5vZGUoYykgJiYgaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMudGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtlbHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICBpZiAoaXNUcnVlKGNoaWxkcmVuLl9pc1ZMaXN0KSAmJlxuICAgICAgICAgIGlzRGVmKGMudGFnKSAmJlxuICAgICAgICAgIGlzVW5kZWYoYy5rZXkpICYmXG4gICAgICAgICAgaXNEZWYobmVzdGVkSW5kZXgpKSB7XG4gICAgICAgICAgYy5rZXkgPSBcIl9fdmxpc3RcIiArIG5lc3RlZEluZGV4ICsgXCJfXCIgKyBpICsgXCJfX1wiO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoKGMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UHJvdmlkZSAodm0pIHtcbiAgdmFyIHByb3ZpZGUgPSB2bS4kb3B0aW9ucy5wcm92aWRlO1xuICBpZiAocHJvdmlkZSkge1xuICAgIHZtLl9wcm92aWRlZCA9IHR5cGVvZiBwcm92aWRlID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb3ZpZGUuY2FsbCh2bSlcbiAgICAgIDogcHJvdmlkZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0SW5qZWN0aW9ucyAodm0pIHtcbiAgdmFyIHJlc3VsdCA9IHJlc29sdmVJbmplY3Qodm0uJG9wdGlvbnMuaW5qZWN0LCB2bSk7XG4gIGlmIChyZXN1bHQpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhbiBpbmplY3RlZCB2YWx1ZSBkaXJlY3RseSBzaW5jZSB0aGUgY2hhbmdlcyB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcImluamVjdGlvbiBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwga2V5LCByZXN1bHRba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJbmplY3QgKGluamVjdCwgdm0pIHtcbiAgaWYgKGluamVjdCkge1xuICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICAgID8gUmVmbGVjdC5vd25LZXlzKGluamVjdClcbiAgICAgIDogT2JqZWN0LmtleXMoaW5qZWN0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcHJvdmlkZUtleSA9IGluamVjdFtrZXldLmZyb207XG4gICAgICB2YXIgc291cmNlID0gdm07XG4gICAgICB3aGlsZSAoc291cmNlKSB7XG4gICAgICAgIGlmIChzb3VyY2UuX3Byb3ZpZGVkICYmIGhhc093bihzb3VyY2UuX3Byb3ZpZGVkLCBwcm92aWRlS2V5KSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlLl9wcm92aWRlZFtwcm92aWRlS2V5XTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBpbmplY3Rba2V5XSkge1xuICAgICAgICAgIHZhciBwcm92aWRlRGVmYXVsdCA9IGluamVjdFtrZXldLmRlZmF1bHQ7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB0eXBlb2YgcHJvdmlkZURlZmF1bHQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcHJvdmlkZURlZmF1bHQuY2FsbCh2bSlcbiAgICAgICAgICAgIDogcHJvdmlkZURlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oKFwiSW5qZWN0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBub3QgZm91bmRcIiksIHZtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuLyogICovXG5cblxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgcmF3IGNoaWxkcmVuIFZOb2RlcyBpbnRvIGEgc2xvdCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTbG90cyAoXG4gIGNoaWxkcmVuLFxuICBjb250ZXh0XG4pIHtcbiAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cbiAgdmFyIHNsb3RzID0ge307XG4gIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgdmFyIGRhdGEgPSBjaGlsZC5kYXRhO1xuICAgIC8vIHJlbW92ZSBzbG90IGF0dHJpYnV0ZSBpZiB0aGUgbm9kZSBpcyByZXNvbHZlZCBhcyBhIFZ1ZSBzbG90IG5vZGVcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMuc2xvdCkge1xuICAgICAgZGVsZXRlIGRhdGEuYXR0cnMuc2xvdDtcbiAgICB9XG4gICAgLy8gbmFtZWQgc2xvdHMgc2hvdWxkIG9ubHkgYmUgcmVzcGVjdGVkIGlmIHRoZSB2bm9kZSB3YXMgcmVuZGVyZWQgaW4gdGhlXG4gICAgLy8gc2FtZSBjb250ZXh0LlxuICAgIGlmICgoY2hpbGQuY29udGV4dCA9PT0gY29udGV4dCB8fCBjaGlsZC5mbkNvbnRleHQgPT09IGNvbnRleHQpICYmXG4gICAgICBkYXRhICYmIGRhdGEuc2xvdCAhPSBudWxsXG4gICAgKSB7XG4gICAgICB2YXIgbmFtZSA9IGRhdGEuc2xvdDtcbiAgICAgIHZhciBzbG90ID0gKHNsb3RzW25hbWVdIHx8IChzbG90c1tuYW1lXSA9IFtdKSk7XG4gICAgICBpZiAoY2hpbGQudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbG90LnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAoc2xvdHMuZGVmYXVsdCB8fCAoc2xvdHMuZGVmYXVsdCA9IFtdKSkucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG4gIC8vIGlnbm9yZSBzbG90cyB0aGF0IGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZVxuICBmb3IgKHZhciBuYW1lJDEgaW4gc2xvdHMpIHtcbiAgICBpZiAoc2xvdHNbbmFtZSQxXS5ldmVyeShpc1doaXRlc3BhY2UpKSB7XG4gICAgICBkZWxldGUgc2xvdHNbbmFtZSQxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNsb3RzXG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAobm9kZSkge1xuICByZXR1cm4gKG5vZGUuaXNDb21tZW50ICYmICFub2RlLmFzeW5jRmFjdG9yeSkgfHwgbm9kZS50ZXh0ID09PSAnICdcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3RzIChcbiAgc2xvdHMsXG4gIG5vcm1hbFNsb3RzLFxuICBwcmV2U2xvdHNcbikge1xuICB2YXIgcmVzO1xuICB2YXIgaGFzTm9ybWFsU2xvdHMgPSBPYmplY3Qua2V5cyhub3JtYWxTbG90cykubGVuZ3RoID4gMDtcbiAgdmFyIGlzU3RhYmxlID0gc2xvdHMgPyAhIXNsb3RzLiRzdGFibGUgOiAhaGFzTm9ybWFsU2xvdHM7XG4gIHZhciBrZXkgPSBzbG90cyAmJiBzbG90cy4ka2V5O1xuICBpZiAoIXNsb3RzKSB7XG4gICAgcmVzID0ge307XG4gIH0gZWxzZSBpZiAoc2xvdHMuX25vcm1hbGl6ZWQpIHtcbiAgICAvLyBmYXN0IHBhdGggMTogY2hpbGQgY29tcG9uZW50IHJlLXJlbmRlciBvbmx5LCBwYXJlbnQgZGlkIG5vdCBjaGFuZ2VcbiAgICByZXR1cm4gc2xvdHMuX25vcm1hbGl6ZWRcbiAgfSBlbHNlIGlmIChcbiAgICBpc1N0YWJsZSAmJlxuICAgIHByZXZTbG90cyAmJlxuICAgIHByZXZTbG90cyAhPT0gZW1wdHlPYmplY3QgJiZcbiAgICBrZXkgPT09IHByZXZTbG90cy4ka2V5ICYmXG4gICAgIWhhc05vcm1hbFNsb3RzICYmXG4gICAgIXByZXZTbG90cy4kaGFzTm9ybWFsXG4gICkge1xuICAgIC8vIGZhc3QgcGF0aCAyOiBzdGFibGUgc2NvcGVkIHNsb3RzIHcvIG5vIG5vcm1hbCBzbG90cyB0byBwcm94eSxcbiAgICAvLyBvbmx5IG5lZWQgdG8gbm9ybWFsaXplIG9uY2VcbiAgICByZXR1cm4gcHJldlNsb3RzXG4gIH0gZWxzZSB7XG4gICAgcmVzID0ge307XG4gICAgZm9yICh2YXIga2V5JDEgaW4gc2xvdHMpIHtcbiAgICAgIGlmIChzbG90c1trZXkkMV0gJiYga2V5JDFbMF0gIT09ICckJykge1xuICAgICAgICByZXNba2V5JDFdID0gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5JDEsIHNsb3RzW2tleSQxXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGV4cG9zZSBub3JtYWwgc2xvdHMgb24gc2NvcGVkU2xvdHNcbiAgZm9yICh2YXIga2V5JDIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICBpZiAoIShrZXkkMiBpbiByZXMpKSB7XG4gICAgICByZXNba2V5JDJdID0gcHJveHlOb3JtYWxTbG90KG5vcm1hbFNsb3RzLCBrZXkkMik7XG4gICAgfVxuICB9XG4gIC8vIGF2b3JpYXogc2VlbXMgdG8gbW9jayBhIG5vbi1leHRlbnNpYmxlICRzY29wZWRTbG90cyBvYmplY3RcbiAgLy8gYW5kIHdoZW4gdGhhdCBpcyBwYXNzZWQgZG93biB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yXG4gIGlmIChzbG90cyAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKHNsb3RzKSkge1xuICAgIChzbG90cykuX25vcm1hbGl6ZWQgPSByZXM7XG4gIH1cbiAgZGVmKHJlcywgJyRzdGFibGUnLCBpc1N0YWJsZSk7XG4gIGRlZihyZXMsICcka2V5Jywga2V5KTtcbiAgZGVmKHJlcywgJyRoYXNOb3JtYWwnLCBoYXNOb3JtYWxTbG90cyk7XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5LCBmbikge1xuICB2YXIgbm9ybWFsaXplZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzID0gYXJndW1lbnRzLmxlbmd0aCA/IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cykgOiBmbih7fSk7XG4gICAgcmVzID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlcylcbiAgICAgID8gW3Jlc10gLy8gc2luZ2xlIHZub2RlXG4gICAgICA6IG5vcm1hbGl6ZUNoaWxkcmVuKHJlcyk7XG4gICAgcmV0dXJuIHJlcyAmJiAoXG4gICAgICByZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAocmVzLmxlbmd0aCA9PT0gMSAmJiByZXNbMF0uaXNDb21tZW50KSAvLyAjOTY1OFxuICAgICkgPyB1bmRlZmluZWRcbiAgICAgIDogcmVzXG4gIH07XG4gIC8vIHRoaXMgaXMgYSBzbG90IHVzaW5nIHRoZSBuZXcgdi1zbG90IHN5bnRheCB3aXRob3V0IHNjb3BlLiBhbHRob3VnaCBpdCBpc1xuICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcbiAgLy8gb24gdGhpcy4kc2xvdHMgYmVjYXVzZSB0aGUgdXNhZ2UgaXMgc2VtYW50aWNhbGx5IGEgbm9ybWFsIHNsb3QuXG4gIGlmIChmbi5wcm94eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub3JtYWxTbG90cywga2V5LCB7XG4gICAgICBnZXQ6IG5vcm1hbGl6ZWQsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNsb3RzW2tleV07IH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyB2LWZvciBsaXN0cy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyTGlzdCAoXG4gIHZhbCxcbiAgcmVuZGVyXG4pIHtcbiAgdmFyIHJldCwgaSwgbCwga2V5cywga2V5O1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGwgPSB2YWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcihpICsgMSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXQgPSBbXTtcbiAgICAgIHZhciBpdGVyYXRvciA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoKSk7XG4gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFpc0RlZihyZXQpKSB7XG4gICAgcmV0ID0gW107XG4gIH1cbiAgKHJldCkuX2lzVkxpc3QgPSB0cnVlO1xuICByZXR1cm4gcmV0XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNsb3QgKFxuICBuYW1lLFxuICBmYWxsYmFjayxcbiAgcHJvcHMsXG4gIGJpbmRPYmplY3Rcbikge1xuICB2YXIgc2NvcGVkU2xvdEZuID0gdGhpcy4kc2NvcGVkU2xvdHNbbmFtZV07XG4gIHZhciBub2RlcztcbiAgaWYgKHNjb3BlZFNsb3RGbikgeyAvLyBzY29wZWQgc2xvdFxuICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdzbG90IHYtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0JyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgfVxuICAgIG5vZGVzID0gc2NvcGVkU2xvdEZuKHByb3BzKSB8fCBmYWxsYmFjaztcbiAgfSBlbHNlIHtcbiAgICBub2RlcyA9IHRoaXMuJHNsb3RzW25hbWVdIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gIGlmICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2RlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0KSkge1xuICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbFxuICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluS2V5Q29kZSxcbiAgZXZlbnRLZXlOYW1lLFxuICBidWlsdEluS2V5TmFtZVxuKSB7XG4gIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgfSBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKVxuICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzIChcbiAgZGF0YSxcbiAgdGFnLFxuICB2YWx1ZSxcbiAgYXNQcm9wLFxuICBpc1N5bmNcbikge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgaGFzaDtcbiAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09ICdjbGFzcycgfHxcbiAgICAgICAgICBrZXkgPT09ICdzdHlsZScgfHxcbiAgICAgICAgICBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMudHlwZTtcbiAgICAgICAgICBoYXNoID0gYXNQcm9wIHx8IGNvbmZpZy5tdXN0VXNlUHJvcCh0YWcsIHR5cGUsIGtleSlcbiAgICAgICAgICAgID8gZGF0YS5kb21Qcm9wcyB8fCAoZGF0YS5kb21Qcm9wcyA9IHt9KVxuICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW1lbGl6ZWRLZXkgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICBpZiAoIShjYW1lbGl6ZWRLZXkgaW4gaGFzaCkgJiYgIShoeXBoZW5hdGVkS2V5IGluIGhhc2gpKSB7XG4gICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcblxuICAgICAgICAgIGlmIChpc1N5bmMpIHtcbiAgICAgICAgICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gICAgICAgICAgICBvblsoXCJ1cGRhdGU6XCIgKyBrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFsdWVba2V5XSA9ICRldmVudDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIGxvb3AoIGtleSApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU3RhdGljIChcbiAgaW5kZXgsXG4gIGlzSW5Gb3Jcbikge1xuICB2YXIgY2FjaGVkID0gdGhpcy5fc3RhdGljVHJlZXMgfHwgKHRoaXMuX3N0YXRpY1RyZWVzID0gW10pO1xuICB2YXIgdHJlZSA9IGNhY2hlZFtpbmRleF07XG4gIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxuICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZS5cbiAgaWYgKHRyZWUgJiYgIWlzSW5Gb3IpIHtcbiAgICByZXR1cm4gdHJlZVxuICB9XG4gIC8vIG90aGVyd2lzZSwgcmVuZGVyIGEgZnJlc2ggdHJlZS5cbiAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbChcbiAgICB0aGlzLl9yZW5kZXJQcm94eSxcbiAgICBudWxsLFxuICAgIHRoaXMgLy8gZm9yIHJlbmRlciBmbnMgZ2VuZXJhdGVkIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCB0ZW1wbGF0ZXNcbiAgKTtcbiAgbWFya1N0YXRpYyh0cmVlLCAoXCJfX3N0YXRpY19fXCIgKyBpbmRleCksIGZhbHNlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3Igdi1vbmNlLlxuICogRWZmZWN0aXZlbHkgaXQgbWVhbnMgbWFya2luZyB0aGUgbm9kZSBhcyBzdGF0aWMgd2l0aCBhIHVuaXF1ZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIG1hcmtPbmNlIChcbiAgdHJlZSxcbiAgaW5kZXgsXG4gIGtleVxuKSB7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19vbmNlX19cIiArIGluZGV4ICsgKGtleSA/IChcIl9cIiArIGtleSkgOiBcIlwiKSksIHRydWUpO1xuICByZXR1cm4gdHJlZVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljIChcbiAgdHJlZSxcbiAga2V5LFxuICBpc09uY2Vcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0cmVlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRyZWVbaV0gJiYgdHlwZW9mIHRyZWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWVbaV0sIChrZXkgKyBcIl9cIiArIGkpLCBpc09uY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtYXJrU3RhdGljTm9kZSh0cmVlLCBrZXksIGlzT25jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpY05vZGUgKG5vZGUsIGtleSwgaXNPbmNlKSB7XG4gIG5vZGUuaXNTdGF0aWMgPSB0cnVlO1xuICBub2RlLmtleSA9IGtleTtcbiAgbm9kZS5pc09uY2UgPSBpc09uY2U7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kT2JqZWN0TGlzdGVuZXJzIChkYXRhLCB2YWx1ZSkge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICd2LW9uIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QgdmFsdWUnLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb24gPSBkYXRhLm9uID0gZGF0YS5vbiA/IGV4dGVuZCh7fSwgZGF0YS5vbikgOiB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBvbltrZXldO1xuICAgICAgICB2YXIgb3VycyA9IHZhbHVlW2tleV07XG4gICAgICAgIG9uW2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgb3VycykgOiBvdXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVNjb3BlZFNsb3RzIChcbiAgZm5zLCAvLyBzZWUgZmxvdy92bm9kZVxuICByZXMsXG4gIC8vIHRoZSBmb2xsb3dpbmcgYXJlIGFkZGVkIGluIDIuNlxuICBoYXNEeW5hbWljS2V5cyxcbiAgY29udGVudEhhc2hLZXlcbikge1xuICByZXMgPSByZXMgfHwgeyAkc3RhYmxlOiAhaGFzRHluYW1pY0tleXMgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2xvdCA9IGZuc1tpXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzbG90KSkge1xuICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xuICAgIH0gZWxzZSBpZiAoc2xvdCkge1xuICAgICAgLy8gbWFya2VyIGZvciByZXZlcnNlIHByb3h5aW5nIHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgICBpZiAoc2xvdC5wcm94eSkge1xuICAgICAgICBzbG90LmZuLnByb3h5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJlc1tzbG90LmtleV0gPSBzbG90LmZuO1xuICAgIH1cbiAgfVxuICBpZiAoY29udGVudEhhc2hLZXkpIHtcbiAgICAocmVzKS4ka2V5ID0gY29udGVudEhhc2hLZXk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzIChiYXNlT2JqLCB2YWx1ZXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIga2V5ID0gdmFsdWVzW2ldO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcbiAgICAgIGJhc2VPYmpbdmFsdWVzW2ldXSA9IHZhbHVlc1tpICsgMV07XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGlzIGEgc3BlaWNhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiICsga2V5KSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhc2VPYmpcbn1cblxuLy8gaGVscGVyIHRvIGR5bmFtaWNhbGx5IGFwcGVuZCBtb2RpZmllciBydW50aW1lIG1hcmtlcnMgdG8gZXZlbnQgbmFtZXMuXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyICh2YWx1ZSwgc3ltYm9sKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gc3ltYm9sICsgdmFsdWUgOiB2YWx1ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnMgKHRhcmdldCkge1xuICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgdGFyZ2V0Ll9uID0gdG9OdW1iZXI7XG4gIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICB0YXJnZXQuX3QgPSByZW5kZXJTbG90O1xuICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gIHRhcmdldC5fbSA9IHJlbmRlclN0YXRpYztcbiAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgdGFyZ2V0Ll9iID0gYmluZE9iamVjdFByb3BzO1xuICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gIHRhcmdldC5fdSA9IHJlc29sdmVTY29wZWRTbG90cztcbiAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICB0YXJnZXQuX3AgPSBwcmVwZW5kTW9kaWZpZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCAoXG4gIGRhdGEsXG4gIHByb3BzLFxuICBjaGlsZHJlbixcbiAgcGFyZW50LFxuICBDdG9yXG4pIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICB2YXIgY29udGV4dFZtO1xuICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgfVxuICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcyQxLiRzbG90cykge1xuICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIGRhdGEuc2NvcGVkU2xvdHMsXG4gICAgICAgIHRoaXMkMS4kc2xvdHMgPSByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIHBhcmVudClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzJDEuJHNsb3RzXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzY29wZWRTbG90cycsICh7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy5zbG90cygpKVxuICAgIH1cbiAgfSkpO1xuXG4gIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcbiAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLiRzbG90cyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgdmFyIHZub2RlID0gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgIGlmICh2bm9kZSAmJiAhQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgdm5vZGUuZm5TY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0ID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZub2RlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7IH07XG4gIH1cbn1cblxuaW5zdGFsbFJlbmRlckhlbHBlcnMoRnVuY3Rpb25hbFJlbmRlckNvbnRleHQucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudCAoXG4gIEN0b3IsXG4gIHByb3BzRGF0YSxcbiAgZGF0YSxcbiAgY29udGV4dFZtLFxuICBjaGlsZHJlblxuKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIHByb3BPcHRpb25zID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEgfHwgZW1wdHlPYmplY3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWYoZGF0YS5hdHRycykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5hdHRycyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7IH1cbiAgfVxuXG4gIHZhciByZW5kZXJDb250ZXh0ID0gbmV3IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KFxuICAgIGRhdGEsXG4gICAgcHJvcHMsXG4gICAgY2hpbGRyZW4sXG4gICAgY29udGV4dFZtLFxuICAgIEN0b3JcbiAgKTtcblxuICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuXG4gIGlmICh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5KHZub2Rlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbaV0gPSBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2Rlc1tpXSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCAodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxuICAvLyAoZS5nLiBpdCB3YXMgZnJvbSBhIGNhY2hlZCBub3JtYWwgc2xvdCkgdGhlIGZuQ29udGV4dCBjYXVzZXMgbmFtZWQgc2xvdHNcbiAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICBjbG9uZS5mbkNvbnRleHQgPSBjb250ZXh0Vm07XG4gIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9IHJlbmRlckNvbnRleHQ7XG4gIH1cbiAgaWYgKGRhdGEuc2xvdCkge1xuICAgIChjbG9uZS5kYXRhIHx8IChjbG9uZS5kYXRhID0ge30pKS5zbG90ID0gZGF0YS5zbG90O1xuICB9XG4gIHJldHVybiBjbG9uZVxufVxuXG5mdW5jdGlvbiBtZXJnZVByb3BzICh0bywgZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgIHRvW2NhbWVsaXplKGtleSldID0gZnJvbVtrZXldO1xuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vLyBpbmxpbmUgaG9va3MgdG8gYmUgaW52b2tlZCBvbiBjb21wb25lbnQgVk5vZGVzIGR1cmluZyBwYXRjaFxudmFyIGNvbXBvbmVudFZOb2RlSG9va3MgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQgKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICBpZiAoXG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgIXZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCAmJlxuICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmVcbiAgICApIHtcbiAgICAgIC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgdmFyIG1vdW50ZWROb2RlID0gdm5vZGU7IC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgIGNvbXBvbmVudFZOb2RlSG9va3MucHJlcGF0Y2gobW91bnRlZE5vZGUsIG1vdW50ZWROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKFxuICAgICAgICB2bm9kZSxcbiAgICAgICAgYWN0aXZlSW5zdGFuY2VcbiAgICAgICk7XG4gICAgICBjaGlsZC4kbW91bnQoaHlkcmF0aW5nID8gdm5vZGUuZWxtIDogdW5kZWZpbmVkLCBoeWRyYXRpbmcpO1xuICAgIH1cbiAgfSxcblxuICBwcmVwYXRjaDogZnVuY3Rpb24gcHJlcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIHVwZGF0ZUNoaWxkQ29tcG9uZW50KFxuICAgICAgY2hpbGQsXG4gICAgICBvcHRpb25zLnByb3BzRGF0YSwgLy8gdXBkYXRlZCBwcm9wc1xuICAgICAgb3B0aW9ucy5saXN0ZW5lcnMsIC8vIHVwZGF0ZWQgbGlzdGVuZXJzXG4gICAgICB2bm9kZSwgLy8gbmV3IHBhcmVudCB2bm9kZVxuICAgICAgb3B0aW9ucy5jaGlsZHJlbiAvLyBuZXcgY2hpbGRyZW5cbiAgICApO1xuICB9LFxuXG4gIGluc2VydDogZnVuY3Rpb24gaW5zZXJ0ICh2bm9kZSkge1xuICAgIHZhciBjb250ZXh0ID0gdm5vZGUuY29udGV4dDtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQpIHtcbiAgICAgIGNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgY2FsbEhvb2soY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgfVxuICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAvLyB2dWUtcm91dGVyIzEyMTJcbiAgICAgICAgLy8gRHVyaW5nIHVwZGF0ZXMsIGEga2VwdC1hbGl2ZSBjb21wb25lbnQncyBjaGlsZCBjb21wb25lbnRzIG1heVxuICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgLy8gb24gaW5jb3JyZWN0IGNoaWxkcmVuLiBJbnN0ZWFkIHdlIHB1c2ggdGhlbSBpbnRvIGEgcXVldWUgd2hpY2ggd2lsbFxuICAgICAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHdob2xlIHBhdGNoIHByb2Nlc3MgZW5kZWQuXG4gICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAoXG4gIEN0b3IsXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICBpZiAoaXNVbmRlZihDdG9yKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcblxuICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcbiAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgfVxuXG4gIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgLy8gcmVqZWN0LlxuICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybigoXCJJbnZhbGlkIENvbXBvbmVudCBkZWZpbml0aW9uOiBcIiArIChTdHJpbmcoQ3RvcikpKSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gYXN5bmMgY29tcG9uZW50XG4gIHZhciBhc3luY0ZhY3Rvcnk7XG4gIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgQ3RvciA9IHJlc29sdmVBc3luY0NvbXBvbmVudChhc3luY0ZhY3RvcnksIGJhc2VDdG9yKTtcbiAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICBhc3luY0ZhY3RvcnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB0YWdcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBkYXRhIGludG8gcHJvcHMgJiBldmVudHNcbiAgaWYgKGlzRGVmKGRhdGEubW9kZWwpKSB7XG4gICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgfVxuXG4gIC8vIGV4dHJhY3QgcHJvcHNcbiAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcblxuICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xuICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pXG4gIH1cblxuICAvLyBleHRyYWN0IGxpc3RlbmVycywgc2luY2UgdGhlc2UgbmVlZHMgdG8gYmUgdHJlYXRlZCBhc1xuICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICB2YXIgbGlzdGVuZXJzID0gZGF0YS5vbjtcbiAgLy8gcmVwbGFjZSB3aXRoIGxpc3RlbmVycyB3aXRoIC5uYXRpdmUgbW9kaWZpZXJcbiAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gIGRhdGEub24gPSBkYXRhLm5hdGl2ZU9uO1xuXG4gIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAvLyBvdGhlciB0aGFuIHByb3BzICYgbGlzdGVuZXJzICYgc2xvdFxuXG4gICAgLy8gd29yayBhcm91bmQgZmxvd1xuICAgIHZhciBzbG90ID0gZGF0YS5zbG90O1xuICAgIGRhdGEgPSB7fTtcbiAgICBpZiAoc2xvdCkge1xuICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpO1xuXG4gIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gIHZhciBuYW1lID0gQ3Rvci5vcHRpb25zLm5hbWUgfHwgdGFnO1xuICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgKFwidnVlLWNvbXBvbmVudC1cIiArIChDdG9yLmNpZCkgKyAobmFtZSA/IChcIi1cIiArIG5hbWUpIDogJycpKSxcbiAgICBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LFxuICAgIHsgQ3RvcjogQ3RvciwgcHJvcHNEYXRhOiBwcm9wc0RhdGEsIGxpc3RlbmVyczogbGlzdGVuZXJzLCB0YWc6IHRhZywgY2hpbGRyZW46IGNoaWxkcmVuIH0sXG4gICAgYXN5bmNGYWN0b3J5XG4gICk7XG5cbiAgcmV0dXJuIHZub2RlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUgKFxuICB2bm9kZSwgLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21wb25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XG4gIHBhcmVudCAvLyBhY3RpdmVJbnN0YW5jZSBpbiBsaWZlY3ljbGUgc3RhdGVcbikge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBfaXNDb21wb25lbnQ6IHRydWUsXG4gICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICBwYXJlbnQ6IHBhcmVudFxuICB9O1xuICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICB2YXIgaW5saW5lVGVtcGxhdGUgPSB2bm9kZS5kYXRhLmlubGluZVRlbXBsYXRlO1xuICBpZiAoaXNEZWYoaW5saW5lVGVtcGxhdGUpKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBpbmxpbmVUZW1wbGF0ZS5yZW5kZXI7XG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBpbmxpbmVUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnM7XG4gIH1cbiAgcmV0dXJuIG5ldyB2bm9kZS5jb21wb25lbnRPcHRpb25zLkN0b3Iob3B0aW9ucylcbn1cblxuZnVuY3Rpb24gaW5zdGFsbENvbXBvbmVudEhvb2tzIChkYXRhKSB7XG4gIHZhciBob29rcyA9IGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzVG9NZXJnZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBob29rc1RvTWVyZ2VbaV07XG4gICAgdmFyIGV4aXN0aW5nID0gaG9va3Nba2V5XTtcbiAgICB2YXIgdG9NZXJnZSA9IGNvbXBvbmVudFZOb2RlSG9va3Nba2V5XTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IHRvTWVyZ2UgJiYgIShleGlzdGluZyAmJiBleGlzdGluZy5fbWVyZ2VkKSkge1xuICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rJDEodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VIb29rJDEgKGYxLCBmMikge1xuICB2YXIgbWVyZ2VkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAvLyBmbG93IGNvbXBsYWlucyBhYm91dCBleHRyYSBhcmdzIHdoaWNoIGlzIHdoeSB3ZSB1c2UgYW55XG4gICAgZjEoYSwgYik7XG4gICAgZjIoYSwgYik7XG4gIH07XG4gIG1lcmdlZC5fbWVyZ2VkID0gdHJ1ZTtcbiAgcmV0dXJuIG1lcmdlZFxufVxuXG4vLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgaW5mbyAodmFsdWUgYW5kIGNhbGxiYWNrKSBpbnRvXG4vLyBwcm9wIGFuZCBldmVudCBoYW5kbGVyIHJlc3BlY3RpdmVseS5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsIChvcHRpb25zLCBkYXRhKSB7XG4gIHZhciBwcm9wID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5wcm9wKSB8fCAndmFsdWUnO1xuICB2YXIgZXZlbnQgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmV2ZW50KSB8fCAnaW5wdXQnXG4gIDsoZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KSlbcHJvcF0gPSBkYXRhLm1vZGVsLnZhbHVlO1xuICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICB2YXIgZXhpc3RpbmcgPSBvbltldmVudF07XG4gIHZhciBjYWxsYmFjayA9IGRhdGEubW9kZWwuY2FsbGJhY2s7XG4gIGlmIChpc0RlZihleGlzdGluZykpIHtcbiAgICBpZiAoXG4gICAgICBBcnJheS5pc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICA/IGV4aXN0aW5nLmluZGV4T2YoY2FsbGJhY2spID09PSAtMVxuICAgICAgICA6IGV4aXN0aW5nICE9PSBjYWxsYmFja1xuICAgICkge1xuICAgICAgb25bZXZlbnRdID0gW2NhbGxiYWNrXS5jb25jYXQoZXhpc3RpbmcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvbltldmVudF0gPSBjYWxsYmFjaztcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuXG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxuLy8gd2l0aG91dCBnZXR0aW5nIHllbGxlZCBhdCBieSBmbG93XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50IChcbiAgY29udGV4dCxcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgbm9ybWFsaXphdGlvblR5cGUsXG4gIGFsd2F5c05vcm1hbGl6ZVxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcbiAgICBjaGlsZHJlbiA9IGRhdGE7XG4gICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXNUcnVlKGFsd2F5c05vcm1hbGl6ZSkpIHtcbiAgICBub3JtYWxpemF0aW9uVHlwZSA9IEFMV0FZU19OT1JNQUxJWkU7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlXG4pIHtcbiAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKChkYXRhKS5fX29iX18pKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCJBdm9pZCB1c2luZyBvYnNlcnZlZCBkYXRhIG9iamVjdCBhcyB2bm9kZSBkYXRhOiBcIiArIChKU09OLnN0cmluZ2lmeShkYXRhKSkgKyBcIlxcblwiICtcbiAgICAgICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIG9iamVjdCBzeW50YXggaW4gdi1iaW5kXG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgIHRhZyA9IGRhdGEuaXM7XG4gIH1cbiAgaWYgKCF0YWcpIHtcbiAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpXG4gICkge1xuICAgIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdBdm9pZCB1c2luZyBub24tcHJpbWl0aXZlIHZhbHVlIGFzIGtleSwgJyArXG4gICAgICAgICd1c2Ugc3RyaW5nL251bWJlciB2YWx1ZSBpbnN0ZWFkLicsXG4gICAgICAgIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vIHN1cHBvcnQgc2luZ2xlIGZ1bmN0aW9uIGNoaWxkcmVuIGFzIGRlZmF1bHQgc2NvcGVkIHNsb3RcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgfVxuICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfSBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICB9XG4gIHZhciB2bm9kZSwgbnM7XG4gIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgIHZhciBDdG9yO1xuICAgIG5zID0gKGNvbnRleHQuJHZub2RlICYmIGNvbnRleHQuJHZub2RlLm5zKSB8fCBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1lbnRzXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCghZGF0YSB8fCAhZGF0YS5wcmUpICYmIGlzRGVmKEN0b3IgPSByZXNvbHZlQXNzZXQoY29udGV4dC4kb3B0aW9ucywgJ2NvbXBvbmVudHMnLCB0YWcpKSkge1xuICAgICAgLy8gY29tcG9uZW50XG4gICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAvLyBjaGVjayBhdCBydW50aW1lIGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICB0YWcsIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudCh0YWcsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIGlmIChpc0RlZih2bm9kZSkpIHtcbiAgICBpZiAoaXNEZWYobnMpKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgIGlmIChpc0RlZihkYXRhKSkgeyByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKTsgfVxuICAgIHJldHVybiB2bm9kZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseU5TICh2bm9kZSwgbnMsIGZvcmNlKSB7XG4gIHZub2RlLm5zID0gbnM7XG4gIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIHVzZSBkZWZhdWx0IG5hbWVzcGFjZSBpbnNpZGUgZm9yZWlnbk9iamVjdFxuICAgIG5zID0gdW5kZWZpbmVkO1xuICAgIGZvcmNlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXNEZWYodm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiYgKFxuICAgICAgICBpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgYXBwbHlOUyhjaGlsZCwgbnMsIGZvcmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gcmVmICM1MzE4XG4vLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHBhcmVudCByZS1yZW5kZXIgd2hlbiBkZWVwIGJpbmRpbmdzIGxpa2UgOnN0eWxlIGFuZFxuLy8gOmNsYXNzIGFyZSB1c2VkIG9uIHNsb3Qgbm9kZXNcbmZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzIChkYXRhKSB7XG4gIGlmIChpc09iamVjdChkYXRhLnN0eWxlKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuc3R5bGUpO1xuICB9XG4gIGlmIChpc09iamVjdChkYXRhLmNsYXNzKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuY2xhc3MpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xuICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gIHZhciBwYXJlbnRWbm9kZSA9IHZtLiR2bm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlOyAvLyB0aGUgcGxhY2Vob2xkZXIgbm9kZSBpbiBwYXJlbnQgdHJlZVxuICB2YXIgcmVuZGVyQ29udGV4dCA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmNvbnRleHQ7XG4gIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gIHZtLiRzY29wZWRTbG90cyA9IGVtcHR5T2JqZWN0O1xuICAvLyBiaW5kIHRoZSBjcmVhdGVFbGVtZW50IGZuIHRvIHRoaXMgaW5zdGFuY2VcbiAgLy8gc28gdGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAvLyBpbnRlcm5hbCB2ZXJzaW9uIGlzIHVzZWQgYnkgcmVuZGVyIGZ1bmN0aW9ucyBjb21waWxlZCBmcm9tIHRlbXBsYXRlc1xuICB2bS5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gIC8vIG5vcm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNlZCBpblxuICAvLyB1c2VyLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucy5cbiAgdm0uJGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG5cbiAgLy8gJGF0dHJzICYgJGxpc3RlbmVycyBhcmUgZXhwb3NlZCBmb3IgZWFzaWVyIEhPQyBjcmVhdGlvbi5cbiAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICB2YXIgcGFyZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gIH1cbn1cblxudmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlbmRlck1peGluIChWdWUpIHtcbiAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgVnVlLnByb3RvdHlwZS4kbmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgIHZhciBfcGFyZW50Vm5vZGUgPSByZWYuX3BhcmVudFZub2RlO1xuXG4gICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgdm0uJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIF9wYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB2bS4kc2xvdHMsXG4gICAgICAgIHZtLiRzY29wZWRTbG90c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgcGFyZW50IHZub2RlLiB0aGlzIGFsbG93cyByZW5kZXIgZnVuY3Rpb25zIHRvIGhhdmUgYWNjZXNzXG4gICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5vZGUuXG4gICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgIC8vIHJlbmRlciBzZWxmXG4gICAgdmFyIHZub2RlO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gbWFpbnRhaW4gYSBzdGFjayBiZWNhdWVzIGFsbCByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHNlcGFyYXRlbHkgZnJvbSBvbmUgYW5vdGhlci4gTmVzdGVkIGNvbXBvbmVudCdzIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSB2bTtcbiAgICAgIHZub2RlID0gcmVuZGVyLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyRXJyb3JcIik7XG4gICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgY29udGFpbnMgb25seSBhIHNpbmdsZSBub2RlLCBhbGxvdyBpdFxuICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSAmJiB2bm9kZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZub2RlID0gdm5vZGVbMF07XG4gICAgfVxuICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICBpZiAoISh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2bm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcmVudFxuICAgIHZub2RlLnBhcmVudCA9IF9wYXJlbnRWbm9kZTtcbiAgICByZXR1cm4gdm5vZGVcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVuc3VyZUN0b3IgKGNvbXAsIGJhc2UpIHtcbiAgaWYgKFxuICAgIGNvbXAuX19lc01vZHVsZSB8fFxuICAgIChoYXNTeW1ib2wgJiYgY29tcFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJylcbiAgKSB7XG4gICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QoY29tcClcbiAgICA/IGJhc2UuZXh0ZW5kKGNvbXApXG4gICAgOiBjb21wXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIgKFxuICBmYWN0b3J5LFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgdmFyIG5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gIG5vZGUuYXN5bmNGYWN0b3J5ID0gZmFjdG9yeTtcbiAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgcmV0dXJuIG5vZGVcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50IChcbiAgZmFjdG9yeSxcbiAgYmFzZUN0b3Jcbikge1xuICBpZiAoaXNUcnVlKGZhY3RvcnkuZXJyb3IpICYmIGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmVycm9yQ29tcFxuICB9XG5cbiAgaWYgKGlzRGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxuXG4gIHZhciBvd25lciA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgaWYgKG93bmVyICYmIGlzRGVmKGZhY3Rvcnkub3duZXJzKSAmJiBmYWN0b3J5Lm93bmVycy5pbmRleE9mKG93bmVyKSA9PT0gLTEpIHtcbiAgICAvLyBhbHJlYWR5IHBlbmRpbmdcbiAgICBmYWN0b3J5Lm93bmVycy5wdXNoKG93bmVyKTtcbiAgfVxuXG4gIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihmYWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdDb21wXG4gIH1cblxuICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xuICAgIHZhciBvd25lcnMgPSBmYWN0b3J5Lm93bmVycyA9IFtvd25lcl07XG4gICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgIHZhciB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgIHZhciB0aW1lclRpbWVvdXQgPSBudWxsXG5cbiAgICA7KG93bmVyKS4kb24oJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlKG93bmVycywgb3duZXIpOyB9KTtcblxuICAgIHZhciBmb3JjZVJlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3duZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAob3duZXJzW2ldKS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgICBvd25lcnMubGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKHRpbWVyTG9hZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lckxvYWRpbmcpO1xuICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVyVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lclRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIC8vIGNhY2hlIHJlc29sdmVkXG4gICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgIC8vIGludm9rZSBjYWxsYmFja3Mgb25seSBpZiB0aGlzIGlzIG5vdCBhIHN5bmNocm9ub3VzIHJlc29sdmVcbiAgICAgIC8vIChhc3luYyByZXNvbHZlcyBhcmUgc2hpbW1lZCBhcyBzeW5jaHJvbm91cyBkdXJpbmcgU1NSKVxuICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50OiBcIiArIChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgKHJlYXNvbiA/IChcIlxcblJlYXNvbjogXCIgKyByZWFzb24pIDogJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVzID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgaWYgKGlzT2JqZWN0KHJlcykpIHtcbiAgICAgIGlmIChpc1Byb21pc2UocmVzKSkge1xuICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UocmVzLmNvbXBvbmVudCkpIHtcbiAgICAgICAgcmVzLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICBmYWN0b3J5LmVycm9yQ29tcCA9IGVuc3VyZUN0b3IocmVzLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzLmxvYWRpbmcsIGJhc2VDdG9yKTtcbiAgICAgICAgICBpZiAocmVzLmRlbGF5ID09PSAwKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZXMuZGVsYXkgfHwgMjAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLnRpbWVvdXQpKSB7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgICAgICAgICAgID8gKFwidGltZW91dCAoXCIgKyAocmVzLnRpbWVvdXQpICsgXCJtcylcIilcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHJlcy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN5bmMgPSBmYWxzZTtcbiAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ1xuICAgICAgPyBmYWN0b3J5LmxvYWRpbmdDb21wXG4gICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyIChub2RlKSB7XG4gIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCAoY2hpbGRyZW4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgIHJldHVybiBjXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyAodm0pIHtcbiAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgLy8gaW5pdCBwYXJlbnQgYXR0YWNoZWQgZXZlbnRzXG4gIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBpZiAobGlzdGVuZXJzKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICB9XG59XG5cbnZhciB0YXJnZXQ7XG5cbmZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4kb24oZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9mZihldmVudCwgZm4pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoZXZlbnQsIGZuKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0O1xuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIF90YXJnZXQuJG9mZihldmVudCwgb25jZUhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMgKFxuICB2bSxcbiAgbGlzdGVuZXJzLFxuICBvbGRMaXN0ZW5lcnNcbikge1xuICB0YXJnZXQgPSB2bTtcbiAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pO1xuICB0YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1hcmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGZ1bmN0aW9uIG9uICgpIHtcbiAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvbi5mbiA9IGZuO1xuICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGFsbFxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gYXJyYXkgb2YgZXZlbnRzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpJDEgPCBsOyBpJDErKykge1xuICAgICAgICB2bS4kb2ZmKGV2ZW50W2kkMV0sIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoIWNicykge1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIGlmICghZm4pIHtcbiAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgdmFyIGNiO1xuICAgIHZhciBpID0gY2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjYiA9IGNic1tpXTtcbiAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICB0aXAoXG4gICAgICAgICAgXCJFdmVudCBcXFwiXCIgKyBsb3dlckNhc2VFdmVudCArIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgIFwidi1vbiB0byBsaXN0ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIFwiICtcbiAgICAgICAgICBcIllvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIChoeXBoZW5hdGUoZXZlbnQpKSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoY2JzKSB7XG4gICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcbiAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGluZm8gPSBcImV2ZW50IGhhbmRsZXIgZm9yIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiXCI7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2JzW2ldLCB2bSwgYXJncywgdm0sIGluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNldEFjdGl2ZUluc3RhbmNlKHZtKSB7XG4gIHZhciBwcmV2QWN0aXZlSW5zdGFuY2UgPSBhY3RpdmVJbnN0YW5jZTtcbiAgYWN0aXZlSW5zdGFuY2UgPSB2bTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBhY3RpdmVJbnN0YW5jZSA9IHByZXZBY3RpdmVJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TGlmZWN5Y2xlICh2bSkge1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuXG4gIC8vIGxvY2F0ZSBmaXJzdCBub24tYWJzdHJhY3QgcGFyZW50XG4gIHZhciBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgaWYgKHBhcmVudCAmJiAhb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcbiAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgIH1cbiAgICBwYXJlbnQuJGNoaWxkcmVuLnB1c2godm0pO1xuICB9XG5cbiAgdm0uJHBhcmVudCA9IHBhcmVudDtcbiAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcblxuICB2bS4kY2hpbGRyZW4gPSBbXTtcbiAgdm0uJHJlZnMgPSB7fTtcblxuICB2bS5fd2F0Y2hlciA9IG51bGw7XG4gIHZtLl9pbmFjdGl2ZSA9IG51bGw7XG4gIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICB2bS5faXNNb3VudGVkID0gZmFsc2U7XG4gIHZtLl9pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaWZlY3ljbGVNaXhpbiAoVnVlKSB7XG4gIFZ1ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICB2YXIgcHJldkVsID0gdm0uJGVsO1xuICAgIHZhciBwcmV2Vm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHZtKTtcbiAgICB2bS5fdm5vZGUgPSB2bm9kZTtcbiAgICAvLyBWdWUucHJvdG90eXBlLl9fcGF0Y2hfXyBpcyBpbmplY3RlZCBpbiBlbnRyeSBwb2ludHNcbiAgICAvLyBiYXNlZCBvbiB0aGUgcmVuZGVyaW5nIGJhY2tlbmQgdXNlZC5cbiAgICBpZiAoIXByZXZWbm9kZSkge1xuICAgICAgLy8gaW5pdGlhbCByZW5kZXJcbiAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGVzXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XG4gICAgfVxuICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmIChwcmV2RWwpIHtcbiAgICAgIHByZXZFbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHZtLiRlbCkge1xuICAgICAgdm0uJGVsLl9fdnVlX18gPSB2bTtcbiAgICB9XG4gICAgLy8gaWYgcGFyZW50IGlzIGFuIEhPQywgdXBkYXRlIGl0cyAkZWwgYXMgd2VsbFxuICAgIGlmICh2bS4kdm5vZGUgJiYgdm0uJHBhcmVudCAmJiB2bS4kdm5vZGUgPT09IHZtLiRwYXJlbnQuX3Zub2RlKSB7XG4gICAgICB2bS4kcGFyZW50LiRlbCA9IHZtLiRlbDtcbiAgICB9XG4gICAgLy8gdXBkYXRlZCBob29rIGlzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyIHRvIGVuc3VyZSB0aGF0IGNoaWxkcmVuIGFyZVxuICAgIC8vIHVwZGF0ZWQgaW4gYSBwYXJlbnQncyB1cGRhdGVkIGhvb2suXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVEZXN0cm95Jyk7XG4gICAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IHZtLiRwYXJlbnQ7XG4gICAgaWYgKHBhcmVudCAmJiAhcGFyZW50Ll9pc0JlaW5nRGVzdHJveWVkICYmICF2bS4kb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgICAgcmVtb3ZlKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICB9XG4gICAgLy8gdGVhcmRvd24gd2F0Y2hlcnNcbiAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIHZhciBpID0gdm0uX3dhdGNoZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2bS5fd2F0Y2hlcnNbaV0udGVhcmRvd24oKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZmVyZW5jZSBmcm9tIGRhdGEgb2JcbiAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2ZSBvYnNlcnZlci5cbiAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICB2bS5fZGF0YS5fX29iX18udm1Db3VudC0tO1xuICAgIH1cbiAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAgICB2bS5faXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIGludm9rZSBkZXN0cm95IGhvb2tzIG9uIGN1cnJlbnQgcmVuZGVyZWQgdHJlZVxuICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwpO1xuICAgIC8vIGZpcmUgZGVzdHJveWVkIGhvb2tcbiAgICBjYWxsSG9vayh2bSwgJ2Rlc3Ryb3llZCcpO1xuICAgIC8vIHR1cm4gb2ZmIGFsbCBpbnN0YW5jZSBsaXN0ZW5lcnMuXG4gICAgdm0uJG9mZigpO1xuICAgIC8vIHJlbW92ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxuICAgIGlmICh2bS4kdm5vZGUpIHtcbiAgICAgIHZtLiR2bm9kZS5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbW91bnRDb21wb25lbnQgKFxuICB2bSxcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIHZtLiRlbCA9IGVsO1xuICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xuICAgIHZtLiRvcHRpb25zLnJlbmRlciA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCh2bS4kb3B0aW9ucy50ZW1wbGF0ZSAmJiB2bS4kb3B0aW9ucy50ZW1wbGF0ZS5jaGFyQXQoMCkgIT09ICcjJykgfHxcbiAgICAgICAgdm0uJG9wdGlvbnMuZWwgfHwgZWwpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IGFyZSB1c2luZyB0aGUgcnVudGltZS1vbmx5IGJ1aWxkIG9mIFZ1ZSB3aGVyZSB0aGUgdGVtcGxhdGUgJyArXG4gICAgICAgICAgJ2NvbXBpbGVyIGlzIG5vdCBhdmFpbGFibGUuIEVpdGhlciBwcmUtY29tcGlsZSB0aGUgdGVtcGxhdGVzIGludG8gJyArXG4gICAgICAgICAgJ3JlbmRlciBmdW5jdGlvbnMsIG9yIHVzZSB0aGUgY29tcGlsZXItaW5jbHVkZWQgYnVpbGQuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnRmFpbGVkIHRvIG1vdW50IGNvbXBvbmVudDogdGVtcGxhdGUgb3IgcmVuZGVyIGZ1bmN0aW9uIG5vdCBkZWZpbmVkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2FsbEhvb2sodm0sICdiZWZvcmVNb3VudCcpO1xuXG4gIHZhciB1cGRhdGVDb21wb25lbnQ7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBuYW1lID0gdm0uX25hbWU7XG4gICAgICB2YXIgaWQgPSB2bS5fdWlkO1xuICAgICAgdmFyIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArIGlkO1xuICAgICAgdmFyIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgaWQ7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyBuYW1lICsgXCIgcmVuZGVyXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcblxuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICB2bS5fdXBkYXRlKHZub2RlLCBoeWRyYXRpbmcpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyBuYW1lICsgXCIgcGF0Y2hcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdm0uX3VwZGF0ZSh2bS5fcmVuZGVyKCksIGh5ZHJhdGluZyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIHdlIHNldCB0aGlzIHRvIHZtLl93YXRjaGVyIGluc2lkZSB0aGUgd2F0Y2hlcidzIGNvbnN0cnVjdG9yXG4gIC8vIHNpbmNlIHRoZSB3YXRjaGVyJ3MgaW5pdGlhbCBwYXRjaCBtYXkgY2FsbCAkZm9yY2VVcGRhdGUgKGUuZy4gaW5zaWRlIGNoaWxkXG4gIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcbiAgbmV3IFdhdGNoZXIodm0sIHVwZGF0ZUNvbXBvbmVudCwgbm9vcCwge1xuICAgIGJlZm9yZTogZnVuY3Rpb24gYmVmb3JlICgpIHtcbiAgICAgIGlmICh2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgY2FsbEhvb2sodm0sICdiZWZvcmVVcGRhdGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHRydWUgLyogaXNSZW5kZXJXYXRjaGVyICovKTtcbiAgaHlkcmF0aW5nID0gZmFsc2U7XG5cbiAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZcbiAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgaWYgKHZtLiR2bm9kZSA9PSBudWxsKSB7XG4gICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgY2FsbEhvb2sodm0sICdtb3VudGVkJyk7XG4gIH1cbiAgcmV0dXJuIHZtXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50IChcbiAgdm0sXG4gIHByb3BzRGF0YSxcbiAgbGlzdGVuZXJzLFxuICBwYXJlbnRWbm9kZSxcbiAgcmVuZGVyQ2hpbGRyZW5cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICAvLyBkZXRlcm1pbmUgd2hldGhlciBjb21wb25lbnQgaGFzIHNsb3QgY2hpbGRyZW5cbiAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBvdmVyd3JpdGluZyAkb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4uXG5cbiAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAvLyBkeW5hbWljIHNsb3QgbmFtZXMpLiBTdGF0aWMgc2NvcGVkIHNsb3RzIGNvbXBpbGVkIGZyb20gdGVtcGxhdGUgaGFzIHRoZVxuICAvLyBcIiRzdGFibGVcIiBtYXJrZXIuXG4gIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gIHZhciBvbGRTY29wZWRTbG90cyA9IHZtLiRzY29wZWRTbG90cztcbiAgdmFyIGhhc0R5bmFtaWNTY29wZWRTbG90ID0gISEoXG4gICAgKG5ld1Njb3BlZFNsb3RzICYmICFuZXdTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChvbGRTY29wZWRTbG90cyAhPT0gZW1wdHlPYmplY3QgJiYgIW9sZFNjb3BlZFNsb3RzLiRzdGFibGUpIHx8XG4gICAgKG5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5ICE9PSBuZXdTY29wZWRTbG90cy4ka2V5KVxuICApO1xuXG4gIC8vIEFueSBzdGF0aWMgc2xvdCBjaGlsZHJlbiBmcm9tIHRoZSBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgcGFyZW50J3NcbiAgLy8gdXBkYXRlLiBEeW5hbWljIHNjb3BlZCBzbG90cyBtYXkgYWxzbyBoYXZlIGNoYW5nZWQuIEluIHN1Y2ggY2FzZXMsIGEgZm9yY2VkXG4gIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICB2YXIgbmVlZHNGb3JjZVVwZGF0ZSA9ICEhKFxuICAgIHJlbmRlckNoaWxkcmVuIHx8ICAgICAgICAgICAgICAgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcbiAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgIC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4gICAgaGFzRHluYW1pY1Njb3BlZFNsb3RcbiAgKTtcblxuICB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcbiAgdm0uJHZub2RlID0gcGFyZW50Vm5vZGU7IC8vIHVwZGF0ZSB2bSdzIHBsYWNlaG9sZGVyIG5vZGUgd2l0aG91dCByZS1yZW5kZXJcblxuICBpZiAodm0uX3Zub2RlKSB7IC8vIHVwZGF0ZSBjaGlsZCB0cmVlJ3MgcGFyZW50XG4gICAgdm0uX3Zub2RlLnBhcmVudCA9IHBhcmVudFZub2RlO1xuICB9XG4gIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuXG4gIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAvLyB0aGVzZSBhcmUgYWxzbyByZWFjdGl2ZSBzbyB0aGV5IG1heSB0cmlnZ2VyIGNoaWxkIHVwZGF0ZSBpZiB0aGUgY2hpbGRcbiAgLy8gdXNlZCB0aGVtIGR1cmluZyByZW5kZXJcbiAgdm0uJGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgdm0uJGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcblxuICAvLyB1cGRhdGUgcHJvcHNcbiAgaWYgKHByb3BzRGF0YSAmJiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgdmFyIHByb3BzID0gdm0uX3Byb3BzO1xuICAgIHZhciBwcm9wS2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyB8fCBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgIH1cbiAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YSA9IHByb3BzRGF0YTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsaXN0ZW5lcnNcbiAgbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuICB2YXIgb2xkTGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyA9IGxpc3RlbmVycztcbiAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyk7XG5cbiAgLy8gcmVzb2x2ZSBzbG90cyArIGZvcmNlIHVwZGF0ZSBpZiBoYXMgY2hpbGRyZW5cbiAgaWYgKG5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMocmVuZGVyQ2hpbGRyZW4sIHBhcmVudFZub2RlLmNvbnRleHQpO1xuICAgIHZtLiRmb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luSW5hY3RpdmVUcmVlICh2bSkge1xuICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICBpZiAodm0uX2luYWN0aXZlKSB7IHJldHVybiB0cnVlIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodm0uX2RpcmVjdEluYWN0aXZlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZtLl9pbmFjdGl2ZSB8fCB2bS5faW5hY3RpdmUgPT09IG51bGwpIHtcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2FjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gdHJ1ZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICBpZiAoIXZtLl9pbmFjdGl2ZSkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2RlYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbEhvb2sgKHZtLCBob29rKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgcHVzaFRhcmdldCgpO1xuICB2YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgdmFyIGluZm8gPSBob29rICsgXCIgaG9va1wiO1xuICBpZiAoaGFuZGxlcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBudWxsLCB2bSwgaW5mbyk7XG4gICAgfVxuICB9XG4gIGlmICh2bS5faGFzSG9va0V2ZW50KSB7XG4gICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xuICB9XG4gIHBvcFRhcmdldCgpO1xufVxuXG4vKiAgKi9cblxudmFyIE1BWF9VUERBVEVfQ09VTlQgPSAxMDA7XG5cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG52YXIgaGFzID0ge307XG52YXIgY2lyY3VsYXIgPSB7fTtcbnZhciB3YWl0aW5nID0gZmFsc2U7XG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcbnZhciBpbmRleCA9IDA7XG5cbi8qKlxuICogUmVzZXQgdGhlIHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlICgpIHtcbiAgaW5kZXggPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGggPSAwO1xuICBoYXMgPSB7fTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaXJjdWxhciA9IHt9O1xuICB9XG4gIHdhaXRpbmcgPSBmbHVzaGluZyA9IGZhbHNlO1xufVxuXG4vLyBBc3luYyBlZGdlIGNhc2UgIzY1NjYgcmVxdWlyZXMgc2F2aW5nIHRoZSB0aW1lc3RhbXAgd2hlbiBldmVudCBsaXN0ZW5lcnMgYXJlXG4vLyBhdHRhY2hlZC4gSG93ZXZlciwgY2FsbGluZyBwZXJmb3JtYW5jZS5ub3coKSBoYXMgYSBwZXJmIG92ZXJoZWFkIGVzcGVjaWFsbHlcbi8vIGlmIHRoZSBwYWdlIGhhcyB0aG91c2FuZHMgb2YgZXZlbnQgbGlzdGVuZXJzLiBJbnN0ZWFkLCB3ZSB0YWtlIGEgdGltZXN0YW1wXG4vLyBldmVyeSB0aW1lIHRoZSBzY2hlZHVsZXIgZmx1c2hlcyBhbmQgdXNlIHRoYXQgZm9yIGFsbCBldmVudCBsaXN0ZW5lcnNcbi8vIGF0dGFjaGVkIGR1cmluZyB0aGF0IGZsdXNoLlxudmFyIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IDA7XG5cbi8vIEFzeW5jIGVkZ2UgY2FzZSBmaXggcmVxdWlyZXMgc3RvcmluZyBhbiBldmVudCBsaXN0ZW5lcidzIGF0dGFjaCB0aW1lc3RhbXAuXG52YXIgZ2V0Tm93ID0gRGF0ZS5ub3c7XG5cbi8vIERldGVybWluZSB3aGF0IGV2ZW50IHRpbWVzdGFtcCB0aGUgYnJvd3NlciBpcyB1c2luZy4gQW5ub3lpbmdseSwgdGhlXG4vLyB0aW1lc3RhbXAgY2FuIGVpdGhlciBiZSBoaS1yZXMgKHJlbGF0aXZlIHRvIHBhZ2UgbG9hZCkgb3IgbG93LXJlc1xuLy8gKHJlbGF0aXZlIHRvIFVOSVggZXBvY2gpLCBzbyBpbiBvcmRlciB0byBjb21wYXJlIHRpbWUgd2UgaGF2ZSB0byB1c2UgdGhlXG4vLyBzYW1lIHRpbWVzdGFtcCB0eXBlIHdoZW4gc2F2aW5nIHRoZSBmbHVzaCB0aW1lc3RhbXAuXG4vLyBBbGwgSUUgdmVyc2lvbnMgdXNlIGxvdy1yZXMgZXZlbnQgdGltZXN0YW1wcywgYW5kIGhhdmUgcHJvYmxlbWF0aWMgY2xvY2tcbi8vIGltcGxlbWVudGF0aW9ucyAoIzk2MzIpXG5pZiAoaW5Ccm93c2VyICYmICFpc0lFKSB7XG4gIHZhciBwZXJmb3JtYW5jZSA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgaWYgKFxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIGdldE5vdygpID4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50JykudGltZVN0YW1wXG4gICkge1xuICAgIC8vIGlmIHRoZSBldmVudCB0aW1lc3RhbXAsIGFsdGhvdWdoIGV2YWx1YXRlZCBBRlRFUiB0aGUgRGF0ZS5ub3coKSwgaXNcbiAgICAvLyBzbWFsbGVyIHRoYW4gaXQsIGl0IG1lYW5zIHRoZSBldmVudCBpcyB1c2luZyBhIGhpLXJlcyB0aW1lc3RhbXAsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBoaS1yZXMgdmVyc2lvbiBmb3IgZXZlbnQgbGlzdGVuZXIgdGltZXN0YW1wcyBhc1xuICAgIC8vIHdlbGwuXG4gICAgZ2V0Tm93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7IH07XG4gIH1cbn1cblxuLyoqXG4gKiBGbHVzaCBib3RoIHF1ZXVlcyBhbmQgcnVuIHRoZSB3YXRjaGVycy5cbiAqL1xuZnVuY3Rpb24gZmx1c2hTY2hlZHVsZXJRdWV1ZSAoKSB7XG4gIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IGdldE5vdygpO1xuICBmbHVzaGluZyA9IHRydWU7XG4gIHZhciB3YXRjaGVyLCBpZDtcblxuICAvLyBTb3J0IHF1ZXVlIGJlZm9yZSBmbHVzaC5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gIC8vIDEuIENvbXBvbmVudHMgYXJlIHVwZGF0ZWQgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIChiZWNhdXNlIHBhcmVudCBpcyBhbHdheXNcbiAgLy8gICAgY3JlYXRlZCBiZWZvcmUgdGhlIGNoaWxkKVxuICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gIC8vICAgIHVzZXIgd2F0Y2hlcnMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSByZW5kZXIgd2F0Y2hlcilcbiAgLy8gMy4gSWYgYSBjb21wb25lbnQgaXMgZGVzdHJveWVkIGR1cmluZyBhIHBhcmVudCBjb21wb25lbnQncyB3YXRjaGVyIHJ1bixcbiAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICBxdWV1ZS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG5cbiAgLy8gZG8gbm90IGNhY2hlIGxlbmd0aCBiZWNhdXNlIG1vcmUgd2F0Y2hlcnMgbWlnaHQgYmUgcHVzaGVkXG4gIC8vIGFzIHdlIHJ1biBleGlzdGluZyB3YXRjaGVyc1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBxdWV1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICB3YXRjaGVyID0gcXVldWVbaW5kZXhdO1xuICAgIGlmICh3YXRjaGVyLmJlZm9yZSkge1xuICAgICAgd2F0Y2hlci5iZWZvcmUoKTtcbiAgICB9XG4gICAgaWQgPSB3YXRjaGVyLmlkO1xuICAgIGhhc1tpZF0gPSBudWxsO1xuICAgIHdhdGNoZXIucnVuKCk7XG4gICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArIChcbiAgICAgICAgICAgIHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gIHZhciB1cGRhdGVkUXVldWUgPSBxdWV1ZS5zbGljZSgpO1xuXG4gIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3RpdmF0ZWQgaG9va3NcbiAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gIC8vIGRldnRvb2wgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyAocXVldWUpIHtcbiAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgd2F0Y2hlciA9IHF1ZXVlW2ldO1xuICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgY2FsbEhvb2sodm0sICd1cGRhdGVkJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCAodm0pIHtcbiAgLy8gc2V0dGluZyBfaW5hY3RpdmUgdG8gZmFsc2UgaGVyZSBzbyB0aGF0IGEgcmVuZGVyIGZ1bmN0aW9uIGNhblxuICAvLyByZWx5IG9uIGNoZWNraW5nIHdoZXRoZXIgaXQncyBpbiBhbiBpbmFjdGl2ZSB0cmVlIChlLmcuIHJvdXRlci12aWV3KVxuICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgYWN0aXZhdGVkQ2hpbGRyZW4ucHVzaCh2bSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyAocXVldWUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHF1ZXVlW2ldLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgfVxufVxuXG4vKipcbiAqIFB1c2ggYSB3YXRjaGVyIGludG8gdGhlIHdhdGNoZXIgcXVldWUuXG4gKiBKb2JzIHdpdGggZHVwbGljYXRlIElEcyB3aWxsIGJlIHNraXBwZWQgdW5sZXNzIGl0J3NcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZVdhdGNoZXIgKHdhdGNoZXIpIHtcbiAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgaWYgKGhhc1tpZF0gPT0gbnVsbCkge1xuICAgIGhhc1tpZF0gPSB0cnVlO1xuICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgIHF1ZXVlLnB1c2god2F0Y2hlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGFscmVhZHkgZmx1c2hpbmcsIHNwbGljZSB0aGUgd2F0Y2hlciBiYXNlZCBvbiBpdHMgaWRcbiAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaSA+IGluZGV4ICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgIHdhaXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgICAgIGZsdXNoU2NoZWR1bGVyUXVldWUoKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBuZXh0VGljayhmbHVzaFNjaGVkdWxlclF1ZXVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cblxuXG52YXIgdWlkJDIgPSAwO1xuXG4vKipcbiAqIEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxuICogYW5kIGZpcmVzIGNhbGxiYWNrIHdoZW4gdGhlIGV4cHJlc3Npb24gdmFsdWUgY2hhbmdlcy5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCB0aGUgJHdhdGNoKCkgYXBpIGFuZCBkaXJlY3RpdmVzLlxuICovXG52YXIgV2F0Y2hlciA9IGZ1bmN0aW9uIFdhdGNoZXIgKFxuICB2bSxcbiAgZXhwT3JGbixcbiAgY2IsXG4gIG9wdGlvbnMsXG4gIGlzUmVuZGVyV2F0Y2hlclxuKSB7XG4gIHRoaXMudm0gPSB2bTtcbiAgaWYgKGlzUmVuZGVyV2F0Y2hlcikge1xuICAgIHZtLl93YXRjaGVyID0gdGhpcztcbiAgfVxuICB2bS5fd2F0Y2hlcnMucHVzaCh0aGlzKTtcbiAgLy8gb3B0aW9uc1xuICBpZiAob3B0aW9ucykge1xuICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgIHRoaXMudXNlciA9ICEhb3B0aW9ucy51c2VyO1xuICAgIHRoaXMubGF6eSA9ICEhb3B0aW9ucy5sYXp5O1xuICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICAgIHRoaXMuYmVmb3JlID0gb3B0aW9ucy5iZWZvcmU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5ID0gdGhpcy5zeW5jID0gZmFsc2U7XG4gIH1cbiAgdGhpcy5jYiA9IGNiO1xuICB0aGlzLmlkID0gKyt1aWQkMjsgLy8gdWlkIGZvciBiYXRjaGluZ1xuICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIHRoaXMuZGlydHkgPSB0aGlzLmxhenk7IC8vIGZvciBsYXp5IHdhdGNoZXJzXG4gIHRoaXMuZGVwcyA9IFtdO1xuICB0aGlzLm5ld0RlcHMgPSBbXTtcbiAgdGhpcy5kZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLm5ld0RlcElkcyA9IG5ldyBfU2V0KCk7XG4gIHRoaXMuZXhwcmVzc2lvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICA/IGV4cE9yRm4udG9TdHJpbmcoKVxuICAgIDogJyc7XG4gIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICBpZiAodHlwZW9mIGV4cE9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLmdldHRlciA9IGV4cE9yRm47XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAgaWYgKCF0aGlzLmdldHRlcikge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB3YXRjaGluZyBwYXRoOiBcXFwiXCIgKyBleHBPckZuICsgXCJcXFwiIFwiICtcbiAgICAgICAgJ1dhdGNoZXIgb25seSBhY2NlcHRzIHNpbXBsZSBkb3QtZGVsaW1pdGVkIHBhdGhzLiAnICtcbiAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHRoaXMudmFsdWUgPSB0aGlzLmxhenlcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogdGhpcy5nZXQoKTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIGdldHRlciwgYW5kIHJlLWNvbGxlY3QgZGVwZW5kZW5jaWVzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKCkge1xuICBwdXNoVGFyZ2V0KHRoaXMpO1xuICB2YXIgdmFsdWU7XG4gIHZhciB2bSA9IHRoaXMudm07XG4gIHRyeSB7XG4gICAgdmFsdWUgPSB0aGlzLmdldHRlci5jYWxsKHZtLCB2bSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bSwgKFwiZ2V0dGVyIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBcInRvdWNoXCIgZXZlcnkgcHJvcGVydHkgc28gdGhleSBhcmUgYWxsIHRyYWNrZWQgYXNcbiAgICAvLyBkZXBlbmRlbmNpZXMgZm9yIGRlZXAgd2F0Y2hpbmdcbiAgICBpZiAodGhpcy5kZWVwKSB7XG4gICAgICB0cmF2ZXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIHBvcFRhcmdldCgpO1xuICAgIHRoaXMuY2xlYW51cERlcHMoKTtcbiAgfVxuICByZXR1cm4gdmFsdWVcbn07XG5cbi8qKlxuICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuYWRkRGVwID0gZnVuY3Rpb24gYWRkRGVwIChkZXApIHtcbiAgdmFyIGlkID0gZGVwLmlkO1xuICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhpZCkpIHtcbiAgICB0aGlzLm5ld0RlcElkcy5hZGQoaWQpO1xuICAgIHRoaXMubmV3RGVwcy5wdXNoKGRlcCk7XG4gICAgaWYgKCF0aGlzLmRlcElkcy5oYXMoaWQpKSB7XG4gICAgICBkZXAuYWRkU3ViKHRoaXMpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBDbGVhbiB1cCBmb3IgZGVwZW5kZW5jeSBjb2xsZWN0aW9uLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5jbGVhbnVwRGVwcyA9IGZ1bmN0aW9uIGNsZWFudXBEZXBzICgpIHtcbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGRlcCA9IHRoaXMuZGVwc1tpXTtcbiAgICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhkZXAuaWQpKSB7XG4gICAgICBkZXAucmVtb3ZlU3ViKHRoaXMpO1xuICAgIH1cbiAgfVxuICB2YXIgdG1wID0gdGhpcy5kZXBJZHM7XG4gIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4gIHRoaXMubmV3RGVwSWRzID0gdG1wO1xuICB0aGlzLm5ld0RlcElkcy5jbGVhcigpO1xuICB0bXAgPSB0aGlzLmRlcHM7XG4gIHRoaXMuZGVwcyA9IHRoaXMubmV3RGVwcztcbiAgdGhpcy5uZXdEZXBzID0gdG1wO1xuICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogU3Vic2NyaWJlciBpbnRlcmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCB3aGVuIGEgZGVwZW5kZW5jeSBjaGFuZ2VzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodGhpcy5sYXp5KSB7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodGhpcy5zeW5jKSB7XG4gICAgdGhpcy5ydW4oKTtcbiAgfSBlbHNlIHtcbiAgICBxdWV1ZVdhdGNoZXIodGhpcyk7XG4gIH1cbn07XG5cbi8qKlxuICogU2NoZWR1bGVyIGpvYiBpbnRlcmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiBydW4gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldCgpO1xuICAgIGlmIChcbiAgICAgIHZhbHVlICE9PSB0aGlzLnZhbHVlIHx8XG4gICAgICAvLyBEZWVwIHdhdGNoZXJzIGFuZCB3YXRjaGVycyBvbiBPYmplY3QvQXJyYXlzIHNob3VsZCBmaXJlIGV2ZW5cbiAgICAgIC8vIHdoZW4gdGhlIHZhbHVlIGlzIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSB2YWx1ZSBtYXlcbiAgICAgIC8vIGhhdmUgbXV0YXRlZC5cbiAgICAgIGlzT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgdGhpcy5kZWVwXG4gICAgKSB7XG4gICAgICAvLyBzZXQgbmV3IHZhbHVlXG4gICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdGhpcy52bSwgKFwiY2FsbGJhY2sgZm9yIHdhdGNoZXIgXFxcIlwiICsgKHRoaXMuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSB3YXRjaGVyLlxuICogVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZvciBsYXp5IHdhdGNoZXJzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlICgpIHtcbiAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVwZW5kIG9uIGFsbCBkZXBzIGNvbGxlY3RlZCBieSB0aGlzIHdhdGNoZXIuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHRoaXMuZGVwc1tpXS5kZXBlbmQoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmUgc2VsZiBmcm9tIGFsbCBkZXBlbmRlbmNpZXMnIHN1YnNjcmliZXIgbGlzdC5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiB0ZWFyZG93biAoKSB7XG4gIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gdm0ncyB3YXRjaGVyIGxpc3RcbiAgICAvLyB0aGlzIGlzIGEgc29tZXdoYXQgZXhwZW5zaXZlIG9wZXJhdGlvbiBzbyB3ZSBza2lwIGl0XG4gICAgLy8gaWYgdGhlIHZtIGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICBpZiAoIXRoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgIHJlbW92ZSh0aGlzLnZtLl93YXRjaGVycywgdGhpcyk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB0aGlzLmRlcHNbaV0ucmVtb3ZlU3ViKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IG5vb3AsXG4gIHNldDogbm9vcFxufTtcblxuZnVuY3Rpb24gcHJveHkgKHRhcmdldCwgc291cmNlS2V5LCBrZXkpIHtcbiAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IGZ1bmN0aW9uIHByb3h5R2V0dGVyICgpIHtcbiAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV1cbiAgfTtcbiAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IGZ1bmN0aW9uIHByb3h5U2V0dGVyICh2YWwpIHtcbiAgICB0aGlzW3NvdXJjZUtleV1ba2V5XSA9IHZhbDtcbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBpbml0U3RhdGUgKHZtKSB7XG4gIHZtLl93YXRjaGVycyA9IFtdO1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zO1xuICBpZiAob3B0cy5wcm9wcykgeyBpbml0UHJvcHModm0sIG9wdHMucHJvcHMpOyB9XG4gIGlmIChvcHRzLm1ldGhvZHMpIHsgaW5pdE1ldGhvZHModm0sIG9wdHMubWV0aG9kcyk7IH1cbiAgaWYgKG9wdHMuZGF0YSkge1xuICAgIGluaXREYXRhKHZtKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZlKHZtLl9kYXRhID0ge30sIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG4gIH1cbiAgaWYgKG9wdHMuY29tcHV0ZWQpIHsgaW5pdENvbXB1dGVkKHZtLCBvcHRzLmNvbXB1dGVkKTsgfVxuICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgIGluaXRXYXRjaCh2bSwgb3B0cy53YXRjaCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzICh2bSwgcHJvcHNPcHRpb25zKSB7XG4gIHZhciBwcm9wc0RhdGEgPSB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgfHwge307XG4gIHZhciBwcm9wcyA9IHZtLl9wcm9wcyA9IHt9O1xuICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAvLyBpbnN0ZWFkIG9mIGR5bmFtaWMgb2JqZWN0IGtleSBlbnVtZXJhdGlvbi5cbiAgdmFyIGtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgPSBbXTtcbiAgdmFyIGlzUm9vdCA9ICF2bS4kcGFyZW50O1xuICAvLyByb290IGluc3RhbmNlIHByb3BzIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgaWYgKCFpc1Jvb3QpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICB9XG4gIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gICAgdmFyIHZhbHVlID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcHNPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoaHlwaGVuYXRlZEtleSkgfHxcbiAgICAgICAgICBjb25maWcuaXNSZXNlcnZlZEF0dHIoaHlwaGVuYXRlZEtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJcXFwiXCIgKyBoeXBoZW5hdGVkS2V5ICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcIkluc3RlYWQsIHVzZSBhIGRhdGEgb3IgY29tcHV0ZWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3AncyBcIiArXG4gICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmaW5lUmVhY3RpdmUkJDEocHJvcHMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvLyBzdGF0aWMgcHJvcHMgYXJlIGFscmVhZHkgcHJveGllZCBvbiB0aGUgY29tcG9uZW50J3MgcHJvdG90eXBlXG4gICAgLy8gZHVyaW5nIFZ1ZS5leHRlbmQoKS4gV2Ugb25seSBuZWVkIHRvIHByb3h5IHByb3BzIGRlZmluZWQgYXRcbiAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgcHJveHkodm0sIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wc09wdGlvbnMpIGxvb3AoIGtleSApO1xuICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhICh2bSkge1xuICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gIGRhdGEgPSB2bS5fZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nXG4gICAgPyBnZXREYXRhKGRhdGEsIHZtKVxuICAgIDogZGF0YSB8fCB7fTtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgZGF0YSA9IHt9O1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICdodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIC8vIHByb3h5IGRhdGEgb24gaW5zdGFuY2VcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIHZhciBtZXRob2RzID0gdm0uJG9wdGlvbnMubWV0aG9kcztcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAobWV0aG9kcyAmJiBoYXNPd24obWV0aG9kcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIGEgZGF0YSBwcm9wZXJ0eS5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIlRoZSBkYXRhIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlY2xhcmVkIGFzIGEgcHJvcC4gXCIgK1xuICAgICAgICBcIlVzZSBwcm9wIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5cIixcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICBwcm94eSh2bSwgXCJfZGF0YVwiLCBrZXkpO1xuICAgIH1cbiAgfVxuICAvLyBvYnNlcnZlIGRhdGFcbiAgb2JzZXJ2ZShkYXRhLCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhIChkYXRhLCB2bSkge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgZGF0YSBnZXR0ZXJzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICByZXR1cm4ge31cbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQgKHZtLCBjb21wdXRlZCkge1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIHdhdGNoZXJzID0gdm0uX2NvbXB1dGVkV2F0Y2hlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBqdXN0IGdldHRlcnMgZHVyaW5nIFNTUlxuICB2YXIgaXNTU1IgPSBpc1NlcnZlclJlbmRlcmluZygpO1xuXG4gIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgIHZhciB1c2VyRGVmID0gY29tcHV0ZWRba2V5XTtcbiAgICB2YXIgZ2V0dGVyID0gdHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicgPyB1c2VyRGVmIDogdXNlckRlZi5nZXQ7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZ2V0dGVyID09IG51bGwpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU1NSKSB7XG4gICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKFxuICAgICAgICB2bSxcbiAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgIG5vb3AsXG4gICAgICAgIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29tcG9uZW50LWRlZmluZWQgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZVxuICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgLy8gYXQgaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGRhdGEuXCIpLCB2bSk7XG4gICAgICB9IGVsc2UgaWYgKHZtLiRvcHRpb25zLnByb3BzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29tcHV0ZWQgKFxuICB0YXJnZXQsXG4gIGtleSxcbiAgdXNlckRlZlxuKSB7XG4gIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xuICBpZiAodHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gc2hvdWxkQ2FjaGVcbiAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYpO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICB9IGVsc2Uge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSB1c2VyRGVmLmdldFxuICAgICAgPyBzaG91bGRDYWNoZSAmJiB1c2VyRGVmLmNhY2hlICE9PSBmYWxzZVxuICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYuZ2V0KVxuICAgICAgOiBub29wO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSB1c2VyRGVmLnNldCB8fCBub29wO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID09PSBub29wKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wdXRlZEdldHRlciAoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgdmFyIHdhdGNoZXIgPSB0aGlzLl9jb21wdXRlZFdhdGNoZXJzICYmIHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNba2V5XTtcbiAgICBpZiAod2F0Y2hlcikge1xuICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdldHRlckludm9rZXIoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyICgpIHtcbiAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB0aGlzKVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRNZXRob2RzICh2bSwgbWV0aG9kcykge1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIG1ldGhvZHMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIHR5cGUgXFxcIlwiICsgKHR5cGVvZiBtZXRob2RzW2tleV0pICsgXCJcXFwiIGluIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbi4gXCIgK1xuICAgICAgICAgIFwiRGlkIHlvdSByZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseT9cIixcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIGEgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgoa2V5IGluIHZtKSAmJiBpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgVnVlIGluc3RhbmNlIG1ldGhvZC4gXCIgK1xuICAgICAgICAgIFwiQXZvaWQgZGVmaW5pbmcgY29tcG9uZW50IG1ldGhvZHMgdGhhdCBzdGFydCB3aXRoIF8gb3IgJC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2bVtrZXldID0gdHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJyA/IG5vb3AgOiBiaW5kKG1ldGhvZHNba2V5XSwgdm0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRXYXRjaCAodm0sIHdhdGNoKSB7XG4gIGZvciAodmFyIGtleSBpbiB3YXRjaCkge1xuICAgIHZhciBoYW5kbGVyID0gd2F0Y2hba2V5XTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcltpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIgKFxuICB2bSxcbiAgZXhwT3JGbixcbiAgaGFuZGxlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGlmIChpc1BsYWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgb3B0aW9ucyA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IGhhbmRsZXIuaGFuZGxlcjtcbiAgfVxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgaGFuZGxlciA9IHZtW2hhbmRsZXJdO1xuICB9XG4gIHJldHVybiB2bS4kd2F0Y2goZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucylcbn1cblxuZnVuY3Rpb24gc3RhdGVNaXhpbiAoVnVlKSB7XG4gIC8vIGZsb3cgc29tZWhvdyBoYXMgcHJvYmxlbXMgd2l0aCBkaXJlY3RseSBkZWNsYXJlZCBkZWZpbml0aW9uIG9iamVjdFxuICAvLyB3aGVuIHVzaW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgc28gd2UgaGF2ZSB0byBwcm9jZWR1cmFsbHkgYnVpbGQgdXBcbiAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICB2YXIgZGF0YURlZiA9IHt9O1xuICBkYXRhRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RhdGEgfTtcbiAgdmFyIHByb3BzRGVmID0ge307XG4gIHByb3BzRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Byb3BzIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGF0YURlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAnVXNlIG5lc3RlZCBkYXRhIHByb3BlcnRpZXMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gICAgcHJvcHNEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHByb3BzJywgcHJvcHNEZWYpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHNldCA9IHNldDtcbiAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHdhdGNoID0gZnVuY3Rpb24gKFxuICAgIGV4cE9yRm4sXG4gICAgY2IsXG4gICAgb3B0aW9uc1xuICApIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGNiKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKVxuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnVzZXIgPSB0cnVlO1xuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwodm0sIHdhdGNoZXIudmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIHZtLCAoXCJjYWxsYmFjayBmb3IgaW1tZWRpYXRlIHdhdGNoZXIgXFxcIlwiICsgKHdhdGNoZXIuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gdW53YXRjaEZuICgpIHtcbiAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkJDMgPSAwO1xuXG5mdW5jdGlvbiBpbml0TWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGEgdWlkXG4gICAgdm0uX3VpZCA9IHVpZCQzKys7XG5cbiAgICB2YXIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiICsgKHZtLl91aWQpO1xuICAgICAgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICB9XG5cbiAgICAvLyBhIGZsYWcgdG8gYXZvaWQgdGhpcyBiZWluZyBvYnNlcnZlZFxuICAgIHZtLl9pc1Z1ZSA9IHRydWU7XG4gICAgLy8gbWVyZ2Ugb3B0aW9uc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuX2lzQ29tcG9uZW50KSB7XG4gICAgICAvLyBvcHRpbWl6ZSBpbnRlcm5hbCBjb21wb25lbnQgaW5zdGFudGlhdGlvblxuICAgICAgLy8gc2luY2UgZHluYW1pYyBvcHRpb25zIG1lcmdpbmcgaXMgcHJldHR5IHNsb3csIGFuZCBub25lIG9mIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgY29tcG9uZW50IG9wdGlvbnMgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQuXG4gICAgICBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS4kb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyh2bS5jb25zdHJ1Y3RvciksXG4gICAgICAgIG9wdGlvbnMgfHwge30sXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpbml0UHJveHkodm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICB9XG4gICAgLy8gZXhwb3NlIHJlYWwgc2VsZlxuICAgIHZtLl9zZWxmID0gdm07XG4gICAgaW5pdExpZmVjeWNsZSh2bSk7XG4gICAgaW5pdEV2ZW50cyh2bSk7XG4gICAgaW5pdFJlbmRlcih2bSk7XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVDcmVhdGUnKTtcbiAgICBpbml0SW5qZWN0aW9ucyh2bSk7IC8vIHJlc29sdmUgaW5qZWN0aW9ucyBiZWZvcmUgZGF0YS9wcm9wc1xuICAgIGluaXRTdGF0ZSh2bSk7XG4gICAgaW5pdFByb3ZpZGUodm0pOyAvLyByZXNvbHZlIHByb3ZpZGUgYWZ0ZXIgZGF0YS9wcm9wc1xuICAgIGNhbGxIb29rKHZtLCAnY3JlYXRlZCcpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodm0uX25hbWUpICsgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4gICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdEludGVybmFsQ29tcG9uZW50ICh2bSwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKTtcbiAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG5cbiAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG5cbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlmIChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9ucykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9ucztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNcbiAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xuICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0KSB7XG4gICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgaWYgKCFtb2RpZmllZCkgeyBtb2RpZmllZCA9IHt9OyB9XG4gICAgICBtb2RpZmllZFtrZXldID0gbGF0ZXN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBtb2RpZmllZFxufVxuXG5mdW5jdGlvbiBWdWUgKG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAhKHRoaXMgaW5zdGFuY2VvZiBWdWUpXG4gICkge1xuICAgIHdhcm4oJ1Z1ZSBpcyBhIGNvbnN0cnVjdG9yIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGBuZXdgIGtleXdvcmQnKTtcbiAgfVxuICB0aGlzLl9pbml0KG9wdGlvbnMpO1xufVxuXG5pbml0TWl4aW4oVnVlKTtcbnN0YXRlTWl4aW4oVnVlKTtcbmV2ZW50c01peGluKFZ1ZSk7XG5saWZlY3ljbGVNaXhpbihWdWUpO1xucmVuZGVyTWl4aW4oVnVlKTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRVc2UgKFZ1ZSkge1xuICBWdWUudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIHZhciBpbnN0YWxsZWRQbHVnaW5zID0gKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgfHwgKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgPSBbXSkpO1xuICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmluZGV4T2YocGx1Z2luKSA+IC0xKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5pbnN0YWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwbHVnaW4uaW5zdGFsbC5hcHBseShwbHVnaW4sIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsdWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdE1peGluJDEgKFZ1ZSkge1xuICBWdWUubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFeHRlbmQgKFZ1ZSkge1xuICAvKipcbiAgICogRWFjaCBpbnN0YW5jZSBjb25zdHJ1Y3RvciwgaW5jbHVkaW5nIFZ1ZSwgaGFzIGEgdW5pcXVlXG4gICAqIGNpZC4gVGhpcyBlbmFibGVzIHVzIHRvIGNyZWF0ZSB3cmFwcGVkIFwiY2hpbGRcbiAgICogY29uc3RydWN0b3JzXCIgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UgYW5kIGNhY2hlIHRoZW0uXG4gICAqL1xuICBWdWUuY2lkID0gMDtcbiAgdmFyIGNpZCA9IDE7XG5cbiAgLyoqXG4gICAqIENsYXNzIGluaGVyaXRhbmNlXG4gICAqL1xuICBWdWUuZXh0ZW5kID0gZnVuY3Rpb24gKGV4dGVuZE9wdGlvbnMpIHtcbiAgICBleHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgU3VwZXIgPSB0aGlzO1xuICAgIHZhciBTdXBlcklkID0gU3VwZXIuY2lkO1xuICAgIHZhciBjYWNoZWRDdG9ycyA9IGV4dGVuZE9wdGlvbnMuX0N0b3IgfHwgKGV4dGVuZE9wdGlvbnMuX0N0b3IgPSB7fSk7XG4gICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XG4gICAgICByZXR1cm4gY2FjaGVkQ3RvcnNbU3VwZXJJZF1cbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IGV4dGVuZE9wdGlvbnMubmFtZSB8fCBTdXBlci5vcHRpb25zLm5hbWU7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSkge1xuICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgIGV4dGVuZE9wdGlvbnNcbiAgICApO1xuICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuXG4gICAgLy8gRm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgfVxuICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XG5cbiAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgIH0pO1xuICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBcbiAgICBpZiAobmFtZSkge1xuICAgICAgU3ViLm9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IFN1YjtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgLy8gYmVlbiB1cGRhdGVkLlxuICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xuXG4gICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICByZXR1cm4gU3ViXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyQxIChDb21wKSB7XG4gIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEgKENvbXApIHtcbiAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9kcy5cbiAgICovXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApIHtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IGRlZmluaXRpb24ubmFtZSB8fCBpZDtcbiAgICAgICAgICBkZWZpbml0aW9uID0gdGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChkZWZpbml0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uID0geyBiaW5kOiBkZWZpbml0aW9uLCB1cGRhdGU6IGRlZmluaXRpb24gfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25cbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lIChvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVzIChwYXR0ZXJuLCBuYW1lKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTFcbiAgfSBlbHNlIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZSAoa2VlcEFsaXZlSW5zdGFuY2UsIGZpbHRlcikge1xuICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZTtcbiAgdmFyIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzO1xuICB2YXIgX3Zub2RlID0ga2VlcEFsaXZlSW5zdGFuY2UuX3Zub2RlO1xuICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICB2YXIgY2FjaGVkTm9kZSA9IGNhY2hlW2tleV07XG4gICAgaWYgKGNhY2hlZE5vZGUpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjYWNoZWROb2RlLmNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgaWYgKG5hbWUgJiYgIWZpbHRlcihuYW1lKSkge1xuICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgX3Zub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5IChcbiAgY2FjaGUsXG4gIGtleSxcbiAga2V5cyxcbiAgY3VycmVudFxuKSB7XG4gIHZhciBjYWNoZWQkJDEgPSBjYWNoZVtrZXldO1xuICBpZiAoY2FjaGVkJCQxICYmICghY3VycmVudCB8fCBjYWNoZWQkJDEudGFnICE9PSBjdXJyZW50LnRhZykpIHtcbiAgICBjYWNoZWQkJDEuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgfVxuICBjYWNoZVtrZXldID0gbnVsbDtcbiAgcmVtb3ZlKGtleXMsIGtleSk7XG59XG5cbnZhciBwYXR0ZXJuVHlwZXMgPSBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XTtcblxudmFyIEtlZXBBbGl2ZSA9IHtcbiAgbmFtZTogJ2tlZXAtYWxpdmUnLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICBwcm9wczoge1xuICAgIGluY2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICBleGNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCAoKSB7XG4gICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5rZXlzID0gW107XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQgKCkge1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICBwcnVuZUNhY2hlRW50cnkodGhpcy5jYWNoZSwga2V5LCB0aGlzLmtleXMpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgIH0pO1xuICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoKSB7XG4gICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgIHZhciBpbmNsdWRlID0gcmVmLmluY2x1ZGU7XG4gICAgICB2YXIgZXhjbHVkZSA9IHJlZi5leGNsdWRlO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgKGluY2x1ZGUgJiYgKCFuYW1lIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWUpKSkgfHxcbiAgICAgICAgLy8gZXhjbHVkZWRcbiAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB2bm9kZVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVmJDEgPSB0aGlzO1xuICAgICAgdmFyIGNhY2hlID0gcmVmJDEuY2FjaGU7XG4gICAgICB2YXIga2V5cyA9IHJlZiQxLmtleXM7XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5ID09IG51bGxcbiAgICAgICAgLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICA/IGNvbXBvbmVudE9wdGlvbnMuQ3Rvci5jaWQgKyAoY29tcG9uZW50T3B0aW9ucy50YWcgPyAoXCI6OlwiICsgKGNvbXBvbmVudE9wdGlvbnMudGFnKSkgOiAnJylcbiAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNhY2hlW2tleV0uY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIC8vIG1ha2UgY3VycmVudCBrZXkgZnJlc2hlc3RcbiAgICAgICAgcmVtb3ZlKGtleXMsIGtleSk7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVba2V5XSA9IHZub2RlO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgLy8gcHJ1bmUgb2xkZXN0IGVudHJ5XG4gICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5c1swXSwga2V5cywgdGhpcy5fdm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pXG4gIH1cbn07XG5cbnZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgS2VlcEFsaXZlOiBLZWVwQWxpdmVcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0R2xvYmFsQVBJIChWdWUpIHtcbiAgLy8gY29uZmlnXG4gIHZhciBjb25maWdEZWYgPSB7fTtcbiAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdEZWYpO1xuXG4gIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxuICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgLy8gdGhlbSB1bmxlc3MgeW91IGFyZSBhd2FyZSBvZiB0aGUgcmlzay5cbiAgVnVlLnV0aWwgPSB7XG4gICAgd2Fybjogd2FybixcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFcbiAgfTtcblxuICBWdWUuc2V0ID0gc2V0O1xuICBWdWUuZGVsZXRlID0gZGVsO1xuICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcblxuICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcbiAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgb2JzZXJ2ZShvYmopO1xuICAgIHJldHVybiBvYmpcbiAgfTtcblxuICBWdWUub3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH0pO1xuXG4gIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcbiAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gIFZ1ZS5vcHRpb25zLl9iYXNlID0gVnVlO1xuXG4gIGV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBidWlsdEluQ29tcG9uZW50cyk7XG5cbiAgaW5pdFVzZShWdWUpO1xuICBpbml0TWl4aW4kMShWdWUpO1xuICBpbml0RXh0ZW5kKFZ1ZSk7XG4gIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHRcbiAgfVxufSk7XG5cbi8vIGV4cG9zZSBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCBmb3Igc3NyIHJ1bnRpbWUgaGVscGVyIGluc3RhbGxhdGlvblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ0Z1bmN0aW9uYWxSZW5kZXJDb250ZXh0Jywge1xuICB2YWx1ZTogRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcbn0pO1xuXG5WdWUudmVyc2lvbiA9ICcyLjYuMTAnO1xuXG4vKiAgKi9cblxuLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbnZhciBpc1Jlc2VydmVkQXR0ciA9IG1ha2VNYXAoJ3N0eWxlLGNsYXNzJyk7XG5cbi8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbnZhciBhY2NlcHRWYWx1ZSA9IG1ha2VNYXAoJ2lucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3MnKTtcbnZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgcmV0dXJuIChcbiAgICAoYXR0ciA9PT0gJ3ZhbHVlJyAmJiBhY2NlcHRWYWx1ZSh0YWcpKSAmJiB0eXBlICE9PSAnYnV0dG9uJyB8fFxuICAgIChhdHRyID09PSAnc2VsZWN0ZWQnICYmIHRhZyA9PT0gJ29wdGlvbicpIHx8XG4gICAgKGF0dHIgPT09ICdjaGVja2VkJyAmJiB0YWcgPT09ICdpbnB1dCcpIHx8XG4gICAgKGF0dHIgPT09ICdtdXRlZCcgJiYgdGFnID09PSAndmlkZW8nKVxuICApXG59O1xuXG52YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xuXG52YXIgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlID0gbWFrZU1hcCgnZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seScpO1xuXG52YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJ1xuICAgID8gJ2ZhbHNlJ1xuICAgIC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgIDoga2V5ID09PSAnY29udGVudGVkaXRhYmxlJyAmJiBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUodmFsdWUpXG4gICAgICA/IHZhbHVlXG4gICAgICA6ICd0cnVlJ1xufTtcblxudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKFxuICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgJ2RlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCwnICtcbiAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAncmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSwnICtcbiAgJ3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnXG4pO1xuXG52YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcblxudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAsIDUpID09PSAneGxpbmsnXG59O1xuXG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnXG59O1xuXG52YXIgaXNGYWxzeUF0dHJWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2Vcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgd2hpbGUgKGlzRGVmKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChpc0RlZihwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2xhc3NEYXRhIChjaGlsZCwgcGFyZW50KSB7XG4gIHJldHVybiB7XG4gICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICBjbGFzczogaXNEZWYoY2hpbGQuY2xhc3MpXG4gICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXVxuICAgICAgOiBwYXJlbnQuY2xhc3NcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJDbGFzcyAoXG4gIHN0YXRpY0NsYXNzLFxuICBkeW5hbWljQ2xhc3Ncbikge1xuICBpZiAoaXNEZWYoc3RhdGljQ2xhc3MpIHx8IGlzRGVmKGR5bmFtaWNDbGFzcykpIHtcbiAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjb25jYXQgKGEsIGIpIHtcbiAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3MgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSlcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgc3RyaW5naWZpZWQ7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGlzRGVmKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0pKSAmJiBzdHJpbmdpZmllZCAhPT0gJycpIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWVba2V5XSkge1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgbmFtZXNwYWNlTWFwID0ge1xuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcblxudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoXG4gICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbiwnICtcbiAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAncyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sJyArXG4gICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAnYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbiwnICtcbiAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICdjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290J1xuKTtcblxuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcChcbiAgJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgJ2ZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLCcgK1xuICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsXG4gIHRydWVcbik7XG5cbnZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKVxufTtcblxuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0YWcpIHtcbiAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICByZXR1cm4gJ3N2ZydcbiAgfVxuICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgLy8gbm90ZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3RoZXIgTWF0aE1MIGVsZW1lbnRzIGJlaW5nIGNvbXBvbmVudCByb290c1xuICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICByZXR1cm4gJ21hdGgnXG4gIH1cbn1cblxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCAodGFnKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWluQnJvd3Nlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXVxuICB9XG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50XG4gICAgKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwudG9TdHJpbmcoKSkpXG4gIH1cbn1cblxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qICAqL1xuXG4vKipcbiAqIFF1ZXJ5IGFuIGVsZW1lbnQgc2VsZWN0b3IgaWYgaXQncyBub3QgYW4gZWxlbWVudCBhbHJlYWR5LlxuICovXG5mdW5jdGlvbiBxdWVyeSAoZWwpIHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICdDYW5ub3QgZmluZCBlbGVtZW50OiAnICsgZWxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGVsXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQkMSAodGFnTmFtZSwgdm5vZGUpIHtcbiAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0YWdOYW1lICE9PSAnc2VsZWN0Jykge1xuICAgIHJldHVybiBlbG1cbiAgfVxuICAvLyBmYWxzZSBvciBudWxsIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgYnV0IHVuZGVmaW5lZCB3aWxsIG5vdFxuICBpZiAodm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMubXVsdGlwbGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsbS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJ211bHRpcGxlJyk7XG4gIH1cbiAgcmV0dXJuIGVsbVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMgKG5hbWVzcGFjZSwgdGFnTmFtZSkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSAodGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dClcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tbWVudCAodGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KVxufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUgKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQgKG5vZGUsIGNoaWxkKSB7XG4gIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuXG5mdW5jdGlvbiBwYXJlbnROb2RlIChub2RlKSB7XG4gIHJldHVybiBub2RlLnBhcmVudE5vZGVcbn1cblxuZnVuY3Rpb24gbmV4dFNpYmxpbmcgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmdcbn1cblxuZnVuY3Rpb24gdGFnTmFtZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS50YWdOYW1lXG59XG5cbmZ1bmN0aW9uIHNldFRleHRDb250ZW50IChub2RlLCB0ZXh0KSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufVxuXG5mdW5jdGlvbiBzZXRTdHlsZVNjb3BlIChub2RlLCBzY29wZUlkKSB7XG4gIG5vZGUuc2V0QXR0cmlidXRlKHNjb3BlSWQsICcnKTtcbn1cblxudmFyIG5vZGVPcHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQkMSxcbiAgY3JlYXRlRWxlbWVudE5TOiBjcmVhdGVFbGVtZW50TlMsXG4gIGNyZWF0ZVRleHROb2RlOiBjcmVhdGVUZXh0Tm9kZSxcbiAgY3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcbiAgaW5zZXJ0QmVmb3JlOiBpbnNlcnRCZWZvcmUsXG4gIHJlbW92ZUNoaWxkOiByZW1vdmVDaGlsZCxcbiAgYXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuICBwYXJlbnROb2RlOiBwYXJlbnROb2RlLFxuICBuZXh0U2libGluZzogbmV4dFNpYmxpbmcsXG4gIHRhZ05hbWU6IHRhZ05hbWUsXG4gIHNldFRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudCxcbiAgc2V0U3R5bGVTY29wZTogc2V0U3R5bGVTY29wZVxufSk7XG5cbi8qICAqL1xuXG52YXIgcmVmID0ge1xuICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSAoXywgdm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAob2xkVm5vZGUuZGF0YS5yZWYgIT09IHZub2RlLmRhdGEucmVmKSB7XG4gICAgICByZWdpc3RlclJlZihvbGRWbm9kZSwgdHJ1ZSk7XG4gICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgfVxuICB9LFxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgIHJlZ2lzdGVyUmVmKHZub2RlLCB0cnVlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJSZWYgKHZub2RlLCBpc1JlbW92YWwpIHtcbiAgdmFyIGtleSA9IHZub2RlLmRhdGEucmVmO1xuICBpZiAoIWlzRGVmKGtleSkpIHsgcmV0dXJuIH1cblxuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICB2YXIgcmVmID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxtO1xuICB2YXIgcmVmcyA9IHZtLiRyZWZzO1xuICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgcmVtb3ZlKHJlZnNba2V5XSwgcmVmKTtcbiAgICB9IGVsc2UgaWYgKHJlZnNba2V5XSA9PT0gcmVmKSB7XG4gICAgICByZWZzW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2bm9kZS5kYXRhLnJlZkluRm9yKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgICByZWZzW2tleV0gPSBbcmVmXTtcbiAgICAgIH0gZWxzZSBpZiAocmVmc1trZXldLmluZGV4T2YocmVmKSA8IDApIHtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHJlZnNba2V5XS5wdXNoKHJlZik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZnNba2V5XSA9IHJlZjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0gYmFzZWQgb24gU25hYmJkb20gYnlcbiAqIFNpbW9uIEZyaWlzIFZpbmR1bSAoQHBhbGRlcGluZClcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogbW9kaWZpZWQgYnkgRXZhbiBZb3UgKEB5eXg5OTA4MDMpXG4gKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBiZWNhdXNlIHRoaXMgZmlsZSBpcyBwZXJmLWNyaXRpY2FsIGFuZCB0aGUgY29zdFxuICogb2YgbWFraW5nIGZsb3cgdW5kZXJzdGFuZCBpdCBpcyBub3Qgd29ydGggaXQuXG4gKi9cblxudmFyIGVtcHR5Tm9kZSA9IG5ldyBWTm9kZSgnJywge30sIFtdKTtcblxudmFyIGhvb2tzID0gWydjcmVhdGUnLCAnYWN0aXZhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95J107XG5cbmZ1bmN0aW9uIHNhbWVWbm9kZSAoYSwgYikge1xuICByZXR1cm4gKFxuICAgIGEua2V5ID09PSBiLmtleSAmJiAoXG4gICAgICAoXG4gICAgICAgIGEudGFnID09PSBiLnRhZyAmJlxuICAgICAgICBhLmlzQ29tbWVudCA9PT0gYi5pc0NvbW1lbnQgJiZcbiAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxuICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpXG4gICAgICApIHx8IChcbiAgICAgICAgaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJlxuICAgICAgICBhLmFzeW5jRmFjdG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiZcbiAgICAgICAgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcilcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gc2FtZUlucHV0VHlwZSAoYSwgYikge1xuICBpZiAoYS50YWcgIT09ICdpbnB1dCcpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaTtcbiAgdmFyIHR5cGVBID0gaXNEZWYoaSA9IGEuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgdmFyIHR5cGVCID0gaXNEZWYoaSA9IGIuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCBpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQilcbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHggKGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gIHZhciBpLCBrZXk7XG4gIHZhciBtYXAgPSB7fTtcbiAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgaWYgKGlzRGVmKGtleSkpIHsgbWFwW2tleV0gPSBpOyB9XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uIChiYWNrZW5kKSB7XG4gIHZhciBpLCBqO1xuICB2YXIgY2JzID0ge307XG5cbiAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXM7XG4gIHZhciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9va3NbaV1dKSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tpXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0pIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSbUNiIChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgZnVuY3Rpb24gcmVtb3ZlJCQxICgpIHtcbiAgICAgIGlmICgtLXJlbW92ZSQkMS5saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbW92ZSQkMS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgcmV0dXJuIHJlbW92ZSQkMVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlTm9kZSAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcbiAgICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwgLyB2LXRleHRcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50JCQxICh2bm9kZSwgaW5WUHJlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICFpblZQcmUgJiZcbiAgICAgICF2bm9kZS5ucyAmJlxuICAgICAgIShcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChpZ25vcmUpIHtcbiAgICAgICAgICByZXR1cm4gaXNSZWdFeHAoaWdub3JlKVxuICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICA6IGlnbm9yZSA9PT0gdm5vZGUudGFnXG4gICAgICAgIH0pXG4gICAgICApICYmXG4gICAgICBjb25maWcuaXNVbmtub3duRWxlbWVudCh2bm9kZS50YWcpXG4gICAgKVxuICB9XG5cbiAgdmFyIGNyZWF0aW5nRWxtSW5WUHJlID0gMDtcblxuICBmdW5jdGlvbiBjcmVhdGVFbG0gKFxuICAgIHZub2RlLFxuICAgIGluc2VydGVkVm5vZGVRdWV1ZSxcbiAgICBwYXJlbnRFbG0sXG4gICAgcmVmRWxtLFxuICAgIG5lc3RlZCxcbiAgICBvd25lckFycmF5LFxuICAgIGluZGV4XG4gICkge1xuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgLy8gbm93IGl0J3MgdXNlZCBhcyBhIG5ldyBub2RlLCBvdmVyd3JpdGluZyBpdHMgZWxtIHdvdWxkIGNhdXNlXG4gICAgICAvLyBwb3RlbnRpYWwgcGF0Y2ggZXJyb3JzIGRvd24gdGhlIHJvYWQgd2hlbiBpdCdzIHVzZWQgYXMgYW4gaW5zZXJ0aW9uXG4gICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgLy8gYXNzb2NpYXRlZCBET00gZWxlbWVudCBmb3IgaXQuXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdm5vZGUuaXNSb290SW5zZXJ0ID0gIW5lc3RlZDsgLy8gZm9yIHRyYW5zaXRpb24gZW50ZXIgY2hlY2tcbiAgICBpZiAoY3JlYXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgICdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArIHRhZyArICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgaWYgKGlzRGVmKGkgPSBpLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7XG4gICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLyk7XG4gICAgICB9XG4gICAgICAvLyBhZnRlciBjYWxsaW5nIHRoZSBpbml0IGhvb2ssIGlmIHRoZSB2bm9kZSBpcyBhIGNoaWxkIGNvbXBvbmVudFxuICAgICAgLy8gaXQgc2hvdWxkJ3ZlIGNyZWF0ZWQgYSBjaGlsZCBpbnN0YW5jZSBhbmQgbW91bnRlZCBpdC4gdGhlIGNoaWxkXG4gICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIGVsZW1lbnQgYW5kIGJlIGRvbmUuXG4gICAgICBpZiAoaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgaWYgKGlzVHJ1ZShpc1JlYWN0aXZhdGVkKSkge1xuICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGlmIChpc0RlZih2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpKSB7XG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaC5hcHBseShpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCk7XG4gICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgIH1cbiAgICB2bm9kZS5lbG0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS4kZWw7XG4gICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICBzZXRTY29wZSh2bm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVtcHR5IGNvbXBvbmVudCByb290LlxuICAgICAgLy8gc2tpcCBhbGwgZWxlbWVudC1yZWxhdGVkIG1vZHVsZXMgZXhjZXB0IGZvciByZWYgKCMzNDU1KVxuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgLy8gbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgaW5zZXJ0IGhvb2tcbiAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFjdGl2YXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpO1xuICAgIC8vIGhhY2sgZm9yICM0MzM5OiBhIHJlYWN0aXZhdGVkIGNvbXBvbmVudCB3aXRoIGlubmVyIHRyYW5zaXRpb25cbiAgICAvLyBkb2VzIG5vdCB0cmlnZ2VyIGJlY2F1c2UgdGhlIGlubmVyIG5vZGUncyBjcmVhdGVkIGhvb2tzIGFyZSBub3QgY2FsbGVkXG4gICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgLy8gdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgYmV0dGVyIHdheSB0byBkbyBpdC5cbiAgICB2YXIgaW5uZXJOb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgaW5uZXJOb2RlID0gaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChpc0RlZihpID0gaW5uZXJOb2RlLmRhdGEpICYmIGlzRGVmKGkgPSBpLnRyYW5zaXRpb24pKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBjYnMuYWN0aXZhdGVbaV0oZW1wdHlOb2RlLCBpbm5lck5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKGlubmVyTm9kZSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVubGlrZSBhIG5ld2x5IGNyZWF0ZWQgY29tcG9uZW50LFxuICAgIC8vIGEgcmVhY3RpdmF0ZWQga2VlcC1hbGl2ZSBjb21wb25lbnQgZG9lc24ndCBpbnNlcnQgaXRzZWxmXG4gICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0IChwYXJlbnQsIGVsbSwgcmVmJCQxKSB7XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIGlmIChpc0RlZihyZWYkJDEpKSB7XG4gICAgICAgIGlmIChub2RlT3BzLnBhcmVudE5vZGUocmVmJCQxKSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50LCBlbG0sIHJlZiQkMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQocGFyZW50LCBlbG0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkcmVuICh2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2ldLCBpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmVsbSwgbnVsbCwgdHJ1ZSwgY2hpbGRyZW4sIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKFN0cmluZyh2bm9kZS50ZXh0KSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF0Y2hhYmxlICh2bm9kZSkge1xuICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgfVxuICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VDcmVhdGVIb29rcyAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgaWYgKGlzRGVmKGkuY3JlYXRlKSkgeyBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAgICB9XG4gIH1cblxuICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIHRoZSBvdmVyaGVhZFxuICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgIHZhciBpO1xuICAgIGlmIChpc0RlZihpID0gdm5vZGUuZm5TY29wZUlkKSkge1xuICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gYW5jZXN0b3IuY29udGV4dCkgJiYgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSB7XG4gICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGZvciBzbG90IGNvbnRlbnQgdGhleSBzaG91bGQgYWxzbyBnZXQgdGhlIHNjb3BlSWQgZnJvbSB0aGUgaG9zdCBpbnN0YW5jZS5cbiAgICBpZiAoaXNEZWYoaSA9IGFjdGl2ZUluc3RhbmNlKSAmJlxuICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgaSAhPT0gdm5vZGUuZm5Db250ZXh0ICYmXG4gICAgICBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZClcbiAgICApIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFZub2RlcyAocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAodm5vZGUpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuZGVzdHJveSkpIHsgaSh2bm9kZSk7IH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkgeyBjYnMuZGVzdHJveVtpXSh2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzIChwYXJlbnRFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICB9IGVsc2UgeyAvLyBUZXh0IG5vZGVcbiAgICAgICAgICByZW1vdmVOb2RlKGNoLmVsbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rICh2bm9kZSwgcm0pIHtcbiAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCArIDE7XG4gICAgICBpZiAoaXNEZWYocm0pKSB7XG4gICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGlzdGVuZXJzIGNvdW50XG4gICAgICAgIHJtLmxpc3RlbmVycyArPSBsaXN0ZW5lcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkaXJlY3RseSByZW1vdmluZ1xuICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgICAgLy8gcmVjdXJzaXZlbHkgaW52b2tlIGhvb2tzIG9uIGNoaWxkIGNvbXBvbmVudCByb290IG5vZGVcbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGlzRGVmKGkgPSBpLl92bm9kZSkgJiYgaXNEZWYoaS5kYXRhKSkge1xuICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGksIHJtKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNicy5yZW1vdmVbaV0odm5vZGUsIHJtKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5yZW1vdmUpKSB7XG4gICAgICAgIGkodm5vZGUsIHJtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU5vZGUodm5vZGUuZWxtKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbiAocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSkge1xuICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgdmFyIG5ld1N0YXJ0SWR4ID0gMDtcbiAgICB2YXIgb2xkRW5kSWR4ID0gb2xkQ2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgIHZhciBvbGRFbmRWbm9kZSA9IG9sZENoW29sZEVuZElkeF07XG4gICAgdmFyIG5ld0VuZElkeCA9IG5ld0NoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICB2YXIgbmV3RW5kVm5vZGUgPSBuZXdDaFtuZXdFbmRJZHhdO1xuICAgIHZhciBvbGRLZXlUb0lkeCwgaWR4SW5PbGQsIHZub2RlVG9Nb3ZlLCByZWZFbG07XG5cbiAgICAvLyByZW1vdmVPbmx5IGlzIGEgc3BlY2lhbCBmbGFnIHVzZWQgb25seSBieSA8dHJhbnNpdGlvbi1ncm91cD5cbiAgICAvLyB0byBlbnN1cmUgcmVtb3ZlZCBlbGVtZW50cyBzdGF5IGluIGNvcnJlY3QgcmVsYXRpdmUgcG9zaXRpb25zXG4gICAgLy8gZHVyaW5nIGxlYXZpbmcgdHJhbnNpdGlvbnNcbiAgICB2YXIgY2FuTW92ZSA9ICFyZW1vdmVPbmx5O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhuZXdDaCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTsgLy8gVm5vZGUgaGFzIGJlZW4gbW92ZWQgbGVmdFxuICAgICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZEVuZFZub2RlKSkge1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCByaWdodFxuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRW5kVm5vZGUuZWxtKSk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgbGVmdFxuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRFbmRWbm9kZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1VuZGVmKG9sZEtleVRvSWR4KSkgeyBvbGRLZXlUb0lkeCA9IGNyZWF0ZUtleVRvT2xkSWR4KG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTsgfVxuICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxuICAgICAgICAgID8gb2xkS2V5VG9JZHhbbmV3U3RhcnRWbm9kZS5rZXldXG4gICAgICAgICAgOiBmaW5kSWR4SW5PbGQobmV3U3RhcnRWbm9kZSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICBpZiAoaXNVbmRlZihpZHhJbk9sZCkpIHsgLy8gTmV3IGVsZW1lbnRcbiAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2bm9kZVRvTW92ZSA9IG9sZENoW2lkeEluT2xkXTtcbiAgICAgICAgICBpZiAoc2FtZVZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgcGF0Y2hWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIHZub2RlVG9Nb3ZlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzYW1lIGtleSBidXQgZGlmZmVyZW50IGVsZW1lbnQuIHRyZWF0IGFzIG5ldyBlbGVtZW50XG4gICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2xkU3RhcnRJZHggPiBvbGRFbmRJZHgpIHtcbiAgICAgIHJlZkVsbSA9IGlzVW5kZWYobmV3Q2hbbmV3RW5kSWR4ICsgMV0pID8gbnVsbCA6IG5ld0NoW25ld0VuZElkeCArIDFdLmVsbTtcbiAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIGlmIChuZXdTdGFydElkeCA+IG5ld0VuZElkeCkge1xuICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlS2V5cyAoY2hpbGRyZW4pIHtcbiAgICB2YXIgc2VlbktleXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdm5vZGUgPSBjaGlsZHJlbltpXTtcbiAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXk7XG4gICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICBpZiAoc2VlbktleXNba2V5XSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAoXCJEdXBsaWNhdGUga2V5cyBkZXRlY3RlZDogJ1wiICsga2V5ICsgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VlbktleXNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQgKG5vZGUsIG9sZENoLCBzdGFydCwgZW5kKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHZhciBjID0gb2xkQ2hbaV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgc2FtZVZub2RlKG5vZGUsIGMpKSB7IHJldHVybiBpIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaFZub2RlIChcbiAgICBvbGRWbm9kZSxcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleCxcbiAgICByZW1vdmVPbmx5XG4gICkge1xuICAgIGlmIChvbGRWbm9kZSA9PT0gdm5vZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBjbG9uZSByZXVzZWQgdm5vZGVcbiAgICAgIHZub2RlID0gb3duZXJBcnJheVtpbmRleF0gPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgLVxuICAgIC8vIGlmIHRoZSBuZXcgbm9kZSBpcyBub3QgY2xvbmVkIGl0IG1lYW5zIHRoZSByZW5kZXIgZnVuY3Rpb25zIGhhdmUgYmVlblxuICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIGlzVHJ1ZShvbGRWbm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSlcbiAgICApIHtcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnByZXBhdGNoKSkge1xuICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBvbGRDaCA9IG9sZFZub2RlLmNoaWxkcmVuO1xuICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKSB7IGNicy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAob2xkQ2ggIT09IGNoKSB7IHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpOyB9XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7IG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7IH1cbiAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICByZW1vdmVWbm9kZXMoZWxtLCBvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgfVxuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnBvc3RwYXRjaCkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlSW5zZXJ0SG9vayAodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgLy8gZWxlbWVudCBpcyByZWFsbHkgaW5zZXJ0ZWRcbiAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBxdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaHlkcmF0aW9uQmFpbGVkID0gZmFsc2U7XG4gIC8vIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB0aGV5XG4gIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5vIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gIC8vIE5vdGU6IHN0eWxlIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGluaXRpYWwgY2xvbmUgZm9yIGZ1dHVyZVxuICAvLyBkZWVwIHVwZGF0ZXMgKCM3MDYzKS5cbiAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAvLyBOb3RlOiB0aGlzIGlzIGEgYnJvd3Nlci1vbmx5IGZ1bmN0aW9uIHNvIHdlIGNhbiBhc3N1bWUgZWxtcyBhcmUgRE9NIG5vZGVzLlxuICBmdW5jdGlvbiBoeWRyYXRlIChlbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkge1xuICAgIHZhciBpO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGluVlByZSA9IGluVlByZSB8fCAoZGF0YSAmJiBkYXRhLnByZSk7XG4gICAgdm5vZGUuZWxtID0gZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBhc3NlcnQgbm9kZSBtYXRjaFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgaWYgKGlzRGVmKGNoaWxkcmVuKSkge1xuICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHYtaHRtbCBhbmQgZG9tUHJvcHM6IGlubmVySFRNTFxuICAgICAgICAgIGlmIChpc0RlZihpID0gZGF0YSkgJiYgaXNEZWYoaSA9IGkuZG9tUHJvcHMpICYmIGlzRGVmKGkgPSBpLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICFoeWRyYXRpb25CYWlsZWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3NlcnZlciBpbm5lckhUTUw6ICcsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignY2xpZW50IGlubmVySFRNTDogJywgZWxtLmlubmVySFRNTCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYW5kIGNvbXBhcmUgY2hpbGRyZW4gbGlzdHNcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbk1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBlbG0uZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNoaWxkcmVuLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHwgIWh5ZHJhdGUoY2hpbGROb2RlLCBjaGlsZHJlbltpJDFdLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbk1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAgICAvLyBsb25nZXIgdGhhbiB0aGUgdmlydHVhbCBjaGlsZHJlbiBsaXN0LlxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbk1hdGNoIHx8IGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNtYXRjaGluZyBjaGlsZE5vZGVzIHZzLiBWTm9kZXM6ICcsIGVsbS5jaGlsZE5vZGVzLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgdmFyIGZ1bGxJbnZva2UgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICBpZiAoIWlzUmVuZGVyZWRNb2R1bGUoa2V5KSkge1xuICAgICAgICAgICAgZnVsbEludm9rZSA9IHRydWU7XG4gICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZnVsbEludm9rZSAmJiBkYXRhWydjbGFzcyddKSB7XG4gICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICB0cmF2ZXJzZShkYXRhWydjbGFzcyddKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZWxtLmRhdGEgIT09IHZub2RlLnRleHQpIHtcbiAgICAgIGVsbS5kYXRhID0gdm5vZGUudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaCAobm9kZSwgdm5vZGUsIGluVlByZSkge1xuICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XG4gICAgICByZXR1cm4gdm5vZGUudGFnLmluZGV4T2YoJ3Z1ZS1jb21wb25lbnQnKSA9PT0gMCB8fCAoXG4gICAgICAgICFpc1Vua25vd25FbGVtZW50JCQxKHZub2RlLCBpblZQcmUpICYmXG4gICAgICAgIHZub2RlLnRhZy50b0xvd2VyQ2FzZSgpID09PSAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gKHZub2RlLmlzQ29tbWVudCA/IDggOiAzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBwYXRjaCAob2xkVm5vZGUsIHZub2RlLCBoeWRyYXRpbmcsIHJlbW92ZU9ubHkpIHtcbiAgICBpZiAoaXNVbmRlZih2bm9kZSkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkpIHsgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgaW5zZXJ0ZWRWbm9kZVF1ZXVlID0gW107XG5cbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZSkpIHtcbiAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAgICAgIGlzSW5pdGlhbFBhdGNoID0gdHJ1ZTtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGlzUmVhbEVsZW1lbnQgPSBpc0RlZihvbGRWbm9kZS5ub2RlVHlwZSk7XG4gICAgICBpZiAoIWlzUmVhbEVsZW1lbnQgJiYgc2FtZVZub2RlKG9sZFZub2RlLCB2bm9kZSkpIHtcbiAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG51bGwsIG51bGwsIHJlbW92ZU9ubHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBtb3VudGluZyB0byBhIHJlYWwgZWxlbWVudFxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQgYW5kIGlmIHdlIGNhbiBwZXJmb3JtXG4gICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICBpZiAob2xkVm5vZGUubm9kZVR5cGUgPT09IDEgJiYgb2xkVm5vZGUuaGFzQXR0cmlidXRlKFNTUl9BVFRSKSkge1xuICAgICAgICAgICAgb2xkVm5vZGUucmVtb3ZlQXR0cmlidXRlKFNTUl9BVFRSKTtcbiAgICAgICAgICAgIGh5ZHJhdGluZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1RydWUoaHlkcmF0aW5nKSkge1xuICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRWbm9kZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBpbmNvcnJlY3QgJyArXG4gICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICdmdWxsIGNsaWVudC1zaWRlIHJlbmRlci4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICB2YXIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICB2YXIgcGFyZW50RWxtID0gbm9kZU9wcy5wYXJlbnROb2RlKG9sZEVsbSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgIGNyZWF0ZUVsbShcbiAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sXG4gICAgICAgICAgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgaW5zZXJ0LmZucy5sZW5ndGg7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSkpIHtcbiAgICAgICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBbb2xkVm5vZGVdLCAwLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50YWcpKSB7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpc0luaXRpYWxQYXRjaCk7XG4gICAgcmV0dXJuIHZub2RlLmVsbVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgZGlyZWN0aXZlcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICB1cGRhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXMgKHZub2RlKSB7XG4gICAgdXBkYXRlRGlyZWN0aXZlcyh2bm9kZSwgZW1wdHlOb2RlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdXBkYXRlRGlyZWN0aXZlcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMgfHwgdm5vZGUuZGF0YS5kaXJlY3RpdmVzKSB7XG4gICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF91cGRhdGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgaXNDcmVhdGUgPSBvbGRWbm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgdmFyIG5ld0RpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEodm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcblxuICB2YXIgZGlyc1dpdGhJbnNlcnQgPSBbXTtcbiAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG5cbiAgdmFyIGtleSwgb2xkRGlyLCBkaXI7XG4gIGZvciAoa2V5IGluIG5ld0RpcnMpIHtcbiAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgZGlyID0gbmV3RGlyc1trZXldO1xuICAgIGlmICghb2xkRGlyKSB7XG4gICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICBjYWxsSG9vayQxKGRpciwgJ2JpbmQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5pbnNlcnRlZCkge1xuICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICBkaXIub2xkVmFsdWUgPSBvbGREaXIudmFsdWU7XG4gICAgICBkaXIub2xkQXJnID0gb2xkRGlyLmFyZztcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICBkaXJzV2l0aFBvc3RwYXRjaC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGNhbGxJbnNlcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgZm9yIChrZXkgaW4gb2xkRGlycykge1xuICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgLy8gbm8gbG9uZ2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICBjYWxsSG9vayQxKG9sZERpcnNba2V5XSwgJ3VuYmluZCcsIG9sZFZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxIChcbiAgZGlycyxcbiAgdm1cbikge1xuICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCFkaXJzKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIHZhciBpLCBkaXI7XG4gIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZGlyLm1vZGlmaWVycyA9IGVtcHR5TW9kaWZpZXJzO1xuICAgIH1cbiAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIpXSA9IGRpcjtcbiAgICBkaXIuZGVmID0gcmVzb2x2ZUFzc2V0KHZtLiRvcHRpb25zLCAnZGlyZWN0aXZlcycsIGRpci5uYW1lLCB0cnVlKTtcbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgcmV0dXJuIGRpci5yYXdOYW1lIHx8ICgoZGlyLm5hbWUpICsgXCIuXCIgKyAoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSkuam9pbignLicpKSlcbn1cblxuZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9va107XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBcIiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGJhc2VNb2R1bGVzID0gW1xuICByZWYsXG4gIGRpcmVjdGl2ZXNcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIHZhciBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSkge1xuICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0cnMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIpO1xuICAgIH1cbiAgfVxuICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcbiAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xuICB9XG4gIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgIC8vIHNldCBhdHRyaWJ1dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgLy8gZS5nLiA8b3B0aW9uIGRpc2FibGVkPlNlbGVjdCBvbmU8L29wdGlvbj5cbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCdcbiAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgOiBrZXk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2VTZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICAvLyAjNzEzODogSUUxMCAmIDExIGZpcmVzIGlucHV0IGV2ZW50IHdoZW4gc2V0dGluZyBwbGFjZWhvbGRlciBvblxuICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAvLyBpbW1lZGlhdGVseS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoXG4gICAgICBpc0lFICYmICFpc0lFOSAmJlxuICAgICAgZWwudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJlxuICAgICAga2V5ID09PSAncGxhY2Vob2xkZXInICYmIHZhbHVlICE9PSAnJyAmJiAhZWwuX19pZXBoXG4gICAgKSB7XG4gICAgICB2YXIgYmxvY2tlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICB9O1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZWwuX19pZXBoID0gdHJ1ZTsgLyogSUUgcGxhY2Vob2xkZXIgcGF0Y2hlZCAqL1xuICAgIH1cbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxudmFyIGF0dHJzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICB1cGRhdGU6IHVwZGF0ZUF0dHJzXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICBpZiAoXG4gICAgaXNVbmRlZihkYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgaXNVbmRlZihvbGREYXRhKSB8fCAoXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgLy8gaGFuZGxlIHRyYW5zaXRpb24gY2xhc3Nlc1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBjbGFzc1xuICBpZiAoY2xzICE9PSBlbC5fcHJldkNsYXNzKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgfVxufVxuXG52YXIga2xhc3MgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQ2xhc3MsXG4gIHVwZGF0ZTogdXBkYXRlQ2xhc3Ncbn07XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXG4vLyBzbyB3ZSB1c2VkIHNvbWUgcmVzZXJ2ZWQgdG9rZW5zIGR1cmluZyBjb21waWxlLlxudmFyIFJBTkdFX1RPS0VOID0gJ19fcic7XG52YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcblxuLyogICovXG5cbi8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbi8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2Vcbi8vIHRoZSB3aG9sZSBwb2ludCBpcyBlbnN1cmluZyB0aGUgdi1tb2RlbCBjYWxsYmFjayBnZXRzIGNhbGxlZCBiZWZvcmVcbi8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudHMgKG9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgIC8vIElFIGlucHV0W3R5cGU9cmFuZ2VdIG9ubHkgc3VwcG9ydHMgYGNoYW5nZWAgZXZlbnRcbiAgICB2YXIgZXZlbnQgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW1JBTkdFX1RPS0VOXTtcbiAgfVxuICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAvLyBhZnRlciAyLjUuIEtlZXBpbmcgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBnZW5lcmF0ZWQgY29kZSBmcm9tIDwgMi40XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0JDE7XG5cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEgKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlciAoKSB7XG4gICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICByZW1vdmUkMihldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xuLy8gc2FmZSB0byBleGNsdWRlLlxudmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5cbmZ1bmN0aW9uIGFkZCQxIChcbiAgbmFtZSxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgcGFzc2l2ZVxuKSB7XG4gIC8vIGFzeW5jIGVkZ2UgY2FzZSAjNjU2NjogaW5uZXIgY2xpY2sgZXZlbnQgdHJpZ2dlcnMgcGF0Y2gsIGV2ZW50IGhhbmRsZXJcbiAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gIC8vIHRoZSBzb2x1dGlvbiBpcyBzaW1wbGU6IHdlIHNhdmUgdGhlIHRpbWVzdGFtcCB3aGVuIGEgaGFuZGxlciBpcyBhdHRhY2hlZCxcbiAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gIGlmICh1c2VNaWNyb3Rhc2tGaXgpIHtcbiAgICB2YXIgYXR0YWNoZWRUaW1lc3RhbXAgPSBjdXJyZW50Rmx1c2hUaW1lc3RhbXA7XG4gICAgdmFyIG9yaWdpbmFsID0gaGFuZGxlcjtcbiAgICBoYW5kbGVyID0gb3JpZ2luYWwuX3dyYXBwZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAvLyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgbmV0IGluIGNhc2UgZXZlbnQudGltZVN0YW1wIGlzIHVucmVsaWFibGUgaW5cbiAgICAgICAgLy8gY2VydGFpbiB3ZWlyZCBlbnZpcm9ubWVudHMuLi5cbiAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAvLyBldmVudCBpcyBmaXJlZCBhZnRlciBoYW5kbGVyIGF0dGFjaG1lbnRcbiAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXAgfHxcbiAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgIC8vICM5NDYyIGlPUyA5IGJ1ZzogZXZlbnQudGltZVN0YW1wIGlzIDAgYWZ0ZXIgaGlzdG9yeS5wdXNoU3RhdGVcbiAgICAgICAgLy8gIzk2ODEgUXRXZWJFbmdpbmUgZXZlbnQudGltZVN0YW1wIGlzIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgLy8gIzk0NDggYmFpbCBpZiBldmVudCBpcyBmaXJlZCBpbiBhbm90aGVyIGRvY3VtZW50IGluIGEgbXVsdGktcGFnZVxuICAgICAgICAvLyBlbGVjdHJvbi9udy5qcyBhcHAsIHNpbmNlIGV2ZW50LnRpbWVTdGFtcCB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50XG4gICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICBlLnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlcixcbiAgICBzdXBwb3J0c1Bhc3NpdmVcbiAgICAgID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH1cbiAgICAgIDogY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmUkMiAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIF90YXJnZXRcbikge1xuICAoX3RhcmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIuX3dyYXBwZXIgfHwgaGFuZGxlcixcbiAgICBjYXB0dXJlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICB0YXJnZXQkMSA9IHZub2RlLmVsbTtcbiAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgdXBkYXRlTGlzdGVuZXJzKG9uLCBvbGRPbiwgYWRkJDEsIHJlbW92ZSQyLCBjcmVhdGVPbmNlSGFuZGxlciQxLCB2bm9kZS5jb250ZXh0KTtcbiAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG59XG5cbnZhciBldmVudHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICB1cGRhdGU6IHVwZGF0ZURPTUxpc3RlbmVyc1xufTtcblxuLyogICovXG5cbnZhciBzdmdDb250YWluZXI7XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1cjtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihwcm9wcy5fX29iX18pKSB7XG4gICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgIGVsbVtrZXldID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgIC8vIGFzIHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92YWwgZXJyb3JzXG4gICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGlmICh2bm9kZS5jaGlsZHJlbikgeyB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwOyB9XG4gICAgICBpZiAoY3VyID09PSBvbGRQcm9wc1trZXldKSB7IGNvbnRpbnVlIH1cbiAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlIHByb3BlcnR5XG4gICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcbiAgICAgIC8vIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWRcbiAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFsdWUgaXMgdGhlIHNhbWVcbiAgICAgIHZhciBzdHJDdXIgPSBpc1VuZGVmKGN1cikgPyAnJyA6IFN0cmluZyhjdXIpO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICBlbG0udmFsdWUgPSBzdHJDdXI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmIGlzU1ZHKGVsbS50YWdOYW1lKSAmJiBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJIVE1MIGZvciBTVkcgZWxlbWVudHNcbiAgICAgIHN2Z0NvbnRhaW5lciA9IHN2Z0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIgKyBjdXIgKyBcIjwvc3ZnPlwiO1xuICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoc3ZnLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XG4gICAgICAvLyBvdXQgb2Ygc3luYyB3aXRoIFZET00gc3RhdGUgZHVlIHRvIGZvY3VzLCBjb21wb3NpdGlvbiBhbmQgbW9kaWZpZXJzLlxuICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNhcnJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICBjdXIgIT09IG9sZFByb3BzW2tleV1cbiAgICApIHtcbiAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cbn1cblxuLy8gY2hlY2sgcGxhdGZvcm1zL3dlYi91dGlsL2F0dHJzLmpzIGFjY2VwdFZhbHVlXG5cblxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUgKGVsbSwgY2hlY2tWYWwpIHtcbiAgcmV0dXJuICghZWxtLmNvbXBvc2luZyAmJiAoXG4gICAgZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIGNoZWNrVmFsKVxuICApKVxufVxuXG5mdW5jdGlvbiBpc05vdEluRm9jdXNBbmREaXJ0eSAoZWxtLCBjaGVja1ZhbCkge1xuICAvLyByZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBhbmQgaXRzIHZhbHVlIGlzXG4gIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICB2YXIgbm90SW5Gb2N1cyA9IHRydWU7XG4gIC8vICM2MTU3XG4gIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICB0cnkgeyBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtOyB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsXG59XG5cbmZ1bmN0aW9uIGlzRGlydHlXaXRoTW9kaWZpZXJzIChlbG0sIG5ld1ZhbCkge1xuICB2YXIgdmFsdWUgPSBlbG0udmFsdWU7XG4gIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xuICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XG4gICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgfVxuICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxufVxuXG52YXIgZG9tUHJvcHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbn07XG5cbi8qICAqL1xuXG52YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB2YXIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICB0bXAubGVuZ3RoID4gMSAmJiAocmVzW3RtcFswXS50cmltKCldID0gdG1wWzFdLnRyaW0oKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8vIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBzdHlsZSBkYXRhIG9uIHRoZSBzYW1lIHZub2RlXG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZURhdGEgKGRhdGEpIHtcbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAvLyBzdGF0aWMgc3R5bGUgaXMgcHJlLXByb2Nlc3NlZCBpbnRvIGFuIG9iamVjdCBkdXJpbmcgY29tcGlsYXRpb25cbiAgLy8gYW5kIGlzIGFsd2F5cyBhIGZyZXNoIG9iamVjdCwgc28gaXQncyBzYWZlIHRvIG1lcmdlIGludG8gaXRcbiAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGVcbiAgICA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSlcbiAgICA6IHN0eWxlXG59XG5cbi8vIG5vcm1hbGl6ZSBwb3NzaWJsZSBhcnJheSAvIHN0cmluZyB2YWx1ZXMgaW50byBPYmplY3RcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyAoYmluZGluZ1N0eWxlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICByZXR1cm4gdG9PYmplY3QoYmluZGluZ1N0eWxlKVxuICB9XG4gIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXJzZVN0eWxlVGV4dChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgcmV0dXJuIGJpbmRpbmdTdHlsZVxufVxuXG4vKipcbiAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAqIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCdzIHN0eWxlIGNvdWxkIG92ZXJyaWRlIGl0XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlICh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBzdHlsZURhdGE7XG5cbiAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhICYmXG4gICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKVxuICAgICAgKSB7XG4gICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUobmFtZSksIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG59O1xuXG52YXIgdmVuZG9yTmFtZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcblxudmFyIGVtcHR5U3R5bGU7XG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gIGVtcHR5U3R5bGUgPSBlbXB0eVN0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgIHJldHVybiBwcm9wXG4gIH1cbiAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gdmVuZG9yTmFtZXNbaV0gKyBjYXBOYW1lO1xuICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuICB9XG59KTtcblxuZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcblxuICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGN1ciwgbmFtZTtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcblxuICAvLyBpZiBzdGF0aWMgc3R5bGUgZXhpc3RzLCBzdHlsZWJpbmRpbmcgYWxyZWFkeSBtZXJnZWQgaW50byBpdCB3aGVuIGRvaW5nIG5vcm1hbGl6ZVN0eWxlRGF0YVxuICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuXG4gIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAvLyB0byBtdXRhdGUgaXQuXG4gIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKVxuICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICA6IHN0eWxlO1xuXG4gIHZhciBuZXdTdHlsZSA9IGdldFN0eWxlKHZub2RlLCB0cnVlKTtcblxuICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG5ld1N0eWxlKSB7XG4gICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgaWYgKGN1ciAhPT0gb2xkU3R5bGVbbmFtZV0pIHtcbiAgICAgIC8vIGllOSBzZXR0aW5nIHRvIG51bGwgaGFzIG5vIGVmZmVjdCwgbXVzdCB1c2UgZW1wdHkgc3RyaW5nXG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHN0eWxlID0ge1xuICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG59O1xuXG4vKiAgKi9cblxudmFyIHdoaXRlc3BhY2VSRSA9IC9cXHMrLztcblxuLyoqXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiBhZGRDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiByZW1vdmVDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgfVxuICAgIGlmICghZWwuY2xhc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgd2hpbGUgKGN1ci5pbmRleE9mKHRhcikgPj0gMCkge1xuICAgICAgY3VyID0gY3VyLnJlcGxhY2UodGFyLCAnICcpO1xuICAgIH1cbiAgICBjdXIgPSBjdXIudHJpbSgpO1xuICAgIGlmIChjdXIpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbiAoZGVmJCQxKSB7XG4gIGlmICghZGVmJCQxKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGlmIChkZWYkJDEuY3NzICE9PSBmYWxzZSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxLm5hbWUgfHwgJ3YnKSk7XG4gICAgfVxuICAgIGV4dGVuZChyZXMsIGRlZiQkMSk7XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMSlcbiAgfVxufVxuXG52YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnRlckNsYXNzOiAobmFtZSArIFwiLWVudGVyXCIpLFxuICAgIGVudGVyVG9DbGFzczogKG5hbWUgKyBcIi1lbnRlci10b1wiKSxcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICBsZWF2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlXCIpLFxuICAgIGxlYXZlVG9DbGFzczogKG5hbWUgKyBcIi1sZWF2ZS10b1wiKSxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICB9XG59KTtcblxudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xudmFyIFRSQU5TSVRJT04gPSAndHJhbnNpdGlvbic7XG52YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG5cbi8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbnZhciB0cmFuc2l0aW9uUHJvcCA9ICd0cmFuc2l0aW9uJztcbnZhciB0cmFuc2l0aW9uRW5kRXZlbnQgPSAndHJhbnNpdGlvbmVuZCc7XG52YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xudmFyIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ2FuaW1hdGlvbmVuZCc7XG5pZiAoaGFzVHJhbnNpdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHdpbmRvdy5vbnRyYW5zaXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcbiAgICB0cmFuc2l0aW9uRW5kRXZlbnQgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XG4gIH1cbiAgaWYgKHdpbmRvdy5vbmFuaW1hdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgd2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gIH1cbn1cblxuLy8gYmluZGluZyB0byB3aW5kb3cgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgaG90IHJlbG9hZCB3b3JrIGluIElFIGluIHN0cmljdCBtb2RlXG52YXIgcmFmID0gaW5Ccm93c2VyXG4gID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgICA6IHNldFRpbWVvdXRcbiAgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiAoZm4pIHsgcmV0dXJuIGZuKCk7IH07XG5cbmZ1bmN0aW9uIG5leHRGcmFtZSAoZm4pIHtcbiAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICByYWYoZm4pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIHZhciB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcyB8fCAoZWwuX3RyYW5zaXRpb25DbGFzc2VzID0gW10pO1xuICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgIHRyYW5zaXRpb25DbGFzc2VzLnB1c2goY2xzKTtcbiAgICBhZGRDbGFzcyhlbCwgY2xzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgIHJlbW92ZShlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XG4gIH1cbiAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG59XG5cbmZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyAoXG4gIGVsLFxuICBleHBlY3RlZFR5cGUsXG4gIGNiXG4pIHtcbiAgdmFyIHJlZiA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICB2YXIgdGltZW91dCA9IHJlZi50aW1lb3V0O1xuICB2YXIgcHJvcENvdW50ID0gcmVmLnByb3BDb3VudDtcbiAgaWYgKCF0eXBlKSB7IHJldHVybiBjYigpIH1cbiAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICB2YXIgZW5kZWQgPSAwO1xuICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICBjYigpO1xuICB9O1xuICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZWwpIHtcbiAgICAgIGlmICgrK2VuZGVkID49IHByb3BDb3VudCkge1xuICAgICAgICBlbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xuICAgICAgZW5kKCk7XG4gICAgfVxuICB9LCB0aW1lb3V0ICsgMSk7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbn1cblxudmFyIHRyYW5zZm9ybVJFID0gL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztcblxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8gKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xuICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcblxuICB2YXIgdHlwZTtcbiAgdmFyIHRpbWVvdXQgPSAwO1xuICB2YXIgcHJvcENvdW50ID0gMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xuICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XG4gICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG4gIHZhciBoYXNUcmFuc2Zvcm0gPVxuICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgcHJvcENvdW50OiBwcm9wQ291bnQsXG4gICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gIH0pKVxufVxuXG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4vLyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuZnVuY3Rpb24gdG9NcyAocykge1xuICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpLnJlcGxhY2UoJywnLCAnLicpKSAqIDEwMDBcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVudGVyICh2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2xlYXZlQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcztcbiAgdmFyIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzO1xuICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcztcbiAgdmFyIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3M7XG4gIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlciA9IGRhdGEuZW50ZXI7XG4gIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkO1xuICB2YXIgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXI7XG4gIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgdmFyIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhcjtcbiAgdmFyIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcbiAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcbiAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgfVxuXG4gIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcblxuICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgPyBhcHBlYXJDbGFzc1xuICAgIDogZW50ZXJDbGFzcztcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA/IGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICA/IGFwcGVhclRvQ2xhc3NcbiAgICA6IGVudGVyVG9DbGFzcztcblxuICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIpXG4gICAgOiBiZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAodHlwZW9mIGFwcGVhciA9PT0gJ2Z1bmN0aW9uJyA/IGFwcGVhciA6IGVudGVyKVxuICAgIDogZW50ZXI7XG4gIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlcilcbiAgICA6IGFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZClcbiAgICA6IGVudGVyQ2FuY2VsbGVkO1xuXG4gIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24uZW50ZXJcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBleHBsaWNpdEVudGVyRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgoZW50ZXJIb29rKTtcblxuICB2YXIgY2IgPSBlbC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICB9XG4gICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJFbnRlckhvb2sgJiYgYWZ0ZXJFbnRlckhvb2soZWwpO1xuICAgIH1cbiAgICBlbC5fZW50ZXJDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgLy8gcmVtb3ZlIHBlbmRpbmcgbGVhdmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgdmFyIHBlbmRpbmdOb2RlID0gcGFyZW50ICYmIHBhcmVudC5fcGVuZGluZyAmJiBwYXJlbnQuX3BlbmRpbmdbdm5vZGUua2V5XTtcbiAgICAgIGlmIChwZW5kaW5nTm9kZSAmJlxuICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2JcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgIH1cbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRFbnRlckR1cmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7XG4gICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICB9XG5cbiAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgY2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZWF2ZSAodm5vZGUsIHJtKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBjYWxsIGVudGVyIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fZW50ZXJDYigpO1xuICB9XG5cbiAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICBpZiAoaXNVbmRlZihkYXRhKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVybiBybSgpXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3M7XG4gIHZhciBsZWF2ZVRvQ2xhc3MgPSBkYXRhLmxlYXZlVG9DbGFzcztcbiAgdmFyIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVMZWF2ZSA9IGRhdGEuYmVmb3JlTGVhdmU7XG4gIHZhciBsZWF2ZSA9IGRhdGEubGVhdmU7XG4gIHZhciBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlO1xuICB2YXIgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZlQ2FuY2VsbGVkO1xuICB2YXIgZGVsYXlMZWF2ZSA9IGRhdGEuZGVsYXlMZWF2ZTtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgobGVhdmUpO1xuXG4gIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24ubGVhdmVcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24sICdsZWF2ZScsIHZub2RlKTtcbiAgfVxuXG4gIHZhciBjYiA9IGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5fcGVuZGluZykge1xuICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9kZS5rZXldID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBsZWF2ZUNhbmNlbGxlZCAmJiBsZWF2ZUNhbmNlbGxlZChlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgICBhZnRlckxlYXZlICYmIGFmdGVyTGVhdmUoZWwpO1xuICAgIH1cbiAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmIChkZWxheUxlYXZlKSB7XG4gICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICB9IGVsc2Uge1xuICAgIHBlcmZvcm1MZWF2ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybUxlYXZlICgpIHtcbiAgICAvLyB0aGUgZGVsYXllZCBsZWF2ZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVkXG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICBpZiAoIXZub2RlLmRhdGEuc2hvdyAmJiBlbC5wYXJlbnROb2RlKSB7XG4gICAgICAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyB8fCAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyA9IHt9KSlbKHZub2RlLmtleSldID0gdm5vZGU7XG4gICAgfVxuICAgIGJlZm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdExlYXZlRHVyYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGVhdmUgJiYgbGVhdmUoZWwsIGNiKTtcbiAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG59XG5cbi8vIG9ubHkgdXNlZCBpbiBkZXYgbW9kZVxuZnVuY3Rpb24gY2hlY2tEdXJhdGlvbiAodmFsLCBuYW1lLCB2bm9kZSkge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1lICsgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIgK1xuICAgICAgXCJnb3QgXCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsKSkgKyBcIi5cIixcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1lICsgXCIgZHVyYXRpb24gaXMgTmFOIC0gXCIgK1xuICAgICAgJ3RoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4nLFxuICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZER1cmF0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05hTih2YWwpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gKiAtIGEgbWVyZ2VkIGhvb2sgKGludm9rZXIpIHdpdGggdGhlIG9yaWdpbmFsIGluIC5mbnNcbiAqIC0gYSB3cmFwcGVkIGNvbXBvbmVudCBtZXRob2QgKGNoZWNrIC5fbGVuZ3RoKVxuICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICovXG5mdW5jdGlvbiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoIChmbikge1xuICBpZiAoaXNVbmRlZihmbikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgaWYgKGlzRGVmKGludm9rZXJGbnMpKSB7XG4gICAgLy8gaW52b2tlclxuICAgIHJldHVybiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKFxuICAgICAgQXJyYXkuaXNBcnJheShpbnZva2VyRm5zKVxuICAgICAgICA/IGludm9rZXJGbnNbMF1cbiAgICAgICAgOiBpbnZva2VyRm5zXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoZm4uX2xlbmd0aCB8fCBmbi5sZW5ndGgpID4gMVxuICB9XG59XG5cbmZ1bmN0aW9uIF9lbnRlciAoXywgdm5vZGUpIHtcbiAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgIGVudGVyKHZub2RlKTtcbiAgfVxufVxuXG52YXIgdHJhbnNpdGlvbiA9IGluQnJvd3NlciA/IHtcbiAgY3JlYXRlOiBfZW50ZXIsXG4gIGFjdGl2YXRlOiBfZW50ZXIsXG4gIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlJCQxICh2bm9kZSwgcm0pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICAgIGxlYXZlKHZub2RlLCBybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgfVxuICB9XG59IDoge307XG5cbnZhciBwbGF0Zm9ybU1vZHVsZXMgPSBbXG4gIGF0dHJzLFxuICBrbGFzcyxcbiAgZXZlbnRzLFxuICBkb21Qcm9wcyxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb25cbl07XG5cbi8qICAqL1xuXG4vLyB0aGUgZGlyZWN0aXZlIG1vZHVsZSBzaG91bGQgYmUgYXBwbGllZCBsYXN0LCBhZnRlciBhbGxcbi8vIGJ1aWx0LWluIG1vZHVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuXG52YXIgbW9kdWxlcyA9IHBsYXRmb3JtTW9kdWxlcy5jb25jYXQoYmFzZU1vZHVsZXMpO1xuXG52YXIgcGF0Y2ggPSBjcmVhdGVQYXRjaEZ1bmN0aW9uKHsgbm9kZU9wczogbm9kZU9wcywgbW9kdWxlczogbW9kdWxlcyB9KTtcblxuLyoqXG4gKiBOb3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgbGlrZSBhdHRhY2hpbmdcbiAqIHByb3BlcnRpZXMgdG8gRWxlbWVudHMuXG4gKi9cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoaXNJRTkpIHtcbiAgLy8gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9pbnRlcm5ldC1leHBsb3Jlci05LW9uaW5wdXQvXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIGlmIChlbCAmJiBlbC52bW9kZWwpIHtcbiAgICAgIHRyaWdnZXIoZWwsICdpbnB1dCcpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBkaXJlY3RpdmUgPSB7XG4gIGluc2VydGVkOiBmdW5jdGlvbiBpbnNlcnRlZCAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAvLyAjNjkwM1xuICAgICAgaWYgKG9sZFZub2RlLmVsbSAmJiAhb2xkVm5vZGUuZWxtLl92T3B0aW9ucykge1xuICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkaXJlY3RpdmUuY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gJ3RleHRhcmVhJyB8fCBpc1RleHRJbnB1dFR5cGUoZWwudHlwZSkpIHtcbiAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICBpZiAoIWJpbmRpbmcubW9kaWZpZXJzLmxhenkpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8vIFNhZmFyaSA8IDEwLjIgJiBVSVdlYlZpZXcgZG9lc24ndCBmaXJlIGNvbXBvc2l0aW9uZW5kIHdoZW5cbiAgICAgICAgLy8gc3dpdGNoaW5nIGZvY3VzIGJlZm9yZSBjb25maXJtaW5nIGNvbXBvc2l0aW9uIGNob2ljZVxuICAgICAgICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBpT1MgQ2hyb21lXG4gICAgICAgIC8vIGZpcmVzIFwiY2hhbmdlXCIgaW5zdGVhZCBvZiBcImlucHV0XCIgb24gYXV0b2NvbXBsZXRlLlxuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFOSkge1xuICAgICAgICAgIGVsLnZtb2RlbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gY29tcG9uZW50VXBkYXRlZCAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIC8vIGluIGNhc2UgdGhlIG9wdGlvbnMgcmVuZGVyZWQgYnkgdi1mb3IgaGF2ZSBjaGFuZ2VkLFxuICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQtb2Ytc3luYyB3aXRoIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICAgICAgLy8gZGV0ZWN0IHN1Y2ggY2FzZXMgYW5kIGZpbHRlciBvdXQgdmFsdWVzIHRoYXQgbm8gbG9uZ2VyIGhhcyBhIG1hdGNoaW5nXG4gICAgICAvLyBvcHRpb24gaW4gdGhlIERPTS5cbiAgICAgIHZhciBwcmV2T3B0aW9ucyA9IGVsLl92T3B0aW9ucztcbiAgICAgIHZhciBjdXJPcHRpb25zID0gZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgaWYgKGN1ck9wdGlvbnMuc29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNbaV0pOyB9KSkge1xuICAgICAgICAvLyB0cmlnZ2VyIGNoYW5nZSBldmVudCBpZlxuICAgICAgICAvLyBubyBtYXRjaGluZyBvcHRpb24gZm91bmQgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZVxuICAgICAgICB2YXIgbmVlZFJlc2V0ID0gZWwubXVsdGlwbGVcbiAgICAgICAgICA/IGJpbmRpbmcudmFsdWUuc29tZShmdW5jdGlvbiAodikgeyByZXR1cm4gaGFzTm9NYXRjaGluZ09wdGlvbih2LCBjdXJPcHRpb25zKTsgfSlcbiAgICAgICAgICA6IGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgJiYgaGFzTm9NYXRjaGluZ09wdGlvbihiaW5kaW5nLnZhbHVlLCBjdXJPcHRpb25zKTtcbiAgICAgICAgaWYgKG5lZWRSZXNldCkge1xuICAgICAgICAgIHRyaWdnZXIoZWwsICdjaGFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2VsZWN0ZWQgKGVsLCBiaW5kaW5nLCB2bSkge1xuICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNJRSB8fCBpc0VkZ2UpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY3R1YWxseVNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcbiAgdmFyIGlzTXVsdGlwbGUgPSBlbC5tdWx0aXBsZTtcbiAgaWYgKGlzTXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCI8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+IFwiICtcbiAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWxlY3RlZCwgb3B0aW9uO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcbiAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlvbikpID4gLTE7XG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSB7XG4gICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNNdWx0aXBsZSkge1xuICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KVxufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb25cbiAgICA/IG9wdGlvbi5fdmFsdWVcbiAgICA6IG9wdGlvbi52YWx1ZVxufVxuXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQgKGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZCAoZSkge1xuICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZykgeyByZXR1cm4gfVxuICBlLnRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcbiAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIgKGVsLCB0eXBlKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgZS5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8qICAqL1xuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVmaW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiYgKCF2bm9kZS5kYXRhIHx8ICF2bm9kZS5kYXRhLnRyYW5zaXRpb24pXG4gICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSlcbiAgICA6IHZub2RlXG59XG5cbnZhciBzaG93ID0ge1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcblxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheTtcbiAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG4gICAgdmFyIG9sZFZhbHVlID0gcmVmLm9sZFZhbHVlO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF2YWx1ZSA9PT0gIW9sZFZhbHVlKSB7IHJldHVybiB9XG4gICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgIGlmICh0cmFuc2l0aW9uJCQxKSB7XG4gICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWF2ZSh2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kIChcbiAgICBlbCxcbiAgICBiaW5kaW5nLFxuICAgIHZub2RlLFxuICAgIG9sZFZub2RlLFxuICAgIGlzRGVzdHJveVxuICApIHtcbiAgICBpZiAoIWlzRGVzdHJveSkge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gIG1vZGVsOiBkaXJlY3RpdmUsXG4gIHNob3c6IHNob3dcbn07XG5cbi8qICAqL1xuXG52YXIgdHJhbnNpdGlvblByb3BzID0ge1xuICBuYW1lOiBTdHJpbmcsXG4gIGFwcGVhcjogQm9vbGVhbixcbiAgY3NzOiBCb29sZWFuLFxuICBtb2RlOiBTdHJpbmcsXG4gIHR5cGU6IFN0cmluZyxcbiAgZW50ZXJDbGFzczogU3RyaW5nLFxuICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICBsZWF2ZVRvQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgZHVyYXRpb246IFtOdW1iZXIsIFN0cmluZywgT2JqZWN0XVxufTtcblxuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XG4vLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuZnVuY3Rpb24gZ2V0UmVhbENoaWxkICh2bm9kZSkge1xuICB2YXIgY29tcE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEgKGNvbXApIHtcbiAgdmFyIGRhdGEgPSB7fTtcbiAgdmFyIG9wdGlvbnMgPSBjb21wLiRvcHRpb25zO1xuICAvLyBwcm9wc1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcbiAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XG4gIH1cbiAgLy8gZXZlbnRzLlxuICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcbiAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgZm9yICh2YXIga2V5JDEgaW4gbGlzdGVuZXJzKSB7XG4gICAgZGF0YVtjYW1lbGl6ZShrZXkkMSldID0gbGlzdGVuZXJzW2tleSQxXTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBwbGFjZWhvbGRlciAoaCwgcmF3Q2hpbGQpIHtcbiAgaWYgKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QocmF3Q2hpbGQudGFnKSkge1xuICAgIHJldHVybiBoKCdrZWVwLWFsaXZlJywge1xuICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRUcmFuc2l0aW9uICh2bm9kZSkge1xuICB3aGlsZSAoKHZub2RlID0gdm5vZGUucGFyZW50KSkge1xuICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZUNoaWxkIChjaGlsZCwgb2xkQ2hpbGQpIHtcbiAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnXG59XG5cbnZhciBpc05vdFRleHROb2RlID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfTtcblxudmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG5cbnZhciBUcmFuc2l0aW9uID0ge1xuICBuYW1lOiAndHJhbnNpdGlvbicsXG4gIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gIGFic3RyYWN0OiB0cnVlLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGZpbHRlciBvdXQgdGV4dCBub2RlcyAocG9zc2libGUgd2hpdGVzcGFjZXMpXG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnPHRyYW5zaXRpb24+IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBzaW5nbGUgZWxlbWVudC4gVXNlICcgK1xuICAgICAgICAnPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy4nLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICAvLyB3YXJuIGludmFsaWQgbW9kZVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBtb2RlICYmIG1vZGUgIT09ICdpbi1vdXQnICYmIG1vZGUgIT09ICdvdXQtaW4nXG4gICAgKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnaW52YWxpZCA8dHJhbnNpdGlvbj4gbW9kZTogJyArIG1vZGUsXG4gICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgYSBjb21wb25lbnQgcm9vdCBub2RlIGFuZCB0aGUgY29tcG9uZW50J3NcbiAgICAvLyBwYXJlbnQgY29udGFpbmVyIG5vZGUgYWxzbyBoYXMgdHJhbnNpdGlvbiwgc2tpcC5cbiAgICBpZiAoaGFzUGFyZW50VHJhbnNpdGlvbih0aGlzLiR2bm9kZSkpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIC8vIGFwcGx5IHRyYW5zaXRpb24gZGF0YSB0byBjaGlsZFxuICAgIC8vIHVzZSBnZXRSZWFsQ2hpbGQoKSB0byBpZ25vcmUgYWJzdHJhY3QgY29tcG9uZW50cyBlLmcuIGtlZXAtYWxpdmVcbiAgICB2YXIgY2hpbGQgPSBnZXRSZWFsQ2hpbGQocmF3Q2hpbGQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9sZWF2aW5nKSB7XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpXG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGEga2V5IHRoYXQgaXMgdW5pcXVlIHRvIHRoZSB2bm9kZSB0eXBlIGFuZCB0byB0aGlzIHRyYW5zaXRpb25cbiAgICAvLyBjb21wb25lbnQgaW5zdGFuY2UuIFRoaXMga2V5IHdpbGwgYmUgdXNlZCB0byByZW1vdmUgcGVuZGluZyBsZWF2aW5nIG5vZGVzXG4gICAgLy8gZHVyaW5nIGVudGVyaW5nLlxuICAgIHZhciBpZCA9IFwiX190cmFuc2l0aW9uLVwiICsgKHRoaXMuX3VpZCkgKyBcIi1cIjtcbiAgICBjaGlsZC5rZXkgPSBjaGlsZC5rZXkgPT0gbnVsbFxuICAgICAgPyBjaGlsZC5pc0NvbW1lbnRcbiAgICAgICAgPyBpZCArICdjb21tZW50J1xuICAgICAgICA6IGlkICsgY2hpbGQudGFnXG4gICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgPyAoU3RyaW5nKGNoaWxkLmtleSkuaW5kZXhPZihpZCkgPT09IDAgPyBjaGlsZC5rZXkgOiBpZCArIGNoaWxkLmtleSlcbiAgICAgICAgOiBjaGlsZC5rZXk7XG5cbiAgICB2YXIgZGF0YSA9IChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuICAgIHZhciBvbGRSYXdDaGlsZCA9IHRoaXMuX3Zub2RlO1xuICAgIHZhciBvbGRDaGlsZCA9IGdldFJlYWxDaGlsZChvbGRSYXdDaGlsZCk7XG5cbiAgICAvLyBtYXJrIHYtc2hvd1xuICAgIC8vIHNvIHRoYXQgdGhlIHRyYW5zaXRpb24gbW9kdWxlIGNhbiBoYW5kIG92ZXIgdGhlIGNvbnRyb2wgdG8gdGhlIGRpcmVjdGl2ZVxuICAgIGlmIChjaGlsZC5kYXRhLmRpcmVjdGl2ZXMgJiYgY2hpbGQuZGF0YS5kaXJlY3RpdmVzLnNvbWUoaXNWU2hvd0RpcmVjdGl2ZSkpIHtcbiAgICAgIGNoaWxkLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgb2xkQ2hpbGQgJiZcbiAgICAgIG9sZENoaWxkLmRhdGEgJiZcbiAgICAgICFpc1NhbWVDaGlsZChjaGlsZCwgb2xkQ2hpbGQpICYmXG4gICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgLy8gIzY2ODcgY29tcG9uZW50IHJvb3QgaXMgYSBjb21tZW50IG5vZGVcbiAgICAgICEob2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UgJiYgb2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudClcbiAgICApIHtcbiAgICAgIC8vIHJlcGxhY2Ugb2xkIGNoaWxkIHRyYW5zaXRpb24gZGF0YSB3aXRoIGZyZXNoIG9uZVxuICAgICAgLy8gaW1wb3J0YW50IGZvciBkeW5hbWljIHRyYW5zaXRpb25zIVxuICAgICAgdmFyIG9sZERhdGEgPSBvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpO1xuICAgICAgLy8gaGFuZGxlIHRyYW5zaXRpb24gbW9kZVxuICAgICAgaWYgKG1vZGUgPT09ICdvdXQtaW4nKSB7XG4gICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICB0aGlzLl9sZWF2aW5nID0gdHJ1ZTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2FmdGVyTGVhdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcyQxLl9sZWF2aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcyQxLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnaW4tb3V0Jykge1xuICAgICAgICBpZiAoaXNBc3luY1BsYWNlaG9sZGVyKGNoaWxkKSkge1xuICAgICAgICAgIHJldHVybiBvbGRSYXdDaGlsZFxuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxheWVkTGVhdmU7XG4gICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7IGRlbGF5ZWRMZWF2ZSgpOyB9O1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnYWZ0ZXJFbnRlcicsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdlbnRlckNhbmNlbGxlZCcsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdkZWxheUxlYXZlJywgZnVuY3Rpb24gKGxlYXZlKSB7IGRlbGF5ZWRMZWF2ZSA9IGxlYXZlOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmF3Q2hpbGRcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBwcm9wcyA9IGV4dGVuZCh7XG4gIHRhZzogU3RyaW5nLFxuICBtb3ZlQ2xhc3M6IFN0cmluZ1xufSwgdHJhbnNpdGlvblByb3BzKTtcblxuZGVsZXRlIHByb3BzLm1vZGU7XG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gIHByb3BzOiBwcm9wcyxcblxuICBiZWZvcmVNb3VudDogZnVuY3Rpb24gYmVmb3JlTW91bnQgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3VwZGF0ZTtcbiAgICB0aGlzLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHRoaXMkMSk7XG4gICAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgICB0aGlzJDEuX19wYXRjaF9fKFxuICAgICAgICB0aGlzJDEuX3Zub2RlLFxuICAgICAgICB0aGlzJDEua2VwdCxcbiAgICAgICAgZmFsc2UsIC8vIGh5ZHJhdGluZ1xuICAgICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICAgICk7XG4gICAgICB0aGlzJDEuX3Zub2RlID0gdGhpcyQxLmtlcHQ7XG4gICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgIHVwZGF0ZS5jYWxsKHRoaXMkMSwgdm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgfTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0YWcgPSB0aGlzLnRhZyB8fCB0aGlzLiR2bm9kZS5kYXRhLnRhZyB8fCAnc3Bhbic7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMucHJldkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgcmF3Q2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB2YXIgdHJhbnNpdGlvbkRhdGEgPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgaWYgKGMudGFnKSB7XG4gICAgICAgIGlmIChjLmtleSAhPSBudWxsICYmIFN0cmluZyhjLmtleSkuaW5kZXhPZignX192bGlzdCcpICE9PSAwKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICBtYXBbYy5rZXldID0gY1xuICAgICAgICAgIDsoYy5kYXRhIHx8IChjLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgd2FybigoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiICsgbmFtZSArIFwiPlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldkNoaWxkcmVuKSB7XG4gICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgYyQxLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICBjJDEuZGF0YS5wb3MgPSBjJDEuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAga2VwdC5wdXNoKGMkMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgIHRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkICgpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICB2YXIgbW92ZUNsYXNzID0gdGhpcy5tb3ZlQ2xhc3MgfHwgKCh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZScpO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSBkaXZpZGUgdGhlIHdvcmsgaW50byB0aHJlZSBsb29wcyB0byBhdm9pZCBtaXhpbmcgRE9NIHJlYWRzIGFuZCB3cml0ZXNcbiAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXG4gICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0aGlzLl9yZWZsb3cgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgdmFyIGVsID0gYy5lbG07XG4gICAgICAgIHZhciBzID0gZWwuc3R5bGU7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBlbC5fbW92ZUNiID0gZnVuY3Rpb24gY2IgKGUpIHtcbiAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgY2IpO1xuICAgICAgICAgICAgZWwuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzTW92ZTogZnVuY3Rpb24gaGFzTW92ZSAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNNb3ZlXG4gICAgICB9XG4gICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgIGVsLl90cmFuc2l0aW9uQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHsgcmVtb3ZlQ2xhc3MoY2xvbmUsIGNscyk7IH0pO1xuICAgICAgfVxuICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzIChjKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgYy5lbG0uX2VudGVyQ2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbiAoYykge1xuICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24gKGMpIHtcbiAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgaWYgKGR4IHx8IGR5KSB7XG4gICAgYy5kYXRhLm1vdmVkID0gdHJ1ZTtcbiAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCJweCxcIiArIGR5ICsgXCJweClcIjtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gIH1cbn1cblxudmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcbiAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8qICAqL1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXG5WdWUuY29uZmlnLm11c3RVc2VQcm9wID0gbXVzdFVzZVByb3A7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xuVnVlLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuXG4vLyBwdWJsaWMgbW91bnQgbWV0aG9kXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8vIGRldnRvb2xzIGdsb2JhbCBob29rXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGluQnJvd3Nlcikge1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICBpZiAoZGV2dG9vbHMpIHtcbiAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCdcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmXG4gICAgICBjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgIFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCJcbiAgICAgICk7XG4gICAgfVxuICB9LCAwKTtcbn1cblxuLyogICovXG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vRW1vamkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUzNGFkOTQ2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Vtb2ppLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vRW1vamkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1MzRhZDk0NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1MzRhZDk0NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRW1vamkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUzNGFkOTQ2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzUzNGFkOTQ2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9FbW9qaS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRW1vamkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRW1vamkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0Vtb2ppLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MzRhZDk0NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTZlOTA4NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTZlOTA4NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdkMTZlOTA4NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vUGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxNmU5MDg0JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9TdGF0aWNQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiMTZjMjY4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzJiMTZjMjY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzJiMTZjMjY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9TdGF0aWNQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiMTZjMjY4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzJiMTZjMjY4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9TdGF0aWNQaWNrZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9TdGF0aWNQaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmIxNmMyNjgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUxMTg4MTA0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvc2ViL3dlYi9lbW9qaS1tYXJ0LXZ1ZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNTExODgxMDQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNTExODgxMDQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUxMTg4MTA0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzUxMTg4MTA0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9hbmNob3JzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUxMTg4MTA0JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2Y2RhMGUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY2F0ZWdvcnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2Y2RhMGUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzc2Y2RhMGUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL2NhdGVnb3J5LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2F0ZWdvcnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM3NmNkYTBlJlwiIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBBbmNob3JzIH0gZnJvbSAnLi9hbmNob3JzJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYXRlZ29yeSB9IGZyb20gJy4vY2F0ZWdvcnknXG5leHBvcnQgeyBkZWZhdWx0IGFzIFByZXZpZXcgfSBmcm9tICcuL3ByZXZpZXcnXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gJy4vc2VhcmNoJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTa2lucyB9IGZyb20gJy4vc2tpbnMnXG5leHBvcnQgeyBkZWZhdWx0IGFzIEVtb2ppIH0gZnJvbSAnLi9FbW9qaSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGlja2VyIH0gZnJvbSAnLi9QaWNrZXInXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXRpY1BpY2tlciB9IGZyb20gJy4vU3RhdGljUGlja2VyJ1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzM1MDU2YzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzM1MDU2YzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczNTA1NmMzMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvcHJldmlldy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YWQ0MWJiOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc0YWQ0MWJiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc0YWQ0MWJiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YWQ0MWJiOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0YWQ0MWJiOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2VhcmNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRhZDQxYmI4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9za2lucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWM2MTQ4OTQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc2tpbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9za2lucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWM2MTQ4OTQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWM2MTQ4OTQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL3NraW5zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2tpbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFjNjE0ODk0JlwiIiwiaW1wb3J0IHN0b3JlIGZyb20gJy4vdXRpbHMvc3RvcmUnXG5pbXBvcnQgeyB1bmNvbXByZXNzIH0gZnJvbSAnLi91dGlscy9kYXRhJ1xuaW1wb3J0IGZyZXF1ZW50bHkgZnJvbSAnLi91dGlscy9mcmVxdWVudGx5J1xuXG5leHBvcnQge1xuICBQaWNrZXIsXG4gIFN0YXRpY1BpY2tlcixcbiAgRW1vamksXG4gIEFuY2hvcnMsXG4gIFByZXZpZXcsXG4gIFNlYXJjaCxcbiAgQ2F0ZWdvcnksXG4gIFNraW5zLFxufSBmcm9tICcuL2NvbXBvbmVudHMnXG5cbmV4cG9ydCB7IEVtb2ppSW5kZXgsIEVtb2ppVmlldywgRW1vamlEYXRhLCBzYW5pdGl6ZSB9IGZyb20gJy4vdXRpbHMvZW1vamktZGF0YSdcbmV4cG9ydCB7IHVuY29tcHJlc3MsIHN0b3JlLCBmcmVxdWVudGx5IH1cbiIsImNvbnN0IF9TdHJpbmcgPSBTdHJpbmdcblxuZXhwb3J0IGRlZmF1bHQgX1N0cmluZy5mcm9tQ29kZVBvaW50IHx8XG4gIGZ1bmN0aW9uIHN0cmluZ0Zyb21Db2RlUG9pbnQoKSB7XG4gICAgdmFyIE1BWF9TSVpFID0gMHg0MDAwXG4gICAgdmFyIGNvZGVVbml0cyA9IFtdXG4gICAgdmFyIGhpZ2hTdXJyb2dhdGVcbiAgICB2YXIgbG93U3Vycm9nYXRlXG4gICAgdmFyIGluZGV4ID0gLTFcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aFxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9ICcnXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSlcbiAgICAgIGlmIChcbiAgICAgICAgIWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuICAgICAgICBjb2RlUG9pbnQgPCAwIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuICAgICAgICBjb2RlUG9pbnQgPiAweDEwZmZmZiB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgTWF0aC5mbG9vcihjb2RlUG9pbnQpICE9IGNvZGVQb2ludCAvLyBub3QgYW4gaW50ZWdlclxuICAgICAgKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludDogJyArIGNvZGVQb2ludClcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAgIC8vIEJNUCBjb2RlIHBvaW50XG4gICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICAgIC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICAgIGhpZ2hTdXJyb2dhdGUgPSAoY29kZVBvaW50ID4+IDEwKSArIDB4ZDgwMFxuICAgICAgICBsb3dTdXJyb2dhdGUgPSAoY29kZVBvaW50ICUgMHg0MDApICsgMHhkYzAwXG4gICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcbiAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY29kZVVuaXRzKVxuICAgICAgICBjb2RlVW5pdHMubGVuZ3RoID0gMFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbiIsImNvbnN0IFNWR3MgPSB7XG4gIGFjdGl2aXR5OiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgMEM1LjM3MyAwIDAgNS4zNzIgMCAxMmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyIDYuNjI4IDAgMTItNS4zNzMgMTItMTIgMC02LjYyOC01LjM3Mi0xMi0xMi0xMm05Ljk0OSAxMUgxNy4wNWMuMjI0LTIuNTI3IDEuMjMyLTQuNzczIDEuOTY4LTYuMTEzQTkuOTY2IDkuOTY2IDAgMCAxIDIxLjk0OSAxMU0xMyAxMVYyLjA1MWE5Ljk0NSA5Ljk0NSAwIDAgMSA0LjQzMiAxLjU2NGMtLjg1OCAxLjQ5MS0yLjE1NiA0LjIyLTIuMzkyIDcuMzg1SDEzem0tMiAwSDguOTYxYy0uMjM4LTMuMTY1LTEuNTM2LTUuODk0LTIuMzkzLTcuMzg1QTkuOTUgOS45NSAwIDAgMSAxMSAyLjA1MVYxMXptMCAydjguOTQ5YTkuOTM3IDkuOTM3IDAgMCAxLTQuNDMyLTEuNTY0Yy44NTctMS40OTIgMi4xNTUtNC4yMjEgMi4zOTMtNy4zODVIMTF6bTQuMDQgMGMuMjM2IDMuMTY0IDEuNTM0IDUuODkzIDIuMzkyIDcuMzg1QTkuOTIgOS45MiAwIDAgMSAxMyAyMS45NDlWMTNoMi4wNHpNNC45ODIgNC44ODdDNS43MTggNi4yMjcgNi43MjYgOC40NzMgNi45NTEgMTFoLTQuOWE5Ljk3NyA5Ljk3NyAwIDAgMSAyLjkzMS02LjExM00yLjA1MSAxM2g0LjljLS4yMjYgMi41MjctMS4yMzMgNC43NzEtMS45NjkgNi4xMTNBOS45NzIgOS45NzIgMCAwIDEgMi4wNTEgMTNtMTYuOTY3IDYuMTEzYy0uNzM1LTEuMzQyLTEuNzQ0LTMuNTg2LTEuOTY4LTYuMTEzaDQuODk5YTkuOTYxIDkuOTYxIDAgMCAxLTIuOTMxIDYuMTEzXCIvPjwvc3ZnPmAsXG5cbiAgY3VzdG9tOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgyLjAwMDAwMCwgMS4wMDAwMDApXCI+PHJlY3QgaWQ9XCJSZWN0YW5nbGVcIiB4PVwiOFwiIHk9XCIwXCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMjFcIiByeD1cIjEuNVwiPjwvcmVjdD48cmVjdCBpZD1cIlJlY3RhbmdsZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg5Ljg0MywgMTAuNTQ5KSByb3RhdGUoNjApIHRyYW5zbGF0ZSgtOS44NDMsIC0xMC41NDkpIFwiIHg9XCI4LjM0M1wiIHk9XCIwLjA0OVwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjIxXCIgcng9XCIxLjVcIj48L3JlY3Q+PHJlY3QgaWQ9XCJSZWN0YW5nbGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOS44NDMsIDEwLjU0OSkgcm90YXRlKC02MCkgdHJhbnNsYXRlKC05Ljg0MywgLTEwLjU0OSkgXCIgeD1cIjguMzQzXCIgeT1cIjAuMDQ5XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMjFcIiByeD1cIjEuNVwiPjwvcmVjdD48L2c+PC9zdmc+YCxcblxuICBmbGFnczogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTAgMGw2LjA4NCAyNEg4TDEuOTE2IDB6TTIxIDVoLTRsLTEtNEg0bDMgMTJoM2wxIDRoMTNMMjEgNXpNNi41NjMgM2g3Ljg3NWwyIDhIOC41NjNsLTItOHptOC44MzIgMTBsLTIuODU2IDEuOTA0TDEyLjA2MyAxM2gzLjMzMnpNMTkgMTNsLTEuNS02aDEuOTM4bDIgOEgxNmwzLTJ6XCIvPjwvc3ZnPmAsXG5cbiAgZm9vZHM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNyA0Ljk3OGMtMS44MzggMC0yLjg3Ni4zOTYtMy42OC45MzQuNTEzLTEuMTcyIDEuNzY4LTIuOTM0IDQuNjgtMi45MzRhMSAxIDAgMCAwIDAtMmMtMi45MjEgMC00LjYyOSAxLjM2NS01LjU0NyAyLjUxMi0uMDY0LjA3OC0uMTE5LjE2Mi0uMTguMjQ0QzExLjczIDEuODM4IDEwLjc5OC4wMjMgOS4yMDcuMDIzIDguNTc5LjAyMiA3Ljg1LjMwNiA3IC45NzggNS4wMjcgMi41NCA1LjMyOSAzLjkwMiA2LjQ5MiA0Ljk5OSAzLjYwOSA1LjIyMiAwIDcuMzUyIDAgMTIuOTY5YzAgNC41ODIgNC45NjEgMTEuMDA5IDkgMTEuMDA5IDEuOTc1IDAgMi4zNzEtLjQ4NiAzLTEgLjYyOS41MTQgMS4wMjUgMSAzIDEgNC4wMzkgMCA5LTYuNDE4IDktMTEgMC01Ljk1My00LjA1NS04LTctOE04LjI0MiAyLjU0NmMuNjQxLS41MDguOTQzLS41MjMuOTY1LS41MjMuNDI2LjE2OS45NzUgMS40MDUgMS4zNTcgMy4wNTUtMS41MjctLjYyOS0yLjc0MS0xLjM1Mi0yLjk4LTEuODQ2LjA1OS0uMTEyLjI0MS0uMzU2LjY1OC0uNjg2TTE1IDIxLjk3OGMtMS4wOCAwLTEuMjEtLjEwOS0xLjU1OS0uNDAybC0uMTc2LS4xNDZjLS4zNjctLjMwMi0uODE2LS40NTItMS4yNjYtLjQ1MnMtLjg5OC4xNS0xLjI2Ni40NTJsLS4xNzYuMTQ2Yy0uMzQ3LjI5Mi0uNDc3LjQwMi0xLjU1Ny40MDItMi44MTMgMC03LTUuMzg5LTctOS4wMDkgMC01LjgyMyA0LjQ4OC01Ljk5MSA1LTUuOTkxIDEuOTM5IDAgMi40ODQuNDcxIDMuMzg3IDEuMjUxbC4zMjMuMjc2YTEuOTk1IDEuOTk1IDAgMCAwIDIuNTggMGwuMzIzLS4yNzZjLjkwMi0uNzggMS40NDctMS4yNTEgMy4zODctMS4yNTEuNTEyIDAgNSAuMTY4IDUgNiAwIDMuNjE3LTQuMTg3IDktNyA5XCIvPjwvc3ZnPmAsXG5cbiAgbmF0dXJlOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTUuNSA4YTEuNSAxLjUgMCAxIDAgLjAwMSAzLjAwMUExLjUgMS41IDAgMCAwIDE1LjUgOE04LjUgOGExLjUgMS41IDAgMSAwIC4wMDEgMy4wMDFBMS41IDEuNSAwIDAgMCA4LjUgOFwiLz48cGF0aCBkPVwiTTE4LjkzMyAwaC0uMDI3Yy0uOTcgMC0yLjEzOC43ODctMy4wMTggMS40OTctMS4yNzQtLjM3NC0yLjYxMi0uNTEtMy44ODctLjUxLTEuMjg1IDAtMi42MTYuMTMzLTMuODc0LjUxN0M3LjI0NS43OSA2LjA2OSAwIDUuMDkzIDBoLS4wMjdDMy4zNTIgMCAuMDcgMi42Ny4wMDIgNy4wMjZjLS4wMzkgMi40NzkuMjc2IDQuMjM4IDEuMDQgNS4wMTMuMjU0LjI1OC44ODIuNjc3IDEuMjk1Ljg4Mi4xOTEgMy4xNzcuOTIyIDUuMjM4IDIuNTM2IDYuMzguODk3LjYzNyAyLjE4Ny45NDkgMy4yIDEuMTAyQzguMDQgMjAuNiA4IDIwLjc5NSA4IDIxYzAgMS43NzMgMi4zNSAzIDQgMyAxLjY0OCAwIDQtMS4yMjcgNC0zIDAtLjIwMS0uMDM4LS4zOTMtLjA3Mi0uNTg2IDIuNTczLS4zODUgNS40MzUtMS44NzcgNS45MjUtNy41ODcuMzk2LS4yMi44ODctLjU2OCAxLjEwNC0uNzg4Ljc2My0uNzc0IDEuMDc5LTIuNTM0IDEuMDQtNS4wMTNDMjMuOTI5IDIuNjcgMjAuNjQ2IDAgMTguOTMzIDBNMy4yMjMgOS4xMzVjLS4yMzcuMjgxLS44MzcgMS4xNTUtLjg4NCAxLjIzOC0uMTUtLjQxLS4zNjgtMS4zNDktLjMzNy0zLjI5MS4wNTEtMy4yODEgMi40NzgtNC45NzIgMy4wOTEtNS4wMzEuMjU2LjAxNS43MzEuMjcgMS4yNjUuNjQ2LTEuMTEgMS4xNzEtMi4yNzUgMi45MTUtMi4zNTIgNS4xMjUtLjEzMy41NDYtLjM5OC44NTgtLjc4MyAxLjMxM00xMiAyMmMtLjkwMSAwLTEuOTU0LS42OTMtMi0xIDAtLjY1NC40NzUtMS4yMzYgMS0xLjYwMlYyMGExIDEgMCAxIDAgMiAwdi0uNjAyYy41MjQuMzY1IDEgLjk0NyAxIDEuNjAyLS4wNDYuMzA3LTEuMDk5IDEtMiAxbTMtMy40OHYuMDJhNC43NTIgNC43NTIgMCAwIDAtMS4yNjItMS4wMmMxLjA5Mi0uNTE2IDIuMjM5LTEuMzM0IDIuMjM5LTIuMjE3IDAtMS44NDItMS43ODEtMi4xOTUtMy45NzctMi4xOTUtMi4xOTYgMC0zLjk3OC4zNTQtMy45NzggMi4xOTUgMCAuODgzIDEuMTQ4IDEuNzAxIDIuMjM4IDIuMjE3QTQuOCA0LjggMCAwIDAgOSAxOC41Mzl2LS4wMjVjLTEtLjA3Ni0yLjE4Mi0uMjgxLTIuOTczLS44NDItMS4zMDEtLjkyLTEuODM4LTMuMDQ1LTEuODUzLTYuNDc4bC4wMjMtLjA0MWMuNDk2LS44MjYgMS40OS0xLjQ1IDEuODA0LTMuMTAyIDAtMi4wNDcgMS4zNTctMy42MzEgMi4zNjItNC41MjJDOS4zNyAzLjE3OCAxMC41NTUgMyAxMS45NDggM2MxLjQ0NyAwIDIuNjg1LjE5MiAzLjczMy41NyAxIC45IDIuMzE2IDIuNDY1IDIuMzE2IDQuNDguMzEzIDEuNjUxIDEuMzA3IDIuMjc1IDEuODAzIDMuMTAyLjAzNS4wNTguMDY4LjExNy4xMDIuMTc4LS4wNTkgNS45NjctMS45NDkgNy4wMS00LjkwMiA3LjE5bTYuNjI4LTguMjAyYy0uMDM3LS4wNjUtLjA3NC0uMTMtLjExMy0uMTk1YTcuNTg3IDcuNTg3IDAgMCAwLS43MzktLjk4N2MtLjM4NS0uNDU1LS42NDgtLjc2OC0uNzgyLTEuMzEzLS4wNzYtMi4yMDktMS4yNDEtMy45NTQtMi4zNTMtNS4xMjQuNTMxLS4zNzYgMS4wMDQtLjYzIDEuMjYxLS42NDcuNjM2LjA3MSAzLjA0NCAxLjc2NCAzLjA5NiA1LjAzMS4wMjcgMS44MS0uMzQ3IDMuMjE4LS4zNyAzLjIzNVwiLz48L3N2Zz5gLFxuXG4gIG9iamVjdHM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiAwYTkgOSAwIDAgMC01IDE2LjQ4MlYyMXMyLjAzNSAzIDUgMyA1LTMgNS0zdi00LjUxOEE5IDkgMCAwIDAgMTIgMHptMCAyYzMuODYgMCA3IDMuMTQxIDcgN3MtMy4xNCA3LTcgNy03LTMuMTQxLTctNyAzLjE0LTcgNy03ek05IDE3LjQ3N2MuOTQuMzMyIDEuOTQ2LjUyMyAzIC41MjNzMi4wNi0uMTkgMy0uNTIzdi44MzRjLS45MS40MzYtMS45MjUuNjg5LTMgLjY4OWE2LjkyNCA2LjkyNCAwIDAgMS0zLS42OXYtLjgzM3ptLjIzNiAzLjA3QTguODU0IDguODU0IDAgMCAwIDEyIDIxYy45NjUgMCAxLjg4OC0uMTY3IDIuNzU4LS40NTFDMTQuMTU1IDIxLjE3MyAxMy4xNTMgMjIgMTIgMjJjLTEuMTAyIDAtMi4xMTctLjc4OS0yLjc2NC0xLjQ1M3pcIi8+PHBhdGggZD1cIk0xNC43NDUgMTIuNDQ5aC0uMDA0Yy0uODUyLS4wMjQtMS4xODgtLjg1OC0xLjU3Ny0xLjgyNC0uNDIxLTEuMDYxLS43MDMtMS41NjEtMS4xODItMS41NjZoLS4wMDljLS40ODEgMC0uNzgzLjQ5Ny0xLjIzNSAxLjUzNy0uNDM2Ljk4Mi0uODAxIDEuODExLTEuNjM2IDEuNzkxbC0uMjc2LS4wNDNjLS41NjUtLjE3MS0uODUzLS42OTEtMS4yODQtMS43OTQtLjEyNS0uMzEzLS4yMDItLjYzMi0uMjctLjkxMy0uMDUxLS4yMTMtLjEyNy0uNTMtLjE5NS0uNjM0QzcuMDY3IDkuMDA0IDcuMDM5IDkgNi45OSA5QTEgMSAwIDAgMSA3IDdoLjAxYzEuNjYyLjAxNyAyLjAxNSAxLjM3MyAyLjE5OCAyLjEzNC40ODYtLjk4MSAxLjMwNC0yLjA1OCAyLjc5Ny0yLjA3NSAxLjUzMS4wMTggMi4yOCAxLjE1MyAyLjczMSAyLjE0MWwuMDAyLS4wMDhDMTQuOTQ0IDguNDI0IDE1LjMyNyA3IDE2Ljk3OSA3aC4wMzJBMSAxIDAgMSAxIDE3IDloLS4wMTFjLS4xNDkuMDc2LS4yNTYuNDc0LS4zMTkuNzA5YTYuNDg0IDYuNDg0IDAgMCAxLS4zMTEuOTUxYy0uNDI5Ljk3My0uNzkgMS43ODktMS42MTQgMS43ODlcIi8+PC9zdmc+YCxcblxuICBwZW9wbGU6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiAwQzUuMzczIDAgMCA1LjM3MyAwIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyUzE4LjYyNyAwIDEyIDBtMCAyMkM2LjQ4NiAyMiAyIDE3LjUxNCAyIDEyUzYuNDg2IDIgMTIgMnMxMCA0LjQ4NiAxMCAxMC00LjQ4NiAxMC0xMCAxMFwiLz48cGF0aCBkPVwiTTggN2EyIDIgMCAxIDAtLjAwMSAzLjk5OUEyIDIgMCAwIDAgOCA3TTE2IDdhMiAyIDAgMSAwLS4wMDEgMy45OTlBMiAyIDAgMCAwIDE2IDdNMTUuMjMyIDE1Yy0uNjkzIDEuMTk1LTEuODcgMi0zLjM0OSAyLTEuNDc3IDAtMi42NTUtLjgwNS0zLjM0Ny0ySDE1bTMtMkg2YTYgNiAwIDEgMCAxMiAwXCIvPjwvc3ZnPmAsXG5cbiAgcGxhY2VzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNi41IDEyQzUuMTIyIDEyIDQgMTMuMTIxIDQgMTQuNVM1LjEyMiAxNyA2LjUgMTcgOSAxNS44NzkgOSAxNC41IDcuODc4IDEyIDYuNSAxMm0wIDNjLS4yNzUgMC0uNS0uMjI1LS41LS41cy4yMjUtLjUuNS0uNS41LjIyNS41LjUtLjIyNS41LS41LjVNMTcuNSAxMmMtMS4zNzggMC0yLjUgMS4xMjEtMi41IDIuNXMxLjEyMiAyLjUgMi41IDIuNSAyLjUtMS4xMjEgMi41LTIuNS0xLjEyMi0yLjUtMi41LTIuNW0wIDNjLS4yNzUgMC0uNS0uMjI1LS41LS41cy4yMjUtLjUuNS0uNS41LjIyNS41LjUtLjIyNS41LS41LjVcIi8+PHBhdGggZD1cIk0yMi40ODIgOS40OTRsLTEuMDM5LS4zNDZMMjEuNCA5aC42Yy41NTIgMCAxLS40MzkgMS0uOTkyIDAtLjAwNi0uMDAzLS4wMDgtLjAwMy0uMDA4SDIzYzAtMS0uODg5LTItMS45ODQtMmgtLjY0MmwtLjczMS0xLjcxN0MxOS4yNjIgMy4wMTIgMTguMDkxIDIgMTYuNzY0IDJINy4yMzZDNS45MDkgMiA0LjczOCAzLjAxMiA0LjM1NyA0LjI4M0wzLjYyNiA2aC0uNjQyQzEuODg5IDYgMSA3IDEgOGguMDAzUzEgOC4wMDIgMSA4LjAwOEMxIDguNTYxIDEuNDQ4IDkgMiA5aC42bC0uMDQzLjE0OC0xLjAzOS4zNDZhMi4wMDEgMi4wMDEgMCAwIDAtMS4zNTkgMi4wOTdsLjc1MSA3LjUwOGExIDEgMCAwIDAgLjk5NC45MDFIM3YxYzAgMS4xMDMuODk2IDIgMiAyaDJjMS4xMDQgMCAyLS44OTcgMi0ydi0xaDZ2MWMwIDEuMTAzLjg5NiAyIDIgMmgyYzEuMTA0IDAgMi0uODk3IDItMnYtMWgxLjA5NmEuOTk5Ljk5OSAwIDAgMCAuOTk0LS45MDFsLjc1MS03LjUwOGEyLjAwMSAyLjAwMSAwIDAgMC0xLjM1OS0yLjA5N002LjI3MyA0Ljg1N0M2LjQwMiA0LjQzIDYuNzg4IDQgNy4yMzYgNGg5LjUyN2MuNDQ4IDAgLjgzNC40My45NjMuODU3TDE5LjMxMyA5SDQuNjg4bDEuNTg1LTQuMTQzek03IDIxSDV2LTFoMnYxem0xMiAwaC0ydi0xaDJ2MXptMi4xODktM0gyLjgxMWwtLjY2Mi02LjYwN0wzIDExaDE4bC44NTIuMzkzTDIxLjE4OSAxOHpcIi8+PC9zdmc+YCxcblxuICByZWNlbnQ6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMyA0aC0ybC0uMDAxIDdIOXYyaDJ2Mmgydi0yaDR2LTJoLTR6XCIvPjxwYXRoIGQ9XCJNMTIgMEM1LjM3MyAwIDAgNS4zNzMgMCAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMlMxOC42MjcgMCAxMiAwbTAgMjJDNi40ODYgMjIgMiAxNy41MTQgMiAxMlM2LjQ4NiAyIDEyIDJzMTAgNC40ODYgMTAgMTAtNC40ODYgMTAtMTAgMTBcIi8+PC9zdmc+YCxcblxuICBzeW1ib2xzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMCAwaDExdjJIMHpNNCAxMWgzVjZoNFY0SDB2Mmg0ek0xNS41IDE3YzEuMzgxIDAgMi41LTEuMTE2IDIuNS0yLjQ5M3MtMS4xMTktMi40OTMtMi41LTIuNDkzUzEzIDEzLjEzIDEzIDE0LjUwNyAxNC4xMTkgMTcgMTUuNSAxN20wLTIuOTg2Yy4yNzYgMCAuNS4yMjIuNS40OTMgMCAuMjcyLS4yMjQuNDkzLS41LjQ5M3MtLjUtLjIyMS0uNS0uNDkzLjIyNC0uNDkzLjUtLjQ5M00yMS41IDE5LjAxNGMtMS4zODEgMC0yLjUgMS4xMTYtMi41IDIuNDkzUzIwLjExOSAyNCAyMS41IDI0czIuNS0xLjExNiAyLjUtMi40OTMtMS4xMTktMi40OTMtMi41LTIuNDkzbTAgMi45ODZhLjQ5Ny40OTcgMCAwIDEtLjUtLjQ5M2MwLS4yNzEuMjI0LS40OTMuNS0uNDkzcy41LjIyMi41LjQ5M2EuNDk3LjQ5NyAwIDAgMS0uNS40OTNNMjIgMTNsLTkgOSAxLjUxMyAxLjUgOC45OS05LjAwOXpNMTcgMTFjMi4yMDkgMCA0LTEuMTE5IDQtMi41VjJzLjk4NS0uMTYxIDEuNDk4Ljk0OUMyMy4wMSA0LjA1NSAyMyA2IDIzIDZzMS0xLjExOSAxLTMuMTM1QzI0LS4wMiAyMSAwIDIxIDBoLTJ2Ni4zNDdBNS44NTMgNS44NTMgMCAwIDAgMTcgNmMtMi4yMDkgMC00IDEuMTE5LTQgMi41czEuNzkxIDIuNSA0IDIuNU0xMC4yOTcgMjAuNDgybC0xLjQ3NS0xLjU4NWE0Ny41NCA0Ny41NCAwIDAgMS0xLjQ0MiAxLjEyOWMtLjMwNy0uMjg4LS45ODktMS4wMTYtMi4wNDUtMi4xODMuOTAyLS44MzYgMS40NzktMS40NjYgMS43MjktMS44OTJzLjM3Ni0uODcxLjM3Ni0xLjMzNmMwLS41OTItLjI3My0xLjE3OC0uODE4LTEuNzU5LS41NDYtLjU4MS0xLjMyOS0uODcxLTIuMzQ5LS44NzEtMS4wMDggMC0xLjc5LjI5My0yLjM0NC44NzktLjU1Ni41ODctLjgzMiAxLjE4MS0uODMyIDEuNzg0IDAgLjgxMy40MTkgMS43NDggMS4yNTYgMi44MDUtLjg0Ny42MTQtMS40NDQgMS4yMDgtMS43OTQgMS43ODRhMy40NjUgMy40NjUgMCAwIDAtLjUyMyAxLjgzM2MwIC44NTcuMzA4IDEuNTYuOTI0IDIuMTA3LjYxNi41NDkgMS40MjMuODIzIDIuNDIuODIzIDEuMTczIDAgMi40NDQtLjM3OSAzLjgxMy0xLjEzN0w4LjIzNSAyNGgyLjgxOWwtMi4wOS0yLjM4MyAxLjMzMy0xLjEzNXptLTYuNzM2LTYuMzg5YTEuMDIgMS4wMiAwIDAgMSAuNzMtLjI4NmMuMzEgMCAuNTU5LjA4NS43NDcuMjU0YS44NDkuODQ5IDAgMCAxIC4yODMuNjU5YzAgLjUxOC0uNDE5IDEuMTEyLTEuMjU3IDEuNzg0LS41MzYtLjY1MS0uODA1LTEuMjMxLS44MDUtMS43NDJhLjkwMS45MDEgMCAwIDEgLjMwMi0uNjY5TTMuNzQgMjJjLS40MjcgMC0uNzc4LS4xMTYtMS4wNTctLjM0OS0uMjc5LS4yMzItLjQxOC0uNDg3LS40MTgtLjc2NiAwLS41OTQuNTA5LTEuMjg4IDEuNTI3LTIuMDgzLjk2OCAxLjEzNCAxLjcxNyAxLjk0NiAyLjI0OCAyLjQzOC0uOTIxLjUwNy0xLjY4Ni43Ni0yLjMuNzZcIi8+PC9zdmc+YCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU1ZHc1xuIiwiY29uc3QgbWFwcGluZyA9IHtcbiAgbmFtZTogJ2EnLFxuICB1bmlmaWVkOiAnYicsXG4gIG5vbl9xdWFsaWZpZWQ6ICdjJyxcbiAgaGFzX2ltZ19hcHBsZTogJ2QnLFxuICBoYXNfaW1nX2dvb2dsZTogJ2UnLFxuICBoYXNfaW1nX3R3aXR0ZXI6ICdmJyxcbiAgaGFzX2ltZ19lbW9qaW9uZTogJ2cnLFxuICBoYXNfaW1nX2ZhY2Vib29rOiAnaCcsXG4gIGhhc19pbWdfbWVzc2VuZ2VyOiAnaScsXG4gIGtleXdvcmRzOiAnaicsXG4gIHNoZWV0OiAnaycsXG4gIGVtb3RpY29uczogJ2wnLFxuICB0ZXh0OiAnbScsXG4gIHNob3J0X25hbWVzOiAnbicsXG4gIGFkZGVkX2luOiAnbycsXG59XG5cbmNvbnN0IGJ1aWxkU2VhcmNoID0gKGVtb2ppKSA9PiB7XG4gIGNvbnN0IHNlYXJjaCA9IFtdXG5cbiAgdmFyIGFkZFRvU2VhcmNoID0gKHN0cmluZ3MsIHNwbGl0KSA9PiB7XG4gICAgaWYgKCFzdHJpbmdzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICA7KEFycmF5LmlzQXJyYXkoc3RyaW5ncykgPyBzdHJpbmdzIDogW3N0cmluZ3NdKS5mb3JFYWNoKChzdHJpbmcpID0+IHtcbiAgICAgIDsoc3BsaXQgPyBzdHJpbmcuc3BsaXQoL1stfF98XFxzXSsvKSA6IFtzdHJpbmddKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgIHMgPSBzLnRvTG93ZXJDYXNlKClcblxuICAgICAgICBpZiAoc2VhcmNoLmluZGV4T2YocykgPT0gLTEpIHtcbiAgICAgICAgICBzZWFyY2gucHVzaChzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBhZGRUb1NlYXJjaChlbW9qaS5zaG9ydF9uYW1lcywgdHJ1ZSlcbiAgYWRkVG9TZWFyY2goZW1vamkubmFtZSwgdHJ1ZSlcbiAgYWRkVG9TZWFyY2goZW1vamkua2V5d29yZHMsIGZhbHNlKVxuICBhZGRUb1NlYXJjaChlbW9qaS5lbW90aWNvbnMsIGZhbHNlKVxuXG4gIHJldHVybiBzZWFyY2guam9pbignLCcpXG59XG5cbmNvbnN0IGNvbXByZXNzID0gKGVtb2ppKSA9PiB7XG4gIGVtb2ppLnNob3J0X25hbWVzID0gZW1vamkuc2hvcnRfbmFtZXMuZmlsdGVyKChzaG9ydF9uYW1lKSA9PiB7XG4gICAgcmV0dXJuIHNob3J0X25hbWUgIT09IGVtb2ppLnNob3J0X25hbWVcbiAgfSlcbiAgZGVsZXRlIGVtb2ppLnNob3J0X25hbWVcblxuICBlbW9qaS5zaGVldCA9IFtlbW9qaS5zaGVldF94LCBlbW9qaS5zaGVldF95XVxuICBkZWxldGUgZW1vamkuc2hlZXRfeFxuICBkZWxldGUgZW1vamkuc2hlZXRfeVxuXG4gIGVtb2ppLmFkZGVkX2luID0gcGFyc2VJbnQoZW1vamkuYWRkZWRfaW4pXG4gIGlmIChlbW9qaS5hZGRlZF9pbiA9PT0gNikge1xuICAgIGRlbGV0ZSBlbW9qaS5hZGRlZF9pblxuICB9XG5cbiAgZm9yIChsZXQga2V5IGluIG1hcHBpbmcpIHtcbiAgICBlbW9qaVttYXBwaW5nW2tleV1dID0gZW1vamlba2V5XVxuICAgIGRlbGV0ZSBlbW9qaVtrZXldXG4gIH1cblxuICBmb3IgKGxldCBrZXkgaW4gZW1vamkpIHtcbiAgICBsZXQgdmFsdWUgPSBlbW9qaVtrZXldXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgIXZhbHVlLmxlbmd0aCkge1xuICAgICAgZGVsZXRlIGVtb2ppW2tleV1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLmxlbmd0aCkge1xuICAgICAgZGVsZXRlIGVtb2ppW2tleV1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBkZWxldGUgZW1vamlba2V5XVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iamVjdCkge1xuICAvLyBSZXRyaWV2ZSB0aGUgcHJvcGVydHkgbmFtZXMgZGVmaW5lZCBvbiBvYmplY3RcbiAgdmFyIHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdClcblxuICAvLyBGcmVlemUgcHJvcGVydGllcyBiZWZvcmUgZnJlZXppbmcgc2VsZlxuICBmb3IgKGxldCBuYW1lIG9mIHByb3BOYW1lcykge1xuICAgIGxldCB2YWx1ZSA9IG9iamVjdFtuYW1lXVxuICAgIG9iamVjdFtuYW1lXSA9XG4gICAgICB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gZGVlcEZyZWV6ZSh2YWx1ZSkgOiB2YWx1ZVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKG9iamVjdClcbn1cblxuY29uc3QgdW5jb21wcmVzcyA9IChkYXRhKSA9PiB7XG4gIGlmICghZGF0YS5jb21wcmVzc2VkKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuICBkYXRhLmNvbXByZXNzZWQgPSBmYWxzZVxuXG4gIGZvciAobGV0IGlkIGluIGRhdGEuZW1vamlzKSB7XG4gICAgbGV0IGVtb2ppID0gZGF0YS5lbW9qaXNbaWRdXG5cbiAgICBmb3IgKGxldCBrZXkgaW4gbWFwcGluZykge1xuICAgICAgZW1vamlba2V5XSA9IGVtb2ppW21hcHBpbmdba2V5XV1cbiAgICAgIGRlbGV0ZSBlbW9qaVttYXBwaW5nW2tleV1dXG4gICAgfVxuXG4gICAgaWYgKCFlbW9qaS5zaG9ydF9uYW1lcykgZW1vamkuc2hvcnRfbmFtZXMgPSBbXVxuICAgIGVtb2ppLnNob3J0X25hbWVzLnVuc2hpZnQoaWQpXG5cbiAgICBlbW9qaS5zaGVldF94ID0gZW1vamkuc2hlZXRbMF1cbiAgICBlbW9qaS5zaGVldF95ID0gZW1vamkuc2hlZXRbMV1cbiAgICBkZWxldGUgZW1vamkuc2hlZXRcblxuICAgIGlmICghZW1vamkudGV4dCkgZW1vamkudGV4dCA9ICcnXG5cbiAgICBpZiAoIWVtb2ppLmFkZGVkX2luKSBlbW9qaS5hZGRlZF9pbiA9IDZcbiAgICBlbW9qaS5hZGRlZF9pbiA9IGVtb2ppLmFkZGVkX2luLnRvRml4ZWQoMSlcblxuICAgIGVtb2ppLnNlYXJjaCA9IGJ1aWxkU2VhcmNoKGVtb2ppKVxuICB9XG4gIGRhdGEgPSBkZWVwRnJlZXplKGRhdGEpXG4gIHJldHVybiBkYXRhXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBidWlsZFNlYXJjaCwgY29tcHJlc3MsIHVuY29tcHJlc3MgfVxuIiwiaW1wb3J0IHsgaW50ZXJzZWN0LCB1bmlmaWVkVG9OYXRpdmUgfSBmcm9tICcuL2luZGV4J1xuaW1wb3J0IHsgdW5jb21wcmVzcywgYnVpbGRTZWFyY2ggfSBmcm9tICcuL2RhdGEnXG5pbXBvcnQgZnJlcXVlbnRseSBmcm9tICcuL2ZyZXF1ZW50bHknXG5cbmNvbnN0IFNIRUVUX0NPTFVNTlMgPSA1MlxuY29uc3QgQ09MT05TX1JFR0VYID0gL14oPzpcXDooW15cXDpdKylcXDopKD86XFw6c2tpbi10b25lLShcXGQpXFw6KT8kL1xuLy8gU2tpbiB0b25lc1xuY29uc3QgU0tJTlMgPSBbJzFGM0ZBJywgJzFGM0ZCJywgJzFGM0ZDJywgJzFGM0ZEJywgJzFGM0ZFJywgJzFGM0ZGJ11cblxuLyoqXG4gKiBFbW9qaSBkYXRhIHN0cnVjdHVyZTpcbiAqIHtcbiAqICAgIFwiY29tcHJlc3NlZFwiOiBmYWxzZSxcbiAqICAgIFwiYWxpYXNlc1wiOiB7XG4gKiAgICAgIGNvbGxpc2lvbjogXCJib29tXCJcbiAqICAgICAgY29va2luZzogXCJmcmllZF9lZ2dcIlxuICogICAgICBlbnZlbG9wZTogXCJlbWFpbFwiXG4gKiAgICAgIGZhY2Vfd2l0aF9maW5nZXJfY292ZXJpbmdfY2xvc2VkX2xpcHM6IFwic2h1c2hpbmdfZmFjZVwiXG4gKiAgICAgIC4uLlxuICogICAgfSxcbiAqICAgIFwiY2F0ZWdvcmllc1wiOiBbIHtcbiAqICAgICAgaWQ6IFwicGVvcGxlXCIsXG4gKiAgICAgIG5hbWU6IFwiU21pbGV5cyAmIFBlb3BsZVwiLFxuICogICAgICBlbW9qaXM6IFsgXCJncmlubmluZ1wiLCBcImdyaW5cIiwgXCJqb3lcIiwgLi4uIF1cbiAqICAgIH0sIHtcbiAqICAgICAgaWQ6IFwibmF0dXJlXCIsXG4gKiAgICAgIG5hbWU6IFwiQW5pbWFscyAmIE5hdHVyZVwiLFxuICogICAgICBlbW9qaXM6IFsgXCJtb25rZXlfZmFjZVwiLCBcIm1vbmV5XCIsIFwiZ29yaWxsYVwiLCAuLi4gXVxuICogICAgfSxcbiAqICAgIC4uLlxuICogICAgXSxcbiAqICAgIFwiZW1vamlzXCI6IFtcbiAqICAgICAgc21pbGV5OiB7XG4gKiAgICAgICAgYWRkZWRfaW46IFwiNi4wXCIsXG4gKiAgICAgICAgZW1vdGljb25zOiBbXCI9KVwiLCBcIj0tKVwiXSxcbiAqICAgICAgICBoYXNfaW1nX2FwcGxlOiB0cnVlLFxuICogICAgICAgIGhhc19pbWdfZW1vamlvbmU6IHRydWUsXG4gKiAgICAgICAgaGFzX2ltZ19mYWNlYm9vazogdHJ1ZSxcbiAqICAgICAgICBoYXNfaW1nX2dvb2dsZTogdHJ1ZSxcbiAqICAgICAgICBoYXNfaW1nX21lc3NlbmdlcjogdHJ1ZSxcbiAqICAgICAgICBoYXNfaW1nX3R3aXR0ZXI6IHRydWUsXG4gKiAgICAgICAga2V5d29yZHM6IFtcImZhY2VcIiwgXCJoYXBweVwiLCBcImpveVwiLCBcImhhaGFcIiwgXCI6RFwiLCBcIjopXCIsIFwic21pbGVcIiwgXCJmdW5ueVwiXSxcbiAqICAgICAgICBuYW1lOiBcIlNtaWxpbmcgRmFjZSB3aXRoIE9wZW4gTW91dGhcIixcbiAqICAgICAgICBub25fcXVhbGlmaWVkOiB1bmRlZmluZWQsXG4gKiAgICAgICAgc2VhcmNoOiBcInNtaWxleSxzbWlsaW5nLGZhY2Usd2l0aCxvcGVuLG1vdXRoLGhhcHB5LGpveSxoYWhhLDpkLDopLHNtaWxlLGZ1bm55LD0pLD0tKVwiLFxuICogICAgICAgIHNoZWV0X3g6IDMwLFxuICogICAgICAgIHNoZWV0X3k6IDI3LFxuICogICAgICAgIHNob3J0X25hbWVzOiBbXCJzbWlsZXlcIl0sXG4gKiAgICAgICAgdGV4dDogXCI6KVwiLFxuICogICAgICAgIHVuaWZpZWQ6IFwiMUY2MDNcIixcbiAqICAgICAgfSwge1xuICogICAgICArMTogeyAgICAvLyBlbW9qaSB3aXRoIHNraW5fdmFyaWF0aW9uc1xuICogICAgICAgICAgLi4uLCAvLyBhbGwgdGhlIHJlZ3VsYXIgZmllbGRzIGFyZSBwcmVzZW50XG4gKiAgICAgICAgICBuYW1lOiBcIlRodW1icyBVcCBTaWduXCIsXG4gKiAgICAgICAgICBzaG9ydF9uYW1lczogKDIpIFtcIisxXCIsIFwidGh1bWJzdXBcIl0sXG4gKiAgICAgICAgICBza2luX3ZhcmlhdGlvbnM6IHtcbiAqICAgICAgICAgICAgMUYzRkI6ICAgICAgICAgICAgIC8vIGVhY2ggdmFyaWF0aW9uIGhhcyBhZGRpdGlvbmFsIHNldCBvZiBmaWVsZHM6XG4gKiAgICAgICAgICAgICAgYWRkZWRfaW46IFwiOC4wXCIsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19hcHBsZTogdHJ1ZSxcbiAqICAgICAgICAgICAgICBoYXNfaW1nX2Vtb2ppb25lOiB0cnVlLFxuICogICAgICAgICAgICAgIGhhc19pbWdfZmFjZWJvb2s6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19nb29nbGU6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19tZXNzZW5nZXI6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ190d2l0dGVyOiB0cnVlLFxuICogICAgICAgICAgICAgIGltYWdlOiBcIjFmNDRkLTFmM2ZiLnBuZ1wiLFxuICogICAgICAgICAgICAgIG5vbl9xdWFsaWZpZWQ6IG51bGwsXG4gKiAgICAgICAgICAgICAgc2hlZXRfeDogMTQsXG4gKiAgICAgICAgICAgICAgc2hlZXRfeTogNTAsXG4gKiAgICAgICAgICAgICAgdW5pZmllZDogXCIxRjQ0RC0xRjNGQlwiLFxuICogICAgICAgICAgICAxRjNGQjoge+KApn0sXG4gKiAgICAgICAgICAgIDFGM0ZDOiB74oCmfSxcbiAqICAgICAgICAgICAgMUYzRkQ6IHvigKZ9LFxuICogICAgICAgICAgICAxRjNGRToge+KApn0sXG4gKiAgICAgICAgICAgIDFGM0ZGOiB74oCmfVxuICogICAgICAgICAgICB9LFxuICogICAgICAgICAgLi4uXG4gKiAgICAgIH0sXG4gKiAgICAgIGE6IHsgIC8vIGVtb2ppIHdpdGggbm9uX3F1YWxpZmllZCBmaWVsZCBzZXRcbiAqICAgICAgICBhZGRlZF9pbjogXCI2LjBcIixcbiAqICAgICAgICBlbW90aWNvbnM6IHVuZGVmaW5lZCxcbiAqICAgICAgICBoYXNfaW1nX2FwcGxlOiB0cnVlLFxuICogICAgICAgIC4uLlxuICogICAgICAgIG5vbl9xdWFsaWZpZWQ6IFwiMUYxNzBcIixcbiAqICAgICAgICB1bmlmaWVkOiBcIjFGMTcwLUZFMEZcIixcbiAqICAgICB9LFxuICogICAgIC4uLlxuICogICBdXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBXcmFwcyByYXcgamFzb24gZW1vamkgZGF0YSwgc2VydmVzIGFzIGRhdGEgc291cmNlIGZvclxuICogZW1vamkgcGlja2VyIGNvbXBvbmVudHMuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogICBpbXBvcnQgZGF0YSBmcm9tICcuLi9kYXRhL2FsbC5qc29uJ1xuICogICBsZXQgaW5kZXggPSBuZXcgRW1vamlJbmRleChkYXRhKVxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEVtb2ppSW5kZXgge1xuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gUmF3IGpzb24gZGF0YSwgc2VlIHRoZSBzdHJ1Y3R1cmUgYWJvdmUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gYWRkaXRpb25hbCBvcHRpb25zLCBhcyBhbiBvYmplY3Q6XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVtb2ppc1RvU2hvd0ZpbHRlciAtIG9wdGlvbmFsLCBmdW5jdGlvbiB0byBmaWx0ZXIgb3V0XG4gICAqICAgc29tZSBlbW9qaXMsIGZ1bmN0aW9uKGVtb2ppKSB7IHJldHVybiB0cnVlfGZhbHNlIH1cbiAgICogICB3aGVyZSBgZW1vamlgIGlzIGFuIHJhdyBlbW9qaSBvYmplY3QsIHNlZSBkYXRhLmVtb2ppcyBhYm92ZS5cbiAgICogQHBhcmFtIHtBcnJheX0gaW5jbHVkZSAtIG9wdGlvbmFsLCBhIGxpc3Qgb2YgY2F0ZWdvcnkgaWRzIHRvIGluY2x1ZGUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGV4Y2x1ZGUgLSBvcHRpb25hbCwgYSBsaXN0IG9mIGNhdGVnb3J5IGlkcyB0byBleGNsdWRlLlxuICAgKiBAcGFyYW0ge0FycmF5fSBjdXN0b20gLSBvcHRpb25hbCwgYSBsaXN0IGN1c3RvbSBlbW9qaXMsIGVhY2ggZW1vamkgaXNcbiAgICogICBhbiBvYmplY3QsIHNlZSBkYXRhLmVtb2ppcyBhYm92ZSBmb3IgZXhhbXBsZXMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhLFxuICAgIHtcbiAgICAgIGVtb2ppc1RvU2hvd0ZpbHRlcixcbiAgICAgIGluY2x1ZGUsXG4gICAgICBleGNsdWRlLFxuICAgICAgY3VzdG9tLFxuICAgICAgcmVjZW50LFxuICAgICAgcmVjZW50TGVuZ3RoID0gMjAsXG4gICAgfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLl9kYXRhID0gdW5jb21wcmVzcyhkYXRhKVxuICAgIC8vIENhbGxiYWNrIHRvIGV4Y2x1ZGUgc3BlY2lmaWMgZW1vamlzXG4gICAgdGhpcy5fZW1vamlzRmlsdGVyID0gZW1vamlzVG9TaG93RmlsdGVyIHx8IG51bGxcbiAgICAvLyBDYXRlZ29yaWVzIHRvIGluY2x1ZGUgLyBleGNsdWRlXG4gICAgdGhpcy5faW5jbHVkZSA9IGluY2x1ZGUgfHwgbnVsbFxuICAgIHRoaXMuX2V4Y2x1ZGUgPSBleGNsdWRlIHx8IG51bGxcbiAgICAvLyBDdXN0b20gZW1vamlzXG4gICAgdGhpcy5fY3VzdG9tID0gY3VzdG9tIHx8IFtdXG4gICAgLy8gUmVjZW50IGVtb2ppc1xuICAgIC8vIFRPRE86IG1ha2UgcGFyYW1ldGVyIGNvbmZpZ3VyYWJsZVxuICAgIHRoaXMuX3JlY2VudCA9IHJlY2VudCB8fCBmcmVxdWVudGx5LmdldChyZWNlbnRMZW5ndGgpXG5cbiAgICB0aGlzLl9lbW9qaXMgPSB7fVxuICAgIHRoaXMuX25hdGl2ZUVtb2ppcyA9IHt9XG4gICAgdGhpcy5fZW1vdGljb25zID0ge31cblxuICAgIHRoaXMuX2NhdGVnb3JpZXMgPSBbXVxuICAgIHRoaXMuX3JlY2VudENhdGVnb3J5ID0geyBpZDogJ3JlY2VudCcsIG5hbWU6ICdSZWNlbnQnLCBlbW9qaXM6IFtdIH1cbiAgICB0aGlzLl9jdXN0b21DYXRlZ29yeSA9IHsgaWQ6ICdjdXN0b20nLCBuYW1lOiAnQ3VzdG9tJywgZW1vamlzOiBbXSB9XG4gICAgdGhpcy5fc2VhcmNoSW5kZXggPSB7fVxuICAgIHRoaXMuYnVpbGRJbmRleCgpXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKVxuICB9XG5cbiAgYnVpbGRJbmRleCgpIHtcbiAgICB0aGlzLl9kYXRhLmNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnlEYXRhKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNDYXRlZ29yeU5lZWRlZChjYXRlZ29yeURhdGEpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbGV0IGNhdGVnb3J5ID0ge1xuICAgICAgICBpZDogY2F0ZWdvcnlEYXRhLmlkLFxuICAgICAgICBuYW1lOiBjYXRlZ29yeURhdGEubmFtZSxcbiAgICAgICAgZW1vamlzOiBbXSxcbiAgICAgIH1cbiAgICAgIGNhdGVnb3J5RGF0YS5lbW9qaXMuZm9yRWFjaCgoZW1vamlJZCkgPT4ge1xuICAgICAgICBsZXQgZW1vamkgPSB0aGlzLmFkZEVtb2ppKGVtb2ppSWQpXG4gICAgICAgIGlmIChlbW9qaSkge1xuICAgICAgICAgIGNhdGVnb3J5LmVtb2ppcy5wdXNoKGVtb2ppKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGNhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdjdXN0b20nKSkge1xuICAgICAgaWYgKHRoaXMuX2N1c3RvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGN1c3RvbUVtb2ppIG9mIHRoaXMuX2N1c3RvbSkge1xuICAgICAgICAgIHRoaXMuYWRkQ3VzdG9tRW1vamkoY3VzdG9tRW1vamkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NhdGVnb3JpZXMucHVzaCh0aGlzLl9jdXN0b21DYXRlZ29yeSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdyZWNlbnQnKSkge1xuICAgICAgaWYgKHRoaXMuX3JlY2VudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fcmVjZW50Lm1hcCgoaWQpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjdXN0b21FbW9qaSBvZiB0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMpIHtcbiAgICAgICAgICAgIGlmIChjdXN0b21FbW9qaS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVjZW50Q2F0ZWdvcnkuZW1vamlzLnB1c2goY3VzdG9tRW1vamkpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5oYXNFbW9qaShpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5wdXNoKHRoaXMuZW1vamkoaWQpKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIEFkZCByZWNlbnQgY2F0ZWdvcnkgdG8gdGhlIHRvcFxuICAgICAgaWYgKHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy51bnNoaWZ0KHRoaXMuX3JlY2VudENhdGVnb3J5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBlbW9qaSBmcm9tIHRoZSBzdHJpbmdcbiAgICovXG4gIGZpbmRFbW9qaShlbW9qaSwgc2tpbikge1xuICAgIC8vIDEuIFBhcnNlIGFzIDplbW9qaV9uYW1lOnNraW4tdG9uZS14eDpcbiAgICBsZXQgbWF0Y2hlcyA9IGVtb2ppLm1hdGNoKENPTE9OU19SRUdFWClcblxuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICBlbW9qaSA9IG1hdGNoZXNbMV1cbiAgICAgIGlmIChtYXRjaGVzWzJdKSB7XG4gICAgICAgIHNraW4gPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVtb2ppIGlzIGFuIGFsaWFzXG4gICAgaWYgKHRoaXMuX2RhdGEuYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShlbW9qaSkpIHtcbiAgICAgIGVtb2ppID0gdGhpcy5fZGF0YS5hbGlhc2VzW2Vtb2ppXVxuICAgIH1cblxuICAgIC8vIDMuIENoZWNrIGlmIHdlIGhhdmUgdGhlIHNwZWNpZmllZCBlbW9qaVxuICAgIGlmICh0aGlzLl9lbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICBsZXQgZW1vamlPYmplY3QgPSB0aGlzLl9lbW9qaXNbZW1vamldXG4gICAgICBpZiAoc2tpbikge1xuICAgICAgICByZXR1cm4gZW1vamlPYmplY3QuZ2V0U2tpbihza2luKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtb2ppT2JqZWN0XG4gICAgfVxuXG4gICAgLy8gNC4gQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgc3BlY2lmaWVkIG5hdGl2ZSBlbW9qaVxuICAgIGlmICh0aGlzLl9uYXRpdmVFbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmF0aXZlRW1vamlzW2Vtb2ppXVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllc1xuICB9XG5cbiAgZW1vamkoZW1vamlJZCkge1xuICAgIGlmICh0aGlzLl9kYXRhLmFsaWFzZXMuaGFzT3duUHJvcGVydHkoZW1vamlJZCkpIHtcbiAgICAgIGVtb2ppSWQgPSB0aGlzLl9kYXRhLmFsaWFzZXNbZW1vamlJZF1cbiAgICB9XG4gICAgbGV0IGVtb2ppID0gdGhpcy5fZW1vamlzW2Vtb2ppSWRdXG4gICAgaWYgKCFlbW9qaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgZW1vamkgYnkgaWQ6ICcgKyBlbW9qaUlkKVxuICAgIH1cbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIGhhc0Vtb2ppKGVtb2ppSWQpIHtcbiAgICBpZiAodGhpcy5fZGF0YS5hbGlhc2VzLmhhc093blByb3BlcnR5KGVtb2ppSWQpKSB7XG4gICAgICBlbW9qaUlkID0gdGhpcy5fZGF0YS5hbGlhc2VzW2Vtb2ppSWRdXG4gICAgfVxuICAgIGlmICh0aGlzLl9lbW9qaXNbZW1vamlJZF0pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbmF0aXZlRW1vamkodW5pY29kZUVtb2ppKSB7XG4gICAgaWYgKHRoaXMuX25hdGl2ZUVtb2ppcy5oYXNPd25Qcm9wZXJ0eSh1bmljb2RlRW1vamkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmF0aXZlRW1vamlzW3VuaWNvZGVFbW9qaV1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHNlYXJjaCh2YWx1ZSwgbWF4UmVzdWx0cykge1xuICAgIG1heFJlc3VsdHMgfHwgKG1heFJlc3VsdHMgPSA3NSlcbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgaWYgKHZhbHVlID09ICctJyB8fCB2YWx1ZSA9PSAnLTEnKSB7XG4gICAgICByZXR1cm4gW3RoaXMuZW1vamkoJy0xJyldXG4gICAgfVxuXG4gICAgbGV0IHZhbHVlcyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcXHN8LHxcXC18X10rLylcbiAgICBsZXQgYWxsUmVzdWx0cyA9IFtdXG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcbiAgICAgIHZhbHVlcyA9IFt2YWx1ZXNbMF0sIHZhbHVlc1sxXV1cbiAgICB9XG5cbiAgICBhbGxSZXN1bHRzID0gdmFsdWVzXG4gICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyBTdGFydCBzZWFyY2hpbiBpbiB0aGUgZ2xvYmFsIGxpc3Qgb2YgZW1vamlzXG4gICAgICAgIGxldCBlbW9qaXMgPSB0aGlzLl9lbW9qaXNcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IHRoaXMuX3NlYXJjaEluZGV4XG4gICAgICAgIGxldCBsZW5ndGggPSAwXG5cbiAgICAgICAgZm9yIChsZXQgY2hhckluZGV4ID0gMDsgY2hhckluZGV4IDwgdmFsdWUubGVuZ3RoOyBjaGFySW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGNoYXIgPSB2YWx1ZVtjaGFySW5kZXhdXG4gICAgICAgICAgbGVuZ3RoKytcblxuICAgICAgICAgIGN1cnJlbnRJbmRleFtjaGFyXSB8fCAoY3VycmVudEluZGV4W2NoYXJdID0ge30pXG4gICAgICAgICAgY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4W2NoYXJdXG5cbiAgICAgICAgICBpZiAoIWN1cnJlbnRJbmRleC5yZXN1bHRzKSB7XG4gICAgICAgICAgICBsZXQgc2NvcmVzID0ge31cbiAgICAgICAgICAgIGN1cnJlbnRJbmRleC5yZXN1bHRzID0gW11cbiAgICAgICAgICAgIGN1cnJlbnRJbmRleC5lbW9qaXMgPSB7fVxuXG4gICAgICAgICAgICBmb3IgKGxldCBlbW9qaUlkIGluIGVtb2ppcykge1xuICAgICAgICAgICAgICBsZXQgZW1vamkgPSBlbW9qaXNbZW1vamlJZF1cbiAgICAgICAgICAgICAgLy8gc2VhcmNoIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyB3aXRoIHdvcmRzLCByZWxhdGVkXG4gICAgICAgICAgICAgIC8vIHRvIHRoZSBlbW9qaSwgZm9yIGV4YW1wbGU6XG4gICAgICAgICAgICAgIC8vIHNlYXJjaDogXCJzbWlsZXksc21pbGluZyxmYWNlLGpveSxoYWhhLDpkLDopLHNtaWxlLGZ1bm55LD0pLD0tKVwiLFxuICAgICAgICAgICAgICBsZXQgc2VhcmNoID0gZW1vamkuX2RhdGEuc2VhcmNoXG4gICAgICAgICAgICAgIGxldCBzdWIgPSB2YWx1ZS5zdWJzdHIoMCwgbGVuZ3RoKVxuICAgICAgICAgICAgICBsZXQgc3ViSW5kZXggPSBzZWFyY2guaW5kZXhPZihzdWIpXG4gICAgICAgICAgICAgIGlmIChzdWJJbmRleCAhPSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBzY29yZSA9IHN1YkluZGV4ICsgMVxuICAgICAgICAgICAgICAgIGlmIChzdWIgPT0gZW1vamlJZCkgc2NvcmUgPSAwXG5cbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXgucmVzdWx0cy5wdXNoKGVtb2ppKVxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleC5lbW9qaXNbZW1vamlJZF0gPSBlbW9qaVxuXG4gICAgICAgICAgICAgICAgc2NvcmVzW2Vtb2ppSWRdID0gc2NvcmVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudEluZGV4LnJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICB2YXIgYVNjb3JlID0gc2NvcmVzW2EuaWRdLFxuICAgICAgICAgICAgICAgIGJTY29yZSA9IHNjb3Jlc1tiLmlkXVxuICAgICAgICAgICAgICByZXR1cm4gYVNjb3JlIC0gYlNjb3JlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbnRpbnVlIHNlYXJjaCBpbiB0aGUgcmVkdWNlZCBzZXQgb2YgZW1vamlzXG4gICAgICAgICAgZW1vamlzID0gY3VycmVudEluZGV4LmVtb2ppc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXgucmVzdWx0c1xuICAgICAgICAvLyBUaGUgXCJmaWx0ZXJcIiBjYWxsIHJlbW92ZXMgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIGFsbFJlc3VsdHNcbiAgICAgICAgLy8gYXJyYXksIGZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIFwidGVzdCBcIiAod2l0aCB0cmFpbGluZyBzcGFjZSksXG4gICAgICAgIC8vIHdlIHdpbGwgZ2V0IFwiW0FycmF5LCB1bmRlZmluZWRdXCIgZm9yIGFsbFJlc3VsdHMgYW5kIGFmdGVyXG4gICAgICAgIC8vIHRoZSBcImZpbHRlclwiIGNhbGwgaXQgd2lsbCB0dXJuIGludG8gXCJbQXJyYXldXCJcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChhKSA9PiBhKVxuXG4gICAgdmFyIHJlc3VsdHMgPSBudWxsXG4gICAgaWYgKGFsbFJlc3VsdHMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzdWx0cyA9IGludGVyc2VjdC5hcHBseShudWxsLCBhbGxSZXN1bHRzKVxuICAgIH0gZWxzZSBpZiAoYWxsUmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdHMgPSBhbGxSZXN1bHRzWzBdXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdHMgPSBbXVxuICAgIH1cbiAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IG1heFJlc3VsdHMpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKDAsIG1heFJlc3VsdHMpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBhZGRDdXN0b21FbW9qaShjdXN0b21FbW9qaSkge1xuICAgIGxldCBlbW9qaURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBjdXN0b21FbW9qaSwge1xuICAgICAgaWQ6IGN1c3RvbUVtb2ppLnNob3J0X25hbWVzWzBdLFxuICAgICAgY3VzdG9tOiB0cnVlLFxuICAgIH0pXG4gICAgaWYgKCFlbW9qaURhdGEuc2VhcmNoKSB7XG4gICAgICBlbW9qaURhdGEuc2VhcmNoID0gYnVpbGRTZWFyY2goZW1vamlEYXRhKVxuICAgIH1cbiAgICBsZXQgZW1vamkgPSBuZXcgRW1vamlEYXRhKGVtb2ppRGF0YSlcbiAgICB0aGlzLl9lbW9qaXNbZW1vamkuaWRdID0gZW1vamlcbiAgICB0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMucHVzaChlbW9qaSlcbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIGFkZEVtb2ppKGVtb2ppSWQpIHtcbiAgICAvLyBXZSBleHBlY3QgdGhlIGNvcnJlY3QgZW1vamkgaWQgdGhhdCBpcyBwcmVzZW50IGluIHRoZSBlbW9qaXMgZGF0YS5cbiAgICBsZXQgZGF0YSA9IHRoaXMuX2RhdGEuZW1vamlzW2Vtb2ppSWRdXG5cbiAgICBpZiAoIXRoaXMuaXNFbW9qaU5lZWRlZChkYXRhKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgbGV0IGVtb2ppID0gbmV3IEVtb2ppRGF0YShkYXRhKVxuICAgIHRoaXMuX2Vtb2ppc1tlbW9qaUlkXSA9IGVtb2ppXG4gICAgaWYgKGVtb2ppLm5hdGl2ZSkge1xuICAgICAgdGhpcy5fbmF0aXZlRW1vamlzW2Vtb2ppLm5hdGl2ZV0gPSBlbW9qaVxuICAgIH1cbiAgICBpZiAoZW1vamkuX3NraW5zKSB7XG4gICAgICBmb3IgKGxldCBpZHggaW4gZW1vamkuX3NraW5zKSB7XG4gICAgICAgIGxldCBza2luID0gZW1vamkuX3NraW5zW2lkeF1cbiAgICAgICAgaWYgKHNraW4ubmF0aXZlKSB7XG4gICAgICAgICAgdGhpcy5fbmF0aXZlRW1vamlzW3NraW4ubmF0aXZlXSA9IHNraW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbW9qaS5lbW90aWNvbnMpIHtcbiAgICAgIGVtb2ppLmVtb3RpY29ucy5mb3JFYWNoKChlbW90aWNvbikgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZW1vdGljb25zW2Vtb3RpY29uXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Vtb3RpY29uc1tlbW90aWNvbl0gPSBlbW9qaUlkXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGluY2x1ZGUgZ2l2ZW4gY2F0ZWdvcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjYXRlZ29yeSAtIFRoZSBjYXRlZ29yeSBvYmplY3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gV2hldGhlciB0byBpbmNsdWRlIHRoZSBlbW9qaS5cbiAgICovXG4gIGlzQ2F0ZWdvcnlOZWVkZWQoY2F0ZWdvcnkpIHtcbiAgICBsZXQgaXNJbmNsdWRlZCA9XG4gICAgICB0aGlzLl9pbmNsdWRlICYmIHRoaXMuX2luY2x1ZGUubGVuZ3RoXG4gICAgICAgID8gdGhpcy5faW5jbHVkZS5pbmRleE9mKGNhdGVnb3J5LmlkKSA+IC0xXG4gICAgICAgIDogdHJ1ZVxuICAgIGxldCBpc0V4Y2x1ZGVkID1cbiAgICAgIHRoaXMuX2V4Y2x1ZGUgJiYgdGhpcy5fZXhjbHVkZS5sZW5ndGhcbiAgICAgICAgPyB0aGlzLl9leGNsdWRlLmluZGV4T2YoY2F0ZWdvcnkuaWQpID4gLTFcbiAgICAgICAgOiBmYWxzZVxuICAgIGlmICghaXNJbmNsdWRlZCB8fCBpc0V4Y2x1ZGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGluY2x1ZGUgZ2l2ZW4gZW1vamkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbW9qaSAtIFRoZSByYXcgZW1vamkgb2JqZWN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSAtIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZW1vamkuXG4gICAqL1xuICBpc0Vtb2ppTmVlZGVkKGVtb2ppKSB7XG4gICAgaWYgKHRoaXMuX2Vtb2ppc0ZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX2Vtb2ppc0ZpbHRlcihlbW9qaSlcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW1vamlEYXRhIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIHRoaXMuX2RhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKVxuICAgIHRoaXMuX3NraW5zID0gbnVsbFxuICAgIGlmICh0aGlzLl9kYXRhLnNraW5fdmFyaWF0aW9ucykge1xuICAgICAgdGhpcy5fc2tpbnMgPSBbXVxuICAgICAgZm9yICh2YXIgc2tpbklkeCBpbiBTS0lOUykge1xuICAgICAgICBsZXQgc2tpbktleSA9IFNLSU5TW3NraW5JZHhdXG4gICAgICAgIGxldCB2YXJpYXRpb25EYXRhID0gdGhpcy5fZGF0YS5za2luX3ZhcmlhdGlvbnNbc2tpbktleV1cbiAgICAgICAgbGV0IHNraW5EYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSlcbiAgICAgICAgZm9yIChsZXQgayBpbiB2YXJpYXRpb25EYXRhKSB7XG4gICAgICAgICAgc2tpbkRhdGFba10gPSB2YXJpYXRpb25EYXRhW2tdXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHNraW5EYXRhLnNraW5fdmFyaWF0aW9uc1xuICAgICAgICB0aGlzLl9za2lucy5wdXNoKG5ldyBFbW9qaURhdGEoc2tpbkRhdGEpKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9zYW5pdGl6ZWQgPSBzYW5pdGl6ZSh0aGlzLl9kYXRhKVxuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLl9zYW5pdGl6ZWQpIHtcbiAgICAgIHRoaXNba2V5XSA9IHRoaXMuX3Nhbml0aXplZFtrZXldXG4gICAgfVxuICAgIHRoaXMuc2hvcnRfbmFtZXMgPSB0aGlzLl9kYXRhLnNob3J0X25hbWVzXG4gICAgdGhpcy5zaG9ydF9uYW1lID0gdGhpcy5fZGF0YS5zaG9ydF9uYW1lc1swXVxuICAgIE9iamVjdC5mcmVlemUodGhpcylcbiAgfVxuXG4gIGdldFNraW4oc2tpbklkeCkge1xuICAgIGlmIChza2luSWR4ICYmIHNraW5JZHggIT0gJ25hdGl2ZScgJiYgdGhpcy5fc2tpbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9za2luc1tza2luSWR4IC0gMV1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGdldFBvc2l0aW9uKCkge1xuICAgIGxldCBtdWx0aXBseSA9IDEwMCAvIChTSEVFVF9DT0xVTU5TIC0gMSksXG4gICAgICB4ID0gTWF0aC5yb3VuZChtdWx0aXBseSAqIHRoaXMuX2RhdGEuc2hlZXRfeCAqIDEwMCkgLyAxMDAsXG4gICAgICB5ID0gTWF0aC5yb3VuZChtdWx0aXBseSAqIHRoaXMuX2RhdGEuc2hlZXRfeSAqIDEwMCkgLyAxMDBcbiAgICByZXR1cm4gYCR7eH0lICR7eX0lYFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbW9qaVZpZXcge1xuICAvKipcbiAgICogZW1vamkgLSBFbW9qaSB0byBkaXNwbGF5XG4gICAqIHNldCAtIHN0cmluZywgZW1vamkgc2V0IG5hbWVcbiAgICogbmF0aXZlIC0gYm9vbGVhbiwgd2hldGhlciB0byByZW5kZXIgbmF0aXZlIGVtb2ppXG4gICAqIGZhbGxiYWNrIC0gZmFsbGJhY2sgZnVuY3Rpb24gdG8gcmVuZGVyIG1pc3NpbmcgZW1vamksIG9wdGlvbmFsXG4gICAqIGVtb2ppVG9vbHRpcCAtIHdldGhlciB3ZSBuZWVkIHRvIHNob3cgdGhlIGVtb2ppIHRvb2x0aXAsIG9wdGlvbmFsXG4gICAqIGVtb2ppU2l6ZSAtIGVtb2ppIHNpemUgaW4gcGl4ZWxzLCBvcHRpb25hbFxuICAgKi9cbiAgY29uc3RydWN0b3IoZW1vamksIHNraW4sIHNldCwgbmF0aXZlLCBmYWxsYmFjaywgZW1vamlUb29sdGlwLCBlbW9qaVNpemUpIHtcbiAgICB0aGlzLl9lbW9qaSA9IGVtb2ppXG4gICAgdGhpcy5fbmF0aXZlID0gbmF0aXZlXG4gICAgdGhpcy5fc2tpbiA9IHNraW5cbiAgICB0aGlzLl9zZXQgPSBzZXRcbiAgICB0aGlzLl9mYWxsYmFjayA9IGZhbGxiYWNrXG5cbiAgICB0aGlzLmNhblJlbmRlciA9IHRoaXMuX2NhblJlbmRlcigpXG4gICAgdGhpcy5jc3NDbGFzcyA9IHRoaXMuX2Nzc0NsYXNzKClcbiAgICB0aGlzLmNzc1N0eWxlID0gdGhpcy5fY3NzU3R5bGUoZW1vamlTaXplKVxuICAgIHRoaXMuY29udGVudCA9IHRoaXMuX2NvbnRlbnQoKVxuICAgIHRoaXMudGl0bGUgPSBlbW9qaVRvb2x0aXAgPT09IHRydWUgPyBlbW9qaS5zaG9ydF9uYW1lIDogbnVsbFxuXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKVxuICB9XG5cbiAgZ2V0RW1vamkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vtb2ppLmdldFNraW4odGhpcy5fc2tpbilcbiAgfVxuXG4gIF9jYW5SZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX2lzQ3VzdG9tKCkgfHwgdGhpcy5faXNOYXRpdmUoKSB8fCB0aGlzLl9oYXNFbW9qaSgpIHx8IHRoaXMuX2ZhbGxiYWNrXG4gICAgKVxuICB9XG5cbiAgX2Nzc0NsYXNzKCkge1xuICAgIHJldHVybiBbJ2Vtb2ppLXNldC0nICsgdGhpcy5fc2V0LCAnZW1vamktdHlwZS0nICsgdGhpcy5fZW1vamlUeXBlKCldXG4gIH1cblxuICBfY3NzU3R5bGUoZW1vamlTaXplKSB7XG4gICAgbGV0IGNzc1N0eWxlID0ge31cbiAgICBpZiAodGhpcy5faXNDdXN0b20oKSkge1xuICAgICAgY3NzU3R5bGUgPSB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ3VybCgnICsgdGhpcy5nZXRFbW9qaSgpLl9kYXRhLmltYWdlVXJsICsgJyknLFxuICAgICAgICBiYWNrZ3JvdW5kU2l6ZTogJzEwMCUnLFxuICAgICAgICB3aWR0aDogZW1vamlTaXplICsgJ3B4JyxcbiAgICAgICAgaGVpZ2h0OiBlbW9qaVNpemUgKyAncHgnLFxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5faGFzRW1vamkoKSAmJiAhdGhpcy5faXNOYXRpdmUoKSkge1xuICAgICAgY3NzU3R5bGUgPSB7XG4gICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogdGhpcy5nZXRFbW9qaSgpLmdldFBvc2l0aW9uKCksXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbW9qaVNpemUpIHtcbiAgICAgIGlmICh0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICAgIC8vIFNldCBmb250LXNpemUgZm9yIG5hdGl2ZSBlbW9qaS5cbiAgICAgICAgY3NzU3R5bGUgPSBPYmplY3QuYXNzaWduKGNzc1N0eWxlLCB7XG4gICAgICAgICAgLy8gZm9udC1zaXplIGlzIHVzZWQgZm9yIG5hdGl2ZSBlbW9qaSB3aGljaCB3ZSBuZWVkXG4gICAgICAgICAgLy8gdG8gc2NhbGUgd2l0aCAwLjggZmFjdG9yIHRvIGhhdmUgdGhlbSBsb29rIGFwcHJveGltYXRlbHlcbiAgICAgICAgICAvLyB0aGUgc2FtZSBzaXplIGFzIGltYWdlLWJhc2VkIGVtb2psLlxuICAgICAgICAgIGZvbnRTaXplOiBNYXRoLnJvdW5kKGVtb2ppU2l6ZSAqIDAuOCAqIDEwKSAvIDEwICsgJ3B4JyxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNldCB3aWR0aC9oZWlnaHQgZm9yIGltYWdlIGVtb2ppLlxuICAgICAgICBjc3NTdHlsZSA9IE9iamVjdC5hc3NpZ24oY3NzU3R5bGUsIHtcbiAgICAgICAgICB3aWR0aDogZW1vamlTaXplICsgJ3B4JyxcbiAgICAgICAgICBoZWlnaHQ6IGVtb2ppU2l6ZSArICdweCcsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjc3NTdHlsZVxuICB9XG5cbiAgX2NvbnRlbnQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQ3VzdG9tKCkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNOYXRpdmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RW1vamkoKS5uYXRpdmVcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hhc0Vtb2ppKCkpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZmFsbGJhY2sgPyB0aGlzLl9mYWxsYmFjayh0aGlzLmdldEVtb2ppKCkpIDogbnVsbFxuICB9XG5cbiAgX2lzTmF0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLl9uYXRpdmVcbiAgfVxuXG4gIF9pc0N1c3RvbSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbW9qaSgpLmN1c3RvbVxuICB9XG5cbiAgX2hhc0Vtb2ppKCkge1xuICAgIGlmICghdGhpcy5nZXRFbW9qaSgpLl9kYXRhKSB7XG4gICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgaGF2ZSBubyBkYXRhLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IGhhc0ltYWdlID0gdGhpcy5nZXRFbW9qaSgpLl9kYXRhWydoYXNfaW1nXycgKyB0aGlzLl9zZXRdXG4gICAgaWYgKGhhc0ltYWdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGhhc19pbWdfeHh4IGluIHRoZSBkYXRhLCB3ZSBhcmUgd29ya2luZyB3aXRoXG4gICAgICAvLyBzcGVjaWZpYyBkYXRhIGZpbGUsIGxpa2UgbWVzc2VuZ2VyLmpzb24sIHNvIHdlIGFzc3VtZSBhbGxcbiAgICAgIC8vIGVtb2ppcyBhcmUgYXZhaWxhYmxlICh0aGUgOnNldCBzZXR0aW5nIGZvciBwaWNrZXIgc2hvdWxkXG4gICAgICAvLyBtYXRjaCB0aGUgZGF0YSBmaWxlKS5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIHVzaW5nIGFsbC5qc29uIGFuZCBjYW4gc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50XG4gICAgLy8gc2V0cyAtIGluIHRoaXMgY2FzZSB0aGUgYGhhc19pbWdfe3NldF9uYW1lfWAgaXMgYSBib29sZWFuIHRoYXRcbiAgICAvLyBpbmRpY2F0ZXMgaWYgdGhlcmUgaXMgc3VjaCBpbWFnZSBvciBub3QgZm9yIGEgZ2l2ZW4gc2V0LlxuICAgIHJldHVybiBoYXNJbWFnZVxuICB9XG5cbiAgX2Vtb2ppVHlwZSgpIHtcbiAgICBpZiAodGhpcy5faXNDdXN0b20oKSkge1xuICAgICAgcmV0dXJuICdjdXN0b20nXG4gICAgfVxuICAgIGlmICh0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gJ25hdGl2ZSdcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hhc0Vtb2ppKCkpIHtcbiAgICAgIHJldHVybiAnaW1hZ2UnXG4gICAgfVxuICAgIHJldHVybiAnZmFsbGJhY2snXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplKGVtb2ppKSB7XG4gIHZhciB7XG4gICAgICBuYW1lLFxuICAgICAgc2hvcnRfbmFtZXMsXG4gICAgICBza2luX3RvbmUsXG4gICAgICBza2luX3ZhcmlhdGlvbnMsXG4gICAgICBlbW90aWNvbnMsXG4gICAgICB1bmlmaWVkLFxuICAgICAgY3VzdG9tLFxuICAgICAgaW1hZ2VVcmwsXG4gICAgfSA9IGVtb2ppLFxuICAgIGlkID0gZW1vamkuaWQgfHwgc2hvcnRfbmFtZXNbMF0sXG4gICAgY29sb25zID0gYDoke2lkfTpgXG5cbiAgaWYgKGN1c3RvbSkge1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICBjb2xvbnMsXG4gICAgICBlbW90aWNvbnMsXG4gICAgICBjdXN0b20sXG4gICAgICBpbWFnZVVybCxcbiAgICB9XG4gIH1cblxuICBpZiAoc2tpbl90b25lKSB7XG4gICAgY29sb25zICs9IGA6c2tpbi10b25lLSR7c2tpbl90b25lfTpgXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkLFxuICAgIG5hbWUsXG4gICAgY29sb25zLFxuICAgIGVtb3RpY29ucyxcbiAgICB1bmlmaWVkOiB1bmlmaWVkLnRvTG93ZXJDYXNlKCksXG4gICAgc2tpbjogc2tpbl90b25lIHx8IChza2luX3ZhcmlhdGlvbnMgPyAxIDogbnVsbCksXG4gICAgbmF0aXZlOiB1bmlmaWVkVG9OYXRpdmUodW5pZmllZCksXG4gIH1cbn1cbiIsImltcG9ydCBzdG9yZSBmcm9tICcuL3N0b3JlJ1xuXG5jb25zdCBERUZBVUxUUyA9IFtcbiAgJysxJyxcbiAgJ2dyaW5uaW5nJyxcbiAgJ2tpc3NpbmdfaGVhcnQnLFxuICAnaGVhcnRfZXllcycsXG4gICdsYXVnaGluZycsXG4gICdzdHVja19vdXRfdG9uZ3VlX3dpbmtpbmdfZXllJyxcbiAgJ3N3ZWF0X3NtaWxlJyxcbiAgJ2pveScsXG4gICdzY3JlYW0nLFxuICAnZGlzYXBwb2ludGVkJyxcbiAgJ3VuYW11c2VkJyxcbiAgJ3dlYXJ5JyxcbiAgJ3NvYicsXG4gICdzdW5nbGFzc2VzJyxcbiAgJ2hlYXJ0JyxcbiAgJ3Bvb3AnLFxuXVxuXG5sZXQgZnJlcXVlbnRseSwgaW5pdGlhbGl6ZWRcbmxldCBkZWZhdWx0cyA9IHt9XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG4gIGluaXRpYWxpemVkID0gdHJ1ZVxuICBmcmVxdWVudGx5ID0gc3RvcmUuZ2V0KCdmcmVxdWVudGx5Jylcbn1cblxuZnVuY3Rpb24gYWRkKGVtb2ppKSB7XG4gIGlmICghaW5pdGlhbGl6ZWQpIGluaXQoKVxuICB2YXIgeyBpZCB9ID0gZW1vamlcblxuICBmcmVxdWVudGx5IHx8IChmcmVxdWVudGx5ID0gZGVmYXVsdHMpXG4gIGZyZXF1ZW50bHlbaWRdIHx8IChmcmVxdWVudGx5W2lkXSA9IDApXG4gIGZyZXF1ZW50bHlbaWRdICs9IDFcblxuICBzdG9yZS5zZXQoJ2xhc3QnLCBpZClcbiAgc3RvcmUuc2V0KCdmcmVxdWVudGx5JywgZnJlcXVlbnRseSlcbn1cblxuZnVuY3Rpb24gZ2V0KG1heE51bWJlcikge1xuICBpZiAoIWluaXRpYWxpemVkKSBpbml0KClcbiAgaWYgKCFmcmVxdWVudGx5KSB7XG4gICAgZGVmYXVsdHMgPSB7fVxuXG4gICAgY29uc3QgcmVzdWx0ID0gW11cblxuICAgIGxldCBkZWZhdWx0TGVuZ3RoID0gTWF0aC5taW4obWF4TnVtYmVyLCBERUZBVUxUUy5sZW5ndGgpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWZhdWx0TGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlZmF1bHRzW0RFRkFVTFRTW2ldXSA9IGRlZmF1bHRMZW5ndGggLSBpXG4gICAgICByZXN1bHQucHVzaChERUZBVUxUU1tpXSlcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBjb25zdCBxdWFudGl0eSA9IG1heE51bWJlclxuICBjb25zdCBmcmVxdWVudGx5S2V5cyA9IFtdXG5cbiAgZm9yIChsZXQga2V5IGluIGZyZXF1ZW50bHkpIHtcbiAgICBpZiAoZnJlcXVlbnRseS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBmcmVxdWVudGx5S2V5cy5wdXNoKGtleSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzb3J0ZWQgPSBmcmVxdWVudGx5S2V5c1xuICAgIC5zb3J0KChhLCBiKSA9PiBmcmVxdWVudGx5W2FdIC0gZnJlcXVlbnRseVtiXSlcbiAgICAucmV2ZXJzZSgpXG4gIGNvbnN0IHNsaWNlZCA9IHNvcnRlZC5zbGljZSgwLCBxdWFudGl0eSlcblxuICBjb25zdCBsYXN0ID0gc3RvcmUuZ2V0KCdsYXN0JylcblxuICBpZiAobGFzdCAmJiBzbGljZWQuaW5kZXhPZihsYXN0KSA9PSAtMSkge1xuICAgIHNsaWNlZC5wb3AoKVxuICAgIHNsaWNlZC5wdXNoKGxhc3QpXG4gIH1cblxuICByZXR1cm4gc2xpY2VkXG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgYWRkLCBnZXQgfVxuIiwiaW1wb3J0IHN0cmluZ0Zyb21Db2RlUG9pbnQgZnJvbSAnLi4vcG9seWZpbGxzL3N0cmluZ0Zyb21Db2RlUG9pbnQnXG5cbmZ1bmN0aW9uIHVuaWZpZWRUb05hdGl2ZSh1bmlmaWVkKSB7XG4gIHZhciB1bmljb2RlcyA9IHVuaWZpZWQuc3BsaXQoJy0nKSxcbiAgICBjb2RlUG9pbnRzID0gdW5pY29kZXMubWFwKCh1KSA9PiBgMHgke3V9YClcblxuICByZXR1cm4gc3RyaW5nRnJvbUNvZGVQb2ludC5hcHBseShudWxsLCBjb2RlUG9pbnRzKVxufVxuXG5mdW5jdGlvbiB1bmlxKGFycikge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYy5pbmRleE9mKGl0ZW0pID09PSAtMSkge1xuICAgICAgYWNjLnB1c2goaXRlbSlcbiAgICB9XG4gICAgcmV0dXJuIGFjY1xuICB9LCBbXSlcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0KGEsIGIpIHtcbiAgY29uc3QgdW5pcUEgPSB1bmlxKGEpXG4gIGNvbnN0IHVuaXFCID0gdW5pcShiKVxuXG4gIHJldHVybiB1bmlxQS5maWx0ZXIoKGl0ZW0pID0+IHVuaXFCLmluZGV4T2YoaXRlbSkgPj0gMClcbn1cblxuZnVuY3Rpb24gZGVlcE1lcmdlKGEsIGIpIHtcbiAgdmFyIG8gPSB7fVxuXG4gIGZvciAobGV0IGtleSBpbiBhKSB7XG4gICAgbGV0IG9yaWdpbmFsVmFsdWUgPSBhW2tleV0sXG4gICAgICB2YWx1ZSA9IG9yaWdpbmFsVmFsdWVcblxuICAgIGlmIChiLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIHZhbHVlID0gYltrZXldXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0gZGVlcE1lcmdlKG9yaWdpbmFsVmFsdWUsIHZhbHVlKVxuICAgIH1cblxuICAgIG9ba2V5XSA9IHZhbHVlXG4gIH1cblxuICByZXR1cm4gb1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vc29uaWNkb2UvbWVhc3VyZS1zY3JvbGxiYXJcbmZ1bmN0aW9uIG1lYXN1cmVTY3JvbGxiYXIoKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT0gJ3VuZGVmaW5lZCcpIHJldHVybiAwXG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG5cbiAgZGl2LnN0eWxlLndpZHRoID0gJzEwMHB4J1xuICBkaXYuc3R5bGUuaGVpZ2h0ID0gJzEwMHB4J1xuICBkaXYuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJ1xuICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gIGRpdi5zdHlsZS50b3AgPSAnLTk5OTlweCdcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdilcbiAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGhcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpXG5cbiAgcmV0dXJuIHNjcm9sbGJhcldpZHRoXG59XG5cbmV4cG9ydCB7IHVuaXEsIGludGVyc2VjdCwgZGVlcE1lcmdlLCB1bmlmaWVkVG9OYXRpdmUsIG1lYXN1cmVTY3JvbGxiYXIgfVxuIiwiY29uc3QgRW1vamlQcm9wcyA9IHtcbiAgbmF0aXZlOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgdG9vbHRpcDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGZhbGxiYWNrOiB7XG4gICAgdHlwZTogRnVuY3Rpb24sXG4gIH0sXG4gIHNraW46IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogMSxcbiAgfSxcbiAgc2V0OiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdhcHBsZScsXG4gIH0sXG4gIGVtb2ppOiB7XG4gICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICByZXF1aXJlZDogdHJ1ZSxcbiAgfSxcbiAgc2l6ZToge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiBudWxsLFxuICB9LFxufVxuXG5jb25zdCBQaWNrZXJQcm9wcyA9IHtcbiAgcGVyTGluZToge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiA5LFxuICB9LFxuICBtYXhTZWFyY2hSZXN1bHRzOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDc1LFxuICB9LFxuICBlbW9qaVNpemU6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogMjQsXG4gIH0sXG4gIHRpdGxlOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdFbW9qaSBNYXJ04oSiJyxcbiAgfSxcbiAgZW1vamk6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJ2RlcGFydG1lbnRfc3RvcmUnLFxuICB9LFxuICBjb2xvcjoge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnI2FlNjVjNScsXG4gIH0sXG4gIHNldDoge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnYXBwbGUnLFxuICB9LFxuICBza2luOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IG51bGwsXG4gIH0sXG4gIGRlZmF1bHRTa2luOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDEsXG4gIH0sXG4gIG5hdGl2ZToge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGVtb2ppVG9vbHRpcDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGF1dG9Gb2N1czoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGkxOG46IHtcbiAgICB0eXBlOiBPYmplY3QsXG4gICAgZGVmYXVsdCgpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH0sXG4gIH0sXG4gIHNob3dQcmV2aWV3OiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBzaG93U2VhcmNoOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBzaG93Q2F0ZWdvcmllczoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgc2hvd1NraW5Ub25lczoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgaW5maW5pdGVTY3JvbGw6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHBpY2tlclN0eWxlczoge1xuICAgIHR5cGU6IE9iamVjdCxcbiAgICBkZWZhdWx0KCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfSxcbiAgfSxcbn1cblxuZXhwb3J0IHsgRW1vamlQcm9wcywgUGlja2VyUHJvcHMgfVxuIiwidmFyIE5BTUVTUEFDRSA9ICdlbW9qaS1tYXJ0J1xuXG5jb25zdCBfSlNPTiA9IEpTT05cblxudmFyIGlzTG9jYWxTdG9yYWdlU3VwcG9ydGVkID1cbiAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2xvY2FsU3RvcmFnZScgaW4gd2luZG93XG5cbmxldCBnZXR0ZXJcbmxldCBzZXR0ZXJcblxuZnVuY3Rpb24gc2V0SGFuZGxlcnMoaGFuZGxlcnMpIHtcbiAgaGFuZGxlcnMgfHwgKGhhbmRsZXJzID0ge30pXG5cbiAgZ2V0dGVyID0gaGFuZGxlcnMuZ2V0dGVyXG4gIHNldHRlciA9IGhhbmRsZXJzLnNldHRlclxufVxuXG5mdW5jdGlvbiBzZXROYW1lc3BhY2UobmFtZXNwYWNlKSB7XG4gIE5BTUVTUEFDRSA9IG5hbWVzcGFjZVxufVxuXG5mdW5jdGlvbiB1cGRhdGUoc3RhdGUpIHtcbiAgZm9yIChsZXQga2V5IGluIHN0YXRlKSB7XG4gICAgbGV0IHZhbHVlID0gc3RhdGVba2V5XVxuICAgIHNldChrZXksIHZhbHVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gIGlmIChzZXR0ZXIpIHtcbiAgICBzZXR0ZXIoa2V5LCB2YWx1ZSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWlzTG9jYWxTdG9yYWdlU3VwcG9ydGVkKSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZVtgJHtOQU1FU1BBQ0V9LiR7a2V5fWBdID0gX0pTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0KGtleSkge1xuICBpZiAoZ2V0dGVyKSB7XG4gICAgcmV0dXJuIGdldHRlcihrZXkpXG4gIH0gZWxzZSB7XG4gICAgaWYgKCFpc0xvY2FsU3RvcmFnZVN1cHBvcnRlZCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIHZhciB2YWx1ZSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2VbYCR7TkFNRVNQQUNFfS4ke2tleX1gXVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHsgdXBkYXRlLCBzZXQsIGdldCwgc2V0TmFtZXNwYWNlLCBzZXRIYW5kbGVycyB9XG4iLCIvLyBodHRwOi8vcGF1bGlyaXNoLmNvbS8yMDExL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtYW5pbWF0aW5nL1xuLy8gaHR0cDovL215Lm9wZXJhLmNvbS9lbW9sbGVyL2Jsb2cvMjAxMS8xMi8yMC9yZXF1ZXN0YW5pbWF0aW9uZnJhbWUtZm9yLXNtYXJ0LWVyLWFuaW1hdGluZ1xuXG4vLyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgcG9seWZpbGwgYnkgRXJpayBNw7ZsbGVyLiBmaXhlcyBmcm9tIFBhdWwgSXJpc2ggYW5kIFRpbm8gWmlqZGVsXG5cbi8vIE1JVCBsaWNlbnNlXG5cbnZhciBpc1dpbmRvd0F2YWlsYWJsZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG5cbmlzV2luZG93QXZhaWxhYmxlICYmXG4gIChmdW5jdGlvbigpIHtcbiAgICB2YXIgbGFzdFRpbWUgPSAwXG4gICAgdmFyIHZlbmRvcnMgPSBbJ21zJywgJ21veicsICd3ZWJraXQnLCAnbyddXG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHZlbmRvcnMubGVuZ3RoICYmICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lOyArK3gpIHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPVxuICAgICAgICB3aW5kb3dbdmVuZG9yc1t4XSArICdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXVxuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID1cbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyAnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnXSB8fFxuICAgICAgICB3aW5kb3dbdmVuZG9yc1t4XSArICdDYW5jZWxSZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXVxuICAgIH1cblxuICAgIGlmICghd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSlcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaywgZWxlbWVudCkge1xuICAgICAgICB2YXIgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgICB2YXIgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKVxuICAgICAgICB2YXIgaWQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFjayhjdXJyVGltZSArIHRpbWVUb0NhbGwpXG4gICAgICAgIH0sIHRpbWVUb0NhbGwpXG5cbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGxcbiAgICAgICAgcmV0dXJuIGlkXG4gICAgICB9XG5cbiAgICBpZiAoIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSlcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChpZClcbiAgICAgIH1cbiAgfSkoKVxuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9FbW9qaU1hcnQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL0Vtb2ppTWFydC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3M/YzlmYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9kb2NzL2FwcC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzdlZTAiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzRjYTMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlP2NlNjciLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0U3ByZWFkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvZG9jcy9hcHAudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9FbW9qaS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL1BpY2tlci52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL1N0YXRpY1BpY2tlci52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0L3NyYy9jb21wb25lbnRzL3ByZXZpZXcudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9zZWFyY2gudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9jc3MvZW1vamktbWFydC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC91bWQvcXVhc2FyLm1hdC5jc3MiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vZG9jcy9hcHAudnVlPzg3M2QiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvcXVhc2FyLWZyYW1ld29yay9kaXN0L3VtZC9xdWFzYXIubWF0LmNzcz8xZTJhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL2RvY3MvYXBwLnZ1ZT85M2MwIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZT8wNTQ1Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL1BpY2tlci52dWU/YzNkNyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9TdGF0aWNQaWNrZXIudnVlP2YwOWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvYW5jaG9ycy52dWU/MzRkYSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWU/NDI0YSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9wcmV2aWV3LnZ1ZT9mNzE4Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWU/MmQyYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9za2lucy52dWU/YzM0OSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL2RvY3MvYXBwLnZ1ZT9hOTY4Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2xpc3RUb1N0eWxlcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9ub2RlX21vZHVsZXMvdnVlLXZpcnR1YWwtc2Nyb2xsZXIvZGlzdC92dWUtdmlydHVhbC1zY3JvbGxlci5lc20uanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vbm9kZV9tb2R1bGVzL3Z1ZS9kaXN0L3Z1ZS5ydW50aW1lLmVzbS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL0Vtb2ppLnZ1ZSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9FbW9qaS52dWU/YzIxYiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9FbW9qaS52dWU/OTRhZCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9QaWNrZXIudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL1BpY2tlci52dWU/MmRkNyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9QaWNrZXIudnVlP2YwZjIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvU3RhdGljUGlja2VyLnZ1ZSIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9TdGF0aWNQaWNrZXIudnVlPzRjMDMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvU3RhdGljUGlja2VyLnZ1ZT83YzBhIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL2FuY2hvcnMudnVlP2QxYTUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvYW5jaG9ycy52dWU/MWI5OCIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9jYXRlZ29yeS52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzNlMzUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvY2F0ZWdvcnkudnVlPzczYjUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvcHJldmlldy52dWU/NWVkMyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9wcmV2aWV3LnZ1ZT9lMzU5Iiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZT9mNTJkIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9jb21wb25lbnRzL3NlYXJjaC52dWU/ZTU4NiIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvY29tcG9uZW50cy9za2lucy52dWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzhiZWIiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2NvbXBvbmVudHMvc2tpbnMudnVlPzk5NWUiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL0Vtb2ppTWFydC8uL3NyYy9wb2x5ZmlsbHMvc3RyaW5nRnJvbUNvZGVQb2ludC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvc3Zncy9pbmRleC5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZW1vamktZGF0YS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvZnJlcXVlbnRseS5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3V0aWxzL3NoYXJlZC1wcm9wcy5qcyIsIndlYnBhY2s6Ly9FbW9qaU1hcnQvLi9zcmMvdXRpbHMvc3RvcmUuanMiLCJ3ZWJwYWNrOi8vRW1vamlNYXJ0Ly4vc3JjL3ZlbmRvci9yYWYtcG9seWZpbGwuanMiXSwibmFtZXMiOlsiVnVlIiwidXNlIiwiUXVhc2FyIiwiZWwiLCJyZW5kZXIiLCJoIiwiQXBwIiwiX1N0cmluZyIsIlN0cmluZyIsImZyb21Db2RlUG9pbnQiLCJzdHJpbmdGcm9tQ29kZVBvaW50IiwiTUFYX1NJWkUiLCJjb2RlVW5pdHMiLCJoaWdoU3Vycm9nYXRlIiwibG93U3Vycm9nYXRlIiwiaW5kZXgiLCJsZW5ndGgiLCJhcmd1bWVudHMiLCJyZXN1bHQiLCJjb2RlUG9pbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIk1hdGgiLCJmbG9vciIsIlJhbmdlRXJyb3IiLCJwdXNoIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJTVkdzIiwiYWN0aXZpdHkiLCJjdXN0b20iLCJmbGFncyIsImZvb2RzIiwibmF0dXJlIiwib2JqZWN0cyIsInBlb3BsZSIsInBsYWNlcyIsInJlY2VudCIsInN5bWJvbHMiLCJtYXBwaW5nIiwibmFtZSIsInVuaWZpZWQiLCJub25fcXVhbGlmaWVkIiwiaGFzX2ltZ19hcHBsZSIsImhhc19pbWdfZ29vZ2xlIiwiaGFzX2ltZ190d2l0dGVyIiwiaGFzX2ltZ19lbW9qaW9uZSIsImhhc19pbWdfZmFjZWJvb2siLCJoYXNfaW1nX21lc3NlbmdlciIsImtleXdvcmRzIiwic2hlZXQiLCJlbW90aWNvbnMiLCJ0ZXh0Iiwic2hvcnRfbmFtZXMiLCJhZGRlZF9pbiIsImJ1aWxkU2VhcmNoIiwiZW1vamkiLCJzZWFyY2giLCJhZGRUb1NlYXJjaCIsInN0cmluZ3MiLCJzcGxpdCIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJzdHJpbmciLCJzIiwidG9Mb3dlckNhc2UiLCJpbmRleE9mIiwiam9pbiIsImNvbXByZXNzIiwiZmlsdGVyIiwic2hvcnRfbmFtZSIsInNoZWV0X3giLCJzaGVldF95IiwicGFyc2VJbnQiLCJrZXkiLCJ2YWx1ZSIsImRlZXBGcmVlemUiLCJvYmplY3QiLCJwcm9wTmFtZXMiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZnJlZXplIiwidW5jb21wcmVzcyIsImRhdGEiLCJjb21wcmVzc2VkIiwiaWQiLCJlbW9qaXMiLCJ1bnNoaWZ0IiwidG9GaXhlZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJTSEVFVF9DT0xVTU5TIiwiQ09MT05TX1JFR0VYIiwiU0tJTlMiLCJFbW9qaUluZGV4IiwiZW1vamlzVG9TaG93RmlsdGVyIiwiaW5jbHVkZSIsImV4Y2x1ZGUiLCJyZWNlbnRMZW5ndGgiLCJfZGF0YSIsIl9lbW9qaXNGaWx0ZXIiLCJfaW5jbHVkZSIsIl9leGNsdWRlIiwiX2N1c3RvbSIsIl9yZWNlbnQiLCJmcmVxdWVudGx5IiwiZ2V0IiwiX2Vtb2ppcyIsIl9uYXRpdmVFbW9qaXMiLCJfZW1vdGljb25zIiwiX2NhdGVnb3JpZXMiLCJfcmVjZW50Q2F0ZWdvcnkiLCJfY3VzdG9tQ2F0ZWdvcnkiLCJfc2VhcmNoSW5kZXgiLCJidWlsZEluZGV4IiwiY2F0ZWdvcmllcyIsImNhdGVnb3J5RGF0YSIsImlzQ2F0ZWdvcnlOZWVkZWQiLCJjYXRlZ29yeSIsImVtb2ppSWQiLCJhZGRFbW9qaSIsImN1c3RvbUVtb2ppIiwiYWRkQ3VzdG9tRW1vamkiLCJtYXAiLCJoYXNFbW9qaSIsInNraW4iLCJtYXRjaGVzIiwibWF0Y2giLCJhbGlhc2VzIiwiaGFzT3duUHJvcGVydHkiLCJlbW9qaU9iamVjdCIsImdldFNraW4iLCJFcnJvciIsInVuaWNvZGVFbW9qaSIsIm1heFJlc3VsdHMiLCJ2YWx1ZXMiLCJhbGxSZXN1bHRzIiwiY3VycmVudEluZGV4IiwiY2hhckluZGV4IiwiY2hhciIsInJlc3VsdHMiLCJzY29yZXMiLCJzdWIiLCJzdWJzdHIiLCJzdWJJbmRleCIsInNjb3JlIiwic29ydCIsImEiLCJiIiwiYVNjb3JlIiwiYlNjb3JlIiwiaW50ZXJzZWN0Iiwic2xpY2UiLCJlbW9qaURhdGEiLCJhc3NpZ24iLCJFbW9qaURhdGEiLCJpc0Vtb2ppTmVlZGVkIiwibmF0aXZlIiwiX3NraW5zIiwiaWR4IiwiZW1vdGljb24iLCJjYXRlZ29yeV9pZCIsImlzSW5jbHVkZWQiLCJpc0V4Y2x1ZGVkIiwic2tpbl92YXJpYXRpb25zIiwic2tpbklkeCIsInNraW5LZXkiLCJ2YXJpYXRpb25EYXRhIiwic2tpbkRhdGEiLCJrIiwiX3Nhbml0aXplZCIsInNhbml0aXplIiwibXVsdGlwbHkiLCJ4Iiwicm91bmQiLCJ5IiwiRW1vamlWaWV3Iiwic2V0IiwiZmFsbGJhY2siLCJlbW9qaVRvb2x0aXAiLCJlbW9qaVNpemUiLCJfZW1vamkiLCJfbmF0aXZlIiwiX3NraW4iLCJfc2V0IiwiX2ZhbGxiYWNrIiwiY2FuUmVuZGVyIiwiX2NhblJlbmRlciIsImNzc0NsYXNzIiwiX2Nzc0NsYXNzIiwiY3NzU3R5bGUiLCJfY3NzU3R5bGUiLCJjb250ZW50IiwiX2NvbnRlbnQiLCJ0aXRsZSIsIl9pc0N1c3RvbSIsIl9pc05hdGl2ZSIsIl9oYXNFbW9qaSIsIl9lbW9qaVR5cGUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJnZXRFbW9qaSIsImltYWdlVXJsIiwiYmFja2dyb3VuZFNpemUiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmRQb3NpdGlvbiIsImdldFBvc2l0aW9uIiwiZm9udFNpemUiLCJoYXNJbWFnZSIsInVuZGVmaW5lZCIsInNraW5fdG9uZSIsImNvbG9ucyIsInVuaWZpZWRUb05hdGl2ZSIsIkRFRkFVTFRTIiwiaW5pdGlhbGl6ZWQiLCJkZWZhdWx0cyIsImluaXQiLCJzdG9yZSIsImFkZCIsIm1heE51bWJlciIsImRlZmF1bHRMZW5ndGgiLCJtaW4iLCJpIiwicXVhbnRpdHkiLCJmcmVxdWVudGx5S2V5cyIsInNvcnRlZCIsInJldmVyc2UiLCJzbGljZWQiLCJsYXN0IiwicG9wIiwidW5pY29kZXMiLCJjb2RlUG9pbnRzIiwidSIsInVuaXEiLCJhcnIiLCJyZWR1Y2UiLCJhY2MiLCJpdGVtIiwidW5pcUEiLCJ1bmlxQiIsImRlZXBNZXJnZSIsIm8iLCJvcmlnaW5hbFZhbHVlIiwibWVhc3VyZVNjcm9sbGJhciIsImRvY3VtZW50IiwiZGl2IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwib3ZlcmZsb3ciLCJwb3NpdGlvbiIsInRvcCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInNjcm9sbGJhcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiRW1vamlQcm9wcyIsInR5cGUiLCJCb29sZWFuIiwiZGVmYXVsdCIsInRvb2x0aXAiLCJGdW5jdGlvbiIsInJlcXVpcmVkIiwic2l6ZSIsIlBpY2tlclByb3BzIiwicGVyTGluZSIsIm1heFNlYXJjaFJlc3VsdHMiLCJjb2xvciIsImRlZmF1bHRTa2luIiwiYXV0b0ZvY3VzIiwiaTE4biIsInNob3dQcmV2aWV3Iiwic2hvd1NlYXJjaCIsInNob3dDYXRlZ29yaWVzIiwic2hvd1NraW5Ub25lcyIsImluZmluaXRlU2Nyb2xsIiwicGlja2VyU3R5bGVzIiwiTkFNRVNQQUNFIiwiX0pTT04iLCJKU09OIiwiaXNMb2NhbFN0b3JhZ2VTdXBwb3J0ZWQiLCJ3aW5kb3ciLCJnZXR0ZXIiLCJzZXR0ZXIiLCJzZXRIYW5kbGVycyIsImhhbmRsZXJzIiwic2V0TmFtZXNwYWNlIiwibmFtZXNwYWNlIiwidXBkYXRlIiwic3RhdGUiLCJsb2NhbFN0b3JhZ2UiLCJzdHJpbmdpZnkiLCJlIiwicGFyc2UiLCJpc1dpbmRvd0F2YWlsYWJsZSIsImxhc3RUaW1lIiwidmVuZG9ycyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiY2FsbGJhY2siLCJlbGVtZW50IiwiY3VyclRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInRpbWVUb0NhbGwiLCJtYXgiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztB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QUFnQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDJCQUEyQixHQUFHLHFCQUFxQiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDhCQUE4QixHQUFHLGNBQWMsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxvQkFBb0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsc0JBQXNCLDhCQUE4QixHQUFHLHNCQUFzQiw4QkFBOEIsR0FBRyxzQkFBc0IsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyxjQUFjLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsY0FBYyw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGVBQWUsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxxQkFBcUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsdUJBQXVCLDhCQUE4QixHQUFHLHVCQUF1Qiw4QkFBOEIsR0FBRyx1QkFBdUIsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyx3QkFBd0IsOEJBQThCLEdBQUcsd0JBQXdCLDhCQUE4QixHQUFHLHdCQUF3Qiw4QkFBOEIsR0FBRyxjQUFjLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxnQkFBZ0IsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsZ0JBQWdCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsbUJBQW1CLDJCQUEyQixHQUFHLG1CQUFtQiw4QkFBOEIsR0FBRyxtQkFBbUIsOEJBQThCLEdBQUcsZUFBZSw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxpQkFBaUIsOEJBQThCLEdBQUcsaUJBQWlCLDhCQUE4QixHQUFHLGlCQUFpQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGdCQUFnQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxrQkFBa0IsOEJBQThCLEdBQUcsa0JBQWtCLDhCQUE4QixHQUFHLGtCQUFrQiw4QkFBOEIsR0FBRyxtQkFB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Q0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLGdDQUFnQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxZQUFZLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxrQkFBa0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFtQyxHQUFHLG9CQUFvQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxZQUFZLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxZQUFZLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxhQUFhLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsWUFBWSxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixnQ0FBZ0MsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGFBQWEsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsaUJBQWlCLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxpQkFBaUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHFCQUFxQixtQ0FBbUMsR0FBRyxxQkFBcUIsbUNBQW1DLEdBQUcscUJBQXFCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsc0JBQXNCLG1DQUFtQyxHQUFHLHNCQUFzQixtQ0FBbUMsR0FBRyxzQkFBc0IsbUNBQW1DLEdBQUcsYUFBYSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLGdCQUFnQixtQ0FBbUMsR0FBRyxnQkFBZ0IsbUNBQW1DLEdBQUcsZ0JBQWdCLG1DQUFtQyxHQUFHLFlBQVksbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsZ0NBQWdDLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsY0FBYyxtQ0FBbUMsR0FBRyxjQUFjLG1DQUFtQyxHQUFHLGNBQWMsbUNBQW1DLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGVBQWUsZ0NBQWdDLEdBQUcsZUFBZSxtQ0FBbUMsR0FBRyxlQUFlLG1DQUFtQyxHQUFHLGlCQUFpQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxtQkFBbUIsbUNBQW1DLEdBQUcsbUJBQW1CLG1DQUFtQyxHQUFHLG1CQUFtQixtQ0FBbUMsR0FBRyxvQkFBb0IsbUNBQW1DLEdBQUcsb0JBQW9CLG1DQUFt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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9ELGNBQWM7O0FBRWxFO0FBQ0E7Ozs7Ozs7Ozs7OztBQzNFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7Ozs7Ozs7O0FDdkx0QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLFlBQVksZUFBZTtBQUMzQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7QUFNQTtBQUNBLGtCQUFrQixZQUFZLEVBQUU7QUFDaEM7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBZ0QsRUFBRSxFQUVyRCxVQUFVLEtBQXFCO0FBQ2xDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQSxtQ0FBbUMsV0FBVzs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztB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QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxXQUFX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QTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxlQUFlO0FBQ25EO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtRkFBbUY7QUFDbkY7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLGVBQWUsMkNBQUc7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYLFNBQVM7O0FBRVQ7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixjQUFjO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUwRTtBQUMzRCxxRUFBTSxFQUFDOzs7Ozs7Ozs7Ozs7OztBQy90RHRCO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxLQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCxPQUFPO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLEtBQXFDO0FBQ3pDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyx1QkFBdUI7QUFDekQsaUNBQWlDLHNCQUFzQjtBQUN2RDtBQUNBLGtCQUFrQjtBQUNsQixNQUFNLElBQXFDO0FBQzNDO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsYUFBb0I7QUFDdEM7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0EsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsT0FBTyxVQUFVLElBQXFDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsR0FBRyxVQUFVLElBQXFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsbUJBQW1CLG1CQUFtQjtBQUN0QywrQkFBK0I7QUFDL0I7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFlBQVk7QUFDOUIsV0FBVztBQUNYO0FBQ0EsR0FBRyxVQUFVLElBQXFDO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE9BQU87QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBLG9DQUFvQztBQUNwQztBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBRVE7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxTQUFTO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QyxxQ0FBcUMsRUFBRTtBQUNwRjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEs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QUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQix1QkFBdUI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFtQjtBQUN4QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxJQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLE9BQU87QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxVQUFVLElBQXFDO0FBQ3BEO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9CQUFvQjtBQUN6QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsOEJBQThCO0FBQzlCLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRLEtBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQSxLQUFLLE1BQU0sRUFFTjtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGVBQWU7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU0sS0FBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLFlBQVksS0FBcUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7OztBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQywyQkFBMkIsRUFBRTtBQUN2RSxLQUFLO0FBQ0w7QUFDQSwwQ0FBMEMsNEJBQTRCLEVBQUU7QUFDeEUsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixlQUFlO0FBQzlDLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwyQkFBMkI7QUFDdEQsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDZDQUE2QyxFQUFFO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsNEJBQTRCLEVBQUU7QUFDbEYsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsK0JBQStCLEVBQUU7QUFDckYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxhQUFhOztBQUUzRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxLQUFxQztBQUMzQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLHFDQUFxQzs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHVDQUF1QyxFQUFFO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QywyQ0FBMkMsRUFBRTtBQUMxRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFxQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxPQUFPO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUMsOEJBQThCLEVBQUU7QUFDckU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQ0FBa0MsdUNBQXVDOztBQUV6RSxxQ0FBcUMsMEJBQTBCOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsZ0JBQWdCO0FBQ3hEO0FBQ0E7QUFDQSxnRUFBZ0Usc0JBQXNCLEVBQUU7QUFDeEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHdCQUF3QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsU0FBUyxVQUFVLElBQXFDO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsMkJBQTJCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELHlCQUF5QixFQUFFO0FBQ2pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsUUFBUSxJQUMrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsS0FDNkI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVlLGtFQUFHLEVBQUM7Ozs7Ozs7Ozs7Ozs7QUM1dlFuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7Ozs7Ozs7Ozs7Ozs7QUNuQkE7QUFBQTtBQUFBO0FBQUE7QUFBb0Y7QUFDM0I7QUFDTDs7O0FBR3BEO0FBQzBGO0FBQzFGLGdCQUFnQiwyR0FBVTtBQUMxQixFQUFFLDJFQUFNO0FBQ1IsRUFBRSxnRkFBTTtBQUNSLEVBQUUseUZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ2UsZ0Y7Ozs7Ozs7Ozs7OztBQ3RDZjtBQUFBO0FBQUEsd0NBQXFLLENBQWdCLHlPQUFHLEVBQUMsQzs7Ozs7Ozs7Ozs7O0FDQXpMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQXFGO0FBQzNCO0FBQ0w7OztBQUdyRDtBQUMwRjtBQUMxRixnQkFBZ0IsMkdBQVU7QUFDMUIsRUFBRSw0RUFBTTtBQUNSLEVBQUUsaUZBQU07QUFDUixFQUFFLDBGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNlLGdGOzs7Ozs7Ozs7Ozs7QUN0Q2Y7QUFBQTtBQUFBLHdDQUFzSyxDQUFnQiwwT0FBRyxFQUFDLEM7Ozs7Ozs7Ozs7OztBQ0ExTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUEyRjtBQUMzQjtBQUNMOzs7QUFHM0Q7QUFDMEY7QUFDMUYsZ0JBQWdCLDJHQUFVO0FBQzFCLEVBQUUsa0ZBQU07QUFDUixFQUFFLHVGQUFNO0FBQ1IsRUFBRSxnR0FBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDZSxnRjs7Ozs7Ozs7Ozs7O0FDdENmO0FBQUE7QUFBQSx3Q0FBNEssQ0FBZ0IsZ1BBQUcsRUFBQyxDOzs7Ozs7Ozs7Ozs7QUNBaE07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBc0Y7QUFDM0I7QUFDTDs7O0FBR3REO0FBQzBGO0FBQzFGLGdCQUFnQiwyR0FBVTtBQUMxQixFQUFFLDZFQUFNO0FBQ1IsRUFBRSxrRkFBTTtBQUNSLEVBQUUsMkZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ2UsZ0Y7Ozs7Ozs7Ozs7OztBQ3RDZjtBQUFBO0FBQUEsd0NBQXVLLENBQWdCLDJPQUFHLEVBQUMsQzs7Ozs7Ozs7Ozs7O0FDQTNMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQXVGO0FBQzNCO0FBQ0w7OztBQUd2RDtBQUMwRjtBQUMxRixnQkFBZ0IsMkdBQVU7QUFDMUIsRUFBRSw4RUFBTTtBQUNSLEVBQUUsbUZBQU07QUFDUixFQUFFLDRGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNlLGdGOzs7Ozs7Ozs7Ozs7QUN0Q2Y7QUFBQTtBQUFBLHdDQUF3SyxDQUFnQiw0T0FBRyxFQUFDLEM7Ozs7Ozs7Ozs7OztBQ0E1TDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDTkE7QUFBQTtBQUFBO0FBQUE7QUFBc0Y7QUFDM0I7QUFDTDs7O0FBR3REO0FBQzBGO0FBQzFGLGdCQUFnQiwyR0FBVTtBQUMxQixFQUFFLDZFQUFNO0FBQ1IsRUFBRSxrRkFBTTtBQUNSLEVBQUUsMkZBQWU7QUFDakI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxJQUFJLEtBQVUsRUFBRSxZQWlCZjtBQUNEO0FBQ2UsZ0Y7Ozs7Ozs7Ozs7OztBQ3RDZjtBQUFBO0FBQUEsd0NBQXVLLENBQWdCLDJPQUFHLEVBQUMsQzs7Ozs7Ozs7Ozs7O0FDQTNMO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztBQ0FBO0FBQUE7QUFBQTtBQUFBO0FBQXFGO0FBQzNCO0FBQ0w7OztBQUdyRDtBQUMwRjtBQUMxRixnQkFBZ0IsMkdBQVU7QUFDMUIsRUFBRSw0RUFBTTtBQUNSLEVBQUUsaUZBQU07QUFDUixFQUFFLDBGQUFlO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsSUFBSSxLQUFVLEVBQUUsWUFpQmY7QUFDRDtBQUNlLGdGOzs7Ozs7Ozs7Ozs7QUN0Q2Y7QUFBQTtBQUFBLHdDQUFzSyxDQUFnQiwwT0FBRyxFQUFDLEM7Ozs7Ozs7Ozs7OztBQ0ExTDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRjtBQUMzQjtBQUNMOzs7QUFHcEQ7QUFDMEY7QUFDMUYsZ0JBQWdCLDJHQUFVO0FBQzFCLEVBQUUsMkVBQU07QUFDUixFQUFFLGdGQUFNO0FBQ1IsRUFBRSx5RkFBZTtBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLElBQUksS0FBVSxFQUFFLFlBaUJmO0FBQ0Q7QUFDZSxnRjs7Ozs7Ozs7Ozs7O0FDdENmO0FBQUE7QUFBQSx3Q0FBcUssQ0FBZ0IseU9BQUcsRUFBQyxDOzs7Ozs7Ozs7Ozs7QUNBekw7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQVdBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZBLElBQU1DLE9BQU8sR0FBR0MsTUFBaEI7QUFFZUQsc0VBQU8sQ0FBQ0UsYUFBUixJQUNiLFNBQVNDLG1CQUFULEdBQStCO0FBQzdCLE1BQUlDLFFBQVEsR0FBRyxNQUFmO0FBQ0EsTUFBSUMsU0FBUyxHQUFHLEVBQWhCO0FBQ0EsTUFBSUMsYUFBSjtBQUNBLE1BQUlDLFlBQUo7QUFDQSxNQUFJQyxLQUFLLEdBQUcsQ0FBQyxDQUFiO0FBQ0EsTUFBSUMsTUFBTSxHQUFHQyxTQUFTLENBQUNELE1BQXZCOztBQUNBLE1BQUksQ0FBQ0EsTUFBTCxFQUFhO0FBQ1gsV0FBTyxFQUFQO0FBQ0Q7O0FBQ0QsTUFBSUUsTUFBTSxHQUFHLEVBQWI7O0FBQ0EsU0FBTyxFQUFFSCxLQUFGLEdBQVVDLE1BQWpCLEVBQXlCO0FBQ3ZCLFFBQUlHLFNBQVMsR0FBR0MsTUFBTSxDQUFDSCxTQUFTLENBQUNGLEtBQUQsQ0FBVixDQUF0Qjs7QUFDQSxRQUNFLENBQUNNLFFBQVEsQ0FBQ0YsU0FBRCxDQUFULElBQXdCO0FBQ3hCQSxhQUFTLEdBQUcsQ0FEWixJQUNpQjtBQUNqQkEsYUFBUyxHQUFHLFFBRlosSUFFd0I7QUFDeEJHLFFBQUksQ0FBQ0MsS0FBTCxDQUFXSixTQUFYLEtBQXlCQSxTQUozQixDQUlxQztBQUpyQyxNQUtFO0FBQ0EsY0FBTUssVUFBVSxDQUFDLHlCQUF5QkwsU0FBMUIsQ0FBaEI7QUFDRDs7QUFDRCxRQUFJQSxTQUFTLElBQUksTUFBakIsRUFBeUI7QUFDdkI7QUFDQVAsZUFBUyxDQUFDYSxJQUFWLENBQWVOLFNBQWY7QUFDRCxLQUhELE1BR087QUFDTDtBQUNBO0FBQ0FBLGVBQVMsSUFBSSxPQUFiO0FBQ0FOLG1CQUFhLEdBQUcsQ0FBQ00sU0FBUyxJQUFJLEVBQWQsSUFBb0IsTUFBcEM7QUFDQUwsa0JBQVksR0FBSUssU0FBUyxHQUFHLEtBQWIsR0FBc0IsTUFBckM7QUFDQVAsZUFBUyxDQUFDYSxJQUFWLENBQWVaLGFBQWYsRUFBOEJDLFlBQTlCO0FBQ0Q7O0FBQ0QsUUFBSUMsS0FBSyxHQUFHLENBQVIsS0FBY0MsTUFBZCxJQUF3QkosU0FBUyxDQUFDSSxNQUFWLEdBQW1CTCxRQUEvQyxFQUF5RDtBQUN2RE8sWUFBTSxJQUFJVixNQUFNLENBQUNrQixZQUFQLENBQW9CQyxLQUFwQixDQUEwQixJQUExQixFQUFnQ2YsU0FBaEMsQ0FBVjtBQUNBQSxlQUFTLENBQUNJLE1BQVYsR0FBbUIsQ0FBbkI7QUFDRDtBQUNGOztBQUNELFNBQU9FLE1BQVA7QUFDRCxDQXZDSCxFOzs7Ozs7Ozs7Ozs7QUNGQTtBQUFBLElBQU1VLElBQUksR0FBRztBQUNYQyxVQUFRLDAwQkFERztBQUdYQyxRQUFNLDhqQkFISztBQUtYQyxPQUFLLGtSQUxNO0FBT1hDLE9BQUssbThCQVBNO0FBU1hDLFFBQU0seXZEQVRLO0FBV1hDLFNBQU8sNGhDQVhJO0FBYVhDLFFBQU0sc2JBYks7QUFlWEMsUUFBTSx1bENBZks7QUFpQlhDLFFBQU0sb1RBakJLO0FBbUJYQyxTQUFPO0FBbkJJLENBQWI7QUFzQmVWLG1FQUFmLEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0QkEsSUFBTVcsT0FBTyxHQUFHO0FBQ2RDLE1BQUksRUFBRSxHQURRO0FBRWRDLFNBQU8sRUFBRSxHQUZLO0FBR2RDLGVBQWEsRUFBRSxHQUhEO0FBSWRDLGVBQWEsRUFBRSxHQUpEO0FBS2RDLGdCQUFjLEVBQUUsR0FMRjtBQU1kQyxpQkFBZSxFQUFFLEdBTkg7QUFPZEMsa0JBQWdCLEVBQUUsR0FQSjtBQVFkQyxrQkFBZ0IsRUFBRSxHQVJKO0FBU2RDLG1CQUFpQixFQUFFLEdBVEw7QUFVZEMsVUFBUSxFQUFFLEdBVkk7QUFXZEMsT0FBSyxFQUFFLEdBWE87QUFZZEMsV0FBUyxFQUFFLEdBWkc7QUFhZEMsTUFBSSxFQUFFLEdBYlE7QUFjZEMsYUFBVyxFQUFFLEdBZEM7QUFlZEMsVUFBUSxFQUFFO0FBZkksQ0FBaEI7O0FBa0JBLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNDLEtBQUQsRUFBVztBQUM3QixNQUFNQyxNQUFNLEdBQUcsRUFBZjs7QUFFQSxNQUFJQyxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDQyxPQUFELEVBQVVDLEtBQVYsRUFBb0I7QUFDcEMsUUFBSSxDQUFDRCxPQUFMLEVBQWM7QUFDWjtBQUNEOztBQUVEO0FBQUMsS0FBQ0UsS0FBSyxDQUFDQyxPQUFOLENBQWNILE9BQWQsSUFBeUJBLE9BQXpCLEdBQW1DLENBQUNBLE9BQUQsQ0FBcEMsRUFBK0NJLE9BQS9DLENBQXVELFVBQUNDLE1BQUQsRUFBWTtBQUNsRTtBQUFDLE9BQUNKLEtBQUssR0FBR0ksTUFBTSxDQUFDSixLQUFQLENBQWEsV0FBYixDQUFILEdBQStCLENBQUNJLE1BQUQsQ0FBckMsRUFBK0NELE9BQS9DLENBQXVELFVBQUNFLENBQUQsRUFBTztBQUM3REEsU0FBQyxHQUFHQSxDQUFDLENBQUNDLFdBQUYsRUFBSjs7QUFFQSxZQUFJVCxNQUFNLENBQUNVLE9BQVAsQ0FBZUYsQ0FBZixLQUFxQixDQUFDLENBQTFCLEVBQTZCO0FBQzNCUixnQkFBTSxDQUFDaEMsSUFBUCxDQUFZd0MsQ0FBWjtBQUNEO0FBQ0YsT0FOQTtBQU9GLEtBUkE7QUFTRixHQWREOztBQWdCQVAsYUFBVyxDQUFDRixLQUFLLENBQUNILFdBQVAsRUFBb0IsSUFBcEIsQ0FBWDtBQUNBSyxhQUFXLENBQUNGLEtBQUssQ0FBQ2hCLElBQVAsRUFBYSxJQUFiLENBQVg7QUFDQWtCLGFBQVcsQ0FBQ0YsS0FBSyxDQUFDUCxRQUFQLEVBQWlCLEtBQWpCLENBQVg7QUFDQVMsYUFBVyxDQUFDRixLQUFLLENBQUNMLFNBQVAsRUFBa0IsS0FBbEIsQ0FBWDtBQUVBLFNBQU9NLE1BQU0sQ0FBQ1csSUFBUCxDQUFZLEdBQVosQ0FBUDtBQUNELENBekJEOztBQTJCQSxJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFDYixLQUFELEVBQVc7QUFDMUJBLE9BQUssQ0FBQ0gsV0FBTixHQUFvQkcsS0FBSyxDQUFDSCxXQUFOLENBQWtCaUIsTUFBbEIsQ0FBeUIsVUFBQ0MsVUFBRCxFQUFnQjtBQUMzRCxXQUFPQSxVQUFVLEtBQUtmLEtBQUssQ0FBQ2UsVUFBNUI7QUFDRCxHQUZtQixDQUFwQjtBQUdBLFNBQU9mLEtBQUssQ0FBQ2UsVUFBYjtBQUVBZixPQUFLLENBQUNOLEtBQU4sR0FBYyxDQUFDTSxLQUFLLENBQUNnQixPQUFQLEVBQWdCaEIsS0FBSyxDQUFDaUIsT0FBdEIsQ0FBZDtBQUNBLFNBQU9qQixLQUFLLENBQUNnQixPQUFiO0FBQ0EsU0FBT2hCLEtBQUssQ0FBQ2lCLE9BQWI7QUFFQWpCLE9BQUssQ0FBQ0YsUUFBTixHQUFpQm9CLFFBQVEsQ0FBQ2xCLEtBQUssQ0FBQ0YsUUFBUCxDQUF6Qjs7QUFDQSxNQUFJRSxLQUFLLENBQUNGLFFBQU4sS0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsV0FBT0UsS0FBSyxDQUFDRixRQUFiO0FBQ0Q7O0FBRUQsT0FBSyxJQUFJcUIsR0FBVCxJQUFnQnBDLE9BQWhCLEVBQXlCO0FBQ3ZCaUIsU0FBSyxDQUFDakIsT0FBTyxDQUFDb0MsR0FBRCxDQUFSLENBQUwsR0FBc0JuQixLQUFLLENBQUNtQixHQUFELENBQTNCO0FBQ0EsV0FBT25CLEtBQUssQ0FBQ21CLEdBQUQsQ0FBWjtBQUNEOztBQUVELE9BQUssSUFBSUEsSUFBVCxJQUFnQm5CLEtBQWhCLEVBQXVCO0FBQ3JCLFFBQUlvQixLQUFLLEdBQUdwQixLQUFLLENBQUNtQixJQUFELENBQWpCOztBQUVBLFFBQUlkLEtBQUssQ0FBQ0MsT0FBTixDQUFjYyxLQUFkLEtBQXdCLENBQUNBLEtBQUssQ0FBQzVELE1BQW5DLEVBQTJDO0FBQ3pDLGFBQU93QyxLQUFLLENBQUNtQixJQUFELENBQVo7QUFDRCxLQUZELE1BRU8sSUFBSSxPQUFPQyxLQUFQLEtBQWlCLFFBQWpCLElBQTZCLENBQUNBLEtBQUssQ0FBQzVELE1BQXhDLEVBQWdEO0FBQ3JELGFBQU93QyxLQUFLLENBQUNtQixJQUFELENBQVo7QUFDRCxLQUZNLE1BRUEsSUFBSUMsS0FBSyxLQUFLLElBQWQsRUFBb0I7QUFDekIsYUFBT3BCLEtBQUssQ0FBQ21CLElBQUQsQ0FBWjtBQUNEO0FBQ0Y7QUFDRixDQS9CRDs7QUFpQ0EsU0FBU0UsVUFBVCxDQUFvQkMsTUFBcEIsRUFBNEI7QUFDMUI7QUFDQSxNQUFJQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsbUJBQVAsQ0FBMkJILE1BQTNCLENBQWhCLENBRjBCLENBSTFCOztBQUowQjtBQUFBO0FBQUE7O0FBQUE7QUFLMUIseUJBQWlCQyxTQUFqQiw4SEFBNEI7QUFBQSxVQUFuQnZDLElBQW1CO0FBQzFCLFVBQUlvQyxLQUFLLEdBQUdFLE1BQU0sQ0FBQ3RDLElBQUQsQ0FBbEI7QUFDQXNDLFlBQU0sQ0FBQ3RDLElBQUQsQ0FBTixHQUNFb0MsS0FBSyxJQUFJLFFBQU9BLEtBQVAsTUFBaUIsUUFBMUIsR0FBcUNDLFVBQVUsQ0FBQ0QsS0FBRCxDQUEvQyxHQUF5REEsS0FEM0Q7QUFFRDtBQVR5QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVUxQixTQUFPSSxNQUFNLENBQUNFLE1BQVAsQ0FBY0osTUFBZCxDQUFQO0FBQ0Q7O0FBRUQsSUFBTUssVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQ0MsSUFBRCxFQUFVO0FBQzNCLE1BQUksQ0FBQ0EsSUFBSSxDQUFDQyxVQUFWLEVBQXNCO0FBQ3BCLFdBQU9ELElBQVA7QUFDRDs7QUFDREEsTUFBSSxDQUFDQyxVQUFMLEdBQWtCLEtBQWxCOztBQUVBLE9BQUssSUFBSUMsRUFBVCxJQUFlRixJQUFJLENBQUNHLE1BQXBCLEVBQTRCO0FBQzFCLFFBQUkvQixLQUFLLEdBQUc0QixJQUFJLENBQUNHLE1BQUwsQ0FBWUQsRUFBWixDQUFaOztBQUVBLFNBQUssSUFBSVgsR0FBVCxJQUFnQnBDLE9BQWhCLEVBQXlCO0FBQ3ZCaUIsV0FBSyxDQUFDbUIsR0FBRCxDQUFMLEdBQWFuQixLQUFLLENBQUNqQixPQUFPLENBQUNvQyxHQUFELENBQVIsQ0FBbEI7QUFDQSxhQUFPbkIsS0FBSyxDQUFDakIsT0FBTyxDQUFDb0MsR0FBRCxDQUFSLENBQVo7QUFDRDs7QUFFRCxRQUFJLENBQUNuQixLQUFLLENBQUNILFdBQVgsRUFBd0JHLEtBQUssQ0FBQ0gsV0FBTixHQUFvQixFQUFwQjtBQUN4QkcsU0FBSyxDQUFDSCxXQUFOLENBQWtCbUMsT0FBbEIsQ0FBMEJGLEVBQTFCO0FBRUE5QixTQUFLLENBQUNnQixPQUFOLEdBQWdCaEIsS0FBSyxDQUFDTixLQUFOLENBQVksQ0FBWixDQUFoQjtBQUNBTSxTQUFLLENBQUNpQixPQUFOLEdBQWdCakIsS0FBSyxDQUFDTixLQUFOLENBQVksQ0FBWixDQUFoQjtBQUNBLFdBQU9NLEtBQUssQ0FBQ04sS0FBYjtBQUVBLFFBQUksQ0FBQ00sS0FBSyxDQUFDSixJQUFYLEVBQWlCSSxLQUFLLENBQUNKLElBQU4sR0FBYSxFQUFiO0FBRWpCLFFBQUksQ0FBQ0ksS0FBSyxDQUFDRixRQUFYLEVBQXFCRSxLQUFLLENBQUNGLFFBQU4sR0FBaUIsQ0FBakI7QUFDckJFLFNBQUssQ0FBQ0YsUUFBTixHQUFpQkUsS0FBSyxDQUFDRixRQUFOLENBQWVtQyxPQUFmLENBQXVCLENBQXZCLENBQWpCO0FBRUFqQyxTQUFLLENBQUNDLE1BQU4sR0FBZUYsV0FBVyxDQUFDQyxLQUFELENBQTFCO0FBQ0Q7O0FBQ0Q0QixNQUFJLEdBQUdQLFVBQVUsQ0FBQ08sSUFBRCxDQUFqQjtBQUNBLFNBQU9BLElBQVA7QUFDRCxDQTlCRDs7QUFnQ0FNLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUFFcEMsYUFBVyxFQUFYQSxXQUFGO0FBQWVjLFVBQVEsRUFBUkEsUUFBZjtBQUF5QmMsWUFBVSxFQUFWQTtBQUF6QixDQUFqQixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzSEE7QUFDQTtBQUNBO0FBRUEsSUFBTVMsYUFBYSxHQUFHLEVBQXRCO0FBQ0EsSUFBTUMsWUFBWSxHQUFHLDJDQUFyQixDLENBQ0E7O0FBQ0EsSUFBTUMsS0FBSyxHQUFHLENBQUMsT0FBRCxFQUFVLE9BQVYsRUFBbUIsT0FBbkIsRUFBNEIsT0FBNUIsRUFBcUMsT0FBckMsRUFBOEMsT0FBOUMsQ0FBZDtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpRkE7Ozs7Ozs7Ozs7O0FBVU8sSUFBTUMsVUFBYjtBQUFBO0FBQUE7QUFDRTs7Ozs7Ozs7Ozs7OztBQWFBLHNCQUNFWCxJQURGLEVBVUU7QUFBQSxtRkFESSxFQUNKO0FBQUEsUUFQRVksa0JBT0YsUUFQRUEsa0JBT0Y7QUFBQSxRQU5FQyxPQU1GLFFBTkVBLE9BTUY7QUFBQSxRQUxFQyxPQUtGLFFBTEVBLE9BS0Y7QUFBQSxRQUpFcEUsTUFJRixRQUpFQSxNQUlGO0FBQUEsUUFIRU8sTUFHRixRQUhFQSxNQUdGO0FBQUEsaUNBRkU4RCxZQUVGO0FBQUEsUUFGRUEsWUFFRixrQ0FGaUIsRUFFakI7O0FBQUE7O0FBQ0EsU0FBS0MsS0FBTCxHQUFhakIseURBQVUsQ0FBQ0MsSUFBRCxDQUF2QixDQURBLENBRUE7O0FBQ0EsU0FBS2lCLGFBQUwsR0FBcUJMLGtCQUFrQixJQUFJLElBQTNDLENBSEEsQ0FJQTs7QUFDQSxTQUFLTSxRQUFMLEdBQWdCTCxPQUFPLElBQUksSUFBM0I7QUFDQSxTQUFLTSxRQUFMLEdBQWdCTCxPQUFPLElBQUksSUFBM0IsQ0FOQSxDQU9BOztBQUNBLFNBQUtNLE9BQUwsR0FBZTFFLE1BQU0sSUFBSSxFQUF6QixDQVJBLENBU0E7QUFDQTs7QUFDQSxTQUFLMkUsT0FBTCxHQUFlcEUsTUFBTSxJQUFJcUUsb0RBQVUsQ0FBQ0MsR0FBWCxDQUFlUixZQUFmLENBQXpCO0FBRUEsU0FBS1MsT0FBTCxHQUFlLEVBQWY7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixFQUFsQjtBQUVBLFNBQUtDLFdBQUwsR0FBbUIsRUFBbkI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCO0FBQUUxQixRQUFFLEVBQUUsUUFBTjtBQUFnQjlDLFVBQUksRUFBRSxRQUF0QjtBQUFnQytDLFlBQU0sRUFBRTtBQUF4QyxLQUF2QjtBQUNBLFNBQUswQixlQUFMLEdBQXVCO0FBQUUzQixRQUFFLEVBQUUsUUFBTjtBQUFnQjlDLFVBQUksRUFBRSxRQUF0QjtBQUFnQytDLFlBQU0sRUFBRTtBQUF4QyxLQUF2QjtBQUNBLFNBQUsyQixZQUFMLEdBQW9CLEVBQXBCO0FBQ0EsU0FBS0MsVUFBTDtBQUNBbkMsVUFBTSxDQUFDRSxNQUFQLENBQWMsSUFBZDtBQUNEOztBQS9DSDtBQUFBO0FBQUEsaUNBaURlO0FBQUE7O0FBQ1gsV0FBS2tCLEtBQUwsQ0FBV2dCLFVBQVgsQ0FBc0JyRCxPQUF0QixDQUE4QixVQUFDc0QsWUFBRCxFQUFrQjtBQUM5QyxZQUFJLENBQUMsS0FBSSxDQUFDQyxnQkFBTCxDQUFzQkQsWUFBWSxDQUFDL0IsRUFBbkMsQ0FBTCxFQUE2QztBQUMzQztBQUNEOztBQUNELFlBQUlpQyxRQUFRLEdBQUc7QUFDYmpDLFlBQUUsRUFBRStCLFlBQVksQ0FBQy9CLEVBREo7QUFFYjlDLGNBQUksRUFBRTZFLFlBQVksQ0FBQzdFLElBRk47QUFHYitDLGdCQUFNLEVBQUU7QUFISyxTQUFmO0FBS0E4QixvQkFBWSxDQUFDOUIsTUFBYixDQUFvQnhCLE9BQXBCLENBQTRCLFVBQUN5RCxPQUFELEVBQWE7QUFDdkMsY0FBSWhFLEtBQUssR0FBRyxLQUFJLENBQUNpRSxRQUFMLENBQWNELE9BQWQsQ0FBWjs7QUFDQSxjQUFJaEUsS0FBSixFQUFXO0FBQ1QrRCxvQkFBUSxDQUFDaEMsTUFBVCxDQUFnQjlELElBQWhCLENBQXFCK0IsS0FBckI7QUFDRDtBQUNGLFNBTEQ7O0FBTUEsWUFBSStELFFBQVEsQ0FBQ2hDLE1BQVQsQ0FBZ0J2RSxNQUFwQixFQUE0QjtBQUMxQixlQUFJLENBQUMrRixXQUFMLENBQWlCdEYsSUFBakIsQ0FBc0I4RixRQUF0QjtBQUNEO0FBQ0YsT0FsQkQ7O0FBb0JBLFVBQUksS0FBS0QsZ0JBQUwsQ0FBc0IsUUFBdEIsQ0FBSixFQUFxQztBQUNuQyxZQUFJLEtBQUtkLE9BQUwsQ0FBYXhGLE1BQWIsR0FBc0IsQ0FBMUIsRUFBNkI7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFDM0IsaUNBQXdCLEtBQUt3RixPQUE3Qiw4SEFBc0M7QUFBQSxrQkFBN0JrQixXQUE2QjtBQUNwQyxtQkFBS0MsY0FBTCxDQUFvQkQsV0FBcEI7QUFDRDtBQUgwQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSTVCOztBQUNELFlBQUksS0FBS1QsZUFBTCxDQUFxQjFCLE1BQXJCLENBQTRCdkUsTUFBaEMsRUFBd0M7QUFDdEMsZUFBSytGLFdBQUwsQ0FBaUJ0RixJQUFqQixDQUFzQixLQUFLd0YsZUFBM0I7QUFDRDtBQUNGOztBQUVELFVBQUksS0FBS0ssZ0JBQUwsQ0FBc0IsUUFBdEIsQ0FBSixFQUFxQztBQUNuQyxZQUFJLEtBQUtiLE9BQUwsQ0FBYXpGLE1BQWpCLEVBQXlCO0FBQ3ZCLGVBQUt5RixPQUFMLENBQWFtQixHQUFiLENBQWlCLFVBQUN0QyxFQUFELEVBQVE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFDdkIsb0NBQXdCLEtBQUksQ0FBQzJCLGVBQUwsQ0FBcUIxQixNQUE3QyxtSUFBcUQ7QUFBQSxvQkFBNUNtQyxZQUE0Qzs7QUFDbkQsb0JBQUlBLFlBQVcsQ0FBQ3BDLEVBQVosS0FBbUJBLEVBQXZCLEVBQTJCO0FBQ3pCLHVCQUFJLENBQUMwQixlQUFMLENBQXFCekIsTUFBckIsQ0FBNEI5RCxJQUE1QixDQUFpQ2lHLFlBQWpDOztBQUNBO0FBQ0Q7QUFDRjtBQU5zQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQU92QixnQkFBSSxLQUFJLENBQUNHLFFBQUwsQ0FBY3ZDLEVBQWQsQ0FBSixFQUF1QjtBQUNyQixtQkFBSSxDQUFDMEIsZUFBTCxDQUFxQnpCLE1BQXJCLENBQTRCOUQsSUFBNUIsQ0FBaUMsS0FBSSxDQUFDK0IsS0FBTCxDQUFXOEIsRUFBWCxDQUFqQztBQUNEOztBQUNEO0FBQ0QsV0FYRDtBQVlELFNBZGtDLENBZW5DOzs7QUFDQSxZQUFJLEtBQUswQixlQUFMLENBQXFCekIsTUFBckIsQ0FBNEJ2RSxNQUFoQyxFQUF3QztBQUN0QyxlQUFLK0YsV0FBTCxDQUFpQnZCLE9BQWpCLENBQXlCLEtBQUt3QixlQUE5QjtBQUNEO0FBQ0Y7QUFDRjtBQUVEOzs7O0FBdkdGO0FBQUE7QUFBQSw4QkEwR1l4RCxLQTFHWixFQTBHbUJzRSxJQTFHbkIsRUEwR3lCO0FBQ3JCO0FBQ0EsVUFBSUMsT0FBTyxHQUFHdkUsS0FBSyxDQUFDd0UsS0FBTixDQUFZbkMsWUFBWixDQUFkOztBQUVBLFVBQUlrQyxPQUFKLEVBQWE7QUFDWHZFLGFBQUssR0FBR3VFLE9BQU8sQ0FBQyxDQUFELENBQWY7O0FBQ0EsWUFBSUEsT0FBTyxDQUFDLENBQUQsQ0FBWCxFQUFnQjtBQUNkRCxjQUFJLEdBQUdwRCxRQUFRLENBQUNxRCxPQUFPLENBQUMsQ0FBRCxDQUFSLEVBQWEsRUFBYixDQUFmO0FBQ0Q7QUFDRixPQVRvQixDQVdyQjs7O0FBQ0EsVUFBSSxLQUFLM0IsS0FBTCxDQUFXNkIsT0FBWCxDQUFtQkMsY0FBbkIsQ0FBa0MxRSxLQUFsQyxDQUFKLEVBQThDO0FBQzVDQSxhQUFLLEdBQUcsS0FBSzRDLEtBQUwsQ0FBVzZCLE9BQVgsQ0FBbUJ6RSxLQUFuQixDQUFSO0FBQ0QsT0Fkb0IsQ0FnQnJCOzs7QUFDQSxVQUFJLEtBQUtvRCxPQUFMLENBQWFzQixjQUFiLENBQTRCMUUsS0FBNUIsQ0FBSixFQUF3QztBQUN0QyxZQUFJMkUsV0FBVyxHQUFHLEtBQUt2QixPQUFMLENBQWFwRCxLQUFiLENBQWxCOztBQUNBLFlBQUlzRSxJQUFKLEVBQVU7QUFDUixpQkFBT0ssV0FBVyxDQUFDQyxPQUFaLENBQW9CTixJQUFwQixDQUFQO0FBQ0Q7O0FBQ0QsZUFBT0ssV0FBUDtBQUNELE9BdkJvQixDQXlCckI7OztBQUNBLFVBQUksS0FBS3RCLGFBQUwsQ0FBbUJxQixjQUFuQixDQUFrQzFFLEtBQWxDLENBQUosRUFBOEM7QUFDNUMsZUFBTyxLQUFLcUQsYUFBTCxDQUFtQnJELEtBQW5CLENBQVA7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDRDtBQXhJSDtBQUFBO0FBQUEsaUNBMEllO0FBQ1gsYUFBTyxLQUFLdUQsV0FBWjtBQUNEO0FBNUlIO0FBQUE7QUFBQSwwQkE4SVFTLE9BOUlSLEVBOElpQjtBQUNiLFVBQUksS0FBS3BCLEtBQUwsQ0FBVzZCLE9BQVgsQ0FBbUJDLGNBQW5CLENBQWtDVixPQUFsQyxDQUFKLEVBQWdEO0FBQzlDQSxlQUFPLEdBQUcsS0FBS3BCLEtBQUwsQ0FBVzZCLE9BQVgsQ0FBbUJULE9BQW5CLENBQVY7QUFDRDs7QUFDRCxVQUFJaEUsS0FBSyxHQUFHLEtBQUtvRCxPQUFMLENBQWFZLE9BQWIsQ0FBWjs7QUFDQSxVQUFJLENBQUNoRSxLQUFMLEVBQVk7QUFDVixjQUFNLElBQUk2RSxLQUFKLENBQVUsK0JBQStCYixPQUF6QyxDQUFOO0FBQ0Q7O0FBQ0QsYUFBT2hFLEtBQVA7QUFDRDtBQXZKSDtBQUFBO0FBQUEsNkJBeUpXZ0UsT0F6SlgsRUF5Sm9CO0FBQ2hCLFVBQUksS0FBS3BCLEtBQUwsQ0FBVzZCLE9BQVgsQ0FBbUJDLGNBQW5CLENBQWtDVixPQUFsQyxDQUFKLEVBQWdEO0FBQzlDQSxlQUFPLEdBQUcsS0FBS3BCLEtBQUwsQ0FBVzZCLE9BQVgsQ0FBbUJULE9BQW5CLENBQVY7QUFDRDs7QUFDRCxVQUFJLEtBQUtaLE9BQUwsQ0FBYVksT0FBYixDQUFKLEVBQTJCO0FBQ3pCLGVBQU8sSUFBUDtBQUNEOztBQUNELGFBQU8sS0FBUDtBQUNEO0FBaktIO0FBQUE7QUFBQSxnQ0FtS2NjLFlBbktkLEVBbUs0QjtBQUN4QixVQUFJLEtBQUt6QixhQUFMLENBQW1CcUIsY0FBbkIsQ0FBa0NJLFlBQWxDLENBQUosRUFBcUQ7QUFDbkQsZUFBTyxLQUFLekIsYUFBTCxDQUFtQnlCLFlBQW5CLENBQVA7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDRDtBQXhLSDtBQUFBO0FBQUEsMkJBMEtTMUQsS0ExS1QsRUEwS2dCMkQsVUExS2hCLEVBMEs0QjtBQUFBOztBQUN4QkEsZ0JBQVUsS0FBS0EsVUFBVSxHQUFHLEVBQWxCLENBQVY7O0FBQ0EsVUFBSSxDQUFDM0QsS0FBSyxDQUFDNUQsTUFBWCxFQUFtQjtBQUNqQixlQUFPLElBQVA7QUFDRDs7QUFDRCxVQUFJNEQsS0FBSyxJQUFJLEdBQVQsSUFBZ0JBLEtBQUssSUFBSSxJQUE3QixFQUFtQztBQUNqQyxlQUFPLENBQUMsS0FBS3BCLEtBQUwsQ0FBVyxJQUFYLENBQUQsQ0FBUDtBQUNEOztBQUVELFVBQUlnRixNQUFNLEdBQUc1RCxLQUFLLENBQUNWLFdBQU4sR0FBb0JOLEtBQXBCLENBQTBCLGNBQTFCLENBQWI7QUFDQSxVQUFJNkUsVUFBVSxHQUFHLEVBQWpCOztBQUVBLFVBQUlELE1BQU0sQ0FBQ3hILE1BQVAsR0FBZ0IsQ0FBcEIsRUFBdUI7QUFDckJ3SCxjQUFNLEdBQUcsQ0FBQ0EsTUFBTSxDQUFDLENBQUQsQ0FBUCxFQUFZQSxNQUFNLENBQUMsQ0FBRCxDQUFsQixDQUFUO0FBQ0Q7O0FBRURDLGdCQUFVLEdBQUdELE1BQU0sQ0FDaEJaLEdBRFUsQ0FDTixVQUFDaEQsS0FBRCxFQUFXO0FBQ2Q7QUFDQSxZQUFJVyxNQUFNLEdBQUcsTUFBSSxDQUFDcUIsT0FBbEI7QUFDQSxZQUFJOEIsWUFBWSxHQUFHLE1BQUksQ0FBQ3hCLFlBQXhCO0FBQ0EsWUFBSWxHLE1BQU0sR0FBRyxDQUFiOztBQUVBLGFBQUssSUFBSTJILFNBQVMsR0FBRyxDQUFyQixFQUF3QkEsU0FBUyxHQUFHL0QsS0FBSyxDQUFDNUQsTUFBMUMsRUFBa0QySCxTQUFTLEVBQTNELEVBQStEO0FBQzdELGNBQU1DLElBQUksR0FBR2hFLEtBQUssQ0FBQytELFNBQUQsQ0FBbEI7QUFDQTNILGdCQUFNO0FBRU4wSCxzQkFBWSxDQUFDRSxJQUFELENBQVosS0FBdUJGLFlBQVksQ0FBQ0UsSUFBRCxDQUFaLEdBQXFCLEVBQTVDO0FBQ0FGLHNCQUFZLEdBQUdBLFlBQVksQ0FBQ0UsSUFBRCxDQUEzQjs7QUFFQSxjQUFJLENBQUNGLFlBQVksQ0FBQ0csT0FBbEIsRUFBMkI7QUFBQTtBQUN6QixrQkFBSUMsTUFBTSxHQUFHLEVBQWI7QUFDQUosMEJBQVksQ0FBQ0csT0FBYixHQUF1QixFQUF2QjtBQUNBSCwwQkFBWSxDQUFDbkQsTUFBYixHQUFzQixFQUF0Qjs7QUFFQSxtQkFBSyxJQUFJaUMsT0FBVCxJQUFvQmpDLE1BQXBCLEVBQTRCO0FBQzFCLG9CQUFJL0IsS0FBSyxHQUFHK0IsTUFBTSxDQUFDaUMsT0FBRCxDQUFsQixDQUQwQixDQUUxQjtBQUNBO0FBQ0E7O0FBQ0Esb0JBQUkvRCxNQUFNLEdBQUdELEtBQUssQ0FBQzRDLEtBQU4sQ0FBWTNDLE1BQXpCO0FBQ0Esb0JBQUlzRixHQUFHLEdBQUduRSxLQUFLLENBQUNvRSxNQUFOLENBQWEsQ0FBYixFQUFnQmhJLE1BQWhCLENBQVY7QUFDQSxvQkFBSWlJLFFBQVEsR0FBR3hGLE1BQU0sQ0FBQ1UsT0FBUCxDQUFlNEUsR0FBZixDQUFmOztBQUNBLG9CQUFJRSxRQUFRLElBQUksQ0FBQyxDQUFqQixFQUFvQjtBQUNsQixzQkFBSUMsS0FBSyxHQUFHRCxRQUFRLEdBQUcsQ0FBdkI7QUFDQSxzQkFBSUYsR0FBRyxJQUFJdkIsT0FBWCxFQUFvQjBCLEtBQUssR0FBRyxDQUFSO0FBRXBCUiw4QkFBWSxDQUFDRyxPQUFiLENBQXFCcEgsSUFBckIsQ0FBMEIrQixLQUExQjtBQUNBa0YsOEJBQVksQ0FBQ25ELE1BQWIsQ0FBb0JpQyxPQUFwQixJQUErQmhFLEtBQS9CO0FBRUFzRix3QkFBTSxDQUFDdEIsT0FBRCxDQUFOLEdBQWtCMEIsS0FBbEI7QUFDRDtBQUNGOztBQUNEUiwwQkFBWSxDQUFDRyxPQUFiLENBQXFCTSxJQUFyQixDQUEwQixVQUFDQyxDQUFELEVBQUlDLENBQUosRUFBVTtBQUNsQyxvQkFBSUMsTUFBTSxHQUFHUixNQUFNLENBQUNNLENBQUMsQ0FBQzlELEVBQUgsQ0FBbkI7QUFBQSxvQkFDRWlFLE1BQU0sR0FBR1QsTUFBTSxDQUFDTyxDQUFDLENBQUMvRCxFQUFILENBRGpCO0FBRUEsdUJBQU9nRSxNQUFNLEdBQUdDLE1BQWhCO0FBQ0QsZUFKRDtBQXZCeUI7QUE0QjFCLFdBbkM0RCxDQXFDN0Q7OztBQUNBaEUsZ0JBQU0sR0FBR21ELFlBQVksQ0FBQ25ELE1BQXRCO0FBQ0Q7O0FBQ0QsZUFBT21ELFlBQVksQ0FBQ0csT0FBcEIsQ0E5Q2MsQ0ErQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDRCxPQXBEVSxFQXFEVnZFLE1BckRVLENBcURILFVBQUM4RSxDQUFEO0FBQUEsZUFBT0EsQ0FBUDtBQUFBLE9BckRHLENBQWI7QUF1REEsVUFBSVAsT0FBTyxHQUFHLElBQWQ7O0FBQ0EsVUFBSUosVUFBVSxDQUFDekgsTUFBWCxHQUFvQixDQUF4QixFQUEyQjtBQUN6QjZILGVBQU8sR0FBR1csaURBQVMsQ0FBQzdILEtBQVYsQ0FBZ0IsSUFBaEIsRUFBc0I4RyxVQUF0QixDQUFWO0FBQ0QsT0FGRCxNQUVPLElBQUlBLFVBQVUsQ0FBQ3pILE1BQWYsRUFBdUI7QUFDNUI2SCxlQUFPLEdBQUdKLFVBQVUsQ0FBQyxDQUFELENBQXBCO0FBQ0QsT0FGTSxNQUVBO0FBQ0xJLGVBQU8sR0FBRyxFQUFWO0FBQ0Q7O0FBQ0QsVUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUM3SCxNQUFSLEdBQWlCdUgsVUFBaEMsRUFBNEM7QUFDMUNNLGVBQU8sR0FBR0EsT0FBTyxDQUFDWSxLQUFSLENBQWMsQ0FBZCxFQUFpQmxCLFVBQWpCLENBQVY7QUFDRDs7QUFDRCxhQUFPTSxPQUFQO0FBQ0Q7QUE3UEg7QUFBQTtBQUFBLG1DQStQaUJuQixXQS9QakIsRUErUDhCO0FBQzFCLFVBQUlnQyxTQUFTLEdBQUcxRSxNQUFNLENBQUMyRSxNQUFQLENBQWMsRUFBZCxFQUFrQmpDLFdBQWxCLEVBQStCO0FBQzdDcEMsVUFBRSxFQUFFb0MsV0FBVyxDQUFDckUsV0FBWixDQUF3QixDQUF4QixDQUR5QztBQUU3Q3ZCLGNBQU0sRUFBRTtBQUZxQyxPQUEvQixDQUFoQjs7QUFJQSxVQUFJLENBQUM0SCxTQUFTLENBQUNqRyxNQUFmLEVBQXVCO0FBQ3JCaUcsaUJBQVMsQ0FBQ2pHLE1BQVYsR0FBbUJGLDBEQUFXLENBQUNtRyxTQUFELENBQTlCO0FBQ0Q7O0FBQ0QsVUFBSWxHLEtBQUssR0FBRyxJQUFJb0csU0FBSixDQUFjRixTQUFkLENBQVo7QUFDQSxXQUFLOUMsT0FBTCxDQUFhcEQsS0FBSyxDQUFDOEIsRUFBbkIsSUFBeUI5QixLQUF6Qjs7QUFDQSxXQUFLeUQsZUFBTCxDQUFxQjFCLE1BQXJCLENBQTRCOUQsSUFBNUIsQ0FBaUMrQixLQUFqQzs7QUFDQSxhQUFPQSxLQUFQO0FBQ0Q7QUEzUUg7QUFBQTtBQUFBLDZCQTZRV2dFLE9BN1FYLEVBNlFvQjtBQUFBOztBQUNoQjtBQUNBLFVBQUlwQyxJQUFJLEdBQUcsS0FBS2dCLEtBQUwsQ0FBV2IsTUFBWCxDQUFrQmlDLE9BQWxCLENBQVg7O0FBRUEsVUFBSSxDQUFDLEtBQUtxQyxhQUFMLENBQW1CekUsSUFBbkIsQ0FBTCxFQUErQjtBQUM3QixlQUFPLEtBQVA7QUFDRDs7QUFFRCxVQUFJNUIsS0FBSyxHQUFHLElBQUlvRyxTQUFKLENBQWN4RSxJQUFkLENBQVo7QUFDQSxXQUFLd0IsT0FBTCxDQUFhWSxPQUFiLElBQXdCaEUsS0FBeEI7O0FBQ0EsVUFBSUEsS0FBSyxDQUFDc0csTUFBVixFQUFrQjtBQUNoQixhQUFLakQsYUFBTCxDQUFtQnJELEtBQUssQ0FBQ3NHLE1BQXpCLElBQW1DdEcsS0FBbkM7QUFDRDs7QUFDRCxVQUFJQSxLQUFLLENBQUN1RyxNQUFWLEVBQWtCO0FBQ2hCLGFBQUssSUFBSUMsR0FBVCxJQUFnQnhHLEtBQUssQ0FBQ3VHLE1BQXRCLEVBQThCO0FBQzVCLGNBQUlqQyxJQUFJLEdBQUd0RSxLQUFLLENBQUN1RyxNQUFOLENBQWFDLEdBQWIsQ0FBWDs7QUFDQSxjQUFJbEMsSUFBSSxDQUFDZ0MsTUFBVCxFQUFpQjtBQUNmLGlCQUFLakQsYUFBTCxDQUFtQmlCLElBQUksQ0FBQ2dDLE1BQXhCLElBQWtDaEMsSUFBbEM7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsVUFBSXRFLEtBQUssQ0FBQ0wsU0FBVixFQUFxQjtBQUNuQkssYUFBSyxDQUFDTCxTQUFOLENBQWdCWSxPQUFoQixDQUF3QixVQUFDa0csUUFBRCxFQUFjO0FBQ3BDLGNBQUksTUFBSSxDQUFDbkQsVUFBTCxDQUFnQm1ELFFBQWhCLENBQUosRUFBK0I7QUFDN0I7QUFDRDs7QUFDRCxnQkFBSSxDQUFDbkQsVUFBTCxDQUFnQm1ELFFBQWhCLElBQTRCekMsT0FBNUI7QUFDRCxTQUxEO0FBTUQ7O0FBQ0QsYUFBT2hFLEtBQVA7QUFDRDtBQUVEOzs7Ozs7O0FBOVNGO0FBQUE7QUFBQSxxQ0FvVG1CMEcsV0FwVG5CLEVBb1RnQztBQUM1QixVQUFJQyxVQUFVLEdBQ1osS0FBSzdELFFBQUwsSUFBaUIsS0FBS0EsUUFBTCxDQUFjdEYsTUFBL0IsR0FDSSxLQUFLc0YsUUFBTCxDQUFjbkMsT0FBZCxDQUFzQitGLFdBQXRCLElBQXFDLENBQUMsQ0FEMUMsR0FFSSxJQUhOO0FBSUEsVUFBSUUsVUFBVSxHQUNaLEtBQUs3RCxRQUFMLElBQWlCLEtBQUtBLFFBQUwsQ0FBY3ZGLE1BQS9CLEdBQ0ksS0FBS3VGLFFBQUwsQ0FBY3BDLE9BQWQsQ0FBc0IrRixXQUF0QixJQUFxQyxDQUFDLENBRDFDLEdBRUksS0FITjs7QUFJQSxVQUFJLENBQUNDLFVBQUQsSUFBZUMsVUFBbkIsRUFBK0I7QUFDN0IsZUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7QUFFRDs7Ozs7OztBQW5VRjtBQUFBO0FBQUEsa0NBeVVnQjVHLEtBelVoQixFQXlVdUI7QUFDbkIsVUFBSSxLQUFLNkMsYUFBVCxFQUF3QjtBQUN0QixlQUFPLEtBQUtBLGFBQUwsQ0FBbUI3QyxLQUFuQixDQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7QUE5VUg7O0FBQUE7QUFBQTtBQWlWTyxJQUFNb0csU0FBYjtBQUFBO0FBQUE7QUFDRSxxQkFBWXhFLElBQVosRUFBa0I7QUFBQTs7QUFDaEIsU0FBS2dCLEtBQUwsR0FBYXBCLE1BQU0sQ0FBQzJFLE1BQVAsQ0FBYyxFQUFkLEVBQWtCdkUsSUFBbEIsQ0FBYjtBQUNBLFNBQUsyRSxNQUFMLEdBQWMsSUFBZDs7QUFDQSxRQUFJLEtBQUszRCxLQUFMLENBQVdpRSxlQUFmLEVBQWdDO0FBQzlCLFdBQUtOLE1BQUwsR0FBYyxFQUFkOztBQUNBLFdBQUssSUFBSU8sT0FBVCxJQUFvQnhFLEtBQXBCLEVBQTJCO0FBQ3pCLFlBQUl5RSxPQUFPLEdBQUd6RSxLQUFLLENBQUN3RSxPQUFELENBQW5CO0FBQ0EsWUFBSUUsYUFBYSxHQUFHLEtBQUtwRSxLQUFMLENBQVdpRSxlQUFYLENBQTJCRSxPQUEzQixDQUFwQjtBQUNBLFlBQUlFLFFBQVEsR0FBR3pGLE1BQU0sQ0FBQzJFLE1BQVAsQ0FBYyxFQUFkLEVBQWtCdkUsSUFBbEIsQ0FBZjs7QUFDQSxhQUFLLElBQUlzRixDQUFULElBQWNGLGFBQWQsRUFBNkI7QUFDM0JDLGtCQUFRLENBQUNDLENBQUQsQ0FBUixHQUFjRixhQUFhLENBQUNFLENBQUQsQ0FBM0I7QUFDRDs7QUFDRCxlQUFPRCxRQUFRLENBQUNKLGVBQWhCOztBQUNBLGFBQUtOLE1BQUwsQ0FBWXRJLElBQVosQ0FBaUIsSUFBSW1JLFNBQUosQ0FBY2EsUUFBZCxDQUFqQjtBQUNEO0FBQ0Y7O0FBQ0QsU0FBS0UsVUFBTCxHQUFrQkMsUUFBUSxDQUFDLEtBQUt4RSxLQUFOLENBQTFCOztBQUNBLFNBQUssSUFBSXpCLEdBQVQsSUFBZ0IsS0FBS2dHLFVBQXJCLEVBQWlDO0FBQy9CLFdBQUtoRyxHQUFMLElBQVksS0FBS2dHLFVBQUwsQ0FBZ0JoRyxHQUFoQixDQUFaO0FBQ0Q7O0FBQ0QsU0FBS3RCLFdBQUwsR0FBbUIsS0FBSytDLEtBQUwsQ0FBVy9DLFdBQTlCO0FBQ0EsU0FBS2tCLFVBQUwsR0FBa0IsS0FBSzZCLEtBQUwsQ0FBVy9DLFdBQVgsQ0FBdUIsQ0FBdkIsQ0FBbEI7QUFDQTJCLFVBQU0sQ0FBQ0UsTUFBUCxDQUFjLElBQWQ7QUFDRDs7QUF4Qkg7QUFBQTtBQUFBLDRCQTBCVW9GLE9BMUJWLEVBMEJtQjtBQUNmLFVBQUlBLE9BQU8sSUFBSUEsT0FBTyxJQUFJLFFBQXRCLElBQWtDLEtBQUtQLE1BQTNDLEVBQW1EO0FBQ2pELGVBQU8sS0FBS0EsTUFBTCxDQUFZTyxPQUFPLEdBQUcsQ0FBdEIsQ0FBUDtBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNEO0FBL0JIO0FBQUE7QUFBQSxrQ0FpQ2dCO0FBQ1osVUFBSU8sUUFBUSxHQUFHLE9BQU9qRixhQUFhLEdBQUcsQ0FBdkIsQ0FBZjtBQUFBLFVBQ0VrRixDQUFDLEdBQUd4SixJQUFJLENBQUN5SixLQUFMLENBQVdGLFFBQVEsR0FBRyxLQUFLekUsS0FBTCxDQUFXNUIsT0FBdEIsR0FBZ0MsR0FBM0MsSUFBa0QsR0FEeEQ7QUFBQSxVQUVFd0csQ0FBQyxHQUFHMUosSUFBSSxDQUFDeUosS0FBTCxDQUFXRixRQUFRLEdBQUcsS0FBS3pFLEtBQUwsQ0FBVzNCLE9BQXRCLEdBQWdDLEdBQTNDLElBQWtELEdBRnhEO0FBR0EsdUJBQVVxRyxDQUFWLGVBQWdCRSxDQUFoQjtBQUNEO0FBdENIOztBQUFBO0FBQUE7QUF5Q08sSUFBTUMsU0FBYjtBQUFBO0FBQUE7QUFDRTs7Ozs7Ozs7QUFRQSxxQkFBWXpILEtBQVosRUFBbUJzRSxJQUFuQixFQUF5Qm9ELEdBQXpCLEVBQThCcEIsTUFBOUIsRUFBc0NxQixRQUF0QyxFQUFnREMsWUFBaEQsRUFBOERDLFNBQTlELEVBQXlFO0FBQUE7O0FBQ3ZFLFNBQUtDLE1BQUwsR0FBYzlILEtBQWQ7QUFDQSxTQUFLK0gsT0FBTCxHQUFlekIsTUFBZjtBQUNBLFNBQUswQixLQUFMLEdBQWExRCxJQUFiO0FBQ0EsU0FBSzJELElBQUwsR0FBWVAsR0FBWjtBQUNBLFNBQUtRLFNBQUwsR0FBaUJQLFFBQWpCO0FBRUEsU0FBS1EsU0FBTCxHQUFpQixLQUFLQyxVQUFMLEVBQWpCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixLQUFLQyxTQUFMLEVBQWhCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixLQUFLQyxTQUFMLENBQWVYLFNBQWYsQ0FBaEI7QUFDQSxTQUFLWSxPQUFMLEdBQWUsS0FBS0MsUUFBTCxFQUFmO0FBQ0EsU0FBS0MsS0FBTCxHQUFhZixZQUFZLEtBQUssSUFBakIsR0FBd0I1SCxLQUFLLENBQUNlLFVBQTlCLEdBQTJDLElBQXhEO0FBRUFTLFVBQU0sQ0FBQ0UsTUFBUCxDQUFjLElBQWQ7QUFDRDs7QUF2Qkg7QUFBQTtBQUFBLCtCQXlCYTtBQUNULGFBQU8sS0FBS29HLE1BQUwsQ0FBWWxELE9BQVosQ0FBb0IsS0FBS29ELEtBQXpCLENBQVA7QUFDRDtBQTNCSDtBQUFBO0FBQUEsaUNBNkJlO0FBQ1gsYUFDRSxLQUFLWSxTQUFMLE1BQW9CLEtBQUtDLFNBQUwsRUFBcEIsSUFBd0MsS0FBS0MsU0FBTCxFQUF4QyxJQUE0RCxLQUFLWixTQURuRTtBQUdEO0FBakNIO0FBQUE7QUFBQSxnQ0FtQ2M7QUFDVixhQUFPLENBQUMsZUFBZSxLQUFLRCxJQUFyQixFQUEyQixnQkFBZ0IsS0FBS2MsVUFBTCxFQUEzQyxDQUFQO0FBQ0Q7QUFyQ0g7QUFBQTtBQUFBLDhCQXVDWWxCLFNBdkNaLEVBdUN1QjtBQUNuQixVQUFJVSxRQUFRLEdBQUcsRUFBZjs7QUFDQSxVQUFJLEtBQUtLLFNBQUwsRUFBSixFQUFzQjtBQUNwQkwsZ0JBQVEsR0FBRztBQUNUUyx5QkFBZSxFQUFFLFNBQVMsS0FBS0MsUUFBTCxHQUFnQnJHLEtBQWhCLENBQXNCc0csUUFBL0IsR0FBMEMsR0FEbEQ7QUFFVEMsd0JBQWMsRUFBRSxNQUZQO0FBR1RDLGVBQUssRUFBRXZCLFNBQVMsR0FBRyxJQUhWO0FBSVR3QixnQkFBTSxFQUFFeEIsU0FBUyxHQUFHO0FBSlgsU0FBWDtBQU1ELE9BUEQsTUFPTyxJQUFJLEtBQUtpQixTQUFMLE1BQW9CLENBQUMsS0FBS0QsU0FBTCxFQUF6QixFQUEyQztBQUNoRE4sZ0JBQVEsR0FBRztBQUNUZSw0QkFBa0IsRUFBRSxLQUFLTCxRQUFMLEdBQWdCTSxXQUFoQjtBQURYLFNBQVg7QUFHRDs7QUFDRCxVQUFJMUIsU0FBSixFQUFlO0FBQ2IsWUFBSSxLQUFLZ0IsU0FBTCxFQUFKLEVBQXNCO0FBQ3BCO0FBQ0FOLGtCQUFRLEdBQUcvRyxNQUFNLENBQUMyRSxNQUFQLENBQWNvQyxRQUFkLEVBQXdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBaUIsb0JBQVEsRUFBRTFMLElBQUksQ0FBQ3lKLEtBQUwsQ0FBV00sU0FBUyxHQUFHLEdBQVosR0FBa0IsRUFBN0IsSUFBbUMsRUFBbkMsR0FBd0M7QUFKakIsV0FBeEIsQ0FBWDtBQU1ELFNBUkQsTUFRTztBQUNMO0FBQ0FVLGtCQUFRLEdBQUcvRyxNQUFNLENBQUMyRSxNQUFQLENBQWNvQyxRQUFkLEVBQXdCO0FBQ2pDYSxpQkFBSyxFQUFFdkIsU0FBUyxHQUFHLElBRGM7QUFFakN3QixrQkFBTSxFQUFFeEIsU0FBUyxHQUFHO0FBRmEsV0FBeEIsQ0FBWDtBQUlEO0FBQ0Y7O0FBQ0QsYUFBT1UsUUFBUDtBQUNEO0FBdkVIO0FBQUE7QUFBQSwrQkF5RWE7QUFDVCxVQUFJLEtBQUtLLFNBQUwsRUFBSixFQUFzQjtBQUNwQixlQUFPLEVBQVA7QUFDRDs7QUFDRCxVQUFJLEtBQUtDLFNBQUwsRUFBSixFQUFzQjtBQUNwQixlQUFPLEtBQUtJLFFBQUwsR0FBZ0IzQyxNQUF2QjtBQUNEOztBQUNELFVBQUksS0FBS3dDLFNBQUwsRUFBSixFQUFzQjtBQUNwQixlQUFPLEVBQVA7QUFDRDs7QUFDRCxhQUFPLEtBQUtaLFNBQUwsR0FBaUIsS0FBS0EsU0FBTCxDQUFlLEtBQUtlLFFBQUwsRUFBZixDQUFqQixHQUFtRCxJQUExRDtBQUNEO0FBcEZIO0FBQUE7QUFBQSxnQ0FzRmM7QUFDVixhQUFPLEtBQUtsQixPQUFaO0FBQ0Q7QUF4Rkg7QUFBQTtBQUFBLGdDQTBGYztBQUNWLGFBQU8sS0FBS2tCLFFBQUwsR0FBZ0IzSyxNQUF2QjtBQUNEO0FBNUZIO0FBQUE7QUFBQSxnQ0E4RmM7QUFDVixVQUFJLENBQUMsS0FBSzJLLFFBQUwsR0FBZ0JyRyxLQUFyQixFQUE0QjtBQUMxQjtBQUNBLGVBQU8sS0FBUDtBQUNEOztBQUNELFVBQU02RyxRQUFRLEdBQUcsS0FBS1IsUUFBTCxHQUFnQnJHLEtBQWhCLENBQXNCLGFBQWEsS0FBS3FGLElBQXhDLENBQWpCOztBQUNBLFVBQUl3QixRQUFRLEtBQUtDLFNBQWpCLEVBQTRCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBTyxJQUFQO0FBQ0QsT0FaUyxDQWFWO0FBQ0E7QUFDQTs7O0FBQ0EsYUFBT0QsUUFBUDtBQUNEO0FBL0dIO0FBQUE7QUFBQSxpQ0FpSGU7QUFDWCxVQUFJLEtBQUtiLFNBQUwsRUFBSixFQUFzQjtBQUNwQixlQUFPLFFBQVA7QUFDRDs7QUFDRCxVQUFJLEtBQUtDLFNBQUwsRUFBSixFQUFzQjtBQUNwQixlQUFPLFFBQVA7QUFDRDs7QUFDRCxVQUFJLEtBQUtDLFNBQUwsRUFBSixFQUFzQjtBQUNwQixlQUFPLE9BQVA7QUFDRDs7QUFDRCxhQUFPLFVBQVA7QUFDRDtBQTVISDs7QUFBQTtBQUFBO0FBK0hPLFNBQVMxQixRQUFULENBQWtCcEgsS0FBbEIsRUFBeUI7QUFBQSxNQUUxQmhCLElBRjBCLEdBVXhCZ0IsS0FWd0IsQ0FFMUJoQixJQUYwQjtBQUFBLE1BRzFCYSxXQUgwQixHQVV4QkcsS0FWd0IsQ0FHMUJILFdBSDBCO0FBQUEsTUFJMUI4SixTQUowQixHQVV4QjNKLEtBVndCLENBSTFCMkosU0FKMEI7QUFBQSxNQUsxQjlDLGVBTDBCLEdBVXhCN0csS0FWd0IsQ0FLMUI2RyxlQUwwQjtBQUFBLE1BTTFCbEgsU0FOMEIsR0FVeEJLLEtBVndCLENBTTFCTCxTQU4wQjtBQUFBLE1BTzFCVixPQVAwQixHQVV4QmUsS0FWd0IsQ0FPMUJmLE9BUDBCO0FBQUEsTUFRMUJYLE1BUjBCLEdBVXhCMEIsS0FWd0IsQ0FRMUIxQixNQVIwQjtBQUFBLE1BUzFCNEssUUFUMEIsR0FVeEJsSixLQVZ3QixDQVMxQmtKLFFBVDBCO0FBQUEsTUFXNUJwSCxFQVg0QixHQVd2QjlCLEtBQUssQ0FBQzhCLEVBQU4sSUFBWWpDLFdBQVcsQ0FBQyxDQUFELENBWEE7QUFBQSxNQVk1QitKLE1BWjRCLGNBWWY5SCxFQVplOztBQWM5QixNQUFJeEQsTUFBSixFQUFZO0FBQ1YsV0FBTztBQUNMd0QsUUFBRSxFQUFGQSxFQURLO0FBRUw5QyxVQUFJLEVBQUpBLElBRks7QUFHTDRLLFlBQU0sRUFBTkEsTUFISztBQUlMakssZUFBUyxFQUFUQSxTQUpLO0FBS0xyQixZQUFNLEVBQU5BLE1BTEs7QUFNTDRLLGNBQVEsRUFBUkE7QUFOSyxLQUFQO0FBUUQ7O0FBRUQsTUFBSVMsU0FBSixFQUFlO0FBQ2JDLFVBQU0seUJBQWtCRCxTQUFsQixNQUFOO0FBQ0Q7O0FBRUQsU0FBTztBQUNMN0gsTUFBRSxFQUFGQSxFQURLO0FBRUw5QyxRQUFJLEVBQUpBLElBRks7QUFHTDRLLFVBQU0sRUFBTkEsTUFISztBQUlMakssYUFBUyxFQUFUQSxTQUpLO0FBS0xWLFdBQU8sRUFBRUEsT0FBTyxDQUFDeUIsV0FBUixFQUxKO0FBTUw0RCxRQUFJLEVBQUVxRixTQUFTLEtBQUs5QyxlQUFlLEdBQUcsQ0FBSCxHQUFPLElBQTNCLENBTlY7QUFPTFAsVUFBTSxFQUFFdUQsK0RBQWUsQ0FBQzVLLE9BQUQ7QUFQbEIsR0FBUDtBQVNELEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbm9CRDtBQUVBLElBQU02SyxRQUFRLEdBQUcsQ0FDZixJQURlLEVBRWYsVUFGZSxFQUdmLGVBSGUsRUFJZixZQUplLEVBS2YsVUFMZSxFQU1mLDhCQU5lLEVBT2YsYUFQZSxFQVFmLEtBUmUsRUFTZixRQVRlLEVBVWYsY0FWZSxFQVdmLFVBWGUsRUFZZixPQVplLEVBYWYsS0FiZSxFQWNmLFlBZGUsRUFlZixPQWZlLEVBZ0JmLE1BaEJlLENBQWpCO0FBbUJBLElBQUk1RyxVQUFKLEVBQWdCNkcsV0FBaEI7QUFDQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjs7QUFFQSxTQUFTQyxJQUFULEdBQWdCO0FBQ2RGLGFBQVcsR0FBRyxJQUFkO0FBQ0E3RyxZQUFVLEdBQUdnSCw4Q0FBSyxDQUFDL0csR0FBTixDQUFVLFlBQVYsQ0FBYjtBQUNEOztBQUVELFNBQVNnSCxHQUFULENBQWFuSyxLQUFiLEVBQW9CO0FBQ2xCLE1BQUksQ0FBQytKLFdBQUwsRUFBa0JFLElBQUk7QUFESixNQUVabkksRUFGWSxHQUVMOUIsS0FGSyxDQUVaOEIsRUFGWTtBQUlsQm9CLFlBQVUsS0FBS0EsVUFBVSxHQUFHOEcsUUFBbEIsQ0FBVjtBQUNBOUcsWUFBVSxDQUFDcEIsRUFBRCxDQUFWLEtBQW1Cb0IsVUFBVSxDQUFDcEIsRUFBRCxDQUFWLEdBQWlCLENBQXBDO0FBQ0FvQixZQUFVLENBQUNwQixFQUFELENBQVYsSUFBa0IsQ0FBbEI7QUFFQW9JLGdEQUFLLENBQUN4QyxHQUFOLENBQVUsTUFBVixFQUFrQjVGLEVBQWxCO0FBQ0FvSSxnREFBSyxDQUFDeEMsR0FBTixDQUFVLFlBQVYsRUFBd0J4RSxVQUF4QjtBQUNEOztBQUVELFNBQVNDLEdBQVQsQ0FBYWlILFNBQWIsRUFBd0I7QUFDdEIsTUFBSSxDQUFDTCxXQUFMLEVBQWtCRSxJQUFJOztBQUN0QixNQUFJLENBQUMvRyxVQUFMLEVBQWlCO0FBQ2Y4RyxZQUFRLEdBQUcsRUFBWDtBQUVBLFFBQU10TSxNQUFNLEdBQUcsRUFBZjtBQUVBLFFBQUkyTSxhQUFhLEdBQUd2TSxJQUFJLENBQUN3TSxHQUFMLENBQVNGLFNBQVQsRUFBb0JOLFFBQVEsQ0FBQ3RNLE1BQTdCLENBQXBCOztBQUNBLFNBQUssSUFBSStNLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdGLGFBQXBCLEVBQW1DRSxDQUFDLEVBQXBDLEVBQXdDO0FBQ3RDUCxjQUFRLENBQUNGLFFBQVEsQ0FBQ1MsQ0FBRCxDQUFULENBQVIsR0FBd0JGLGFBQWEsR0FBR0UsQ0FBeEM7QUFDQTdNLFlBQU0sQ0FBQ08sSUFBUCxDQUFZNkwsUUFBUSxDQUFDUyxDQUFELENBQXBCO0FBQ0Q7O0FBRUQsV0FBTzdNLE1BQVA7QUFDRDs7QUFFRCxNQUFNOE0sUUFBUSxHQUFHSixTQUFqQjtBQUNBLE1BQU1LLGNBQWMsR0FBRyxFQUF2Qjs7QUFFQSxPQUFLLElBQUl0SixHQUFULElBQWdCK0IsVUFBaEIsRUFBNEI7QUFDMUIsUUFBSUEsVUFBVSxDQUFDd0IsY0FBWCxDQUEwQnZELEdBQTFCLENBQUosRUFBb0M7QUFDbENzSixvQkFBYyxDQUFDeE0sSUFBZixDQUFvQmtELEdBQXBCO0FBQ0Q7QUFDRjs7QUFFRCxNQUFNdUosTUFBTSxHQUFHRCxjQUFjLENBQzFCOUUsSUFEWSxDQUNQLFVBQUNDLENBQUQsRUFBSUMsQ0FBSjtBQUFBLFdBQVUzQyxVQUFVLENBQUMwQyxDQUFELENBQVYsR0FBZ0IxQyxVQUFVLENBQUMyQyxDQUFELENBQXBDO0FBQUEsR0FETyxFQUVaOEUsT0FGWSxFQUFmO0FBR0EsTUFBTUMsTUFBTSxHQUFHRixNQUFNLENBQUN6RSxLQUFQLENBQWEsQ0FBYixFQUFnQnVFLFFBQWhCLENBQWY7QUFFQSxNQUFNSyxJQUFJLEdBQUdYLDhDQUFLLENBQUMvRyxHQUFOLENBQVUsTUFBVixDQUFiOztBQUVBLE1BQUkwSCxJQUFJLElBQUlELE1BQU0sQ0FBQ2pLLE9BQVAsQ0FBZWtLLElBQWYsS0FBd0IsQ0FBQyxDQUFyQyxFQUF3QztBQUN0Q0QsVUFBTSxDQUFDRSxHQUFQO0FBQ0FGLFVBQU0sQ0FBQzNNLElBQVAsQ0FBWTRNLElBQVo7QUFDRDs7QUFFRCxTQUFPRCxNQUFQO0FBQ0Q7O0FBRWM7QUFBRVQsS0FBRyxFQUFIQSxHQUFGO0FBQU9oSCxLQUFHLEVBQUhBO0FBQVAsQ0FBZixFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakZBOztBQUVBLFNBQVMwRyxlQUFULENBQXlCNUssT0FBekIsRUFBa0M7QUFDaEMsTUFBSThMLFFBQVEsR0FBRzlMLE9BQU8sQ0FBQ21CLEtBQVIsQ0FBYyxHQUFkLENBQWY7QUFBQSxNQUNFNEssVUFBVSxHQUFHRCxRQUFRLENBQUMzRyxHQUFULENBQWEsVUFBQzZHLENBQUQ7QUFBQSx1QkFBWUEsQ0FBWjtBQUFBLEdBQWIsQ0FEZjtBQUdBLFNBQU8vTixzRUFBbUIsQ0FBQ2lCLEtBQXBCLENBQTBCLElBQTFCLEVBQWdDNk0sVUFBaEMsQ0FBUDtBQUNEOztBQUVELFNBQVNFLElBQVQsQ0FBY0MsR0FBZCxFQUFtQjtBQUNqQixTQUFPQSxHQUFHLENBQUNDLE1BQUosQ0FBVyxVQUFDQyxHQUFELEVBQU1DLElBQU4sRUFBZTtBQUMvQixRQUFJRCxHQUFHLENBQUMxSyxPQUFKLENBQVkySyxJQUFaLE1BQXNCLENBQUMsQ0FBM0IsRUFBOEI7QUFDNUJELFNBQUcsQ0FBQ3BOLElBQUosQ0FBU3FOLElBQVQ7QUFDRDs7QUFDRCxXQUFPRCxHQUFQO0FBQ0QsR0FMTSxFQUtKLEVBTEksQ0FBUDtBQU1EOztBQUVELFNBQVNyRixTQUFULENBQW1CSixDQUFuQixFQUFzQkMsQ0FBdEIsRUFBeUI7QUFDdkIsTUFBTTBGLEtBQUssR0FBR0wsSUFBSSxDQUFDdEYsQ0FBRCxDQUFsQjtBQUNBLE1BQU00RixLQUFLLEdBQUdOLElBQUksQ0FBQ3JGLENBQUQsQ0FBbEI7QUFFQSxTQUFPMEYsS0FBSyxDQUFDekssTUFBTixDQUFhLFVBQUN3SyxJQUFEO0FBQUEsV0FBVUUsS0FBSyxDQUFDN0ssT0FBTixDQUFjMkssSUFBZCxLQUF1QixDQUFqQztBQUFBLEdBQWIsQ0FBUDtBQUNEOztBQUVELFNBQVNHLFNBQVQsQ0FBbUI3RixDQUFuQixFQUFzQkMsQ0FBdEIsRUFBeUI7QUFDdkIsTUFBSTZGLENBQUMsR0FBRyxFQUFSOztBQUVBLE9BQUssSUFBSXZLLEdBQVQsSUFBZ0J5RSxDQUFoQixFQUFtQjtBQUNqQixRQUFJK0YsYUFBYSxHQUFHL0YsQ0FBQyxDQUFDekUsR0FBRCxDQUFyQjtBQUFBLFFBQ0VDLEtBQUssR0FBR3VLLGFBRFY7O0FBR0EsUUFBSTlGLENBQUMsQ0FBQ25CLGNBQUYsQ0FBaUJ2RCxHQUFqQixDQUFKLEVBQTJCO0FBQ3pCQyxXQUFLLEdBQUd5RSxDQUFDLENBQUMxRSxHQUFELENBQVQ7QUFDRDs7QUFFRCxRQUFJLHFFQUFPQyxLQUFQLE1BQWlCLFFBQXJCLEVBQStCO0FBQzdCQSxXQUFLLEdBQUdxSyxTQUFTLENBQUNFLGFBQUQsRUFBZ0J2SyxLQUFoQixDQUFqQjtBQUNEOztBQUVEc0ssS0FBQyxDQUFDdkssR0FBRCxDQUFELEdBQVNDLEtBQVQ7QUFDRDs7QUFFRCxTQUFPc0ssQ0FBUDtBQUNELEMsQ0FFRDs7O0FBQ0EsU0FBU0UsZ0JBQVQsR0FBNEI7QUFDMUIsTUFBSSxPQUFPQyxRQUFQLElBQW1CLFdBQXZCLEVBQW9DLE9BQU8sQ0FBUDtBQUNwQyxNQUFNQyxHQUFHLEdBQUdELFFBQVEsQ0FBQ0UsYUFBVCxDQUF1QixLQUF2QixDQUFaO0FBRUFELEtBQUcsQ0FBQ0UsS0FBSixDQUFVNUMsS0FBVixHQUFrQixPQUFsQjtBQUNBMEMsS0FBRyxDQUFDRSxLQUFKLENBQVUzQyxNQUFWLEdBQW1CLE9BQW5CO0FBQ0F5QyxLQUFHLENBQUNFLEtBQUosQ0FBVUMsUUFBVixHQUFxQixRQUFyQjtBQUNBSCxLQUFHLENBQUNFLEtBQUosQ0FBVUUsUUFBVixHQUFxQixVQUFyQjtBQUNBSixLQUFHLENBQUNFLEtBQUosQ0FBVUcsR0FBVixHQUFnQixTQUFoQjtBQUVBTixVQUFRLENBQUNPLElBQVQsQ0FBY0MsV0FBZCxDQUEwQlAsR0FBMUI7QUFDQSxNQUFNUSxjQUFjLEdBQUdSLEdBQUcsQ0FBQ1MsV0FBSixHQUFrQlQsR0FBRyxDQUFDVSxXQUE3QztBQUNBWCxVQUFRLENBQUNPLElBQVQsQ0FBY0ssV0FBZCxDQUEwQlgsR0FBMUI7QUFFQSxTQUFPUSxjQUFQO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOURELElBQU1JLFVBQVUsR0FBRztBQUNqQnBHLFFBQU0sRUFBRTtBQUNOcUcsUUFBSSxFQUFFQyxPQURBO0FBRU5DLFdBQU8sRUFBRTtBQUZILEdBRFM7QUFLakJDLFNBQU8sRUFBRTtBQUNQSCxRQUFJLEVBQUVDLE9BREM7QUFFUEMsV0FBTyxFQUFFO0FBRkYsR0FMUTtBQVNqQmxGLFVBQVEsRUFBRTtBQUNSZ0YsUUFBSSxFQUFFSTtBQURFLEdBVE87QUFZakJ6SSxNQUFJLEVBQUU7QUFDSnFJLFFBQUksRUFBRS9PLE1BREY7QUFFSmlQLFdBQU8sRUFBRTtBQUZMLEdBWlc7QUFnQmpCbkYsS0FBRyxFQUFFO0FBQ0hpRixRQUFJLEVBQUUzUCxNQURIO0FBRUg2UCxXQUFPLEVBQUU7QUFGTixHQWhCWTtBQW9CakI3TSxPQUFLLEVBQUU7QUFDTDJNLFFBQUksRUFBRSxDQUFDM1AsTUFBRCxFQUFTd0UsTUFBVCxDQUREO0FBRUx3TCxZQUFRLEVBQUU7QUFGTCxHQXBCVTtBQXdCakJDLE1BQUksRUFBRTtBQUNKTixRQUFJLEVBQUUvTyxNQURGO0FBRUppUCxXQUFPLEVBQUU7QUFGTDtBQXhCVyxDQUFuQjtBQThCQSxJQUFNSyxXQUFXLEdBQUc7QUFDbEJDLFNBQU8sRUFBRTtBQUNQUixRQUFJLEVBQUUvTyxNQURDO0FBRVBpUCxXQUFPLEVBQUU7QUFGRixHQURTO0FBS2xCTyxrQkFBZ0IsRUFBRTtBQUNoQlQsUUFBSSxFQUFFL08sTUFEVTtBQUVoQmlQLFdBQU8sRUFBRTtBQUZPLEdBTEE7QUFTbEJoRixXQUFTLEVBQUU7QUFDVDhFLFFBQUksRUFBRS9PLE1BREc7QUFFVGlQLFdBQU8sRUFBRTtBQUZBLEdBVE87QUFhbEJsRSxPQUFLLEVBQUU7QUFDTGdFLFFBQUksRUFBRTNQLE1BREQ7QUFFTDZQLFdBQU8sRUFBRTtBQUZKLEdBYlc7QUFpQmxCN00sT0FBSyxFQUFFO0FBQ0wyTSxRQUFJLEVBQUUzUCxNQUREO0FBRUw2UCxXQUFPLEVBQUU7QUFGSixHQWpCVztBQXFCbEJRLE9BQUssRUFBRTtBQUNMVixRQUFJLEVBQUUzUCxNQUREO0FBRUw2UCxXQUFPLEVBQUU7QUFGSixHQXJCVztBQXlCbEJuRixLQUFHLEVBQUU7QUFDSGlGLFFBQUksRUFBRTNQLE1BREg7QUFFSDZQLFdBQU8sRUFBRTtBQUZOLEdBekJhO0FBNkJsQnZJLE1BQUksRUFBRTtBQUNKcUksUUFBSSxFQUFFL08sTUFERjtBQUVKaVAsV0FBTyxFQUFFO0FBRkwsR0E3Qlk7QUFpQ2xCUyxhQUFXLEVBQUU7QUFDWFgsUUFBSSxFQUFFL08sTUFESztBQUVYaVAsV0FBTyxFQUFFO0FBRkUsR0FqQ0s7QUFxQ2xCdkcsUUFBTSxFQUFFO0FBQ05xRyxRQUFJLEVBQUVDLE9BREE7QUFFTkMsV0FBTyxFQUFFO0FBRkgsR0FyQ1U7QUF5Q2xCakYsY0FBWSxFQUFFO0FBQ1orRSxRQUFJLEVBQUVDLE9BRE07QUFFWkMsV0FBTyxFQUFFO0FBRkcsR0F6Q0k7QUE2Q2xCVSxXQUFTLEVBQUU7QUFDVFosUUFBSSxFQUFFQyxPQURHO0FBRVRDLFdBQU8sRUFBRTtBQUZBLEdBN0NPO0FBaURsQlcsTUFBSSxFQUFFO0FBQ0piLFFBQUksRUFBRW5MLE1BREY7QUFFSnFMLFdBRkksc0JBRU07QUFDUixhQUFPLEVBQVA7QUFDRDtBQUpHLEdBakRZO0FBdURsQlksYUFBVyxFQUFFO0FBQ1hkLFFBQUksRUFBRUMsT0FESztBQUVYQyxXQUFPLEVBQUU7QUFGRSxHQXZESztBQTJEbEJhLFlBQVUsRUFBRTtBQUNWZixRQUFJLEVBQUVDLE9BREk7QUFFVkMsV0FBTyxFQUFFO0FBRkMsR0EzRE07QUErRGxCYyxnQkFBYyxFQUFFO0FBQ2RoQixRQUFJLEVBQUVDLE9BRFE7QUFFZEMsV0FBTyxFQUFFO0FBRkssR0EvREU7QUFtRWxCZSxlQUFhLEVBQUU7QUFDYmpCLFFBQUksRUFBRUMsT0FETztBQUViQyxXQUFPLEVBQUU7QUFGSSxHQW5FRztBQXVFbEJnQixnQkFBYyxFQUFFO0FBQ2RsQixRQUFJLEVBQUVDLE9BRFE7QUFFZEMsV0FBTyxFQUFFO0FBRkssR0F2RUU7QUEyRWxCaUIsY0FBWSxFQUFFO0FBQ1puQixRQUFJLEVBQUVuTCxNQURNO0FBRVpxTCxXQUZZLHNCQUVGO0FBQ1IsYUFBTyxFQUFQO0FBQ0Q7QUFKVztBQTNFSSxDQUFwQjs7Ozs7Ozs7Ozs7OztBQzlCQTtBQUFBLElBQUlrQixTQUFTLEdBQUcsWUFBaEI7QUFFQSxJQUFNQyxLQUFLLEdBQUdDLElBQWQ7QUFFQSxJQUFJQyx1QkFBdUIsR0FDekIsT0FBT0MsTUFBUCxLQUFrQixXQUFsQixJQUFpQyxrQkFBa0JBLE1BRHJEO0FBR0EsSUFBSUMsTUFBSjtBQUNBLElBQUlDLE1BQUo7O0FBRUEsU0FBU0MsV0FBVCxDQUFxQkMsUUFBckIsRUFBK0I7QUFDN0JBLFVBQVEsS0FBS0EsUUFBUSxHQUFHLEVBQWhCLENBQVI7QUFFQUgsUUFBTSxHQUFHRyxRQUFRLENBQUNILE1BQWxCO0FBQ0FDLFFBQU0sR0FBR0UsUUFBUSxDQUFDRixNQUFsQjtBQUNEOztBQUVELFNBQVNHLFlBQVQsQ0FBc0JDLFNBQXRCLEVBQWlDO0FBQy9CVixXQUFTLEdBQUdVLFNBQVo7QUFDRDs7QUFFRCxTQUFTQyxNQUFULENBQWdCQyxLQUFoQixFQUF1QjtBQUNyQixPQUFLLElBQUl4TixHQUFULElBQWdCd04sS0FBaEIsRUFBdUI7QUFDckIsUUFBSXZOLEtBQUssR0FBR3VOLEtBQUssQ0FBQ3hOLEdBQUQsQ0FBakI7QUFDQXVHLE9BQUcsQ0FBQ3ZHLEdBQUQsRUFBTUMsS0FBTixDQUFIO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTc0csR0FBVCxDQUFhdkcsR0FBYixFQUFrQkMsS0FBbEIsRUFBeUI7QUFDdkIsTUFBSWlOLE1BQUosRUFBWTtBQUNWQSxVQUFNLENBQUNsTixHQUFELEVBQU1DLEtBQU4sQ0FBTjtBQUNELEdBRkQsTUFFTztBQUNMLFFBQUksQ0FBQzhNLHVCQUFMLEVBQThCOztBQUM5QixRQUFJO0FBQ0ZDLFlBQU0sQ0FBQ1MsWUFBUCxXQUF1QmIsU0FBdkIsY0FBb0M1TSxHQUFwQyxLQUE2QzZNLEtBQUssQ0FBQ2EsU0FBTixDQUFnQnpOLEtBQWhCLENBQTdDO0FBQ0QsS0FGRCxDQUVFLE9BQU8wTixDQUFQLEVBQVUsQ0FBRTtBQUNmO0FBQ0Y7O0FBRUQsU0FBUzNMLEdBQVQsQ0FBYWhDLEdBQWIsRUFBa0I7QUFDaEIsTUFBSWlOLE1BQUosRUFBWTtBQUNWLFdBQU9BLE1BQU0sQ0FBQ2pOLEdBQUQsQ0FBYjtBQUNELEdBRkQsTUFFTztBQUNMLFFBQUksQ0FBQytNLHVCQUFMLEVBQThCOztBQUM5QixRQUFJO0FBQ0YsVUFBSTlNLEtBQUssR0FBRytNLE1BQU0sQ0FBQ1MsWUFBUCxXQUF1QmIsU0FBdkIsY0FBb0M1TSxHQUFwQyxFQUFaO0FBQ0QsS0FGRCxDQUVFLE9BQU8yTixDQUFQLEVBQVU7QUFDVjtBQUNEOztBQUVELFFBQUkxTixLQUFKLEVBQVc7QUFDVCxhQUFPNk0sSUFBSSxDQUFDYyxLQUFMLENBQVczTixLQUFYLENBQVA7QUFDRDtBQUNGO0FBQ0Y7O0FBRWM7QUFBRXNOLFFBQU0sRUFBTkEsTUFBRjtBQUFVaEgsS0FBRyxFQUFIQSxHQUFWO0FBQWV2RSxLQUFHLEVBQUhBLEdBQWY7QUFBb0JxTCxjQUFZLEVBQVpBLFlBQXBCO0FBQWtDRixhQUFXLEVBQVhBO0FBQWxDLENBQWYsRTs7Ozs7Ozs7Ozs7QUN4REE7QUFDQTtBQUVBO0FBRUE7QUFFQSxJQUFJVSxpQkFBaUIsR0FBRyxPQUFPYixNQUFQLEtBQWtCLFdBQTFDO0FBRUFhLGlCQUFpQixJQUNkLFlBQVc7QUFDVixNQUFJQyxRQUFRLEdBQUcsQ0FBZjtBQUNBLE1BQUlDLE9BQU8sR0FBRyxDQUFDLElBQUQsRUFBTyxLQUFQLEVBQWMsUUFBZCxFQUF3QixHQUF4QixDQUFkOztBQUVBLE9BQUssSUFBSTVILENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc0SCxPQUFPLENBQUMxUixNQUFaLElBQXNCLENBQUMyUSxNQUFNLENBQUNnQixxQkFBOUMsRUFBcUUsRUFBRTdILENBQXZFLEVBQTBFO0FBQ3hFNkcsVUFBTSxDQUFDZ0IscUJBQVAsR0FDRWhCLE1BQU0sQ0FBQ2UsT0FBTyxDQUFDNUgsQ0FBRCxDQUFQLEdBQWEsdUJBQWQsQ0FEUjtBQUVBNkcsVUFBTSxDQUFDaUIsb0JBQVAsR0FDRWpCLE1BQU0sQ0FBQ2UsT0FBTyxDQUFDNUgsQ0FBRCxDQUFQLEdBQWEsc0JBQWQsQ0FBTixJQUNBNkcsTUFBTSxDQUFDZSxPQUFPLENBQUM1SCxDQUFELENBQVAsR0FBYSw2QkFBZCxDQUZSO0FBR0Q7O0FBRUQsTUFBSSxDQUFDNkcsTUFBTSxDQUFDZ0IscUJBQVosRUFDRWhCLE1BQU0sQ0FBQ2dCLHFCQUFQLEdBQStCLFVBQVNFLFFBQVQsRUFBbUJDLE9BQW5CLEVBQTRCO0FBQ3pELFFBQUlDLFFBQVEsR0FBRyxJQUFJQyxJQUFKLEdBQVdDLE9BQVgsRUFBZjtBQUNBLFFBQUlDLFVBQVUsR0FBRzVSLElBQUksQ0FBQzZSLEdBQUwsQ0FBUyxDQUFULEVBQVksTUFBTUosUUFBUSxHQUFHTixRQUFqQixDQUFaLENBQWpCO0FBQ0EsUUFBSW5OLEVBQUUsR0FBR3FNLE1BQU0sQ0FBQ3lCLFVBQVAsQ0FBa0IsWUFBVztBQUNwQ1AsY0FBUSxDQUFDRSxRQUFRLEdBQUdHLFVBQVosQ0FBUjtBQUNELEtBRlEsRUFFTkEsVUFGTSxDQUFUO0FBSUFULFlBQVEsR0FBR00sUUFBUSxHQUFHRyxVQUF0QjtBQUNBLFdBQU81TixFQUFQO0FBQ0QsR0FURDtBQVdGLE1BQUksQ0FBQ3FNLE1BQU0sQ0FBQ2lCLG9CQUFaLEVBQ0VqQixNQUFNLENBQUNpQixvQkFBUCxHQUE4QixVQUFTdE4sRUFBVCxFQUFhO0FBQ3pDK04sZ0JBQVksQ0FBQy9OLEVBQUQsQ0FBWjtBQUNELEdBRkQ7QUFHSCxDQTVCRCxFQURGLEMiLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiRW1vamlNYXJ0XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkVtb2ppTWFydFwiXSA9IGZhY3RvcnkoKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9kb2NzL2luZGV4LmpzXCIpO1xuIiwiLy8gc3R5bGUtbG9hZGVyOiBBZGRzIHNvbWUgY3NzIHRvIHRoZSBET00gYnkgYWRkaW5nIGEgPHN0eWxlPiB0YWdcblxuLy8gbG9hZCB0aGUgc3R5bGVzXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9lbW9qaS1tYXJ0LmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXCIpLmRlZmF1bHRcbnZhciB1cGRhdGUgPSBhZGQoXCI2ZjBlMGY4Y1wiLCBjb250ZW50LCBmYWxzZSwge30pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL2Vtb2ppLW1hcnQuY3NzXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9lbW9qaS1tYXJ0LmNzc1wiKTtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmltcG9ydCBzdHlsZTAgZnJvbSBcIi4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgXCI0ZmJjNzM1YlwiLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzRmYmM3MzViJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzRmYmM3MzViJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9hcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzRmYmM3MzViJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJkb2NzL2FwcC52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3N0eWxlUG9zdExvYWRlci5qcyEuLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vYXBwLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTRmYmM3MzViJnNjb3BlZD10cnVlJmxhbmc9Y3NzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmXCIiLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBBcHAgZnJvbSAnLi9hcHAnXG5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcXVhc2FyZnJhbWV3b3JrL3F1YXNhci9pc3N1ZXMvMTU3NlxuLy8gZm9yIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBRdWFzYXIgaW50ZWdyYXRpb24gaW50byBleGlzdGluZyBhcHAuXG5pbXBvcnQgJ3F1YXNhci1mcmFtZXdvcmsvZGlzdC91bWQvcXVhc2FyLm1hdC5jc3MnXG5pbXBvcnQgUXVhc2FyIGZyb20gJ3F1YXNhci1mcmFtZXdvcmsvZGlzdC9xdWFzYXIubWF0LmVzbSdcblZ1ZS51c2UoUXVhc2FyKVxuXG5uZXcgVnVlKHtcblx0ZWw6ICcjYXBwJyxcblx0cmVuZGVyOiAoaCkgPT4gaChBcHApLFxufSlcbiIsImZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcnIyW2ldID0gYXJyW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBhcnIyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2FycmF5V2l0aG91dEhvbGVzOyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2NsYXNzQ2FsbENoZWNrOyIsImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3M7IiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX2RlZmluZVByb3BlcnR5OyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcikgPT09IFwiW29iamVjdCBBcmd1bWVudHNdXCIpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF9pdGVyYWJsZVRvQXJyYXk7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkOyIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuL2RlZmluZVByb3BlcnR5XCIpO1xuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9O1xuICAgIHZhciBvd25LZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcblxuICAgIGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3duS2V5cyA9IG93bktleXMuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKS5maWx0ZXIoZnVuY3Rpb24gKHN5bSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIHN5bSkuZW51bWVyYWJsZTtcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBvd25LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gX29iamVjdFNwcmVhZDsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlc1wiKTtcblxudmFyIGl0ZXJhYmxlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2l0ZXJhYmxlVG9BcnJheVwiKTtcblxudmFyIG5vbkl0ZXJhYmxlU3ByZWFkID0gcmVxdWlyZShcIi4vbm9uSXRlcmFibGVTcHJlYWRcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgbm9uSXRlcmFibGVTcHJlYWQoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXk7IiwiZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiBfdHlwZW9mMihvYmopO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX3R5cGVvZihvYmopO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IF90eXBlb2Y7IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiYXBwXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGgxPkVtb2ppIE1hcnQgVnVlIPCfj6w8L2gxPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxlbW9qaSA6ZGF0YT1cImluZGV4XCIgZW1vamk9XCI6c2FudGE6OnNraW4tdG9uZS0zOlwiIDpzaXplPVwiMzJcIiAvPlxuICAgICAgPGVtb2ppIDpkYXRhPVwiaW5kZXhcIiBlbW9qaT1cInNhbnRhXCIgc2V0PVwiZW1vamlvbmVcIiA6c2l6ZT1cIjMyXCIgLz5cbiAgICAgIDxlbW9qaSA6ZGF0YT1cImluZGV4XCIgOmVtb2ppPVwic2FudGFFbW9qaU9iamVjdFwiIDpzaXplPVwiMzJcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ0b2dnbGVWaXNpYmxlXCI+U2hvdyAvIGhpZGUgdGhlIHBpY2tlcjwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJ0b2dnbGVWaXNpYmxlXCIgdi1odG1sPVwic21pbGVcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDx0ZW1wbGF0ZVxuICAgICAgICB2LWZvcj1cInNldCBpbiBbXG4gICAgICAgICAgJ25hdGl2ZScsXG4gICAgICAgICAgJ2FwcGxlJyxcbiAgICAgICAgICAnZ29vZ2xlJyxcbiAgICAgICAgICAndHdpdHRlcicsXG4gICAgICAgICAgJ2Vtb2ppb25lJyxcbiAgICAgICAgICAnbWVzc2VuZ2VyJyxcbiAgICAgICAgICAnZmFjZWJvb2snLFxuICAgICAgICBdXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIDprZXk9XCJzZXRcIlxuICAgICAgICAgIEBjbGljaz1cImFjdGl2ZVNldCA9IHNldFwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiYWN0aXZlU2V0ID09IHNldFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBzZXQgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiB2LWlmPVwiaXNWaXNpYmxlXCIgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxwaWNrZXJcbiAgICAgICAgOmRhdGE9XCJpbmRleFwiXG4gICAgICAgIDpzZXQ9XCJhY3RpdmVTZXRcIlxuICAgICAgICA6bmF0aXZlPVwibmF0aXZlXCJcbiAgICAgICAgOmVtb2ppPVwiZW1vamlcIlxuICAgICAgICA6ZW1vamlUb29sdGlwPVwidHJ1ZVwiXG4gICAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgICAgOmVtb2ppU2l6ZT1cIjMwXCJcbiAgICAgICAgQHNlbGVjdD1cInNob3dFbW9qaVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPnt7IGVtb2ppc091dHB1dCB9fTwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvdy1zbWFsbFwiPlxuICAgICAgPGlmcmFtZVxuICAgICAgICBzcmM9XCJodHRwczovL2doYnRucy5jb20vZ2l0aHViLWJ0bi5odG1sP3VzZXI9c2VyZWJyb3YmcmVwbz1lbW9qaS1tYXJ0LXZ1ZSZ0eXBlPXN0YXImY291bnQ9dHJ1ZVwiXG4gICAgICAgIGZyYW1lQm9yZGVyPVwiMFwiXG4gICAgICAgIHNjcm9sbGluZz1cIjBcIlxuICAgICAgICB3aWR0aD1cIjkwcHhcIlxuICAgICAgICBoZWlnaHQ9XCIyMHB4XCJcbiAgICAgID48L2lmcmFtZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj48L2Rpdj5cbiAgICA8aDI+UURpYWxvZyBFeGFtcGxlPC9oMj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8cS1idG4gbGFiZWw9XCJPcGVuIFFEaWFsb2dcIiBAY2xpY2s9XCJlbW9qaVBpY2tlckRpYWxvZyA9IHRydWVcIiAvPlxuICAgIDwvZGl2PlxuXG4gICAgPHEtZGlhbG9nIHYtbW9kZWw9XCJlbW9qaVBpY2tlckRpYWxvZ1wiPlxuICAgICAgPHRlbXBsYXRlIHYtc2xvdDpib2R5IHN0eWxlPVwiaGVpZ2h0OjQ1MHB4XCI+XG4gICAgICAgIDxwaWNrZXIgOmRhdGE9XCJpbmRleFwiIDplbW9qaVNpemU9XCIyNFwiIDpuYXRpdmU9XCJ0cnVlXCI+PC9waWNrZXI+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvcS1kaWFsb2c+XG5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+PC9kaXY+XG4gICAgPGgyPkN1c3RvbSBTZWFyY2ggQW5kIFByZXZpZXcgVGVtcGxhdGVzIEV4YW1wbGU8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIEFsc28gaGVyZSB3ZSB1c2UgXCJTdGF0aWNQaWNrZXJcIiB3aGljaCBkb2VzIG5vdCB1c2UgdmlydHVhbCBzY3JvbGxlciAoaXQgaXNcbiAgICAgIHNsb3dlciwgYnV0IGVhc2llciB0byBjdXN0b21pemUgd2l0aCBjc3MpXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFN0YXRpY1BpY2tlciA6ZGF0YT1cImluZGV4XCIgOm5hdGl2ZT1cInRydWVcIj5cbiAgICAgICAgPHRlbXBsYXRlIHNsb3Q9XCJzZWFyY2hUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIDpwbGFjZWhvbGRlcj1cInNsb3RQcm9wcy5pMThuLnNlYXJjaFwiXG4gICAgICAgICAgICB2LW9uOmlucHV0PVwic2xvdFByb3BzLm9uU2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICA8dGVtcGxhdGUgc2xvdD1cInByZXZpZXdUZW1wbGF0ZVwiIHNsb3Qtc2NvcGU9XCJzbG90UHJvcHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICAgICAgICAgIDxFbW9qaVxuICAgICAgICAgICAgICAgIDpkYXRhPVwic2xvdFByb3BzLmRhdGFcIlxuICAgICAgICAgICAgICAgIDplbW9qaT1cInNsb3RQcm9wcy5lbW9qaSA/IHNsb3RQcm9wcy5lbW9qaSA6ICdwb2ludF91cCdcIlxuICAgICAgICAgICAgICAgIDpuYXRpdmU9XCJzbG90UHJvcHMuZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICAgICAgICAgIDpza2luPVwic2xvdFByb3BzLmVtb2ppUHJvcHMuc2tpblwiXG4gICAgICAgICAgICAgICAgOnNldD1cInNsb3RQcm9wcy5lbW9qaVByb3BzLnNldFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgc2xvdFByb3BzLmVtb2ppXG4gICAgICAgICAgICAgICAgICAgID8gJ34nICsgc2xvdFByb3BzLmVtb2ppLm5hbWUgKyAnfidcbiAgICAgICAgICAgICAgICAgICAgOiAnQ2hvb3NlLi4uJ1xuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZXNcIj5cbiAgICAgICAgICAgICAgICB7eyBzbG90UHJvcHMuZW1vamkgPyBzbG90UHJvcHMuZW1vamkuY29sb25zIDogJycgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgIDwvU3RhdGljUGlja2VyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPjwvZGl2PlxuICAgIDxoMj5GaWx0ZXJlZCBwaWNrZXIgZXhhbXBsZTwvaDI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPFBpY2tlclxuICAgICAgICA6bmF0aXZlPVwidHJ1ZVwiXG4gICAgICAgIGVtb2ppPVwiZmxhZy10ZlwiXG4gICAgICAgIDplbW9qaVNpemU9XCIxOFwiXG4gICAgICAgIDpkYXRhPVwiaW5kZXhGaWx0ZXJlZFwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgZGF0YSBmcm9tICcuLi9kYXRhL2FsbC5qc29uJ1xuaW1wb3J0IHsgUGlja2VyLCBTdGF0aWNQaWNrZXIsIEVtb2ppLCBFbW9qaUluZGV4IH0gZnJvbSAnLi4vc3JjJ1xuaW1wb3J0ICcuLi9jc3MvZW1vamktbWFydC5jc3MnXG5cbmltcG9ydCB7IFFCdG4sIFFEaWFsb2cgfSBmcm9tICdxdWFzYXItZnJhbWV3b3JrL2Rpc3QvcXVhc2FyLm1hdC5lc20nXG5cbmNvbnN0IENVU1RPTV9FTU9KSVMgPSBbXG4gIHtcbiAgICBuYW1lOiAnUGFydHkgUGFycm90JyxcbiAgICBzaG9ydF9uYW1lczogWydwYXJyb3QnXSxcbiAgICBrZXl3b3JkczogWydwYXJ0eSddLFxuICAgIGltYWdlVXJsOiAnLi9pbWFnZXMvcGFycm90LmdpZicsXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnT2N0b2NhdCcsXG4gICAgc2hvcnRfbmFtZXM6IFsnb2N0b2NhdCddLFxuICAgIGtleXdvcmRzOiBbJ2dpdGh1YiddLFxuICAgIGltYWdlVXJsOiAnaHR0cHM6Ly9naXRodWIuZ2l0aHViYXNzZXRzLmNvbS9pbWFnZXMvaWNvbnMvZW1vamkvb2N0b2NhdC5wbmcnLFxuICB9LFxuICB7XG4gICAgbmFtZTogJ1NxdWlycmVsJyxcbiAgICBzaG9ydF9uYW1lczogWydzaGlwaXQnLCAnc3F1aXJyZWwnXSxcbiAgICBrZXl3b3JkczogWydnaXRodWInXSxcbiAgICBpbWFnZVVybDogJ2h0dHBzOi8vZ2l0aHViLmdpdGh1YmFzc2V0cy5jb20vaW1hZ2VzL2ljb25zL2Vtb2ppL3NoaXBpdC5wbmcnLFxuICB9LFxuXVxuXG5sZXQgaW5kZXggPSBuZXcgRW1vamlJbmRleChkYXRhLCB7XG4gIGN1c3RvbTogQ1VTVE9NX0VNT0pJUyxcbn0pXG5cbmxldCBpbmRleEZpbHRlcmVkID0gbmV3IEVtb2ppSW5kZXgoZGF0YSwge1xuICBjdXN0b206IENVU1RPTV9FTU9KSVMsXG4gIGVtb2ppc1RvU2hvd0ZpbHRlcjogKGVtb2ppKSA9PiB7XG4gICAgcmV0dXJuIGVtb2ppLnNob3J0X25hbWVzWzBdLm1hdGNoKC9eZmxhZy4qLykgIT09IG51bGxcbiAgfSxcbn0pXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgaW5kZXhGaWx0ZXJlZDogaW5kZXhGaWx0ZXJlZCxcbiAgICAgIGFjdGl2ZVNldDogJ25hdGl2ZScsXG4gICAgICBlbW9qaTogJ3BvaW50X3VwJyxcbiAgICAgIHRpdGxlOiAnUGljayB5b3VyIGVtb2pp4oCmJyxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgIGVtb2ppUGlja2VyRGlhbG9nOiBmYWxzZSxcbiAgICAgIGVtb2ppc091dHB1dDogJycsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIG5hdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVNldCA9PSAnbmF0aXZlJ1xuICAgIH0sXG4gICAgc21pbGUoKSB7XG4gICAgICAvLyBTdGF0aWMgZW1vamkgZXhhbXBsZVxuICAgICAgbGV0IGVtb2ppID0gaW5kZXguZmluZEVtb2ppKCc6c21pbGU6JylcbiAgICAgIC8vIE5vdGUsIHRoYXQgcG9zaXRpb24gaW4gdGhlIGVtb2ppIHNoZWV0IGlzIGNhbGN1bGF0ZWQgYnlcbiAgICAgIC8vIGBlbW9qaWAgb2JqZWN0XG4gICAgICBsZXQgc3R5bGUgPSBgYmFja2dyb3VuZC1wb3NpdGlvbjogJHtlbW9qaS5nZXRQb3NpdGlvbigpfTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtZW1vamlvbmVANC4wLjQvaW1nL2Vtb2ppb25lL3NoZWV0cy0yNTYvNjQucG5nKTsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kLXNpemU6IDUyMDAlYFxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdlbW9qaScgc3R5bGU9XCIke3N0eWxlfVwiPjwvZGl2PmBcbiAgICB9LFxuICAgIHNhbnRhRW1vamlPYmplY3QoKSB7XG4gICAgICByZXR1cm4gaW5kZXguZmluZEVtb2ppKCc6c2FudGE6JylcbiAgICB9LFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdG9nZ2xlVmlzaWJsZSgpIHtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gIXRoaXMuaXNWaXNpYmxlXG4gICAgfSxcbiAgICBzaG93RW1vamkoZW1vamkpIHtcbiAgICAgIHRoaXMuZW1vamlzT3V0cHV0ID0gdGhpcy5lbW9qaXNPdXRwdXQgKyBlbW9qaS5uYXRpdmVcbiAgICB9LFxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgUGlja2VyLFxuICAgIFN0YXRpY1BpY2tlcixcbiAgICBFbW9qaSxcbiAgICBRQnRuLFxuICAgIFFEaWFsb2csXG4gIH0sXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbmJ1dHRvbiArIGJ1dHRvbiB7XG4gIG1hcmdpbi1sZWZ0OiAwLjVlbTtcbn1cbmJ1dHRvbiB7XG4gIHBhZGRpbmc6IDAuNGVtIDAuNmVtO1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgb3V0bGluZTogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5idXR0b25bZGlzYWJsZWRdIHtcbiAgYm9yZGVyLWNvbG9yOiAjYWU2NWM1O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5tb2RhbCB7XG4gIGNvbG9yOiByZWQ7XG59XG5cbi8qKlxuICogU2VlIGh0dHBzOi8vdnVlLWxvYWRlci52dWVqcy5vcmcvZ3VpZGUvc2NvcGVkLWNzcy5odG1sI2RlZXAtc2VsZWN0b3JzXG4gKiB0aGUgYD4+PmAgYWxsb3dzIHRvIGFwcGx5IHNjb3BlZCBjc3MgdG8gY2hpbGQgZWxlbWVudCB0aGF0IGlzIGdlbmVyYXRlZFxuICogZHluYW1pY2FsbHlcbioqL1xuLm1vZGFsID4+PiAubW9kYWwtc2Nyb2xsIHtcbiAgY29sb3I6IHJlZDtcbiAgbWF4LWhlaWdodDogbm9uZTtcbn1cbi5tb2RhbCAubW9kYWwtYm9keSB7XG4gIG1heC1oZWlnaHQ6IG5vbmU7XG59XG5cbmgxIHtcbiAgZm9udC1mYW1pbHk6IENvdXJpZXI7XG4gIGZvbnQtc2l6ZTogMnJlbTtcbn1cblxuaDIge1xuICBmb250LWZhbWlseTogQ291cmllcjtcbiAgZm9udC1zaXplOiAxLjI1cmVtO1xuICBtYXJnaW4tdG9wOiAycmVtO1xufVxuXG4uYXBwIC5yb3cge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLnJvdyArIC5yb3cge1xuICBtYXJnaW4tdG9wOiAyZW07XG59XG5cbi5yb3ctc21hbGwge1xuICBtYXJnaW4tdG9wOiAxZW07XG59XG5cbi5lbW9qaS1tYXJ0IHtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5lbW9qaS1tYXJ0LXRpdGxlLWxhYmVsIHtcbiAgZm9udC1zaXplOiAyMXB4O1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZT5cbiAgPHNwYW5cbiAgICB2LWlmPVwidmlldy5jYW5SZW5kZXJcIlxuICAgIDp0aXRsZT1cInZpZXcudGl0bGVcIlxuICAgIDpkYXRhLXRpdGxlPVwidGl0bGVcIlxuICAgIGNsYXNzPVwiZW1vamktbWFydC1lbW9qaVwiXG4gICAgQG1vdXNlZW50ZXI9XCJvbk1vdXNlRW50ZXJcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Nb3VzZUxlYXZlXCJcbiAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgPlxuICAgIDxzcGFuIDpjbGFzcz1cInZpZXcuY3NzQ2xhc3NcIiA6c3R5bGU9XCJ2aWV3LmNzc1N0eWxlXCI+e3tcbiAgICAgIHZpZXcuY29udGVudFxuICAgIH19PC9zcGFuPlxuICA8L3NwYW4+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgRW1vamlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL3NoYXJlZC1wcm9wcydcbmltcG9ydCB7IEVtb2ppVmlldyB9IGZyb20gJy4uL3V0aWxzL2Vtb2ppLWRhdGEnXG5cbmNvbnN0IFNIRUVUX0NPTFVNTlMgPSA1MlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgLi4uRW1vamlQcm9wcyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gbmV3IEVtb2ppVmlldyhcbiAgICAgICAgdGhpcy5lbW9qaU9iamVjdCxcbiAgICAgICAgdGhpcy5za2luLFxuICAgICAgICB0aGlzLnNldCxcbiAgICAgICAgdGhpcy5uYXRpdmUsXG4gICAgICAgIHRoaXMuZmFsbGJhY2ssXG4gICAgICAgIHRoaXMudG9vbHRpcCxcbiAgICAgICAgdGhpcy5zaXplLFxuICAgICAgKVxuICAgIH0sXG4gICAgc2FuaXRpemVkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppT2JqZWN0Ll9zYW5pdGl6ZWRcbiAgICB9LFxuICAgIHRpdGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCA/IHRoaXMuZW1vamlPYmplY3Quc2hvcnRfbmFtZSA6IG51bGxcbiAgICB9LFxuICAgIGVtb2ppT2JqZWN0KCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmVtb2ppID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmluZEVtb2ppKHRoaXMuZW1vamkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5lbW9qaVxuICAgICAgfVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7fSxcbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLiRlbWl0KCdjbGljaycsIHRoaXMuZW1vamlPYmplY3QpXG4gICAgfSxcbiAgICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdtb3VzZWVudGVyJywgdGhpcy5lbW9qaU9iamVjdClcbiAgICB9LFxuICAgIG9uTW91c2VMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ21vdXNlbGVhdmUnLCB0aGlzLmVtb2ppT2JqZWN0KVxuICAgIH0sXG4gIH0sXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnRcIiA6c3R5bGU9XCJjdXN0b21TdHlsZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIHYtaWY9XCJzaG93Q2F0ZWdvcmllc1wiPlxuICAgICAgPGFuY2hvcnNcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmNvbG9yPVwiY29sb3JcIlxuICAgICAgICA6Y2F0ZWdvcmllcz1cImNhdGVnb3JpZXNcIlxuICAgICAgICA6YWN0aXZlLWNhdGVnb3J5PVwiYWN0aXZlQ2F0ZWdvcnlcIlxuICAgICAgICBAY2xpY2s9XCJvbkFuY2hvckNsaWNrXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8c2xvdFxuICAgICAgbmFtZT1cInNlYXJjaFRlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6aTE4bj1cImkxOG5cIlxuICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgOm9uLXNlYXJjaD1cIm9uU2VhcmNoXCJcbiAgICA+XG4gICAgICA8c2VhcmNoXG4gICAgICAgIHYtaWY9XCJzaG93U2VhcmNoXCJcbiAgICAgICAgcmVmPVwic2VhcmNoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgICA6b24tc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgICBAc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L3Nsb3Q+XG5cbiAgICA8Y2F0ZWdvcnlcbiAgICAgIHYtc2hvdz1cInNlYXJjaEVtb2ppc1wiXG4gICAgICBjbGFzcz1cImVtb2ppLW1hcnQtc2VhcmNoLXJlc3VsdHNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDppMThuPVwibWVyZ2VkSTE4blwiXG4gICAgICBpZD1cInNlYXJjaFwiXG4gICAgICBuYW1lPVwiU2VhcmNoXCJcbiAgICAgIDplbW9qaXM9XCJzZWFyY2hFbW9qaXNcIlxuICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgLz5cbiAgICA8RHluYW1pY1Njcm9sbGVyXG4gICAgICB2LXNob3c9XCIhc2VhcmNoRW1vamlzXCJcbiAgICAgIHJlZj1cImR5blNjcm9sbGVyXCJcbiAgICAgIDppdGVtcz1cInNjcm9sbGVyQ2F0ZWdvcmllc1wiXG4gICAgICA6bWluLWl0ZW0tc2l6ZT1cIjYwXCJcbiAgICAgIGNsYXNzPVwic2Nyb2xsZXJcIlxuICAgICAgOmJ1ZmZlcj1cIjQwMFwiXG4gICAgICBrZXktZmllbGQ9XCJpZFwiXG4gICAgICA6ZW1pdC11cGRhdGU9XCJ0cnVlXCJcbiAgICAgIEB1cGRhdGU9XCJvblNjcm9sbFVwZGF0ZVwiXG4gICAgPlxuICAgICAgPHRlbXBsYXRlIHNsb3Qtc2NvcGU9XCJ7IGl0ZW0sIGFjdGl2ZSwgaW5kZXggfVwiPlxuICAgICAgICA8RHluYW1pY1Njcm9sbGVySXRlbSA6aXRlbT1cIml0ZW1cIiA6YWN0aXZlPVwiYWN0aXZlXCIgOmRhdGEtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICAgIDxjYXRlZ29yeVxuICAgICAgICAgICAgdi1zaG93PVwiaXRlbS5zaG93XCJcbiAgICAgICAgICAgIHJlZj1cImNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgOmtleT1cIml0ZW0uY2F0ZWdvcnkuaWRcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgICAgICAgOmkxOG49XCJpdGVtLm1lcmdlZEkxOG5cIlxuICAgICAgICAgICAgOmlkPVwiaXRlbS5jYXRlZ29yeS5pZFwiXG4gICAgICAgICAgICA6bmFtZT1cIml0ZW0uY2F0ZWdvcnkubmFtZVwiXG4gICAgICAgICAgICA6ZW1vamlzPVwiaXRlbS5jYXRlZ29yeS5lbW9qaXNcIlxuICAgICAgICAgICAgOmVtb2ppLXByb3BzPVwiaXRlbS5lbW9qaVByb3BzXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0R5bmFtaWNTY3JvbGxlckl0ZW0+XG4gICAgICA8L3RlbXBsYXRlPlxuICAgIDwvRHluYW1pY1Njcm9sbGVyPlxuXG4gICAgPHNsb3RcbiAgICAgIG5hbWU9XCJwcmV2aWV3VGVtcGxhdGVcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgIDplbW9qaT1cInByZXZpZXdFbW9qaVwiXG4gICAgICA6aWRsZS1lbW9qaT1cImlkbGVFbW9qaVwiXG4gICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICA6ZW1vamktcHJvcHM9XCJlbW9qaVByb3BzXCJcbiAgICAgIDpza2luLXByb3BzPVwic2tpblByb3BzXCJcbiAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtYmFyIGVtb2ppLW1hcnQtYmFyLXByZXZpZXdcIiB2LWlmPVwic2hvd1ByZXZpZXdcIj5cbiAgICAgICAgPHByZXZpZXdcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDp0aXRsZT1cInRpdGxlXCJcbiAgICAgICAgICA6ZW1vamk9XCJwcmV2aWV3RW1vamlcIlxuICAgICAgICAgIDppZGxlLWVtb2ppPVwiaWRsZUVtb2ppXCJcbiAgICAgICAgICA6c2hvdy1za2luLXRvbmVzPVwic2hvd1NraW5Ub25lc1wiXG4gICAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAgICAgOnNraW4tcHJvcHM9XCJza2luUHJvcHNcIlxuICAgICAgICAgIDpvbi1za2luLWNoYW5nZT1cIm9uU2tpbkNoYW5nZVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Nsb3Q+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCAnLi4vdmVuZG9yL3JhZi1wb2x5ZmlsbCdcbmltcG9ydCBzdG9yZSBmcm9tICcuLi91dGlscy9zdG9yZSdcbmltcG9ydCBmcmVxdWVudGx5IGZyb20gJy4uL3V0aWxzL2ZyZXF1ZW50bHknXG5pbXBvcnQgeyBkZWVwTWVyZ2UsIG1lYXN1cmVTY3JvbGxiYXIgfSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7IFBpY2tlclByb3BzIH0gZnJvbSAnLi4vdXRpbHMvc2hhcmVkLXByb3BzJ1xuaW1wb3J0IEFuY2hvcnMgZnJvbSAnLi9hbmNob3JzJ1xuaW1wb3J0IENhdGVnb3J5IGZyb20gJy4vY2F0ZWdvcnknXG5pbXBvcnQgUHJldmlldyBmcm9tICcuL3ByZXZpZXcnXG5pbXBvcnQgU2VhcmNoIGZyb20gJy4vc2VhcmNoJ1xuXG4vKlxuICogTm90ZSBhYm91dCBgYnVmZmVyYCBzZXR0aW5nIGZvciBEeW5hbWljU2Nyb2xsZXI6IHRoaXMgaXMgYVxuICogZml4IGZvciAjNDkgLSB3aGVuIGNsaWNraW5nIG9uIHRoZSBcIkZsYWdzXCIgY2F0ZWdvcnkgZm9yIHRoZSBmaXJzdFxuICogdGltZSwgdGhlIGNhdGVnb3J5IGlzIG5vdCBzY3JvbGxlZCB0byB0aGUgdG9wIG9mIHRoZSBjb21wb25lbnQuXG4gKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGxhc3QgY2F0ZWdvcnkgc2l6ZSBpcyBub3QgY2FsY3VsYXRlZCB5ZXQgYW5kXG4gKiB2aXJ0dWFsIHNjcm9sbGVyIHRha2VzICdtaW5JdGVtU2l6ZScgYXMgY2F0ZWdvcnkgaGVpZ2h0LlxuICpcbiAqIFZpcnR1YWwgc2Nyb2xsZXIgKFJlY3ljbGVTY3JvbGxlciBjb21wb25lbnQpIHVzZXMgYGJ1ZmZlcmAgdmFsdWVcbiAqIHRvICBkZWNpZGUgaG93IG1hbnkgY29tcG9uZW50cyB0byByZW5kZXIgaW50aXRpYWxseSBkZXBlbmRpbmcgb25cbiAqIHRoZSBzY3JvbGwgYXJlYSBzaXplICsgYnVmZmVyKjIgKGFuZCBhbGwgY2F0ZWdvcmllcyBpbml0aWFsbHlcbiAqIGhhdmUgbWluIHNpemUsIDYwcHgpLlxuICpcbiAqIEJ5IGluY3JlYXNpbmcgYnVmZmVyIHRvIDQwMHB4LCB3ZSBtYWtlIHRoZSBzY3JvbGxlciB0byBwZXJmb3JtXG4gKiBzaXplIGNhbGN1bGF0aW9uIGZvciBhbGwgY2F0ZWdvcmllcyBhbmQgdGhlIGZvbGxvd2luZ1xuICogc2Nyb2xsVG9JdGVtKCkgY2FsbHMgd29yayBjb3JyZWN0bHkuXG4gKi9cblxuaW1wb3J0IHsgRHluYW1pY1Njcm9sbGVyLCBEeW5hbWljU2Nyb2xsZXJJdGVtIH0gZnJvbSAndnVlLXZpcnR1YWwtc2Nyb2xsZXInXG4vLyBpbXBvcnQgJ3Z1ZS12aXJ0dWFsLXNjcm9sbGVyL2Rpc3QvdnVlLXZpcnR1YWwtc2Nyb2xsZXIuY3NzJ1xuXG5jb25zdCBJMThOID0ge1xuICBzZWFyY2g6ICdTZWFyY2gnLFxuICBub3Rmb3VuZDogJ05vIEVtb2ppIEZvdW5kJyxcbiAgY2F0ZWdvcmllczoge1xuICAgIHNlYXJjaDogJ1NlYXJjaCBSZXN1bHRzJyxcbiAgICByZWNlbnQ6ICdGcmVxdWVudGx5IFVzZWQnLFxuICAgIHBlb3BsZTogJ1NtaWxleXMgJiBQZW9wbGUnLFxuICAgIG5hdHVyZTogJ0FuaW1hbHMgJiBOYXR1cmUnLFxuICAgIGZvb2RzOiAnRm9vZCAmIERyaW5rJyxcbiAgICBhY3Rpdml0eTogJ0FjdGl2aXR5JyxcbiAgICBwbGFjZXM6ICdUcmF2ZWwgJiBQbGFjZXMnLFxuICAgIG9iamVjdHM6ICdPYmplY3RzJyxcbiAgICBzeW1ib2xzOiAnU3ltYm9scycsXG4gICAgZmxhZ3M6ICdGbGFncycsXG4gICAgY3VzdG9tOiAnQ3VzdG9tJyxcbiAgfSxcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIC4uLlBpY2tlclByb3BzLFxuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgIH0sXG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZVNraW46IHRoaXMuc2tpbiB8fCBzdG9yZS5nZXQoJ3NraW4nKSB8fCB0aGlzLmRlZmF1bHRTa2luLFxuICAgICAgYWN0aXZlQ2F0ZWdvcnk6IG51bGwsXG4gICAgICBwcmV2aWV3RW1vamk6IG51bGwsXG4gICAgICBzZWFyY2hFbW9qaXM6IG51bGwsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGN1c3RvbVN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0aGlzLmNhbGN1bGF0ZVdpZHRoICsgJ3B4JyxcbiAgICAgICAgLi4udGhpcy5waWNrZXJTdHlsZXMsXG4gICAgICB9XG4gICAgfSxcbiAgICBlbW9qaVByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmF0aXZlOiB0aGlzLm5hdGl2ZSxcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgICBzZXQ6IHRoaXMuc2V0LFxuICAgICAgICBlbW9qaVRvb2x0aXA6IHRoaXMuZW1vamlUb29sdGlwLFxuICAgICAgICBlbW9qaVNpemU6IHRoaXMuZW1vamlTaXplLFxuICAgICAgICBvbkVudGVyOiB0aGlzLm9uRW1vamlFbnRlci5iaW5kKHRoaXMpLFxuICAgICAgICBvbkxlYXZlOiB0aGlzLm9uRW1vamlMZWF2ZS5iaW5kKHRoaXMpLFxuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uRW1vamlDbGljay5iaW5kKHRoaXMpLFxuICAgICAgfVxuICAgIH0sXG4gICAgc2tpblByb3BzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2tpbjogdGhpcy5hY3RpdmVTa2luLFxuICAgICAgfVxuICAgIH0sXG4gICAgY2FsY3VsYXRlV2lkdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wZXJMaW5lICogKHRoaXMuZW1vamlTaXplICsgMTIpICsgMTIgKyAyICsgbWVhc3VyZVNjcm9sbGJhcigpXG4gICAgfSxcbiAgICBzY3JvbGxlckNhdGVnb3JpZXMoKSB7XG4gICAgICBsZXQgaWQgPSAwXG4gICAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogaWQrKyxcbiAgICAgICAgICBjYXRlZ29yeTogY2F0ZWdvcnksXG4gICAgICAgICAgc2hvdzpcbiAgICAgICAgICAgICF0aGlzLnNlYXJjaEVtb2ppcyAmJlxuICAgICAgICAgICAgKHRoaXMuaW5maW5pdGVTY3JvbGwgfHwgY2F0ZWdvcnkgPT0gdGhpcy5hY3RpdmVDYXRlZ29yeSksXG4gICAgICAgICAgbWVyZ2VkSTE4bjogdGhpcy5tZXJnZWRJMThuLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICBlbW9qaXNMZW5ndGg6IGNhdGVnb3J5LmVtb2ppcy5sZW5ndGgsXG4gICAgICAgICAgZW1vamlQcm9wczogdGhpcy5lbW9qaVByb3BzLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG4gICAgbWVyZ2VkSTE4bigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJlZXplKGRlZXBNZXJnZShJMThOLCB0aGlzLmkxOG4pKVxuICAgIH0sXG4gICAgaWRsZUVtb2ppKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5lbW9qaSh0aGlzLmVtb2ppKVxuICAgIH0sXG4gIH0sXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jYXRlZ29yaWVzID0gW11cbiAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCguLi50aGlzLmRhdGEuY2F0ZWdvcmllcygpKVxuICAgIHRoaXMuY2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoKGNhdGVnb3J5KSA9PiB7XG4gICAgICByZXR1cm4gY2F0ZWdvcnkuZW1vamlzLmxlbmd0aCA+IDBcbiAgICB9KVxuXG4gICAgdGhpcy5jYXRlZ29yaWVzWzBdLmZpcnN0ID0gdHJ1ZVxuICAgIE9iamVjdC5mcmVlemUodGhpcy5jYXRlZ29yaWVzKVxuICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNbMF1cbiAgICB0aGlzLnNraXBTY3JvbGxVcGRhdGUgPSBmYWxzZVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb25TY3JvbGxVcGRhdGUoc3RhcnRJbmRleCwgZW5kSW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLnNraXBTY3JvbGxVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5za2lwU2Nyb2xsVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmNhdGVnb3JpZXNbZW5kSW5kZXggLSAxXVxuICAgICAgfVxuICAgIH0sXG4gICAgb25BbmNob3JDbGljayhjYXRlZ29yeSkge1xuICAgICAgbGV0IGkgPSB0aGlzLmNhdGVnb3JpZXMuaW5kZXhPZihjYXRlZ29yeSlcbiAgICAgIHRoaXMuJHJlZnMuZHluU2Nyb2xsZXIuc2Nyb2xsVG9JdGVtKGkpXG4gICAgICB0aGlzLmFjdGl2ZUNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yaWVzW2ldXG4gICAgICB0aGlzLnNraXBTY3JvbGxVcGRhdGUgPSB0cnVlXG4gICAgfSxcbiAgICBvblNlYXJjaCh2YWx1ZSkge1xuICAgICAgbGV0IGVtb2ppcyA9IHRoaXMuZGF0YS5zZWFyY2godmFsdWUsIHRoaXMubWF4U2VhcmNoUmVzdWx0cylcbiAgICAgIHRoaXMuc2VhcmNoRW1vamlzID0gZW1vamlzXG4gICAgfSxcbiAgICBvbkVtb2ppRW50ZXIoZW1vamkpIHtcbiAgICAgIHRoaXMucHJldmlld0Vtb2ppID0gZW1vamlcbiAgICB9LFxuICAgIG9uRW1vamlMZWF2ZShlbW9qaSkge1xuICAgICAgdGhpcy5wcmV2aWV3RW1vamkgPSBudWxsXG4gICAgfSxcbiAgICBvbkVtb2ppQ2xpY2soZW1vamkpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcsIGVtb2ppKVxuICAgICAgZnJlcXVlbnRseS5hZGQoZW1vamkpXG4gICAgfSxcbiAgICBvblNraW5DaGFuZ2Uoc2tpbikge1xuICAgICAgdGhpcy5hY3RpdmVTa2luID0gc2tpblxuICAgICAgc3RvcmUudXBkYXRlKHsgc2tpbiB9KVxuXG4gICAgICB0aGlzLiRlbWl0KCdza2luLWNoYW5nZScsIHNraW4pXG4gICAgfSxcbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIEFuY2hvcnMsXG4gICAgQ2F0ZWdvcnksXG4gICAgUHJldmlldyxcbiAgICBTZWFyY2gsXG4gICAgRHluYW1pY1Njcm9sbGVyLFxuICAgIER5bmFtaWNTY3JvbGxlckl0ZW0sXG4gIH0sXG59XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQgZW1vamktbWFydC1zdGF0aWNcIiA6c3R5bGU9XCJjdXN0b21TdHlsZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1iYXIgZW1vamktbWFydC1iYXItYW5jaG9yc1wiIHYtaWY9XCJzaG93Q2F0ZWdvcmllc1wiPlxuICAgICAgPGFuY2hvcnNcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmNvbG9yPVwiY29sb3JcIlxuICAgICAgICA6Y2F0ZWdvcmllcz1cImNhdGVnb3JpZXNcIlxuICAgICAgICA6YWN0aXZlLWNhdGVnb3J5PVwiYWN0aXZlQ2F0ZWdvcnlcIlxuICAgICAgICBAY2xpY2s9XCJvbkFuY2hvckNsaWNrXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8c2xvdFxuICAgICAgbmFtZT1cInNlYXJjaFRlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6aTE4bj1cImkxOG5cIlxuICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgOm9uLXNlYXJjaD1cIm9uU2VhcmNoXCJcbiAgICA+XG4gICAgICA8c2VhcmNoXG4gICAgICAgIHYtaWY9XCJzaG93U2VhcmNoXCJcbiAgICAgICAgcmVmPVwic2VhcmNoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmkxOG49XCJtZXJnZWRJMThuXCJcbiAgICAgICAgOmF1dG8tZm9jdXM9XCJhdXRvRm9jdXNcIlxuICAgICAgICA6b24tc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgICBAc2VhcmNoPVwib25TZWFyY2hcIlxuICAgICAgLz5cbiAgICA8L3Nsb3Q+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zY3JvbGxcIiByZWY9XCJzY3JvbGxcIiBAc2Nyb2xsPVwib25TY3JvbGxcIj5cbiAgICAgIDxjYXRlZ29yeVxuICAgICAgICB2LXNob3c9XCJzZWFyY2hFbW9qaXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6aTE4bj1cIm1lcmdlZEkxOG5cIlxuICAgICAgICBpZD1cInNlYXJjaFwiXG4gICAgICAgIG5hbWU9XCJTZWFyY2hcIlxuICAgICAgICA6ZW1vamlzPVwic2VhcmNoRW1vamlzXCJcbiAgICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICAvPlxuICAgICAgPGNhdGVnb3J5XG4gICAgICAgIHYtZm9yPVwiY2F0ZWdvcnkgaW4gZmlsdGVyZWRDYXRlZ29yaWVzXCJcbiAgICAgICAgdi1zaG93PVwiIXNlYXJjaEVtb2ppcyAmJiAoaW5maW5pdGVTY3JvbGwgfHwgY2F0ZWdvcnkgPT0gYWN0aXZlQ2F0ZWdvcnkpXCJcbiAgICAgICAgcmVmPVwiY2F0ZWdvcmllc1wiXG4gICAgICAgIDprZXk9XCJjYXRlZ29yeS5pZFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDppMThuPVwibWVyZ2VkSTE4blwiXG4gICAgICAgIDppZD1cImNhdGVnb3J5LmlkXCJcbiAgICAgICAgOm5hbWU9XCJjYXRlZ29yeS5uYW1lXCJcbiAgICAgICAgOmVtb2ppcz1cImNhdGVnb3J5LmVtb2ppc1wiXG4gICAgICAgIDplbW9qaS1wcm9wcz1cImVtb2ppUHJvcHNcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxzbG90XG4gICAgICBuYW1lPVwicHJldmlld1RlbXBsYXRlXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgICA6ZW1vamk9XCJwcmV2aWV3RW1vamlcIlxuICAgICAgOmlkbGUtZW1vamk9XCJpZGxlRW1vamlcIlxuICAgICAgOnNob3ctc2tpbi10b25lcz1cInNob3dTa2luVG9uZXNcIlxuICAgICAgOmVtb2ppLXByb3BzPVwiZW1vamlQcm9wc1wiXG4gICAgICA6c2tpbi1wcm9wcz1cInNraW5Qcm9wc1wiXG4gICAgICA6b24tc2tpbi1jaGFuZ2U9XCJvblNraW5DaGFuZ2VcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1wcmV2aWV3XCIgdi1pZj1cInNob3dQcmV2aWV3XCI+XG4gICAgICAgIDxwcmV2aWV3XG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgICAgICAgOmVtb2ppPVwicHJldmlld0Vtb2ppXCJcbiAgICAgICAgICA6aWRsZS1lbW9qaT1cImlkbGVFbW9qaVwiXG4gICAgICAgICAgOnNob3ctc2tpbi10b25lcz1cInNob3dTa2luVG9uZXNcIlxuICAgICAgICAgIDplbW9qaS1wcm9wcz1cImVtb2ppUHJvcHNcIlxuICAgICAgICAgIDpza2luLXByb3BzPVwic2tpblByb3BzXCJcbiAgICAgICAgICA6b24tc2tpbi1jaGFuZ2U9XCJvblNraW5DaGFuZ2VcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9zbG90PlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgJy4uL3ZlbmRvci9yYWYtcG9seWZpbGwnXG5pbXBvcnQgc3RvcmUgZnJvbSAnLi4vdXRpbHMvc3RvcmUnXG5pbXBvcnQgZnJlcXVlbnRseSBmcm9tICcuLi91dGlscy9mcmVxdWVudGx5J1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBtZWFzdXJlU2Nyb2xsYmFyIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgeyBQaWNrZXJQcm9wcyB9IGZyb20gJy4uL3V0aWxzL3NoYXJlZC1wcm9wcydcbmltcG9ydCBBbmNob3JzIGZyb20gJy4vYW5jaG9ycydcbmltcG9ydCBDYXRlZ29yeSBmcm9tICcuL2NhdGVnb3J5J1xuaW1wb3J0IFByZXZpZXcgZnJvbSAnLi9wcmV2aWV3J1xuaW1wb3J0IFNlYXJjaCBmcm9tICcuL3NlYXJjaCdcblxuLypcbiAqIE5vdGUgYWJvdXQgYGJ1ZmZlcmAgc2V0dGluZyBmb3IgRHluYW1pY1Njcm9sbGVyOiB0aGlzIGlzIGFcbiAqIGZpeCBmb3IgIzQ5IC0gd2hlbiBjbGlja2luZyBvbiB0aGUgXCJGbGFnc1wiIGNhdGVnb3J5IGZvciB0aGUgZmlyc3RcbiAqIHRpbWUsIHRoZSBjYXRlZ29yeSBpcyBub3Qgc2Nyb2xsZWQgdG8gdGhlIHRvcCBvZiB0aGUgY29tcG9uZW50LlxuICogVGhpcyBpcyBiZWNhdXNlIHRoZSBsYXN0IGNhdGVnb3J5IHNpemUgaXMgbm90IGNhbGN1bGF0ZWQgeWV0IGFuZFxuICogdmlydHVhbCBzY3JvbGxlciB0YWtlcyAnbWluSXRlbVNpemUnIGFzIGNhdGVnb3J5IGhlaWdodC5cbiAqXG4gKiBWaXJ0dWFsIHNjcm9sbGVyIChSZWN5Y2xlU2Nyb2xsZXIgY29tcG9uZW50KSB1c2VzIGBidWZmZXJgIHZhbHVlXG4gKiB0byAgZGVjaWRlIGhvdyBtYW55IGNvbXBvbmVudHMgdG8gcmVuZGVyIGludGl0aWFsbHkgZGVwZW5kaW5nIG9uXG4gKiB0aGUgc2Nyb2xsIGFyZWEgc2l6ZSArIGJ1ZmZlcioyIChhbmQgYWxsIGNhdGVnb3JpZXMgaW5pdGlhbGx5XG4gKiBoYXZlIG1pbiBzaXplLCA2MHB4KS5cbiAqXG4gKiBCeSBpbmNyZWFzaW5nIGJ1ZmZlciB0byA0MDBweCwgd2UgbWFrZSB0aGUgc2Nyb2xsZXIgdG8gcGVyZm9ybVxuICogc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYWxsIGNhdGVnb3JpZXMgYW5kIHRoZSBmb2xsb3dpbmdcbiAqIHNjcm9sbFRvSXRlbSgpIGNhbGxzIHdvcmsgY29ycmVjdGx5LlxuICovXG5cbmltcG9ydCB7IER5bmFtaWNTY3JvbGxlciwgRHluYW1pY1Njcm9sbGVySXRlbSB9IGZyb20gJ3Z1ZS12aXJ0dWFsLXNjcm9sbGVyJ1xuLy8gaW1wb3J0ICd2dWUtdmlydHVhbC1zY3JvbGxlci9kaXN0L3Z1ZS12aXJ0dWFsLXNjcm9sbGVyLmNzcydcblxuY29uc3QgSTE4TiA9IHtcbiAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgbm90Zm91bmQ6ICdObyBFbW9qaSBGb3VuZCcsXG4gIGNhdGVnb3JpZXM6IHtcbiAgICBzZWFyY2g6ICdTZWFyY2ggUmVzdWx0cycsXG4gICAgcmVjZW50OiAnRnJlcXVlbnRseSBVc2VkJyxcbiAgICBwZW9wbGU6ICdTbWlsZXlzICYgUGVvcGxlJyxcbiAgICBuYXR1cmU6ICdBbmltYWxzICYgTmF0dXJlJyxcbiAgICBmb29kczogJ0Zvb2QgJiBEcmluaycsXG4gICAgYWN0aXZpdHk6ICdBY3Rpdml0eScsXG4gICAgcGxhY2VzOiAnVHJhdmVsICYgUGxhY2VzJyxcbiAgICBvYmplY3RzOiAnT2JqZWN0cycsXG4gICAgc3ltYm9sczogJ1N5bWJvbHMnLFxuICAgIGZsYWdzOiAnRmxhZ3MnLFxuICAgIGN1c3RvbTogJ0N1c3RvbScsXG4gIH0sXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICAuLi5QaWNrZXJQcm9wcyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9LFxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmVTa2luOiB0aGlzLnNraW4gfHwgc3RvcmUuZ2V0KCdza2luJykgfHwgdGhpcy5kZWZhdWx0U2tpbixcbiAgICAgIGFjdGl2ZUNhdGVnb3J5OiBudWxsLFxuICAgICAgcHJldmlld0Vtb2ppOiBudWxsLFxuICAgICAgc2VhcmNoRW1vamlzOiBudWxsLFxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBjdXN0b21TdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogdGhpcy5jYWxjdWxhdGVXaWR0aCArICdweCcsXG4gICAgICAgIC4uLnRoaXMucGlja2VyU3R5bGVzLFxuICAgICAgfVxuICAgIH0sXG4gICAgZW1vamlQcm9wcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hdGl2ZTogdGhpcy5uYXRpdmUsXG4gICAgICAgIHNraW46IHRoaXMuYWN0aXZlU2tpbixcbiAgICAgICAgc2V0OiB0aGlzLnNldCxcbiAgICAgICAgZW1vamlUb29sdGlwOiB0aGlzLmVtb2ppVG9vbHRpcCxcbiAgICAgICAgZW1vamlTaXplOiB0aGlzLmVtb2ppU2l6ZSxcbiAgICAgICAgb25FbnRlcjogdGhpcy5vbkVtb2ppRW50ZXIuYmluZCh0aGlzKSxcbiAgICAgICAgb25MZWF2ZTogdGhpcy5vbkVtb2ppTGVhdmUuYmluZCh0aGlzKSxcbiAgICAgICAgb25DbGljazogdGhpcy5vbkVtb2ppQ2xpY2suYmluZCh0aGlzKSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHNraW5Qcm9wcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNraW46IHRoaXMuYWN0aXZlU2tpbixcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbGN1bGF0ZVdpZHRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGVyTGluZSAqICh0aGlzLmVtb2ppU2l6ZSArIDEyKSArIDEyICsgMiArIG1lYXN1cmVTY3JvbGxiYXIoKVxuICAgIH0sXG4gICAgZmlsdGVyZWRDYXRlZ29yaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllcy5maWx0ZXIoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgIGxldCBpc0luY2x1ZGVkID1cbiAgICAgICAgICB0aGlzLmluY2x1ZGUgJiYgdGhpcy5pbmNsdWRlLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmluY2x1ZGUuaW5kZXhPZihjYXRlZ29yeS5pZCkgPiAtMVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgIGxldCBpc0V4Y2x1ZGVkID1cbiAgICAgICAgICB0aGlzLmV4Y2x1ZGUgJiYgdGhpcy5leGNsdWRlLmxlbmd0aFxuICAgICAgICAgICAgPyB0aGlzLmV4Y2x1ZGUuaW5kZXhPZihjYXRlZ29yeS5pZCkgPiAtMVxuICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICBsZXQgaGFzRW1vamlzID0gY2F0ZWdvcnkuZW1vamlzLmxlbmd0aCA+IDBcbiAgICAgICAgaWYgKHRoaXMuZW1vamlzVG9TaG93RmlsdGVyKSB7XG4gICAgICAgICAgaGFzRW1vamlzID0gY2F0ZWdvcnkuZW1vamlzLnNvbWUoKGVtb2ppKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbW9qaXNUb1Nob3dGaWx0ZXIodGhpcy5kYXRhLmVtb2ppc1tlbW9qaV0gfHwgZW1vamkpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNJbmNsdWRlZCAmJiAhaXNFeGNsdWRlZCAmJiBoYXNFbW9qaXNcbiAgICAgIH0pXG4gICAgfSxcbiAgICBtZXJnZWRJMThuKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZGVlcE1lcmdlKEkxOE4sIHRoaXMuaTE4bikpXG4gICAgfSxcbiAgICBpZGxlRW1vamkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmVtb2ppKHRoaXMuZW1vamkpXG4gICAgfSxcbiAgfSxcbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXVxuICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKC4uLnRoaXMuZGF0YS5jYXRlZ29yaWVzKCkpXG4gICAgdGhpcy5jYXRlZ29yaWVzID0gdGhpcy5jYXRlZ29yaWVzLmZpbHRlcigoY2F0ZWdvcnkpID0+IHtcbiAgICAgIHJldHVybiBjYXRlZ29yeS5lbW9qaXMubGVuZ3RoID4gMFxuICAgIH0pXG5cbiAgICB0aGlzLmNhdGVnb3JpZXNbMF0uZmlyc3QgPSB0cnVlXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNhdGVnb3JpZXMpXG4gICAgdGhpcy5hY3RpdmVDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllc1swXVxuICAgIHRoaXMuc2tpcFNjcm9sbFVwZGF0ZSA9IGZhbHNlXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvblNjcm9sbCgpIHtcbiAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsICYmICF0aGlzLndhaXRpbmdGb3JQYWludCkge1xuICAgICAgICB0aGlzLndhaXRpbmdGb3JQYWludCA9IHRydWVcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLm9uU2Nyb2xsUGFpbnQuYmluZCh0aGlzKSlcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uU2Nyb2xsUGFpbnQoKSB7XG4gICAgICB0aGlzLndhaXRpbmdGb3JQYWludCA9IGZhbHNlXG4gICAgICBsZXQgc2Nyb2xsVG9wID0gdGhpcy4kcmVmcy5zY3JvbGwuc2Nyb2xsVG9wLFxuICAgICAgICBhY3RpdmVDYXRlZ29yeSA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzWzBdXG4gICAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBsZXQgY2F0ZWdvcnkgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1tpXSxcbiAgICAgICAgICBjb21wb25lbnQgPSB0aGlzLiRyZWZzLmNhdGVnb3JpZXNbaV1cbiAgICAgICAgLy8gVGhlIGAtNTBgIG9mZnNldCBzd2l0Y2hlcyBhY3RpdmUgY2F0ZWdvcnkgKHNlbGVjdGVkIGluIHRoZVxuICAgICAgICAvLyBhbmNob3JzIGJhcikgYSBiaXQgZWFyaWxlciwgYmVmb3JlIGl0IGFjdHVhbGx5IHJlYWNoZXMgdGhlIHRvcC5cbiAgICAgICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuJGVsLm9mZnNldFRvcCAtIDUwID4gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBhY3RpdmVDYXRlZ29yeSA9IGNhdGVnb3J5XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUNhdGVnb3J5ID0gYWN0aXZlQ2F0ZWdvcnlcbiAgICB9LFxuICAgIG9uQW5jaG9yQ2xpY2soY2F0ZWdvcnkpIHtcbiAgICAgIGxldCBpID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXMuaW5kZXhPZihjYXRlZ29yeSksXG4gICAgICAgIGNvbXBvbmVudCA9IHRoaXMuJHJlZnMuY2F0ZWdvcmllc1tpXSxcbiAgICAgICAgc2Nyb2xsVG9Db21wb25lbnQgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgbGV0IHRvcCA9IGNvbXBvbmVudC4kZWwub2Zmc2V0VG9wXG4gICAgICAgICAgICBpZiAoY2F0ZWdvcnkuZmlyc3QpIHtcbiAgICAgICAgICAgICAgdG9wID0gMFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kcmVmcy5zY3JvbGwuc2Nyb2xsVG9wID0gdG9wXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbW9qaXMpIHtcbiAgICAgICAgdGhpcy5vblNlYXJjaChudWxsKVxuICAgICAgICB0aGlzLiRyZWZzLnNlYXJjaC5jbGVhcigpXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKHNjcm9sbFRvQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgIHNjcm9sbFRvQ29tcG9uZW50KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1tpXVxuICAgICAgfVxuICAgIH0sXG4gICAgb25TZWFyY2godmFsdWUpIHtcbiAgICAgIGxldCBlbW9qaXMgPSB0aGlzLmRhdGEuc2VhcmNoKHZhbHVlLCB0aGlzLm1heFNlYXJjaFJlc3VsdHMpXG4gICAgICB0aGlzLnNlYXJjaEVtb2ppcyA9IGVtb2ppc1xuICAgIH0sXG4gICAgb25FbW9qaUVudGVyKGVtb2ppKSB7XG4gICAgICB0aGlzLnByZXZpZXdFbW9qaSA9IGVtb2ppXG4gICAgfSxcbiAgICBvbkVtb2ppTGVhdmUoZW1vamkpIHtcbiAgICAgIHRoaXMucHJldmlld0Vtb2ppID0gbnVsbFxuICAgIH0sXG4gICAgb25FbW9qaUNsaWNrKGVtb2ppKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QnLCBlbW9qaSlcbiAgICAgIGZyZXF1ZW50bHkuYWRkKGVtb2ppKVxuICAgIH0sXG4gICAgb25Ta2luQ2hhbmdlKHNraW4pIHtcbiAgICAgIHRoaXMuYWN0aXZlU2tpbiA9IHNraW5cbiAgICAgIHN0b3JlLnVwZGF0ZSh7IHNraW4gfSlcblxuICAgICAgdGhpcy4kZW1pdCgnc2tpbi1jaGFuZ2UnLCBza2luKVxuICAgIH0sXG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBBbmNob3JzLFxuICAgIENhdGVnb3J5LFxuICAgIFByZXZpZXcsXG4gICAgU2VhcmNoLFxuICAgIER5bmFtaWNTY3JvbGxlcixcbiAgICBEeW5hbWljU2Nyb2xsZXJJdGVtLFxuICB9LFxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LWFuY2hvcnNcIj5cbiAgPHNwYW5cbiAgICB2LWZvcj1cImNhdGVnb3J5IGluIGNhdGVnb3JpZXNcIlxuICAgIDprZXk9XCJjYXRlZ29yeS5pZFwiXG4gICAgOmNsYXNzPVwieyAnZW1vamktbWFydC1hbmNob3InOiB0cnVlLCAnZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWQnOiBjYXRlZ29yeS5pZCA9PSBhY3RpdmVDYXRlZ29yeS5pZCB9XCJcbiAgICA6c3R5bGU9XCJ7ICdjb2xvcic6IChjYXRlZ29yeS5pZCA9PSBhY3RpdmVDYXRlZ29yeS5pZCA/IGNvbG9yIDogJycpIH1cIlxuICAgIDpkYXRhLXRpdGxlPVwiaTE4bi5jYXRlZ29yaWVzW2NhdGVnb3J5LmlkXVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2NsaWNrJywgY2F0ZWdvcnkpXCI+XG4gICAgPGRpdiB2LWh0bWw9XCJzdmdzW2NhdGVnb3J5LmlkXVwiLz5cbiAgICA8c3BhbiBjbGFzcz1cImVtb2ppLW1hcnQtYW5jaG9yLWJhclwiIDpzdHlsZT1cInsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9XCI+PC9zcGFuPlxuICA8L3NwYW4+XG48L2Rpdj5cblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuaW1wb3J0IHN2Z3MgZnJvbSAnLi4vc3ZncydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGkxOG46IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSxcbiAgICBjYXRlZ29yaWVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBhY3RpdmVDYXRlZ29yeToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc3ZncyA9IHN2Z3NcbiAgfVxufVxuXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cblxuPGRpdiA6Y2xhc3M9XCJ7ICdlbW9qaS1tYXJ0LWNhdGVnb3J5JzogdHJ1ZSwgJ2Vtb2ppLW1hcnQtbm8tcmVzdWx0cyc6ICFoYXNSZXN1bHRzIH1cIiB2LWlmPVwiaXNWaXNpYmxlICYmIChpc1NlYXJjaCB8fCBoYXNSZXN1bHRzKVwiPlxuICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1jYXRlZ29yeS1sYWJlbFwiPlxuICAgIDxzcGFuPnt7IGkxOG4uY2F0ZWdvcmllc1tpZF0gfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDx0ZW1wbGF0ZSB2LWZvcj1cInsgZW1vamlPYmplY3QsIGVtb2ppVmlld30gaW4gZW1vamlPYmplY3RzXCI+XG4gICAgPHNwYW5cbiAgICAgIHYtaWY9XCJlbW9qaVZpZXcuY2FuUmVuZGVyXCJcbiAgICAgIDpkYXRhLXRpdGxlPVwiZW1vamlPYmplY3Quc2hvcnRfbmFtZVwiXG4gICAgICA6dGl0bGU9XCJlbW9qaVZpZXcudGl0bGVcIlxuICAgICAgY2xhc3M9XCJlbW9qaS1tYXJ0LWVtb2ppXCJcbiAgICAgIEBtb3VzZWVudGVyPVwiZW1vamlQcm9wcy5vbkVudGVyKGVtb2ppVmlldy5nZXRFbW9qaSgpKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cImVtb2ppUHJvcHMub25MZWF2ZShlbW9qaVZpZXcuZ2V0RW1vamkoKSlcIlxuICAgICAgQGNsaWNrPVwiZW1vamlQcm9wcy5vbkNsaWNrKGVtb2ppVmlldy5nZXRFbW9qaSgpKVwiPlxuICAgICAgPHNwYW4gIDpjbGFzcz1cImVtb2ppVmlldy5jc3NDbGFzc1wiIDpzdHlsZT1cImVtb2ppVmlldy5jc3NTdHlsZVwiPnt7ZW1vamlWaWV3LmNvbnRlbnR9fTwvc3Bhbj5cbiAgICA8L3NwYW4+XG4gIDwvdGVtcGxhdGU+XG5cbiAgPGRpdiB2LWlmPVwiIWhhc1Jlc3VsdHNcIj5cbiAgICA8ZW1vamlcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICBlbW9qaT1cInNsZXV0aF9vcl9zcHlcIlxuICAgICAgOm5hdGl2ZT1cImVtb2ppUHJvcHMubmF0aXZlXCJcbiAgICAgIDpza2luPVwiZW1vamlQcm9wcy5za2luXCJcbiAgICAgIDpzZXQ9XCJlbW9qaVByb3BzLnNldFwiXG4gICAgLz5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1uby1yZXN1bHRzLWxhYmVsXCI+e3sgaTE4bi5ub3Rmb3VuZCB9fTwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgeyBFbW9qaVZpZXcgfSBmcm9tICcuLi91dGlscy9lbW9qaS1kYXRhJ1xuaW1wb3J0IEVtb2ppIGZyb20gJy4vRW1vamknXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBpMThuOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaWQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZW1vamlzOiB7XG4gICAgICB0eXBlOiBBcnJheVxuICAgIH0sXG4gICAgZW1vamlQcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5lbW9qaXNcbiAgICB9LFxuICAgIGlzU2VhcmNoKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmFtZSA9PSAnU2VhcmNoJ1xuICAgIH0sXG4gICAgaGFzUmVzdWx0cygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVtb2ppcy5sZW5ndGggPiAwXG4gICAgfSxcbiAgICBlbW9qaU9iamVjdHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbW9qaXMubWFwKChlbW9qaSkgPT4ge1xuICAgICAgICAgIGxldCBlbW9qaU9iamVjdCA9IGVtb2ppXG4gICAgICAgICAgbGV0IGVtb2ppVmlldyA9IG5ldyBFbW9qaVZpZXcoXG4gICAgICAgICAgICBlbW9qaSxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLnNldCxcbiAgICAgICAgICAgIHRoaXMuZW1vamlQcm9wcy5uYXRpdmUsXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuZmFsbGJhY2ssXG4gICAgICAgICAgICB0aGlzLmVtb2ppUHJvcHMuZW1vamlUb29sdGlwLFxuICAgICAgICAgICAgdGhpcy5lbW9qaVByb3BzLmVtb2ppU2l6ZSxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHsgZW1vamlPYmplY3QsIGVtb2ppVmlldyB9XG4gICAgICB9KVxuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIEVtb2ppXG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXdcIj5cbiAgPHRlbXBsYXRlIHYtaWY9XCJlbW9qaVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiPlxuICAgICAgICA8ZW1vamlcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDplbW9qaT1cImVtb2ppXCJcbiAgICAgICAgICA6bmF0aXZlPVwiZW1vamlQcm9wcy5uYXRpdmVcIlxuICAgICAgICAgIDpza2luPVwiZW1vamlQcm9wcy5za2luXCJcbiAgICAgICAgICA6c2V0PVwiZW1vamlQcm9wcy5zZXRcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj57eyBlbW9qaS5uYW1lIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lc1wiPlxuICAgICAgICAgIDxzcGFuIHYtZm9yPVwic2hvcnROYW1lIGluIGVtb2ppU2hvcnROYW1lc1wiIDprZXk9XCJzaG9ydE5hbWVcIiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVcIj46e3sgc2hvcnROYW1lIH19Ojwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25zXCI+XG4gICAgICAgICAgPHNwYW4gdi1mb3I9XCJlbW90aWNvbiBpbiBlbW9qaUVtb3RpY29uc1wiIDprZXk9XCJlbW90aWNvblwiIGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb3RpY29uXCI+e3sgZW1vdGljb24gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIDwvdGVtcGxhdGU+XG5cbiAgPHRlbXBsYXRlIHYtZWxzZT5cbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICA8ZW1vamlcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOmVtb2ppPVwiaWRsZUVtb2ppXCJcbiAgICAgICAgOm5hdGl2ZT1cImVtb2ppUHJvcHMubmF0aXZlXCJcbiAgICAgICAgOnNraW49XCJlbW9qaVByb3BzLnNraW5cIlxuICAgICAgICA6c2V0PVwiZW1vamlQcm9wcy5zZXRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJlbW9qaS1tYXJ0LXRpdGxlLWxhYmVsXCI+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IHYtaWY9XCJzaG93U2tpblRvbmVzXCIgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctc2tpbnNcIj5cbiAgICAgIDxza2lucyA6c2tpbj1cInNraW5Qcm9wcy5za2luXCIgQGNoYW5nZT1cIm9uU2tpbkNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC90ZW1wbGF0ZT5cbjwvZGl2PlxuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuXG5pbXBvcnQgRW1vamkgZnJvbSAnLi9FbW9qaSdcbmltcG9ydCBTa2lucyBmcm9tICcuL3NraW5zJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgZGF0YToge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZW1vamk6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cbiAgICB9LFxuICAgIGlkbGVFbW9qaToge1xuICAgICAgdHlwZTogW1N0cmluZywgT2JqZWN0XSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBzaG93U2tpblRvbmVzOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgZW1vamlQcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHNraW5Qcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIG9uU2tpbkNoYW5nZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBlbW9qaURhdGEoKSB7XG4gICAgICBpZiAodGhpcy5lbW9qaSkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbW9qaVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG4gICAgfSxcbiAgICBlbW9qaVNob3J0TmFtZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbW9qaURhdGEuc2hvcnRfbmFtZXNcbiAgICB9LFxuICAgIGVtb2ppRW1vdGljb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW1vamlEYXRhLmVtb3RpY29uc1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIEVtb2ppLFxuICAgIFNraW5zXG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXNlYXJjaFwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIDpwbGFjZWhvbGRlcj1cImkxOG4uc2VhcmNoXCIgdi1tb2RlbD1cInZhbHVlXCI+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBpMThuOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgYXV0b0ZvY3VzOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG9uU2VhcmNoOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogJydcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZW1vamlJbmRleCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzZWFyY2gnLCB0aGlzLnZhbHVlKVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnXG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIGxldCAkaW5wdXQgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpXG5cbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgICRpbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG5cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlPlxuXG48ZGl2IDpjbGFzcz1cInsgJ2Vtb2ppLW1hcnQtc2tpbi1zd2F0Y2hlcyc6IHRydWUsICdlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXMtb3BlbmVkJzogb3BlbmVkIH1cIj5cbiAgPHNwYW4gdi1mb3I9XCJza2luVG9uZSBpbiA2XCIgOmtleT1cInNraW5Ub25lXCIgOmNsYXNzPVwieyAnZW1vamktbWFydC1za2luLXN3YXRjaCc6IHRydWUsICdlbW9qaS1tYXJ0LXNraW4tc3dhdGNoLXNlbGVjdGVkJzogc2tpbiA9PSBza2luVG9uZSB9XCI+XG4gICAgPHNwYW4gOmNsYXNzPVwiJ2Vtb2ppLW1hcnQtc2tpbiBlbW9qaS1tYXJ0LXNraW4tdG9uZS0nICsgc2tpblRvbmVcIiBAY2xpY2s9XCJvbkNsaWNrKHNraW5Ub25lKVwiPjwvc3Bhbj5cbiAgPC9zcGFuPlxuPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBza2luOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soc2tpblRvbmUpIHtcbiAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICBpZiAoc2tpblRvbmUgIT0gdGhpcy5za2luKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgc2tpblRvbmUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5vcGVuZWQgPSAhdGhpcy5vcGVuZWRcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjUnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikgaWYgKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpIFRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi4yIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi5lbW9qaS1tYXJ0LFxcbi5lbW9qaS1tYXJ0ICoge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjE1O1xcbn1cXG5cXG4uZW1vamktbWFydCB7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgLyogZGlzcGxheTogaW5saW5lLWJsb2NrOyAqL1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGhlaWdodDogNDIwcHg7XFxuICBjb2xvcjogIzIyMjQyNztcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkOWQ5ZDk7XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG5cXG4uZW1vamktbWFydC1lbW9qaSB7XFxuICBwYWRkaW5nOiA2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBmb250LXNpemU6IDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWVtb2ppIHNwYW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb2ppIC5lbW9qaS1tYXJ0LWVtb2ppIHNwYW4ge1xcbiAgd2lkdGg6IDM4cHg7XFxuICBoZWlnaHQ6IDM4cHg7XFxuICBmb250LXNpemU6IDMycHg7XFxufVxcblxcbi5lbW9qaS10eXBlLW5hdGl2ZSB7XFxuICBmb250LWZhbWlseTogXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCIsIFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJUd2Vtb2ppIE1vemlsbGFcXFwiLCBcXFwiTm90byBDb2xvciBFbW9qaVxcXCIsIFxcXCJFbW9qaU9uZSBDb2xvclxcXCIsIFxcXCJBbmRyb2lkIEVtb2ppXFxcIjtcXG4gIHdvcmQtYnJlYWs6IGtlZXAtYWxsO1xcbn1cXG5cXG4uZW1vamktdHlwZS1pbWFnZSB7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDUyMDAlO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtZW1vamlvbmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWVtb2ppb25lQDQuMC40L2ltZy9lbW9qaW9uZS9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtbWVzc2VuZ2VyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaHR0cHM6Ly91bnBrZy5jb20vZW1vamktZGF0YXNvdXJjZS1tZXNzZW5nZXJANC4wLjQvaW1nL21lc3Nlbmdlci9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtYXBwbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWFwcGxlQDQuMC40L2ltZy9hcHBsZS9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtZmFjZWJvb2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJodHRwczovL3VucGtnLmNvbS9lbW9qaS1kYXRhc291cmNlLWZhY2Vib29rQDQuMC40L2ltZy9mYWNlYm9vay9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtZ29vZ2xlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiaHR0cHM6Ly91bnBrZy5jb20vZW1vamktZGF0YXNvdXJjZS1nb29nbGVANC4wLjQvaW1nL2dvb2dsZS9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG4uZW1vamktdHlwZS1pbWFnZS5lbW9qaS1zZXQtdHdpdHRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtdHdpdHRlckA0LjAuNC9pbWcvdHdpdHRlci9zaGVldHMtMjU2LzY0LnBuZ1xcXCIpO1xcbn1cXG5cXG4uZW1vamktbWFydC1iYXIge1xcbiAgYm9yZGVyOiAwIHNvbGlkICNkOWQ5ZDk7XFxufVxcbi5lbW9qaS1tYXJ0LWJhcjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA1cHg7XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNXB4O1xcbn1cXG4uZW1vamktbWFydC1iYXI6bGFzdC1jaGlsZCB7XFxuICBib3JkZXItdG9wLXdpZHRoOiAxcHg7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA1cHg7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNXB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1zY3JvbGwge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbiAgLW1zLWZsZXg6IDE7XFxuICAgICAgZmxleDogMTtcXG4gIHBhZGRpbmc6IDAgNnB4IDZweCA2cHg7XFxuICB6LWluZGV4OiAwOyAvKiBGaXggZm9yIHJlbmRlcmluZyBzdGlja3kgcG9zaXRpb25lZCBjYXRlZ29yeSBsYWJlbHMgb24gQ2hyb21lICovXFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOyAvKiBhdm9pZHMgXFxcInJlcGFpbnRzIG9uIHNjcm9sbFxcXCIgaW4gbW9iaWxlIENocm9tZSAqL1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3JzIHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbiAgY29sb3I6ICM4NTg1ODU7XFxuICBsaW5lLWhlaWdodDogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtYW5jaG9yIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgcGFkZGluZzogMTJweCA0cHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgLjFzIGVhc2Utb3V0O1xcbn1cXG4uZW1vamktbWFydC1hbmNob3I6aG92ZXIsXFxuLmVtb2ppLW1hcnQtYW5jaG9yLXNlbGVjdGVkIHtcXG4gIGNvbG9yOiAjNDY0NjQ2O1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWQgLmVtb2ppLW1hcnQtYW5jaG9yLWJhciB7XFxuICBib3R0b206IDA7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWFuY2hvci1iYXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAtM3B4OyBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7IGhlaWdodDogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQ2NDY0NjtcXG59XFxuXFxuLmVtb2ppLW1hcnQtYW5jaG9ycyBpIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAyMnB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1hbmNob3JzIHN2ZyB7XFxuICBmaWxsOiBjdXJyZW50Q29sb3I7XFxuICBtYXgtaGVpZ2h0OiAxOHB4O1xcbn1cXG5cXG4uZW1vamktbWFydCAuc2Nyb2xsZXIge1xcbiAgaGVpZ2h0OiAyNTBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC1tcy1mbGV4OiAxO1xcbiAgICAgIGZsZXg6IDE7XFxuICBwYWRkaW5nOiAwIDZweCA2cHggNnB4O1xcbiAgei1pbmRleDogMDsgLyogRml4IGZvciByZW5kZXJpbmcgc3RpY2t5IHBvc2l0aW9uZWQgY2F0ZWdvcnkgbGFiZWxzIG9uIENocm9tZSAqL1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsgLyogYXZvaWRzIFxcXCJyZXBhaW50cyBvbiBzY3JvbGxcXFwiIGluIG1vYmlsZSBDaHJvbWUgKi9cXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2VhcmNoIHtcXG4gIG1hcmdpbi10b3A6IDZweDtcXG4gIHBhZGRpbmc6IDAgNnB4O1xcbn1cXG4uZW1vamktbWFydC1zZWFyY2ggaW5wdXQge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IC4yZW0gLjZlbTtcXG4gIGJvcmRlci1yYWRpdXM6IDI1cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDlkOWQ5O1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmVtb2ppLW1hcnQtc2VhcmNoLXJlc3VsdHMge1xcbiAgaGVpZ2h0OiAyNTBweDtcXG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtY2F0ZWdvcnkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeSAuZW1vamktbWFydC1lbW9qaSBzcGFuIHtcXG4gIHotaW5kZXg6IDE7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWNhdGVnb3J5IC5lbW9qaS1tYXJ0LWVtb2ppOmhvdmVyOmJlZm9yZSB7XFxuICB6LWluZGV4OiAwO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7IGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcXG4gIGJvcmRlci1yYWRpdXM6IDEwMCU7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeSAuZW1vamktbWFydC1lbW9qaTpob3ZlcjpiZWZvcmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWwge1xcbiAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5O1xcbiAgcG9zaXRpb246IHN0aWNreTtcXG4gIHRvcDogMDtcXG59XFxuLmVtb2ppLW1hcnQtc3RhdGljIC5lbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsIHtcXG4gIHotaW5kZXg6IDI7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKiBwb3NpdGlvbjogc3RpY2t5OyAqL1xcbiAgLyogcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OyAqL1xcbn1cXG5cXG4uZW1vamktbWFydC1jYXRlZ29yeS1sYWJlbCBzcGFuIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgcGFkZGluZzogNXB4IDZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC45NSk7XFxufVxcblxcbi5lbW9qaS1tYXJ0LWVtb2ppIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtbm8tcmVzdWx0cyB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBwYWRkaW5nLXRvcDogNzBweDtcXG4gIGNvbG9yOiAjODU4NTg1O1xcbn1cXG4uZW1vamktbWFydC1uby1yZXN1bHRzIC5lbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5lbW9qaS1tYXJ0LW5vLXJlc3VsdHMgLmVtb2ppLW1hcnQtbm8tcmVzdWx0cy1sYWJlbCB7XFxuICBtYXJnaW4tdG9wOiAuMmVtO1xcbn1cXG4uZW1vamktbWFydC1uby1yZXN1bHRzIC5lbW9qaS1tYXJ0LWVtb2ppOmhvdmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBub25lO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogNzBweDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1lbW9qaSxcXG4uZW1vamktbWFydC1wcmV2aWV3LWRhdGEsXFxuLmVtb2ppLW1hcnQtcHJldmlldy1za2lucyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LWVtb2ppIHtcXG4gIGxlZnQ6IDEycHg7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZGF0YSB7XFxuICBsZWZ0OiA2OHB4OyByaWdodDogMTJweDtcXG4gIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtcHJldmlldy1za2lucyB7XFxuICByaWdodDogMzBweDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LW5hbWUge1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogIzg4ODtcXG59XFxuLmVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWUgKyAuZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSxcXG4uZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZSArIC5lbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb24sXFxuLmVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvbiArIC5lbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb24ge1xcbiAgbWFyZ2luLWxlZnQ6IC41ZW07XFxufVxcblxcbi5lbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb24ge1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6ICNiYmI7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXRpdGxlIHNwYW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtdGl0bGUgLmVtb2ppLW1hcnQtZW1vamkge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLmVtb2ppLW1hcnQtdGl0bGUtbGFiZWwge1xcbiAgY29sb3I6ICM5OTlBOUM7XFxuICBmb250LXNpemU6IDIxcHg7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaGVzIHtcXG4gIGZvbnQtc2l6ZTogMDtcXG4gIHBhZGRpbmc6IDJweCAwO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2Q5ZDlkOTtcXG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaGVzLW9wZW5lZCAuZW1vamktbWFydC1za2luLXN3YXRjaCB7XFxuICB3aWR0aDogMTZweDtcXG4gIHBhZGRpbmc6IDAgMnB4O1xcbn1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaGVzLW9wZW5lZCAuZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZDphZnRlciB7XFxuICBvcGFjaXR5OiAuNzU7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAwO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHdpZHRoLCBwYWRkaW5nO1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogLjEyNXM7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1vdXQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4tc3dhdGNoOm50aC1jaGlsZCgxKSB7IHRyYW5zaXRpb24tZGVsYXk6IDBzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoMikgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMDNzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoMykgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMDZzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoNCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMDlzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoNSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMTJzIH1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaDpudGgtY2hpbGQoNikgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMTVzIH1cXG5cXG4uZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTZweDtcXG4gIHBhZGRpbmc6IDAgMnB4O1xcbn1cXG4uZW1vamktbWFydC1za2luLXN3YXRjaC1zZWxlY3RlZDphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlOyBsZWZ0OiA1MCU7XFxuICB3aWR0aDogNHB4OyBoZWlnaHQ6IDRweDtcXG4gIG1hcmdpbjogLTJweCAwIDAgLTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMnMgZWFzZS1vdXQ7XFxufVxcblxcbi5lbW9qaS1tYXJ0LXNraW4ge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDEwMCU7IHBhZGRpbmctdG9wOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMnB4O1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG59XFxuXFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTEgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjOTNhIH1cXG4uZW1vamktbWFydC1za2luLXRvbmUtMiB7IGJhY2tncm91bmQtY29sb3I6ICNmYWRjYmMgfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS0zIHsgYmFja2dyb3VuZC1jb2xvcjogI2UwYmI5NSB9XFxuLmVtb2ppLW1hcnQtc2tpbi10b25lLTQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjYmY4ZjY4IH1cXG4uZW1vamktbWFydC1za2luLXRvbmUtNSB7IGJhY2tncm91bmQtY29sb3I6ICM5YjY0M2QgfVxcbi5lbW9qaS1tYXJ0LXNraW4tdG9uZS02IHsgYmFja2dyb3VuZC1jb2xvcjogIzU5NDUzOSB9XFxuXFxuXFxuLyogdnVlLXZpcnR1YWwtc2Nyb2xsZXIvZGlzdC92dWUtdmlydHVhbC1zY3JvbGxlci5jc3MgKi9cXG4udnVlLXJlY3ljbGUtc2Nyb2xsZXJ7cG9zaXRpb246cmVsYXRpdmV9LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi12ZXJ0aWNhbDpub3QoLnBhZ2UtbW9kZSl7b3ZlcmZsb3cteTphdXRvfS52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbDpub3QoLnBhZ2UtbW9kZSl7b3ZlcmZsb3cteDphdXRvfS52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbHtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0udnVlLXJlY3ljbGUtc2Nyb2xsZXJfX3Nsb3R7LW1zLWZsZXg6YXV0byAwIDBweDtmbGV4OmF1dG8gMCAwfS52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS13cmFwcGVyey1tcy1mbGV4OjE7ZmxleDoxO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLnJlYWR5IC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLmRpcmVjdGlvbi12ZXJ0aWNhbCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlcnt3aWR0aDoxMDAlfS52dWUtcmVjeWNsZS1zY3JvbGxlci5kaXJlY3Rpb24taG9yaXpvbnRhbCAudnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlcntoZWlnaHQ6MTAwJX0udnVlLXJlY3ljbGUtc2Nyb2xsZXIucmVhZHkuZGlyZWN0aW9uLXZlcnRpY2FsIC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3e3dpZHRoOjEwMCV9LnZ1ZS1yZWN5Y2xlLXNjcm9sbGVyLnJlYWR5LmRpcmVjdGlvbi1ob3Jpem9udGFsIC52dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3e2hlaWdodDoxMDAlfS5yZXNpemUtb2JzZXJ2ZXJbZGF0YS12LWIzMjllZTRjXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7ei1pbmRleDotMTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtvcGFjaXR5OjB9LnJlc2l6ZS1vYnNlcnZlcltkYXRhLXYtYjMyOWVlNGNdIG9iamVjdHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6LTF9XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIi8qXFxuICogUXVhc2FyIEZyYW1ld29yayB2MC4xNy4yMFxcbiAqIChjKSAyMDE2LXByZXNlbnQgUmF6dmFuIFN0b2VuZXNjdVxcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cXG4gKi9cXG4qLFxcbio6YmVmb3JlLFxcbio6YWZ0ZXIge1xcbiAgYm94LXNpemluZzogaW5oZXJpdDtcXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICAtbW96LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5odG1sLFxcbmJvZHksXFxuI3EtYXBwIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxufVxcbmh0bWwsXFxuYm9keSB7XFxuICBtYXJnaW46IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5pbnB1dFt0eXBlPSd0ZXh0J10sXFxuaW5wdXRbdHlwZT0nZW1haWwnXSxcXG5pbnB1dFt0eXBlPSdzZWFyY2gnXSxcXG5pbnB1dFt0eXBlPSdwYXNzd29yZCddIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIC1tb3otYXBwZWFyYW5jZTogbm9uZSAvKiBtb2JpbGUgZmlyZWZveCB0b28hICovO1xcbn1cXG5hcnRpY2xlLFxcbmFzaWRlLFxcbmRldGFpbHMsXFxuZmlnY2FwdGlvbixcXG5maWd1cmUsXFxuZm9vdGVyLFxcbmhlYWRlcixcXG5tYWluLFxcbm1lbnUsXFxubmF2LFxcbnNlY3Rpb24sXFxuc3VtbWFyeSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuYXVkaW86bm90KFtjb250cm9sc10pIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBoZWlnaHQ6IDA7XFxufVxcbmFiYnJbdGl0bGVdIHtcXG4gIGJvcmRlci1ib3R0b206IG5vbmU7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG4gIC13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZG90dGVkO1xcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSBkb3R0ZWQ7XFxufVxcbmRmbiB7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7XFxufVxcbmltZyB7XFxuICBib3JkZXItc3R5bGU6IG5vbmU7XFxufVxcbnN2Zzpub3QoOnJvb3QpIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbmNvZGUsXFxua2JkLFxcbnByZSxcXG5zYW1wIHtcXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIG1vbm9zcGFjZTtcXG4gIGZvbnQtc2l6ZTogMWVtO1xcbn1cXG5ociB7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG4gIGhlaWdodDogMDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5idXR0b24sXFxuaW5wdXQsXFxuc2VsZWN0LFxcbnRleHRhcmVhIHtcXG4gIGZvbnQ6IGluaGVyaXQ7XFxuICBtYXJnaW46IDA7XFxufVxcbm9wdGdyb3VwIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5idXR0b24sXFxuaW5wdXQsXFxuc2VsZWN0IHtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG5idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsXFxuaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXIge1xcbiAgYm9yZGVyOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuYnV0dG9uOi1tb3otZm9jdXNyaW5nLFxcbmlucHV0Oi1tb3otZm9jdXNyaW5nIHtcXG4gIG91dGxpbmU6IDFweCBkb3R0ZWQgQnV0dG9uVGV4dDtcXG59XFxudGV4dGFyZWEge1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxufVxcbmlucHV0W3R5cGU9J3NlYXJjaCddIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkO1xcbn1cXG5pbnB1dFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixcXG5pbnB1dFt0eXBlPSdzZWFyY2gnXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbi5xLWljb24ge1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgd29yZC13cmFwOiBub3JtYWw7XFxuICBkaXJlY3Rpb246IGx0cjtcXG59XFxuLnEtaWNvbixcXG4ubWF0ZXJpYWwtaWNvbnMge1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGN1cnNvcjogaW5oZXJpdDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG59XFxuLnEtYWN0aW9uc2hlZXQtdGl0bGUge1xcbiAgbWluLWhlaWdodDogNTZweDtcXG4gIHBhZGRpbmc6IDAgMTZweDtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ib2R5IHtcXG4gIG1heC1oZWlnaHQ6IDUwMHB4O1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkIHtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkIC5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudCB7XFxuICBtYXJnaW46IDI0cHggMDtcXG59XFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIHtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjNzO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW06aG92ZXIsXFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQ6ICNkMGQwZDA7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gaSxcXG4ucS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gaW1nIHtcXG4gIGZvbnQtc2l6ZTogNDhweDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuLnEtYWN0aW9uc2hlZXQtZ3JpZC1pdGVtIC5hdmF0YXIge1xcbiAgd2lkdGg6IDQ4cHg7XFxuICBoZWlnaHQ6IDQ4cHg7XFxufVxcbi5xLWFjdGlvbnNoZWV0LWdyaWQtaXRlbSBzcGFuIHtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG4ucS1sb2FkaW5nLWJhciB7XFxuICBwb3NpdGlvbjogZml4ZWQ7XFxuICB6LWluZGV4OiA5OTk4O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSksIG9wYWNpdHkgMC41cztcXG59XFxuLnEtbG9hZGluZy1iYXIudG9wIHtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIHJpZ2h0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxuICB0b3A6IDA7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtbG9hZGluZy1iYXIuYm90dG9tIHtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIHJpZ2h0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxuICBib3R0b206IDA7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtbG9hZGluZy1iYXIucmlnaHQge1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWxvYWRpbmctYmFyLmxlZnQge1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtYWxlcnQge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtYWxlcnQgLmF2YXRhciB7XFxuICB3aWR0aDogMzJweDtcXG4gIGhlaWdodDogMzJweDtcXG59XFxuLnEtYWxlcnQtc2lkZSxcXG4ucS1hbGVydC1jb250ZW50IHtcXG4gIHBhZGRpbmc6IDEycHg7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbn1cXG4ucS1hbGVydC1zaWRlIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLnEtYWxlcnQtYWN0aW9ucyB7XFxuICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCAwO1xcbn1cXG4ucS1hbGVydC1kZXRhaWwge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG4ucS1icmVhZGNydW1icyAucS1pY29uLFxcbi5xLWJyZWFkY3J1bWJzIC5xLWJyZWFkY3J1bWJzLXNlcGFyYXRvciB7XFxuICBmb250LXNpemU6IDE1MCU7XFxufVxcbi5xLWJyZWFkY3J1bWJzLWxhc3QgYSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuW2Rpcj1ydGxdIC5xLWJyZWFkY3J1bWJzLXNlcGFyYXRvciAucS1pY29uIHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKC0xKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1idG4ge1xcbiAgb3V0bGluZTogMDtcXG4gIGJvcmRlcjogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBwYWRkaW5nOiA0cHggMTZweDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICBtaW4taGVpZ2h0OiAyLjU3MmVtO1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuYnV0dG9uLnEtYnRuIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xcbn1cXG5hLnEtYnRuIHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG4ucS1idG4gLnEtaWNvbixcXG4ucS1idG4gLnEtc3Bpbm5lciB7XFxuICBmb250LXNpemU6IDEuNGVtO1xcbn1cXG4ucS1idG4gLnEtYnRuLWlubmVyIHtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC42cztcXG59XFxuLnEtYnRuIC5xLWJ0bi1pbm5lci0taGlkZGVuIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLWJ0biAucS1idG4taW5uZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbn1cXG4ucS1idG4uZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC43ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWJ0bjpub3QoLmRpc2FibGVkKTpub3QoLnEtYnRuLWZsYXQpOm5vdCgucS1idG4tb3V0bGluZSk6bm90KC5xLWJ0bi1wdXNoKTpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xcbiAgei1pbmRleDogLTE7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLWJ0bjpub3QoLmRpc2FibGVkKTpub3QoLnEtYnRuLWZsYXQpOm5vdCgucS1idG4tb3V0bGluZSk6bm90KC5xLWJ0bi1wdXNoKTphY3RpdmU6YmVmb3JlLFxcbi5xLWJ0bjpub3QoLmRpc2FibGVkKTpub3QoLnEtYnRuLWZsYXQpOm5vdCgucS1idG4tb3V0bGluZSk6bm90KC5xLWJ0bi1wdXNoKS5hY3RpdmU6YmVmb3JlIHtcXG4gIGJveC1zaGFkb3c6IDAgNXB4IDVweCAtM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCA4cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMTRweCAycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtYnRuLXByb2dyZXNzIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjI1KTtcXG59XFxuLnEtYnRuLXByb2dyZXNzLnEtYnRuLWRhcmstcHJvZ3Jlc3Mge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjIpO1xcbn1cXG4ucS1idG4tbm8tdXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xcbn1cXG4ucS1idG4tcmVjdGFuZ2xlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtYnRuLW91dGxpbmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgY3VycmVudENvbG9yO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG59XFxuLnEtYnRuLXB1c2gge1xcbiAgYm9yZGVyLXJhZGl1czogN3B4O1xcbiAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7XFxufVxcbi5xLWJ0bi1wdXNoOmFjdGl2ZTpub3QoLmRpc2FibGVkKSxcXG4ucS1idG4tcHVzaC5hY3RpdmU6bm90KC5kaXNhYmxlZCkge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgzcHgpO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLWJ0bi1wdXNoIC5xLWZvY3VzLWhlbHBlcixcXG4ucS1idG4tcHVzaCAucS1yaXBwbGUtY29udGFpbmVyIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIGJvdHRvbTogLTNweDtcXG59XFxuLnEtYnRuLXJvdW5kZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMjhweDtcXG59XFxuLnEtYnRuLXJvdW5kIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHBhZGRpbmc6IDA7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAzZW07XFxuICB3aWR0aDogM2VtO1xcbn1cXG4ucS1idG4tZmxhdCxcXG4ucS1idG4tb3V0bGluZSB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1idG4tZGVuc2Uge1xcbiAgcGFkZGluZzogMC4yODVlbTtcXG4gIG1pbi1oZWlnaHQ6IDJlbTtcXG59XFxuLnEtYnRuLWRlbnNlLnEtYnRuLXJvdW5kIHtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IDIuNGVtO1xcbiAgd2lkdGg6IDIuNGVtO1xcbn1cXG4ucS1idG4tZGVuc2UgLm9uLWxlZnQge1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxufVxcbi5xLWJ0bi1kZW5zZSAub24tcmlnaHQge1xcbiAgbWFyZ2luLWxlZnQ6IDZweDtcXG59XFxuLnEtYnRuLWZhYiAucS1pY29uLFxcbi5xLWJ0bi1mYWItbWluaSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuLnEtYnRuLWZhYiB7XFxuICBoZWlnaHQ6IDU2cHg7XFxuICB3aWR0aDogNTZweDtcXG59XFxuLnEtYnRuLWZhYi1taW5pIHtcXG4gIGhlaWdodDogNDBweDtcXG4gIHdpZHRoOiA0MHB4O1xcbn1cXG4ucS10cmFuc2l0aW9uLS1mYWRlLWxlYXZlLWFjdGl2ZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5xLXRyYW5zaXRpb24tLWZhZGUtZW50ZXItYWN0aXZlLFxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUtYWN0aXZlIHtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlLW91dDtcXG59XFxuLnEtdHJhbnNpdGlvbi0tZmFkZS1lbnRlcixcXG4ucS10cmFuc2l0aW9uLS1mYWRlLWxlYXZlLFxcbi5xLXRyYW5zaXRpb24tLWZhZGUtbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtYnRuLWRyb3Bkb3duLXNwbGl0IC5xLWJ0bi1kcm9wZG93bi1hcnJvdyB7XFxuICBwYWRkaW5nOiAwIDRweDtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjMpO1xcbn1cXG4ucS1idG4tZ3JvdXAge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAycHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4taXRlbSB7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG4ucS1idG4tZ3JvdXAgPiAucS1idG4tZ3JvdXAgPiAucS1idG46Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1ncm91cCA+IC5xLWJ0bjpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBpbmhlcml0O1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IGluaGVyaXQ7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1ncm91cDpub3QoOmZpcnN0LWNoaWxkKSA+IC5xLWJ0bjpmaXJzdC1jaGlsZCB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWdyb3VwOm5vdCg6bGFzdC1jaGlsZCkgPiAucS1idG46bGFzdC1jaGlsZCB7XFxuICBib3JkZXItcmlnaHQ6IDA7XFxufVxcbi5xLWJ0bi1ncm91cCA+IC5xLWJ0bi1pdGVtOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XFxuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcXG59XFxuLnEtYnRuLWdyb3VwID4gLnEtYnRuLWl0ZW0gKyAucS1idG4taXRlbSB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuLnEtYnRuLWdyb3VwLXB1c2gge1xcbiAgYm9yZGVyLXJhZGl1czogN3B4O1xcbn1cXG4ucS1idG4tZ3JvdXAtcHVzaCA+IC5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lciB7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2g6YWN0aXZlOm5vdCguZGlzYWJsZWQpLFxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2guYWN0aXZlOm5vdCguZGlzYWJsZWQpIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6IHJnYmEoMCwwLDAsMC4xNSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XFxufVxcbi5xLWJ0bi1ncm91cC1wdXNoID4gLnEtYnRuLXB1c2g6YWN0aXZlOm5vdCguZGlzYWJsZWQpIC5xLWJ0bi1pbm5lcixcXG4ucS1idG4tZ3JvdXAtcHVzaCA+IC5xLWJ0bi1wdXNoLmFjdGl2ZTpub3QoLmRpc2FibGVkKSAucS1idG4taW5uZXIge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDNweCk7XFxufVxcbi5xLWJ0bi1ncm91cC1yb3VuZGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDI4cHg7XFxufVxcbi5xLWJ0bi1ncm91cC1mbGF0LFxcbi5xLWJ0bi1ncm91cC1vdXRsaW5lIHtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcbi5xLWJ0bi1ncm91cC1vdXRsaW5lID4gLnEtYnRuLWl0ZW0gKyAucS1idG4taXRlbSB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLnEtYnRuLWdyb3VwLW91dGxpbmUgPiAucS1idG4taXRlbTpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIGJvcmRlci1yaWdodDogMDtcXG59XFxuLnEtY2FyZCB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XFxufVxcbi5xLWNhcmQgPiBkaXY6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS1jYXJkID4gZGl2Omxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiBpbmhlcml0O1xcbn1cXG4ucS1jYXJkID4gLnEtbGlzdCB7XFxuICBib3JkZXI6IDA7XFxufVxcbi5xLWNhcmQtc2VwYXJhdG9yIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG4gIGhlaWdodDogMXB4O1xcbn1cXG4ucS1jYXJkLXNlcGFyYXRvci5pbnNldCB7XFxuICBtYXJnaW46IDAgMTZweDtcXG59XFxuLnEtY2FyZC1jb250YWluZXIge1xcbiAgcGFkZGluZzogMTZweDtcXG59XFxuLnEtY2FyZC10aXRsZSB7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcXG4gIGxpbmUtaGVpZ2h0OiAycmVtO1xcbn1cXG4ucS1jYXJkLXRpdGxlOmVtcHR5IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWNhcmQtc3VidGl0bGUsXFxuLnEtY2FyZC10aXRsZS1leHRyYSB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjQpO1xcbn1cXG4ucS1jYXJkLXN1YnRpdGxlIC5xLWljb24sXFxuLnEtY2FyZC10aXRsZS1leHRyYSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuLnEtY2FyZC1tYWluIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG59XFxuLnEtY2FyZC1wcmltYXJ5ICsgLnEtY2FyZC1tYWluIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1jYXJkLWFjdGlvbnMge1xcbiAgcGFkZGluZzogOHB4O1xcbn1cXG4ucS1jYXJkLWFjdGlvbnMgLnEtYnRuIHtcXG4gIHBhZGRpbmc6IDAgOHB4O1xcbn1cXG4ucS1jYXJkLWFjdGlvbnMtaG9yaXogLnEtYnRuOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLWNhcmQtYWN0aW9ucy12ZXJ0IC5xLWJ0biArIC5xLWJ0biB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxufVxcbi5xLWNhcmQtbWVkaWEge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtY2FyZC1tZWRpYSA+IGltZyB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgYm9yZGVyOiAwO1xcbn1cXG4ucS1jYXJkLW1lZGlhLW92ZXJsYXkge1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNDcpO1xcbn1cXG4ucS1jYXJkLW1lZGlhLW92ZXJsYXkgLnEtY2FyZC1zdWJ0aXRsZSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtY2FyZC1kYXJrIC5xLWNhcmQtc2VwYXJhdG9yIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtcXG59XFxuLnEtY2FyZC1kYXJrIC5xLWNhcmQtc3VidGl0bGUsXFxuLnEtY2FyZC1kYXJrIC5xLWNhcmQtdGl0bGUtZXh0cmEge1xcbiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTtcXG59XFxuLnEtY2Fyb3VzZWwge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtY2Fyb3VzZWwtaW5uZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG4ucS1jYXJvdXNlbC1zbGlkZSB7XFxuICAtbXMtZmxleDogMCAwIDEwMCU7XFxuICAgICAgZmxleDogMCAwIDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAxOHB4O1xcbn1cXG4ucS1jYXJvdXNlbC10cmFjayB7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXdyYXA6IG5vd3JhcDtcXG4gICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuLnEtY2Fyb3VzZWwtdHJhY2suaW5maW5pdGUtbGVmdCA+IGRpdjpudGgtbGFzdC1jaGlsZCgyKSB7XFxuICAtbXMtZmxleC1vcmRlcjogLTEwMDA7XFxuICAgICAgb3JkZXI6IC0xMDAwO1xcbiAgbWFyZ2luLWxlZnQ6IC0xMDAlO1xcbn1cXG4ucS1jYXJvdXNlbC10cmFjay5pbmZpbml0ZS1yaWdodCA+IGRpdjpudGgtY2hpbGQoMikge1xcbiAgLW1zLWZsZXgtb3JkZXI6IDEwMDA7XFxuICAgICAgb3JkZXI6IDEwMDA7XFxufVxcbi5xLWNhcm91c2VsLWxlZnQtYXJyb3csXFxuLnEtY2Fyb3VzZWwtcmlnaHQtYXJyb3cge1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7XFxufVxcbi5xLWNhcm91c2VsLWxlZnQtYXJyb3cge1xcbiAgbGVmdDogNXB4O1xcbn1cXG4ucS1jYXJvdXNlbC1yaWdodC1hcnJvdyB7XFxuICByaWdodDogNXB4O1xcbn1cXG4ucS1jYXJvdXNlbC1xdWljay1uYXYge1xcbiAgcGFkZGluZzogMnB4IDA7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7XFxufVxcbi5xLWNhcm91c2VsLXF1aWNrLW5hdiAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1jYXJvdXNlbC1xdWljay1uYXYgLnEtYnRuLmluYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuLnEtY2Fyb3VzZWwtcXVpY2stbmF2IC5xLWJ0bi5pbmFjdGl2ZSAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMTRweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWxzIHtcXG4gIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDUlKTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgbWF4LWhlaWdodDogNjAlO1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgcGFkZGluZzogMC41cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgYm94LXNoYWRvdzogMCAtM3B4IDZweCByZ2JhKDAsMCwwLDAuMTYpLCAwIC01cHggNnB4IHJnYmEoMCwwLDAsMC4yMyk7XFxufVxcbi5xLWNhcm91c2VsLXRodW1ibmFpbHMuYWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyBpbWcge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG9wYWNpdHk6IDAuNTtcXG4gIHdpbGwtY2hhbmdlOiBvcGFjaXR5O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyA+IGRpdiA+IGRpdiB7XFxuICAtbXMtZmxleDogMCAwIDEwOHB4O1xcbiAgICAgIGZsZXg6IDAgMCAxMDhweDtcXG59XFxuLnEtY2Fyb3VzZWwtdGh1bWJuYWlscyA+IGRpdiA+IGRpdi5hY3RpdmUgaW1nLFxcbi5xLWNhcm91c2VsLXRodW1ibmFpbHMgPiBkaXYgPiBkaXYgaW1nLmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbiAgYm9yZGVyLWNvbG9yOiAjZmZmO1xcbn1cXG4ucS1jYXJvdXNlbC10aHVtYm5haWwtYnRuIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG4gIHRvcDogNXB4O1xcbiAgcmlnaHQ6IDVweDtcXG59XFxuYm9keS5kZXNrdG9wIC5xLWNhcm91c2VsLXRodW1ibmFpbHMgaW1nOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLW1lc3NhZ2UtbmFtZSxcXG4ucS1tZXNzYWdlLXN0YW1wLFxcbi5xLW1lc3NhZ2UtbGFiZWwge1xcbiAgZm9udC1zaXplOiBzbWFsbDtcXG59XFxuLnEtbWVzc2FnZS1sYWJlbCB7XFxuICBtYXJnaW46IDI0cHggMDtcXG59XFxuLnEtbWVzc2FnZS1zdGFtcCB7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLW1lc3NhZ2UtYXZhdGFyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIHdpZHRoOiA0OHB4O1xcbiAgaGVpZ2h0OiA0OHB4O1xcbn1cXG4ucS1tZXNzYWdlIHtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuLnEtbWVzc2FnZTpmaXJzdC1jaGlsZCAucS1tZXNzYWdlLWxhYmVsIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5xLW1lc3NhZ2UtcmVjZWl2ZWQgLnEtbWVzc2FnZS1hdmF0YXIge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLW1lc3NhZ2UtcmVjZWl2ZWQgLnEtbWVzc2FnZS10ZXh0IHtcXG4gIGNvbG9yOiAjODFjNzg0O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAzcHggMDtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLXRleHQ6bGFzdC1jaGlsZDpiZWZvcmUge1xcbiAgcmlnaHQ6IDEwMCU7XFxuICBib3JkZXItcmlnaHQ6IDAgc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogOHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtbWVzc2FnZS1yZWNlaXZlZCAucS1tZXNzYWdlLXRleHQtY29udGVudCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtbmFtZSB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtYXZhdGFyIHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi5xLW1lc3NhZ2Utc2VudCAucS1tZXNzYWdlLWNvbnRhaW5lciB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG4ucS1tZXNzYWdlLXNlbnQgLnEtbWVzc2FnZS10ZXh0IHtcXG4gIGNvbG9yOiAjZTBlMGUwO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDNweDtcXG59XFxuLnEtbWVzc2FnZS1zZW50IC5xLW1lc3NhZ2UtdGV4dDpsYXN0LWNoaWxkOmJlZm9yZSB7XFxuICBsZWZ0OiAxMDAlO1xcbiAgYm9yZGVyLWxlZnQ6IDAgc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1ib3R0b206IDhweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLW1lc3NhZ2Utc2VudCAucS1tZXNzYWdlLXRleHQtY29udGVudCB7XFxuICBjb2xvcjogIzAwMDtcXG59XFxuLnEtbWVzc2FnZS10ZXh0IHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIHBhZGRpbmc6IDhweDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjI7XFxuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG59XFxuLnEtbWVzc2FnZS10ZXh0ICsgLnEtbWVzc2FnZS10ZXh0IHtcXG4gIG1hcmdpbi10b3A6IDNweDtcXG59XFxuLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQge1xcbiAgbWluLWhlaWdodDogNDhweDtcXG59XFxuLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQgLnEtbWVzc2FnZS1zdGFtcCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnEtbWVzc2FnZS10ZXh0Omxhc3QtY2hpbGQ6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxufVxcbi5xLWNoZWNrYm94LWljb24ge1xcbiAgaGVpZ2h0OiAyMXB4O1xcbiAgd2lkdGg6IDIxcHg7XFxuICBmb250LXNpemU6IDIxcHg7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1jaGlwIHtcXG4gIG1pbi1oZWlnaHQ6IDMycHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwIDEycHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBib3JkZXI6ICNlMGUwZTA7XFxuICBib3JkZXItcmFkaXVzOiAycmVtO1xcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgYmFja2dyb3VuZDogI2VlZTtcXG59XFxuLnEtY2hpcDpmb2N1cyAucS1jaGlwLWNsb3NlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuLnEtY2hpcCAucS1pY29uIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxO1xcbn1cXG4ucS1jaGlwLW1haW4ge1xcbiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxufVxcbi5xLWNoaXAtc2lkZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBoZWlnaHQ6IDMycHg7XFxuICB3aWR0aDogMzJweDtcXG4gIG1pbi13aWR0aDogMzJweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLWNoaXAtc2lkZSBpbWcge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWNoaXAtbGVmdCB7XFxuICBtYXJnaW4tbGVmdDogLTEycHg7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuLnEtY2hpcC1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogMnB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAtMTJweDtcXG59XFxuLnEtY2hpcC1zcXVhcmUge1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG4ucS1jaGlwLWZsb2F0aW5nIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTAuM2VtO1xcbiAgcmlnaHQ6IC0wLjNlbTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgei1pbmRleDogMTtcXG59XFxuLnEtY2hpcC10YWcge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZy1sZWZ0OiAxLjdyZW07XFxufVxcbi5xLWNoaXAtdGFnOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwLjVyZW07XFxuICBtYXJnaW4tdG9wOiAtMC4yNXJlbTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICB3aWR0aDogMC41cmVtO1xcbiAgaGVpZ2h0OiAwLjVyZW07XFxuICBib3gtc2hhZG93OiAwIC0xcHggMXB4IDAgcmdiYSgwLDAsMCwwLjMpO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDA7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmc6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgei1pbmRleDogLTE7XFxuICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctdXAge1xcbiAgbWFyZ2luLXRvcDogMC44cmVtO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLXVwOmJlZm9yZSB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtMjIlKSByb3RhdGUoNDVkZWcpO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLWRvd24ge1xcbiAgbWFyZ2luLWJvdHRvbTogMC44cmVtO1xcbn1cXG4ucS1jaGlwLXBvaW50aW5nLWRvd246YmVmb3JlIHtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgdG9wOiAxMDAlO1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTc4JSkgcm90YXRlKDQ1ZGVnKTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1yaWdodCB7XFxuICBtYXJnaW4tcmlnaHQ6IDAuOHJlbTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1yaWdodDpiZWZvcmUge1xcbiAgdG9wOiA1MCU7XFxuICByaWdodDogMnB4O1xcbiAgYm90dG9tOiBhdXRvO1xcbiAgbGVmdDogYXV0bztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMyUpIHRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDQ1ZGVnKTtcXG59XFxuLnEtY2hpcC1wb2ludGluZy1sZWZ0IHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjhyZW07XFxufVxcbi5xLWNoaXAtcG9pbnRpbmctbGVmdDpiZWZvcmUge1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAycHg7XFxuICBib3R0b206IGF1dG87XFxuICByaWdodDogYXV0bztcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzMlKSB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSg0NWRlZyk7XFxufVxcbi5xLWNoaXAtZGV0YWlsIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG4gIG9wYWNpdHk6IDAuODtcXG4gIHBhZGRpbmc6IDAgNXB4O1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcbi5xLWNoaXAtc21hbGwge1xcbiAgbWluLWhlaWdodDogMjZweDtcXG59XFxuLnEtY2hpcC1zbWFsbCAucS1jaGlwLW1haW4ge1xcbiAgcGFkZGluZzogNHB4IDFweDtcXG4gIGxpbmUtaGVpZ2h0OiBpbml0aWFsO1xcbn1cXG4ucS1jaGlwLXNtYWxsIC5xLWNoaXAtc2lkZSB7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICB3aWR0aDogMjZweDtcXG4gIG1pbi13aWR0aDogMjZweDtcXG59XFxuLnEtY2hpcC1zbWFsbCAucS1jaGlwLWljb24ge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlIHtcXG4gIG1pbi1oZWlnaHQ6IDFweDtcXG4gIHBhZGRpbmc6IDAgM3B4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlLnEtY2hpcC10YWcge1xcbiAgcGFkZGluZy1sZWZ0OiAxLjNyZW07XFxufVxcbi5xLWNoaXAtZGVuc2UucS1jaGlwLXBvaW50aW5nOmJlZm9yZSB7XFxuICB3aWR0aDogOXB4O1xcbiAgaGVpZ2h0OiA5cHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtY2hpcC1tYWluIHtcXG4gIHBhZGRpbmc6IDFweDtcXG59XFxuLnEtY2hpcC1kZW5zZSAucS1jaGlwLXNpZGUge1xcbiAgaGVpZ2h0OiAxOHB4O1xcbiAgd2lkdGg6IDE4cHg7XFxuICBtaW4td2lkdGg6IDE2cHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtY2hpcC1sZWZ0IHtcXG4gIG1hcmdpbi1sZWZ0OiAtM3B4O1xcbiAgbWFyZ2luLXJpZ2h0OiAycHg7XFxufVxcbi5xLWNoaXAtZGVuc2UgLnEtY2hpcC1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogMnB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAtMnB4O1xcbn1cXG4ucS1jaGlwLWRlbnNlIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbn1cXG4ucS1pbnB1dC1jaGlwcyB7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgbWFyZ2luLWJvdHRvbTogLTFweDtcXG59XFxuLnEtaW5wdXQtY2hpcHMgLnEtY2hpcCB7XFxuICBtYXJnaW46IDFweDtcXG59XFxuLnEtaW5wdXQtY2hpcHMgaW5wdXQucS1pbnB1dC10YXJnZXQge1xcbiAgbWluLXdpZHRoOiA3MHB4ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXN1Yi1pdGVtIHtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1zdWItaXRlbS5pbmRlbnQge1xcbiAgcGFkZGluZy1sZWZ0OiA0OHB4O1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG59XFxuLnEtY29sbGFwc2libGUtc3ViLWl0ZW0gLnEtY2FyZCB7XFxuICBtYXJnaW4tYm90dG9tOiAwO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS5yb3V0ZXItbGluay1hY3RpdmUgPiAucS1pdGVtIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMTg5LDE4OSwxODksMC40KTtcXG59XFxuLnEtY29sbGFwc2libGUge1xcbiAgdHJhbnNpdGlvbjogcGFkZGluZyAwLjVzO1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQge1xcbiAgcGFkZGluZzogMCAxNXB4O1xcbn1cXG4ucS1jb2xsYXBzaWJsZS1wb3B1cC1jbG9zZWQgLnEtY29sbGFwc2libGUtaW5uZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtY2xvc2VkICsgLnEtY29sbGFwc2libGUtcG9wdXAtY2xvc2VkIC5xLWNvbGxhcHNpYmxlLWlubmVyIHtcXG4gIGJvcmRlci10b3A6IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLW9wZW5lZCB7XFxuICBwYWRkaW5nOiAxNXB4IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLW9wZW5lZCAucS1jb2xsYXBzaWJsZS1pbm5lciB7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkICsgLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkLFxcbi5xLWNvbGxhcHNpYmxlLXBvcHVwLW9wZW5lZDpmaXJzdC1jaGlsZCB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLnEtY29sbGFwc2libGUtcG9wdXAtb3BlbmVkOmxhc3QtY2hpbGQge1xcbiAgcGFkZGluZy1ib3R0b206IDA7XFxufVxcbi5xLWNvbGxhcHNpYmxlLWN1cnNvci1wb2ludGVyID4gLnEtY29sbGFwc2libGUtaW5uZXIgPiAucS1pdGVtIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtY29sbGFwc2libGUtdG9nZ2xlLWljb24ge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgd2lkdGg6IDFlbTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuLnEtY29sb3Ige1xcbiAgbWF4LXdpZHRoOiAxMDB2dztcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24ge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEyM3B4O1xcbn1cXG4ucS1jb2xvci1zYXR1cmF0aW9uLXdoaXRlIHtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2ZmZiwgcmdiYSgyNTUsMjU1LDI1NSwwKSk7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24tYmxhY2sge1xcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgIzAwMCwgcmdiYSgwLDAsMCwwKSk7XFxufVxcbi5xLWNvbG9yLXNhdHVyYXRpb24tY2lyY2xlIHtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMS41cHggI2ZmZiwgaW5zZXQgMCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjMpLCAwIDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuNCk7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNXB4LCAtNXB4KTtcXG59XFxuLnEtY29sb3Itc3dhdGNoLFxcbi5xLWNvbG9yLWFscGhhIC5xLXNsaWRlci10cmFjayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWdBQUFBSUNBWUFBQURFRDc2TEFBQUFIMGxFUVZRb1UyTmtZR0F3WmtBRlo1RzVqUFJSZ09ZRVZEZUIzRUJqQlFCT1p3VFZ1Z0lHeUFBQUFBQkpSVTVFcmtKZ2dnPT1cXFwiKSAhaW1wb3J0YW50O1xcbn1cXG4ucS1jb2xvci1zd2F0Y2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG59XFxuLnEtY29sb3ItaHVlIC5xLXNsaWRlci10cmFjayB7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNmMDAgMCUsICNmZjAgMTclLCAjMGYwIDMzJSwgIzBmZiA1MCUsICMwMGYgNjclLCAjZjBmIDgzJSwgI2YwMCAxMDAlKTtcXG4gIG9wYWNpdHk6IDE7XFxuICBoZWlnaHQ6IDhweDtcXG59XFxuLnEtY29sb3ItaHVlIC5xLXNsaWRlci10cmFjay5hY3RpdmUtdHJhY2sge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtY29sb3ItYWxwaGEgLnEtc2xpZGVyLXRyYWNrIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBvcGFjaXR5OiAxO1xcbiAgaGVpZ2h0OiA4cHg7XFxufVxcbi5xLWNvbG9yLWFscGhhIC5xLXNsaWRlci10cmFjazphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwKSwgIzc1NzU3NSk7XFxufVxcbi5xLWNvbG9yLWFscGhhIC5xLXNsaWRlci10cmFjay5hY3RpdmUtdHJhY2sge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtY29sb3Itc2xpZGVycyB7XFxuICBoZWlnaHQ6IDU2cHg7XFxufVxcbi5xLWNvbG9yLXNsaWRlcnMgLnEtc2xpZGVyIHtcXG4gIGhlaWdodDogMjBweDtcXG59XFxuLnEtY29sb3Itc2xpZGVycyAucS1zbGlkZXItaGFuZGxlIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDRweCAwIHJnYmEoMCwwLDAsMC4zNyk7XFxufVxcbi5xLWNvbG9yLXNsaWRlcnMgLnEtc2xpZGVyLXJpbmcge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtY29sb3ItaW5wdXRzIHtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbn1cXG4ucS1jb2xvci1pbnB1dHMgaW5wdXQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLWNvbG9yLXBhZGRpbmcge1xcbiAgcGFkZGluZzogMCAycHg7XFxufVxcbi5xLWNvbG9yLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiA0cHg7XFxufVxcbi5xLWNvbG9yLWRhcmsge1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MjQyNDI7XFxufVxcbi5xLWNvbG9yLWRhcmsgaW5wdXQge1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzQyNDI0MjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXEtY29sb3ItZGFyayk7XFxufVxcbi5xLWNvbG9yLWRhcmsgLnEtY29sb3ItaW5wdXRzIHtcXG4gIGNvbG9yOiAjYmRiZGJkO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpO1xcbn1cXG4ucS1jb2xvci1kYXJrIC5xLWNvbG9yLXN3YXRjaCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjNDI0MjQyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuLnEtZGF0ZXRpbWUtaW5wdXQge1xcbiAgbWluLXdpZHRoOiA3MHB4O1xcbn1cXG4ucS1kYXRldGltZS1jb250cm9scyB7XFxuICBwYWRkaW5nOiAwIDEwcHggOHB4O1xcbn1cXG4ucS1kYXRldGltZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgbGluZS1oZWlnaHQ6IGluaXRpYWw7XFxufVxcbi5xLWRhdGV0aW1lIC5tb2RhbC1idXR0b25zIHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5xLWRhdGV0aW1lOm5vdCgubm8tYm9yZGVyKTpub3QoLnEtZGF0ZXRpbWUtZGFyaykgLnEtZGF0ZXRpbWUtY29udGVudCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1kYXRldGltZTpub3QoLm5vLWJvcmRlcikucS1kYXRldGltZS1kYXJrIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICM0MjQyNDI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1xLWNvbG9yLWRhcmspO1xcbn1cXG4ucS1kYXRldGltZS1oZWFkZXIge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1oZWFkZXIgPiBkaXYge1xcbiAgY29sb3I6ICNmZmY7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLm1vZGFsLWNvbnRlbnQgPiAucS1kYXRldGltZSA+IC5xLWRhdGV0aW1lLWhlYWRlcixcXG4ucS1wb3BvdmVyID4gLnEtZGF0ZXRpbWUgPiAucS1kYXRldGltZS1oZWFkZXIge1xcbiAgbWluLXdpZHRoOiAxNzVweDtcXG59XFxuLnEtZGF0ZXRpbWUtd2Vla2RheXN0cmluZyB7XFxuICBmb250LXNpemU6IDAuOHJlbTtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG4gIHBhZGRpbmc6IDVweCAwO1xcbn1cXG4ucS1kYXRldGltZS10aW1lIHtcXG4gIHBhZGRpbmc6IDEwcHggMDtcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuLnEtZGF0ZXRpbWUtYW1wbSB7XFxuICBmb250LXNpemU6IDAuOXJlbTtcXG4gIHBhZGRpbmc6IDVweDtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyB7XFxuICBwYWRkaW5nOiAxMHB4IDA7XFxufVxcbi5xLWRhdGV0aW1lLWRhdGVzdHJpbmcgLnEtZGF0ZXRpbWUtbGluayB7XFxuICBmb250LXNpemU6IDIuN3JlbTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rIHNwYW4ge1xcbiAgcGFkZGluZzogMCA1cHg7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rLnNtYWxsIHtcXG4gIG1hcmdpbjogMCA1cHg7XFxuICBmb250LXNpemU6IDEuMnJlbTtcXG59XFxuLnEtZGF0ZXRpbWUtZGF0ZXN0cmluZyAucS1kYXRldGltZS1saW5rLnNtYWxsIHNwYW4ge1xcbiAgcGFkZGluZzogNXB4O1xcbn1cXG4ucS1kYXRldGltZS1saW5rIHtcXG4gIG9wYWNpdHk6IDAuNjtcXG59XFxuLnEtZGF0ZXRpbWUtbGluayA+IHNwYW4ge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtZGF0ZXRpbWUtbGluay5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2tzdHJpbmcge1xcbiAgbWluLXdpZHRoOiAyMTBweDtcXG4gIGZvbnQtc2l6ZTogMi43cmVtO1xcbiAgZGlyZWN0aW9uOiBsdHIgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtc2VsZWN0b3Ige1xcbiAgbWluLXdpZHRoOiAyOTBweDtcXG4gIGhlaWdodDogMzEwcHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuLnEtZGF0ZXRpbWUtdmlldy1kYXkge1xcbiAgd2lkdGg6IDI1MHB4O1xcbiAgaGVpZ2h0OiAyODVweDtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1kYXRldGltZS12aWV3LXllYXIgPiAucS1idG46bm90KC5hY3RpdmUpLFxcbi5xLWRhdGV0aW1lLXZpZXctbW9udGggPiAucS1idG46bm90KC5hY3RpdmUpIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1kYXRldGltZS1tb250aC1zdGFtcCB7XFxuICBmb250LXNpemU6IDE2cHg7XFxufVxcbi5xLWRhdGV0aW1lLXdlZWtkYXlzIHtcXG4gIG1hcmdpbi1ib3R0b206IDVweDtcXG59XFxuLnEtZGF0ZXRpbWUtd2Vla2RheXMgZGl2IHtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIHdpZHRoOiAzNXB4O1xcbiAgaGVpZ2h0OiAzNXB4O1xcbiAgbGluZS1oZWlnaHQ6IDM1cHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG4ucS1kYXRldGltZS1kYXlzIGRpdiB7XFxuICBtYXJnaW46IDFweDtcXG4gIGxpbmUtaGVpZ2h0OiAzM3B4O1xcbiAgd2lkdGg6IDMzcHg7XFxuICBoZWlnaHQ6IDMzcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LWFjdGl2ZSA+IHNwYW4ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2LnEtZGF0ZXRpbWUtZGF5LXRvZGF5IHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWRheXMgZGl2Om5vdCgucS1kYXRldGltZS1maWxsZXJkYXkpOm5vdCguZGlzYWJsZWQpOm5vdCgucS1kYXRldGltZS1kYXktYWN0aXZlKTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiAjZTBlMGUwO1xcbn1cXG4ucS1kYXRldGltZS1idG4ge1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG59XFxuLnEtZGF0ZXRpbWUtYnRuLmFjdGl2ZSB7XFxuICBmb250LXNpemU6IDEuNXJlbTtcXG4gIHBhZGRpbmctdG9wOiAxcmVtO1xcbiAgcGFkZGluZy1ib3R0b206IDFyZW07XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrIHtcXG4gIHdpZHRoOiAyNTBweDtcXG4gIGhlaWdodDogMjUwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiAjZTBlMGUwO1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stY2lyY2xlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFuaW1hdGlvbjogcS1wb3AgMC41cyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1jZW50ZXIge1xcbiAgaGVpZ2h0OiA2cHg7XFxuICB3aWR0aDogNnB4O1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luOiBhdXRvO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9pbnRlciB7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA1MCU7XFxuICBtYXJnaW46IDAgYXV0bztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXIgLyogcnRsOmlnbm9yZSAqLztcXG4gIG1pbi1oZWlnaHQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvaW50ZXIgc3BhbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICB3aWR0aDogOHB4O1xcbiAgaGVpZ2h0OiA4cHg7XFxuICBib3R0b206IC04cHg7XFxuICBsZWZ0OiAwO1xcbiAgbWluLXdpZHRoOiAwO1xcbiAgbWluLWhlaWdodDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1hcnJvdyB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayB7XFxuICBiYWNrZ3JvdW5kOiAjNDI0MjQyO1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1hcnJvdyB7XFxuICBjb2xvcjogI2JkYmRiZDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWxpZ2h0KTtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1oZWFkZXIsXFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1jbG9jayB7XFxuICBiYWNrZ3JvdW5kOiAjNjE2MTYxO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLXZpZXctZGF5IHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1kYXJrIC5xLWRhdGV0aW1lLXZpZXcteWVhciA+IC5xLWJ0bjpub3QoLmFjdGl2ZSksXFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS12aWV3LW1vbnRoID4gLnEtYnRuOm5vdCguYWN0aXZlKSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtZGF0ZXRpbWUtZGFyayAucS1kYXRldGltZS1kYXlzIGRpdi5xLWRhdGV0aW1lLWRheS1hY3RpdmUgPiBzcGFuLFxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtZGF5cyBkaXY6bm90KC5xLWRhdGV0aW1lLWZpbGxlcmRheSk6bm90KC5kaXNhYmxlZCk6bm90KC5xLWRhdGV0aW1lLWRheS1hY3RpdmUpOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG5ib2R5LmRlc2t0b3AgLnEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb246bm90KC5hY3RpdmUpOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuYm9keS5kZXNrdG9wIC5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb246bm90KC5hY3RpdmUpOmhvdmVyIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBtaW4taGVpZ2h0OiAzMnB4O1xcbiAgd2lkdGg6IDMycHg7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSAvKiBydGw6aWdub3JlICovO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbjpub3QoLmFjdGl2ZSkge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWRhdGV0aW1lLWRhcmsgLnEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb246bm90KC5hY3RpdmUpIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbi5hY3RpdmUge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3NpdGlvbi5hY3RpdmUgPiBzcGFuIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMCB7XFxuICB0b3A6IDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xIHtcXG4gIHRvcDogNi43JTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMiB7XFxuICB0b3A6IDI1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0zIHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMTAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy01IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiA3NSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTYge1xcbiAgdG9wOiAxMDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy03IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTgge1xcbiAgdG9wOiA3NSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy05IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEwIHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogNi43JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTEge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogMjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMiB7XFxuICB0b3A6IDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xLmZtdDI0IHtcXG4gIHRvcDogNi43JTtcXG4gIGxlZnQ6IDc1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMi5mbXQyNCB7XFxuICB0b3A6IDI1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0zLmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMTAwJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtNC5mbXQyNCB7XFxuICB0b3A6IDc1JTtcXG4gIGxlZnQ6IDkzLjMlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy01LmZtdDI0IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiA3NSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTYuZm10MjQge1xcbiAgdG9wOiAxMDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy03LmZtdDI0IHtcXG4gIHRvcDogOTMuMyU7XFxuICBsZWZ0OiAyNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTguZm10MjQge1xcbiAgdG9wOiA3NSU7XFxuICBsZWZ0OiA2LjclIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy05LmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTEwLmZtdDI0IHtcXG4gIHRvcDogMjUlO1xcbiAgbGVmdDogNi43JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTEuZm10MjQge1xcbiAgdG9wOiA2LjclO1xcbiAgbGVmdDogMjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMi5mbXQyNCB7XFxuICB0b3A6IDAlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xMy5mbXQyNCB7XFxuICB0b3A6IDE5LjY5JTtcXG4gIGxlZnQ6IDY3LjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNC5mbXQyNCB7XFxuICB0b3A6IDMyLjUlO1xcbiAgbGVmdDogODAuMzElIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0xNS5mbXQyNCB7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDg1JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTYuZm10MjQge1xcbiAgdG9wOiA2Ny41JTtcXG4gIGxlZnQ6IDgwLjMxJSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTcuZm10MjQge1xcbiAgdG9wOiA4MC4zMSU7XFxuICBsZWZ0OiA2Ny41JSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1kYXRldGltZS1jbG9jay1wb3MtMTguZm10MjQge1xcbiAgdG9wOiA4NSU7XFxuICBsZWZ0OiA1MCUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTE5LmZtdDI0IHtcXG4gIHRvcDogODAuMzElO1xcbiAgbGVmdDogMzIuNSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIwLmZtdDI0IHtcXG4gIHRvcDogNjcuNSU7XFxuICBsZWZ0OiAxOS42OSUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtZGF0ZXRpbWUtY2xvY2stcG9zLTIxLmZtdDI0IHtcXG4gIHRvcDogNTAlO1xcbiAgbGVmdDogMTUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yMi5mbXQyNCB7XFxuICB0b3A6IDMyLjUlO1xcbiAgbGVmdDogMTkuNjklIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0yMy5mbXQyNCB7XFxuICB0b3A6IDE5LjY5JTtcXG4gIGxlZnQ6IDMyLjUlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLWNsb2NrLXBvcy0wLmZtdDI0IHtcXG4gIHRvcDogMTUlO1xcbiAgbGVmdDogNTAlIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLWRhdGV0aW1lLXJhbmdlLnJvdyAucS1kYXRldGltZS1yYW5nZS1sZWZ0IHtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcbi5xLWRhdGV0aW1lLXJhbmdlLnJvdyAucS1kYXRldGltZS1yYW5nZS1yaWdodCB7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuLnEtZGF0ZXRpbWUtcmFuZ2UuY29sdW1uID4gZGl2ICsgZGl2IHtcXG4gIG1hcmdpbi10b3A6IDEwcHg7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtZGF0ZXRpbWUge1xcbiAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLnEtZGF0ZXRpbWUtaGVhZGVyIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgICAgZmxleDogMSAxIGF1dG87XFxuICB9XFxuICAucS1kYXRldGltZS1jb250ZW50IHtcXG4gICAgLW1zLWZsZXg6IDIgMiBhdXRvO1xcbiAgICAgICAgZmxleDogMiAyIGF1dG87XFxuICB9XFxufVxcbi5xLWRvdCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0ycHg7XFxuICByaWdodDogLTEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6ICNmNDQzMzY7XFxuICBvcGFjaXR5OiAwLjg7XFxufVxcbi5xLWVkaXRvciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xcbn1cXG4ucS1lZGl0b3IuZGlzYWJsZWQge1xcbiAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XFxufVxcbi5xLWVkaXRvci5mdWxsc2NyZWVuIHtcXG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xcbn1cXG4ucS1lZGl0b3ItY29udGVudCB7XFxuICBvdXRsaW5lOiAwO1xcbiAgcGFkZGluZzogMTBweDtcXG4gIG1pbi1oZWlnaHQ6IDEwZW07XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG4ucS1lZGl0b3ItY29udGVudCBociB7XFxuICBib3JkZXI6IDA7XFxuICBvdXRsaW5lOiAwO1xcbiAgbWFyZ2luOiAxcHg7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJhY2tncm91bmQ6ICNjY2M7XFxufVxcbi5xLWVkaXRvci10b29sYmFyLXBhZGRpbmcge1xcbiAgcGFkZGluZzogNHB4O1xcbn1cXG4ucS1lZGl0b3ItdG9vbGJhciB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTA7XFxuICBtaW4taGVpZ2h0OiAzN3B4O1xcbn1cXG4ucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtZWRpdG9yLXRvb2xiYXIgLnEtYnRuLWdyb3VwICsgLnEtYnRuLWdyb3VwIHtcXG4gIG1hcmdpbi1sZWZ0OiA1cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyLXNlcGFyYXRvciAucS1idG4tZ3JvdXAgKyAucS1idG4tZ3JvdXAge1xcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XFxufVxcbi5xLWVkaXRvci10b29sYmFyLXNlcGFyYXRvciAucS1idG4tZ3JvdXAgKyAucS1idG4tZ3JvdXA6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxcHg7XFxuICBiYWNrZ3JvdW5kOiAjY2NjO1xcbn1cXG4ucS1lZGl0b3ItaW5wdXQgaW5wdXQge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcbi5xLWZhYiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4uei1mYWIge1xcbiAgei1pbmRleDogOTkwO1xcbn1cXG4ucS1mYWItb3BlbmVkIC5xLWZhYi1hY3Rpb25zIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgxKSBzY2FsZVkoMSkgdHJhbnNsYXRlWCgwKSB0cmFuc2xhdGVZKDApO1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG59XFxuLnEtZmFiLW9wZW5lZCAucS1mYWItaWNvbiB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIDE4MGRlZyk7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1mYWItb3BlbmVkIC5xLWZhYi1hY3RpdmUtaWNvbiB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIDBkZWcpO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtZmFiLWljb24sXFxuLnEtZmFiLWFjdGl2ZS1pY29uIHtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC40cywgdHJhbnNmb3JtIDAuNHM7XFxufVxcbi5xLWZhYi1pY29uIHtcXG4gIG9wYWNpdHk6IDE7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZTNkKDAsIDAsIDEsIDBkZWcpO1xcbn1cXG4ucS1mYWItYWN0aXZlLWljb24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogcm90YXRlM2QoMCwgMCwgMSwgLTE4MGRlZyk7XFxufVxcbi5xLWZhYi1hY3Rpb25zIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlLWluO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLWZhYi1hY3Rpb25zIC5xLWJ0biB7XFxuICBtYXJnaW46IDVweDtcXG59XFxuLnEtZmFiLXJpZ2h0IHtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDAuNCkgc2NhbGVZKDAuNCkgdHJhbnNsYXRlWCgtMTAwJSk7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAxMjAlO1xcbn1cXG4ucS1mYWItbGVmdCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjQpIHNjYWxlWSgwLjQpIHRyYW5zbGF0ZVgoMTAwJSk7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMTIwJTtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcbi5xLWZhYi11cCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjQpIHNjYWxlWSgwLjQpIHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYm90dG9tOiAxMjAlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4ucS1mYWItZG93biB7XFxuICB0cmFuc2Zvcm06IHNjYWxlWCgwLjQpIHNjYWxlWSgwLjQpIHRyYW5zbGF0ZVkoLTEwMCUpO1xcbiAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgdG9wOiAxMjAlO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4ucS1maWVsZC1pY29uIHtcXG4gIHdpZHRoOiAyOHB4O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgbWluLXdpZHRoOiAyOHB4O1xcbiAgZm9udC1zaXplOiAyOHB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAxNnB4O1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxufVxcbi5xLWZpZWxkLWxhYmVsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gIGNvbG9yOiAjOTc5Nzk3O1xcbn1cXG4ucS1maWVsZC1sYWJlbC1pbm5lciB7XFxuICBtaW4taGVpZ2h0OiAyOHB4O1xcbn1cXG4ucS1maWVsZC1sYWJlbC1oaW50IHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4ucS1maWVsZC1ib3R0b20ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG4gIGNvbG9yOiAjOTc5Nzk3O1xcbn1cXG4ucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1ib3R0b20ge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLWZpZWxkLWNvdW50ZXIge1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG59XFxuLnEtZmllbGQtZGFyayAucS1maWVsZC1sYWJlbCxcXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLWljb24sXFxuLnEtZmllbGQtZGFyayAucS1maWVsZC1jb3VudGVyLFxcbi5xLWZpZWxkLWRhcmsgLnEtZmllbGQtYm90dG9tIHtcXG4gIGNvbG9yOiAjYTdhN2E3O1xcbn1cXG4ucS1maWVsZC1kYXJrIC5xLWZpZWxkLW5vLWlucHV0IC5xLWZpZWxkLWJvdHRvbSB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgIzk3OTc5NztcXG59XFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1pY29uLFxcbi5xLWZpZWxkLXdpdGgtZXJyb3IgLnEtZmllbGQtbGFiZWwsXFxuLnEtZmllbGQtd2l0aC1lcnJvciAucS1maWVsZC1ib3R0b20ge1xcbiAgY29sb3I6ICNkYjI4Mjg7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLWZpZWxkLXdpdGgtZXJyb3IgLnEtZmllbGQtbm8taW5wdXQgLnEtZmllbGQtYm90dG9tIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGIyODI4O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbn1cXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtaWNvbixcXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtbGFiZWwsXFxuLnEtZmllbGQtd2l0aC13YXJuaW5nIC5xLWZpZWxkLWJvdHRvbSB7XFxuICBjb2xvcjogI2YyYzAzNztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXdhcm5pbmcpO1xcbn1cXG4ucS1maWVsZC13aXRoLXdhcm5pbmcgLnEtZmllbGQtbm8taW5wdXQgLnEtZmllbGQtYm90dG9tIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjJjMDM3O1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXEtY29sb3Itd2FybmluZyk7XFxufVxcbi5xLWZpZWxkLW1hcmdpbiB7XFxuICBtYXJnaW4tdG9wOiA1cHg7XFxufVxcbi5xLWZpZWxkLWZsb2F0aW5nIC5xLWZpZWxkLW1hcmdpbiB7XFxuICBtYXJnaW4tdG9wOiAyM3B4O1xcbn1cXG4ucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1tYXJnaW4ge1xcbiAgbWFyZ2luLXRvcDogM3B4O1xcbn1cXG4ucS1maWVsZC1jb250ZW50IC5xLWlmLnEtaWYtaGFzLWxhYmVsOm5vdCgucS1pZi1zdGFuZGFyZCkge1xcbiAgbWFyZ2luLXRvcDogOXB4O1xcbn1cXG4ucS1maWVsZC1jb250ZW50IC5xLWlmLXN0YW5kYXJkOm5vdCgucS1pZi1oYXMtbGFiZWwpIHtcXG4gIHBhZGRpbmctdG9wOiA2cHg7XFxufVxcbi5xLWZpZWxkLWNvbnRlbnQgLnEtb3B0aW9uLWdyb3VwIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS1maWVsZC1uby1pbnB1dCAucS1maWVsZC1jb250ZW50IHtcXG4gIHBhZGRpbmctdG9wOiA2cHg7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtZmllbGQtbWFyZ2luIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtaWYtc3RhbmRhcmQ6bm90KC5xLWlmLWhhcy1sYWJlbCkge1xcbiAgcGFkZGluZy10b3A6IDA7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtaWYucS1pZi1oYXMtbGFiZWw6bm90KC5xLWlmLXN0YW5kYXJkKSB7XFxuICBtYXJnaW4tdG9wOiAwcHg7XFxufVxcbi5xLWZpZWxkLXZlcnRpY2FsLnEtZmllbGQtbm8tbGFiZWwgLnEtZmllbGQtbGFiZWwge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XFxuICAucS1maWVsZC1yZXNwb25zaXZlOm5vdCgucS1maWVsZC1uby1sYWJlbCkgLnEtZmllbGQtbWFyZ2luIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gIH1cXG4gIC5xLWZpZWxkLXJlc3BvbnNpdmU6bm90KC5xLWZpZWxkLW5vLWxhYmVsKSAucS1pZi1zdGFuZGFyZDpub3QoLnEtaWYtaGFzLWxhYmVsKSB7XFxuICAgIHBhZGRpbmctdG9wOiAwO1xcbiAgfVxcbiAgLnEtZmllbGQtcmVzcG9uc2l2ZTpub3QoLnEtZmllbGQtbm8tbGFiZWwpIC5xLWlmLnEtaWYtaGFzLWxhYmVsOm5vdCgucS1pZi1zdGFuZGFyZCkge1xcbiAgICBtYXJnaW4tdG9wOiAwcHg7XFxuICB9XFxuICAucS1maWVsZC1yZXNwb25zaXZlLnEtZmllbGQtbm8tbGFiZWwgLnEtZmllbGQtbGFiZWwge1xcbiAgICBkaXNwbGF5OiBub25lO1xcbiAgfVxcbn1cXG4ucS1pbm5lci1sb2FkaW5nIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC42KTtcXG59XFxuLnEtaW5uZXItbG9hZGluZy5kYXJrIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40KTtcXG59XFxuLnEtaWYsXFxuLnEtaWY6YmVmb3JlLFxcbi5xLWlmLWxhYmVsLFxcbi5xLWlmLWFkZG9uLFxcbi5xLWZpZWxkLWljb24sXFxuLnEtZmllbGQtbGFiZWwsXFxuLnEtaWYtY29udHJvbCxcXG4ucS1maWVsZC1ib3R0b20ge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuNDVzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSwgZGlzcGxheSAwcyAwcztcXG59XFxuLnEtaWYucS1pZi1oaWRlLXVuZGVybGluZTpiZWZvcmUsXFxuLnEtaWYucS1pZi1pbnZlcnRlZDpiZWZvcmUsXFxuLnEtaWYucS1pZi1oaWRlLXVuZGVybGluZTphZnRlcixcXG4ucS1pZi5xLWlmLWludmVydGVkOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IG5vbmU7XFxufVxcbi5xLWlmLWludmVydGVkIHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1pbm5lciB7XFxuICBtYXJnaW4tdG9wOiA3cHg7XFxuICBtYXJnaW4tYm90dG9tOiA3cHg7XFxufVxcbi5xLWlmLWludmVydGVkLnEtaWYtaGFzLWxhYmVsIC5xLWlmLWlubmVyIHtcXG4gIG1hcmdpbi10b3A6IDI1cHg7XFxufVxcbi5xLWlmOmJlZm9yZSxcXG4ucS1pZjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3JkZXI6IDFweCBoaWRkZW4gY3VycmVudENvbG9yO1xcbiAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgY29udGVudDogJyc7XFxufVxcbi5xLWlmOmJlZm9yZSB7XFxuICBjb2xvcjogI2JkYmRiZDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWxpZ2h0KTtcXG59XFxuLnEtaWY6YWZ0ZXIge1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlciAwO1xcbiAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7XFxufVxcbi5xLWlmOm5vdCgucS1pZi1kaXNhYmxlZCk6bm90KC5xLWlmLWVycm9yKTpub3QoLnEtaWYtd2FybmluZyk6aG92ZXI6YmVmb3JlLFxcbi5xLWlmLnEtaWYtcmVhZG9ubHk6bm90KC5xLWlmLWVycm9yKTpub3QoLnEtaWYtd2FybmluZyk6YWZ0ZXIge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLWlmLWRhcmsucS1pZjpub3QoLnEtaWYtZGlzYWJsZWQpOm5vdCgucS1pZi1lcnJvcik6bm90KC5xLWlmLXdhcm5pbmcpOmhvdmVyOmJlZm9yZSxcXG4ucS1pZi1kYXJrLnEtaWYucS1pZi1yZWFkb25seTpub3QoLnEtaWYtZXJyb3IpOm5vdCgucS1pZi13YXJuaW5nKTphZnRlciB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtaWYtZm9jdXNlZDphZnRlciB7XFxuICBib3JkZXItd2lkdGg6IDJweDtcXG4gIHRyYW5zZm9ybTogc2NhbGVYKDEpO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNDVzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSwgYm9yZGVyLWxlZnQtd2lkdGggMHMgMC40NXMsIGJvcmRlci1yaWdodC13aWR0aCAwcyAwLjQ1cztcXG59XFxuLnEtaWYge1xcbiAgb3V0bGluZTogMDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGZvbnQtc2l6ZTogMXJlbTtcXG59XFxuLnEtaWYgLnEtaWYtaW5uZXIge1xcbiAgbWluLWhlaWdodDogMjRweDtcXG59XFxuLnEtaWYtc3RhbmRhcmQge1xcbiAgcGFkZGluZy10b3A6IDdweDtcXG4gIHBhZGRpbmctYm90dG9tOiA3cHg7XFxufVxcbi5xLWlmLXN0YW5kYXJkLnEtaWYtaGFzLWxhYmVsIHtcXG4gIHBhZGRpbmctdG9wOiAyNXB4O1xcbn1cXG4ucS1pZi1oaWRlLXVuZGVybGluZSB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS1pZi1oaWRlLXVuZGVybGluZS5xLWlmLWhhcy1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogMThweDtcXG59XFxuLnEtaWYtc3RhbmRhcmQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgMCk7XFxufVxcbi5xLWlmLXN0YW5kYXJkIC5xLWlmLWxhYmVsLnEtaWYtbGFiZWwtYWJvdmUsXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwucS1pZi1sYWJlbC1hYm92ZSB7XFxuICBmb250LXNpemU6IDAuNzVyZW07XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtMTAwJSk7XFxuICBsaW5lLWhlaWdodDogMThweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQge1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcbi5xLWlmLWludmVydGVkIC5xLWlmLWxhYmVsIHtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTIxcHgpO1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pZi1sYWJlbC5xLWlmLWxhYmVsLWFib3ZlIHtcXG4gIHRvcDogNHB4O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTEyNSUpO1xcbn1cXG4ucS1pZi1pbnZlcnRlZCAucS1pbnB1dC10YXJnZXQge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxufVxcbi5xLWlmLWZvY3VzZWQ6bm90KC5xLWlmLXJlYWRvbmx5KSAucS1pZi1sYWJlbCxcXG4ucS1pZi1mb2N1c2VkOm5vdCgucS1pZi1yZWFkb25seSkgLnEtaWYtYWRkb24sXFxuLnEtaWYtZm9jdXNlZDpub3QoLnEtaWYtcmVhZG9ubHkpIC5xLWlmLWNvbnRyb2wge1xcbiAgY29sb3I6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtaWYtd2FybmluZzpiZWZvcmUsXFxuLnEtaWYtd2FybmluZzphZnRlcixcXG4ucS1pZi13YXJuaW5nOm5vdCgucS1pZi1pbnZlcnRlZCkgLnEtaWYtbGFiZWwge1xcbiAgY29sb3I6ICNmMmMwMzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nKTtcXG59XFxuLnEtaWYtd2FybmluZzpob3ZlcjpiZWZvcmUge1xcbiAgY29sb3I6ICNmOGRkOTM7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nLWwpO1xcbn1cXG4ucS1pZi1lcnJvcjpiZWZvcmUsXFxuLnEtaWYtZXJyb3I6YWZ0ZXIsXFxuLnEtaWYtZXJyb3I6bm90KC5xLWlmLWludmVydGVkKSAucS1pZi1sYWJlbCB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG59XFxuLnEtaWYtZXJyb3I6aG92ZXI6YmVmb3JlIHtcXG4gIGNvbG9yOiAjZWM4YjhiO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUtbCk7XFxufVxcbi5xLWlmLWRpc2FibGVkIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBvcGFjaXR5OiAwLjY7XFxufVxcbi5xLWlmLWRpc2FibGVkIC5xLWlmLWxhYmVsLFxcbi5xLWlmLWRpc2FibGVkIC5xLWlmLWNvbnRyb2wsXFxuLnEtaWYtZGlzYWJsZWQgLnEtaW5wdXQtdGFyZ2V0LFxcbi5xLWlmLWRpc2FibGVkIC5xLWNoaXAge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuLnEtaWYtZGFyazpub3QoLnEtaWYtaW52ZXJ0ZWQtbGlnaHQpIC5xLWlucHV0LXRhcmdldDpub3QoLnEtaW5wdXQtdGFyZ2V0LXBsYWNlaG9sZGVyKSB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtaWYtZm9jdXNhYmxlIHtcXG4gIG91dGxpbmU6IDA7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLWlmLWxhYmVsLFxcbi5xLWlucHV0LXRhcmdldCxcXG4ucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIge1xcbiAgbGluZS1oZWlnaHQ6IDI0cHg7XFxufVxcbi5xLWlmLWNvbnRyb2wge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLWlmLWNvbnRyb2wgKyAucS1pZi1jb250cm9sLFxcbi5xLWlmLWNvbnRyb2wgKyAucS1pZi1pbm5lcixcXG4ucS1pZi1pbm5lciArIC5xLWlmLWNvbnRyb2wge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnEtaWYtY29udHJvbDpob3ZlciB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLWlmLWJhc2VsaW5lIHtcXG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xcbiAgd2lkdGg6IDA7XFxuICBjb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLWlmLWxhYmVsLWlubmVyLFxcbi5xLWlmLWxhYmVsLXNwYWNlcixcXG4ucS1pZi1iYXNlbGluZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcbi5xLWlmLWxhYmVsLXNwYWNlciB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxuICBoZWlnaHQ6IDAgIWltcG9ydGFudDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxufVxcbi5xLWlmLWxhYmVsIHtcXG4gIGN1cnNvcjogdGV4dDtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLWlmLWxhYmVsLFxcbi5xLWlmLWFkZG9uLFxcbi5xLWlmLWNvbnRyb2wge1xcbiAgY29sb3I6ICM5Nzk3OTc7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtYWRkb24sXFxuLnEtaWYtaW52ZXJ0ZWQgLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogI2RkZDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQtbGlnaHQgLnEtaWYtbGFiZWwsXFxuLnEtaWYtaW52ZXJ0ZWQtbGlnaHQgLnEtaWYtYWRkb24sXFxuLnEtaWYtaW52ZXJ0ZWQtbGlnaHQgLnEtaWYtY29udHJvbCB7XFxuICBjb2xvcjogIzY1NjU2NTtcXG59XFxuLnEtaWYtYWRkb24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogaW5oZXJpdDtcXG59XFxuLnEtaWYtYWRkb246bm90KC5xLWlmLWFkZG9uLXZpc2libGUpIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLWlmLWFkZG9uLWxlZnQge1xcbiAgcGFkZGluZy1yaWdodDogMXB4O1xcbn1cXG4ucS1pZi1hZGRvbi1yaWdodCB7XFxuICBwYWRkaW5nLWxlZnQ6IDFweDtcXG59XFxuLnEtaWYtYWRkb24tdmlzaWJsZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQsXFxuLnEtaW5wdXQtc2hhZG93IHtcXG4gIGJvcmRlcjogMDtcXG4gIG91dGxpbmU6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIHJlc2l6ZTogbm9uZTtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1pbnB1dC10YXJnZXQ6LXdlYmtpdC1hdXRvZmlsbCB7XFxuICAtd2Via2l0LWFuaW1hdGlvbi1uYW1lOiB3ZWJraXQtYXV0b2ZpbGwtb247XFxuICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7XFxufVxcbi5xLWlucHV0LXRhcmdldC5xLWlucHV0LWF1dG9maWxsOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCkge1xcbiAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogd2Via2l0LWF1dG9maWxsLW9mZjtcXG4gIC13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0OjotbXMtY2xlYXIsXFxuLnEtaW5wdXQtdGFyZ2V0OjotbXMtcmV2ZWFsIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0OmludmFsaWQge1xcbiAgYm94LXNoYWRvdzogaW5oZXJpdDtcXG59XFxuLnEtaW5wdXQtdGFyZ2V0OmJlZm9yZSB7XFxuICBjb250ZW50OiAnfCc7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIHdpZHRoOiAwO1xcbiAgY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5pbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgaGVpZ2h0OiAyNHB4O1xcbiAgb3V0bGluZTogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuLnEtaWYgLnEtaW5wdXQtdGFyZ2V0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjOTc5Nzk3ICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlmIC5xLWlucHV0LXRhcmdldDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZiAucS1pbnB1dC10YXJnZXQ6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM5Nzk3OTcgIWltcG9ydGFudDtcXG59XFxuLnEtaWYgLnEtaW5wdXQtdGFyZ2V0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogIzk3OTc5NyAhaW1wb3J0YW50O1xcbn1cXG4ucS1pZi1kYXJrIC5xLWlucHV0LXRhcmdldDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICM5Nzk3OTcgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQ6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6ICNkZGQgIWltcG9ydGFudDtcXG59XFxuLnEtaWYtaW52ZXJ0ZWQ6bm90KC5xLWlmLWludmVydGVkLWxpZ2h0KSAucS1pbnB1dC10YXJnZXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiAjZGRkICFpbXBvcnRhbnQ7XFxufVxcbi5xLWlucHV0LXNoYWRvdyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG4ucS1qdW1ib3Ryb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMnJlbSAxcmVtO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xcbn1cXG4ucS1qdW1ib3Ryb24tZGFyayB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM3NTc1NzU7XFxufVxcbi5xLWp1bWJvdHJvbi1kYXJrIGhyLnEtaHIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjM2KTtcXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucS1qdW1ib3Ryb24ge1xcbiAgICBwYWRkaW5nOiA0cmVtIDJyZW07XFxuICB9XFxufVxcbi5xLWtub2IsXFxuLnEta25vYiA+IGRpdiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5xLWtub2IgPiBkaXYge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWtub2ItbGFiZWwge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEta25vYi1sYWJlbCBpIHtcXG4gIGZvbnQtc2l6ZTogMTMwJTtcXG59XFxuLnEtbGF5b3V0IHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogMTAwdmg7XFxufVxcbi5xLWxheW91dC1jb250YWluZXIgLnEtbGF5b3V0IHtcXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XFxufVxcbi5xLWxheW91dC1jb250YWluZXIgPiBkaXYge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG59XFxuLnEtbGF5b3V0LWNvbnRhaW5lciA+IGRpdiA+IGRpdiB7XFxuICBtaW4taGVpZ2h0OiAwO1xcbiAgbWF4LWhlaWdodDogMTAwJTtcXG59XFxuLnEtbGF5b3V0LWhlYWRlciB7XFxuICBib3gtc2hhZG93OiAwIDFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIDNweCA0cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtbGF5b3V0LWhlYWRlci1oaWRkZW4ge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMTAlKTtcXG59XFxuLnEtbGF5b3V0LWZvb3RlciB7XFxuICBib3gtc2hhZG93OiAwIC0xcHggOHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtM3B4IDRweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0zcHggM3B4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtbGF5b3V0LWZvb3Rlci1oaWRkZW4ge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDExMCUpO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICB6LWluZGV4OiAxMDAwO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLm9uLXRvcCB7XFxuICB6LWluZGV4OiAzMDAwO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLWRlbGltaXRlciB7XFxuICBib3gtc2hhZG93OiAwIDNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgNXB4IDhweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDFweCAxNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbGVmdCB7XFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1yaWdodCB7XFxuICByaWdodDogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXG59XFxuLnEtbGF5b3V0LFxcbi5xLWxheW91dC1oZWFkZXIsXFxuLnEtbGF5b3V0LWZvb3RlcixcXG4ucS1sYXlvdXQtcGFnZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5xLWxheW91dC1oZWFkZXIsXFxuLnEtbGF5b3V0LWZvb3RlciB7XFxuICB6LWluZGV4OiAyMDAwO1xcbn1cXG4ucS1sYXlvdXQtYmFja2Ryb3Age1xcbiAgei1pbmRleDogMjk5OSAhaW1wb3J0YW50O1xcbiAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtY29sb3I7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbWluaSB7XFxuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLXNpZGUge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtbWluaS1kcmF3ZXItaGlkZSxcXG4ucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtY29sbGFwc2libGUtaW5uZXIgPiBkaXY6bGFzdC1vZi10eXBlLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1saXN0LWhlYWRlcixcXG4ucS1sYXlvdXQtZHJhd2VyLW1pbmkgLnEtaXRlbS1tYWluLFxcbi5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtLXNpZGUtcmlnaHQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1ub3JtYWwgLnEtbWluaS1kcmF3ZXItb25seSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1sYXlvdXQtZHJhd2VyLW1vYmlsZSAucS1taW5pLWRyYXdlci1vbmx5LFxcbi5xLWxheW91dC1kcmF3ZXItbW9iaWxlIC5xLW1pbmktZHJhd2VyLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtbGF5b3V0LWRyYXdlci1vcGVuZXIge1xcbiAgei1pbmRleDogMjAwMTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHdpZHRoOiAxNXB4O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLnEtcGFnZS1zdGlja3ktc2hyaW5rIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS1wYWdlLXN0aWNreS1zaHJpbmsgPiBzcGFuIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nIC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMiksXFxuYm9keS5xLWlvcy1zdGF0dXNiYXItcGFkZGluZyAucS1sYXlvdXQgLnEtbGF5b3V0LWhlYWRlciA+IC5xLXRhYnM6bnRoLWNoaWxkKDIpIC5xLXRhYnMtaGVhZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci1wYWRkaW5nIC5xLWxheW91dCAucS1sYXlvdXQtZHJhd2VyLnRvcC1wYWRkaW5nLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmcgLm1vZGFsOm5vdCgubWluaW1pemVkKSAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMSkge1xcbiAgcGFkZGluZy10b3A6IDIwcHg7XFxuICBtaW4taGVpZ2h0OiA3MHB4O1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMiksXFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1sYXlvdXQgLnEtbGF5b3V0LWhlYWRlciA+IC5xLXRhYnM6bnRoLWNoaWxkKDIpIC5xLXRhYnMtaGVhZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZHJhd2VyLnRvcC1wYWRkaW5nLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLm1vZGFsOm5vdCgubWluaW1pemVkKSAucS1sYXlvdXQtaGVhZGVyID4gLnEtdG9vbGJhcjpudGgtY2hpbGQoMSkge1xcbiAgcGFkZGluZy10b3A6IGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKTtcXG59XFxuYm9keS5xLWlvcy1zdGF0dXNiYXIteCAucS1sYXlvdXQgLnEtbGF5b3V0LWZvb3RlciA+IC5xLXRvb2xiYXI6bGFzdC1jaGlsZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZm9vdGVyID4gLnEtdGFiczpsYXN0LWNoaWxkIC5xLXRhYnMtaGVhZCxcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLWxheW91dCAucS1sYXlvdXQtZHJhd2VyLnRvcC1wYWRkaW5nLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLm1vZGFsOm5vdCgubWluaW1pemVkKSAucS1sYXlvdXQtZm9vdGVyID4gLnEtdG9vbGJhcjpsYXN0LWNoaWxkIHtcXG4gIHBhZGRpbmctYm90dG9tOiBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSk7XFxuICBtaW4taGVpZ2h0OiA3MHB4O1xcbn1cXG4ucS1sYXlvdXQtYW5pbWF0ZSAucS1sYXlvdXQtdHJhbnNpdGlvbiB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xMnMgZWFzZS1pbiAhaW1wb3J0YW50O1xcbn1cXG4ucS1ib2R5LWRyYXdlci10b2dnbGUge1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuICFpbXBvcnRhbnQ7XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLmxheW91dC1wYWRkaW5nIHtcXG4gICAgcGFkZGluZzogMS41cmVtIDAuNXJlbTtcXG4gIH1cXG4gIC5sYXlvdXQtcGFkZGluZy5ob3Jpem9udGFsIHtcXG4gICAgcGFkZGluZzogMCAwLjVyZW07XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAxLjVyZW0gMnJlbTtcXG4gICAgbWFyZ2luOiBhdXRvO1xcbiAgfVxcbiAgLmxheW91dC1wYWRkaW5nLmhvcml6b250YWwge1xcbiAgICBwYWRkaW5nOiAwIDJyZW07XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xcbiAgLmxheW91dC1wYWRkaW5nIHtcXG4gICAgcGFkZGluZzogMi41cmVtIDNyZW07XFxuICAgIG1hcmdpbjogYXV0bztcXG4gIH1cXG4gIC5sYXlvdXQtcGFkZGluZy5ob3Jpem9udGFsIHtcXG4gICAgcGFkZGluZzogMCAzcmVtO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAubGF5b3V0LXBhZGRpbmcge1xcbiAgICBwYWRkaW5nOiAzcmVtIDRyZW07XFxuICAgIG1hcmdpbjogYXV0bztcXG4gIH1cXG4gIC5sYXlvdXQtcGFkZGluZy5ob3Jpem9udGFsIHtcXG4gICAgcGFkZGluZzogMCA0cmVtO1xcbiAgfVxcbn1cXG4ucS1pdGVtLXN0YW1wIHtcXG4gIGZvbnQtc2l6ZTogMC44cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDAuOHJlbTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBtYXJnaW46IDAuM3JlbSAwO1xcbn1cXG4ucS1pdGVtLXNpZGUge1xcbiAgY29sb3I6ICM3MzczNzM7XFxuICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgICAgZmxleDogMCAwIGF1dG87XFxuICBtaW4td2lkdGg6IDM4cHg7XFxufVxcbi5xLWl0ZW0tc2lkZS1yaWdodCB7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuLnEtaXRlbS1hdmF0YXIsXFxuLnEtaXRlbS1hdmF0YXIgaW1nIHtcXG4gIHdpZHRoOiAzOHB4O1xcbiAgaGVpZ2h0OiAzOHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG4ucS1pdGVtLWxldHRlcixcXG4ucS1pdGVtLWljb24ge1xcbiAgZm9udC1zaXplOiAyNHB4O1xcbn1cXG4ucS1pdGVtLWludmVydGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYmFja2dyb3VuZDogIzczNzM3MztcXG4gIGhlaWdodDogMzhweDtcXG4gIHdpZHRoOiAzOHB4O1xcbn1cXG4ucS1pdGVtLWludmVydGVkLFxcbi5xLWl0ZW0taW52ZXJ0ZWQgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDIwcHg7XFxufVxcbi5xLWl0ZW0tbWFpbiB7XFxuICAtbXMtZmxleDogMSAxIGF1dG87XFxuICAgICAgZmxleDogMSAxIGF1dG87XFxuICBtaW4td2lkdGg6IDA7XFxufVxcbi5xLWl0ZW0tbWFpbi1pbnNldCB7XFxuICBtYXJnaW4tbGVmdDogNDhweDtcXG59XFxuLnEtaXRlbS1sYWJlbCB7XFxuICBsaW5lLWhlaWdodDogMS4yO1xcbn1cXG4ucS1pdGVtLWxhYmVsID4gc3BhbiB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG59XFxuLnEtaXRlbS1zdWJsYWJlbCB7XFxuICBjb2xvcjogIzc1NzU3NTtcXG4gIGZvbnQtc2l6ZTogOTAlO1xcbiAgbWFyZ2luLXRvcDogMC4ycmVtO1xcbn1cXG4ucS1pdGVtLXN1YmxhYmVsID4gc3BhbiB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG4ucS1pdGVtLXNlY3Rpb24gKyAucS1pdGVtLXNlY3Rpb24ge1xcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XFxufVxcbi5xLWl0ZW0ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHBhZGRpbmc6IDhweCAxNnB4O1xcbiAgbWluLWhlaWdodDogNDBweDtcXG59XFxuLnEtaXRlbS5hY3RpdmUsXFxuLnEtaXRlbS5yb3V0ZXItbGluay1hY3RpdmUsXFxuLnEtaXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDE4OSwxODksMTg5LDAuNCk7XFxufVxcbi5xLWl0ZW06Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtaXRlbS1pbWFnZSB7XFxuICBtaW4td2lkdGg6IDExNHB4O1xcbiAgbWF4LXdpZHRoOiAxMTRweDtcXG4gIG1heC1oZWlnaHQ6IDExNHB4O1xcbn1cXG4ucS1saXN0LW11bHRpbGluZSA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1tdWx0aWxpbmUge1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG4ucS1saXN0LWxpbmsgPiAucS1pdGVtLFxcbi5xLWl0ZW0tbGluayB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLWxpc3QtaGlnaGxpZ2h0ID4gLnEtaXRlbTpob3ZlcixcXG4ucS1pdGVtLWhpZ2hsaWdodDpob3ZlcixcXG4ucS1saXN0LWxpbmsgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWl0ZW0tbGluazpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDE4OSwxODksMTg5LDAuNSk7XFxufVxcbi5xLWxpc3Qtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb24sXFxuLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tc2VwYXJhdG9yIHtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS1saXN0LWluc2V0LXNlcGFyYXRvciA+IC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWRpdmlzaW9uOmFmdGVyLFxcbi5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWluc2V0LXNlcGFyYXRvcjphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgbGVmdDogNjRweDtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZDogI2UwZTBlMDtcXG59XFxuLnEtbGlzdC1kZW5zZSA+IC5xLWl0ZW0sXFxuLnEtaXRlbS1kZW5zZSB7XFxuICBwYWRkaW5nOiAzcHggMTZweDtcXG4gIG1pbi1oZWlnaHQ6IDhweDtcXG59XFxuLnEtbGlzdC1zcGFyc2UgPiAucS1pdGVtLFxcbi5xLWl0ZW0tc3BhcnNlIHtcXG4gIHBhZGRpbmc6IDIyLjRweCAxNnB4O1xcbiAgbWluLWhlaWdodDogNTZweDtcXG59XFxuLnEtbGlzdC1zdHJpcGVkID4gLnEtaXRlbTpudGgtY2hpbGQoZXZlbikge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODksMTg5LDE4OSwwLjY1KTtcXG59XFxuLnEtbGlzdC1zdHJpcGVkLW9kZCA+IC5xLWl0ZW06bnRoLWNoaWxkKG9kZCkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODksMTg5LDE4OSwwLjY1KTtcXG59XFxuLnEtbGlzdCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgcGFkZGluZzogOHB4IDA7XFxufVxcbi5xLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudCB7XFxuICBtYXJnaW46IDhweCAwO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBib3JkZXI6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwO1xcbn1cXG4ucS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnQ6bGFzdC1jaGlsZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1pdGVtLXNlcGFyYXRvci1jb21wb25lbnQgKyAucS1saXN0LWhlYWRlciB7XFxuICBtYXJnaW4tdG9wOiAtOHB4O1xcbn1cXG4ucS1pdGVtLXNlcGFyYXRvci1pbnNldC1jb21wb25lbnQge1xcbiAgbWFyZ2luLWxlZnQ6IDY0cHg7XFxufVxcbi5xLWxpc3QtaGVhZGVyIHtcXG4gIGNvbG9yOiAjNzU3NTc1O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIHBhZGRpbmc6IDE1cHggMTZweDtcXG59XFxuLnEtbGlzdC1oZWFkZXItaW5zZXQge1xcbiAgcGFkZGluZy1sZWZ0OiA2NHB4O1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1zaWRlLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLXNpZGUge1xcbiAgY29sb3I6ICNiYmI7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWludmVydGVkLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLWludmVydGVkIHtcXG4gIGNvbG9yOiAjMDAwO1xcbiAgYmFja2dyb3VuZDogI2JiYjtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tbGFiZWwgPiBzcGFuLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLWxhYmVsID4gc3BhbixcXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1zdWJsYWJlbCxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbS1zdWJsYWJlbCB7XFxuICBjb2xvcjogI2JkYmRiZDtcXG59XFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0sXFxuLnEtaXRlbS1kYXJrIC5xLWl0ZW0ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLWxpc3QtZGFyayAucS1pdGVtLmFjdGl2ZSxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbS5hY3RpdmUsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0ucm91dGVyLWxpbmstYWN0aXZlLFxcbi5xLWl0ZW0tZGFyayAucS1pdGVtLnJvdXRlci1saW5rLWFjdGl2ZSxcXG4ucS1saXN0LWRhcmsgLnEtaXRlbTpmb2N1cyxcXG4ucS1pdGVtLWRhcmsgLnEtaXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDExNywxMTcsMTE3LDAuMik7XFxufVxcbi5xLWxpc3QtZGFyayB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMzIpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LXNlcGFyYXRvciA+IC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWRpdmlzaW9uLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWRpdmlzaW9uICsgLnEtaXRlbS1zZXBhcmF0b3Ige1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyay5xLWxpc3QtaW5zZXQtc2VwYXJhdG9yID4gLnEtaXRlbS1kaXZpc2lvbiArIC5xLWl0ZW0tZGl2aXNpb246YWZ0ZXIsXFxuLnEtbGlzdC1kYXJrIC5xLWl0ZW0tZGl2aXNpb24gKyAucS1pdGVtLWluc2V0LXNlcGFyYXRvcjphZnRlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMzIpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LXN0cmlwZWQgPiAucS1pdGVtOm50aC1jaGlsZChldmVuKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExNywxMTcsMTE3LDAuNDUpO1xcbn1cXG4ucS1saXN0LWRhcmsucS1saXN0LXN0cmlwZWQtb2RkID4gLnEtaXRlbTpudGgtY2hpbGQob2RkKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDExNywxMTcsMTE3LDAuNDUpO1xcbn1cXG4ucS1saXN0LWRhcmsgLnEtaXRlbS1zZXBhcmF0b3ItY29tcG9uZW50IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4zMik7XFxufVxcbi5xLWxpc3QtZGFyayAucS1saXN0LWhlYWRlciB7XFxuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjY0KTtcXG59XFxuLnEtbGlzdC1kYXJrLnEtbGlzdC1oaWdobGlnaHQgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWhpZ2hsaWdodDpob3ZlcixcXG4ucS1saXN0LWRhcmsucS1saXN0LWxpbmsgPiAucS1pdGVtOmhvdmVyLFxcbi5xLWxpc3QtZGFyayAucS1pdGVtLWxpbms6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgxMTcsMTE3LDExNywwLjMpO1xcbn1cXG5ib2R5LndpdGgtbG9hZGluZyB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1sb2FkaW5nIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40KTtcXG59XFxuLnEtbG9hZGluZyA+IGRpdiB7XFxuICBtYXJnaW46IDQwcHggMjBweCAwO1xcbiAgbWF4LXdpZHRoOiA0NTBweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRleHQtc2hhZG93OiAwIDAgN3B4ICMwMDA7XFxufVxcbi5tb2RhbC1iYWNrZHJvcCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNCk7XFxufVxcbi5tb2RhbC5tYXhpbWl6ZWQgLm1vZGFsLWJhY2tkcm9wIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5tb2RhbC1jb250ZW50IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxuICB3aWxsLWNoYW5nZTogc2Nyb2xsLXBvc2l0aW9uO1xcbiAgbWluLXdpZHRoOiAyODBweDtcXG4gIG1heC1oZWlnaHQ6IDgwdmg7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5tb2RhbCB7XFxuICB6LWluZGV4OiA1MDAwO1xcbn1cXG4ubW9kYWwubWluaW1pemVkIC5tb2RhbC1jb250ZW50IHtcXG4gIG1heC13aWR0aDogODB2dztcXG4gIG1heC1oZWlnaHQ6IDgwdmg7XFxufVxcbi5tb2RhbC5tYXhpbWl6ZWQgLm1vZGFsLWNvbnRlbnQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG59XFxuLm1vZGFsLm1heGltaXplZCAubW9kYWwtY29udGVudCAucS1sYXlvdXQtY29udGFpbmVyIHtcXG4gIG1pbi1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XFxufVxcbi5xLW1vZGFsLWVudGVyLFxcbi5xLW1vZGFsLWxlYXZlLWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcXG4gIC5tb2RhbDpub3QoLm1heGltaXplZCkucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcXG4gIH1cXG4gIC5tb2RhbDpub3QoLm1heGltaXplZCkucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XFxuICB9XFxuICAubW9kYWwubWF4aW1pemVkLnEtbW9kYWwtZW50ZXIgLm1vZGFsLWNvbnRlbnQsXFxuICAubW9kYWwubWF4aW1pemVkLnEtbW9kYWwtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwJSk7XFxuICB9XFxufVxcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgLnEtcmVzcG9uc2l2ZS1tb2RhbCB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxuICAubW9kYWw6bm90KC5taW5pbWl6ZWQpIC5tb2RhbC1jb250ZW50IHtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgfVxcbiAgLm1vZGFsOm5vdCgubWluaW1pemVkKSAubW9kYWwtY29udGVudCAucS1sYXlvdXQtY29udGFpbmVyIHtcXG4gICAgbWluLWhlaWdodDogMTAwdmggIWltcG9ydGFudDtcXG4gIH1cXG4gIC5tb2RhbDpub3QoLm1pbmltaXplZCkucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCxcXG4gIC5tb2RhbDpub3QoLm1pbmltaXplZCkucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzAlKTtcXG4gIH1cXG4gIC5tb2RhbC5taW5pbWl6ZWQucS1tb2RhbC1lbnRlciAubW9kYWwtY29udGVudCB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4yKTtcXG4gIH1cXG4gIC5tb2RhbC5taW5pbWl6ZWQucS1tb2RhbC1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOCk7XFxuICB9XFxufVxcbi5xLW1heGltaXplZC1tb2RhbCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ubW9kYWwsXFxuLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbi1vdXQ7XFxufVxcbi5tb2RhbC1oZWFkZXIge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHBhZGRpbmc6IDI0cHggMjRweCAxMHB4IDI0cHg7XFxuICBmb250LXNpemU6IDEuNnJlbTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi5tb2RhbC1ib2R5IHtcXG4gIHBhZGRpbmc6IDEwcHggMjRweDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuNSk7XFxufVxcbi5zbWFsbC1tb2RhbC1zY3JvbGwsXFxuLm1vZGFsLXNjcm9sbCxcXG4uYmlnLW1vZGFsLXNjcm9sbCB7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDtcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxufVxcbi5zbWFsbC1tb2RhbC1zY3JvbGwge1xcbiAgbWF4LWhlaWdodDogMTU2cHg7XFxufVxcbi5tb2RhbC1zY3JvbGwge1xcbiAgbWF4LWhlaWdodDogMjQwcHg7XFxufVxcbi5iaWctbW9kYWwtc2Nyb2xsIHtcXG4gIG1heC1oZWlnaHQ6IDQ4MHB4O1xcbn1cXG4ubW9kYWwtYnV0dG9ucyB7XFxuICBwYWRkaW5nOiAyMnB4IDhweCA4cHg7XFxuICAtbXMtZmxleC1wYWNrOiBlbmQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIGNvbG9yOiAjMDI3YmUzO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxufVxcbi5tb2RhbC1idXR0b25zLnJvdyAucS1idG4gKyAucS1idG4ge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLm1vZGFsLWJ1dHRvbnMuY29sdW1uIHtcXG4gIC1tcy1mbGV4LWFsaWduOiBlbmQ7XFxuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG4ubW9kYWwtYnV0dG9ucy5jb2x1bW4gLnEtYnRuICsgLnEtYnRuIHtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLnEtbW9kYWwtYm90dG9tLWVudGVyLFxcbi5xLW1vZGFsLWJvdHRvbS1sZWF2ZS1hY3RpdmUge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLnEtbW9kYWwtYm90dG9tLWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLWJvdHRvbS1sZWF2ZS1hY3RpdmUgLm1vZGFsLWNvbnRlbnQge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwJSk7XFxufVxcbi5xLW1vZGFsLXRvcC1lbnRlcixcXG4ucS1tb2RhbC10b3AtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLW1vZGFsLXRvcC1lbnRlciAubW9kYWwtY29udGVudCxcXG4ucS1tb2RhbC10b3AtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMzAlKTtcXG59XFxuLnEtbW9kYWwtcmlnaHQtZW50ZXIsXFxuLnEtbW9kYWwtcmlnaHQtbGVhdmUtYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLW1vZGFsLXJpZ2h0LWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLXJpZ2h0LWxlYXZlLWFjdGl2ZSAubW9kYWwtY29udGVudCB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzAlKTtcXG59XFxuLnEtbW9kYWwtbGVmdC1lbnRlcixcXG4ucS1tb2RhbC1sZWZ0LWxlYXZlLWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG4ucS1tb2RhbC1sZWZ0LWVudGVyIC5tb2RhbC1jb250ZW50LFxcbi5xLW1vZGFsLWxlZnQtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250ZW50IHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzAlKTtcXG59XFxuLnEtbm90aWZpY2F0aW9ucyA+IGRpdiB7XFxuICB6LWluZGV4OiA5NTAwO1xcbn1cXG4ucS1ub3RpZmljYXRpb24tbGlzdCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0LWNlbnRlciB7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0LXRvcCB7XFxuICB0b3A6IDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi1saXN0LWJvdHRvbSB7XFxuICBib3R0b206IDA7XFxufVxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtY2VudGVyLFxcbmJvZHkucS1pb3Mtc3RhdHVzYmFyLXggLnEtbm90aWZpY2F0aW9uLWxpc3QtdG9wIHtcXG4gIHRvcDogZW52KHNhZmUtYXJlYS1pbnNldC10b3ApO1xcbn1cXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLW5vdGlmaWNhdGlvbi1saXN0LWNlbnRlcixcXG5ib2R5LnEtaW9zLXN0YXR1c2Jhci14IC5xLW5vdGlmaWNhdGlvbi1saXN0LWJvdHRvbSB7XFxuICBib3R0b206IGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKTtcXG59XFxuLnEtbm90aWZpY2F0aW9uIHtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW46IDEwcHggMTBweCAwO1xcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBvcGFjaXR5O1xcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMXM7XFxuICB6LWluZGV4OiA5NTAwO1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbn1cXG4ucS1ub3RpZmljYXRpb24tdG9wLWxlZnQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWZ0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi10b3AtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tdG9wLXJpZ2h0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi10b3AtcmlnaHQtbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTBweCk7XFxuICB6LWluZGV4OiA5NDk5O1xcbn1cXG4ucS1ub3RpZmljYXRpb24tbGVmdC1lbnRlcixcXG4ucS1ub3RpZmljYXRpb24tbGVmdC1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tY2VudGVyLWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItbGVhdmUtdG8sXFxuLnEtbm90aWZpY2F0aW9uLXJpZ2h0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1yaWdodC1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlZnQtZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LWxlYXZlLXRvLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tZW50ZXIsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWF2ZS10byxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0LWVudGVyLFxcbi5xLW5vdGlmaWNhdGlvbi1ib3R0b20tcmlnaHQtbGVhdmUtdG8ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg1MHB4KTtcXG4gIHotaW5kZXg6IDk0OTk7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi10b3AtbGVmdC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLXRvcC1yaWdodC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWxlZnQtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1yaWdodC1sZWF2ZS1hY3RpdmUsXFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0LWxlYXZlLWFjdGl2ZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB6LWluZGV4OiA5NDk5O1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcbi5xLW5vdGlmaWNhdGlvbi10b3AtbGVhdmUtYWN0aXZlLFxcbi5xLW5vdGlmaWNhdGlvbi1jZW50ZXItbGVhdmUtYWN0aXZlIHtcXG4gIHRvcDogMDtcXG59XFxuLnEtbm90aWZpY2F0aW9uLWJvdHRvbS1sZWZ0LWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLWxlYXZlLWFjdGl2ZSxcXG4ucS1ub3RpZmljYXRpb24tYm90dG9tLXJpZ2h0LWxlYXZlLWFjdGl2ZSB7XFxuICBib3R0b206IDA7XFxufVxcbi5xLW9wdGlvbi1pbm5lciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBsaW5lLWhlaWdodDogMDtcXG59XFxuLnEtb3B0aW9uLWlubmVyICsgLnEtb3B0aW9uLWxhYmVsIHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcbi5xLW9wdGlvbiB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1vcHRpb24gaW5wdXQge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4ucS1vcHRpb24ucmV2ZXJzZSAucS1vcHRpb24taW5uZXIgKyAucS1vcHRpb24tbGFiZWwge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuLnEtb3B0aW9uLWdyb3VwLWlubGluZS1vcHRzID4gZGl2IHtcXG4gIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG4ucS1vcHRpb24tZ3JvdXAge1xcbiAgbWFyZ2luOiAtNXB4O1xcbiAgcGFkZGluZzogNXB4IDA7XFxufVxcbi5xLXBhZ2luYXRpb24gaW5wdXQge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS1wYWdpbmF0aW9uIC5xLWJ0biB7XFxuICBwYWRkaW5nOiAwIDVweCAhaW1wb3J0YW50O1xcbn1cXG4ucS1wYWdpbmF0aW9uIC5xLWJ0bi5kaXNhYmxlZCB7XFxuICBjb2xvcjogIzc3NztcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWZhZGVkKTtcXG59XFxuLnEtcGFyYWxsYXgge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtcGFyYWxsYXgtbWVkaWEgPiBpbWcsXFxuLnEtcGFyYWxsYXgtbWVkaWEgPiB2aWRlbyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiA1MCU7XFxuICBib3R0b206IDA7XFxuICBtaW4td2lkdGg6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiAxMDAlO1xcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTtcXG59XFxuLnEtcGFyYWxsYXgtdGV4dCB7XFxuICB0ZXh0LXNoYWRvdzogMCAwIDVweCAjZmZmO1xcbn1cXG4ucS1wb3BvdmVyIHtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG4gIHotaW5kZXg6IDgwMDA7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgbWF4LXdpZHRoOiAxMDB2dztcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5xLXBvcG92ZXIgPiAucS1saXN0Om9ubHktY2hpbGQge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5ib2R5IGRpdiAucS1wb3BvdmVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXByb2dyZXNzIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogNXB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbCB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmFuaW1hdGUge1xcbiAgYW5pbWF0aW9uOiBxLXByb2dyZXNzLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbDpub3QoLmluZGV0ZXJtaW5hdGUpIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgbGluZWFyO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbC5pbmRldGVybWluYXRlOmJlZm9yZSxcXG4ucS1wcm9ncmVzcy1tb2RlbC5pbmRldGVybWluYXRlOmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYmFja2dyb3VuZDogaW5oZXJpdDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICBib3R0b206IDA7XFxuICB3aWxsLWNoYW5nZTogbGVmdCwgcmlnaHQ7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLmluZGV0ZXJtaW5hdGU6YmVmb3JlIHtcXG4gIGFuaW1hdGlvbjogcS1wcm9ncmVzcy1pbmRldGVybWluYXRlIDIuMXMgY3ViaWMtYmV6aWVyKDAuNjUsIDAuODE1LCAwLjczNSwgMC4zOTUpIGluZmluaXRlO1xcbn1cXG4ucS1wcm9ncmVzcy1tb2RlbC5pbmRldGVybWluYXRlOmFmdGVyIHtcXG4gIGFuaW1hdGlvbjogcS1wcm9ncmVzcy1pbmRldGVybWluYXRlLXNob3J0IDIuMXMgY3ViaWMtYmV6aWVyKDAuMTY1LCAwLjg0LCAwLjQ0LCAxKSBpbmZpbml0ZTtcXG4gIGFuaW1hdGlvbi1kZWxheTogMS4xNXM7XFxufVxcbi5xLXByb2dyZXNzLW1vZGVsLnN0cmlwZSxcXG4ucS1wcm9ncmVzcy1tb2RlbC5zdHJpcGU6YmVmb3JlLFxcbi5xLXByb2dyZXNzLW1vZGVsLnN0cmlwZTphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDUwJSwgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLCB0cmFuc3BhcmVudCA3NSUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZC1zaXplOiA0MHB4IDQwcHggIWltcG9ydGFudDtcXG59XFxuLnEtcHJvZ3Jlc3MtdHJhY2sge1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgbGluZWFyO1xcbn1cXG4ucS1wcm9ncmVzcy1idWZmZXIge1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XFxuICBoZWlnaHQ6IDRweDtcXG4gIHJpZ2h0OiAwO1xcbiAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBsaW5lYXI7XFxuICAtd2Via2l0LW1hc2s6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJajgrQ2p4emRtY2dkMmxrZEdnOUlqRXlJaUJvWldsbmFIUTlJalFpSUhacFpYZFFiM0owUFNJd0lEQWdNVElnTkNJZ2RtVnljMmx2YmowaU1TNHhJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lQZ29nSUR4bGJHeHBjSE5sSUdONFBTSXlJaUJqZVQwaU1pSWdjbmc5SWpJaUlISjVQU0l5SWo0S0lDQWdJRHhoYm1sdFlYUmxJR0YwZEhKcFluVjBaVTVoYldVOUltTjRJaUJtY205dFBTSXlJaUIwYnowaUxURXdJaUJrZFhJOUlqQXVObk1pSUhKbGNHVmhkRU52ZFc1MFBTSnBibVJsWm1sdWFYUmxJaUF2UGdvZ0lEd3ZaV3hzYVhCelpUNEtJQ0E4Wld4c2FYQnpaU0JqZUQwaU1UUWlJR041UFNJeUlpQnllRDBpTWlJZ2NuazlJaklpSUdOc1lYTnpQU0pzYjJGa1pYSWlQZ29nSUNBZ1BHRnVhVzFoZEdVZ1lYUjBjbWxpZFhSbFRtRnRaVDBpWTNnaUlHWnliMjA5SWpFMElpQjBiejBpTWlJZ1pIVnlQU0l3TGpaeklpQnlaWEJsWVhSRGIzVnVkRDBpYVc1a1pXWnBibWwwWlNJZ0x6NEtJQ0E4TDJWc2JHbHdjMlUrQ2p3dmMzWm5QZ289XFxcIik7XFxuICAgICAgICAgIG1hc2s6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJajgrQ2p4emRtY2dkMmxrZEdnOUlqRXlJaUJvWldsbmFIUTlJalFpSUhacFpYZFFiM0owUFNJd0lEQWdNVElnTkNJZ2RtVnljMmx2YmowaU1TNHhJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lQZ29nSUR4bGJHeHBjSE5sSUdONFBTSXlJaUJqZVQwaU1pSWdjbmc5SWpJaUlISjVQU0l5SWo0S0lDQWdJRHhoYm1sdFlYUmxJR0YwZEhKcFluVjBaVTVoYldVOUltTjRJaUJtY205dFBTSXlJaUIwYnowaUxURXdJaUJrZFhJOUlqQXVObk1pSUhKbGNHVmhkRU52ZFc1MFBTSnBibVJsWm1sdWFYUmxJaUF2UGdvZ0lEd3ZaV3hzYVhCelpUNEtJQ0E4Wld4c2FYQnpaU0JqZUQwaU1UUWlJR041UFNJeUlpQnllRDBpTWlJZ2NuazlJaklpSUdOc1lYTnpQU0pzYjJGa1pYSWlQZ29nSUNBZ1BHRnVhVzFoZEdVZ1lYUjBjbWxpZFhSbFRtRnRaVDBpWTNnaUlHWnliMjA5SWpFMElpQjBiejBpTWlJZ1pIVnlQU0l3TGpaeklpQnlaWEJsWVhSRGIzVnVkRDBpYVc1a1pXWnBibWwwWlNJZ0x6NEtJQ0E4TDJWc2JHbHdjMlUrQ2p3dmMzWm5QZ289XFxcIik7XFxufVxcbi5xLXByb2dyZXNzLXRyYWNrLFxcbi5xLXByb2dyZXNzLWJ1ZmZlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjI7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5wdWxsLXRvLXJlZnJlc2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucHVsbC10by1yZWZyZXNoLW1lc3NhZ2Uge1xcbiAgaGVpZ2h0OiA2NXB4O1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbn1cXG4ucHVsbC10by1yZWZyZXNoLW1lc3NhZ2UgLnEtaWNvbiB7XFxuICBmb250LXNpemU6IDJyZW07XFxuICBtYXJnaW4tcmlnaHQ6IDE1cHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4zcztcXG59XFxuLnEtcmFkaW8tdW5jaGVja2VkLFxcbi5xLXJhZGlvLWNoZWNrZWQsXFxuLnEtcmFkaW8gLnEtb3B0aW9uLWlubmVyIHtcXG4gIGhlaWdodDogMjFweDtcXG4gIHdpZHRoOiAyMXB4O1xcbiAgbWluLXdpZHRoOiAyMXB4O1xcbiAgZm9udC1zaXplOiAyMXB4O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNDVzIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG4gIG9wYWNpdHk6IDE7XFxufVxcbi5xLXJhZGlvLXVuY2hlY2tlZCB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS1yYWRpby1jaGVja2VkIHtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCUgMDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCk7XFxufVxcbi5xLXJhZGlvIC5xLW9wdGlvbi1pbm5lci5hY3RpdmUgLnEtcmFkaW8tdW5jaGVja2VkIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcbi5xLXJhZGlvIC5xLW9wdGlvbi1pbm5lci5hY3RpdmUgLnEtcmFkaW8tY2hlY2tlZCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbn1cXG4ucS1yYXRpbmcge1xcbiAgY29sb3I6ICNmZmViM2I7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1yYXRpbmcgc3BhbiB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGRpc3BsYXk6IGluaGVyaXQ7XFxufVxcbi5xLXJhdGluZyBpIHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxuICB0ZXh0LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xMiksIDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMjQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgb3BhY2l0eTogMC40O1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbDtcXG59XFxuLnEtcmF0aW5nIGkuaG92ZXJlZCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7XFxufVxcbi5xLXJhdGluZyBpLmV4c2VsZWN0ZWQge1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG4ucS1yYXRpbmcgaS5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtcmF0aW5nIGkgKyBpIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjNyZW07XFxufVxcbi5xLXJhdGluZy5lZGl0YWJsZSBpIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuLnEtcmF0aW5nOm5vdCguZWRpdGFibGUpIHNwYW4sXFxuLnEtcmF0aW5nIGkge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLnEtc2Nyb2xsYXJlYS10aHVtYiB7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICByaWdodDogMDtcXG4gIG9wYWNpdHk6IDAuMjtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcztcXG59XFxuLnEtc2Nyb2xsYXJlYS10aHVtYi5pbnZpc2libGUtdGh1bWIge1xcbiAgb3BhY2l0eTogMCAhaW1wb3J0YW50O1xcbn1cXG4ucS1zY3JvbGxhcmVhLXRodW1iOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuLnEtc2Nyb2xsYXJlYS10aHVtYjphY3RpdmUge1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS10b29sYmFyIC5xLXNlYXJjaCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMjUpO1xcbn1cXG4ucS1zbGlkZXItdHJhY2ssXFxuLnEtc2xpZGVyLW1hcmsge1xcbiAgb3BhY2l0eTogMC40O1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG4ucS1zbGlkZXItdHJhY2sge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBsZWZ0OiAwO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgaGVpZ2h0OiAycHg7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrOm5vdCguZHJhZ2dpbmcpIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XFxufVxcbi5xLXNsaWRlci10cmFjay5hY3RpdmUtdHJhY2sge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuLnEtc2xpZGVyLXRyYWNrLnRyYWNrLWRyYWdnYWJsZS5kcmFnZ2luZyB7XFxuICBoZWlnaHQ6IDRweDtcXG4gIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGVhc2U7XFxufVxcbi5xLXNsaWRlci10cmFjay5oYW5kbGUtYXQtbWluaW11bSB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG59XFxuLnEtc2xpZGVyLW1hcmsge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA1MCU7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMnB4O1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUtY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG1hcmdpbi1sZWZ0OiA2cHg7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG59XFxuLnEtc2xpZGVyLWxhYmVsIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDZweDtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKSBzY2FsZSgwKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjJzO1xcbiAgcGFkZGluZzogMnB4IDRweDtcXG59XFxuLnEtc2xpZGVyLWxhYmVsLmxhYmVsLWFsd2F5cyB7XFxuICBvcGFjaXR5OiAxO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTEzOSUpIHNjYWxlKDEpO1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtNTAlLCAtNTAlLCAwKTtcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XFxuICB3aWR0aDogMTJweDtcXG4gIGhlaWdodDogMTJweDtcXG4gIG91dGxpbmU6IDA7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUgLnEtY2hpcCB7XFxuICBtYXgtd2lkdGg6IHVuc2V0O1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlLmRyYWdnaW5nIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTUwJSwgLTUwJSwgMCkgc2NhbGUoMS4zKTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlO1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlLmRyYWdnaW5nIC5xLXNsaWRlci1sYWJlbCB7XFxuICBvcGFjaXR5OiAxO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTEzOSUpIHNjYWxlKDEpO1xcbn1cXG4ucS1zbGlkZXItaGFuZGxlLmhhbmRsZS1hdC1taW5pbXVtIHtcXG4gIGJhY2tncm91bmQ6ICNmZmY7XFxufVxcbi5xLXNsaWRlci1oYW5kbGUuaGFuZGxlLWF0LW1pbmltdW06YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBib3JkZXI6IDJweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlci1yaW5nIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTUwJTtcXG4gIGxlZnQ6IC01MCU7XFxuICB3aWR0aDogMjAwJTtcXG4gIGhlaWdodDogMjAwJTtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZS1pbjtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuLnEtc2xpZGVyOm5vdCguZGlzYWJsZWQpOm5vdCgucmVhZG9ubHkpIC5xLXNsaWRlci1oYW5kbGUuZHJhZ2dpbmcgLnEtc2xpZGVyLXJpbmcsXFxuLnEtc2xpZGVyOm5vdCguZGlzYWJsZWQpOm5vdCgucmVhZG9ubHkpIC5xLXNsaWRlci1oYW5kbGU6Zm9jdXMgLnEtc2xpZGVyLXJpbmcsXFxuYm9keS5kZXNrdG9wIC5xLXNsaWRlcjpub3QoLmRpc2FibGVkKTpub3QoLnJlYWRvbmx5KTpob3ZlciAucS1zbGlkZXItcmluZyB7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbn1cXG4ucS1zbGlkZXIuZGlzYWJsZWQgLnEtc2xpZGVyLWhhbmRsZSB7XFxuICBib3JkZXI6IDJweCBzb2xpZCAjZmZmO1xcbn1cXG4ucS1zbGlkZXIuZGlzYWJsZWQgLnEtc2xpZGVyLWhhbmRsZS5oYW5kbGUtYXQtbWluaW11bSB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXNsaWRlciB7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGNvbG9yOiAjMDI3YmUzO1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXNsaWRlci5sYWJlbC1hbHdheXMsXFxuLnEtc2xpZGVyLndpdGgtcGFkZGluZyB7XFxuICBwYWRkaW5nOiAzNnB4IDAgOHB4O1xcbiAgaGVpZ2h0OiA2NHB4O1xcbn1cXG4ucS1zbGlkZXIuaGFzLWVycm9yIHtcXG4gIGNvbG9yOiAjZGIyODI4O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpO1xcbn1cXG4ucS1zbGlkZXIuaGFzLXdhcm5pbmcge1xcbiAgY29sb3I6ICNmMmMwMzc7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci13YXJuaW5nKTtcXG59XFxuLnEtc3Bpbm5lciB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS1zcGlubmVyLW1hdCB7XFxuICBhbmltYXRpb246IHEtc3BpbiAycyBsaW5lYXIgaW5maW5pdGUgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXIgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnEtc3Bpbm5lci1tYXQgLnBhdGgge1xcbiAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwO1xcbiAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XFxuICBzdHJva2UtbGluZWNhcDogcm91bmQ7XFxuICBhbmltYXRpb246IHEtbWF0LWRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucS1zdGVwcGVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ucS1zdGVwcGVyLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG59XFxuLnEtc3RlcHBlci1zdWJ0aXRsZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXN0ZXBwZXItZG90IHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDI0cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXN0ZXBwZXItZG90IHNwYW4ge1xcbiAgY29sb3I6ICNmZmY7XFxufVxcbi5xLXN0ZXBwZXItdGFiIHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB0cmFuc2l0aW9uOiBjb2xvciAwLjI4cywgYmFja2dyb3VuZCAwLjI4cztcXG59XFxuLnEtc3RlcHBlci10YWIuc3RlcC13YWl0aW5nIHtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG4ucS1zdGVwcGVyLXRhYi5zdGVwLXdhaXRpbmcgLnEtc3RlcHBlci1kb3Qge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC40Mik7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtbmF2aWdhdGlvbiB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS1zdGVwcGVyLXRhYi5zdGVwLWNvbG9yIHtcXG4gIGNvbG9yOiBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtYWN0aXZlIC5xLXN0ZXBwZXItdGl0bGUge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZGlzYWJsZWQge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC40Mik7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZXJyb3Ige1xcbiAgY29sb3I6ICNkYjI4Mjg7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSk7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZXJyb3IgLnEtc3RlcHBlci1kb3Qge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcbi5xLXN0ZXBwZXItdGFiLnN0ZXAtZXJyb3IgLnEtc3RlcHBlci1kb3Qgc3BhbiB7XFxuICBjb2xvcjogI2RiMjgyODtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLW5lZ2F0aXZlKTtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIge1xcbiAgbWluLWhlaWdodDogNzJweDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXI6bm90KC5hbHRlcm5hdGl2ZS1sYWJlbHMpIC5xLXN0ZXBwZXItdGFiIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXI6bm90KC5hbHRlcm5hdGl2ZS1sYWJlbHMpIC5xLXN0ZXBwZXItZG90OmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXN0ZXBwZXItaGVhZGVyLmFsdGVybmF0aXZlLWxhYmVscyB7XFxuICBtaW4taGVpZ2h0OiAxMDRweDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItdGFiIHtcXG4gIHBhZGRpbmc6IDI0cHggMzJweDtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItZG90IHtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG59XFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItbGFiZWwge1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS1zdGVwcGVyLWhlYWRlci5hbHRlcm5hdGl2ZS1sYWJlbHMgLnEtc3RlcHBlci1sYWJlbDpiZWZvcmUsXFxuLnEtc3RlcHBlci1oZWFkZXIuYWx0ZXJuYXRpdmUtbGFiZWxzIC5xLXN0ZXBwZXItbGFiZWw6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci1zdGVwLWNvbnRlbnQge1xcbiAgY29sb3I6ICMwMDA7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItdGFiIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZmlyc3QgLnEtc3RlcHBlci1kb3Q6YmVmb3JlLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGFzdCAucS1zdGVwcGVyLWxhYmVsOmFmdGVyLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGFzdCAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWxpbmU6YmVmb3JlLFxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItbGluZTphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIGhlaWdodDogMXB4O1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtc3RlcHBlci1ob3Jpem9udGFsID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci1sYWJlbDphZnRlcixcXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIGxlZnQ6IDEwMCU7XFxuICBtYXJnaW4tbGVmdDogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWRvdDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICByaWdodDogMTAwJTtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLW5hdiB7XFxuICBtYXJnaW46IDAgMTZweCA4cHg7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItc3RlcCAucS1zdGVwcGVyLW5hdiB7XFxuICBtYXJnaW46IDE2cHggMCAwO1xcbn1cXG4ucS1zdGVwcGVyLWhvcml6b250YWwgPiAucS1zdGVwcGVyLXN0ZXAgLnEtc3RlcHBlci1uYXYgPiBkaXYuY29sIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXN0ZXBwZXItaG9yaXpvbnRhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItc3RlcC1jb250ZW50ID4gLnEtc3RlcHBlci1zdGVwLWlubmVyIHtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwge1xcbiAgcGFkZGluZzogOHB4IDAgMThweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItbmF2IHtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLW5hdiA+IGRpdi5jb2wge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci1zdGVwLWNvbnRlbnQgPiAucS1zdGVwcGVyLXN0ZXAtaW5uZXIge1xcbiAgcGFkZGluZzogMCAyNHB4IDI0cHggNDhweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItdGFiIHtcXG4gIHBhZGRpbmc6IDEycHggMTZweDtcXG59XFxuLnEtc3RlcHBlci12ZXJ0aWNhbCA+IC5xLXN0ZXBwZXItc3RlcCA+IC5xLXN0ZXBwZXItdGFiIC5xLXN0ZXBwZXItZG90OmJlZm9yZSxcXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiA1MCU7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5xLXN0ZXBwZXItdmVydGljYWwgPiAucS1zdGVwcGVyLXN0ZXAgPiAucS1zdGVwcGVyLXRhYiAucS1zdGVwcGVyLWRvdDpiZWZvcmUge1xcbiAgYm90dG9tOiAxMDAlO1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgdG9wOiAxMDAlO1xcbiAgbWFyZ2luLXRvcDogOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1sYWJlbCB7XFxuICBwYWRkaW5nLXRvcDogNHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIgLnEtc3RlcHBlci1sYWJlbCAucS1zdGVwcGVyLXRpdGxlIHtcXG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xcbn1cXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIucS1zdGVwcGVyLWZpcnN0IC5xLXN0ZXBwZXItZG90OmJlZm9yZSxcXG4ucS1zdGVwcGVyLXZlcnRpY2FsID4gLnEtc3RlcHBlci1zdGVwID4gLnEtc3RlcHBlci10YWIucS1zdGVwcGVyLWxhc3QgLnEtc3RlcHBlci1kb3Q6YWZ0ZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXN0ZXBwZXItdGFiLnN0ZXAtbmF2aWdhdGlvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDUpO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5xLXN0ZXBwZXItaG9yaXpvbnRhbC5xLXN0ZXBwZXItY29udHJhY3RhYmxlID4gLnEtc3RlcHBlci1oZWFkZXIge1xcbiAgICBtaW4taGVpZ2h0OiA3MnB4O1xcbiAgfVxcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLXRhYiB7XFxuICAgIHBhZGRpbmc6IDI0cHggMDtcXG4gIH1cXG4gIC5xLXN0ZXBwZXItaG9yaXpvbnRhbC5xLXN0ZXBwZXItY29udHJhY3RhYmxlID4gLnEtc3RlcHBlci1oZWFkZXIgLnEtc3RlcHBlci10YWI6bm90KDpsYXN0LWNoaWxkKSAucS1zdGVwcGVyLWRvdDphZnRlciB7XFxuICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XFxuICB9XFxuICAucS1zdGVwcGVyLWhvcml6b250YWwucS1zdGVwcGVyLWNvbnRyYWN0YWJsZSA+IC5xLXN0ZXBwZXItaGVhZGVyIC5xLXN0ZXBwZXItZG90IHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgLnEtc3RlcHBlci1ob3Jpem9udGFsLnEtc3RlcHBlci1jb250cmFjdGFibGUgPiAucS1zdGVwcGVyLWhlYWRlciAucS1zdGVwcGVyLWxhYmVsIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuLnEtdGFicyB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcbi5xLWxheW91dC1tYXJnaW5hbCAucS10YWJzIHtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxufVxcbi5xLXRhYnMtc2Nyb2xsZXIge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLnEtdGFiLXBhbmUge1xcbiAgcGFkZGluZzogMTJweDtcXG59XFxuLnEtdGFicy1wYW5lczplbXB0eSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10YWJzLW5vcm1hbCAucS10YWItaWNvbixcXG4ucS10YWJzLW5vcm1hbCAucS10YWItbGFiZWwge1xcbiAgb3BhY2l0eTogMC43O1xcbn1cXG4ucS10YWIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcywgYmFja2dyb3VuZCAwLjNzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiA4cHggMTBweDtcXG4gIG1pbi1oZWlnaHQ6IDQ4cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG4ucS10YWIgLnEtdGFiLWljb24tcGFyZW50ICsgLnEtdGFiLWxhYmVsLXBhcmVudCB7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxufVxcbi5xLXRhYiAucS1jaGlwIHtcXG4gIHRvcDogLThweDtcXG4gIHJpZ2h0OiAtMTBweDtcXG4gIGxlZnQ6IGF1dG87XFxuICBtaW4taGVpZ2h0OiBhdXRvO1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCw2Nyw1NCwwLjc1KTtcXG59XFxuLnEtdGFiLmFjdGl2ZSAucS10YWItaWNvbixcXG4ucS10YWIuYWN0aXZlIC5xLXRhYi1sYWJlbCB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4ucS10YWItbGFiZWwge1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4ucS10YWItaWNvbiB7XFxuICBmb250LXNpemU6IDI3cHg7XFxufVxcbi5xLXRhYi1mb2N1cy1oZWxwZXIge1xcbiAgei1pbmRleDogLTE7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4ucS10YWItZm9jdXMtaGVscGVyOmZvY3VzIHtcXG4gIHotaW5kZXg6IHVuc2V0O1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgb3BhY2l0eTogMC4xO1xcbn1cXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5xLXRhYi5oaWRlLWljb24gLnEtdGFiLWljb24tcGFyZW50LFxcbiAgLnEtdGFiLmhpZGUtbGFiZWwgLnEtdGFiLWxhYmVsLXBhcmVudCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5xLXRhYi5oaWRlLWljb24gLnEtdGFiLWxhYmVsIHtcXG4gICAgbWFyZ2luLXRvcDogMDtcXG4gIH1cXG4gIC5xLXRhYi1mdWxsLmhpZGUtbm9uZSAucS10YWItbGFiZWwtcGFyZW50IC5xLXRhYi1tZXRhIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XFxuICAucS10YWItZnVsbCAucS10YWItbGFiZWwtcGFyZW50IC5xLXRhYi1tZXRhIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG4gIH1cXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAucS10YWJzLWhlYWQ6bm90KC5zY3JvbGxhYmxlKSAucS10YWJzLXNjcm9sbGVyLFxcbiAgLnEtdGFicy1oZWFkOm5vdCguc2Nyb2xsYWJsZSkgLnEtdGFiIHtcXG4gICAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgICAgZmxleDogMSAxIGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkge1xcbiAgLnEtdGFiIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAyNXB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAyNXB4O1xcbiAgfVxcbiAgLnEtbGF5b3V0LW1hcmdpbmFsIC5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAxMnB4O1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xcbiAgfVxcbn1cXG4ucS10YWJzLWhlYWQge1xcbiAgbWluLWhlaWdodDogNDhweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBmb250LXNpemU6IDAuOTVyZW07XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4xOHMgZWFzZS1pbiwgYm94LXNoYWRvdyAwLjE4cyBlYXNlLWluO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4ucS10YWJzLWhlYWQ6bm90KC5zY3JvbGxhYmxlKSAucS10YWJzLWxlZnQtc2Nyb2xsLFxcbi5xLXRhYnMtaGVhZDpub3QoLnNjcm9sbGFibGUpIC5xLXRhYnMtcmlnaHQtc2Nyb2xsIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbCxcXG4ucS10YWJzLXJpZ2h0LXNjcm9sbCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRvcDogMDtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbCAucS1pY29uLFxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsIC5xLWljb24ge1xcbiAgdGV4dC1zaGFkb3c6IDAgMCAxMHB4ICMwMDA7XFxuICBmb250LXNpemU6IDMyLjRweDtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbC5kaXNhYmxlZCxcXG4ucS10YWJzLXJpZ2h0LXNjcm9sbC5kaXNhYmxlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10YWJzOmhvdmVyIC5xLXRhYnMtbGVmdC1zY3JvbGwgLnEtaWNvbixcXG4ucS10YWJzOmhvdmVyIC5xLXRhYnMtcmlnaHQtc2Nyb2xsIC5xLWljb24ge1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLnEtdGFicy1sZWZ0LXNjcm9sbCB7XFxuICBsZWZ0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXRhYnMtcmlnaHQtc2Nyb2xsIHtcXG4gIHJpZ2h0OiAwIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXRhYnMtYWxpZ24tanVzdGlmeSAucS10YWJzLXNjcm9sbGVyLFxcbi5xLXRhYnMtYWxpZ24tanVzdGlmeSAucS10YWIge1xcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xcbn1cXG4ucS10YWJzLWFsaWduLWNlbnRlciB7XFxuICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5xLXRhYnMtYWxpZ24tcmlnaHQge1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcbi5xLXRhYnMtYmFyIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcXG4gIGJvcmRlci13aWR0aDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGhlaWdodDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG59XFxuLnEtdGFicy1nbG9iYWwtYmFyIHtcXG4gIHdpZHRoOiAxcHg7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm07XFxuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1cztcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtcXG59XFxuLnEtdGFicy1nbG9iYWwtYmFyLmNvbnRyYWN0IHtcXG4gIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzO1xcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xcbn1cXG4ucS10YWJzLWdsb2JhbC1iYXItY29udGFpbmVyLmhpZ2hsaWdodCA+IC5xLXRhYnMtZ2xvYmFsLWJhciB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG4ucS10YWJzLXR3by1saW5lcyAucS10YWIge1xcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcXG59XFxuLnEtdGFicy10d28tbGluZXMgLnEtdGFiIC5xLXRhYi1sYWJlbCB7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XFxufVxcbi5xLXRhYnMtcG9zaXRpb24tdG9wID4gLnEtdGFicy1oZWFkIC5xLXRhYnMtYmFyIHtcXG4gIGJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20td2lkdGg6IDJweDtcXG59XFxuLnEtdGFicy1wb3NpdGlvbi1ib3R0b20gPiAucS10YWJzLWhlYWQgLnEtdGFicy1iYXIge1xcbiAgdG9wOiAwO1xcbiAgYm9yZGVyLXRvcC13aWR0aDogMnB4O1xcbn1cXG4ucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYnMtcGFuZXMge1xcbiAgLW1zLWZsZXgtb3JkZXI6IC0xO1xcbiAgICAgIG9yZGVyOiAtMTtcXG59XFxuLnEtdGFicy1pbnZlcnRlZCAucS10YWJzLWhlYWQge1xcbiAgYmFja2dyb3VuZDogI2ZmZjtcXG59XFxuLnEtdGFicy1pbnZlcnRlZC5xLXRhYnMtcG9zaXRpb24tdG9wID4gLnEtdGFicy1wYW5lcyB7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEpO1xcbn1cXG4ucS10YWJzLWludmVydGVkLnEtdGFicy1wb3NpdGlvbi10b3AgPiAucS10YWItcGFuZSB7XFxuICBib3JkZXItdG9wOiAwO1xcbn1cXG4ucS10YWJzLWludmVydGVkLnEtdGFicy1wb3NpdGlvbi1ib3R0b20gPiAucS10YWJzLXBhbmVzIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7XFxufVxcbi5xLXRhYnMtaW52ZXJ0ZWQucS10YWJzLXBvc2l0aW9uLWJvdHRvbSA+IC5xLXRhYi1wYW5lIHtcXG4gIGJvcmRlci1ib3R0b206IDA7XFxufVxcbmJvZHkubW9iaWxlIC5xLXRhYnMtc2Nyb2xsZXIge1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgb3ZlcmZsb3cteDogYXV0bztcXG4gIHdpbGwtY2hhbmdlOiBzY3JvbGwtcG9zaXRpb247XFxuICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XFxufVxcbmJvZHkuZGVza3RvcCAucS10YWI6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIG9wYWNpdHk6IDAuMTtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRhYjpob3ZlcjpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxufVxcbi5xLXRhYmxlLWNvbnRhaW5lciB7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjIpLCAwIDJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggMXB4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtdGFibGUtY29udGFpbmVyLmZ1bGxzY3JlZW4ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcXG59XFxuLnEtdGFibGUtdG9wIHtcXG4gIG1pbi1oZWlnaHQ6IDY0cHg7XFxuICBwYWRkaW5nOiA4cHggMjRweDtcXG59XFxuLnEtdGFibGUtdG9wOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgb3BhY2l0eTogMC4yO1xcbiAgdHJhbnNpdGlvbjogMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjUsIDEpO1xcbn1cXG4ucS10YWJsZS10b3AgLnEtdGFibGUtY29udHJvbCB7XFxuICBtaW4taGVpZ2h0OiAzNnB4O1xcbiAgcGFkZGluZzogOHB4IDA7XFxuICAtbXMtZmxleC13cmFwOiB3cmFwO1xcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG59XFxuLnEtdGFibGUtdGl0bGUge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDA1ZW07XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4ucS10YWJsZS1zZXBhcmF0b3Ige1xcbiAgbWluLXdpZHRoOiA4cHggIWltcG9ydGFudDtcXG59XFxuLnEtdGFibGUtbm9kYXRhIC5xLWljb24ge1xcbiAgZm9udC1zaXplOiAyMDAlO1xcbiAgcGFkZGluZy1yaWdodDogMTVweDtcXG59XFxuLnEtdGFibGUtcHJvZ3Jlc3Mge1xcbiAgaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XFxufVxcbi5xLXRhYmxlLXByb2dyZXNzIHRkIHtcXG4gIHBhZGRpbmc6IDAgIWltcG9ydGFudDtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4ucS10YWJsZS1wcm9ncmVzcyAucS1wcm9ncmVzcyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDJweDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLnEtdGFibGUtbWlkZGxlIHtcXG4gIG1heC13aWR0aDogMTAwJTtcXG59XFxuLnEtdGFibGUtYm90dG9tIHtcXG4gIG1pbi1oZWlnaHQ6IDQ4cHg7XFxuICBwYWRkaW5nOiA0cHggMTRweCA0cHggMjRweDtcXG59XFxuLnEtdGFibGUtYm90dG9tLFxcbi5xLXRhYmxlLWJvdHRvbSAucS1pZiB7XFxuICBmb250LXNpemU6IDEycHg7XFxufVxcbi5xLXRhYmxlLWJvdHRvbSAucS10YWJsZS1jb250cm9sIHtcXG4gIG1pbi1oZWlnaHQ6IDI0cHg7XFxufVxcbi5xLXRhYmxlLWNvbnRyb2wge1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4ucS10YWJsZS1zb3J0LWljb24ge1xcbiAgdHJhbnNpdGlvbjogMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjUsIDEpO1xcbiAgd2lsbC1jaGFuZ2U6IG9wYWNpdHksIHRyYW5zZm9ybTtcXG4gIG9wYWNpdHk6IDA7XFxuICBmb250LXNpemU6IDEyMCU7XFxufVxcbi5xLXRhYmxlLXNvcnQtaWNvbi1sZWZ0LFxcbi5xLXRhYmxlLXNvcnQtaWNvbi1jZW50ZXIge1xcbiAgbWFyZ2luLWxlZnQ6IDRweDtcXG59XFxuLnEtdGFibGUtc29ydC1pY29uLXJpZ2h0IHtcXG4gIG1hcmdpbi1yaWdodDogNHB4O1xcbn1cXG4ucS10YWJsZSB7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1heC13aWR0aDogMTAwJTtcXG4gIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XFxuICBib3JkZXItc3BhY2luZzogMDtcXG59XFxuLnEtdGFibGUgdGhlYWQgdHIge1xcbiAgaGVpZ2h0OiA1NnB4O1xcbn1cXG4ucS10YWJsZSB0aCB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgdHJhbnNpdGlvbjogMC4zcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjUsIDEpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuLnEtdGFibGUgdGguc29ydGFibGUge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0YWJsZTpob3ZlciAucS10YWJsZS1zb3J0LWljb24ge1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS10YWJsZSB0aC5zb3J0ZWQgLnEtdGFibGUtc29ydC1pY29uIHtcXG4gIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcXG59XFxuLnEtdGFibGUgdGguc29ydC1kZXNjIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0ciB7XFxuICB0cmFuc2l0aW9uOiAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxuICB3aWxsLWNoYW5nZTogYmFja2dyb3VuZDtcXG59XFxuLnEtdGFibGUgdGgsXFxuLnEtdGFibGUgdGQge1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHBhZGRpbmc6IDdweCAyNHB4O1xcbn1cXG4ucS10YWJsZSB0aGVhZCxcXG4ucS10YWJsZSB0ZCxcXG4ucS10YWJsZSB0aCB7XFxuICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLXdpZHRoOiAwO1xcbn1cXG4ucS10YWJsZSB0Ym9keSB0ZCB7XFxuICBoZWlnaHQ6IDQ4cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbn1cXG4ucS10YWJsZS1jb2wtYXV0by13aWR0aCB7XFxuICB3aWR0aDogMXB4O1xcbn1cXG4ucS10YWJsZS1ib3R0b20taXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxufVxcbi5xLXRhYmxlLWdyaWQge1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuLnEtdGFibGUtZ3JpZCAucS10YWJsZS1ib3R0b20ge1xcbiAgYm9yZGVyLXRvcDogMDtcXG59XFxuLnEtdGFibGUtZ3JpZCAucS10YWJsZSB7XFxuICBoZWlnaHQ6IDJweDtcXG59XFxuLnEtdGFibGUtZ3JpZCAucS10YWJsZSB0aGVhZCB7XFxuICBib3JkZXI6IDA7XFxufVxcbi5xLXRhYmxlLWhvcml6b250YWwtc2VwYXJhdG9yIHRoZWFkLFxcbi5xLXRhYmxlLWhvcml6b250YWwtc2VwYXJhdG9yIHRib2R5IHRkIHtcXG4gIGJvcmRlci13aWR0aDogMCAwIDFweCAwO1xcbn1cXG4ucS10YWJsZS12ZXJ0aWNhbC1zZXBhcmF0b3IgdGhlYWQge1xcbiAgYm9yZGVyLXdpZHRoOiAwIDAgMXB4IDA7XFxufVxcbi5xLXRhYmxlLXZlcnRpY2FsLXNlcGFyYXRvciB0ZCB7XFxuICBib3JkZXItd2lkdGg6IDAgMCAwIDFweDtcXG59XFxuLnEtdGFibGUtdmVydGljYWwtc2VwYXJhdG9yIHRkOmZpcnN0LWNoaWxkIHtcXG4gIGJvcmRlci1sZWZ0OiAwO1xcbn1cXG4ucS10YWJsZS1jZWxsLXNlcGFyYXRvciB0ZCB7XFxuICBib3JkZXItd2lkdGg6IDFweDtcXG59XFxuLnEtdGFibGUtY2VsbC1zZXBhcmF0b3IgdGQ6Zmlyc3QtY2hpbGQge1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxufVxcbi5xLXRhYmxlLWNlbGwtc2VwYXJhdG9yIHRkOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLXJpZ2h0OiAwO1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS10b3Age1xcbiAgbWluLWhlaWdodDogNDhweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtdG9wLFxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLWJvdHRvbSB7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUtYm90dG9tIHtcXG4gIG1pbi1oZWlnaHQ6IDQycHg7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlLXNvcnQtaWNvbiB7XFxuICBmb250LXNpemU6IDExMCU7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlIHRoLFxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IDRweCA4cHg7XFxufVxcbi5xLXRhYmxlLWRlbnNlIC5xLXRhYmxlIHRoZWFkIHRyIHtcXG4gIGhlaWdodDogNDBweDtcXG59XFxuLnEtdGFibGUtZGVuc2UgLnEtdGFibGUgdGJvZHkgdGQge1xcbiAgaGVpZ2h0OiAyOHB4O1xcbn1cXG4ucS10YWJsZS1kZW5zZSAucS10YWJsZS1ib3R0b20taXRlbSB7XFxuICBtYXJnaW4tcmlnaHQ6IDhweDtcXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICAucS10YWJsZS10b3Age1xcbiAgICBtaW4taGVpZ2h0OiA0OHB4O1xcbiAgfVxcbiAgLnEtdGFibGUtdG9wLFxcbiAgLnEtdGFibGUtYm90dG9tIHtcXG4gICAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gIH1cXG4gIC5xLXRhYmxlLWJvdHRvbSB7XFxuICAgIG1pbi1oZWlnaHQ6IDQycHg7XFxuICB9XFxuICAucS10YWJsZS1zb3J0LWljb24ge1xcbiAgICBmb250LXNpemU6IDExMCU7XFxuICB9XFxuICAucS10YWJsZSB0aCxcXG4gIC5xLXRhYmxlIHRkIHtcXG4gICAgcGFkZGluZzogNHB4IDhweDtcXG4gIH1cXG4gIC5xLXRhYmxlIHRoZWFkIHRyIHtcXG4gICAgaGVpZ2h0OiA0MHB4O1xcbiAgfVxcbiAgLnEtdGFibGUgdGJvZHkgdGQge1xcbiAgICBoZWlnaHQ6IDI4cHg7XFxuICB9XFxuICAucS10YWJsZS1ib3R0b20taXRlbSB7XFxuICAgIG1hcmdpbi1yaWdodDogOHB4O1xcbiAgfVxcbn1cXG4ucS10YWJsZS1ib3R0b20ge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtdGFibGUge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC44Nyk7XFxufVxcbi5xLXRhYmxlIHRoZWFkLFxcbi5xLXRhYmxlIHRyLFxcbi5xLXRhYmxlIHRoLFxcbi5xLXRhYmxlIHRkIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnEtdGFibGUgdGgge1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxufVxcbi5xLXRhYmxlIHRoLnNvcnRhYmxlOmhvdmVyLFxcbi5xLXRhYmxlIHRoLnNvcnRlZCB7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjg3KTtcXG59XFxuLnEtdGFibGUgdGJvZHkgdHIuc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA2KTtcXG59XFxuLnEtdGFibGUgdGJvZHkgdHI6aG92ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjAzKTtcXG59XFxuLnEtdGFibGUtZGFyayB7XFxuICBjb2xvcjogI2VlZTtcXG59XFxuLnEtdGFibGUtZGFyayAucS10YWJsZS1ib3R0b20sXFxuLnEtdGFibGUtZGFyayAucS10YWJsZS10b3Age1xcbiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42NCk7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKTtcXG59XFxuLnEtdGFibGUtZGFyayB0aGVhZCxcXG4ucS10YWJsZS1kYXJrIHRyLFxcbi5xLXRhYmxlLWRhcmsgdGgsXFxuLnEtdGFibGUtZGFyayB0ZCB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xMik7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGgge1xcbiAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42NCk7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGguc29ydGFibGU6aG92ZXIsXFxuLnEtdGFibGUtZGFyayB0aC5zb3J0ZWQge1xcbiAgY29sb3I6ICNlZWU7XFxufVxcbi5xLXRhYmxlLWRhcmsgdGJvZHkgdHIuc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIpO1xcbn1cXG4ucS10YWJsZS1kYXJrIHRib2R5IHRyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xKTtcXG59XFxuLnEtdGltZWxpbmUge1xcbiAgcGFkZGluZzogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbGlzdC1zdHlsZTogbm9uZTtcXG59XFxuLnEtdGltZWxpbmUgaDYge1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxufVxcbi5xLXRpbWVsaW5lLXRpdGxlIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbn1cXG4ucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDFweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcbi5xLXRpbWVsaW5lLWRvdCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDE1cHg7XFxufVxcbi5xLXRpbWVsaW5lLWRvdDpiZWZvcmUsXFxuLnEtdGltZWxpbmUtZG90OmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5xLXRpbWVsaW5lLWRvdDpiZWZvcmUge1xcbiAgYm9yZGVyOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbiAgaGVpZ2h0OiAxNXB4O1xcbiAgd2lkdGg6IDE1cHg7XFxuICB0b3A6IDRweDtcXG4gIGxlZnQ6IDA7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3MgZWFzZS1pbi1vdXQsIGJvcmRlciAwLjNzIGVhc2UtaW4tb3V0O1xcbn1cXG4ucS10aW1lbGluZS1kb3Q6YWZ0ZXIge1xcbiAgd2lkdGg6IDNweDtcXG4gIG9wYWNpdHk6IDAuNDtcXG4gIHRvcDogMjRweDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDZweDtcXG59XFxuLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWRvdCB7XFxuICB3aWR0aDogMzFweDtcXG4gIGxlZnQ6IC04cHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1kb3Q6YmVmb3JlIHtcXG4gIGhlaWdodDogMzFweDtcXG4gIHdpZHRoOiAzMXB4O1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtZG90OmFmdGVyIHtcXG4gIHRvcDogNDFweDtcXG4gIGxlZnQ6IDE0cHg7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbiAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbn1cXG4ucS10aW1lbGluZS1kb3QgLnEtaWNvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGZvbnQtc2l6ZTogMTZweDtcXG4gIGhlaWdodDogMzhweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdHJhbnNpdGlvbjogY29sb3IgMC4zcyBlYXNlLWluLW91dDtcXG59XFxuLnEtdGltZWxpbmUtZGFyayB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtdGltZWxpbmUtZGFyayAucS10aW1lbGluZS1zdWJ0aXRsZSB7XFxuICBvcGFjaXR5OiAwLjc7XFxufVxcbi5xLXRpbWVsaW5lLWVudHJ5IHtcXG4gIHBhZGRpbmctbGVmdDogNDBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeTpsYXN0LWNoaWxkIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS10aW1lbGluZS1lbnRyeTpsYXN0LWNoaWxkIC5xLXRpbWVsaW5lLWRvdDphZnRlciB7XFxuICBjb250ZW50OiBub25lO1xcbn1cXG4ucS10aW1lbGluZS1ob3ZlciAucS10aW1lbGluZS1lbnRyeTpob3ZlciAucS10aW1lbGluZS1kb3Q6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAzcHggc29saWQgY3VycmVudENvbG9yO1xcbn1cXG4ucS10aW1lbGluZS1ob3ZlciAucS10aW1lbGluZS1lbnRyeS5xLXRpbWVsaW5lLWVudHJ5LXdpdGgtaWNvbjpob3ZlciAucS10aW1lbGluZS1kb3QgLnEtaWNvbiB7XFxuICBjb2xvcjogY3VycmVudENvbG9yO1xcbn1cXG4ucS10aW1lbGluZS1jb250ZW50IHtcXG4gIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuLnEtdGltZWxpbmUtaGVhZGluZzpmaXJzdC1jaGlsZCAucS10aW1lbGluZS1oZWFkaW5nLXRpdGxlIHtcXG4gIHBhZGRpbmctdG9wOiAwO1xcbn1cXG4ucS10aW1lbGluZS1oZWFkaW5nOmxhc3QtY2hpbGQgLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogMDtcXG59XFxuLnEtdGltZWxpbmUtaGVhZGluZy10aXRsZSB7XFxuICBwYWRkaW5nOiAzMnB4IDA7XFxuICBtYXJnaW46IDA7XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkgYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWhlYWRpbmcge1xcbiAgICBkaXNwbGF5OiB0YWJsZS1yb3c7XFxuICAgIGZvbnQtc2l6ZTogMjAwJTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtaGVhZGluZyA+IGRpdiB7XFxuICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWhlYWRpbmctdGl0bGUge1xcbiAgICBtYXJnaW4tbGVmdDogLTUwcHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lIHtcXG4gICAgZGlzcGxheTogdGFibGU7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5IHtcXG4gICAgZGlzcGxheTogdGFibGUtcm93O1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90LFxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtc3VidGl0bGUge1xcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcXG4gICAgd2lkdGg6IDM1JTtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZG90IHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1jb250ZW50IHtcXG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeS13aXRoLWljb24gLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIHBhZGRpbmctdG9wOiA4cHg7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLXN1YnRpdGxlIHtcXG4gICAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWhlYWRpbmctdGl0bGUge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIG1hcmdpbi1sZWZ0OiAwO1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtc3VidGl0bGUsXFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWRvdCxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIHBhZGRpbmc6IDA7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWRvdCB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBtYXJnaW4tbGVmdDogLTcuMTVweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWRvdCB7XFxuICAgIGxlZnQ6IDUwJTtcXG4gICAgbWFyZ2luLWxlZnQ6IC0xNXB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1zdWJ0aXRsZSxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtY29udGVudCB7XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LWxlZnQgLnEtdGltZWxpbmUtY29udGVudCxcXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktcmlnaHQgLnEtdGltZWxpbmUtc3VidGl0bGUge1xcbiAgICBmbG9hdDogbGVmdDtcXG4gICAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XFxuICB9XFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LWxlZnQgLnEtdGltZWxpbmUtc3VidGl0bGUsXFxuICAucS10aW1lbGluZS1yZXNwb25zaXZlIC5xLXRpbWVsaW5lLWVudHJ5LXJpZ2h0IC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBmbG9hdDogcmlnaHQ7XFxuICAgIHRleHQtYWxpZ246IGxlZnQ7XFxuICAgIHBhZGRpbmctbGVmdDogMzBweDtcXG4gIH1cXG4gIC5xLXRpbWVsaW5lLXJlc3BvbnNpdmUgLnEtdGltZWxpbmUtZW50cnktd2l0aC1pY29uIC5xLXRpbWVsaW5lLWNvbnRlbnQge1xcbiAgICBwYWRkaW5nLXRvcDogOHB4O1xcbiAgfVxcbiAgLnEtdGltZWxpbmUtcmVzcG9uc2l2ZSAucS10aW1lbGluZS1lbnRyeSB7XFxuICAgIHBhZGRpbmctYm90dG9tOiAyNHB4O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcbn1cXG4ucS10b2dnbGUtYmFzZSB7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC40NXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEycHg7XFxuICBib3JkZXItcmFkaXVzOiAzMHB4O1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS10b2dnbGUtaGFuZGxlIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjU7XFxuICB0cmFuc2l0aW9uOiBhbGwgNDUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDIxcHg7XFxuICBoZWlnaHQ6IDIxcHg7XFxuICBsaW5lLWhlaWdodDogMjFweDtcXG59XFxuLnEtdG9nZ2xlIC5xLW9wdGlvbi1pbm5lciB7XFxuICBoZWlnaHQ6IDIxcHg7XFxuICB3aWR0aDogNDBweDtcXG4gIG1pbi13aWR0aDogNDBweDtcXG4gIHBhZGRpbmc6IDVweCAwO1xcbn1cXG4ucS10b2dnbGUgLnEtb3B0aW9uLWlubmVyLmFjdGl2ZSAucS10b2dnbGUtaGFuZGxlIHtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIGxlZnQ6IDE5cHg7XFxufVxcbi5xLXRvZ2dsZSAucS1vcHRpb24taW5uZXIuYWN0aXZlIC5xLXRvZ2dsZS1pY29uIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4ucS10b29sYmFyIHtcXG4gIHBhZGRpbmc6IDRweCAxMnB4O1xcbiAgbWluLWhlaWdodDogNTBweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLnEtdG9vbGJhci1pbnZlcnRlZCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbn1cXG4ucS10b29sYmFyLXRpdGxlIHtcXG4gIC1tcy1mbGV4OiAxIDEgMCU7XFxuICAgICAgZmxleDogMSAxIDAlO1xcbiAgbWluLXdpZHRoOiAxcHg7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbn1cXG4ucS10b29sYmFyLXN1YnRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDAuNztcXG59XFxuLnEtdG9vbGJhci10aXRsZSxcXG4ucS10b29sYmFyLXN1YnRpdGxlIHtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcbi5xLXRvb2x0aXAge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6ICNmYWZhZmE7XFxuICBiYWNrZ3JvdW5kOiAjNzQ3NDc0O1xcbiAgei1pbmRleDogOTAwMDtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5xLXRyZWUtbm9kZSB7XFxuICBtYXJnaW46IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAwIDAgM3B4IDIycHg7XFxufVxcbi5xLXRyZWUtbm9kZTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTNweDtcXG4gIGJvdHRvbTogMDtcXG4gIHdpZHRoOiAxcHg7XFxuICByaWdodDogYXV0bztcXG4gIGxlZnQ6IC0xM3B4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxufVxcbi5xLXRyZWUtbm9kZTpsYXN0LWNoaWxkOmFmdGVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXRyZWUtbm9kZS1oZWFkZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtM3B4O1xcbiAgYm90dG9tOiA1MCU7XFxuICB3aWR0aDogMzVweDtcXG4gIGxlZnQ6IC0zNXB4O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY3VycmVudENvbG9yO1xcbn1cXG4ucS10cmVlLWNoaWxkcmVuIHtcXG4gIHBhZGRpbmctbGVmdDogMjVweDtcXG59XFxuLnEtdHJlZS1jaGlsZHJlbi5kaXNhYmxlZCB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnEtdHJlZS1ub2RlLWJvZHkge1xcbiAgcGFkZGluZzogNXB4IDAgOHB4IDVweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCB7XFxuICBwYWRkaW5nLWxlZnQ6IDJweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCA+IC5xLXRyZWUtbm9kZS1oZWFkZXI6YmVmb3JlIHtcXG4gIHdpZHRoOiAxNXB4O1xcbiAgbGVmdDogLTE1cHg7XFxufVxcbi5xLXRyZWUtbm9kZS1wYXJlbnQgPiAucS10cmVlLW5vZGUtY29sbGFwc2libGUgPiAucS10cmVlLW5vZGUtYm9keSB7XFxuICBwYWRkaW5nOiA1cHggMCA4cHggMjdweDtcXG59XFxuLnEtdHJlZS1ub2RlLXBhcmVudCA+IC5xLXRyZWUtbm9kZS1jb2xsYXBzaWJsZSA+IC5xLXRyZWUtbm9kZS1ib2R5OmFmdGVyIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHJpZ2h0OiBhdXRvO1xcbiAgbGVmdDogMTJweDtcXG4gIGJvcmRlci1sZWZ0OiAxcHggc29saWQgY3VycmVudENvbG9yO1xcbiAgYm90dG9tOiA1MHB4O1xcbn1cXG4ucS10cmVlLW5vZGUtbGluayB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbi5xLXRyZWUtbm9kZS1zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTUpO1xcbn1cXG4ucS10cmVlLWRhcmsgLnEtdHJlZS1ub2RlLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC40KTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRyZWUtbm9kZS1saW5rOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLXRyZWUtZGFyayAucS10cmVlLW5vZGUtbGluazpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMyk7XFxufVxcbi5xLXRyZWUtbm9kZS1oZWFkZXIge1xcbiAgcGFkZGluZzogNHB4O1xcbiAgbWFyZ2luLXRvcDogM3B4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG4ucS10cmVlLW5vZGUtaGVhZGVyLmRpc2FibGVkIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS10cmVlLWljb24ge1xcbiAgZm9udC1zaXplOiAxLjVlbTtcXG59XFxuLnEtdHJlZS1pbWcge1xcbiAgaGVpZ2h0OiAzZW07XFxufVxcbi5xLXRyZWUtaW1nLmF2YXRhciB7XFxuICB3aWR0aDogMmVtO1xcbiAgaGVpZ2h0OiAyZW07XFxufVxcbi5xLXRyZWUtYXJyb3cge1xcbiAgZm9udC1zaXplOiAxcmVtO1xcbiAgd2lkdGg6IDFyZW07XFxuICBoZWlnaHQ6IDFyZW07XFxufVxcbi5xLXRyZWUtYXJyb3ctcm90YXRlIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcXG59XFxuW2Rpcj1ydGxdIC5xLXRyZWUtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG5bZGlyPXJ0bF0gLnEtdHJlZS1hcnJvdy1yb3RhdGUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5xLXRyZWUgPiAucS10cmVlLW5vZGUge1xcbiAgcGFkZGluZzogMDtcXG59XFxuLnEtdHJlZSA+IC5xLXRyZWUtbm9kZTphZnRlcixcXG4ucS10cmVlID4gLnEtdHJlZS1ub2RlID4gLnEtdHJlZS1ub2RlLWhlYWRlcjpiZWZvcmUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLnEtdHJlZSA+IC5xLXRyZWUtbm9kZS1jaGlsZCA+IC5xLXRyZWUtbm9kZS1oZWFkZXIge1xcbiAgcGFkZGluZy1sZWZ0OiAyNHB4O1xcbn1cXG4ucS11cGxvYWRlci1leHBhbmRlZCAucS1pZiB7XFxuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XFxufVxcbi5xLXVwbG9hZGVyLWlucHV0IHtcXG4gIG9wYWNpdHk6IDA7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGZvbnQtc2l6ZTogMDtcXG59XFxuLnEtdXBsb2FkZXItcGljay1idXR0b25bZGlzYWJsZWRdIC5xLXVwbG9hZGVyLWlucHV0IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5xLXVwbG9hZGVyLWZpbGVzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBtYXgtaGVpZ2h0OiA1MDBweDtcXG59XFxuLnEtdXBsb2FkZXItZmlsZXMtbm8tYm9yZGVyIC5xLXVwbG9hZGVyLWZpbGVzIHtcXG4gIGJvcmRlci10b3A6IDAgIWltcG9ydGFudDtcXG59XFxuLnEtdXBsb2FkZXItZmlsZTpub3QoOmxhc3QtY2hpbGQpIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTBlMGUwO1xcbn1cXG4ucS11cGxvYWRlci1wcm9ncmVzcy1iZyxcXG4ucS11cGxvYWRlci1wcm9ncmVzcy10ZXh0IHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS11cGxvYWRlci1wcm9ncmVzcy1iZyB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBvcGFjaXR5OiAwLjI7XFxufVxcbi5xLXVwbG9hZGVyLXByb2dyZXNzLXRleHQge1xcbiAgZm9udC1zaXplOiA0MHB4O1xcbiAgb3BhY2l0eTogMC4xO1xcbiAgcmlnaHQ6IDQ0cHg7XFxuICBib3R0b206IDA7XFxufVxcbi5xLXVwbG9hZGVyLWRuZCB7XFxuICBvdXRsaW5lOiAycHggZGFzaGVkIGN1cnJlbnRDb2xvcjtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtNnB4O1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjYpO1xcbn1cXG4ucS11cGxvYWRlci1kbmQuaW52ZXJ0ZWQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjMpO1xcbn1cXG4ucS11cGxvYWRlci1kYXJrIC5xLXVwbG9hZGVyLWZpbGVzIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2E3YTdhNztcXG59XFxuLnEtdXBsb2FkZXItZGFyayAucS11cGxvYWRlci1iZyB7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuLnEtdXBsb2FkZXItZGFyayAucS11cGxvYWRlci1wcm9ncmVzcy10ZXh0IHtcXG4gIG9wYWNpdHk6IDAuMjtcXG59XFxuLnEtdXBsb2FkZXItZGFyayAucS11cGxvYWRlci1maWxlOm5vdCg6bGFzdC1jaGlsZCkge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MjQyNDI7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcS1jb2xvci1kYXJrKTtcXG59XFxuaW1nLnJlc3BvbnNpdmUge1xcbiAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG5pbWcuYXZhdGFyIHtcXG4gIHdpZHRoOiA1MHB4O1xcbiAgaGVpZ2h0OiA1MHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG4ucS12aWRlbyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcXG59XFxuLnEtdmlkZW8gaWZyYW1lLFxcbi5xLXZpZGVvIG9iamVjdCxcXG4ucS12aWRlbyBlbWJlZCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuOnJvb3Qge1xcbiAgLS1xLWNvbG9yLXByaW1hcnk6ICMwMjdiZTM7XFxuICAtLXEtY29sb3Itc2Vjb25kYXJ5OiAjMjZhNjlhO1xcbiAgLS1xLWNvbG9yLXRlcnRpYXJ5OiAjNTU1O1xcbiAgLS1xLWNvbG9yLXBvc2l0aXZlOiAjMjFiYTQ1O1xcbiAgLS1xLWNvbG9yLW5lZ2F0aXZlOiAjZGIyODI4O1xcbiAgLS1xLWNvbG9yLW5lZ2F0aXZlLWw6ICNlYzhiOGI7XFxuICAtLXEtY29sb3ItaW5mbzogIzMxY2NlYztcXG4gIC0tcS1jb2xvci13YXJuaW5nOiAjZjJjMDM3O1xcbiAgLS1xLWNvbG9yLXdhcm5pbmctbDogI2Y4ZGQ5MztcXG4gIC0tcS1jb2xvci1saWdodDogI2JkYmRiZDtcXG4gIC0tcS1jb2xvci1saWdodC1kOiAjYWFhO1xcbiAgLS1xLWNvbG9yLWZhZGVkOiAjNzc3O1xcbiAgLS1xLWNvbG9yLWRhcms6ICM0MjQyNDI7XFxufVxcbi50ZXh0LXByaW1hcnkge1xcbiAgY29sb3I6ICMwMjdiZTMgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLXByaW1hcnkpICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wcmltYXJ5IHtcXG4gIGJhY2tncm91bmQ6ICMwMjdiZTMgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItcHJpbWFyeSkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtc2Vjb25kYXJ5IHtcXG4gIGNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1zZWNvbmRhcnkpICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1zZWNvbmRhcnkge1xcbiAgYmFja2dyb3VuZDogIzI2YTY5YSAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci1zZWNvbmRhcnkpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlcnRpYXJ5IHtcXG4gIGNvbG9yOiAjNTU1ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci10ZXJ0aWFyeSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlcnRpYXJ5IHtcXG4gIGJhY2tncm91bmQ6ICM1NTUgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItdGVydGlhcnkpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWZhZGVkIHtcXG4gIGNvbG9yOiAjNzc3ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1mYWRlZCkgIWltcG9ydGFudDtcXG59XFxuLmJnLWZhZGVkIHtcXG4gIGJhY2tncm91bmQ6ICM3NzcgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItZmFkZWQpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBvc2l0aXZlIHtcXG4gIGNvbG9yOiAjMjFiYTQ1ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1wb3NpdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLmJnLXBvc2l0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICMyMWJhNDUgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItcG9zaXRpdmUpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW5lZ2F0aXZlIHtcXG4gIGNvbG9yOiAjZGIyODI4ICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1uZWdhdGl2ZSkgIWltcG9ydGFudDtcXG59XFxuLmJnLW5lZ2F0aXZlIHtcXG4gIGJhY2tncm91bmQ6ICNkYjI4MjggIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItbmVnYXRpdmUpICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZm8ge1xcbiAgY29sb3I6ICMzMWNjZWMgIWltcG9ydGFudDtcXG4gIGNvbG9yOiB2YXIoLS1xLWNvbG9yLWluZm8pICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmZvIHtcXG4gIGJhY2tncm91bmQ6ICMzMWNjZWMgIWltcG9ydGFudDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLXEtY29sb3ItaW5mbykgIWltcG9ydGFudDtcXG59XFxuLnRleHQtd2FybmluZyB7XFxuICBjb2xvcjogI2YyYzAzNyAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3Itd2FybmluZykgIWltcG9ydGFudDtcXG59XFxuLmJnLXdhcm5pbmcge1xcbiAgYmFja2dyb3VuZDogI2YyYzAzNyAhaW1wb3J0YW50O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tcS1jb2xvci13YXJuaW5nKSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC13aGl0ZSB7XFxuICBjb2xvcjogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctd2hpdGUge1xcbiAgYmFja2dyb3VuZDogI2ZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibGFjayB7XFxuICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmxhY2sge1xcbiAgYmFja2dyb3VuZDogIzAwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodCB7XFxuICBjb2xvcjogI2JkYmRiZCAhaW1wb3J0YW50O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItbGlnaHQpICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodCB7XFxuICBiYWNrZ3JvdW5kOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLWxpZ2h0KSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kYXJrIHtcXG4gIGNvbG9yOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxuICBjb2xvcjogdmFyKC0tcS1jb2xvci1kYXJrKSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGFyayB7XFxuICBiYWNrZ3JvdW5kOiAjNDI0MjQyICFpbXBvcnRhbnQ7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1xLWNvbG9yLWRhcmspICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRyYW5zcGFyZW50IHtcXG4gIGNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdHJhbnNwYXJlbnQge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkIHtcXG4gIGNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xIHtcXG4gIGNvbG9yOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0yIHtcXG4gIGNvbG9yOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0zIHtcXG4gIGNvbG9yOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC00IHtcXG4gIGNvbG9yOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC01IHtcXG4gIGNvbG9yOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC02IHtcXG4gIGNvbG9yOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC03IHtcXG4gIGNvbG9yOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC04IHtcXG4gIGNvbG9yOiAjZDMyZjJmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC05IHtcXG4gIGNvbG9yOiAjYzYyODI4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xMCB7XFxuICBjb2xvcjogI2I3MWMxYyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQtMTEge1xcbiAgY29sb3I6ICNmZjhhODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcmVkLTEyIHtcXG4gIGNvbG9yOiAjZmY1MjUyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXJlZC0xMyB7XFxuICBjb2xvcjogI2ZmMTc0NCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1yZWQtMTQge1xcbiAgY29sb3I6ICNkNTAwMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluayB7XFxuICBjb2xvcjogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEge1xcbiAgY29sb3I6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0yIHtcXG4gIGNvbG9yOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMyB7XFxuICBjb2xvcjogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTQge1xcbiAgY29sb3I6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay01IHtcXG4gIGNvbG9yOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstNiB7XFxuICBjb2xvcjogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTcge1xcbiAgY29sb3I6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay04IHtcXG4gIGNvbG9yOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstOSB7XFxuICBjb2xvcjogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEwIHtcXG4gIGNvbG9yOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTEge1xcbiAgY29sb3I6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcGluay0xMiB7XFxuICBjb2xvcjogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1waW5rLTEzIHtcXG4gIGNvbG9yOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXBpbmstMTQge1xcbiAgY29sb3I6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlIHtcXG4gIGNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xIHtcXG4gIGNvbG9yOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0yIHtcXG4gIGNvbG9yOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0zIHtcXG4gIGNvbG9yOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS00IHtcXG4gIGNvbG9yOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS01IHtcXG4gIGNvbG9yOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS02IHtcXG4gIGNvbG9yOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS03IHtcXG4gIGNvbG9yOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS04IHtcXG4gIGNvbG9yOiAjN2IxZmEyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS05IHtcXG4gIGNvbG9yOiAjNmExYjlhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xMCB7XFxuICBjb2xvcjogIzRhMTQ4YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUtMTEge1xcbiAgY29sb3I6ICNlYTgwZmMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtcHVycGxlLTEyIHtcXG4gIGNvbG9yOiAjZTA0MGZiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXB1cnBsZS0xMyB7XFxuICBjb2xvcjogI2Q1MDBmOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1wdXJwbGUtMTQge1xcbiAgY29sb3I6ICNhMGYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUge1xcbiAgY29sb3I6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMSB7XFxuICBjb2xvcjogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS0yIHtcXG4gIGNvbG9yOiAjZDFjNGU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTMge1xcbiAgY29sb3I6ICNiMzlkZGIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtNCB7XFxuICBjb2xvcjogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS01IHtcXG4gIGNvbG9yOiAjN2U1N2MyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTYge1xcbiAgY29sb3I6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtNyB7XFxuICBjb2xvcjogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLXB1cnBsZS04IHtcXG4gIGNvbG9yOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtcHVycGxlLTkge1xcbiAgY29sb3I6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTAge1xcbiAgY29sb3I6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTEge1xcbiAgY29sb3I6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTIge1xcbiAgY29sb3I6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTMge1xcbiAgY29sb3I6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1wdXJwbGUtMTQge1xcbiAgY29sb3I6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvIHtcXG4gIGNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xIHtcXG4gIGNvbG9yOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0yIHtcXG4gIGNvbG9yOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0zIHtcXG4gIGNvbG9yOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby00IHtcXG4gIGNvbG9yOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby01IHtcXG4gIGNvbG9yOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby02IHtcXG4gIGNvbG9yOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby03IHtcXG4gIGNvbG9yOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby04IHtcXG4gIGNvbG9yOiAjMzAzZjlmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby05IHtcXG4gIGNvbG9yOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xMCB7XFxuICBjb2xvcjogIzFhMjM3ZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28tMTEge1xcbiAgY29sb3I6ICM4YzllZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtaW5kaWdvLTEyIHtcXG4gIGNvbG9yOiAjNTM2ZGZlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWluZGlnby0xMyB7XFxuICBjb2xvcjogIzNkNWFmZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1pbmRpZ28tMTQge1xcbiAgY29sb3I6ICMzMDRmZmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZSB7XFxuICBjb2xvcjogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEge1xcbiAgY29sb3I6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0yIHtcXG4gIGNvbG9yOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMyB7XFxuICBjb2xvcjogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTQge1xcbiAgY29sb3I6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS01IHtcXG4gIGNvbG9yOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtNiB7XFxuICBjb2xvcjogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTcge1xcbiAgY29sb3I6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS04IHtcXG4gIGNvbG9yOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtOSB7XFxuICBjb2xvcjogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEwIHtcXG4gIGNvbG9yOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTEge1xcbiAgY29sb3I6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS0xMiB7XFxuICBjb2xvcjogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLTEzIHtcXG4gIGNvbG9yOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtMTQge1xcbiAgY29sb3I6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZSB7XFxuICBjb2xvcjogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEge1xcbiAgY29sb3I6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0yIHtcXG4gIGNvbG9yOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMyB7XFxuICBjb2xvcjogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTQge1xcbiAgY29sb3I6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS01IHtcXG4gIGNvbG9yOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtNiB7XFxuICBjb2xvcjogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTcge1xcbiAgY29sb3I6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS04IHtcXG4gIGNvbG9yOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtOSB7XFxuICBjb2xvcjogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEwIHtcXG4gIGNvbG9yOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTEge1xcbiAgY29sb3I6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtYmx1ZS0xMiB7XFxuICBjb2xvcjogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ibHVlLTEzIHtcXG4gIGNvbG9yOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWJsdWUtMTQge1xcbiAgY29sb3I6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbiB7XFxuICBjb2xvcjogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEge1xcbiAgY29sb3I6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0yIHtcXG4gIGNvbG9yOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMyB7XFxuICBjb2xvcjogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTQge1xcbiAgY29sb3I6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi01IHtcXG4gIGNvbG9yOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tNiB7XFxuICBjb2xvcjogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTcge1xcbiAgY29sb3I6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi04IHtcXG4gIGNvbG9yOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tOSB7XFxuICBjb2xvcjogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEwIHtcXG4gIGNvbG9yOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTEge1xcbiAgY29sb3I6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtY3lhbi0xMiB7XFxuICBjb2xvcjogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1jeWFuLTEzIHtcXG4gIGNvbG9yOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWN5YW4tMTQge1xcbiAgY29sb3I6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbCB7XFxuICBjb2xvcjogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEge1xcbiAgY29sb3I6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0yIHtcXG4gIGNvbG9yOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMyB7XFxuICBjb2xvcjogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTQge1xcbiAgY29sb3I6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC01IHtcXG4gIGNvbG9yOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtNiB7XFxuICBjb2xvcjogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTcge1xcbiAgY29sb3I6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC04IHtcXG4gIGNvbG9yOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtOSB7XFxuICBjb2xvcjogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEwIHtcXG4gIGNvbG9yOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTEge1xcbiAgY29sb3I6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtdGVhbC0xMiB7XFxuICBjb2xvcjogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC10ZWFsLTEzIHtcXG4gIGNvbG9yOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXRlYWwtMTQge1xcbiAgY29sb3I6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4ge1xcbiAgY29sb3I6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMSB7XFxuICBjb2xvcjogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi0yIHtcXG4gIGNvbG9yOiAjYzhlNmM5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTMge1xcbiAgY29sb3I6ICNhNWQ2YTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tNCB7XFxuICBjb2xvcjogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi01IHtcXG4gIGNvbG9yOiAjNjZiYjZhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTYge1xcbiAgY29sb3I6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tNyB7XFxuICBjb2xvcjogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmVlbi04IHtcXG4gIGNvbG9yOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZWVuLTkge1xcbiAgY29sb3I6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTAge1xcbiAgY29sb3I6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTEge1xcbiAgY29sb3I6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTIge1xcbiAgY29sb3I6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTMge1xcbiAgY29sb3I6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JlZW4tMTQge1xcbiAgY29sb3I6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4ge1xcbiAgY29sb3I6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMSB7XFxuICBjb2xvcjogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi0yIHtcXG4gIGNvbG9yOiAjZGNlZGM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTMge1xcbiAgY29sb3I6ICNjNWUxYTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tNCB7XFxuICBjb2xvcjogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi01IHtcXG4gIGNvbG9yOiAjOWNjYzY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTYge1xcbiAgY29sb3I6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tNyB7XFxuICBjb2xvcjogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saWdodC1ncmVlbi04IHtcXG4gIGNvbG9yOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpZ2h0LWdyZWVuLTkge1xcbiAgY29sb3I6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTAge1xcbiAgY29sb3I6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTEge1xcbiAgY29sb3I6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTIge1xcbiAgY29sb3I6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTMge1xcbiAgY29sb3I6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGlnaHQtZ3JlZW4tMTQge1xcbiAgY29sb3I6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZSB7XFxuICBjb2xvcjogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEge1xcbiAgY29sb3I6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0yIHtcXG4gIGNvbG9yOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMyB7XFxuICBjb2xvcjogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTQge1xcbiAgY29sb3I6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS01IHtcXG4gIGNvbG9yOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtNiB7XFxuICBjb2xvcjogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTcge1xcbiAgY29sb3I6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS04IHtcXG4gIGNvbG9yOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtOSB7XFxuICBjb2xvcjogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEwIHtcXG4gIGNvbG9yOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTEge1xcbiAgY29sb3I6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtbGltZS0xMiB7XFxuICBjb2xvcjogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1saW1lLTEzIHtcXG4gIGNvbG9yOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWxpbWUtMTQge1xcbiAgY29sb3I6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93IHtcXG4gIGNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xIHtcXG4gIGNvbG9yOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0yIHtcXG4gIGNvbG9yOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0zIHtcXG4gIGNvbG9yOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy00IHtcXG4gIGNvbG9yOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy01IHtcXG4gIGNvbG9yOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy02IHtcXG4gIGNvbG9yOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy03IHtcXG4gIGNvbG9yOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy04IHtcXG4gIGNvbG9yOiAjZmJjMDJkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy05IHtcXG4gIGNvbG9yOiAjZjlhODI1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xMCB7XFxuICBjb2xvcjogI2Y1N2YxNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3ctMTEge1xcbiAgY29sb3I6ICNmZmZmOGQgIWltcG9ydGFudDtcXG59XFxuLnRleHQteWVsbG93LTEyIHtcXG4gIGNvbG9yOiAjZmYwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LXllbGxvdy0xMyB7XFxuICBjb2xvcjogI2ZmZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC15ZWxsb3ctMTQge1xcbiAgY29sb3I6ICNmZmQ2MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXIge1xcbiAgY29sb3I6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMSB7XFxuICBjb2xvcjogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci0yIHtcXG4gIGNvbG9yOiAjZmZlY2IzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTMge1xcbiAgY29sb3I6ICNmZmUwODIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItNCB7XFxuICBjb2xvcjogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci01IHtcXG4gIGNvbG9yOiAjZmZjYTI4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTYge1xcbiAgY29sb3I6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItNyB7XFxuICBjb2xvcjogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1hbWJlci04IHtcXG4gIGNvbG9yOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWFtYmVyLTkge1xcbiAgY29sb3I6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTAge1xcbiAgY29sb3I6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTEge1xcbiAgY29sb3I6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTIge1xcbiAgY29sb3I6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTMge1xcbiAgY29sb3I6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYW1iZXItMTQge1xcbiAgY29sb3I6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlIHtcXG4gIGNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xIHtcXG4gIGNvbG9yOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0yIHtcXG4gIGNvbG9yOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0zIHtcXG4gIGNvbG9yOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS00IHtcXG4gIGNvbG9yOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS01IHtcXG4gIGNvbG9yOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS02IHtcXG4gIGNvbG9yOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS03IHtcXG4gIGNvbG9yOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS04IHtcXG4gIGNvbG9yOiAjZjU3YzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS05IHtcXG4gIGNvbG9yOiAjZWY2YzAwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xMCB7XFxuICBjb2xvcjogI2U2NTEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2UtMTEge1xcbiAgY29sb3I6ICNmZmQxODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtb3JhbmdlLTEyIHtcXG4gIGNvbG9yOiAjZmZhYjQwICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LW9yYW5nZS0xMyB7XFxuICBjb2xvcjogI2ZmOTEwMCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1vcmFuZ2UtMTQge1xcbiAgY29sb3I6ICNmZjZkMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2Uge1xcbiAgY29sb3I6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMSB7XFxuICBjb2xvcjogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS0yIHtcXG4gIGNvbG9yOiAjZmZjY2JjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTMge1xcbiAgY29sb3I6ICNmZmFiOTEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtNCB7XFxuICBjb2xvcjogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS01IHtcXG4gIGNvbG9yOiAjZmY3MDQzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTYge1xcbiAgY29sb3I6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtNyB7XFxuICBjb2xvcjogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1kZWVwLW9yYW5nZS04IHtcXG4gIGNvbG9yOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWRlZXAtb3JhbmdlLTkge1xcbiAgY29sb3I6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTAge1xcbiAgY29sb3I6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTEge1xcbiAgY29sb3I6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTIge1xcbiAgY29sb3I6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTMge1xcbiAgY29sb3I6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZGVlcC1vcmFuZ2UtMTQge1xcbiAgY29sb3I6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24ge1xcbiAgY29sb3I6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMSB7XFxuICBjb2xvcjogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi0yIHtcXG4gIGNvbG9yOiAjZDdjY2M4ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTMge1xcbiAgY29sb3I6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tNCB7XFxuICBjb2xvcjogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi01IHtcXG4gIGNvbG9yOiAjOGQ2ZTYzICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTYge1xcbiAgY29sb3I6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tNyB7XFxuICBjb2xvcjogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1icm93bi04IHtcXG4gIGNvbG9yOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJyb3duLTkge1xcbiAgY29sb3I6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTAge1xcbiAgY29sb3I6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTEge1xcbiAgY29sb3I6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTIge1xcbiAgY29sb3I6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTMge1xcbiAgY29sb3I6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYnJvd24tMTQge1xcbiAgY29sb3I6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleSB7XFxuICBjb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEge1xcbiAgY29sb3I6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0yIHtcXG4gIGNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMyB7XFxuICBjb2xvcjogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTQge1xcbiAgY29sb3I6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS01IHtcXG4gIGNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktNiB7XFxuICBjb2xvcjogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTcge1xcbiAgY29sb3I6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS04IHtcXG4gIGNvbG9yOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktOSB7XFxuICBjb2xvcjogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEwIHtcXG4gIGNvbG9yOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTEge1xcbiAgY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLnRleHQtZ3JleS0xMiB7XFxuICBjb2xvcjogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ncmV5LTEzIHtcXG4gIGNvbG9yOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWdyZXktMTQge1xcbiAgY29sb3I6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5IHtcXG4gIGNvbG9yOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xIHtcXG4gIGNvbG9yOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0yIHtcXG4gIGNvbG9yOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0zIHtcXG4gIGNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS00IHtcXG4gIGNvbG9yOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS01IHtcXG4gIGNvbG9yOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS02IHtcXG4gIGNvbG9yOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS03IHtcXG4gIGNvbG9yOiAjNTQ2ZTdhICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS04IHtcXG4gIGNvbG9yOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS05IHtcXG4gIGNvbG9yOiAjMzc0NzRmICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xMCB7XFxuICBjb2xvcjogIzI2MzIzOCAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXktMTEge1xcbiAgY29sb3I6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLnRleHQtYmx1ZS1ncmV5LTEyIHtcXG4gIGNvbG9yOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi50ZXh0LWJsdWUtZ3JleS0xMyB7XFxuICBjb2xvcjogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG4udGV4dC1ibHVlLWdyZXktMTQge1xcbiAgY29sb3I6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZCB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYmVlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjZGQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMyB7XFxuICBiYWNrZ3JvdW5kOiAjZWY5YTlhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNCB7XFxuICBiYWNrZ3JvdW5kOiAjZTU3MzczICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZWY1MzUwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNiB7XFxuICBiYWNrZ3JvdW5kOiAjZjQ0MzM2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtNyB7XFxuICBiYWNrZ3JvdW5kOiAjZTUzOTM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtOCB7XFxuICBiYWNrZ3JvdW5kOiAjZDMyZjJmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtOSB7XFxuICBiYWNrZ3JvdW5kOiAjYzYyODI4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTAge1xcbiAgYmFja2dyb3VuZDogI2I3MWMxYyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZjhhODAgIWltcG9ydGFudDtcXG59XFxuLmJnLXJlZC0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmY1MjUyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1yZWQtMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmMTc0NCAhaW1wb3J0YW50O1xcbn1cXG4uYmctcmVkLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNkNTAwMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmsge1xcbiAgYmFja2dyb3VuZDogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xIHtcXG4gIGJhY2tncm91bmQ6ICNmY2U0ZWMgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMiB7XFxuICBiYWNrZ3JvdW5kOiAjZjhiYmQwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTMge1xcbiAgYmFja2dyb3VuZDogI2Y0OGZiMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay00IHtcXG4gIGJhY2tncm91bmQ6ICNmMDYyOTIgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstNSB7XFxuICBiYWNrZ3JvdW5kOiAjZWM0MDdhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTYge1xcbiAgYmFja2dyb3VuZDogI2U5MWU2MyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay03IHtcXG4gIGJhY2tncm91bmQ6ICNkODFiNjAgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstOCB7XFxuICBiYWNrZ3JvdW5kOiAjYzIxODViICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTkge1xcbiAgYmFja2dyb3VuZDogI2FkMTQ1NyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjODgwZTRmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZjgwYWIgIWltcG9ydGFudDtcXG59XFxuLmJnLXBpbmstMTIge1xcbiAgYmFja2dyb3VuZDogI2ZmNDA4MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcGluay0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjZjUwMDU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1waW5rLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNjNTExNjIgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZSB7XFxuICBiYWNrZ3JvdW5kOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZjNlNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZTFiZWU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMyB7XFxuICBiYWNrZ3JvdW5kOiAjY2U5M2Q4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNCB7XFxuICBiYWNrZ3JvdW5kOiAjYmE2OGM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjYWI0N2JjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNiB7XFxuICBiYWNrZ3JvdW5kOiAjOWMyN2IwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtNyB7XFxuICBiYWNrZ3JvdW5kOiAjOGUyNGFhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjN2IxZmEyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtOSB7XFxuICBiYWNrZ3JvdW5kOiAjNmExYjlhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTAge1xcbiAgYmFja2dyb3VuZDogIzRhMTQ4YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNlYTgwZmMgIWltcG9ydGFudDtcXG59XFxuLmJnLXB1cnBsZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZTA0MGZiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1wdXJwbGUtMTMge1xcbiAgYmFja2dyb3VuZDogI2Q1MDBmOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctcHVycGxlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNhMGYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlIHtcXG4gIGJhY2tncm91bmQ6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEge1xcbiAgYmFja2dyb3VuZDogI2VkZTdmNiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZDFjNGU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNiMzlkZGIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTQge1xcbiAgYmFja2dyb3VuZDogIzk1NzVjZCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjN2U1N2MyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS02IHtcXG4gIGJhY2tncm91bmQ6ICM2NzNhYjcgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTcge1xcbiAgYmFja2dyb3VuZDogIzVlMzViMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1wdXJwbGUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjNTEyZGE4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLXB1cnBsZS05IHtcXG4gIGJhY2tncm91bmQ6ICM0NTI3YTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMzMTFiOTIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNiMzg4ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICM3YzRkZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICM2NTFmZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtcHVycGxlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICM2MjAwZWEgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnbyB7XFxuICBiYWNrZ3JvdW5kOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMSB7XFxuICBiYWNrZ3JvdW5kOiAjZThlYWY2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMiB7XFxuICBiYWNrZ3JvdW5kOiAjYzVjYWU5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMyB7XFxuICBiYWNrZ3JvdW5kOiAjOWZhOGRhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNCB7XFxuICBiYWNrZ3JvdW5kOiAjNzk4NmNiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNSB7XFxuICBiYWNrZ3JvdW5kOiAjNWM2YmMwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNiB7XFxuICBiYWNrZ3JvdW5kOiAjM2Y1MWI1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tNyB7XFxuICBiYWNrZ3JvdW5kOiAjMzk0OWFiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tOCB7XFxuICBiYWNrZ3JvdW5kOiAjMzAzZjlmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tOSB7XFxuICBiYWNrZ3JvdW5kOiAjMjgzNTkzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTAge1xcbiAgYmFja2dyb3VuZDogIzFhMjM3ZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4YzllZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWluZGlnby0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjNTM2ZGZlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1pbmRpZ28tMTMge1xcbiAgYmFja2dyb3VuZDogIzNkNWFmZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctaW5kaWdvLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMzMDRmZmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUge1xcbiAgYmFja2dyb3VuZDogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNlM2YyZmQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjYmJkZWZiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTMge1xcbiAgYmFja2dyb3VuZDogIzkwY2FmOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS00IHtcXG4gIGJhY2tncm91bmQ6ICM2NGI1ZjYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjNDJhNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTYge1xcbiAgYmFja2dyb3VuZDogIzIxOTZmMyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS03IHtcXG4gIGJhY2tncm91bmQ6ICMxZTg4ZTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjMTk3NmQyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTkge1xcbiAgYmFja2dyb3VuZDogIzE1NjVjMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMGQ0N2ExICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4MmIxZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtMTIge1xcbiAgYmFja2dyb3VuZDogIzQ0OGFmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMjk3OWZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMyOTYyZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUge1xcbiAgYmFja2dyb3VuZDogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNlMWY1ZmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjNlNWZjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTMge1xcbiAgYmFja2dyb3VuZDogIzgxZDRmYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS00IHtcXG4gIGJhY2tncm91bmQ6ICM0ZmMzZjcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjMjliNmY2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTYge1xcbiAgYmFja2dyb3VuZDogIzAzYTlmNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS03IHtcXG4gIGJhY2tncm91bmQ6ICMwMzliZTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjMDI4OGQxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTkge1xcbiAgYmFja2dyb3VuZDogIzAyNzdiZCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMDE1NzliICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4MGQ4ZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWJsdWUtMTIge1xcbiAgYmFja2dyb3VuZDogIzQwYzRmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtYmx1ZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMDBiMGZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ibHVlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMDkxZWEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4ge1xcbiAgYmFja2dyb3VuZDogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xIHtcXG4gIGJhY2tncm91bmQ6ICNlMGY3ZmEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjJlYmYyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTMge1xcbiAgYmFja2dyb3VuZDogIzgwZGVlYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi00IHtcXG4gIGJhY2tncm91bmQ6ICM0ZGQwZTEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tNSB7XFxuICBiYWNrZ3JvdW5kOiAjMjZjNmRhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTYge1xcbiAgYmFja2dyb3VuZDogIzAwYmNkNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi03IHtcXG4gIGJhY2tncm91bmQ6ICMwMGFjYzEgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tOCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA5N2E3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTkge1xcbiAgYmFja2dyb3VuZDogIzAwODM4ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA2MDY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTExIHtcXG4gIGJhY2tncm91bmQ6ICM4NGZmZmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWN5YW4tMTIge1xcbiAgYmFja2dyb3VuZDogIzE4ZmZmZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctY3lhbi0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMDBlNWZmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1jeWFuLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMGI4ZDQgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwge1xcbiAgYmFja2dyb3VuZDogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xIHtcXG4gIGJhY2tncm91bmQ6ICNlMGYyZjEgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjJkZmRiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTMge1xcbiAgYmFja2dyb3VuZDogIzgwY2JjNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC00IHtcXG4gIGJhY2tncm91bmQ6ICM0ZGI2YWMgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtNSB7XFxuICBiYWNrZ3JvdW5kOiAjMjZhNjlhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTYge1xcbiAgYmFja2dyb3VuZDogIzAwOTY4OCAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC03IHtcXG4gIGJhY2tncm91bmQ6ICMwMDg5N2IgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtOCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA3OTZiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTkge1xcbiAgYmFja2dyb3VuZDogIzAwNjk1YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMDA0ZDQwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTExIHtcXG4gIGJhY2tncm91bmQ6ICNhN2ZmZWIgIWltcG9ydGFudDtcXG59XFxuLmJnLXRlYWwtMTIge1xcbiAgYmFja2dyb3VuZDogIzY0ZmZkYSAhaW1wb3J0YW50O1xcbn1cXG4uYmctdGVhbC0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjMWRlOWI2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy10ZWFsLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMGJmYTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuIHtcXG4gIGJhY2tncm91bmQ6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEge1xcbiAgYmFja2dyb3VuZDogI2U4ZjVlOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tMiB7XFxuICBiYWNrZ3JvdW5kOiAjYzhlNmM5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi0zIHtcXG4gIGJhY2tncm91bmQ6ICNhNWQ2YTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTQge1xcbiAgYmFja2dyb3VuZDogIzgxYzc4NCAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tNSB7XFxuICBiYWNrZ3JvdW5kOiAjNjZiYjZhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi02IHtcXG4gIGJhY2tncm91bmQ6ICM0Y2FmNTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTcge1xcbiAgYmFja2dyb3VuZDogIzQzYTA0NyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JlZW4tOCB7XFxuICBiYWNrZ3JvdW5kOiAjMzg4ZTNjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmVlbi05IHtcXG4gIGJhY2tncm91bmQ6ICMyZTdkMzIgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMxYjVlMjAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTExIHtcXG4gIGJhY2tncm91bmQ6ICNiOWY2Y2EgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEyIHtcXG4gIGJhY2tncm91bmQ6ICM2OWYwYWUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTEzIHtcXG4gIGJhY2tncm91bmQ6ICMwMGU2NzYgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZWVuLTE0IHtcXG4gIGJhY2tncm91bmQ6ICMwMGM4NTMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuIHtcXG4gIGJhY2tncm91bmQ6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEge1xcbiAgYmFja2dyb3VuZDogI2YxZjhlOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tMiB7XFxuICBiYWNrZ3JvdW5kOiAjZGNlZGM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi0zIHtcXG4gIGJhY2tncm91bmQ6ICNjNWUxYTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTQge1xcbiAgYmFja2dyb3VuZDogI2FlZDU4MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tNSB7XFxuICBiYWNrZ3JvdW5kOiAjOWNjYzY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi02IHtcXG4gIGJhY2tncm91bmQ6ICM4YmMzNGEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTcge1xcbiAgYmFja2dyb3VuZDogIzdjYjM0MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGlnaHQtZ3JlZW4tOCB7XFxuICBiYWNrZ3JvdW5kOiAjNjg5ZjM4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saWdodC1ncmVlbi05IHtcXG4gIGJhY2tncm91bmQ6ICM1NThiMmYgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMzMzY5MWUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTExIHtcXG4gIGJhY2tncm91bmQ6ICNjY2ZmOTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNiMmZmNTkgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTEzIHtcXG4gIGJhY2tncm91bmQ6ICM3NmZmMDMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpZ2h0LWdyZWVuLTE0IHtcXG4gIGJhY2tncm91bmQ6ICM2NGRkMTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUge1xcbiAgYmFja2dyb3VuZDogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmOWZiZTcgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZjBmNGMzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTMge1xcbiAgYmFja2dyb3VuZDogI2U2ZWU5YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS00IHtcXG4gIGJhY2tncm91bmQ6ICNkY2U3NzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZDRlMTU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTYge1xcbiAgYmFja2dyb3VuZDogI2NkZGMzOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS03IHtcXG4gIGJhY2tncm91bmQ6ICNjMGNhMzMgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtOCB7XFxuICBiYWNrZ3JvdW5kOiAjYWZiNDJiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTkge1xcbiAgYmFja2dyb3VuZDogIzllOWQyNCAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjODI3NzE3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmNGZmODEgIWltcG9ydGFudDtcXG59XFxuLmJnLWxpbWUtMTIge1xcbiAgYmFja2dyb3VuZDogI2VlZmY0MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctbGltZS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjYzZmZjAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1saW1lLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNhZWVhMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmZGU3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmOWM0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmNTlkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmMTc2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlZTU4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlYjNiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctNyB7XFxuICBiYWNrZ3JvdW5kOiAjZmRkODM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctOCB7XFxuICBiYWNrZ3JvdW5kOiAjZmJjMDJkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctOSB7XFxuICBiYWNrZ3JvdW5kOiAjZjlhODI1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTAge1xcbiAgYmFja2dyb3VuZDogI2Y1N2YxNyAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93LTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZmZmOGQgIWltcG9ydGFudDtcXG59XFxuLmJnLXllbGxvdy0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmYwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy15ZWxsb3ctMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmZWEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmcteWVsbG93LTE0IHtcXG4gIGJhY2tncm91bmQ6ICNmZmQ2MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyIHtcXG4gIGJhY2tncm91bmQ6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEge1xcbiAgYmFja2dyb3VuZDogI2ZmZjhlMSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlY2IzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmUwODIgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTQge1xcbiAgYmFja2dyb3VuZDogI2ZmZDU0ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjYTI4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci02IHtcXG4gIGJhY2tncm91bmQ6ICNmZmMxMDcgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTcge1xcbiAgYmFja2dyb3VuZDogI2ZmYjMwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYW1iZXItOCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZhMDAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1hbWJlci05IHtcXG4gIGJhY2tncm91bmQ6ICNmZjhmMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEwIHtcXG4gIGJhY2tncm91bmQ6ICNmZjZmMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZmU1N2YgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZmQ3NDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNmZmM0MDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWFtYmVyLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNmZmFiMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZSB7XFxuICBiYWNrZ3JvdW5kOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZmM2UwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZlMGIyICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMyB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjYzgwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNCB7XFxuICBiYWNrZ3JvdW5kOiAjZmZiNzRkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmZhNzI2ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNiB7XFxuICBiYWNrZ3JvdW5kOiAjZmY5ODAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtNyB7XFxuICBiYWNrZ3JvdW5kOiAjZmI4YzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtOCB7XFxuICBiYWNrZ3JvdW5kOiAjZjU3YzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtOSB7XFxuICBiYWNrZ3JvdW5kOiAjZWY2YzAwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTAge1xcbiAgYmFja2dyb3VuZDogI2U2NTEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZmQxODAgIWltcG9ydGFudDtcXG59XFxuLmJnLW9yYW5nZS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZhYjQwICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1vcmFuZ2UtMTMge1xcbiAgYmFja2dyb3VuZDogI2ZmOTEwMCAhaW1wb3J0YW50O1xcbn1cXG4uYmctb3JhbmdlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNmZjZkMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlIHtcXG4gIGJhY2tncm91bmQ6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEge1xcbiAgYmFja2dyb3VuZDogI2ZiZTllNyAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtMiB7XFxuICBiYWNrZ3JvdW5kOiAjZmZjY2JjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS0zIHtcXG4gIGJhY2tncm91bmQ6ICNmZmFiOTEgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTQge1xcbiAgYmFja2dyb3VuZDogI2ZmOGE2NSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtNSB7XFxuICBiYWNrZ3JvdW5kOiAjZmY3MDQzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS02IHtcXG4gIGJhY2tncm91bmQ6ICNmZjU3MjIgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTcge1xcbiAgYmFja2dyb3VuZDogI2Y0NTExZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZGVlcC1vcmFuZ2UtOCB7XFxuICBiYWNrZ3JvdW5kOiAjZTY0YTE5ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1kZWVwLW9yYW5nZS05IHtcXG4gIGJhY2tncm91bmQ6ICNkODQzMTUgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEwIHtcXG4gIGJhY2tncm91bmQ6ICNiZjM2MGMgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTExIHtcXG4gIGJhY2tncm91bmQ6ICNmZjllODAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNmZjZlNDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTEzIHtcXG4gIGJhY2tncm91bmQ6ICNmZjNkMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWRlZXAtb3JhbmdlLTE0IHtcXG4gIGJhY2tncm91bmQ6ICNkZDJjMDAgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duIHtcXG4gIGJhY2tncm91bmQ6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEge1xcbiAgYmFja2dyb3VuZDogI2VmZWJlOSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tMiB7XFxuICBiYWNrZ3JvdW5kOiAjZDdjY2M4ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi0zIHtcXG4gIGJhY2tncm91bmQ6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTQge1xcbiAgYmFja2dyb3VuZDogI2ExODg3ZiAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tNSB7XFxuICBiYWNrZ3JvdW5kOiAjOGQ2ZTYzICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi02IHtcXG4gIGJhY2tncm91bmQ6ICM3OTU1NDggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTcge1xcbiAgYmFja2dyb3VuZDogIzZkNGM0MSAhaW1wb3J0YW50O1xcbn1cXG4uYmctYnJvd24tOCB7XFxuICBiYWNrZ3JvdW5kOiAjNWQ0MDM3ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1icm93bi05IHtcXG4gIGJhY2tncm91bmQ6ICM0ZTM0MmUgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEwIHtcXG4gIGJhY2tncm91bmQ6ICMzZTI3MjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTExIHtcXG4gIGJhY2tncm91bmQ6ICNkN2NjYzggIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEyIHtcXG4gIGJhY2tncm91bmQ6ICNiY2FhYTQgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTEzIHtcXG4gIGJhY2tncm91bmQ6ICM4ZDZlNjMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJyb3duLTE0IHtcXG4gIGJhY2tncm91bmQ6ICM1ZDQwMzcgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXkge1xcbiAgYmFja2dyb3VuZDogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xIHtcXG4gIGJhY2tncm91bmQ6ICNmYWZhZmEgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMiB7XFxuICBiYWNrZ3JvdW5kOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTMge1xcbiAgYmFja2dyb3VuZDogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS00IHtcXG4gIGJhY2tncm91bmQ6ICNlMGUwZTAgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktNSB7XFxuICBiYWNrZ3JvdW5kOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTYge1xcbiAgYmFja2dyb3VuZDogIzllOWU5ZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS03IHtcXG4gIGJhY2tncm91bmQ6ICM3NTc1NzUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktOCB7XFxuICBiYWNrZ3JvdW5kOiAjNjE2MTYxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTkge1xcbiAgYmFja2dyb3VuZDogIzQyNDI0MiAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xMCB7XFxuICBiYWNrZ3JvdW5kOiAjMjEyMTIxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTExIHtcXG4gIGJhY2tncm91bmQ6ICNmNWY1ZjUgIWltcG9ydGFudDtcXG59XFxuLmJnLWdyZXktMTIge1xcbiAgYmFja2dyb3VuZDogI2VlZSAhaW1wb3J0YW50O1xcbn1cXG4uYmctZ3JleS0xMyB7XFxuICBiYWNrZ3JvdW5kOiAjYmRiZGJkICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ncmV5LTE0IHtcXG4gIGJhY2tncm91bmQ6ICM2MTYxNjEgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleSB7XFxuICBiYWNrZ3JvdW5kOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMSB7XFxuICBiYWNrZ3JvdW5kOiAjZWNlZmYxICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMiB7XFxuICBiYWNrZ3JvdW5kOiAjY2ZkOGRjICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMyB7XFxuICBiYWNrZ3JvdW5kOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNCB7XFxuICBiYWNrZ3JvdW5kOiAjOTBhNGFlICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNSB7XFxuICBiYWNrZ3JvdW5kOiAjNzg5MDljICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNiB7XFxuICBiYWNrZ3JvdW5kOiAjNjA3ZDhiICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktNyB7XFxuICBiYWNrZ3JvdW5kOiAjNTQ2ZTdhICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktOCB7XFxuICBiYWNrZ3JvdW5kOiAjNDU1YTY0ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktOSB7XFxuICBiYWNrZ3JvdW5kOiAjMzc0NzRmICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTAge1xcbiAgYmFja2dyb3VuZDogIzI2MzIzOCAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5LTExIHtcXG4gIGJhY2tncm91bmQ6ICNjZmQ4ZGMgIWltcG9ydGFudDtcXG59XFxuLmJnLWJsdWUtZ3JleS0xMiB7XFxuICBiYWNrZ3JvdW5kOiAjYjBiZWM1ICFpbXBvcnRhbnQ7XFxufVxcbi5iZy1ibHVlLWdyZXktMTMge1xcbiAgYmFja2dyb3VuZDogIzc4OTA5YyAhaW1wb3J0YW50O1xcbn1cXG4uYmctYmx1ZS1ncmV5LTE0IHtcXG4gIGJhY2tncm91bmQ6ICM0NTVhNjQgIWltcG9ydGFudDtcXG59XFxuLnNoYWRvdy10cmFuc2l0aW9uIHtcXG4gIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4yOHMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSAhaW1wb3J0YW50O1xcbn1cXG4uc2hhZG93LTEge1xcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDFweCAtMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMSB7XFxuICBib3gtc2hhZG93OiAwIC0xcHggM3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMXB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0ycHggMXB4IC0xcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yIHtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDNweCAxcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIge1xcbiAgYm94LXNoYWRvdzogMCAtMXB4IDVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDFweCAtMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMyB7XFxuICBib3gtc2hhZG93OiAwIDFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIDNweCA0cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAzcHggM3B4IC0ycHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0zIHtcXG4gIGJveC1zaGFkb3c6IDAgLTFweCA4cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0zcHggNHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTNweCAzcHggLTJweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTQge1xcbiAgYm94LXNoYWRvdzogMCAycHggNHB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIDRweCA1cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTQge1xcbiAgYm94LXNoYWRvdzogMCAtMnB4IDRweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtNHB4IDVweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTUge1xcbiAgYm94LXNoYWRvdzogMCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIDVweCA4cHggcmdiYSgwLDAsMCwwLjE0KSwgMCAxcHggMTRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTUge1xcbiAgYm94LXNoYWRvdzogMCAtM3B4IDVweCAtMXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtNXB4IDhweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC0xcHggMTRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTYge1xcbiAgYm94LXNoYWRvdzogMCAzcHggNXB4IC0xcHggcmdiYSgwLDAsMCwwLjIpLCAwIDZweCAxMHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMXB4IDE4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC02IHtcXG4gIGJveC1zaGFkb3c6IDAgLTNweCA1cHggLTFweCByZ2JhKDAsMCwwLDAuMiksIDAgLTZweCAxMHB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTFweCAxOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctNyB7XFxuICBib3gtc2hhZG93OiAwIDRweCA1cHggLTJweCByZ2JhKDAsMCwwLDAuMiksIDAgN3B4IDEwcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtNyB7XFxuICBib3gtc2hhZG93OiAwIC00cHggNXB4IC0ycHggcmdiYSgwLDAsMCwwLjIpLCAwIC03cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtMnB4IDE2cHggMXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctOCB7XFxuICBib3gtc2hhZG93OiAwIDVweCA1cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgOHB4IDEwcHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtOCB7XFxuICBib3gtc2hhZG93OiAwIC01cHggNXB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIC04cHggMTBweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDE0cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctOSB7XFxuICBib3gtc2hhZG93OiAwIDVweCA2cHggLTNweCByZ2JhKDAsMCwwLDAuMiksIDAgOXB4IDEycHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgM3B4IDE2cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtOSB7XFxuICBib3gtc2hhZG93OiAwIC01cHggNnB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIC05cHggMTJweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtM3B4IDE2cHggMnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTAge1xcbiAgYm94LXNoYWRvdzogMCA2cHggNnB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIDEwcHggMTRweCAxcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA0cHggMThweCAzcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xMCB7XFxuICBib3gtc2hhZG93OiAwIC02cHggNnB4IC0zcHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xMHB4IDE0cHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTRweCAxOHB4IDNweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTExIHtcXG4gIGJveC1zaGFkb3c6IDAgNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxMXB4IDE1cHggMXB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNHB4IDIwcHggM3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTEge1xcbiAgYm94LXNoYWRvdzogMCAtNnB4IDdweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTFweCAxNXB4IDFweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC00cHggMjBweCAzcHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xMiB7XFxuICBib3gtc2hhZG93OiAwIDdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgMTJweCAxN3B4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDVweCAyMnB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTEyIHtcXG4gIGJveC1zaGFkb3c6IDAgLTdweCA4cHggLTRweCByZ2JhKDAsMCwwLDAuMiksIDAgLTEycHggMTdweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNXB4IDIycHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTMge1xcbiAgYm94LXNoYWRvdzogMCA3cHggOHB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIDEzcHggMTlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCA1cHggMjRweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0xMyB7XFxuICBib3gtc2hhZG93OiAwIC03cHggOHB4IC00cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0xM3B4IDE5cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTVweCAyNHB4IDRweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTE0IHtcXG4gIGJveC1zaGFkb3c6IDAgN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxNHB4IDIxcHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNXB4IDI2cHggNHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTQge1xcbiAgYm94LXNoYWRvdzogMCAtN3B4IDlweCAtNHB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMTRweCAyMXB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC01cHggMjZweCA0cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0xNSB7XFxuICBib3gtc2hhZG93OiAwIDhweCA5cHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgMTVweCAyMnB4IDJweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDZweCAyOHB4IDVweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTE1IHtcXG4gIGJveC1zaGFkb3c6IDAgLThweCA5cHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE1cHggMjJweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNnB4IDI4cHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTYge1xcbiAgYm94LXNoYWRvdzogMCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTYge1xcbiAgYm94LXNoYWRvdzogMCAtOHB4IDEwcHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE2cHggMjRweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNnB4IDMwcHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTcge1xcbiAgYm94LXNoYWRvdzogMCA4cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxN3B4IDI2cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgNnB4IDMycHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTcge1xcbiAgYm94LXNoYWRvdzogMCAtOHB4IDExcHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE3cHggMjZweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtNnB4IDMycHggNXB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTgge1xcbiAgYm94LXNoYWRvdzogMCA5cHggMTFweCAtNXB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxOHB4IDI4cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgN3B4IDM0cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTgge1xcbiAgYm94LXNoYWRvdzogMCAtOXB4IDExcHggLTVweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE4cHggMjhweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtN3B4IDM0cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMTkge1xcbiAgYm94LXNoYWRvdzogMCA5cHggMTJweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAxOXB4IDI5cHggMnB4IHJnYmEoMCwwLDAsMC4xNCksIDAgN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMTkge1xcbiAgYm94LXNoYWRvdzogMCAtOXB4IDEycHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgLTE5cHggMjlweCAycHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtN3B4IDM2cHggNnB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMjAge1xcbiAgYm94LXNoYWRvdzogMCAxMHB4IDEzcHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDhweCAzOHB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIwIHtcXG4gIGJveC1zaGFkb3c6IDAgLTEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMjBweCAzMXB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC04cHggMzhweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yMSB7XFxuICBib3gtc2hhZG93OiAwIDEwcHggMTNweCAtNnB4IHJnYmEoMCwwLDAsMC4yKSwgMCAyMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOHB4IDQwcHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjEge1xcbiAgYm94LXNoYWRvdzogMCAtMTBweCAxM3B4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yMXB4IDMzcHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLThweCA0MHB4IDdweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LTIyIHtcXG4gIGJveC1zaGFkb3c6IDAgMTBweCAxNHB4IC02cHggcmdiYSgwLDAsMCwwLjIpLCAwIDIycHggMzVweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCA4cHggNDJweCA3cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy11cC0yMiB7XFxuICBib3gtc2hhZG93OiAwIC0xMHB4IDE0cHggLTZweCByZ2JhKDAsMCwwLDAuMiksIDAgLTIycHggMzVweCAzcHggcmdiYSgwLDAsMCwwLjE0KSwgMCAtOHB4IDQycHggN3B4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctMjMge1xcbiAgYm94LXNoYWRvdzogMCAxMXB4IDE0cHggLTdweCByZ2JhKDAsMCwwLDAuMiksIDAgMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIDlweCA0NHB4IDhweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4uc2hhZG93LXVwLTIzIHtcXG4gIGJveC1zaGFkb3c6IDAgLTExcHggMTRweCAtN3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAtMjNweCAzNnB4IDNweCByZ2JhKDAsMCwwLDAuMTQpLCAwIC05cHggNDRweCA4cHggcmdiYSgwLDAsMCwwLjEyKTtcXG59XFxuLnNoYWRvdy0yNCB7XFxuICBib3gtc2hhZG93OiAwIDExcHggMTVweCAtN3B4IHJnYmEoMCwwLDAsMC4yKSwgMCAyNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwwLDAsMC4xMik7XFxufVxcbi5zaGFkb3ctdXAtMjQge1xcbiAgYm94LXNoYWRvdzogMCAtMTFweCAxNXB4IC03cHggcmdiYSgwLDAsMCwwLjIpLCAwIC0yNHB4IDM4cHggM3B4IHJnYmEoMCwwLDAsMC4xNCksIDAgLTlweCA0NnB4IDhweCByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG4ubm8tc2hhZG93LFxcbi5zaGFkb3ctMCB7XFxuICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5pbnNldC1zaGFkb3cge1xcbiAgYm94LXNoYWRvdzogMCA3cHggOXB4IC03cHggcmdiYSgwLDAsMCwwLjcpIGluc2V0ICFpbXBvcnRhbnQ7XFxufVxcbi56LW1hcmdpbmFscyB7XFxuICB6LWluZGV4OiAyMDAwO1xcbn1cXG4uei1ub3RpZnkge1xcbiAgei1pbmRleDogOTUwMDtcXG59XFxuLnotZnVsbHNjcmVlbiB7XFxuICB6LWluZGV4OiA2MDAwO1xcbn1cXG4uei1pbmhlcml0IHtcXG4gIHotaW5kZXg6IGluaGVyaXQgIWltcG9ydGFudDtcXG59XFxuLnJvdyxcXG4uY29sdW1uLFxcbi5mbGV4IHtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG4ucm93LmlubGluZSxcXG4uY29sdW1uLmlubGluZSxcXG4uZmxleC5pbmxpbmUge1xcbiAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcbi5yb3cucmV2ZXJzZSB7XFxuICAtbXMtZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG4uY29sdW1uIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLmNvbHVtbi5yZXZlcnNlIHtcXG4gIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxufVxcbi53cmFwIHtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG4ubm8td3JhcCB7XFxuICAtbXMtZmxleC13cmFwOiBub3dyYXA7XFxuICAgICAgZmxleC13cmFwOiBub3dyYXA7XFxufVxcbi5yZXZlcnNlLXdyYXAge1xcbiAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xcbiAgICAgIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xcbn1cXG4ub3JkZXItZmlyc3Qge1xcbiAgLW1zLWZsZXgtb3JkZXI6IC0xMDAwMDtcXG4gICAgICBvcmRlcjogLTEwMDAwO1xcbn1cXG4ub3JkZXItbGFzdCB7XFxuICAtbXMtZmxleC1vcmRlcjogMTAwMDA7XFxuICAgICAgb3JkZXI6IDEwMDAwO1xcbn1cXG4ub3JkZXItbm9uZSB7XFxuICAtbXMtZmxleC1vcmRlcjogMDtcXG4gICAgICBvcmRlcjogMDtcXG59XFxuLmp1c3RpZnktc3RhcnQge1xcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG4uanVzdGlmeS1lbmQge1xcbiAgLW1zLWZsZXgtcGFjazogZW5kO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcbi5qdXN0aWZ5LWNlbnRlcixcXG4uZmxleC1jZW50ZXIge1xcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG4uanVzdGlmeS1iZXR3ZWVuIHtcXG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uanVzdGlmeS1hcm91bmQge1xcbiAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuLml0ZW1zLXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuLml0ZW1zLWVuZCB7XFxuICAtbXMtZmxleC1hbGlnbjogZW5kO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG59XFxuLml0ZW1zLWNlbnRlcixcXG4uZmxleC1jZW50ZXIge1xcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG4uaXRlbXMtYmFzZWxpbmUge1xcbiAgLW1zLWZsZXgtYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcXG59XFxuLml0ZW1zLXN0cmV0Y2gge1xcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XFxuICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcbi5jb250ZW50LXN0YXJ0IHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RhcnQ7XFxuICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcXG59XFxuLmNvbnRlbnQtZW5kIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogZW5kO1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG4uY29udGVudC1jZW50ZXIge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7XFxuICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xcbn1cXG4uY29udGVudC1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazogc3RyZXRjaDtcXG4gICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xcbn1cXG4uY29udGVudC1iZXR3ZWVuIHtcXG4gIC1tcy1mbGV4LWxpbmUtcGFjazoganVzdGlmeTtcXG4gICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG4uY29udGVudC1hcm91bmQge1xcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBkaXN0cmlidXRlO1xcbiAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuLnNlbGYtc3RhcnQge1xcbiAgLW1zLWZsZXgtaXRlbS1hbGlnbjogc3RhcnQ7XFxuICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG59XFxuLnNlbGYtZW5kIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGVuZDtcXG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcXG59XFxuLnNlbGYtY2VudGVyIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcXG4gICAgICAtbXMtZ3JpZC1yb3ctYWxpZ246IGNlbnRlcjtcXG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi5zZWxmLWJhc2VsaW5lIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGJhc2VsaW5lO1xcbiAgICAgIGFsaWduLXNlbGY6IGJhc2VsaW5lO1xcbn1cXG4uc2VsZi1zdHJldGNoIHtcXG4gIC1tcy1mbGV4LWl0ZW0tYWxpZ246IHN0cmV0Y2g7XFxuICAgICAgLW1zLWdyaWQtcm93LWFsaWduOiBzdHJldGNoO1xcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxufVxcbi5ndXR0ZXIteC1ub25lLFxcbi5ndXR0ZXItbm9uZSB7XFxuICBtYXJnaW4tbGVmdDogMDtcXG59XFxuLmd1dHRlci14LW5vbmUgPiBkaXYsXFxuLmd1dHRlci1ub25lID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLmd1dHRlci15LW5vbmUsXFxuLmd1dHRlci1ub25lIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcbi5ndXR0ZXIteS1ub25lID4gZGl2LFxcbi5ndXR0ZXItbm9uZSA+IGRpdiB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLmd1dHRlci14LXhzLFxcbi5ndXR0ZXIteHMge1xcbiAgbWFyZ2luLWxlZnQ6IC04cHg7XFxufVxcbi5ndXR0ZXIteC14cyA+IGRpdixcXG4uZ3V0dGVyLXhzID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4uZ3V0dGVyLXkteHMsXFxuLmd1dHRlci14cyB7XFxuICBtYXJnaW4tdG9wOiAtOHB4O1xcbn1cXG4uZ3V0dGVyLXkteHMgPiBkaXYsXFxuLmd1dHRlci14cyA+IGRpdiB7XFxuICBwYWRkaW5nLXRvcDogOHB4O1xcbn1cXG4uZ3V0dGVyLXgtc20sXFxuLmd1dHRlci1zbSB7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxufVxcbi5ndXR0ZXIteC1zbSA+IGRpdixcXG4uZ3V0dGVyLXNtID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogMTZweDtcXG59XFxuLmd1dHRlci15LXNtLFxcbi5ndXR0ZXItc20ge1xcbiAgbWFyZ2luLXRvcDogLTE2cHg7XFxufVxcbi5ndXR0ZXIteS1zbSA+IGRpdixcXG4uZ3V0dGVyLXNtID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiAxNnB4O1xcbn1cXG4uZ3V0dGVyLXgtbWQsXFxuLmd1dHRlci1tZCB7XFxuICBtYXJnaW4tbGVmdDogLTMycHg7XFxufVxcbi5ndXR0ZXIteC1tZCA+IGRpdixcXG4uZ3V0dGVyLW1kID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogMzJweDtcXG59XFxuLmd1dHRlci15LW1kLFxcbi5ndXR0ZXItbWQge1xcbiAgbWFyZ2luLXRvcDogLTMycHg7XFxufVxcbi5ndXR0ZXIteS1tZCA+IGRpdixcXG4uZ3V0dGVyLW1kID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiAzMnB4O1xcbn1cXG4uZ3V0dGVyLXgtbGcsXFxuLmd1dHRlci1sZyB7XFxuICBtYXJnaW4tbGVmdDogLTQ4cHg7XFxufVxcbi5ndXR0ZXIteC1sZyA+IGRpdixcXG4uZ3V0dGVyLWxnID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogNDhweDtcXG59XFxuLmd1dHRlci15LWxnLFxcbi5ndXR0ZXItbGcge1xcbiAgbWFyZ2luLXRvcDogLTQ4cHg7XFxufVxcbi5ndXR0ZXIteS1sZyA+IGRpdixcXG4uZ3V0dGVyLWxnID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiA0OHB4O1xcbn1cXG4uZ3V0dGVyLXgteGwsXFxuLmd1dHRlci14bCB7XFxuICBtYXJnaW4tbGVmdDogLTY0cHg7XFxufVxcbi5ndXR0ZXIteC14bCA+IGRpdixcXG4uZ3V0dGVyLXhsID4gZGl2IHtcXG4gIHBhZGRpbmctbGVmdDogNjRweDtcXG59XFxuLmd1dHRlci15LXhsLFxcbi5ndXR0ZXIteGwge1xcbiAgbWFyZ2luLXRvcDogLTY0cHg7XFxufVxcbi5ndXR0ZXIteS14bCA+IGRpdixcXG4uZ3V0dGVyLXhsID4gZGl2IHtcXG4gIHBhZGRpbmctdG9wOiA2NHB4O1xcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMCkge1xcbiAgLnJvdyA+IC5jb2wsXFxuICAucm93ID4gLmNvbC14cyxcXG4gIC5yb3cgPiAuY29sLWF1dG8sXFxuICAucm93ID4gLmNvbC14cy1hdXRvLFxcbiAgLnJvdyA+IC5jb2wtZ3JvdyxcXG4gIC5yb3cgPiAuY29sLXhzLWdyb3csXFxuICAucm93ID4gLmNvbC0wLFxcbiAgLnJvdyA+IC5jb2wteHMtMCxcXG4gIC5yb3cgPiAuY29sLTEsXFxuICAucm93ID4gLmNvbC14cy0xLFxcbiAgLnJvdyA+IC5jb2wtMixcXG4gIC5yb3cgPiAuY29sLXhzLTIsXFxuICAucm93ID4gLmNvbC0zLFxcbiAgLnJvdyA+IC5jb2wteHMtMyxcXG4gIC5yb3cgPiAuY29sLTQsXFxuICAucm93ID4gLmNvbC14cy00LFxcbiAgLnJvdyA+IC5jb2wtNSxcXG4gIC5yb3cgPiAuY29sLXhzLTUsXFxuICAucm93ID4gLmNvbC02LFxcbiAgLnJvdyA+IC5jb2wteHMtNixcXG4gIC5yb3cgPiAuY29sLTcsXFxuICAucm93ID4gLmNvbC14cy03LFxcbiAgLnJvdyA+IC5jb2wtOCxcXG4gIC5yb3cgPiAuY29sLXhzLTgsXFxuICAucm93ID4gLmNvbC05LFxcbiAgLnJvdyA+IC5jb2wteHMtOSxcXG4gIC5yb3cgPiAuY29sLTEwLFxcbiAgLnJvdyA+IC5jb2wteHMtMTAsXFxuICAucm93ID4gLmNvbC0xMSxcXG4gIC5yb3cgPiAuY29sLXhzLTExLFxcbiAgLnJvdyA+IC5jb2wtMTIsXFxuICAucm93ID4gLmNvbC14cy0xMixcXG4gIC5mbGV4ID4gLmNvbCxcXG4gIC5mbGV4ID4gLmNvbC14cyxcXG4gIC5mbGV4ID4gLmNvbC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXhzLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14cy1ncm93LFxcbiAgLmZsZXggPiAuY29sLTAsXFxuICAuZmxleCA+IC5jb2wteHMtMCxcXG4gIC5mbGV4ID4gLmNvbC0xLFxcbiAgLmZsZXggPiAuY29sLXhzLTEsXFxuICAuZmxleCA+IC5jb2wtMixcXG4gIC5mbGV4ID4gLmNvbC14cy0yLFxcbiAgLmZsZXggPiAuY29sLTMsXFxuICAuZmxleCA+IC5jb2wteHMtMyxcXG4gIC5mbGV4ID4gLmNvbC00LFxcbiAgLmZsZXggPiAuY29sLXhzLTQsXFxuICAuZmxleCA+IC5jb2wtNSxcXG4gIC5mbGV4ID4gLmNvbC14cy01LFxcbiAgLmZsZXggPiAuY29sLTYsXFxuICAuZmxleCA+IC5jb2wteHMtNixcXG4gIC5mbGV4ID4gLmNvbC03LFxcbiAgLmZsZXggPiAuY29sLXhzLTcsXFxuICAuZmxleCA+IC5jb2wtOCxcXG4gIC5mbGV4ID4gLmNvbC14cy04LFxcbiAgLmZsZXggPiAuY29sLTksXFxuICAuZmxleCA+IC5jb2wteHMtOSxcXG4gIC5mbGV4ID4gLmNvbC0xMCxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMCxcXG4gIC5mbGV4ID4gLmNvbC0xMSxcXG4gIC5mbGV4ID4gLmNvbC14cy0xMSxcXG4gIC5mbGV4ID4gLmNvbC0xMixcXG4gIC5mbGV4ID4gLmNvbC14cy0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMsXFxuICAuY29sdW1uID4gLmNvbC1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC14cy1ncm93LFxcbiAgLmNvbHVtbiA+IC5jb2wtMCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTAsXFxuICAuY29sdW1uID4gLmNvbC0xLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMSxcXG4gIC5jb2x1bW4gPiAuY29sLTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0yLFxcbiAgLmNvbHVtbiA+IC5jb2wtMyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTMsXFxuICAuY29sdW1uID4gLmNvbC00LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNCxcXG4gIC5jb2x1bW4gPiAuY29sLTUsXFxuICAuY29sdW1uID4gLmNvbC14cy01LFxcbiAgLmNvbHVtbiA+IC5jb2wtNixcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTYsXFxuICAuY29sdW1uID4gLmNvbC03LFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtNyxcXG4gIC5jb2x1bW4gPiAuY29sLTgsXFxuICAuY29sdW1uID4gLmNvbC14cy04LFxcbiAgLmNvbHVtbiA+IC5jb2wtOSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTksXFxuICAuY29sdW1uID4gLmNvbC0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wtMTEsXFxuICAuY29sdW1uID4gLmNvbC14cy0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLTEyLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTIsXFxuICAuZmxleCA+IC5jb2wsXFxuICAuZmxleCA+IC5jb2wteHMsXFxuICAuZmxleCA+IC5jb2wtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC14cy1hdXRvLFxcbiAgLmZsZXggPiAuY29sLWdyb3csXFxuICAuZmxleCA+IC5jb2wteHMtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC0wLFxcbiAgLmZsZXggPiAuY29sLXhzLTAsXFxuICAuZmxleCA+IC5jb2wtMSxcXG4gIC5mbGV4ID4gLmNvbC14cy0xLFxcbiAgLmZsZXggPiAuY29sLTIsXFxuICAuZmxleCA+IC5jb2wteHMtMixcXG4gIC5mbGV4ID4gLmNvbC0zLFxcbiAgLmZsZXggPiAuY29sLXhzLTMsXFxuICAuZmxleCA+IC5jb2wtNCxcXG4gIC5mbGV4ID4gLmNvbC14cy00LFxcbiAgLmZsZXggPiAuY29sLTUsXFxuICAuZmxleCA+IC5jb2wteHMtNSxcXG4gIC5mbGV4ID4gLmNvbC02LFxcbiAgLmZsZXggPiAuY29sLXhzLTYsXFxuICAuZmxleCA+IC5jb2wtNyxcXG4gIC5mbGV4ID4gLmNvbC14cy03LFxcbiAgLmZsZXggPiAuY29sLTgsXFxuICAuZmxleCA+IC5jb2wteHMtOCxcXG4gIC5mbGV4ID4gLmNvbC05LFxcbiAgLmZsZXggPiAuY29sLXhzLTksXFxuICAuZmxleCA+IC5jb2wtMTAsXFxuICAuZmxleCA+IC5jb2wteHMtMTAsXFxuICAuZmxleCA+IC5jb2wtMTEsXFxuICAuZmxleCA+IC5jb2wteHMtMTEsXFxuICAuZmxleCA+IC5jb2wtMTIsXFxuICAuZmxleCA+IC5jb2wteHMtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLFxcbiAgLmNvbC14cyB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wtYXV0byxcXG4gIC5jb2wteHMtYXV0byxcXG4gIC5jb2wtMCxcXG4gIC5jb2wteHMtMCxcXG4gIC5jb2wtMSxcXG4gIC5jb2wteHMtMSxcXG4gIC5jb2wtMixcXG4gIC5jb2wteHMtMixcXG4gIC5jb2wtMyxcXG4gIC5jb2wteHMtMyxcXG4gIC5jb2wtNCxcXG4gIC5jb2wteHMtNCxcXG4gIC5jb2wtNSxcXG4gIC5jb2wteHMtNSxcXG4gIC5jb2wtNixcXG4gIC5jb2wteHMtNixcXG4gIC5jb2wtNyxcXG4gIC5jb2wteHMtNyxcXG4gIC5jb2wtOCxcXG4gIC5jb2wteHMtOCxcXG4gIC5jb2wtOSxcXG4gIC5jb2wteHMtOSxcXG4gIC5jb2wtMTAsXFxuICAuY29sLXhzLTEwLFxcbiAgLmNvbC0xMSxcXG4gIC5jb2wteHMtMTEsXFxuICAuY29sLTEyLFxcbiAgLmNvbC14cy0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC1ncm93LFxcbiAgLmNvbC14cy1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0wLFxcbiAgLnJvdyA+IC5jb2wteHMtMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMCxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMSxcXG4gIC5yb3cgPiAuY29sLXhzLTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMSxcXG4gIC5yb3cgPiAub2Zmc2V0LXhzLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTEsXFxuICAuY29sdW1uID4gLmNvbC14cy0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTIsXFxuICAucm93ID4gLmNvbC14cy0yIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC0yLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTIsXFxuICAuY29sdW1uID4gLmNvbC14cy0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0zLFxcbiAgLnJvdyA+IC5jb2wteHMtMyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTMsXFxuICAucm93ID4gLm9mZnNldC14cy0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTMsXFxuICAuY29sdW1uID4gLmNvbC14cy0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtNCxcXG4gIC5yb3cgPiAuY29sLXhzLTQge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTQsXFxuICAucm93ID4gLm9mZnNldC14cy00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNCxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTUsXFxuICAucm93ID4gLmNvbC14cy01IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNDEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC01LFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTUsXFxuICAuY29sdW1uID4gLmNvbC14cy01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC02LFxcbiAgLnJvdyA+IC5jb2wteHMtNiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTYsXFxuICAucm93ID4gLm9mZnNldC14cy02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTYsXFxuICAuY29sdW1uID4gLmNvbC14cy02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtNyxcXG4gIC5yb3cgPiAuY29sLXhzLTcge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTcsXFxuICAucm93ID4gLm9mZnNldC14cy03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtNyxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTgsXFxuICAucm93ID4gLmNvbC14cy04IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNjYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC04LFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTgsXFxuICAuY29sdW1uID4gLmNvbC14cy04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC05LFxcbiAgLnJvdyA+IC5jb2wteHMtOSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTksXFxuICAucm93ID4gLm9mZnNldC14cy05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTksXFxuICAuY29sdW1uID4gLmNvbC14cy05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtMTAsXFxuICAucm93ID4gLmNvbC14cy0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtMTAsXFxuICAucm93ID4gLm9mZnNldC14cy0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLTExLFxcbiAgLnJvdyA+IC5jb2wteHMtMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTExLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhzLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC0xMixcXG4gIC5yb3cgPiAuY29sLXhzLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LTEyLFxcbiAgLnJvdyA+IC5vZmZzZXQteHMtMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLTEyLFxcbiAgLmNvbHVtbiA+IC5jb2wteHMtMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNTc2cHgpIHtcXG4gIC5yb3cgPiAuY29sLXNtLFxcbiAgLnJvdyA+IC5jb2wtc20tYXV0byxcXG4gIC5yb3cgPiAuY29sLXNtLWdyb3csXFxuICAucm93ID4gLmNvbC1zbS0wLFxcbiAgLnJvdyA+IC5jb2wtc20tMSxcXG4gIC5yb3cgPiAuY29sLXNtLTIsXFxuICAucm93ID4gLmNvbC1zbS0zLFxcbiAgLnJvdyA+IC5jb2wtc20tNCxcXG4gIC5yb3cgPiAuY29sLXNtLTUsXFxuICAucm93ID4gLmNvbC1zbS02LFxcbiAgLnJvdyA+IC5jb2wtc20tNyxcXG4gIC5yb3cgPiAuY29sLXNtLTgsXFxuICAucm93ID4gLmNvbC1zbS05LFxcbiAgLnJvdyA+IC5jb2wtc20tMTAsXFxuICAucm93ID4gLmNvbC1zbS0xMSxcXG4gIC5yb3cgPiAuY29sLXNtLTEyLFxcbiAgLmZsZXggPiAuY29sLXNtLFxcbiAgLmZsZXggPiAuY29sLXNtLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtc20tZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1zbS0wLFxcbiAgLmZsZXggPiAuY29sLXNtLTEsXFxuICAuZmxleCA+IC5jb2wtc20tMixcXG4gIC5mbGV4ID4gLmNvbC1zbS0zLFxcbiAgLmZsZXggPiAuY29sLXNtLTQsXFxuICAuZmxleCA+IC5jb2wtc20tNSxcXG4gIC5mbGV4ID4gLmNvbC1zbS02LFxcbiAgLmZsZXggPiAuY29sLXNtLTcsXFxuICAuZmxleCA+IC5jb2wtc20tOCxcXG4gIC5mbGV4ID4gLmNvbC1zbS05LFxcbiAgLmZsZXggPiAuY29sLXNtLTEwLFxcbiAgLmZsZXggPiAuY29sLXNtLTExLFxcbiAgLmZsZXggPiAuY29sLXNtLTEyIHtcXG4gICAgd2lkdGg6IGF1dG87XFxuICAgIG1pbi13aWR0aDogMDtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20sXFxuICAuY29sdW1uID4gLmNvbC1zbS1hdXRvLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tZ3JvdyxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTAsXFxuICAuY29sdW1uID4gLmNvbC1zbS0xLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMixcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTMsXFxuICAuY29sdW1uID4gLmNvbC1zbS00LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNSxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTYsXFxuICAuY29sdW1uID4gLmNvbC1zbS03LFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tOCxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTksXFxuICAuY29sdW1uID4gLmNvbC1zbS0xMCxcXG4gIC5jb2x1bW4gPiAuY29sLXNtLTExLFxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMTIsXFxuICAuZmxleCA+IC5jb2wtc20sXFxuICAuZmxleCA+IC5jb2wtc20tYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1zbS1ncm93LFxcbiAgLmZsZXggPiAuY29sLXNtLTAsXFxuICAuZmxleCA+IC5jb2wtc20tMSxcXG4gIC5mbGV4ID4gLmNvbC1zbS0yLFxcbiAgLmZsZXggPiAuY29sLXNtLTMsXFxuICAuZmxleCA+IC5jb2wtc20tNCxcXG4gIC5mbGV4ID4gLmNvbC1zbS01LFxcbiAgLmZsZXggPiAuY29sLXNtLTYsXFxuICAuZmxleCA+IC5jb2wtc20tNyxcXG4gIC5mbGV4ID4gLmNvbC1zbS04LFxcbiAgLmZsZXggPiAuY29sLXNtLTksXFxuICAuZmxleCA+IC5jb2wtc20tMTAsXFxuICAuZmxleCA+IC5jb2wtc20tMTEsXFxuICAuZmxleCA+IC5jb2wtc20tMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1pbi1oZWlnaHQ6IDA7XFxuICAgIG1heC1oZWlnaHQ6IDEwMCU7XFxuICB9XFxuICAuY29sLXNtIHtcXG4gICAgLW1zLWZsZXg6IDEwMDAwIDEgMCU7XFxuICAgICAgICBmbGV4OiAxMDAwMCAxIDAlO1xcbiAgfVxcbiAgLmNvbC1zbS1hdXRvLFxcbiAgLmNvbC1zbS0wLFxcbiAgLmNvbC1zbS0xLFxcbiAgLmNvbC1zbS0yLFxcbiAgLmNvbC1zbS0zLFxcbiAgLmNvbC1zbS00LFxcbiAgLmNvbC1zbS01LFxcbiAgLmNvbC1zbS02LFxcbiAgLmNvbC1zbS03LFxcbiAgLmNvbC1zbS04LFxcbiAgLmNvbC1zbS05LFxcbiAgLmNvbC1zbS0xMCxcXG4gIC5jb2wtc20tMTEsXFxuICAuY29sLXNtLTEyIHtcXG4gICAgLW1zLWZsZXg6IDAgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMCAwIGF1dG87XFxuICB9XFxuICAuY29sLXNtLWdyb3cge1xcbiAgICAtbXMtZmxleDogMSAwIGF1dG87XFxuICAgICAgICBmbGV4OiAxIDAgYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTAge1xcbiAgICBtYXJnaW4tbGVmdDogMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0wIHtcXG4gICAgaGVpZ2h0OiAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0xIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTEge1xcbiAgICBtYXJnaW4tbGVmdDogOC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTEge1xcbiAgICBoZWlnaHQ6IDguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDE2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxNi42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTIge1xcbiAgICBoZWlnaHQ6IDE2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTMge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAyNSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS0zIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDI1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTMge1xcbiAgICBoZWlnaHQ6IDI1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS00IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMzMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS00IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNCB7XFxuICAgIGhlaWdodDogMzMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tNSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDQxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tNSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA0MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTUge1xcbiAgICBoZWlnaHQ6IDQxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTYge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1MCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS02IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDUwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTYge1xcbiAgICBoZWlnaHQ6IDUwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS03IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS03IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tNyB7XFxuICAgIGhlaWdodDogNTguMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tOCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDY2LjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tOCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTgge1xcbiAgICBoZWlnaHQ6IDY2LjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTkge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA3NSU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1zbS05IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDc1JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXNtLTkge1xcbiAgICBoZWlnaHQ6IDc1JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1zbS0xMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtc20tMTAge1xcbiAgICBtYXJnaW4tbGVmdDogODMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0xMCB7XFxuICAgIGhlaWdodDogODMuMzMzMyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtc20tMTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA5MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTExIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDkxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtc20tMTEge1xcbiAgICBoZWlnaHQ6IDkxLjY2NjclO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXNtLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXNtLTEyIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1zbS0xMiB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgLnJvdyA+IC5jb2wtbWQsXFxuICAucm93ID4gLmNvbC1tZC1hdXRvLFxcbiAgLnJvdyA+IC5jb2wtbWQtZ3JvdyxcXG4gIC5yb3cgPiAuY29sLW1kLTAsXFxuICAucm93ID4gLmNvbC1tZC0xLFxcbiAgLnJvdyA+IC5jb2wtbWQtMixcXG4gIC5yb3cgPiAuY29sLW1kLTMsXFxuICAucm93ID4gLmNvbC1tZC00LFxcbiAgLnJvdyA+IC5jb2wtbWQtNSxcXG4gIC5yb3cgPiAuY29sLW1kLTYsXFxuICAucm93ID4gLmNvbC1tZC03LFxcbiAgLnJvdyA+IC5jb2wtbWQtOCxcXG4gIC5yb3cgPiAuY29sLW1kLTksXFxuICAucm93ID4gLmNvbC1tZC0xMCxcXG4gIC5yb3cgPiAuY29sLW1kLTExLFxcbiAgLnJvdyA+IC5jb2wtbWQtMTIsXFxuICAuZmxleCA+IC5jb2wtbWQsXFxuICAuZmxleCA+IC5jb2wtbWQtYXV0byxcXG4gIC5mbGV4ID4gLmNvbC1tZC1ncm93LFxcbiAgLmZsZXggPiAuY29sLW1kLTAsXFxuICAuZmxleCA+IC5jb2wtbWQtMSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0yLFxcbiAgLmZsZXggPiAuY29sLW1kLTMsXFxuICAuZmxleCA+IC5jb2wtbWQtNCxcXG4gIC5mbGV4ID4gLmNvbC1tZC01LFxcbiAgLmZsZXggPiAuY29sLW1kLTYsXFxuICAuZmxleCA+IC5jb2wtbWQtNyxcXG4gIC5mbGV4ID4gLmNvbC1tZC04LFxcbiAgLmZsZXggPiAuY29sLW1kLTksXFxuICAuZmxleCA+IC5jb2wtbWQtMTAsXFxuICAuZmxleCA+IC5jb2wtbWQtMTEsXFxuICAuZmxleCA+IC5jb2wtbWQtMTIge1xcbiAgICB3aWR0aDogYXV0bztcXG4gICAgbWluLXdpZHRoOiAwO1xcbiAgICBtYXgtd2lkdGg6IDEwMCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZCxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLWF1dG8sXFxuICAuY29sdW1uID4gLmNvbC1tZC1ncm93LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMCxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEsXFxuICAuY29sdW1uID4gLmNvbC1tZC0yLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMyxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTQsXFxuICAuY29sdW1uID4gLmNvbC1tZC01LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNixcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTcsXFxuICAuY29sdW1uID4gLmNvbC1tZC04LFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtOSxcXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEwLFxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMTEsXFxuICAuY29sdW1uID4gLmNvbC1tZC0xMixcXG4gIC5mbGV4ID4gLmNvbC1tZCxcXG4gIC5mbGV4ID4gLmNvbC1tZC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLW1kLWdyb3csXFxuICAuZmxleCA+IC5jb2wtbWQtMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xLFxcbiAgLmZsZXggPiAuY29sLW1kLTIsXFxuICAuZmxleCA+IC5jb2wtbWQtMyxcXG4gIC5mbGV4ID4gLmNvbC1tZC00LFxcbiAgLmZsZXggPiAuY29sLW1kLTUsXFxuICAuZmxleCA+IC5jb2wtbWQtNixcXG4gIC5mbGV4ID4gLmNvbC1tZC03LFxcbiAgLmZsZXggPiAuY29sLW1kLTgsXFxuICAuZmxleCA+IC5jb2wtbWQtOSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMCxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMSxcXG4gIC5mbGV4ID4gLmNvbC1tZC0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgbWluLWhlaWdodDogMDtcXG4gICAgbWF4LWhlaWdodDogMTAwJTtcXG4gIH1cXG4gIC5jb2wtbWQge1xcbiAgICAtbXMtZmxleDogMTAwMDAgMSAwJTtcXG4gICAgICAgIGZsZXg6IDEwMDAwIDEgMCU7XFxuICB9XFxuICAuY29sLW1kLWF1dG8sXFxuICAuY29sLW1kLTAsXFxuICAuY29sLW1kLTEsXFxuICAuY29sLW1kLTIsXFxuICAuY29sLW1kLTMsXFxuICAuY29sLW1kLTQsXFxuICAuY29sLW1kLTUsXFxuICAuY29sLW1kLTYsXFxuICAuY29sLW1kLTcsXFxuICAuY29sLW1kLTgsXFxuICAuY29sLW1kLTksXFxuICAuY29sLW1kLTEwLFxcbiAgLmNvbC1tZC0xMSxcXG4gIC5jb2wtbWQtMTIge1xcbiAgICAtbXMtZmxleDogMCAwIGF1dG87XFxuICAgICAgICBmbGV4OiAwIDAgYXV0bztcXG4gIH1cXG4gIC5jb2wtbWQtZ3JvdyB7XFxuICAgIC1tcy1mbGV4OiAxIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDEgMCBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTAge1xcbiAgICBoZWlnaHQ6IDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTEge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4LjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMSB7XFxuICAgIGhlaWdodDogOC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0yIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMTYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0yIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDE2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMiB7XFxuICAgIGhlaWdodDogMTYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDI1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMjUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtMyB7XFxuICAgIGhlaWdodDogMjUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTQge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTQge1xcbiAgICBtYXJnaW4tbGVmdDogMzMuMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC00IHtcXG4gICAgaGVpZ2h0OiAzMy4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC01IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNDEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC01IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDQxLjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNSB7XFxuICAgIGhlaWdodDogNDEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtNiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDUwJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTYge1xcbiAgICBtYXJnaW4tbGVmdDogNTAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtNiB7XFxuICAgIGhlaWdodDogNTAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTcge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTcge1xcbiAgICBtYXJnaW4tbGVmdDogNTguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC03IHtcXG4gICAgaGVpZ2h0OiA1OC4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC04IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNjYuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC04IHtcXG4gICAgbWFyZ2luLWxlZnQ6IDY2LjY2NjclO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtOCB7XFxuICAgIGhlaWdodDogNjYuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtOSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDc1JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LW1kLTkge1xcbiAgICBtYXJnaW4tbGVmdDogNzUlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbWQtOSB7XFxuICAgIGhlaWdodDogNzUlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLW1kLTEwIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogODMuMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1tZC0xMCB7XFxuICAgIG1hcmdpbi1sZWZ0OiA4My4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEwIHtcXG4gICAgaGVpZ2h0OiA4My4zMzMzJTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1tZC0xMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDkxLjY2NjclO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMTEge1xcbiAgICBtYXJnaW4tbGVmdDogOTEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1tZC0xMSB7XFxuICAgIGhlaWdodDogOTEuNjY2NyU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbWQtMTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbWQtMTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLW1kLTEyIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KSB7XFxuICAucm93ID4gLmNvbC1sZyxcXG4gIC5yb3cgPiAuY29sLWxnLWF1dG8sXFxuICAucm93ID4gLmNvbC1sZy1ncm93LFxcbiAgLnJvdyA+IC5jb2wtbGctMCxcXG4gIC5yb3cgPiAuY29sLWxnLTEsXFxuICAucm93ID4gLmNvbC1sZy0yLFxcbiAgLnJvdyA+IC5jb2wtbGctMyxcXG4gIC5yb3cgPiAuY29sLWxnLTQsXFxuICAucm93ID4gLmNvbC1sZy01LFxcbiAgLnJvdyA+IC5jb2wtbGctNixcXG4gIC5yb3cgPiAuY29sLWxnLTcsXFxuICAucm93ID4gLmNvbC1sZy04LFxcbiAgLnJvdyA+IC5jb2wtbGctOSxcXG4gIC5yb3cgPiAuY29sLWxnLTEwLFxcbiAgLnJvdyA+IC5jb2wtbGctMTEsXFxuICAucm93ID4gLmNvbC1sZy0xMixcXG4gIC5mbGV4ID4gLmNvbC1sZyxcXG4gIC5mbGV4ID4gLmNvbC1sZy1hdXRvLFxcbiAgLmZsZXggPiAuY29sLWxnLWdyb3csXFxuICAuZmxleCA+IC5jb2wtbGctMCxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xLFxcbiAgLmZsZXggPiAuY29sLWxnLTIsXFxuICAuZmxleCA+IC5jb2wtbGctMyxcXG4gIC5mbGV4ID4gLmNvbC1sZy00LFxcbiAgLmZsZXggPiAuY29sLWxnLTUsXFxuICAuZmxleCA+IC5jb2wtbGctNixcXG4gIC5mbGV4ID4gLmNvbC1sZy03LFxcbiAgLmZsZXggPiAuY29sLWxnLTgsXFxuICAuZmxleCA+IC5jb2wtbGctOSxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xMCxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xMSxcXG4gIC5mbGV4ID4gLmNvbC1sZy0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC1sZy0wLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMSxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTIsXFxuICAuY29sdW1uID4gLmNvbC1sZy0zLFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNCxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTUsXFxuICAuY29sdW1uID4gLmNvbC1sZy02LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctNyxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTgsXFxuICAuY29sdW1uID4gLmNvbC1sZy05LFxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTAsXFxuICAuY29sdW1uID4gLmNvbC1sZy0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLWxnLTEyLFxcbiAgLmZsZXggPiAuY29sLWxnLFxcbiAgLmZsZXggPiAuY29sLWxnLWF1dG8sXFxuICAuZmxleCA+IC5jb2wtbGctZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC1sZy0wLFxcbiAgLmZsZXggPiAuY29sLWxnLTEsXFxuICAuZmxleCA+IC5jb2wtbGctMixcXG4gIC5mbGV4ID4gLmNvbC1sZy0zLFxcbiAgLmZsZXggPiAuY29sLWxnLTQsXFxuICAuZmxleCA+IC5jb2wtbGctNSxcXG4gIC5mbGV4ID4gLmNvbC1sZy02LFxcbiAgLmZsZXggPiAuY29sLWxnLTcsXFxuICAuZmxleCA+IC5jb2wtbGctOCxcXG4gIC5mbGV4ID4gLmNvbC1sZy05LFxcbiAgLmZsZXggPiAuY29sLWxnLTEwLFxcbiAgLmZsZXggPiAuY29sLWxnLTExLFxcbiAgLmZsZXggPiAuY29sLWxnLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbC1sZyB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wtbGctYXV0byxcXG4gIC5jb2wtbGctMCxcXG4gIC5jb2wtbGctMSxcXG4gIC5jb2wtbGctMixcXG4gIC5jb2wtbGctMyxcXG4gIC5jb2wtbGctNCxcXG4gIC5jb2wtbGctNSxcXG4gIC5jb2wtbGctNixcXG4gIC5jb2wtbGctNyxcXG4gIC5jb2wtbGctOCxcXG4gIC5jb2wtbGctOSxcXG4gIC5jb2wtbGctMTAsXFxuICAuY29sLWxnLTExLFxcbiAgLmNvbC1sZy0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC1sZy1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQtbGctOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC1sZy05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wtbGctMTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4My4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LWxnLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLWxnLTExIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOTEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLWxnLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC1sZy0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC1sZy0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wtbGctMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XFxuICAucm93ID4gLmNvbC14bCxcXG4gIC5yb3cgPiAuY29sLXhsLWF1dG8sXFxuICAucm93ID4gLmNvbC14bC1ncm93LFxcbiAgLnJvdyA+IC5jb2wteGwtMCxcXG4gIC5yb3cgPiAuY29sLXhsLTEsXFxuICAucm93ID4gLmNvbC14bC0yLFxcbiAgLnJvdyA+IC5jb2wteGwtMyxcXG4gIC5yb3cgPiAuY29sLXhsLTQsXFxuICAucm93ID4gLmNvbC14bC01LFxcbiAgLnJvdyA+IC5jb2wteGwtNixcXG4gIC5yb3cgPiAuY29sLXhsLTcsXFxuICAucm93ID4gLmNvbC14bC04LFxcbiAgLnJvdyA+IC5jb2wteGwtOSxcXG4gIC5yb3cgPiAuY29sLXhsLTEwLFxcbiAgLnJvdyA+IC5jb2wteGwtMTEsXFxuICAucm93ID4gLmNvbC14bC0xMixcXG4gIC5mbGV4ID4gLmNvbC14bCxcXG4gIC5mbGV4ID4gLmNvbC14bC1hdXRvLFxcbiAgLmZsZXggPiAuY29sLXhsLWdyb3csXFxuICAuZmxleCA+IC5jb2wteGwtMCxcXG4gIC5mbGV4ID4gLmNvbC14bC0xLFxcbiAgLmZsZXggPiAuY29sLXhsLTIsXFxuICAuZmxleCA+IC5jb2wteGwtMyxcXG4gIC5mbGV4ID4gLmNvbC14bC00LFxcbiAgLmZsZXggPiAuY29sLXhsLTUsXFxuICAuZmxleCA+IC5jb2wteGwtNixcXG4gIC5mbGV4ID4gLmNvbC14bC03LFxcbiAgLmZsZXggPiAuY29sLXhsLTgsXFxuICAuZmxleCA+IC5jb2wteGwtOSxcXG4gIC5mbGV4ID4gLmNvbC14bC0xMCxcXG4gIC5mbGV4ID4gLmNvbC14bC0xMSxcXG4gIC5mbGV4ID4gLmNvbC14bC0xMiB7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgICBtaW4td2lkdGg6IDA7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtYXV0byxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLWdyb3csXFxuICAuY29sdW1uID4gLmNvbC14bC0wLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTIsXFxuICAuY29sdW1uID4gLmNvbC14bC0zLFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNCxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTUsXFxuICAuY29sdW1uID4gLmNvbC14bC02LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtNyxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTgsXFxuICAuY29sdW1uID4gLmNvbC14bC05LFxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTAsXFxuICAuY29sdW1uID4gLmNvbC14bC0xMSxcXG4gIC5jb2x1bW4gPiAuY29sLXhsLTEyLFxcbiAgLmZsZXggPiAuY29sLXhsLFxcbiAgLmZsZXggPiAuY29sLXhsLWF1dG8sXFxuICAuZmxleCA+IC5jb2wteGwtZ3JvdyxcXG4gIC5mbGV4ID4gLmNvbC14bC0wLFxcbiAgLmZsZXggPiAuY29sLXhsLTEsXFxuICAuZmxleCA+IC5jb2wteGwtMixcXG4gIC5mbGV4ID4gLmNvbC14bC0zLFxcbiAgLmZsZXggPiAuY29sLXhsLTQsXFxuICAuZmxleCA+IC5jb2wteGwtNSxcXG4gIC5mbGV4ID4gLmNvbC14bC02LFxcbiAgLmZsZXggPiAuY29sLXhsLTcsXFxuICAuZmxleCA+IC5jb2wteGwtOCxcXG4gIC5mbGV4ID4gLmNvbC14bC05LFxcbiAgLmZsZXggPiAuY29sLXhsLTEwLFxcbiAgLmZsZXggPiAuY29sLXhsLTExLFxcbiAgLmZsZXggPiAuY29sLXhsLTEyIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtaW4taGVpZ2h0OiAwO1xcbiAgICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbC14bCB7XFxuICAgIC1tcy1mbGV4OiAxMDAwMCAxIDAlO1xcbiAgICAgICAgZmxleDogMTAwMDAgMSAwJTtcXG4gIH1cXG4gIC5jb2wteGwtYXV0byxcXG4gIC5jb2wteGwtMCxcXG4gIC5jb2wteGwtMSxcXG4gIC5jb2wteGwtMixcXG4gIC5jb2wteGwtMyxcXG4gIC5jb2wteGwtNCxcXG4gIC5jb2wteGwtNSxcXG4gIC5jb2wteGwtNixcXG4gIC5jb2wteGwtNyxcXG4gIC5jb2wteGwtOCxcXG4gIC5jb2wteGwtOSxcXG4gIC5jb2wteGwtMTAsXFxuICAuY29sLXhsLTExLFxcbiAgLmNvbC14bC0xMiB7XFxuICAgIC1tcy1mbGV4OiAwIDAgYXV0bztcXG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xcbiAgfVxcbiAgLmNvbC14bC1ncm93IHtcXG4gICAgLW1zLWZsZXg6IDEgMCBhdXRvO1xcbiAgICAgICAgZmxleDogMSAwIGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0wIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0wIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMCB7XFxuICAgIGhlaWdodDogMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMSB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDguMzMzMyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0xIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDguMzMzMyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0xIHtcXG4gICAgaGVpZ2h0OiA4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTIge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiAxNi42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTIge1xcbiAgICBtYXJnaW4tbGVmdDogMTYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0yIHtcXG4gICAgaGVpZ2h0OiAxNi42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0zIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogMjUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtMyB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyNSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC0zIHtcXG4gICAgaGVpZ2h0OiAyNSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtNCB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDMzLjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAzMy4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTQge1xcbiAgICBoZWlnaHQ6IDMzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTUge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA0MS42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTUge1xcbiAgICBtYXJnaW4tbGVmdDogNDEuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC01IHtcXG4gICAgaGVpZ2h0OiA0MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC02IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNTAlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNiB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1MCU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC02IHtcXG4gICAgaGVpZ2h0OiA1MCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtNyB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDU4LjMzMzMlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtNyB7XFxuICAgIG1hcmdpbi1sZWZ0OiA1OC4zMzMzJTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTcge1xcbiAgICBoZWlnaHQ6IDU4LjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTgge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA2Ni42NjY3JTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTgge1xcbiAgICBtYXJnaW4tbGVmdDogNjYuNjY2NyU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC04IHtcXG4gICAgaGVpZ2h0OiA2Ni42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC05IHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogNzUlO1xcbiAgfVxcbiAgLnJvdyA+IC5vZmZzZXQteGwtOSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA3NSU7XFxuICB9XFxuICAuY29sdW1uID4gLmNvbC14bC05IHtcXG4gICAgaGVpZ2h0OiA3NSU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wteGwtMTAge1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIHdpZHRoOiA4My4zMzMzJTtcXG4gIH1cXG4gIC5yb3cgPiAub2Zmc2V0LXhsLTEwIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDgzLjMzMzMlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTAge1xcbiAgICBoZWlnaHQ6IDgzLjMzMzMlO1xcbiAgICB3aWR0aDogYXV0bztcXG4gIH1cXG4gIC5yb3cgPiAuY29sLXhsLTExIHtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICB3aWR0aDogOTEuNjY2NyU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0xMSB7XFxuICAgIG1hcmdpbi1sZWZ0OiA5MS42NjY3JTtcXG4gIH1cXG4gIC5jb2x1bW4gPiAuY29sLXhsLTExIHtcXG4gICAgaGVpZ2h0OiA5MS42NjY3JTtcXG4gICAgd2lkdGg6IGF1dG87XFxuICB9XFxuICAucm93ID4gLmNvbC14bC0xMiB7XFxuICAgIGhlaWdodDogYXV0bztcXG4gICAgd2lkdGg6IDEwMCU7XFxuICB9XFxuICAucm93ID4gLm9mZnNldC14bC0xMiB7XFxuICAgIG1hcmdpbi1sZWZ0OiAxMDAlO1xcbiAgfVxcbiAgLmNvbHVtbiA+IC5jb2wteGwtMTIge1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHdpZHRoOiBhdXRvO1xcbiAgfVxcbn1cXG4uYmFja2Ryb3Age1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHBvc2l0aW9uOiBmaXhlZDtcXG4gIHRvcDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4yOHMgZWFzZS1pbjtcXG59XFxuLmJhY2tkcm9wLmFjdGl2ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTtcXG59XFxuLnJvdW5kLWJvcmRlcnMge1xcbiAgYm9yZGVyLXJhZGl1czogM3B4ICFpbXBvcnRhbnQ7XFxufVxcbi5nZW5lcmljLW1hcmdpbixcXG4uZ3JvdXAgPiAqIHtcXG4gIG1hcmdpbjogNXB4O1xcbn1cXG4ubm8tdHJhbnNpdGlvbiB7XFxuICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi50cmFuc2l0aW9uLTAge1xcbiAgdHJhbnNpdGlvbjogMHMgIWltcG9ydGFudDtcXG59XFxuLmdsb3NzeSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwyNTUsMjU1LDAuMyksIHJnYmEoMjU1LDI1NSwyNTUsMCkgNTAlLCByZ2JhKDAsMCwwLDAuMTIpIDUxJSwgcmdiYSgwLDAsMCwwLjA0KSkgIWltcG9ydGFudDtcXG59XFxuLnEtcGxhY2Vob2xkZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLXBsYWNlaG9sZGVyOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG4ucS1wbGFjZWhvbGRlcjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcbi5xLWJvZHktZnVsbHNjcmVlbi1taXhpbixcXG4ucS1ib2R5LXByZXZlbnQtc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLnEtbm8taW5wdXQtc3Bpbm5lciB7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZCAhaW1wb3J0YW50O1xcbn1cXG4ucS1uby1pbnB1dC1zcGlubmVyOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLFxcbi5xLW5vLWlucHV0LXNwaW5uZXI6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5hLnEtbGluayB7XFxuICBvdXRsaW5lOiAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcbi5xLXNlbGVjdC1oaWdobGlnaHQge1xcbiAgYmFja2dyb3VuZDogcmdiYSgxODksMTg5LDE4OSwwLjUpICFpbXBvcnRhbnQ7XFxufVxcbi5oaWdobGlnaHQtYW5kLWZhZGUge1xcbiAgYW5pbWF0aW9uOiBxLWhpZ2hsaWdodCAycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4udHJhbnNpdGlvbi1nZW5lcmljIHtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjNzO1xcbn1cXG4uYW5pbWF0ZS1zcGluLFxcbi5hbmltYXRlLXNwaW4tcmV2ZXJzZSB7XFxuICBhbmltYXRpb246IHEtc3BpbiAycyBpbmZpbml0ZSBsaW5lYXIgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtc3Bpbi1yZXZlcnNlIHtcXG4gIGFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7XFxufVxcbi5hbmltYXRlLWJsaW5rIHtcXG4gIGFuaW1hdGlvbjogcS1ibGluayAxcyBzdGVwcyg1LCBzdGFydCkgaW5maW5pdGUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtcG9wIHtcXG4gIGFuaW1hdGlvbjogcS1wb3AgMC4ycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1zY2FsZSB7XFxuICBhbmltYXRpb246IHEtc2NhbGUgMC4ycyAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1mYWRlIHtcXG4gIGFuaW1hdGlvbjogcS1mYWRlIDAuMnMgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtYm91bmNlIHtcXG4gIGFuaW1hdGlvbjogcS1ib3VuY2UgMnMgaW5maW5pdGUgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLmFuaW1hdGUtc2hha2Uge1xcbiAgYW5pbWF0aW9uOiBxLXNoYWtlIDAuMTVzO1xcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSk7XFxufVxcbi5hbmltYXRlLXBvcHVwLXVwLFxcbi5hbmltYXRlLXBvcHVwLWRvd24ge1xcbiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbn1cXG4uYW5pbWF0ZS1wb3B1cC11cCA+ICosXFxuLmFuaW1hdGUtcG9wdXAtZG93biA+ICoge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC44MnMgY3ViaWMtYmV6aWVyKDAuNzg1LCAwLjEzNSwgMC4xNSwgMC44Nik7XFxufVxcbi5hbmltYXRlLXBvcHVwLWRvd24ge1xcbiAgYW5pbWF0aW9uOiBxLXBvcHVwLWRvd24gMC4zNnMgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wIDBweCAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1wb3B1cC11cCB7XFxuICBhbmltYXRpb246IHEtcG9wdXAtdXAgMC4zNnMgLyogcnRsOmlnbm9yZSAqLztcXG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgYm90dG9tIDBweCAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uYW5pbWF0ZS1mYWRlLWxlZnQge1xcbiAgYW5pbWF0aW9uOiBxLWZhZGUgMC4zNnMgY3ViaWMtYmV6aWVyKDAuNzg1LCAwLjEzNSwgMC4xNSwgMC44NiksIHEtc2xpZGUtbGVmdCAwLjM2cyBlYXNlO1xcbn1cXG4uYW5pbWF0ZS1mYWRlLXJpZ2h0IHtcXG4gIGFuaW1hdGlvbjogcS1mYWRlIDAuMzZzIGN1YmljLWJlemllcigwLjc4NSwgMC4xMzUsIDAuMTUsIDAuODYpLCBxLXNsaWRlLXJpZ2h0IDAuMzZzIGVhc2U7XFxufVxcbi5hbmltYXRlZCB7XFxuICBhbmltYXRpb24tZHVyYXRpb246IDFzO1xcbiAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDtcXG59XFxuLmFuaW1hdGVkLmluZmluaXRlIHtcXG4gIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlO1xcbn1cXG4uYW5pbWF0ZWQuaGluZ2Uge1xcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiAycztcXG59XFxuLmFuaW1hdGVkLmZsaXBPdXRYLFxcbi5hbmltYXRlZC5mbGlwT3V0WSxcXG4uYW5pbWF0ZWQuYm91bmNlSW4sXFxuLmFuaW1hdGVkLmJvdW5jZU91dCB7XFxuICBhbmltYXRpb24tZHVyYXRpb246IDAuNzVzO1xcbn1cXG4ubm9uLXNlbGVjdGFibGUge1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG4uc2Nyb2xsLFxcbi5zY3JvbGwteCxcXG4uc2Nyb2xsLXkge1xcbiAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoO1xcbiAgd2lsbC1jaGFuZ2U6IHNjcm9sbC1wb3NpdGlvbjtcXG59XFxuLnNjcm9sbC14IHtcXG4gIG92ZXJmbG93LXg6IGF1dG87XFxufVxcbi5zY3JvbGwteSB7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG4ubm8tc2Nyb2xsIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLm5vLXBvaW50ZXItZXZlbnRzIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5hbGwtcG9pbnRlci1ldmVudHMge1xcbiAgcG9pbnRlci1ldmVudHM6IGFsbCAhaW1wb3J0YW50O1xcbn1cXG4uY3Vyc29yLXBvaW50ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7XFxufVxcbi5jdXJzb3Itbm90LWFsbG93ZWQge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O1xcbn1cXG4uY3Vyc29yLWluaGVyaXQge1xcbiAgY3Vyc29yOiBpbmhlcml0ICFpbXBvcnRhbnQ7XFxufVxcbi5yb3RhdGUtNDUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtOTAge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtMTM1IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0xODAge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4ucm90YXRlLTIwNSB7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgyMDVkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxufVxcbi5yb3RhdGUtMjcwIHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG59XFxuLnJvdGF0ZS0zMTUge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMzE1ZGVnKSAvKiBydGw6aWdub3JlICovO1xcbn1cXG4uZmxpcC1ob3Jpem9udGFsIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoLTEsIDEpO1xcbn1cXG4uZmxpcC12ZXJ0aWNhbCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEsIC0xKTtcXG59XFxuLmZsb2F0LWxlZnQge1xcbiAgZmxvYXQ6IGxlZnQ7XFxufVxcbi5mbG9hdC1yaWdodCB7XFxuICBmbG9hdDogcmlnaHQ7XFxufVxcbi5yZWxhdGl2ZS1wb3NpdGlvbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcbi5maXhlZCxcXG4uZnVsbHNjcmVlbixcXG4uZml4ZWQtY2VudGVyLFxcbi5maXhlZC1ib3R0b20sXFxuLmZpeGVkLWxlZnQsXFxuLmZpeGVkLXJpZ2h0LFxcbi5maXhlZC10b3AsXFxuLmZpeGVkLXRvcC1sZWZ0LFxcbi5maXhlZC10b3AtcmlnaHQsXFxuLmZpeGVkLWJvdHRvbS1sZWZ0LFxcbi5maXhlZC1ib3R0b20tcmlnaHQge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbn1cXG4uYWJzb2x1dGUsXFxuLmFic29sdXRlLWZ1bGwsXFxuLmFic29sdXRlLWNlbnRlcixcXG4uYWJzb2x1dGUtYm90dG9tLFxcbi5hYnNvbHV0ZS1sZWZ0LFxcbi5hYnNvbHV0ZS1yaWdodCxcXG4uYWJzb2x1dGUtdG9wLFxcbi5hYnNvbHV0ZS10b3AtbGVmdCxcXG4uYWJzb2x1dGUtdG9wLXJpZ2h0LFxcbi5hYnNvbHV0ZS1ib3R0b20tbGVmdCxcXG4uYWJzb2x1dGUtYm90dG9tLXJpZ2h0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuLmZpeGVkLXRvcCxcXG4uYWJzb2x1dGUtdG9wIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG59XFxuLmZpeGVkLXJpZ2h0LFxcbi5hYnNvbHV0ZS1yaWdodCB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG59XFxuLmZpeGVkLWJvdHRvbSxcXG4uYWJzb2x1dGUtYm90dG9tIHtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLWxlZnQsXFxuLmFic29sdXRlLWxlZnQge1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLXRvcC1sZWZ0LFxcbi5hYnNvbHV0ZS10b3AtbGVmdCB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbn1cXG4uZml4ZWQtdG9wLXJpZ2h0LFxcbi5hYnNvbHV0ZS10b3AtcmlnaHQge1xcbiAgdG9wOiAwO1xcbiAgcmlnaHQ6IDA7XFxufVxcbi5maXhlZC1ib3R0b20tbGVmdCxcXG4uYWJzb2x1dGUtYm90dG9tLWxlZnQge1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG59XFxuLmZpeGVkLWJvdHRvbS1yaWdodCxcXG4uYWJzb2x1dGUtYm90dG9tLXJpZ2h0IHtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAwO1xcbn1cXG4uZnVsbHNjcmVlbiB7XFxuICB6LWluZGV4OiA2MDAwO1xcbiAgYm9yZGVyLXJhZGl1czogMCAhaW1wb3J0YW50O1xcbiAgbWF4LXdpZHRoOiAxMDB2dztcXG4gIG1heC1oZWlnaHQ6IDEwMHZoO1xcbn1cXG4uYWJzb2x1dGUtZnVsbCxcXG4uZnVsbHNjcmVlbiB7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbi5maXhlZC1jZW50ZXIsXFxuLmFic29sdXRlLWNlbnRlciB7XFxuICB0b3A6IDUwJTtcXG4gIGxlZnQ6IDUwJTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbn1cXG4udmVydGljYWwtdG9wIHtcXG4gIHZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDtcXG59XFxuLnZlcnRpY2FsLW1pZGRsZSB7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7XFxufVxcbi52ZXJ0aWNhbC1ib3R0b20ge1xcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbSAhaW1wb3J0YW50O1xcbn1cXG4ub24tbGVmdCB7XFxuICBtYXJnaW4tcmlnaHQ6IDEycHg7XFxufVxcbi5vbi1yaWdodCB7XFxuICBtYXJnaW4tbGVmdDogMTJweDtcXG59XFxuLnEtcmlwcGxlLWNvbnRhaW5lciB7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgei1pbmRleDogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4ucS1yaXBwbGUtYW5pbWF0aW9uIHtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDAgLyogcnRsOmlnbm9yZSAqLztcXG4gIG9wYWNpdHk6IDA7XFxuICBjb2xvcjogaW5oZXJpdDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjtcXG4gIHRyYW5zaXRpb246IDAuM3MgdHJhbnNmb3JtIGN1YmljLWJlemllcigwLjIsIDAuNCwgMC40LCAwLjkpLCAwLjNzIG9wYWNpdHkgY3ViaWMtYmV6aWVyKDAuMiwgMC40LCAwLjQsIDAuMSk7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5O1xcbn1cXG4ucS1yaXBwbGUtYW5pbWF0aW9uLWVudGVyIHtcXG4gIHRyYW5zaXRpb246IG5vbmU7XFxufVxcbi5xLXJpcHBsZS1hbmltYXRpb24tdmlzaWJsZSB7XFxuICBvcGFjaXR5OiAwLjE1O1xcbn1cXG4ucS1yYWRpYWwtcmlwcGxlIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTUwJTtcXG4gIGxlZnQ6IC01MCU7XFxuICB3aWR0aDogMjAwJTtcXG4gIGhlaWdodDogMjAwJTtcXG59XFxuLnEtcmFkaWFsLXJpcHBsZTphZnRlciB7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgY3VycmVudENvbG9yIDEwJSwgdHJhbnNwYXJlbnQgMTAuMDElKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA1MCU7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEwLCAxMCk7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNXMsIG9wYWNpdHkgMXM7XFxufVxcbi5xLXJhZGlhbC1yaXBwbGUuYWN0aXZlOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMCwgMCk7XFxuICBvcGFjaXR5OiAwLjQ7XFxuICB0cmFuc2l0aW9uOiAwcztcXG59XFxuOnJvb3Qge1xcbiAgLS1xLXNpemUteHM6IDA7XFxuICAtLXEtc2l6ZS1zbTogNTc2cHg7XFxuICAtLXEtc2l6ZS1tZDogNzY4cHg7XFxuICAtLXEtc2l6ZS1sZzogOTkycHg7XFxuICAtLXEtc2l6ZS14bDogMTIwMHB4O1xcbn1cXG4uZml0IHtcXG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XFxuICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcXG59XFxuLmZ1bGwtaGVpZ2h0IHtcXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xcbn1cXG4uZnVsbC13aWR0aCB7XFxuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbn1cXG4ud2luZG93LWhlaWdodCB7XFxuICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7XFxuICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XFxuICBoZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7XFxufVxcbi53aW5kb3ctd2lkdGgge1xcbiAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDtcXG4gIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0YW50O1xcbiAgd2lkdGg6IDEwMHZ3ICFpbXBvcnRhbnQ7XFxufVxcbi5ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbn1cXG4uaW5saW5lLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50O1xcbn1cXG4ucS1wYS1ub25lIHtcXG4gIHBhZGRpbmc6IDAgMDtcXG59XFxuLnEtcGwtbm9uZSxcXG4ucS1weC1ub25lIHtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG59XFxuLnEtcHItbm9uZSxcXG4ucS1weC1ub25lIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxufVxcbi5xLXB0LW5vbmUsXFxuLnEtcHktbm9uZSB7XFxuICBwYWRkaW5nLXRvcDogMDtcXG59XFxuLnEtcGItbm9uZSxcXG4ucS1weS1ub25lIHtcXG4gIHBhZGRpbmctYm90dG9tOiAwO1xcbn1cXG4ucS1tYS1ub25lIHtcXG4gIG1hcmdpbjogMCAwO1xcbn1cXG4ucS1tbC1ub25lLFxcbi5xLW14LW5vbmUge1xcbiAgbWFyZ2luLWxlZnQ6IDA7XFxufVxcbi5xLW1yLW5vbmUsXFxuLnEtbXgtbm9uZSB7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxufVxcbi5xLW10LW5vbmUsXFxuLnEtbXktbm9uZSB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG4ucS1tYi1ub25lLFxcbi5xLW15LW5vbmUge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG59XFxuLnEtcGEteHMge1xcbiAgcGFkZGluZzogNHB4IDRweDtcXG59XFxuLnEtcGwteHMsXFxuLnEtcHgteHMge1xcbiAgcGFkZGluZy1sZWZ0OiA0cHg7XFxufVxcbi5xLXByLXhzLFxcbi5xLXB4LXhzIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDRweDtcXG59XFxuLnEtcHQteHMsXFxuLnEtcHkteHMge1xcbiAgcGFkZGluZy10b3A6IDRweDtcXG59XFxuLnEtcGIteHMsXFxuLnEtcHkteHMge1xcbiAgcGFkZGluZy1ib3R0b206IDRweDtcXG59XFxuLnEtbWEteHMge1xcbiAgbWFyZ2luOiA0cHggNHB4O1xcbn1cXG4ucS1tbC14cyxcXG4ucS1teC14cyB7XFxuICBtYXJnaW4tbGVmdDogNHB4O1xcbn1cXG4ucS1tci14cyxcXG4ucS1teC14cyB7XFxuICBtYXJnaW4tcmlnaHQ6IDRweDtcXG59XFxuLnEtbXQteHMsXFxuLnEtbXkteHMge1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbn1cXG4ucS1tYi14cyxcXG4ucS1teS14cyB7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxufVxcbi5xLXBhLXNtIHtcXG4gIHBhZGRpbmc6IDhweCA4cHg7XFxufVxcbi5xLXBsLXNtLFxcbi5xLXB4LXNtIHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbn1cXG4ucS1wci1zbSxcXG4ucS1weC1zbSB7XFxuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XFxufVxcbi5xLXB0LXNtLFxcbi5xLXB5LXNtIHtcXG4gIHBhZGRpbmctdG9wOiA4cHg7XFxufVxcbi5xLXBiLXNtLFxcbi5xLXB5LXNtIHtcXG4gIHBhZGRpbmctYm90dG9tOiA4cHg7XFxufVxcbi5xLW1hLXNtIHtcXG4gIG1hcmdpbjogOHB4IDhweDtcXG59XFxuLnEtbWwtc20sXFxuLnEtbXgtc20ge1xcbiAgbWFyZ2luLWxlZnQ6IDhweDtcXG59XFxuLnEtbXItc20sXFxuLnEtbXgtc20ge1xcbiAgbWFyZ2luLXJpZ2h0OiA4cHg7XFxufVxcbi5xLW10LXNtLFxcbi5xLW15LXNtIHtcXG4gIG1hcmdpbi10b3A6IDhweDtcXG59XFxuLnEtbWItc20sXFxuLnEtbXktc20ge1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbn1cXG4ucS1wYS1tZCB7XFxuICBwYWRkaW5nOiAxNnB4IDE2cHg7XFxufVxcbi5xLXBsLW1kLFxcbi5xLXB4LW1kIHtcXG4gIHBhZGRpbmctbGVmdDogMTZweDtcXG59XFxuLnEtcHItbWQsXFxuLnEtcHgtbWQge1xcbiAgcGFkZGluZy1yaWdodDogMTZweDtcXG59XFxuLnEtcHQtbWQsXFxuLnEtcHktbWQge1xcbiAgcGFkZGluZy10b3A6IDE2cHg7XFxufVxcbi5xLXBiLW1kLFxcbi5xLXB5LW1kIHtcXG4gIHBhZGRpbmctYm90dG9tOiAxNnB4O1xcbn1cXG4ucS1tYS1tZCB7XFxuICBtYXJnaW46IDE2cHggMTZweDtcXG59XFxuLnEtbWwtbWQsXFxuLnEtbXgtbWQge1xcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XFxufVxcbi5xLW1yLW1kLFxcbi5xLW14LW1kIHtcXG4gIG1hcmdpbi1yaWdodDogMTZweDtcXG59XFxuLnEtbXQtbWQsXFxuLnEtbXktbWQge1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuLnEtbWItbWQsXFxuLnEtbXktbWQge1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG59XFxuLnEtcGEtbGcge1xcbiAgcGFkZGluZzogMjRweCAyNHB4O1xcbn1cXG4ucS1wbC1sZyxcXG4ucS1weC1sZyB7XFxuICBwYWRkaW5nLWxlZnQ6IDI0cHg7XFxufVxcbi5xLXByLWxnLFxcbi5xLXB4LWxnIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDI0cHg7XFxufVxcbi5xLXB0LWxnLFxcbi5xLXB5LWxnIHtcXG4gIHBhZGRpbmctdG9wOiAyNHB4O1xcbn1cXG4ucS1wYi1sZyxcXG4ucS1weS1sZyB7XFxuICBwYWRkaW5nLWJvdHRvbTogMjRweDtcXG59XFxuLnEtbWEtbGcge1xcbiAgbWFyZ2luOiAyNHB4IDI0cHg7XFxufVxcbi5xLW1sLWxnLFxcbi5xLW14LWxnIHtcXG4gIG1hcmdpbi1sZWZ0OiAyNHB4O1xcbn1cXG4ucS1tci1sZyxcXG4ucS1teC1sZyB7XFxuICBtYXJnaW4tcmlnaHQ6IDI0cHg7XFxufVxcbi5xLW10LWxnLFxcbi5xLW15LWxnIHtcXG4gIG1hcmdpbi10b3A6IDI0cHg7XFxufVxcbi5xLW1iLWxnLFxcbi5xLW15LWxnIHtcXG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XFxufVxcbi5xLXBhLXhsIHtcXG4gIHBhZGRpbmc6IDQ4cHggNDhweDtcXG59XFxuLnEtcGwteGwsXFxuLnEtcHgteGwge1xcbiAgcGFkZGluZy1sZWZ0OiA0OHB4O1xcbn1cXG4ucS1wci14bCxcXG4ucS1weC14bCB7XFxuICBwYWRkaW5nLXJpZ2h0OiA0OHB4O1xcbn1cXG4ucS1wdC14bCxcXG4ucS1weS14bCB7XFxuICBwYWRkaW5nLXRvcDogNDhweDtcXG59XFxuLnEtcGIteGwsXFxuLnEtcHkteGwge1xcbiAgcGFkZGluZy1ib3R0b206IDQ4cHg7XFxufVxcbi5xLW1hLXhsIHtcXG4gIG1hcmdpbjogNDhweCA0OHB4O1xcbn1cXG4ucS1tbC14bCxcXG4ucS1teC14bCB7XFxuICBtYXJnaW4tbGVmdDogNDhweDtcXG59XFxuLnEtbXIteGwsXFxuLnEtbXgteGwge1xcbiAgbWFyZ2luLXJpZ2h0OiA0OHB4O1xcbn1cXG4ucS1tdC14bCxcXG4ucS1teS14bCB7XFxuICBtYXJnaW4tdG9wOiA0OHB4O1xcbn1cXG4ucS1tYi14bCxcXG4ucS1teS14bCB7XFxuICBtYXJnaW4tYm90dG9tOiA0OHB4O1xcbn1cXG4ucS1tbC1hdXRvLFxcbi5xLW14LWF1dG8ge1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcbi5xLW1yLWF1dG8sXFxuLnEtbXgtYXV0byB7XFxuICBtYXJnaW4tcmlnaHQ6IGF1dG87XFxufVxcbi5xLW15LWZvcm0ge1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG59XFxuLnEtdG91Y2gge1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHVzZXItZHJhZzogbm9uZTtcXG4gIC1raHRtbC11c2VyLWRyYWc6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTtcXG59XFxuLnEtdG91Y2gteCB7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBwYW4teDtcXG4gICAgICB0b3VjaC1hY3Rpb246IHBhbi14O1xcbn1cXG4ucS10b3VjaC15IHtcXG4gIC1tcy10b3VjaC1hY3Rpb246IHBhbi15O1xcbiAgICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7XFxufVxcbmJvZHkge1xcbiAgbWluLXdpZHRoOiAxMDBweDtcXG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgJy1hcHBsZS1zeXN0ZW0nLCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XFxuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcXG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XFxuICBmb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgY29sb3I6ICMwYzBjMGM7XFxuICBtaW4taGVpZ2h0OiAxMDB2aDtcXG59XFxuaDEge1xcbiAgZm9udC1zaXplOiAxMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBsaW5lLWhlaWdodDogMS4xMjtcXG4gIGxldHRlci1zcGFjaW5nOiAtMC4wNGVtO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDEge1xcbiAgICBmb250LXNpemU6IDY3LjJweDtcXG4gIH1cXG59XFxuaDIge1xcbiAgZm9udC1zaXplOiA1NnB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjM1O1xcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoMiB7XFxuICAgIGZvbnQtc2l6ZTogMzMuNnB4O1xcbiAgfVxcbn1cXG5oMyB7XFxuICBmb250LXNpemU6IDQ1cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDQ4cHg7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDMge1xcbiAgICBmb250LXNpemU6IDI3cHg7XFxuICB9XFxufVxcbmg0IHtcXG4gIGZvbnQtc2l6ZTogMzRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDBweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7XFxuICBoNCB7XFxuICAgIGZvbnQtc2l6ZTogMjAuNHB4O1xcbiAgfVxcbn1cXG5oNSB7XFxuICBmb250LXNpemU6IDI0cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDUge1xcbiAgICBmb250LXNpemU6IDE0LjM5OTk5OTk5OTk5OTk5OXB4O1xcbiAgfVxcbn1cXG5oNiB7XFxuICBmb250LXNpemU6IDIwcHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMTI7XFxuICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xcbn1cXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xcbiAgaDYge1xcbiAgICBmb250LXNpemU6IDEycHg7XFxuICB9XFxufVxcbi5xLWRpc3BsYXktNC1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuNTQ7XFxufVxcbi5xLWRpc3BsYXktNCB7XFxuICBmb250LXNpemU6IDExMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjA0ZW07XFxufVxcbi5xLWRpc3BsYXktMy1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuNTQ7XFxufVxcbi5xLWRpc3BsYXktMyB7XFxuICBmb250LXNpemU6IDU2cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDEuMzU7XFxuICBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTtcXG59XFxuLnEtZGlzcGxheS0yLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtZGlzcGxheS0yIHtcXG4gIGZvbnQtc2l6ZTogNDVweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogNDhweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbi5xLWRpc3BsYXktMS1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuNTQ7XFxufVxcbi5xLWRpc3BsYXktMSB7XFxuICBmb250LXNpemU6IDM0cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XFxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xcbn1cXG4ucS1oZWFkbGluZS1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuODc7XFxufVxcbi5xLWhlYWRsaW5lIHtcXG4gIGZvbnQtc2l6ZTogMjRweDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBsaW5lLWhlaWdodDogMzJweDtcXG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XFxufVxcbi5xLXRpdGxlLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtdGl0bGUge1xcbiAgZm9udC1zaXplOiAyMHB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGxpbmUtaGVpZ2h0OiAxLjEyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcXG59XFxuLnEtc3ViaGVhZGluZy1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuODc7XFxufVxcbi5xLXN1YmhlYWRpbmcge1xcbiAgZm9udC1zaXplOiAxNnB4O1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLnEtYm9keS0yLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC44NztcXG59XFxuLnEtYm9keS0yIHtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcbi5xLWJvZHktMS1vcGFjaXR5IHtcXG4gIG9wYWNpdHk6IDAuODc7XFxufVxcbi5xLWJvZHktMSB7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4ucS1jYXB0aW9uLW9wYWNpdHkge1xcbiAgb3BhY2l0eTogMC41NDtcXG59XFxuLnEtY2FwdGlvbiB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5wIHtcXG4gIG1hcmdpbjogMCAwIDE2cHg7XFxufVxcbi5jYXB0aW9uIHtcXG4gIGNvbG9yOiAjNDI0MjQyO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXdlaWdodDogMzAwO1xcbn1cXG4udXBwZXJjYXNlIHtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxufVxcbi5sb3dlcmNhc2Uge1xcbiAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcXG59XFxuLmNhcGl0YWxpemUge1xcbiAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XFxufVxcbi50ZXh0LWNlbnRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi50ZXh0LWxlZnQge1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuLnRleHQtcmlnaHQge1xcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi50ZXh0LWp1c3RpZnkge1xcbiAgdGV4dC1hbGlnbjoganVzdGlmeTtcXG4gIC13ZWJraXQtaHlwaGVuczogYXV0bztcXG4gICAgICAtbXMtaHlwaGVuczogYXV0bztcXG4gICAgICAgICAgaHlwaGVuczogYXV0bztcXG59XFxuLnRleHQtaXRhbGljIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XFxuLnRleHQtYm9sZCB7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG59XFxuLnRleHQtbm8td3JhcCB7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4udGV4dC13ZWlnaHQtdGhpbiB7XFxuICBmb250LXdlaWdodDogMTAwO1xcbn1cXG4udGV4dC13ZWlnaHQtbGlnaHQge1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG59XFxuLnRleHQtd2VpZ2h0LXJlZ3VsYXIge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLnRleHQtd2VpZ2h0LW1lZGl1bSB7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG4udGV4dC13ZWlnaHQtYm9sZCB7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG4udGV4dC13ZWlnaHQtYm9sZGVyIHtcXG4gIGZvbnQtd2VpZ2h0OiA5MDA7XFxufVxcbnNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogODAlO1xcbn1cXG5iaWcge1xcbiAgZm9udC1zaXplOiAxNzAlO1xcbn1cXG5zdWIge1xcbiAgYm90dG9tOiAtMC4yNWVtO1xcbn1cXG5zdXAge1xcbiAgdG9wOiAtMC41ZW07XFxufVxcbmJsb2NrcXVvdGUge1xcbiAgcGFkZGluZzogOHB4IDE2cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDE2cHg7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkICMwMjdiZTM7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxufVxcbmJsb2NrcXVvdGUudGV4dC1yaWdodCB7XFxuICBwYWRkaW5nLXJpZ2h0OiAxNnB4O1xcbiAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHZhcigtLXEtY29sb3ItcHJpbWFyeSk7XFxuICBib3JkZXItbGVmdDogMDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbn1cXG5ibG9ja3F1b3RlIHNtYWxsIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbGluZS1oZWlnaHQ6IDEuNDtcXG4gIGNvbG9yOiAjNzc3O1xcbiAgY29sb3I6IHZhcigtLXEtY29sb3ItZmFkZWQpO1xcbn1cXG5ibG9ja3F1b3RlIHNtYWxsOmJlZm9yZSB7XFxuICBjb250ZW50OiAnXFxcXDIwMTQgICBcXFxcQTAnO1xcbn1cXG4ucXVvdGUge1xcbiAgcGFkZGluZzogMTBweCAyMHB4O1xcbiAgbWFyZ2luOiAwIDAgMjBweDtcXG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzAyN2JlMztcXG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdmFyKC0tcS1jb2xvci1wcmltYXJ5KTtcXG59XFxuLnF1b3RlLnRleHQtcmlnaHQge1xcbiAgcGFkZGluZy1yaWdodDogMTVweDtcXG4gIHBhZGRpbmctbGVmdDogMDtcXG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkICMwMjdiZTM7XFxuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB2YXIoLS1xLWNvbG9yLXByaW1hcnkpO1xcbiAgYm9yZGVyLWxlZnQ6IDA7XFxuICB0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuZHQge1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxufVxcbmRkIHtcXG4gIG1hcmdpbi1sZWZ0OiAwO1xcbn1cXG5kdCxcXG5kZCB7XFxuICBsaW5lLWhlaWdodDogMS40O1xcbn1cXG5kbCB7XFxuICBtYXJnaW4tdG9wOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG59XFxuZGwuaG9yaXpvbnRhbCBkdCB7XFxuICBmbG9hdDogbGVmdDtcXG4gIHdpZHRoOiAyNSU7XFxuICBjbGVhcjogbGVmdDtcXG4gIHRleHQtYWxpZ246IHJpZ2h0O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG59XFxuZGwuaG9yaXpvbnRhbCBkZCB7XFxuICBtYXJnaW4tbGVmdDogMzAlO1xcbn1cXG5oci5xLWhyLFxcbmhyLnEtaHItZGFyayB7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG1pbi1oZWlnaHQ6IDFweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMTIpO1xcbn1cXG5oci5xLWhyLWRhcmsge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjM2KTtcXG59XFxuLm5vLW1hcmdpbiB7XFxuICBtYXJnaW46IDAgIWltcG9ydGFudDtcXG59XFxuLm5vLXBhZGRpbmcge1xcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xcbn1cXG4ubm8tYm9yZGVyIHtcXG4gIGJvcmRlcjogMCAhaW1wb3J0YW50O1xcbn1cXG4ubm8tYm9yZGVyLXJhZGl1cyB7XFxuICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XFxufVxcbi5uby1ib3gtc2hhZG93IHtcXG4gIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuLm5vLW91dGxpbmUge1xcbiAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xcbn1cXG4uZWxsaXBzaXMge1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuLmVsbGlwc2lzLTItbGluZXMsXFxuLmVsbGlwc2lzLTMtbGluZXMge1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbn1cXG4uZWxsaXBzaXMtMi1saW5lcyB7XFxuICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XFxufVxcbi5lbGxpcHNpcy0zLWxpbmVzIHtcXG4gIC13ZWJraXQtbGluZS1jbGFtcDogMztcXG59XFxuLnJlYWRvbmx5IHtcXG4gIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50O1xcbn1cXG4uZGlzYWJsZWQsXFxuW2Rpc2FibGVkXSxcXG4uZGlzYWJsZWQgKixcXG5bZGlzYWJsZWRdICoge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZCAhaW1wb3J0YW50O1xcbn1cXG4uZGlzYWJsZWQsXFxuW2Rpc2FibGVkXSB7XFxuICBvcGFjaXR5OiAwLjYgIWltcG9ydGFudDtcXG59XFxuLmhpZGRlbiB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbi5pbnZpc2libGUge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XFxufVxcbi50cmFuc3BhcmVudCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbn1cXG4ub3ZlcmZsb3ctYXV0byB7XFxuICBvdmVyZmxvdzogYXV0byAhaW1wb3J0YW50O1xcbn1cXG4ub3ZlcmZsb3ctaGlkZGVuIHtcXG4gIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcXG59XFxuLm92ZXJmbG93LWhpZGRlbi15IHtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbiAhaW1wb3J0YW50O1xcbn1cXG4uZGltbWVkOmFmdGVyLFxcbi5saWdodC1kaW1tZWQ6YWZ0ZXIge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxufVxcbi5kaW1tZWQ6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjQpICFpbXBvcnRhbnQ7XFxufVxcbi5saWdodC1kaW1tZWQ6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjYpICFpbXBvcnRhbnQ7XFxufVxcbi56LXRvcCB7XFxuICB6LWluZGV4OiA3MDAwICFpbXBvcnRhbnQ7XFxufVxcbi56LW1heCB7XFxuICB6LWluZGV4OiA5OTk4ICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5kZXNrdG9wKSAuZGVza3RvcC1vbmx5LFxcbmJvZHkuZGVza3RvcCAuZGVza3RvcC1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLm1vYmlsZSkgLm1vYmlsZS1vbmx5LFxcbmJvZHkubW9iaWxlIC5tb2JpbGUtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5jb3Jkb3ZhKSAuY29yZG92YS1vbmx5LFxcbmJvZHkuY29yZG92YSAuY29yZG92YS1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmVsZWN0cm9uKSAuZWxlY3Ryb24tb25seSxcXG5ib2R5LmVsZWN0cm9uIC5lbGVjdHJvbi1oaWRlIHtcXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG59XFxuYm9keTpub3QoLmlvcykgLmlvcy1vbmx5LFxcbmJvZHkuaW9zIC5pb3MtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5tYXQpIC5tYXQtb25seSxcXG5ib2R5Lm1hdCAubWF0LWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgudG91Y2gpIC50b3VjaC1vbmx5LFxcbmJvZHkudG91Y2ggLnRvdWNoLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgud2l0aGluLWlmcmFtZSkgLndpdGhpbi1pZnJhbWUtb25seSxcXG5ib2R5LndpdGhpbi1pZnJhbWUgLndpdGhpbi1pZnJhbWUtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbmJvZHk6bm90KC5wbGF0Zm9ybS1pb3MpIC5wbGF0Zm9ybS1pb3Mtb25seSxcXG5ib2R5LnBsYXRmb3JtLWlvcyAucGxhdGZvcm0taW9zLWhpZGUge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5ib2R5Om5vdCgucGxhdGZvcm0tYW5kcm9pZCkgLnBsYXRmb3JtLWFuZHJvaWQtb25seSxcXG5ib2R5LnBsYXRmb3JtLWFuZHJvaWQgLnBsYXRmb3JtLWFuZHJvaWQtaGlkZSB7XFxuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcbkBtZWRpYSBhbGwgYW5kIChvcmllbnRhdGlvbjogcG9ydHJhaXQpIHtcXG4gIC5vcmllbnRhdGlvbi1sYW5kc2NhcGUge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSBhbGwgYW5kIChvcmllbnRhdGlvbjogbGFuZHNjYXBlKSB7XFxuICAub3JpZW50YXRpb24tcG9ydHJhaXQge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSBzY3JlZW4ge1xcbiAgLnByaW50LW9ubHkge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSBwcmludCB7XFxuICAucHJpbnQtaGlkZSB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtYXgtd2lkdGg6IDU3NXB4KSB7XFxuICAueHMtaGlkZSxcXG4gIC5ndC14cyxcXG4gIC5zbSxcXG4gIC5ndC1zbSxcXG4gIC5tZCxcXG4gIC5ndC1tZCxcXG4gIC5sZyxcXG4gIC5ndC1sZyxcXG4gIC54bCB7XFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcXG4gIH1cXG59XFxuQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSBhbmQgKG1heC13aWR0aDogNzY3cHgpIHtcXG4gIC5zbS1oaWRlLFxcbiAgLnhzLFxcbiAgLmx0LXNtLFxcbiAgLmd0LXNtLFxcbiAgLm1kLFxcbiAgLmd0LW1kLFxcbiAgLmxnLFxcbiAgLmd0LWxnLFxcbiAgLnhsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIGFuZCAobWF4LXdpZHRoOiA5OTFweCkge1xcbiAgLm1kLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuc20sXFxuICAubHQtbWQsXFxuICAuZ3QtbWQsXFxuICAubGcsXFxuICAuZ3QtbGcsXFxuICAueGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTlweCkge1xcbiAgLmxnLWhpZGUsXFxuICAueHMsXFxuICAubHQtc20sXFxuICAuc20sXFxuICAubHQtbWQsXFxuICAubWQsXFxuICAubHQtbGcsXFxuICAuZ3QtbGcsXFxuICAueGwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICB9XFxufVxcbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcXG4gIC54bC1oaWRlLFxcbiAgLnhzLFxcbiAgLmx0LXNtLFxcbiAgLnNtLFxcbiAgLmx0LW1kLFxcbiAgLm1kLFxcbiAgLmx0LWxnLFxcbiAgLmxnLFxcbiAgLmx0LXhsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG4ucS1mb2N1cy1oZWxwZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMCAvKiBydGw6aWdub3JlICovO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7XFxuICBvcGFjaXR5OiAwLjE1O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuNSwgMSk7XFxufVxcbi5xLWZvY3VzLWhlbHBlci1yb3VuZGVkIHtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuLnEtZm9jdXMtaGVscGVyLXJvdW5kIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuYm9keS5kZXNrdG9wIC5xLWZvY3VzYWJsZTpmb2N1cyAucS1mb2N1cy1oZWxwZXIsXFxuYm9keS5kZXNrdG9wIC5xLWhvdmVyYWJsZTpob3ZlciAucS1mb2N1cy1oZWxwZXIge1xcbiAgYmFja2dyb3VuZDogY3VycmVudENvbG9yO1xcbn1cXG5ib2R5LmlvcyAucS1ob3ZlcmFibGU6YWN0aXZlIC5xLWZvY3VzLWhlbHBlciB7XFxuICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcbkBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKSwgKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKSB7XFxuICAucS1pZiA+IC5xLWlmLWlubmVyIHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3g7XFxuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbiAgfVxcbiAgLnEtaWYgPiAucS1pZi1pbm5lciA+IGRpdiA+IC5xLWlucHV0LXRhcmdldCB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIgPiBkaXYgPiBpbnB1dC5xLWlucHV0LXRhcmdldCB7XFxuICAgIG1pbi13aWR0aDogM3JlbTtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDAlICFpbXBvcnRhbnQ7XFxuICAgICAgICBmbGV4LWJhc2lzOiAwJSAhaW1wb3J0YW50O1xcbiAgfVxcbiAgLnEtaW5wdXQtdGFyZ2V0OmJlZm9yZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgfVxcbiAgLnEtaWYtbGFiZWwtc3BhY2VyIHtcXG4gICAgd2lkdGg6IDA7XFxuICB9XFxuICAucS1lZGl0b3ItdG9vbGJhciAucS1idG4tZ3JvdXAucm93LmlubGluZSB7XFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgfVxcbiAgLnEtdG9vbGJhcixcXG4gIC5xLWFjdGlvbnNoZWV0LXRpdGxlLFxcbiAgLnEtZmllbGQtbGFiZWwtaW5uZXIge1xcbiAgICBoZWlnaHQ6IDBweDtcXG4gIH1cXG4gIC5xLWNhcm91c2VsLXNsaWRlIHtcXG4gICAgbWF4LXdpZHRoOiAxMDAlO1xcbiAgfVxcbiAgLnJvdyA+IC5jb2wucS1hbGVydC1jb250ZW50IHtcXG4gICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IGF1dG87XFxuICAgICAgICBmbGV4LWJhc2lzOiBhdXRvO1xcbiAgfVxcbiAgLnEtc2xpZGVyLWhhbmRsZSA+IC5xLWNoaXAuaW5saW5lLnJvdyB7XFxuICAgIGRpc3BsYXk6IHRhYmxlO1xcbiAgfVxcbiAgYS5xLWJ0bjpub3QoLnEtYnRuLXJvdW5kKSB7XFxuICAgIGhlaWdodDogMHB4O1xcbiAgfVxcbiAgLnEtYnRuIC5xLWJ0bi1pbm5lciB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUgLnEtYnRuLWlubmVyLFxcbiAgLnEtYnRuLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDFweCAxcHggLTFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuOmFjdGl2ZS5xLWJ0bi1wdXNoLmRpc2FibGVkIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUucS1idG4tcHVzaC5kaXNhYmxlZCAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IC0xcHggMXB4IDFweCAtMXB4O1xcbiAgfVxcbiAgLnEtYnRuLWdyb3VwID4gLnEtYnRuLnEtYnRuLXB1c2g6bm90KC5kaXNhYmxlZCk6YWN0aXZlIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi1ncm91cCA+IC5xLWJ0bi5xLWJ0bi1wdXNoOm5vdCguZGlzYWJsZWQpLmFjdGl2ZSAucS1idG4taW5uZXIge1xcbiAgICBtYXJnaW46IDA7XFxuICB9XFxuICAucS1jaGlwOm5vdCgucS1jaGlwLXNtYWxsKTpub3QoLnEtY2hpcC1kZW5zZSkgLnEtY2hpcC1tYWluIHtcXG4gICAgbGluZS1oZWlnaHQ6IDMycHg7XFxuICB9XFxuICAucS1idG4gLnEtY2hpcCB7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIH1cXG4gIC5xLXRhYiAucS1jaGlwIC5xLWNoaXAtbWFpbiB7XFxuICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7XFxuICB9XFxuICAucS1mYWItYWN0aW9ucy5xLWZhYi1sZWZ0LFxcbiAgLnEtZmFiLWFjdGlvbnMucS1mYWItcmlnaHQge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIH1cXG4gIC5xLWl0ZW0tbWFpbiB7XFxuICAgIG1pbi13aWR0aDogMXB4O1xcbiAgfVxcbiAgLnEtbGF5b3V0LWRyYXdlci1taW5pIC5xLWl0ZW0ge1xcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XFxuICAgIHBhZGRpbmctcmlnaHQ6IDA7XFxuICB9XFxuICAucS1tb2RhbC1sYXlvdXQge1xcbiAgICBtaW4taGVpZ2h0OiA4MHZoICFpbXBvcnRhbnQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICB9XFxufVxcbkBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjogYXV0bykge1xcbiAgLnEtaWYgPiAucS1pZi1pbm5lciB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gICAgZGlzcGxheTogLW1zLWlubGluZS1mbGV4Ym94O1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG4gIH1cXG4gIC5xLWlmID4gLnEtaWYtaW5uZXIgPiBkaXYgPiAucS1pbnB1dC10YXJnZXQge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAucS1pZiA+IC5xLWlmLWlubmVyID4gZGl2ID4gaW5wdXQucS1pbnB1dC10YXJnZXQge1xcbiAgICBtaW4td2lkdGg6IDNyZW07XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiAwJSAhaW1wb3J0YW50O1xcbiAgICAgICAgZmxleC1iYXNpczogMCUgIWltcG9ydGFudDtcXG4gIH1cXG4gIC5xLWlucHV0LXRhcmdldDpiZWZvcmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gIH1cXG4gIC5xLWlmLWxhYmVsLXNwYWNlciB7XFxuICAgIHdpZHRoOiAwO1xcbiAgfVxcbiAgLnEtZWRpdG9yLXRvb2xiYXIgLnEtYnRuLWdyb3VwLnJvdy5pbmxpbmUge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIH1cXG4gIC5xLXRvb2xiYXIsXFxuICAucS1hY3Rpb25zaGVldC10aXRsZSxcXG4gIC5xLWZpZWxkLWxhYmVsLWlubmVyIHtcXG4gICAgaGVpZ2h0OiAwcHg7XFxuICB9XFxuICAucS1jYXJvdXNlbC1zbGlkZSB7XFxuICAgIG1heC13aWR0aDogMTAwJTtcXG4gIH1cXG4gIC5yb3cgPiAuY29sLnEtYWxlcnQtY29udGVudCB7XFxuICAgIC1tcy1mbGV4LXByZWZlcnJlZC1zaXplOiBhdXRvO1xcbiAgICAgICAgZmxleC1iYXNpczogYXV0bztcXG4gIH1cXG4gIC5xLXNsaWRlci1oYW5kbGUgPiAucS1jaGlwLmlubGluZS5yb3cge1xcbiAgICBkaXNwbGF5OiB0YWJsZTtcXG4gIH1cXG4gIGEucS1idG46bm90KC5xLWJ0bi1yb3VuZCkge1xcbiAgICBoZWlnaHQ6IDBweDtcXG4gIH1cXG4gIC5xLWJ0biAucS1idG4taW5uZXIge1xcbiAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogYXV0bztcXG4gICAgICAgIGZsZXgtYmFzaXM6IGF1dG87XFxuICB9XFxuICAucS1idG46YWN0aXZlIC5xLWJ0bi1pbm5lcixcXG4gIC5xLWJ0bi5hY3RpdmUgLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAtMXB4IDFweCAxcHggLTFweDtcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUucS1idG4tcHVzaCAucS1idG4taW5uZXIsXFxuICAucS1idG4uYWN0aXZlLnEtYnRuLXB1c2ggLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAxcHggMXB4IC0xcHggLTFweDtcXG4gIH1cXG4gIC5xLWJ0bjphY3RpdmUucS1idG4tcHVzaC5kaXNhYmxlZCAucS1idG4taW5uZXIsXFxuICAucS1idG4uYWN0aXZlLnEtYnRuLXB1c2guZGlzYWJsZWQgLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAtMXB4IDFweCAxcHggLTFweDtcXG4gIH1cXG4gIC5xLWJ0bi1ncm91cCA+IC5xLWJ0bi5xLWJ0bi1wdXNoOm5vdCguZGlzYWJsZWQpOmFjdGl2ZSAucS1idG4taW5uZXIsXFxuICAucS1idG4tZ3JvdXAgPiAucS1idG4ucS1idG4tcHVzaDpub3QoLmRpc2FibGVkKS5hY3RpdmUgLnEtYnRuLWlubmVyIHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgfVxcbiAgLnEtY2hpcDpub3QoLnEtY2hpcC1zbWFsbCk6bm90KC5xLWNoaXAtZGVuc2UpIC5xLWNoaXAtbWFpbiB7XFxuICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xcbiAgfVxcbiAgLnEtYnRuIC5xLWNoaXAge1xcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB9XFxuICAucS10YWIgLnEtY2hpcCAucS1jaGlwLW1haW4ge1xcbiAgICBsaW5lLWhlaWdodDogbm9ybWFsO1xcbiAgfVxcbiAgLnEtZmFiLWFjdGlvbnMucS1mYWItbGVmdCxcXG4gIC5xLWZhYi1hY3Rpb25zLnEtZmFiLXJpZ2h0IHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB9XFxuICAucS1pdGVtLW1haW4ge1xcbiAgICBtaW4td2lkdGg6IDFweDtcXG4gIH1cXG4gIC5xLWxheW91dC1kcmF3ZXItbWluaSAucS1pdGVtIHtcXG4gICAgcGFkZGluZy1sZWZ0OiAwO1xcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xcbiAgfVxcbiAgLnEtbW9kYWwtbGF5b3V0IHtcXG4gICAgbWluLWhlaWdodDogODB2aCAhaW1wb3J0YW50O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHdlYmtpdC1hdXRvZmlsbC1vbiB7XFxuICB0byB7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICBjb2xvcjogI2ZmOTgwMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyB3ZWJraXQtYXV0b2ZpbGwtb2ZmIHtcXG4gIHRvIHtcXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wcm9ncmVzcy1pbmRldGVybWluYXRlIHtcXG4gIDAlIHtcXG4gICAgbGVmdDogLTM1JTtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICA2MCUge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgICByaWdodDogLTkwJTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBsZWZ0OiAxMDAlO1xcbiAgICByaWdodDogLTkwJTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtc2hvcnQge1xcbiAgMCUge1xcbiAgICBsZWZ0OiAtMjAwJTtcXG4gICAgcmlnaHQ6IDEwMCU7XFxuICB9XFxuICA2MCUge1xcbiAgICBsZWZ0OiAxMDclO1xcbiAgICByaWdodDogLTglO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIGxlZnQ6IDEwNyU7XFxuICAgIHJpZ2h0OiAtOCU7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wcm9ncmVzcy1zdHJpcGVzIHtcXG4gIGZyb20ge1xcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiA0MHB4IDA7XFxuICB9XFxuICB0byB7XFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLW1hdC1kYXNoIHtcXG4gIDAlIHtcXG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwO1xcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg5LCAyMDA7XFxuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMzVweDtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4OSwgMjAwO1xcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTEyNHB4O1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtaGlnaGxpZ2h0IHtcXG4gIDAlIHtcXG4gICAgYmFja2dyb3VuZDogI2NkZGMzOTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXJvdGF0ZSB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDApIC8qIHJ0bDppZ25vcmUgKi87XFxuICB9XFxuICAyNSUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDUwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDc1JSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG4gIDEwMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIC8qIHJ0bDppZ25vcmUgKi87XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1ibGluayB7XFxuICB0byB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNwaW4ge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKSAvKiBydGw6aWdub3JlICovO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM1OWRlZykgLyogcnRsOmlnbm9yZSAqLztcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXBvcCB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTtcXG4gIH1cXG4gIDcwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNyk7XFxuICB9XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLWZhZGUge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1zY2FsZSB7XFxuICAwJSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTtcXG4gIH1cXG4gIDEwMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtYm91bmNlIHtcXG4gIDAlLCAyMCUsIDUwJSwgODAlLCAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xcbiAgfVxcbiAgNDAlIHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0zMHB4KTtcXG4gIH1cXG4gIDYwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1zaGFrZSB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxuICA1MCUge1xcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDIpO1xcbiAgfVxcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1wb3B1cC1kb3duIHtcXG4gIDAlIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KSBzY2FsZVkoMC4zKTtcXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICB9XFxuICAzMCUge1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIHEtcG9wdXAtdXAge1xcbiAgMCUge1xcbiAgICBvcGFjaXR5OiAwO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGVZKDAuMyk7XFxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgfVxcbiAgMzAlIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBxLXNsaWRlLWxlZnQge1xcbiAgMCUge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTcwJSk7XFxuICB9XFxufVxcbkBrZXlmcmFtZXMgcS1zbGlkZS1yaWdodCB7XFxuICAwJSB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg3MCUpO1xcbiAgfVxcbn1cXG5cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIlxcbmJ1dHRvbiArIGJ1dHRvbltkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1hcmdpbi1sZWZ0OiAwLjVlbTtcXG59XFxuYnV0dG9uW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgcGFkZGluZzogMC40ZW0gMC42ZW07XFxuICBib3JkZXItcmFkaXVzOiA1cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgb3V0bGluZTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuYnV0dG9uW2Rpc2FibGVkXVtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGJvcmRlci1jb2xvcjogI2FlNjVjNTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuLm1vZGFsW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgY29sb3I6IHJlZDtcXG59XFxuXFxuLyoqXFxuICogU2VlIGh0dHBzOi8vdnVlLWxvYWRlci52dWVqcy5vcmcvZ3VpZGUvc2NvcGVkLWNzcy5odG1sI2RlZXAtc2VsZWN0b3JzXFxuICogdGhlIGA+Pj5gIGFsbG93cyB0byBhcHBseSBzY29wZWQgY3NzIHRvIGNoaWxkIGVsZW1lbnQgdGhhdCBpcyBnZW5lcmF0ZWRcXG4gKiBkeW5hbWljYWxseVxcbioqL1xcbi5tb2RhbFtkYXRhLXYtNGZiYzczNWJdIC5tb2RhbC1zY3JvbGwge1xcbiAgY29sb3I6IHJlZDtcXG4gIG1heC1oZWlnaHQ6IG5vbmU7XFxufVxcbi5tb2RhbCAubW9kYWwtYm9keVtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIG1heC1oZWlnaHQ6IG5vbmU7XFxufVxcbmgxW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgZm9udC1mYW1pbHk6IENvdXJpZXI7XFxuICBmb250LXNpemU6IDJyZW07XFxufVxcbmgyW2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgZm9udC1mYW1pbHk6IENvdXJpZXI7XFxuICBmb250LXNpemU6IDEuMjVyZW07XFxuICBtYXJnaW4tdG9wOiAycmVtO1xcbn1cXG4uYXBwIC5yb3dbZGF0YS12LTRmYmM3MzViXSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuLnJvdyArIC5yb3dbZGF0YS12LTRmYmM3MzViXSB7XFxuICBtYXJnaW4tdG9wOiAyZW07XFxufVxcbi5yb3ctc21hbGxbZGF0YS12LTRmYmM3MzViXSB7XFxuICBtYXJnaW4tdG9wOiAxZW07XFxufVxcbi5lbW9qaS1tYXJ0W2RhdGEtdi00ZmJjNzM1Yl0ge1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG4uZW1vamktbWFydC10aXRsZS1sYWJlbFtkYXRhLXYtNGZiYzczNWJdIHtcXG4gIGZvbnQtc2l6ZTogMjFweDtcXG59XFxuXCIsIFwiXCJdKTtcblxuLy8gZXhwb3J0c1xuIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcbiIsIi8qIVxuICogUXVhc2FyIEZyYW1ld29yayB2MC4xNy4yMFxuICogKGMpIDIwMTYtcHJlc2VudCBSYXp2YW4gU3RvZW5lc2N1XG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cbnZhciB3ZWJTdG9yYWdlLGlzU1NSPVwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3csZnJvbVNTUj0hMSxvblNTUj1pc1NTUjtmdW5jdGlvbiBnZXRNYXRjaCh0LGUpe3ZhciBpPS8oZWRnZSlcXC8oW1xcdy5dKykvLmV4ZWModCl8fC8ob3ByKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHZpdmFsZGkpW1xcL10oW1xcdy5dKykvLmV4ZWModCl8fC8oY2hyb21lKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKGllbW9iaWxlKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHZlcnNpb24pKGFwcGxld2Via2l0KVtcXC9dKFtcXHcuXSspLiooc2FmYXJpKVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKHdlYmtpdClbXFwvXShbXFx3Ll0rKS4qKHZlcnNpb24pW1xcL10oW1xcdy5dKykuKihzYWZhcmkpW1xcL10oW1xcdy5dKykvLmV4ZWModCl8fC8od2Via2l0KVtcXC9dKFtcXHcuXSspLy5leGVjKHQpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpW1xcL10oW1xcdy5dKykvLmV4ZWModCl8fC8obXNpZSkgKFtcXHcuXSspLy5leGVjKHQpfHx0LmluZGV4T2YoXCJ0cmlkZW50XCIpPj0wJiYvKHJ2KSg/Ojp8ICkoW1xcdy5dKykvLmV4ZWModCl8fHQuaW5kZXhPZihcImNvbXBhdGlibGVcIik8MCYmLyhtb3ppbGxhKSg/Oi4qPyBydjooW1xcdy5dKyl8KS8uZXhlYyh0KXx8W107cmV0dXJue2Jyb3dzZXI6aVs1XXx8aVszXXx8aVsxXXx8XCJcIix2ZXJzaW9uOmlbMl18fGlbNF18fFwiMFwiLHZlcnNpb25OdW1iZXI6aVs0XXx8aVsyXXx8XCIwXCIscGxhdGZvcm06ZVswXXx8XCJcIn19ZnVuY3Rpb24gZ2V0UGxhdGZvcm1NYXRjaCh0KXtyZXR1cm4vKGlwYWQpLy5leGVjKHQpfHwvKGlwb2QpLy5leGVjKHQpfHwvKHdpbmRvd3MgcGhvbmUpLy5leGVjKHQpfHwvKGlwaG9uZSkvLmV4ZWModCl8fC8oa2luZGxlKS8uZXhlYyh0KXx8LyhzaWxrKS8uZXhlYyh0KXx8LyhhbmRyb2lkKS8uZXhlYyh0KXx8Lyh3aW4pLy5leGVjKHQpfHwvKG1hYykvLmV4ZWModCl8fC8obGludXgpLy5leGVjKHQpfHwvKGNyb3MpLy5leGVjKHQpfHwvKHBsYXlib29rKS8uZXhlYyh0KXx8LyhiYikvLmV4ZWModCl8fC8oYmxhY2tiZXJyeSkvLmV4ZWModCl8fFtdfWZ1bmN0aW9uIGdldFBsYXRmb3JtKHQpe3ZhciBlPWdldE1hdGNoKHQ9KHR8fG5hdmlnYXRvci51c2VyQWdlbnR8fG5hdmlnYXRvci52ZW5kb3J8fHdpbmRvdy5vcGVyYSkudG9Mb3dlckNhc2UoKSxnZXRQbGF0Zm9ybU1hdGNoKHQpKSxpPXt9O3JldHVybiBlLmJyb3dzZXImJihpW2UuYnJvd3Nlcl09ITAsaS52ZXJzaW9uPWUudmVyc2lvbixpLnZlcnNpb25OdW1iZXI9cGFyc2VJbnQoZS52ZXJzaW9uTnVtYmVyLDEwKSksZS5wbGF0Zm9ybSYmKGlbZS5wbGF0Zm9ybV09ITApLChpLmFuZHJvaWR8fGkuYmJ8fGkuYmxhY2tiZXJyeXx8aS5pcGFkfHxpLmlwaG9uZXx8aS5pcG9kfHxpLmtpbmRsZXx8aS5wbGF5Ym9va3x8aS5zaWxrfHxpW1wid2luZG93cyBwaG9uZVwiXSkmJihpLm1vYmlsZT0hMCksKGkuaXBvZHx8aS5pcGFkfHxpLmlwaG9uZSkmJihpLmlvcz0hMCksaVtcIndpbmRvd3MgcGhvbmVcIl0mJihpLndpbnBob25lPSEwLGRlbGV0ZSBpW1wid2luZG93cyBwaG9uZVwiXSksKGkuY3Jvc3x8aS5tYWN8fGkubGludXh8fGkud2luKSYmKGkuZGVza3RvcD0hMCksKGkuY2hyb21lfHxpLm9wcnx8aS5zYWZhcml8fGkudml2YWxkaSkmJihpLndlYmtpdD0hMCksKGkucnZ8fGkuaWVtb2JpbGUpJiYoZS5icm93c2VyPVwiaWVcIixpLmllPSEwKSxpLmVkZ2UmJihlLmJyb3dzZXI9XCJlZGdlXCIsaS5lZGdlPSEwKSwoaS5zYWZhcmkmJmkuYmxhY2tiZXJyeXx8aS5iYikmJihlLmJyb3dzZXI9XCJibGFja2JlcnJ5XCIsaS5ibGFja2JlcnJ5PSEwKSxpLnNhZmFyaSYmaS5wbGF5Ym9vayYmKGUuYnJvd3Nlcj1cInBsYXlib29rXCIsaS5wbGF5Ym9vaz0hMCksaS5vcHImJihlLmJyb3dzZXI9XCJvcGVyYVwiLGkub3BlcmE9ITApLGkuc2FmYXJpJiZpLmFuZHJvaWQmJihlLmJyb3dzZXI9XCJhbmRyb2lkXCIsaS5hbmRyb2lkPSEwKSxpLnNhZmFyaSYmaS5raW5kbGUmJihlLmJyb3dzZXI9XCJraW5kbGVcIixpLmtpbmRsZT0hMCksaS5zYWZhcmkmJmkuc2lsayYmKGUuYnJvd3Nlcj1cInNpbGtcIixpLnNpbGs9ITApLGkudml2YWxkaSYmKGUuYnJvd3Nlcj1cInZpdmFsZGlcIixpLnZpdmFsZGk9ITApLGkubmFtZT1lLmJyb3dzZXIsaS5wbGF0Zm9ybT1lLnBsYXRmb3JtLGlzU1NSfHwod2luZG93LnByb2Nlc3MmJndpbmRvdy5wcm9jZXNzLnZlcnNpb25zJiZ3aW5kb3cucHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbj9pLmVsZWN0cm9uPSEwOjA9PT1kb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCJjaHJvbWUtZXh0ZW5zaW9uOi8vXCIpP2kuY2hyb21lRXh0PSEwOih3aW5kb3cuX2NvcmRvdmFOYXRpdmV8fHdpbmRvdy5jb3Jkb3ZhKSYmKGkuY29yZG92YT0hMCksKGZyb21TU1I9dm9pZCAwPT09aS5jb3Jkb3ZhJiZ2b2lkIDA9PT1pLmVsZWN0cm9uJiYhIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1zZXJ2ZXItcmVuZGVyZWRdXCIpKSYmKG9uU1NSPSEwKSksaX1mdW5jdGlvbiBoYXNXZWJTdG9yYWdlKCl7aWYodm9pZCAwIT09d2ViU3RvcmFnZSlyZXR1cm4gd2ViU3RvcmFnZTt0cnl7aWYod2luZG93LmxvY2FsU3RvcmFnZSlyZXR1cm4gd2ViU3RvcmFnZT0hMCwhMH1jYXRjaCh0KXt9cmV0dXJuIHdlYlN0b3JhZ2U9ITEsITF9ZnVuY3Rpb24gZ2V0Q2xpZW50UHJvcGVydGllcygpe3JldHVybntoYXM6e3RvdWNoOiEhKFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpfHx3aW5kb3cubmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHM+MCx3ZWJTdG9yYWdlOmhhc1dlYlN0b3JhZ2UoKX0sd2l0aGluOntpZnJhbWU6d2luZG93LnNlbGYhPT13aW5kb3cudG9wfX19dmFyIFBsYXRmb3JtPXtoYXM6e3RvdWNoOiExLHdlYlN0b3JhZ2U6ITF9LHdpdGhpbjp7aWZyYW1lOiExfSxwYXJzZVNTUjpmdW5jdGlvbih0KXtyZXR1cm4gdD97aXM6Z2V0UGxhdGZvcm0odC5yZXEuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0pLGhhczp0aGlzLmhhcyx3aXRoaW46dGhpcy53aXRoaW59Ok9iamVjdC5hc3NpZ24oe30se2lzOmdldFBsYXRmb3JtKCl9LGdldENsaWVudFByb3BlcnRpZXMoKSl9LGluc3RhbGw6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXM7aXNTU1I/ZS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3QucGxhdGZvcm09cy5wYXJzZVNTUihlLnNzcil9KToodGhpcy5pcz1nZXRQbGF0Zm9ybSgpLGZyb21TU1I/KGUudGFrZW92ZXIucHVzaChmdW5jdGlvbih0KXtvblNTUj1mcm9tU1NSPSExLE9iamVjdC5hc3NpZ24odC5wbGF0Zm9ybSxnZXRDbGllbnRQcm9wZXJ0aWVzKCkpfSksaS51dGlsLmRlZmluZVJlYWN0aXZlKHQsXCJwbGF0Zm9ybVwiLHRoaXMpKTooT2JqZWN0LmFzc2lnbih0aGlzLGdldENsaWVudFByb3BlcnRpZXMoKSksdC5wbGF0Zm9ybT10aGlzKSl9fTtmdW5jdGlvbiBhc3NpZ24odCxlKXt2YXIgaT1hcmd1bWVudHM7aWYodm9pZCAwPT09dHx8bnVsbD09PXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjb252ZXJ0IGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdFwiKTtmb3IodmFyIHM9T2JqZWN0KHQpLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgbz1pW25dO2lmKHZvaWQgMCE9PW8mJm51bGwhPT1vKWZvcih2YXIgcj1PYmplY3Qua2V5cyhPYmplY3QobykpLGE9MCxsPXIubGVuZ3RoO2E8bDthKyspe3ZhciBjPXJbYV0saD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8sYyk7dm9pZCAwIT09aCYmaC5lbnVtZXJhYmxlJiYoc1tjXT1vW2NdKX19cmV0dXJuIHN9T2JqZWN0LmFzc2lnbnx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdCxcImFzc2lnblwiLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTphc3NpZ259KSxOdW1iZXIuaXNJbnRlZ2VyfHwoTnVtYmVyLmlzSW50ZWdlcj1mdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmaXNGaW5pdGUodCkmJk1hdGguZmxvb3IodCk9PT10fSksQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzfHwoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSl7dmFyIGk9T2JqZWN0KHRoaXMpLHM9cGFyc2VJbnQoaS5sZW5ndGgsMTApfHwwO2lmKDA9PT1zKXJldHVybiExO3ZhciBuLG8scj1wYXJzZUludChlLDEwKXx8MDtmb3Iocj49MD9uPXI6KG49cytyKTwwJiYobj0wKTtuPHM7KXtpZih0PT09KG89aVtuXSl8fHQhPXQmJm8hPW8pcmV0dXJuITA7bisrfXJldHVybiExfSksU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHwoU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8MCx0aGlzLnN1YnN0cihlLHQubGVuZ3RoKT09PXR9KSxTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRofHwoU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aD1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudG9TdHJpbmcoKTsoXCJudW1iZXJcIiE9dHlwZW9mIGV8fCFpc0Zpbml0ZShlKXx8TWF0aC5mbG9vcihlKSE9PWV8fGU+aS5sZW5ndGgpJiYoZT1pLmxlbmd0aCksZS09dC5sZW5ndGg7dmFyIHM9aS5pbmRleE9mKHQsZSk7cmV0dXJuLTEhPT1zJiZzPT09ZX0pLGlzU1NSfHwoXCJmdW5jdGlvblwiIT10eXBlb2YgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyYmKEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXM9RWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3J8fEVsZW1lbnQucHJvdG90eXBlLm1vek1hdGNoZXNTZWxlY3Rvcnx8RWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9KHRoaXMuZG9jdW1lbnR8fHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbCh0KSxpPTA7ZVtpXSYmZVtpXSE9PXRoaXM7KSsraTtyZXR1cm4gQm9vbGVhbihlW2ldKX0pLFwiZnVuY3Rpb25cIiE9dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmNsb3Nlc3QmJihFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzO2UmJjE9PT1lLm5vZGVUeXBlOyl7aWYoZS5tYXRjaGVzKHQpKXJldHVybiBlO2U9ZS5wYXJlbnROb2RlfXJldHVybiBudWxsfSksW0VsZW1lbnQucHJvdG90eXBlLENoYXJhY3RlckRhdGEucHJvdG90eXBlLERvY3VtZW50VHlwZS5wcm90b3R5cGVdLmZvckVhY2goZnVuY3Rpb24odCl7dC5oYXNPd25Qcm9wZXJ0eShcInJlbW92ZVwiKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJyZW1vdmVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9fSl9KSksQXJyYXkucHJvdG90eXBlLmZpbmR8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsXCJmaW5kXCIse3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKG51bGw9PXRoaXMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFycmF5LnByb3RvdHlwZS5maW5kIGNhbGxlZCBvbiBudWxsIG9yIHVuZGVmaW5lZFwiKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJwcmVkaWNhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2Zvcih2YXIgZSxpPU9iamVjdCh0aGlzKSxzPWkubGVuZ3RoPj4+MCxuPWFyZ3VtZW50c1sxXSxvPTA7bzxzO28rKylpZihlPWlbb10sdC5jYWxsKG4sZSxvLGkpKXJldHVybiBlfX0pO3ZhciB2ZXJzaW9uPVwiMC4xNy4yMFwiLEhpc3Rvcnk9e19faGlzdG9yeTpbXSxhZGQ6ZnVuY3Rpb24oKXt9LHJlbW92ZTpmdW5jdGlvbigpe30saW5zdGFsbDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7aWYoIWlzU1NSJiZ0LnBsYXRmb3JtLmlzLmNvcmRvdmEpe3RoaXMuYWRkPWZ1bmN0aW9uKHQpe2kuX19oaXN0b3J5LnB1c2godCl9LHRoaXMucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPWkuX19oaXN0b3J5LmluZGV4T2YodCk7ZT49MCYmaS5fX2hpc3Rvcnkuc3BsaWNlKGUsMSl9O3ZhciBzPXZvaWQgMD09PWUuY29yZG92YXx8ITEhPT1lLmNvcmRvdmEuYmFja0J1dHRvbkV4aXQ7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZXJlYWR5XCIsZnVuY3Rpb24oKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiYmFja2J1dHRvblwiLGZ1bmN0aW9uKCl7aS5fX2hpc3RvcnkubGVuZ3RoP2kuX19oaXN0b3J5LnBvcCgpLmhhbmRsZXIoKTpzJiZcIiMvXCI9PT13aW5kb3cubG9jYXRpb24uaGFzaD9uYXZpZ2F0b3IuYXBwLmV4aXRBcHAoKTp3aW5kb3cuaGlzdG9yeS5iYWNrKCl9LCExKX0pfX19LGxhbmdFbj17bGFuZzpcImVuLXVzXCIsbGFiZWw6e2NsZWFyOlwiQ2xlYXJcIixvazpcIk9LXCIsY2FuY2VsOlwiQ2FuY2VsXCIsY2xvc2U6XCJDbG9zZVwiLHNldDpcIlNldFwiLHNlbGVjdDpcIlNlbGVjdFwiLHJlc2V0OlwiUmVzZXRcIixyZW1vdmU6XCJSZW1vdmVcIix1cGRhdGU6XCJVcGRhdGVcIixjcmVhdGU6XCJDcmVhdGVcIixzZWFyY2g6XCJTZWFyY2hcIixmaWx0ZXI6XCJGaWx0ZXJcIixyZWZyZXNoOlwiUmVmcmVzaFwifSxkYXRlOntkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksZGF5c1Nob3J0OlwiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXJcIi5zcGxpdChcIl9cIiksbW9udGhzU2hvcnQ6XCJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlY1wiLnNwbGl0KFwiX1wiKSxmaXJzdERheU9mV2VlazowLGZvcm1hdDI0aDohMX0scHVsbFRvUmVmcmVzaDp7cHVsbDpcIlB1bGwgZG93biB0byByZWZyZXNoXCIscmVsZWFzZTpcIlJlbGVhc2UgdG8gcmVmcmVzaFwiLHJlZnJlc2g6XCJSZWZyZXNoaW5nLi4uXCJ9LHRhYmxlOntub0RhdGE6XCJObyBkYXRhIGF2YWlsYWJsZVwiLG5vUmVzdWx0czpcIk5vIG1hdGNoaW5nIHJlY29yZHMgZm91bmRcIixsb2FkaW5nOlwiTG9hZGluZy4uLlwiLHNlbGVjdGVkUmVjb3JkczpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQ/XCIxIHJlY29yZCBzZWxlY3RlZC5cIjooMD09PXQ/XCJOb1wiOnQpK1wiIHJlY29yZHMgc2VsZWN0ZWQuXCJ9LHJlY29yZHNQZXJQYWdlOlwiUmVjb3JkcyBwZXIgcGFnZTpcIixhbGxSb3dzOlwiQWxsXCIscGFnaW5hdGlvbjpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHQrXCItXCIrZStcIiBvZiBcIitpfSxjb2x1bW5zOlwiQ29sdW1uc1wifSxlZGl0b3I6e3VybDpcIlVSTFwiLGJvbGQ6XCJCb2xkXCIsaXRhbGljOlwiSXRhbGljXCIsc3RyaWtldGhyb3VnaDpcIlN0cmlrZXRocm91Z2hcIix1bmRlcmxpbmU6XCJVbmRlcmxpbmVcIix1bm9yZGVyZWRMaXN0OlwiVW5vcmRlcmVkIExpc3RcIixvcmRlcmVkTGlzdDpcIk9yZGVyZWQgTGlzdFwiLHN1YnNjcmlwdDpcIlN1YnNjcmlwdFwiLHN1cGVyc2NyaXB0OlwiU3VwZXJzY3JpcHRcIixoeXBlcmxpbms6XCJIeXBlcmxpbmtcIix0b2dnbGVGdWxsc2NyZWVuOlwiVG9nZ2xlIEZ1bGxzY3JlZW5cIixxdW90ZTpcIlF1b3RlXCIsbGVmdDpcIkxlZnQgYWxpZ25cIixjZW50ZXI6XCJDZW50ZXIgYWxpZ25cIixyaWdodDpcIlJpZ2h0IGFsaWduXCIsanVzdGlmeTpcIkp1c3RpZnkgYWxpZ25cIixwcmludDpcIlByaW50XCIsb3V0ZGVudDpcIkRlY3JlYXNlIGluZGVudGF0aW9uXCIsaW5kZW50OlwiSW5jcmVhc2UgaW5kZW50YXRpb25cIixyZW1vdmVGb3JtYXQ6XCJSZW1vdmUgZm9ybWF0dGluZ1wiLGZvcm1hdHRpbmc6XCJGb3JtYXR0aW5nXCIsZm9udFNpemU6XCJGb250IFNpemVcIixhbGlnbjpcIkFsaWduXCIsaHI6XCJJbnNlcnQgSG9yaXpvbnRhbCBSdWxlXCIsdW5kbzpcIlVuZG9cIixyZWRvOlwiUmVkb1wiLGhlYWRlcjE6XCJIZWFkZXIgMVwiLGhlYWRlcjI6XCJIZWFkZXIgMlwiLGhlYWRlcjM6XCJIZWFkZXIgM1wiLGhlYWRlcjQ6XCJIZWFkZXIgNFwiLGhlYWRlcjU6XCJIZWFkZXIgNVwiLGhlYWRlcjY6XCJIZWFkZXIgNlwiLHBhcmFncmFwaDpcIlBhcmFncmFwaFwiLGNvZGU6XCJDb2RlXCIsc2l6ZTE6XCJWZXJ5IHNtYWxsXCIsc2l6ZTI6XCJBIGJpdCBzbWFsbFwiLHNpemUzOlwiTm9ybWFsXCIsc2l6ZTQ6XCJNZWRpdW0tbGFyZ2VcIixzaXplNTpcIkJpZ1wiLHNpemU2OlwiVmVyeSBiaWdcIixzaXplNzpcIk1heGltdW1cIixkZWZhdWx0Rm9udDpcIkRlZmF1bHQgRm9udFwifSx0cmVlOntub05vZGVzOlwiTm8gbm9kZXMgYXZhaWxhYmxlXCIsbm9SZXN1bHRzOlwiTm8gbWF0Y2hpbmcgbm9kZXMgZm91bmRcIn19LGkxOG49e2luc3RhbGw6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49dGhpcztpc1NTUiYmZS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3ZhciBpPXtsYW5nOnQuaTE4bi5sYW5nLGRpcjp0LmkxOG4ucnRsP1wicnRsXCI6XCJsdHJcIn0scz1lLnNzci5zZXRIdG1sQXR0cnM7XCJmdW5jdGlvblwiPT10eXBlb2Ygcz9zKGkpOmUuc3NyLlFfSFRNTF9BVFRSUz1PYmplY3Qua2V5cyhpKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQrXCI9XCIraVt0XX0pLmpvaW4oXCIgXCIpfSksdGhpcy5zZXQ9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9bGFuZ0VuKSxlLnNldD1uLnNldCxlLmdldExvY2FsZT1uLmdldExvY2FsZSxlLnJ0bD1lLnJ0bHx8ITEsIWlzU1NSKXt2YXIgcz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cy5zZXRBdHRyaWJ1dGUoXCJkaXJcIixlLnJ0bD9cInJ0bFwiOlwibHRyXCIpLHMuc2V0QXR0cmlidXRlKFwibGFuZ1wiLGUubGFuZyl9aXNTU1J8fHQuaTE4bj90LmkxOG49ZTppLnV0aWwuZGVmaW5lUmVhY3RpdmUodCxcImkxOG5cIixlKSxuLm5hbWU9ZS5sYW5nLG4ubGFuZz1lfSx0aGlzLnNldChzKX0sZ2V0TG9jYWxlOmZ1bmN0aW9uKCl7aWYoIWlzU1NSKXt2YXIgdD1uYXZpZ2F0b3IubGFuZ3VhZ2V8fG5hdmlnYXRvci5sYW5ndWFnZXNbMF18fG5hdmlnYXRvci5icm93c2VyTGFuZ3VhZ2V8fG5hdmlnYXRvci51c2VyTGFuZ3VhZ2V8fG5hdmlnYXRvci5zeXN0ZW1MYW5ndWFnZTtyZXR1cm4gdD90LnRvTG93ZXJDYXNlKCk6dm9pZCAwfX19O2Z1bmN0aW9uIHJnYlRvSGV4KHQpe3ZhciBlPXQucixpPXQuZyxzPXQuYixuPXQuYSxvPXZvaWQgMCE9PW47aWYoZT1NYXRoLnJvdW5kKGUpLGk9TWF0aC5yb3VuZChpKSxzPU1hdGgucm91bmQocyksZT4yNTV8fGk+MjU1fHxzPjI1NXx8byYmbj4xMDApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIDMgbnVtYmVycyBiZWxvdyAyNTYgKGFuZCBvcHRpb25hbGx5IG9uZSBiZWxvdyAxMDApXCIpO3JldHVybiBuPW8/KDI1NnxNYXRoLnJvdW5kKDI1NSpuLzEwMCkpLnRvU3RyaW5nKDE2KS5zbGljZSgxKTpcIlwiLFwiI1wiKyhzfGk8PDh8ZTw8MTZ8MTw8MjQpLnRvU3RyaW5nKDE2KS5zbGljZSgxKStufWZ1bmN0aW9uIGhleFRvUmdiKHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZ1wiKTszPT09KHQ9dC5yZXBsYWNlKC9eIy8sXCJcIikpLmxlbmd0aD90PXRbMF0rdFswXSt0WzFdK3RbMV0rdFsyXSt0WzJdOjQ9PT10Lmxlbmd0aCYmKHQ9dFswXSt0WzBdK3RbMV0rdFsxXSt0WzJdK3RbMl0rdFszXSt0WzNdKTt2YXIgZT1wYXJzZUludCh0LDE2KTtyZXR1cm4gdC5sZW5ndGg+Nj97cjplPj4yNCYyNTUsZzplPj4xNiYyNTUsYjplPj44JjI1NSxhOk1hdGgucm91bmQoKDI1NSZlKS8yLjU1KX06e3I6ZT4+MTYsZzplPj44JjI1NSxiOjI1NSZlfX1mdW5jdGlvbiBoc3ZUb1JnYih0KXt2YXIgZSxpLHMsbixvLHIsYSxsLGM9dC5oLGg9dC5zLHU9dC52LGQ9dC5hO3N3aXRjaChyPSh1Lz0xMDApKigxLShoLz0xMDApKSxhPXUqKDEtKG89NiooYy89MzYwKS0obj1NYXRoLmZsb29yKDYqYykpKSpoKSxsPXUqKDEtKDEtbykqaCksbiU2KXtjYXNlIDA6ZT11LGk9bCxzPXI7YnJlYWs7Y2FzZSAxOmU9YSxpPXUscz1yO2JyZWFrO2Nhc2UgMjplPXIsaT11LHM9bDticmVhaztjYXNlIDM6ZT1yLGk9YSxzPXU7YnJlYWs7Y2FzZSA0OmU9bCxpPXIscz11O2JyZWFrO2Nhc2UgNTplPXUsaT1yLHM9YX1yZXR1cm57cjpNYXRoLnJvdW5kKDI1NSplKSxnOk1hdGgucm91bmQoMjU1KmkpLGI6TWF0aC5yb3VuZCgyNTUqcyksYTpkfX1mdW5jdGlvbiByZ2JUb0hzdih0KXt2YXIgZSxpPXQucixzPXQuZyxuPXQuYixvPXQuYSxyPU1hdGgubWF4KGkscyxuKSxhPU1hdGgubWluKGkscyxuKSxsPXItYSxjPTA9PT1yPzA6bC9yLGg9ci8yNTU7c3dpdGNoKHIpe2Nhc2UgYTplPTA7YnJlYWs7Y2FzZSBpOmU9cy1uK2wqKHM8bj82OjApLGUvPTYqbDticmVhaztjYXNlIHM6ZT1uLWkrMipsLGUvPTYqbDticmVhaztjYXNlIG46ZT1pLXMrNCpsLGUvPTYqbH1yZXR1cm57aDpNYXRoLnJvdW5kKDM2MCplKSxzOk1hdGgucm91bmQoMTAwKmMpLHY6TWF0aC5yb3VuZCgxMDAqaCksYTpvfX12YXIgcmVSR0JBPS9eXFxzKnJnYihhKT9cXHMqXFwoKFxccyooXFxkKylcXHMqLFxccyo/KXsyfShcXGQrKVxccyosP1xccyooWzAxXT9cXC4/XFxkKj8pP1xccypcXClcXHMqJC87ZnVuY3Rpb24gdGV4dFRvUmdiKHQpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZ1wiKTt2YXIgZT1yZVJHQkEuZXhlYyh0KTtpZihlKXt2YXIgaT17cjpNYXRoLm1heCgyNTUscGFyc2VJbnQoZVsyXSwxMCkpLGc6TWF0aC5tYXgoMjU1LHBhcnNlSW50KGVbM10sMTApKSxiOk1hdGgubWF4KDI1NSxwYXJzZUludChlWzRdLDEwKSl9O3JldHVybiBlWzFdJiYoaS5hPU1hdGgubWF4KDEscGFyc2VGbG9hdChlWzVdKSkpLGl9cmV0dXJuIGhleFRvUmdiKHQpfWZ1bmN0aW9uIGxpZ2h0ZW4odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgYXMgY29sb3JcIik7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgbnVtZXJpYyBwZXJjZW50XCIpO3ZhciBpPXRleHRUb1JnYih0KSxzPWU8MD8wOjI1NSxuPU1hdGguYWJzKGUpLzEwMCxvPWkucixyPWkuZyxhPWkuYjtyZXR1cm5cIiNcIisoMTY3NzcyMTYrNjU1MzYqKE1hdGgucm91bmQoKHMtbykqbikrbykrMjU2KihNYXRoLnJvdW5kKChzLXIpKm4pK3IpKyhNYXRoLnJvdW5kKChzLWEpKm4pK2EpKS50b1N0cmluZygxNikuc2xpY2UoMSl9ZnVuY3Rpb24gbHVtaW5vc2l0eSh0KXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKCF0fHx2b2lkIDA9PT10LnIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZyBvciBhIHtyLCBnLCBifSBvYmplY3QgYXMgY29sb3JcIik7dmFyIGU9XCJzdHJpbmdcIj09dHlwZW9mIHQ/dGV4dFRvUmdiKHQpOnQsaT1lLnIvMjU1LHM9ZS5nLzI1NSxuPWUuYi8yNTU7cmV0dXJuLjIxMjYqKGk8PS4wMzkyOD9pLzEyLjkyOk1hdGgucG93KChpKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihzPD0uMDM5Mjg/cy8xMi45MjpNYXRoLnBvdygocysuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9ZnVuY3Rpb24gc2V0QnJhbmQodCxlLGkpe2lmKHZvaWQgMD09PWkmJihpPWRvY3VtZW50LmJvZHkpLFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZyBhcyBjb2xvclwiKTtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBzdHJpbmcgYXMgdmFsdWVcIik7aWYoIShpIGluc3RhbmNlb2YgRWxlbWVudCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgRE9NIGVsZW1lbnRcIik7c3dpdGNoKGkuc3R5bGUuc2V0UHJvcGVydHkoXCItLXEtY29sb3ItXCIrdCxlKSx0KXtjYXNlXCJuZWdhdGl2ZVwiOmNhc2VcIndhcm5pbmdcIjppLnN0eWxlLnNldFByb3BlcnR5KFwiLS1xLWNvbG9yLVwiK3QrXCItbFwiLGxpZ2h0ZW4oZSw0NikpO2JyZWFrO2Nhc2VcImxpZ2h0XCI6aS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcS1jb2xvci1cIit0K1wiLWRcIixsaWdodGVuKGUsLTEwKSl9fWZ1bmN0aW9uIGdldEJyYW5kKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9ZG9jdW1lbnQuYm9keSksXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgc3RyaW5nIGFzIGNvbG9yXCIpO2lmKCEoZSBpbnN0YW5jZW9mIEVsZW1lbnQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIERPTSBlbGVtZW50XCIpO3JldHVybiBnZXRDb21wdXRlZFN0eWxlKGUpLmdldFByb3BlcnR5VmFsdWUoXCItLXEtY29sb3ItXCIrdCkudHJpbSgpfHxudWxsfXZhciBjb2xvcnM9e3JnYlRvSGV4OnJnYlRvSGV4LGhleFRvUmdiOmhleFRvUmdiLGhzdlRvUmdiOmhzdlRvUmdiLHJnYlRvSHN2OnJnYlRvSHN2LHRleHRUb1JnYjp0ZXh0VG9SZ2IsbGlnaHRlbjpsaWdodGVuLGx1bWlub3NpdHk6bHVtaW5vc2l0eSxzZXRCcmFuZDpzZXRCcmFuZCxnZXRCcmFuZDpnZXRCcmFuZH07ZnVuY3Rpb24gZ2V0Qm9keUNsYXNzZXModCxlKXt2YXIgaT10LmlzLHM9dC5oYXMsbj10LndpdGhpbixvPVtcIm1hdFwiLGkuZGVza3RvcD9cImRlc2t0b3BcIjpcIm1vYmlsZVwiLHMudG91Y2g/XCJ0b3VjaFwiOlwibm8tdG91Y2hcIixcInBsYXRmb3JtLVwiKyhpLmlvcz9cImlvc1wiOlwibWF0XCIpXTtpZihpLmNvcmRvdmEmJihvLnB1c2goXCJjb3Jkb3ZhXCIpLGkuaW9zJiYodm9pZCAwPT09ZS5jb3Jkb3ZhfHwhMSE9PWUuY29yZG92YS5pb3NTdGF0dXNCYXJQYWRkaW5nKSkpe3ZhciByPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxLGE9d2luZG93LnNjcmVlbi53aWR0aCpyLGw9d2luZG93LnNjcmVlbi5oZWlnaHQqcjsxMTI1PT09YSYmMjQzNj09PWwmJm8ucHVzaChcInEtaW9zLXN0YXR1c2Jhci14XCIpLDExMjU9PT1hJiYyMDAxPT09bHx8by5wdXNoKFwicS1pb3Mtc3RhdHVzYmFyLXBhZGRpbmdcIil9cmV0dXJuIG4uaWZyYW1lJiZvLnB1c2goXCJ3aXRoaW4taWZyYW1lXCIpLGkuZWxlY3Ryb24mJm8ucHVzaChcImVsZWN0cm9uXCIpLG99ZnVuY3Rpb24gYm9keUluaXQodCxlKXt2YXIgaT1nZXRCb2R5Q2xhc3Nlcyh0LGUpO3QuaXMuaWUmJjExPT09dC5pcy52ZXJzaW9uTnVtYmVyP2kuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKHQpfSk6ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkLmFwcGx5KGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LGkpLHQuaXMuaW9zJiZkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oKXt9KX1mdW5jdGlvbiBzZXRDb2xvcnModCl7Zm9yKHZhciBlIGluIHQpc2V0QnJhbmQoZSx0W2VdKX12YXIgQm9keT17aW5zdGFsbDpmdW5jdGlvbih0LGUsaSl7aXNTU1I/ZS5zZXJ2ZXIucHVzaChmdW5jdGlvbih0LGUpe3ZhciBzPWdldEJvZHlDbGFzc2VzKHQucGxhdGZvcm0saSksbj1lLnNzci5zZXRCb2R5Q2xhc3NlcztcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP24ocyk6ZS5zc3IuUV9CT0RZX0NMQVNTRVM9cy5qb2luKFwiIFwiKX0pOihpLmJyYW5kJiZzZXRDb2xvcnMoaS5icmFuZCksYm9keUluaXQodC5wbGF0Zm9ybSxpKSl9fSxtYXRlcmlhbEljb25zPXtuYW1lOlwibWF0ZXJpYWwtaWNvbnNcIix0eXBlOntwb3NpdGl2ZTpcImNoZWNrX2NpcmNsZVwiLG5lZ2F0aXZlOlwid2FybmluZ1wiLGluZm86XCJpbmZvXCIsd2FybmluZzpcInByaW9yaXR5X2hpZ2hcIn0sYXJyb3c6e3VwOlwiYXJyb3dfdXB3YXJkXCIscmlnaHQ6XCJhcnJvd19mb3J3YXJkXCIsZG93bjpcImFycm93X2Rvd253YXJkXCIsbGVmdDpcImFycm93X2JhY2tcIn0sY2hldnJvbjp7bGVmdDpcImNoZXZyb25fbGVmdFwiLHJpZ2h0OlwiY2hldnJvbl9yaWdodFwifSxwdWxsVG9SZWZyZXNoOnthcnJvdzpcImFycm93X2Rvd253YXJkXCIscmVmcmVzaDpcInJlZnJlc2hcIn0sc2VhcmNoOntpY29uOlwic2VhcmNoXCIsY2xlYXI6XCJjYW5jZWxcIixjbGVhckludmVydGVkOlwiY2xlYXJcIn0sY2Fyb3VzZWw6e2xlZnQ6XCJjaGV2cm9uX2xlZnRcIixyaWdodDpcImNoZXZyb25fcmlnaHRcIixxdWlja05hdjpcImxlbnNcIix0aHVtYm5haWxzOlwidmlld19jYXJvdXNlbFwifSxjaGVja2JveDp7Y2hlY2tlZDp7aW9zOlwiY2hlY2tfY2lyY2xlXCIsbWF0OlwiY2hlY2tfYm94XCJ9LHVuY2hlY2tlZDp7aW9zOlwicmFkaW9fYnV0dG9uX3VuY2hlY2tlZFwiLG1hdDpcImNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXCJ9LGluZGV0ZXJtaW5hdGU6e2lvczpcInJlbW92ZV9jaXJjbGVfb3V0bGluZVwiLG1hdDpcImluZGV0ZXJtaW5hdGVfY2hlY2tfYm94XCJ9fSxjaGlwOntjbG9zZTpcImNhbmNlbFwifSxjaGlwc0lucHV0OnthZGQ6XCJzZW5kXCJ9LGNvbGxhcHNpYmxlOntpY29uOlwiYXJyb3dfZHJvcF9kb3duXCJ9LGRhdGV0aW1lOnthcnJvd0xlZnQ6XCJjaGV2cm9uX2xlZnRcIixhcnJvd1JpZ2h0OlwiY2hldnJvbl9yaWdodFwifSxlZGl0b3I6e2JvbGQ6XCJmb3JtYXRfYm9sZFwiLGl0YWxpYzpcImZvcm1hdF9pdGFsaWNcIixzdHJpa2V0aHJvdWdoOlwic3RyaWtldGhyb3VnaF9zXCIsdW5kZXJsaW5lOlwiZm9ybWF0X3VuZGVybGluZWRcIix1bm9yZGVyZWRMaXN0OlwiZm9ybWF0X2xpc3RfYnVsbGV0ZWRcIixvcmRlcmVkTGlzdDpcImZvcm1hdF9saXN0X251bWJlcmVkXCIsc3Vic2NyaXB0OlwidmVydGljYWxfYWxpZ25fYm90dG9tXCIsc3VwZXJzY3JpcHQ6XCJ2ZXJ0aWNhbF9hbGlnbl90b3BcIixoeXBlcmxpbms6XCJsaW5rXCIsdG9nZ2xlRnVsbHNjcmVlbjpcImZ1bGxzY3JlZW5cIixxdW90ZTpcImZvcm1hdF9xdW90ZVwiLGxlZnQ6XCJmb3JtYXRfYWxpZ25fbGVmdFwiLGNlbnRlcjpcImZvcm1hdF9hbGlnbl9jZW50ZXJcIixyaWdodDpcImZvcm1hdF9hbGlnbl9yaWdodFwiLGp1c3RpZnk6XCJmb3JtYXRfYWxpZ25fanVzdGlmeVwiLHByaW50OlwicHJpbnRcIixvdXRkZW50OlwiZm9ybWF0X2luZGVudF9kZWNyZWFzZVwiLGluZGVudDpcImZvcm1hdF9pbmRlbnRfaW5jcmVhc2VcIixyZW1vdmVGb3JtYXQ6XCJmb3JtYXRfY2xlYXJcIixmb3JtYXR0aW5nOlwidGV4dF9mb3JtYXRcIixmb250U2l6ZTpcImZvcm1hdF9zaXplXCIsYWxpZ246XCJmb3JtYXRfYWxpZ25fbGVmdFwiLGhyOlwicmVtb3ZlXCIsdW5kbzpcInVuZG9cIixyZWRvOlwicmVkb1wiLGhlYWRlcjpcImZvcm1hdF9zaXplXCIsY29kZTpcImNvZGVcIixzaXplOlwiZm9ybWF0X3NpemVcIixmb250OlwiZm9udF9kb3dubG9hZFwifSxmYWI6e2ljb246XCJhZGRcIixhY3RpdmVJY29uOlwiY2xvc2VcIn0saW5wdXQ6e3Nob3dQYXNzOlwidmlzaWJpbGl0eVwiLGhpZGVQYXNzOlwidmlzaWJpbGl0eV9vZmZcIixzaG93TnVtYmVyOlwia2V5Ym9hcmRcIixoaWRlTnVtYmVyOlwia2V5Ym9hcmRfaGlkZVwiLGNsZWFyOlwiY2FuY2VsXCIsY2xlYXJJbnZlcnRlZDpcImNsZWFyXCIsZHJvcGRvd246XCJhcnJvd19kcm9wX2Rvd25cIn0scGFnaW5hdGlvbjp7Zmlyc3Q6XCJmaXJzdF9wYWdlXCIscHJldjpcImtleWJvYXJkX2Fycm93X2xlZnRcIixuZXh0Olwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIixsYXN0OlwibGFzdF9wYWdlXCJ9LHJhZGlvOntjaGVja2VkOntpb3M6XCJjaGVja1wiLG1hdDpcInJhZGlvX2J1dHRvbl9jaGVja2VkXCJ9LHVuY2hlY2tlZDp7aW9zOlwiXCIsbWF0OlwicmFkaW9fYnV0dG9uX3VuY2hlY2tlZFwifX0scmF0aW5nOntpY29uOlwiZ3JhZGVcIn0sc3RlcHBlcjp7ZG9uZTpcImNoZWNrXCIsYWN0aXZlOlwiZWRpdFwiLGVycm9yOlwid2FybmluZ1wifSx0YWJzOntsZWZ0OlwiY2hldnJvbl9sZWZ0XCIscmlnaHQ6XCJjaGV2cm9uX3JpZ2h0XCJ9LHRhYmxlOnthcnJvd1VwOlwiYXJyb3dfdXB3YXJkXCIsd2FybmluZzpcIndhcm5pbmdcIixwcmV2UGFnZTpcImNoZXZyb25fbGVmdFwiLG5leHRQYWdlOlwiY2hldnJvbl9yaWdodFwifSx0cmVlOntpY29uOlwicGxheV9hcnJvd1wifSx1cGxvYWRlcjp7ZG9uZTpcImRvbmVcIixjbGVhcjpcImNhbmNlbFwiLGNsZWFySW52ZXJ0ZWQ6XCJjbGVhclwiLGFkZDpcImFkZFwiLHVwbG9hZDpcImNsb3VkX3VwbG9hZFwiLGV4cGFuZDpcImtleWJvYXJkX2Fycm93X2Rvd25cIixmaWxlOlwiaW5zZXJ0X2RyaXZlX2ZpbGVcIn19LEljb25zPXtfX2luc3RhbGxlZDohMSxpbnN0YWxsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzO3RoaXMuc2V0PWZ1bmN0aW9uKGkpe3ZvaWQgMD09PWkmJihpPW1hdGVyaWFsSWNvbnMpLGkuc2V0PXMuc2V0LGlzU1NSfHx0Lmljb24/dC5pY29uPWk6ZS51dGlsLmRlZmluZVJlYWN0aXZlKHQsXCJpY29uXCIsaSkscy5uYW1lPWkubmFtZSxzLmRlZj1pfSx0aGlzLnNldChpKX19LHF1ZXVlcz17c2VydmVyOltdLHRha2VvdmVyOltdfSwkcT17dmVyc2lvbjp2ZXJzaW9uLHRoZW1lOlwibWF0XCJ9O2Z1bmN0aW9uIGluc3RhbGwodCxlKXtpZih2b2lkIDA9PT1lJiYoZT17fSksIXRoaXMuX19pbnN0YWxsZWQpe3RoaXMuX19pbnN0YWxsZWQ9ITA7dmFyIGk9ZS5jb25maWd8fHt9O2lmKFBsYXRmb3JtLmluc3RhbGwoJHEscXVldWVzLHQpLEJvZHkuaW5zdGFsbCgkcSxxdWV1ZXMsaSksSGlzdG9yeS5pbnN0YWxsKCRxLGkpLGkxOG4uaW5zdGFsbCgkcSxxdWV1ZXMsdCxlLmkxOG4pLEljb25zLmluc3RhbGwoJHEsdCxlLmljb25TZXQpLGlzU1NSP3QubWl4aW4oe2JlZm9yZUNyZWF0ZTpmdW5jdGlvbigpe3RoaXMuJHE9dGhpcy4kcm9vdC4kb3B0aW9ucy4kcX19KTp0LnByb3RvdHlwZS4kcT0kcSxlLmNvbXBvbmVudHMmJk9iamVjdC5rZXlzKGUuY29tcG9uZW50cykuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgcz1lLmNvbXBvbmVudHNbaV07dm9pZCAwPT09cy5uYW1lfHx2b2lkIDA9PT1zLnJlbmRlciYmdm9pZCAwPT09cy5taXhpbnN8fHQuY29tcG9uZW50KHMubmFtZSxzKX0pLGUuZGlyZWN0aXZlcyYmT2JqZWN0LmtleXMoZS5kaXJlY3RpdmVzKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPWUuZGlyZWN0aXZlc1tpXTt2b2lkIDAhPT1zLm5hbWUmJnZvaWQgMCE9PXMudW5iaW5kJiZ0LmRpcmVjdGl2ZShzLm5hbWUscyl9KSxlLnBsdWdpbnMpe3ZhciBzPXskcTokcSxxdWV1ZXM6cXVldWVzLFZ1ZTp0LGNmZzppfTtPYmplY3Qua2V5cyhlLnBsdWdpbnMpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9ZS5wbHVnaW5zW3RdO1wiZnVuY3Rpb25cIj09dHlwZW9mIGkuaW5zdGFsbCYmaSE9PVBsYXRmb3JtJiZpLmluc3RhbGwocyl9KX19fXZhciBtaXhpbj17bW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cXVldWVzLnRha2VvdmVyLmZvckVhY2goZnVuY3Rpb24oZSl7ZSh0LiRxKX0pfX07ZnVuY3Rpb24gc3NyVXBkYXRlKHQpe2lmKHQuc3NyKXt2YXIgZT1PYmplY3QuYXNzaWduKHt9LCRxKTtPYmplY3QuYXNzaWduKHQuc3NyLHtRX0hFQURfVEFHUzpcIlwiLFFfQk9EWV9BVFRSUzpcIlwiLFFfQk9EWV9UQUdTOlwiXCJ9KSxxdWV1ZXMuc2VydmVyLmZvckVhY2goZnVuY3Rpb24oaSl7aShlLHQpfSksdC5hcHAuJHE9ZX1lbHNle3ZhciBpPXQuYXBwLm1peGluc3x8W107aS5pbmNsdWRlcyhtaXhpbil8fCh0LmFwcC5taXhpbnM9aS5jb25jYXQobWl4aW4pKX19dmFyIHRoZW1lPVwibWF0XCIsVnVlUGx1Z2luPXt2ZXJzaW9uOnZlcnNpb24saW5zdGFsbDppbnN0YWxsLGkxOG46aTE4bixpY29uczpJY29ucyx0aGVtZTp0aGVtZSxzc3JVcGRhdGU6c3NyVXBkYXRlfSxoYW5kbGVycz1bXSxFc2NhcGVLZXk9e19faW5zdGFsbGVkOiExLF9faW5zdGFsbDpmdW5jdGlvbigpe3RoaXMuX19pbnN0YWxsZWQ9ITAsd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGZ1bmN0aW9uKHQpezAhPT1oYW5kbGVycy5sZW5ndGgmJigyNyE9PXQud2hpY2gmJjI3IT09dC5rZXlDb2RlfHxoYW5kbGVyc1toYW5kbGVycy5sZW5ndGgtMV0oKSl9KX0scmVnaXN0ZXI6ZnVuY3Rpb24odCl7UGxhdGZvcm0uaXMuZGVza3RvcCYmKHRoaXMuX19pbnN0YWxsZWR8fHRoaXMuX19pbnN0YWxsKCksaGFuZGxlcnMucHVzaCh0KSl9LHBvcDpmdW5jdGlvbigpe1BsYXRmb3JtLmlzLmRlc2t0b3AmJmhhbmRsZXJzLnBvcCgpfX0sTW9kZWxUb2dnbGVNaXhpbj17cHJvcHM6e3ZhbHVlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd2luZzohMX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuZGlzYWJsZSYmdD90aGlzLiRlbWl0KFwiaW5wdXRcIiwhMSk6dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLnZhbHVlIT09ZS5zaG93aW5nJiZlW3Q/XCJzaG93XCI6XCJoaWRlXCJdKCl9KX19LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1t0aGlzLnNob3dpbmc/XCJoaWRlXCI6XCJzaG93XCJdKHQpfSxzaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuZGlzYWJsZXx8dGhpcy5zaG93aW5nP3RoaXMuc2hvd1Byb21pc2V8fFByb21pc2UucmVzb2x2ZSh0KToodGhpcy5oaWRlUHJvbWlzZSYmdGhpcy5oaWRlUHJvbWlzZVJlamVjdCgpLHRoaXMuc2hvd2luZz0hMCwhMT09PXRoaXMudmFsdWUmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLCEwKSwodm9pZCAwPT09dGhpcy4kb3B0aW9ucy5tb2RlbFRvZ2dsZXx8dGhpcy4kb3B0aW9ucy5tb2RlbFRvZ2dsZS5oaXN0b3J5KSYmKHRoaXMuX19oaXN0b3J5RW50cnk9e2hhbmRsZXI6dGhpcy5oaWRlfSxIaXN0b3J5LmFkZCh0aGlzLl9faGlzdG9yeUVudHJ5KSksdGhpcy5fX3Nob3c/KHRoaXMuc2hvd1Byb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxzKXtlLnNob3dQcm9taXNlUmVzb2x2ZT1mdW5jdGlvbigpe2Uuc2hvd1Byb21pc2U9bnVsbCxlLiRlbWl0KFwic2hvd1wiLHQpLGkodCl9LGUuc2hvd1Byb21pc2VSZWplY3Q9ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlLmNhdGNoKGZ1bmN0aW9uKCl7fSksZS5zaG93UHJvbWlzZT1udWxsLHMobnVsbCl9fSksdGhpcy5fX3Nob3codCksdGhpcy5zaG93UHJvbWlzZXx8UHJvbWlzZS5yZXNvbHZlKHQpKToodGhpcy4kZW1pdChcInNob3dcIix0KSxQcm9taXNlLnJlc29sdmUodCkpKX0saGlkZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmRpc2FibGV8fCF0aGlzLnNob3dpbmc/dGhpcy5oaWRlUHJvbWlzZXx8UHJvbWlzZS5yZXNvbHZlKHQpOih0aGlzLnNob3dQcm9taXNlJiZ0aGlzLnNob3dQcm9taXNlUmVqZWN0KCksdGhpcy5zaG93aW5nPSExLCEwPT09dGhpcy52YWx1ZSYmdGhpcy4kZW1pdChcImlucHV0XCIsITEpLHRoaXMuX19yZW1vdmVIaXN0b3J5KCksdGhpcy5fX2hpZGU/KHRoaXMuaGlkZVByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSxzKXtlLmhpZGVQcm9taXNlUmVzb2x2ZT1mdW5jdGlvbigpe2UuaGlkZVByb21pc2U9bnVsbCxlLiRlbWl0KFwiaGlkZVwiLHQpLGkoKX0sZS5oaWRlUHJvbWlzZVJlamVjdD1mdW5jdGlvbigpe2UuaGlkZVByb21pc2UuY2F0Y2goZnVuY3Rpb24oKXt9KSxlLmhpZGVQcm9taXNlPW51bGwscyhudWxsKX19KSx0aGlzLl9faGlkZSh0KSx0aGlzLmhpZGVQcm9taXNlfHxQcm9taXNlLnJlc29sdmUodCkpOih0aGlzLiRlbWl0KFwiaGlkZVwiLHQpLFByb21pc2UucmVzb2x2ZSgpKSl9LF9fcmVtb3ZlSGlzdG9yeTpmdW5jdGlvbigpe3RoaXMuX19oaXN0b3J5RW50cnkmJihIaXN0b3J5LnJlbW92ZSh0aGlzLl9faGlzdG9yeUVudHJ5KSx0aGlzLl9faGlzdG9yeUVudHJ5PW51bGwpfX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2hvd2luZyYmKHRoaXMuc2hvd1Byb21pc2UmJnRoaXMuc2hvd1Byb21pc2VSZWplY3QoKSx0aGlzLmhpZGVQcm9taXNlJiZ0aGlzLmhpZGVQcm9taXNlUmVqZWN0KCksdGhpcy5fX3JlbW92ZUhpc3RvcnkoKSl9fSxsaXN0ZW5PcHRzPXt9O2Z1bmN0aW9uIGxlZnRDbGljayh0KXtyZXR1cm4gMD09PXQuYnV0dG9ufWZ1bmN0aW9uIG1pZGRsZUNsaWNrKHQpe3JldHVybiAxPT09dC5idXR0b259ZnVuY3Rpb24gcmlnaHRDbGljayh0KXtyZXR1cm4gMj09PXQuYnV0dG9ufWZ1bmN0aW9uIGdldEV2ZW50S2V5KHQpe3JldHVybiB0LndoaWNofHx0LmtleUNvZGV9ZnVuY3Rpb24gcG9zaXRpb24odCl7dmFyIGUsaTtpZih0LnRvdWNoZXMmJnQudG91Y2hlc1swXT90PXQudG91Y2hlc1swXTp0LmNoYW5nZWRUb3VjaGVzJiZ0LmNoYW5nZWRUb3VjaGVzWzBdJiYodD10LmNoYW5nZWRUb3VjaGVzWzBdKSx0LmNsaWVudFh8fHQuY2xpZW50WSllPXQuY2xpZW50WCxpPXQuY2xpZW50WTtlbHNlIGlmKHQucGFnZVh8fHQucGFnZVkpZT10LnBhZ2VYLWRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdC1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCxpPXQucGFnZVktZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AtZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtlbHNle3ZhciBzPXRhcmdldEVsZW1lbnQodCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZT0ocy5yaWdodC1zLmxlZnQpLzIrcy5sZWZ0LGk9KHMuYm90dG9tLXMudG9wKS8yK3MudG9wfXJldHVybnt0b3A6aSxsZWZ0OmV9fWZ1bmN0aW9uIHRhcmdldEVsZW1lbnQodCl7dmFyIGU7cmV0dXJuIHQudGFyZ2V0P2U9dC50YXJnZXQ6dC5zcmNFbGVtZW50JiYoZT10LnNyY0VsZW1lbnQpLDM9PT1lLm5vZGVUeXBlJiYoZT1lLnBhcmVudE5vZGUpLGV9ZnVuY3Rpb24gZ2V0RXZlbnRQYXRoKHQpe2lmKHQucGF0aClyZXR1cm4gdC5wYXRoO2lmKHQuY29tcG9zZWRQYXRoKXJldHVybiB0LmNvbXBvc2VkUGF0aCgpO2Zvcih2YXIgZT1bXSxpPXQudGFyZ2V0O2k7KXtpZihlLnB1c2goaSksXCJIVE1MXCI9PT1pLnRhZ05hbWUpcmV0dXJuIGUucHVzaChkb2N1bWVudCksZS5wdXNoKHdpbmRvdyksZTtpPWkucGFyZW50RWxlbWVudH19T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpc3Rlbk9wdHMsXCJwYXNzaXZlXCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgdDt0cnl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXt0PXtwYXNzaXZlOiEwfX19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInF0ZXN0XCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInF0ZXN0XCIsbnVsbCxlKX1jYXRjaCh0KXt9cmV0dXJuIGxpc3Rlbk9wdHMucGFzc2l2ZT10LHR9LHNldDpmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhc3NpdmVcIix7dmFsdWU6dH0pfX0pO3ZhciBMSU5FX0hFSUdIVD00MCxQQUdFX0hFSUdIVD04MDA7ZnVuY3Rpb24gZ2V0TW91c2VXaGVlbERpc3RhbmNlKHQpe3ZhciBlLGk9dC5kZWx0YVgscz10LmRlbHRhWTtpZigoaXx8cykmJnQuZGVsdGFNb2RlKXt2YXIgbj0xPT09dC5kZWx0YU1vZGU/TElORV9IRUlHSFQ6UEFHRV9IRUlHSFQ7aSo9bixzKj1ufXJldHVybiB0LnNoaWZ0S2V5JiYhaSYmKHM9KGU9W2ksc10pWzBdLGk9ZVsxXSkse3g6aSx5OnN9fWZ1bmN0aW9uIHN0b3BBbmRQcmV2ZW50KHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpfXZhciBldmVudD17bGlzdGVuT3B0czpsaXN0ZW5PcHRzLGxlZnRDbGljazpsZWZ0Q2xpY2ssbWlkZGxlQ2xpY2s6bWlkZGxlQ2xpY2sscmlnaHRDbGljazpyaWdodENsaWNrLGdldEV2ZW50S2V5OmdldEV2ZW50S2V5LHBvc2l0aW9uOnBvc2l0aW9uLHRhcmdldEVsZW1lbnQ6dGFyZ2V0RWxlbWVudCxnZXRFdmVudFBhdGg6Z2V0RXZlbnRQYXRoLGdldE1vdXNlV2hlZWxEaXN0YW5jZTpnZXRNb3VzZVdoZWVsRGlzdGFuY2Usc3RvcEFuZFByZXZlbnQ6c3RvcEFuZFByZXZlbnR9O2Z1bmN0aW9uIG9mZnNldCh0KXtpZighdHx8dD09PXdpbmRvdylyZXR1cm57dG9wOjAsbGVmdDowfTt2YXIgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6ZS50b3AsbGVmdDplLmxlZnR9fWZ1bmN0aW9uIHN0eWxlKHQsZSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gaGVpZ2h0KHQpe3JldHVybiB0PT09d2luZG93P3dpbmRvdy5pbm5lckhlaWdodDpwYXJzZUZsb2F0KHN0eWxlKHQsXCJoZWlnaHRcIikpfWZ1bmN0aW9uIHdpZHRoKHQpe3JldHVybiB0PT09d2luZG93P3dpbmRvdy5pbm5lcldpZHRoOnBhcnNlRmxvYXQoc3R5bGUodCxcIndpZHRoXCIpKX1mdW5jdGlvbiBjc3ModCxlKXt2YXIgaT10LnN0eWxlO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XT1lW3RdfSl9ZnVuY3Rpb24gcmVhZHkodCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm5cImxvYWRpbmdcIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/dCgpOnZvaWQgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIix0LCExKX12YXIgcHJlZml4PVtcIi13ZWJraXQtXCIsXCItbW96LVwiLFwiLW1zLVwiLFwiLW8tXCJdO2Z1bmN0aW9uIGNzc1RyYW5zZm9ybSh0KXt2YXIgZT17dHJhbnNmb3JtOnR9O3JldHVybiBwcmVmaXguZm9yRWFjaChmdW5jdGlvbihpKXtlW2krXCJ0cmFuc2Zvcm1cIl09dH0pLGV9dmFyIHNpemUsZG9tPXtvZmZzZXQ6b2Zmc2V0LHN0eWxlOnN0eWxlLGhlaWdodDpoZWlnaHQsd2lkdGg6d2lkdGgsY3NzOmNzcyxyZWFkeTpyZWFkeSxjc3NUcmFuc2Zvcm06Y3NzVHJhbnNmb3JtfTtmdW5jdGlvbiBnZXRTY3JvbGxUYXJnZXQodCl7cmV0dXJuIHQuY2xvc2VzdChcIi5zY3JvbGwsLnNjcm9sbC15LC5vdmVyZmxvdy1hdXRvXCIpfHx3aW5kb3d9ZnVuY3Rpb24gZ2V0U2Nyb2xsSGVpZ2h0KHQpe3JldHVybih0PT09d2luZG93P2RvY3VtZW50LmJvZHk6dCkuc2Nyb2xsSGVpZ2h0fWZ1bmN0aW9uIGdldFNjcm9sbFBvc2l0aW9uKHQpe3JldHVybiB0PT09d2luZG93P3dpbmRvdy5wYWdlWU9mZnNldHx8d2luZG93LnNjcm9sbFl8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wfHwwOnQuc2Nyb2xsVG9wfWZ1bmN0aW9uIGdldEhvcml6b250YWxTY3JvbGxQb3NpdGlvbih0KXtyZXR1cm4gdD09PXdpbmRvdz93aW5kb3cucGFnZVhPZmZzZXR8fHdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnR8fDA6dC5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGFuaW1TY3JvbGxUbyh0LGUsaSl7dmFyIHM9Z2V0U2Nyb2xsUG9zaXRpb24odCk7aTw9MD9zIT09ZSYmc2V0U2Nyb2xsKHQsZSk6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dmFyIG49cysoZS1zKS9NYXRoLm1heCgxNixpKSoxNjtzZXRTY3JvbGwodCxuKSxuIT09ZSYmYW5pbVNjcm9sbFRvKHQsZSxpLTE2KX0pfWZ1bmN0aW9uIHNldFNjcm9sbCh0LGUpe2lmKHQ9PT13aW5kb3cpcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A9ZSx2b2lkKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wPWUpO3Quc2Nyb2xsVG9wPWV9ZnVuY3Rpb24gc2V0U2Nyb2xsUG9zaXRpb24odCxlLGkpe2k/YW5pbVNjcm9sbFRvKHQsZSxpKTpzZXRTY3JvbGwodCxlKX1mdW5jdGlvbiBnZXRTY3JvbGxiYXJXaWR0aCgpe2lmKHZvaWQgMCE9PXNpemUpcmV0dXJuIHNpemU7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIiksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Nzcyh0LHt3aWR0aDpcIjEwMCVcIixoZWlnaHQ6XCIyMDBweFwifSksY3NzKGUse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCIwcHhcIixsZWZ0OlwiMHB4XCIsdmlzaWJpbGl0eTpcImhpZGRlblwiLHdpZHRoOlwiMjAwcHhcIixoZWlnaHQ6XCIxNTBweFwiLG92ZXJmbG93OlwiaGlkZGVuXCJ9KSxlLmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7dmFyIGk9dC5vZmZzZXRXaWR0aDtlLnN0eWxlLm92ZXJmbG93PVwic2Nyb2xsXCI7dmFyIHM9dC5vZmZzZXRXaWR0aDtyZXR1cm4gaT09PXMmJihzPWUuY2xpZW50V2lkdGgpLGUucmVtb3ZlKCksc2l6ZT1pLXN9ZnVuY3Rpb24gaGFzU2Nyb2xsYmFyKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPSEwKSwhKCF0fHx0Lm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpJiYoZT90LnNjcm9sbEhlaWdodD50LmNsaWVudEhlaWdodCYmKHQuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2Nyb2xsXCIpfHx0LmNsYXNzTGlzdC5jb250YWlucyhcIm92ZXJmbG93LWF1dG9cIil8fFtcImF1dG9cIixcInNjcm9sbFwiXS5pbmNsdWRlcyh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KVtcIm92ZXJmbG93LXlcIl0pKTp0LnNjcm9sbFdpZHRoPnQuY2xpZW50V2lkdGgmJih0LmNsYXNzTGlzdC5jb250YWlucyhcInNjcm9sbFwiKXx8dC5jbGFzc0xpc3QuY29udGFpbnMoXCJvdmVyZmxvdy1hdXRvXCIpfHxbXCJhdXRvXCIsXCJzY3JvbGxcIl0uaW5jbHVkZXMod2luZG93LmdldENvbXB1dGVkU3R5bGUodClbXCJvdmVyZmxvdy14XCJdKSkpfXZhciBzY3JvbGw9e2dldFNjcm9sbFRhcmdldDpnZXRTY3JvbGxUYXJnZXQsZ2V0U2Nyb2xsSGVpZ2h0OmdldFNjcm9sbEhlaWdodCxnZXRTY3JvbGxQb3NpdGlvbjpnZXRTY3JvbGxQb3NpdGlvbixhbmltU2Nyb2xsVG86YW5pbVNjcm9sbFRvLHNldFNjcm9sbFBvc2l0aW9uOnNldFNjcm9sbFBvc2l0aW9uLGdldFNjcm9sbGJhcldpZHRoOmdldFNjcm9sbGJhcldpZHRoLGhhc1Njcm9sbGJhcjpoYXNTY3JvbGxiYXJ9LHJlZ2lzdGVyZWQ9MDtmdW5jdGlvbiBvbldoZWVsKHQpe3Nob3VsZFByZXZlbnRTY3JvbGwodCkmJnN0b3BBbmRQcmV2ZW50KHQpfWZ1bmN0aW9uIHNob3VsZFByZXZlbnRTY3JvbGwodCl7aWYodC50YXJnZXQ9PT1kb2N1bWVudC5ib2R5fHx0LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLWxheW91dC1iYWNrZHJvcFwiKSlyZXR1cm4hMDtmb3IodmFyIGU9Z2V0RXZlbnRQYXRoKHQpLGk9dC5zaGlmdEtleSYmIXQuZGVsdGFYLHM9IWkmJk1hdGguYWJzKHQuZGVsdGFYKTw9TWF0aC5hYnModC5kZWx0YVkpLG49aXx8cz90LmRlbHRhWTp0LmRlbHRhWCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWVbb107aWYoaGFzU2Nyb2xsYmFyKHIscykpcmV0dXJuIHM/bjwwJiYwPT09ci5zY3JvbGxUb3B8fG4+MCYmci5zY3JvbGxUb3Arci5jbGllbnRIZWlnaHQ9PT1yLnNjcm9sbEhlaWdodDpuPDAmJjA9PT1yLnNjcm9sbExlZnR8fG4+MCYmci5zY3JvbGxMZWZ0K3IuY2xpZW50V2lkdGg9PT1yLnNjcm9sbFdpZHRofXJldHVybiEwfWZ1bmN0aW9uIHByZXZlbnRTY3JvbGwodCl7aWYoISgocmVnaXN0ZXJlZCs9dD8xOi0xKT4xKSl7dmFyIGU9dD9cImFkZFwiOlwicmVtb3ZlXCI7UGxhdGZvcm0uaXMubW9iaWxlP2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0W2VdKFwicS1ib2R5LXByZXZlbnQtc2Nyb2xsXCIpOlBsYXRmb3JtLmlzLmRlc2t0b3AmJndpbmRvd1tlK1wiRXZlbnRMaXN0ZW5lclwiXShcIndoZWVsXCIsb25XaGVlbCl9fXZhciBwb3NpdGlvbnM9e3RvcDpcIml0ZW1zLXN0YXJ0IGp1c3RpZnktY2VudGVyIHdpdGgtYmFja2Ryb3BcIixib3R0b206XCJpdGVtcy1lbmQganVzdGlmeS1jZW50ZXIgd2l0aC1iYWNrZHJvcFwiLHJpZ2h0OlwiaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIHdpdGgtYmFja2Ryb3BcIixsZWZ0OlwiaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgd2l0aC1iYWNrZHJvcFwifSxwb3NpdGlvbkNTUz17bWF4SGVpZ2h0OlwiODB2aFwiLGhlaWdodDpcImF1dG9cIn07ZnVuY3Rpb24gYWRkaXRpb25hbENTUyh0KXt2YXIgZT17fTtyZXR1cm5bXCJsZWZ0XCIsXCJyaWdodFwiXS5pbmNsdWRlcyh0KSYmKGUubWF4V2lkdGg9XCI5MHZ3XCIpLFtcImxlZnRcIixcInRvcFwiXS5pbmNsdWRlcyh0KSYmKGUuYm9yZGVyVG9wTGVmdFJhZGl1cz0wKSxbXCJyaWdodFwiLFwidG9wXCJdLmluY2x1ZGVzKHQpJiYoZS5ib3JkZXJUb3BSaWdodFJhZGl1cz0wKSxbXCJsZWZ0XCIsXCJib3R0b21cIl0uaW5jbHVkZXModCkmJihlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXM9MCksW1wicmlnaHRcIixcImJvdHRvbVwiXS5pbmNsdWRlcyh0KSYmKGUuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM9MCksZX12YXIgbW9kYWxzPXtyZXNwb25zaXZlOjAsbWF4aW1pemVkOjB9LFFNb2RhbD17bmFtZTpcIlFNb2RhbFwiLG1peGluczpbTW9kZWxUb2dnbGVNaXhpbl0scHJvdmlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue19fcW1vZGFsOntyZWdpc3RlcjpmdW5jdGlvbihlKXt0LmxheW91dCE9PWUmJih0LmxheW91dD1lKX0sdW5yZWdpc3RlcjpmdW5jdGlvbihlKXt0LmxheW91dD09PWUmJih0LmxheW91dD1udWxsKX19fX0scHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVyblwiXCI9PT10fHxbXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSx0cmFuc2l0aW9uOlN0cmluZyxlbnRlckNsYXNzOlN0cmluZyxsZWF2ZUNsYXNzOlN0cmluZyxwb3NpdGlvbkNsYXNzZXM6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJmbGV4LWNlbnRlclwifSxjb250ZW50Q2xhc3NlczpbT2JqZWN0LEFycmF5LFN0cmluZ10sY29udGVudENzczpbT2JqZWN0LEFycmF5LFN0cmluZ10sbm9CYWNrZHJvcERpc21pc3M6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxub0VzY0Rpc21pc3M6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfSxub1JvdXRlRGlzbWlzczpCb29sZWFuLG5vUmVmb2N1czpCb29sZWFuLG1pbmltaXplZDpCb29sZWFuLG1heGltaXplZDpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2xheW91dDpudWxsfX0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpe3RoaXMubm9Sb3V0ZURpc21pc3N8fHRoaXMuaGlkZSgpfSxtYXhpbWl6ZWQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9fcmVnaXN0ZXIoITEsZSksdGhpcy5fX3JlZ2lzdGVyKCEwLHQpfSxtaW5pbWl6ZWQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9fcmVnaXN0ZXIoITEsdGhpcy5tYXhpbWl6ZWQsZSksdGhpcy5fX3JlZ2lzdGVyKCEwLHRoaXMubWF4aW1pemVkLHQpfX0sY29tcHV0ZWQ6e21vZGFsQ2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb24/cG9zaXRpb25zW3RoaXMucG9zaXRpb25dOnRoaXMucG9zaXRpb25DbGFzc2VzO3JldHVybiB0aGlzLm1heGltaXplZD9bXCJtYXhpbWl6ZWRcIix0XTp0aGlzLm1pbmltaXplZD9bXCJtaW5pbWl6ZWRcIix0XTp0fSxjb250ZW50Q2xhc3Nlc0NhbGM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQ/W3RoaXMuY29udGVudENsYXNzZXMsXCJjb2x1bW4gbm8td3JhcFwiXTp0aGlzLmNvbnRlbnRDbGFzc2VzfSx0cmFuc2l0aW9uUHJvcHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj97bmFtZTpcInEtbW9kYWwtXCIrdGhpcy5wb3NpdGlvbn06dGhpcy5lbnRlckNsYXNzfHx0aGlzLmxlYXZlQ2xhc3M/e2VudGVyQWN0aXZlQ2xhc3M6dGhpcy5lbnRlckNsYXNzLGxlYXZlQWN0aXZlQ2xhc3M6dGhpcy5sZWF2ZUNsYXNzfTp7bmFtZTp0aGlzLnRyYW5zaXRpb258fFwicS1tb2RhbFwifX0sbW9kYWxDc3M6ZnVuY3Rpb24oKXtpZih0aGlzLnBvc2l0aW9uKXt2YXIgdD1BcnJheS5pc0FycmF5KHRoaXMuY29udGVudENzcyk/dGhpcy5jb250ZW50Q3NzOlt0aGlzLmNvbnRlbnRDc3NdO3JldHVybiB0LnVuc2hpZnQoT2JqZWN0LmFzc2lnbih7fSxwb3NpdGlvbkNTUyxhZGRpdGlvbmFsQ1NTKHRoaXMucG9zaXRpb24pKSksdH1yZXR1cm4gdGhpcy5jb250ZW50Q3NzfX0sbWV0aG9kczp7X19kaXNtaXNzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLm5vQmFja2Ryb3BEaXNtaXNzP3RoaXMuX19zaGFrZSgpOnRoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiZGlzbWlzc1wiKX0pfSxfX3Nob3c6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubm9SZWZvY3VzfHwodGhpcy5fX3JlZm9jdXNUYXJnZXQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCksdGhpcy5fX3JlZ2lzdGVyKCEwKSxwcmV2ZW50U2Nyb2xsKCEwKSxFc2NhcGVLZXkucmVnaXN0ZXIoZnVuY3Rpb24oKXt0Lm5vRXNjRGlzbWlzcz90Ll9fc2hha2UoKToodC4kZW1pdChcImVzY2FwZS1rZXlcIiksdC5oaWRlKCkudGhlbihmdW5jdGlvbigpe3QuJGVtaXQoXCJkaXNtaXNzXCIpfSkpfSk7dmFyIGU9dGhpcy4kcmVmcy5jb250ZW50O3RoaXMuJHEucGxhdGZvcm0uaXMuaW9zJiZlLmNsaWNrKCksZS5zY3JvbGxUb3A9MCxbXCJtb2RhbC1zY3JvbGxcIixcImxheW91dC12aWV3XCJdLmZvckVhY2goZnVuY3Rpb24odCl7W10uc2xpY2UuY2FsbChlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUodCkpLmZvckVhY2goZnVuY3Rpb24odCl7dC5zY3JvbGxUb3A9MH0pfSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gZSYmZS5mb2N1cygpfSl9LF9faGlkZTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCksIXRoaXMubm9SZWZvY3VzJiZ0aGlzLl9fcmVmb2N1c1RhcmdldCYmKHRoaXMuX19yZWZvY3VzVGFyZ2V0LmZvY3VzKCksIXRoaXMuX19yZWZvY3VzVGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcInEtaWZcIikmJnRoaXMuX19yZWZvY3VzVGFyZ2V0LmJsdXIoKSl9LF9fY2xlYW51cDpmdW5jdGlvbigpe0VzY2FwZUtleS5wb3AoKSxwcmV2ZW50U2Nyb2xsKCExKSx0aGlzLl9fcmVnaXN0ZXIoITEpfSxfX3N0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfSxfX3JlZ2lzdGVyOmZ1bmN0aW9uKHQsZSxpKXt2b2lkIDA9PT1lJiYoZT10aGlzLm1heGltaXplZCksdm9pZCAwPT09aSYmKGk9dGhpcy5taW5pbWl6ZWQpO3ZhciBzPXQ/e2FjdGlvbjpcImFkZFwiLHN0ZXA6MX06e2FjdGlvbjpcInJlbW92ZVwiLHN0ZXA6LTF9O2lmKGUpe2lmKG1vZGFscy5tYXhpbWl6ZWQrPXMuc3RlcCwhdCYmbW9kYWxzLm1heGltaXplZD4wKXJldHVybjtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdFtzLmFjdGlvbl0oXCJxLW1heGltaXplZC1tb2RhbFwiKX1lbHNlIGlmKCFpKXtpZihtb2RhbHMucmVzcG9uc2l2ZSs9cy5zdGVwLCF0JiZtb2RhbHMucmVzcG9uc2l2ZT4wKXJldHVybjtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdFtzLmFjdGlvbl0oXCJxLXJlc3BvbnNpdmUtbW9kYWxcIil9fSxfX3NoYWtlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYW5pbWF0ZS1zaGFrZVwiKSx0aGlzLiRlbC5jbGFzc0xpc3QuYWRkKFwiYW5pbWF0ZS1zaGFrZVwiKSxjbGVhclRpbWVvdXQodGhpcy5zaGFrZVRpbWVvdXQpLHRoaXMuc2hha2VUaW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LiRlbC5jbGFzc0xpc3QucmVtb3ZlKFwiYW5pbWF0ZS1zaGFrZVwiKX0sMTUwKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLnZhbHVlJiZ0aGlzLnNob3coKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNoYWtlVGltZW91dCksdGhpcy4kZWwucmVtb3ZlKCksdGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcInRyYW5zaXRpb25cIix7cHJvcHM6dGhpcy50cmFuc2l0aW9uUHJvcHMsb246e2FmdGVyRW50ZXI6ZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlJiZlLnNob3dQcm9taXNlUmVzb2x2ZSgpfSxlbnRlckNhbmNlbGxlZDpmdW5jdGlvbigpe2Uuc2hvd1Byb21pc2UmJmUuc2hvd1Byb21pc2VSZWplY3QoKSxlLiRlbC5yZW1vdmUoKX0sYWZ0ZXJMZWF2ZTpmdW5jdGlvbigpe2UuaGlkZVByb21pc2UmJmUuaGlkZVByb21pc2VSZXNvbHZlKCksZS4kZWwucmVtb3ZlKCl9LGxlYXZlQ2FuY2VsbGVkOmZ1bmN0aW9uKCl7ZS5oaWRlUHJvbWlzZSYmZS5oaWRlUHJvbWlzZVJlamVjdCgpfX19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwgZnVsbHNjcmVlbiByb3dcIixjbGFzczp0aGlzLm1vZGFsQ2xhc3NlcyxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTp0aGlzLnNob3dpbmd9XX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1iYWNrZHJvcCBhYnNvbHV0ZS1mdWxsXCIsb246e2NsaWNrOnRoaXMuX19kaXNtaXNzfX0pLHQoXCJkaXZcIix7cmVmOlwiY29udGVudFwiLHN0YXRpY0NsYXNzOlwibW9kYWwtY29udGVudFwiLHN0eWxlOnRoaXMubW9kYWxDc3MsY2xhc3M6dGhpcy5jb250ZW50Q2xhc3Nlc0NhbGMsYXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6dGhpcy5fX3N0b3BQcm9wYWdhdGlvbix0b3VjaHN0YXJ0OnRoaXMuX19zdG9wUHJvcGFnYXRpb259fSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pXSl9fSxwcmVmaXgkMT1cIm1kXCIsUUljb249e25hbWU6XCJRSWNvblwiLHByb3BzOntuYW1lOlN0cmluZyxjb2xvcjpTdHJpbmcsc2l6ZTpTdHJpbmd9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLm5hbWU7cmV0dXJuIGU/KHQ9L15mYVtzfHJ8bHxiXXswLDF9IC8udGVzdChlKXx8ZS5zdGFydHNXaXRoKFwiaWNvbi1cIik/ZTplLnN0YXJ0c1dpdGgoXCJidC1cIik/XCJidCBcIitlOmUuc3RhcnRzV2l0aChcImV2YS1cIik/XCJldmEgXCIrZTovXmlvbi0obWR8aW9zfGxvZ28pLy50ZXN0KGUpP1wiaW9uaWNvbnMgXCIrZTplLnN0YXJ0c1dpdGgoXCJpb24tXCIpP1wiaW9uaWNvbnMgaW9uLVwiK3ByZWZpeCQxK2Uuc3Vic3RyKDMpOmUuc3RhcnRzV2l0aChcIm1kaS1cIik/XCJtZGkgXCIrZTpcIm1hdGVyaWFsLWljb25zXCIsdGhpcy5jb2xvcj90K1wiIHRleHQtXCIrdGhpcy5jb2xvcjp0KTpcIlwifSxjb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3Nlcy5zdGFydHNXaXRoKFwibWF0ZXJpYWwtaWNvbnNcIik/dGhpcy5uYW1lLnJlcGxhY2UoLyAvZyxcIl9cIik6XCIgXCJ9LHN0eWxlOmZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKXJldHVybntmb250U2l6ZTp0aGlzLnNpemV9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiaVwiLHtzdGF0aWNDbGFzczpcInEtaWNvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp0aGlzLnN0eWxlLGF0dHJzOntcImFyaWEtaGlkZGVuXCI6ITB9fSxbdGhpcy5jb250ZW50LHRoaXMuJHNsb3RzLmRlZmF1bHRdKX19LFFMaXN0PXtuYW1lOlwiUUxpc3RcIixwcm9wczp7bm9Cb3JkZXI6Qm9vbGVhbixkYXJrOkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixzcGFyc2U6Qm9vbGVhbixzdHJpcGVkOkJvb2xlYW4sc3RyaXBlZE9kZDpCb29sZWFuLHNlcGFyYXRvcjpCb29sZWFuLGluc2V0U2VwYXJhdG9yOkJvb2xlYW4sbXVsdGlsaW5lOkJvb2xlYW4saGlnaGxpZ2h0OkJvb2xlYW4sbGluazpCb29sZWFufSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcIm5vLWJvcmRlclwiOnRoaXMubm9Cb3JkZXIsXCJxLWxpc3QtZGFya1wiOnRoaXMuZGFyayxcInEtbGlzdC1kZW5zZVwiOnRoaXMuZGVuc2UsXCJxLWxpc3Qtc3BhcnNlXCI6dGhpcy5zcGFyc2UsXCJxLWxpc3Qtc3RyaXBlZFwiOnRoaXMuc3RyaXBlZCxcInEtbGlzdC1zdHJpcGVkLW9kZFwiOnRoaXMuc3RyaXBlZE9kZCxcInEtbGlzdC1zZXBhcmF0b3JcIjp0aGlzLnNlcGFyYXRvcixcInEtbGlzdC1pbnNldC1zZXBhcmF0b3JcIjp0aGlzLmluc2V0U2VwYXJhdG9yLFwicS1saXN0LW11bHRpbGluZVwiOnRoaXMubXVsdGlsaW5lLFwicS1saXN0LWhpZ2hsaWdodFwiOnRoaXMuaGlnaGxpZ2h0LFwicS1saXN0LWxpbmtcIjp0aGlzLmxpbmt9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1saXN0XCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LHJvdXRlckxpbmtFdmVudE5hbWU9XCJxcm91dGVybGlua2NsaWNrXCIsZXZ0PW51bGw7aWYoIWlzU1NSKXRyeXtldnQ9bmV3IEV2ZW50KHJvdXRlckxpbmtFdmVudE5hbWUpfWNhdGNoKHQpeyhldnQ9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKSkuaW5pdEV2ZW50KHJvdXRlckxpbmtFdmVudE5hbWUsITAsITEpfXZhciByb3V0ZXJMaW5rUHJvcHM9e3RvOltTdHJpbmcsT2JqZWN0XSxleGFjdDpCb29sZWFuLGFwcGVuZDpCb29sZWFuLHJlcGxhY2U6Qm9vbGVhbixldmVudDpbU3RyaW5nLEFycmF5XSxhY3RpdmVDbGFzczpTdHJpbmcsZXhhY3RBY3RpdmVDbGFzczpTdHJpbmd9LFJvdXRlckxpbmtNaXhpbj17cHJvcHM6cm91dGVyTGlua1Byb3BzLGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cm91dGVyTGlua0V2ZW50TmFtZTpyb3V0ZXJMaW5rRXZlbnROYW1lfX19O2Z1bmN0aW9uIHRleHRTdHlsZSh0KXtyZXR1cm4gdm9pZCAwPT09dHx8dDwyP3t9OntvdmVyZmxvdzpcImhpZGRlblwiLGRpc3BsYXk6XCItd2Via2l0LWJveFwiLFwiLXdlYmtpdC1ib3gtb3JpZW50XCI6XCJ2ZXJ0aWNhbFwiLFwiLXdlYmtpdC1saW5lLWNsYW1wXCI6dH19dmFyIHN1Ykl0ZW1Qcm9wcz17aWNvbjpTdHJpbmcscmlnaHRJY29uOlN0cmluZyxpbWFnZTpTdHJpbmcscmlnaHRJbWFnZTpTdHJpbmcsYXZhdGFyOlN0cmluZyxyaWdodEF2YXRhcjpTdHJpbmcsbGV0dGVyOlN0cmluZyxyaWdodExldHRlcjpTdHJpbmcsbGFiZWw6U3RyaW5nLHN1YmxhYmVsOlN0cmluZyxsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXSxzdWJsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXX0sSXRlbU1peGluPXttaXhpbnM6W3twcm9wczpyb3V0ZXJMaW5rUHJvcHN9XSxwcm9wczp7ZGFyazpCb29sZWFuLGxpbms6Qm9vbGVhbixkZW5zZTpCb29sZWFuLHNwYXJzZTpCb29sZWFuLHNlcGFyYXRvcjpCb29sZWFuLGluc2V0U2VwYXJhdG9yOkJvb2xlYW4sbXVsdGlsaW5lOkJvb2xlYW4saGlnaGxpZ2h0OkJvb2xlYW4sdGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9fSxjb21wdXRlZDp7aXRlbUNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLWl0ZW1cIjohMCxcInEtaXRlbS1kaXZpc2lvblwiOiEwLFwicmVsYXRpdmUtcG9zaXRpb25cIjohMCxcInEtaXRlbS1kYXJrXCI6dGhpcy5kYXJrLFwicS1pdGVtLWRlbnNlXCI6dGhpcy5kZW5zZSxcInEtaXRlbS1zcGFyc2VcIjp0aGlzLnNwYXJzZSxcInEtaXRlbS1zZXBhcmF0b3JcIjp0aGlzLnNlcGFyYXRvcixcInEtaXRlbS1pbnNldC1zZXBhcmF0b3JcIjp0aGlzLmluc2V0U2VwYXJhdG9yLFwicS1pdGVtLW11bHRpbGluZVwiOnRoaXMubXVsdGlsaW5lLFwicS1pdGVtLWhpZ2hsaWdodFwiOnRoaXMuaGlnaGxpZ2h0LFwicS1pdGVtLWxpbmtcIjp0aGlzLnRvfHx0aGlzLmxpbmt9fX19LFFJdGVtPXtuYW1lOlwiUUl0ZW1cIixtaXhpbnM6W0l0ZW1NaXhpbl0scHJvcHM6e2FjdGl2ZTpCb29sZWFuLGxpbms6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bdm9pZCAwIT09dGhpcy50bz9cInEtbGlua1wiOnthY3RpdmU6dGhpcy5hY3RpdmV9LHRoaXMuaXRlbUNsYXNzZXNdfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10aGlzLnRvP3QoXCJyb3V0ZXItbGlua1wiLHtwcm9wczpPYmplY3QuYXNzaWduKHt9LHRoaXMuJHByb3BzLHt0YWc6XCJhXCJ9KSxjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpOnQodGhpcy50YWcse2NsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRSXRlbVNpZGU9e25hbWU6XCJRSXRlbVNpZGVcIixwcm9wczp7cmlnaHQ6Qm9vbGVhbixpY29uOlN0cmluZyxsZXR0ZXI6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RofX0saW52ZXJ0ZWQ6Qm9vbGVhbixhdmF0YXI6U3RyaW5nLGltYWdlOlN0cmluZyxzdGFtcDpTdHJpbmcsY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmd9LGNvbXB1dGVkOnt0eXBlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm5bXCJpY29uXCIsXCJpbWFnZVwiLFwiYXZhdGFyXCIsXCJsZXR0ZXJcIixcInN0YW1wXCJdLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtcInEtaXRlbS1zaWRlLVwiKyh0aGlzLnJpZ2h0P1wicmlnaHRcIjpcImxlZnRcIildO3JldHVybiF0aGlzLmNvbG9yfHx0aGlzLmljb258fHRoaXMubGV0dGVyfHx0LnB1c2goXCJ0ZXh0LVwiK3RoaXMuY29sb3IpLHR9LHR5cGVDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W1wicS1pdGVtLVwiK3RoaXMudHlwZV07cmV0dXJuIHRoaXMuY29sb3ImJih0aGlzLmludmVydGVkJiYodGhpcy5pY29ufHx0aGlzLmxldHRlcik/dC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvcik6dGhpcy50ZXh0Q29sb3J8fHQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvcikpLHRoaXMudGV4dENvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSx0aGlzLmludmVydGVkJiYodGhpcy5pY29ufHx0aGlzLmxldHRlcikmJih0LnB1c2goXCJxLWl0ZW0taW52ZXJ0ZWRcIiksdC5wdXNoKFwiZmxleFwiKSx0LnB1c2goXCJmbGV4LWNlbnRlclwiKSksdH0saW1hZ2VQYXRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2V8fHRoaXMuYXZhdGFyfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0aGlzLnR5cGUmJih0aGlzLmljb24/KGU9dChRSWNvbix7Y2xhc3M6dGhpcy5pbnZlcnRlZD9udWxsOnRoaXMudHlwZUNsYXNzZXMscHJvcHM6e25hbWU6dGhpcy5pY29ufX0pLHRoaXMuaW52ZXJ0ZWQmJihlPXQoXCJkaXZcIix7Y2xhc3M6dGhpcy50eXBlQ2xhc3Nlc30sW2VdKSkpOmU9dGhpcy5pbWFnZVBhdGg/dChcImltZ1wiLHtjbGFzczp0aGlzLnR5cGVDbGFzc2VzLGF0dHJzOntzcmM6dGhpcy5pbWFnZVBhdGh9fSk6dChcImRpdlwiLHtjbGFzczp0aGlzLnR5cGVDbGFzc2VzfSxbdGhpcy5zdGFtcHx8dGhpcy5sZXR0ZXJdKSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaXRlbS1zaWRlIHEtaXRlbS1zZWN0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbZSx0aGlzLiRzbG90cy5kZWZhdWx0XSl9fTtmdW5jdGlvbiB0ZXh0KHQsZSxpLHMpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pdGVtLVwiK2UrKDE9PT0ocz1wYXJzZUludChzLDEwKSk/XCIgZWxsaXBzaXNcIjpcIlwiKSxzdHlsZTp0ZXh0U3R5bGUocyksZG9tUHJvcHM6e2lubmVySFRNTDppfX0pfXZhciBRSXRlbU1haW49e25hbWU6XCJRSXRlbU1haW5cIixwcm9wczp7bGFiZWw6U3RyaW5nLGxhYmVsTGluZXM6W1N0cmluZyxOdW1iZXJdLHN1YmxhYmVsOlN0cmluZyxzdWJsYWJlbExpbmVzOltTdHJpbmcsTnVtYmVyXSxpbnNldDpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRpdlwifX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtaXRlbS1tYWluIHEtaXRlbS1zZWN0aW9uXCIsY2xhc3M6e1wicS1pdGVtLW1haW4taW5zZXRcIjp0aGlzLmluc2V0fX0sW3RoaXMubGFiZWw/dGV4dCh0LFwibGFiZWxcIix0aGlzLmxhYmVsLHRoaXMubGFiZWxMaW5lcyk6bnVsbCx0aGlzLnN1YmxhYmVsP3RleHQodCxcInN1YmxhYmVsXCIsdGhpcy5zdWJsYWJlbCx0aGlzLnN1YmxhYmVsTGluZXMpOm51bGwsdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sUUl0ZW1TZXBhcmF0b3I9e25hbWU6XCJRSXRlbVNlcGFyYXRvclwiLHByb3BzOntpbnNldDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWl0ZW0tc2VwYXJhdG9yLWNvbXBvbmVudFwiLGNsYXNzOntcInEtaXRlbS1zZXBhcmF0b3ItaW5zZXQtY29tcG9uZW50XCI6dGhpcy5pbnNldH19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUFjdGlvblNoZWV0PXtuYW1lOlwiUUFjdGlvblNoZWV0XCIscHJvcHM6e3ZhbHVlOkJvb2xlYW4sdGl0bGU6U3RyaW5nLGdyaWQ6Qm9vbGVhbixhY3Rpb25zOkFycmF5LGRpc21pc3NMYWJlbDpTdHJpbmd9LGNvbXB1dGVkOntjb250ZW50Q3NzOmZ1bmN0aW9uKCl7fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPXRoaXMuJHNsb3RzLnRpdGxlfHx0aGlzLnRpdGxlO3JldHVybiBzJiZpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWN0aW9uc2hlZXQtdGl0bGUgY29sdW1uIGp1c3RpZnktY2VudGVyXCJ9LFtzXSkpLGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hY3Rpb25zaGVldC1ib2R5IHNjcm9sbFwifSx0aGlzLmFjdGlvbnM/W3RoaXMuZ3JpZD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hY3Rpb25zaGVldC1ncmlkIHJvdyB3cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIn0sdGhpcy5fX2dldEFjdGlvbnModCkpOnQoUUxpc3Qse3N0YXRpY0NsYXNzOlwibm8tYm9yZGVyXCIscHJvcHM6e2xpbms6ITB9fSx0aGlzLl9fZ2V0QWN0aW9ucyh0KSldOnRoaXMuJHNsb3RzLmRlZmF1bHQpKSx0KFFNb2RhbCx7cmVmOlwibW9kYWxcIixwcm9wczp7dmFsdWU6dGhpcy52YWx1ZSxwb3NpdGlvbjpcImJvdHRvbVwiLGNvbnRlbnRDc3M6dGhpcy5jb250ZW50Q3NzfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS4kZW1pdChcImlucHV0XCIsdCl9LHNob3c6ZnVuY3Rpb24oKXtlLiRlbWl0KFwic2hvd1wiKX0saGlkZTpmdW5jdGlvbigpe2UuJGVtaXQoXCJoaWRlXCIpfSxkaXNtaXNzOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImNhbmNlbFwiKX0sXCJlc2NhcGUta2V5XCI6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiZXNjYXBlLWtleVwiKX19fSxpKX0sbWV0aG9kczp7c2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLm1vZGFsLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLm1vZGFsP3RoaXMuJHJlZnMubW9kYWwuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfSxfX2dldEFjdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5hY3Rpb25zLm1hcChmdW5jdGlvbihpKXt2YXIgcztyZXR1cm4gaS5sYWJlbD90KGUuZ3JpZD9cImRpdlwiOlFJdGVtLCgocz17c3RhdGljQ2xhc3M6ZS5ncmlkP1wicS1hY3Rpb25zaGVldC1ncmlkLWl0ZW0gY3Vyc29yLXBvaW50ZXIgcmVsYXRpdmUtcG9zaXRpb24gY29sdW1uIGlubGluZSBmbGV4LWNlbnRlclwiOm51bGwsY2xhc3M6aS5jbGFzc2VzLGF0dHJzOnt0YWJpbmRleDowfX0pW2UuZ3JpZD9cIm9uXCI6XCJuYXRpdmVPblwiXT17Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5fX29uT2soaSl9LGtleXVwOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJmUuX19vbk9rKGkpfX0scyksZS5ncmlkP1tpLmljb24/dChRSWNvbix7cHJvcHM6e25hbWU6aS5pY29uLGNvbG9yOmkuY29sb3J9fSk6bnVsbCxpLmF2YXRhcj90KFwiaW1nXCIse2RvbVByb3BzOntzcmM6aS5hdmF0YXJ9LHN0YXRpY0NsYXNzOlwiYXZhdGFyXCJ9KTpudWxsLHQoXCJzcGFuXCIsW2kubGFiZWxdKV06W3QoUUl0ZW1TaWRlLHtwcm9wczp7aWNvbjppLmljb24sY29sb3I6aS5jb2xvcixhdmF0YXI6aS5hdmF0YXJ9fSksdChRSXRlbU1haW4se3Byb3BzOntpbnNldDohMCxsYWJlbDppLmxhYmVsfX0pXSk6dChRSXRlbVNlcGFyYXRvcix7c3RhdGljQ2xhc3M6XCJjb2wtMTJcIn0pfSl9LF9fb25PazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmhhbmRsZXImJnQuaGFuZGxlcigpLGUuJGVtaXQoXCJva1wiLHQpfSl9LF9fb25DYW5jZWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiY2FuY2VsXCIpfSl9LF9fb25LZXlDYW5jZWw6ZnVuY3Rpb24odCl7MTM9PT1nZXRFdmVudEtleSh0KSYmdGhpcy5fX29uQ2FuY2VsKCl9fX0sdW5pdHM9W1wiQlwiLFwia0JcIixcIk1CXCIsXCJHQlwiLFwiVEJcIixcIlBCXCJdO2Z1bmN0aW9uIGh1bWFuU3RvcmFnZVNpemUodCl7Zm9yKHZhciBlPTA7cGFyc2VJbnQodCwxMCk+PTEwMjQmJmU8dW5pdHMubGVuZ3RoLTE7KXQvPTEwMjQsKytlO3JldHVybiB0LnRvRml4ZWQoMSkrXCIgXCIrdW5pdHNbZV19ZnVuY3Rpb24gY2FwaXRhbGl6ZSh0KXtyZXR1cm4gdC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpfWZ1bmN0aW9uIGJldHdlZW4odCxlLGkpe3JldHVybiBpPD1lP2U6TWF0aC5taW4oaSxNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBub3JtYWxpemVUb0ludGVydmFsKHQsZSxpKXtpZihpPD1lKXJldHVybiBlO3ZhciBzPWktZSsxLG49ZSsodC1lKSVzO3JldHVybiBuPGUmJihuPXMrbiksMD09PW4/MDpufWZ1bmN0aW9uIHBhZCh0LGUsaSl7dm9pZCAwPT09ZSYmKGU9Miksdm9pZCAwPT09aSYmKGk9XCIwXCIpO3ZhciBzPVwiXCIrdDtyZXR1cm4gcy5sZW5ndGg+PWU/czpuZXcgQXJyYXkoZS1zLmxlbmd0aCsxKS5qb2luKGkpK3N9dmFyIGZvcm1hdD17aHVtYW5TdG9yYWdlU2l6ZTpodW1hblN0b3JhZ2VTaXplLGNhcGl0YWxpemU6Y2FwaXRhbGl6ZSxiZXR3ZWVuOmJldHdlZW4sbm9ybWFsaXplVG9JbnRlcnZhbDpub3JtYWxpemVUb0ludGVydmFsLHBhZDpwYWR9LHhocj1pc1NTUj9udWxsOlhNTEh0dHBSZXF1ZXN0LHNlbmQ9aXNTU1I/bnVsbDp4aHIucHJvdG90eXBlLnNlbmQsc3RhY2s9e3N0YXJ0OltdLHN0b3A6W119LGhpZ2hqYWNrQ291bnQ9MDtmdW5jdGlvbiB0cmFuc2xhdGUodCl7dmFyIGU9dC5wLGk9dC5wb3Mscz10LmFjdGl2ZSxuPXQuaG9yaXosbz10LnJldmVyc2Uscj10LmRpcixhPTEsbD0xO3JldHVybiBuPyhvJiYoYT0tMSksXCJib3R0b21cIj09PWkmJihsPS0xKSx7dHJhbnNmb3JtOlwidHJhbnNsYXRlM2QoXCIrYSooZS0xMDApK1wiJSxcIisocz8wOi0yMDAqbCkrXCIlLDApXCJ9KToobyYmKGw9LTEpLFwicmlnaHRcIj09PWkmJihhPS0xKSx7dHJhbnNmb3JtOlwidHJhbnNsYXRlM2QoXCIrKHM/MDpyKmEqLTIwMCkrXCIlLFwiK2wqKGUtMTAwKStcIiUsMClcIn0pfWZ1bmN0aW9uIGluYyh0LGUpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT10PDI1PzMqTWF0aC5yYW5kb20oKSszOnQ8NjU/MypNYXRoLnJhbmRvbSgpOnQ8ODU/MipNYXRoLnJhbmRvbSgpOnQ8OTk/LjY6MCksYmV0d2Vlbih0K2UsMCwxMDApfWZ1bmN0aW9uIGhpZ2hqYWNrQWpheCh0LGUpe2Z1bmN0aW9uIGkoKXtzdGFjay5zdG9wLm1hcChmdW5jdGlvbih0KXt0KCl9KX1zdGFjay5zdGFydC5wdXNoKHQpLHN0YWNrLnN0b3AucHVzaChlKSwrK2hpZ2hqYWNrQ291bnQ+MXx8KHhoci5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W10scz1hcmd1bWVudHMubGVuZ3RoO3MtLTspZVtzXT1hcmd1bWVudHNbc107c3RhY2suc3RhcnQubWFwKGZ1bmN0aW9uKHQpe3QoKX0pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsaSwhMSksdGhpcy5hZGRFdmVudExpc3RlbmVyKFwicmVhZHlzdGF0ZWNoYW5nZVwiLGZ1bmN0aW9uKCl7ND09PXQucmVhZHlTdGF0ZSYmaSgpfSwhMSksc2VuZC5hcHBseSh0aGlzLGUpfSl9ZnVuY3Rpb24gcmVzdG9yZUFqYXgodCxlKXtzdGFjay5zdGFydD1zdGFjay5zdGFydC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT10fSksc3RhY2suc3RvcD1zdGFjay5zdG9wLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWV9KSwoaGlnaGphY2tDb3VudD1NYXRoLm1heCgwLGhpZ2hqYWNrQ291bnQtMSkpfHwoeGhyLnByb3RvdHlwZS5zZW5kPXNlbmQpfXZhciBRQWpheEJhcj17bmFtZTpcIlFBamF4QmFyXCIscHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwidG9wXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXS5pbmNsdWRlcyh0KX19LHNpemU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCIycHhcIn0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJyZWRcIn0sc2tpcEhpamFjazpCb29sZWFuLHJldmVyc2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybntjYWxsczowLHByb2dyZXNzOjAsb25TY3JlZW46ITEsYW5pbWF0ZTohMH19LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucG9zaXRpb24sXCJiZy1cIit0aGlzLmNvbG9yLHRoaXMuYW5pbWF0ZT9cIlwiOlwibm8tdHJhbnNpdGlvblwiXX0sc3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9uU2NyZWVuLGU9dHJhbnNsYXRlKHtwOnRoaXMucHJvZ3Jlc3MscG9zOnRoaXMucG9zaXRpb24sYWN0aXZlOnQsaG9yaXo6dGhpcy5ob3Jpem9udGFsLHJldmVyc2U6dGhpcy4kcS5pMThuLnJ0bCYmW1widG9wXCIsXCJib3R0b21cIl0uaW5jbHVkZXModGhpcy5wb3NpdGlvbik/IXRoaXMucmV2ZXJzZTp0aGlzLnJldmVyc2UsZGlyOnRoaXMuJHEuaTE4bi5ydGw/LTE6MX0pO3JldHVybiBlW3RoaXMuc2l6ZVByb3BdPXRoaXMuc2l6ZSxlLm9wYWNpdHk9dD8xOjAsZX0saG9yaXpvbnRhbDpmdW5jdGlvbigpe3JldHVyblwidG9wXCI9PT10aGlzLnBvc2l0aW9ufHxcImJvdHRvbVwiPT09dGhpcy5wb3NpdGlvbn0sc2l6ZVByb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsP1wiaGVpZ2h0XCI6XCJ3aWR0aFwifX0sbWV0aG9kczp7c3RhcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0zMDApLHRoaXMuY2FsbHMrKyx0aGlzLmNhbGxzPjF8fChjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy4kZW1pdChcInN0YXJ0XCIpLHRoaXMub25TY3JlZW58fCh0aGlzLnByb2dyZXNzPTAsdGhpcy5vblNjcmVlbj0hMCx0aGlzLmFuaW1hdGU9ITEsdGhpcy50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5hbmltYXRlPSEwLGUuX193b3JrKHQpfSwxMDApKSl9LGluY3JlbWVudDpmdW5jdGlvbih0KXt0aGlzLmNhbGxzPjAmJih0aGlzLnByb2dyZXNzPWluYyh0aGlzLnByb2dyZXNzLHQpKX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5jYWxscz1NYXRoLm1heCgwLHRoaXMuY2FsbHMtMSksISh0aGlzLmNhbGxzPjApKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy4kZW1pdChcInN0b3BcIik7dmFyIGU9ZnVuY3Rpb24oKXt0LmFuaW1hdGU9ITAsdC5wcm9ncmVzcz0xMDAsdC50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5vblNjcmVlbj0hMX0sMWUzKX07MD09PXRoaXMucHJvZ3Jlc3M/dGhpcy50aW1lcj1zZXRUaW1lb3V0KGUsMSk6ZSgpfX0sX193b3JrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5wcm9ncmVzczwxMDAmJih0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmluY3JlbWVudCgpLGUuX193b3JrKHQpfSx0KSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5za2lwSGlqYWNrfHwodGhpcy5oaWphY2tlZD0hMCxoaWdoamFja0FqYXgodGhpcy5zdGFydCx0aGlzLnN0b3ApKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmhpamFja2VkJiZyZXN0b3JlQWpheCh0aGlzLnN0YXJ0LHRoaXMuc3RvcCl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbG9hZGluZy1iYXJcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zdHlsZX0pfX07ZnVuY3Rpb24gc2hvd1JpcHBsZSh0LGUsaSl7dmFyIHM9aS5zdG9wLG49aS5jZW50ZXI7cyYmdC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgbyxyLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIiksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSxjPWUuY2xpZW50V2lkdGg+ZS5jbGllbnRIZWlnaHQ/ZS5jbGllbnRXaWR0aDplLmNsaWVudEhlaWdodCxoPShuP2M6MipjKStcInB4XCIsdT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGEuYXBwZW5kQ2hpbGQobCksYS5jbGFzc05hbWU9XCJxLXJpcHBsZS1jb250YWluZXJcIixsLmNsYXNzTmFtZT1cInEtcmlwcGxlLWFuaW1hdGlvblwiLGwuc3R5bGUud2lkdGg9aCxsLnN0eWxlLmhlaWdodD1oLGUuYXBwZW5kQ2hpbGQoYSksbilvPXI9MDtlbHNle3ZhciBkPXBvc2l0aW9uKHQpO289ZC5sZWZ0LXUubGVmdC1jLHI9ZC50b3AtdS50b3AtY31sLmNsYXNzTGlzdC5hZGQoXCJxLXJpcHBsZS1hbmltYXRpb24tZW50ZXJcIiksbC5jbGFzc0xpc3QuYWRkKFwicS1yaXBwbGUtYW5pbWF0aW9uLXZpc2libGVcIiksbC5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGUoXCIrbytcInB4LCBcIityK1wicHgpIHNjYWxlM2QoMCwgMCwgMClcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5jbGFzc0xpc3QucmVtb3ZlKFwicS1yaXBwbGUtYW5pbWF0aW9uLWVudGVyXCIpLGwuc3R5bGUudHJhbnNmb3JtPVwidHJhbnNsYXRlKFwiK28rXCJweCwgXCIrcitcInB4KSBzY2FsZTNkKDEsIDEsIDEpXCIsc2V0VGltZW91dChmdW5jdGlvbigpe2wuY2xhc3NMaXN0LnJlbW92ZShcInEtcmlwcGxlLWFuaW1hdGlvbi12aXNpYmxlXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXthLnJlbW92ZSgpfSwzMDApfSwzMDApfSwxMCl9ZnVuY3Rpb24gc2hvdWxkQWJvcnQodCl7dC5tYXQ7cmV0dXJuIHQuaW9zJiYhMH12YXIgUmlwcGxlPXtuYW1lOlwicmlwcGxlXCIsaW5zZXJ0ZWQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLnZhbHVlLHM9ZS5tb2RpZmllcnM7aWYoIXNob3VsZEFib3J0KHMpKXt2YXIgbj17ZW5hYmxlZDohMSE9PWksbW9kaWZpZXJzOntzdG9wOnMuc3RvcCxjZW50ZXI6cy5jZW50ZXJ9LGNsaWNrOmZ1bmN0aW9uKGUpe24uZW5hYmxlZCYmLTEhPT1lLmRldGFpbCYmc2hvd1JpcHBsZShlLHQsbi5tb2RpZmllcnMpfSxrZXl1cDpmdW5jdGlvbihlKXtuLmVuYWJsZWQmJjEzPT09ZS5rZXlDb2RlJiZzaG93UmlwcGxlKGUsdCxuLm1vZGlmaWVycyl9fTt0Ll9fcXJpcHBsZT1uLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsbi5jbGljaywhMSksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixuLmtleXVwLCExKX19LHVwZGF0ZTpmdW5jdGlvbih0LGUpe3ZhciBpPWUudmFsdWUscz1lLm1vZGlmaWVycyxuPXMuc3RvcCxvPXMuY2VudGVyLHI9dC5fX3FyaXBwbGU7ciYmKHIuZW5hYmxlZD0hMSE9PWksci5tb2RpZmllcnM9e3N0b3A6bixjZW50ZXI6b30pfSx1bmJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT1lLm1vZGlmaWVycyxzPXQuX19xcmlwcGxlO3MmJiFzaG91bGRBYm9ydChpKSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIscy5jbGljaywhMSksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixzLmtleXVwLCExKSxkZWxldGUgdC5fX3FyaXBwbGUpfX0sYWxpZ25NYXA9e2xlZnQ6XCJzdGFydFwiLGNlbnRlcjpcImNlbnRlclwiLHJpZ2h0OlwiZW5kXCIsYmV0d2VlbjpcImJldHdlZW5cIixhcm91bmQ6XCJhcm91bmRcIn0sYWxpZ25WYWx1ZXM9T2JqZWN0LmtleXMoYWxpZ25NYXApLEFsaWduTWl4aW49e3Byb3BzOnthbGlnbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImNlbnRlclwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gYWxpZ25WYWx1ZXMuaW5jbHVkZXModCl9fX0sY29tcHV0ZWQ6e2FsaWduQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cImp1c3RpZnktXCIrYWxpZ25NYXBbdGhpcy5hbGlnbl19fX0sc2l6ZXM9e3hzOjgsc206MTAsbWQ6MTQsbGc6MjAseGw6MjQsZm9ybToxNC43NzcsXCJmb3JtLWxhYmVsXCI6MjEuNzc3LFwiZm9ybS1oaWRlLXVuZGVybGluZVwiOjkuMzMzLFwiZm9ybS1sYWJlbC1oaWRlLXVuZGVybGluZVwiOjE2LjMzM30sQnRuTWl4aW49e21peGluczpbQWxpZ25NaXhpbl0sZGlyZWN0aXZlczp7UmlwcGxlOlJpcHBsZX0scHJvcHM6e3R5cGU6U3RyaW5nLGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0Om51bGx9LGRpc2FibGU6Qm9vbGVhbixsYWJlbDpbTnVtYmVyLFN0cmluZ10sbm9DYXBzOkJvb2xlYW4sbm9XcmFwOkJvb2xlYW4saWNvbjpTdHJpbmcsaWNvblJpZ2h0OlN0cmluZyxyb3VuZDpCb29sZWFuLG91dGxpbmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4scm91bmRlZDpCb29sZWFuLHB1c2g6Qm9vbGVhbixzaXplOlN0cmluZyxmYWI6Qm9vbGVhbixmYWJNaW5pOkJvb2xlYW4sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsZ2xvc3N5OkJvb2xlYW4sZGVuc2U6Qm9vbGVhbixub1JpcHBsZTpCb29sZWFuLHRhYmluZGV4Ok51bWJlcix0bzpbT2JqZWN0LFN0cmluZ10scmVwbGFjZTpCb29sZWFufSxjb21wdXRlZDp7c3R5bGU6ZnVuY3Rpb24oKXtpZih0aGlzLnNpemUmJiF0aGlzLmZhYiYmIXRoaXMuZmFiTWluaSlyZXR1cm57Zm9udFNpemU6dGhpcy5zaXplIGluIHNpemVzP3NpemVzW3RoaXMuc2l6ZV0rXCJweFwiOnRoaXMuc2l6ZX19LGlzUmVjdGFuZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNSb3VuZH0saXNSb3VuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvdW5kfHx0aGlzLmZhYnx8dGhpcy5mYWJNaW5pfSxzaGFwZTpmdW5jdGlvbigpe3JldHVyblwicS1idG4tXCIrKHRoaXMuaXNSb3VuZD9cInJvdW5kXCI6XCJyZWN0YW5nbGVcIil9LGlzRGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNhYmxlfHx0aGlzLmxvYWRpbmd9LGhhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vUmlwcGxlJiYhdGhpcy5pc0Rpc2FibGVkfSxjb21wdXRlZFRhYkluZGV4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNEaXNhYmxlZD8tMTp0aGlzLnRhYmluZGV4fHwwfSxpc0xpbms6ZnVuY3Rpb24oKXtyZXR1cm5cImFcIj09PXRoaXMudHlwZXx8dm9pZCAwIT09dGhpcy50b30sYXR0cnM6ZnVuY3Rpb24oKXt2YXIgdD17dGFiaW5kZXg6dGhpcy5jb21wdXRlZFRhYkluZGV4fTtyZXR1cm5cImFcIiE9PXRoaXMudHlwZSYmKHQudHlwZT10aGlzLnR5cGV8fFwiYnV0dG9uXCIpLHZvaWQgMCE9PXRoaXMudG8mJih0LmhyZWY9dGhpcy4kcm91dGVyLnJlc29sdmUodGhpcy50bykuaHJlZiksdH0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLnNoYXBlXTtyZXR1cm4gdGhpcy5mYWI/dC5wdXNoKFwicS1idG4tZmFiXCIpOnRoaXMuZmFiTWluaSYmdC5wdXNoKFwicS1idG4tZmFiLW1pbmlcIiksdGhpcy5mbGF0P3QucHVzaChcInEtYnRuLWZsYXRcIik6dGhpcy5vdXRsaW5lP3QucHVzaChcInEtYnRuLW91dGxpbmVcIik6dGhpcy5wdXNoJiZ0LnB1c2goXCJxLWJ0bi1wdXNoXCIpLHRoaXMuaXNEaXNhYmxlZD90LnB1c2goXCJkaXNhYmxlZFwiKToodC5wdXNoKFwicS1mb2N1c2FibGUgcS1ob3ZlcmFibGVcIiksdGhpcy5hY3RpdmUmJnQucHVzaChcImFjdGl2ZVwiKSksdGhpcy5jb2xvcj90aGlzLmZsYXR8fHRoaXMub3V0bGluZT90LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8dGhpcy5jb2xvcikpOih0LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKSkpOnRoaXMudGV4dENvbG9yJiZ0LnB1c2goXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yKSx0LnB1c2goe1wicS1idG4tbm8tdXBwZXJjYXNlXCI6dGhpcy5ub0NhcHMsXCJxLWJ0bi1yb3VuZGVkXCI6dGhpcy5yb3VuZGVkLFwicS1idG4tZGVuc2VcIjp0aGlzLmRlbnNlLGdsb3NzeTp0aGlzLmdsb3NzeX0pLHR9LGlubmVyQ2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLmFsaWduQ2xhc3NdO3JldHVybiEwPT09dGhpcy5ub1dyYXAmJnQucHVzaChcIm5vLXdyYXBcIixcInRleHQtbm8td3JhcFwiKSwhMD09PXRoaXMucmVwZWF0aW5nJiZ0LnB1c2goXCJub24tc2VsZWN0YWJsZVwiKSwhMD09PXRoaXMubG9hZGluZyYmdC5wdXNoKFwicS1idG4taW5uZXItLWhpZGRlblwiKSx0fX19LG1peGluJDE9e3Byb3BzOntjb2xvcjpTdHJpbmcsc2l6ZTp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDpcIjFlbVwifX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbG9yKXJldHVyblwidGV4dC1cIit0aGlzLmNvbG9yfX19LERlZmF1bHRTcGlubmVyPXtuYW1lOlwiUVNwaW5uZXJNYXRcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lciBxLXNwaW5uZXItbWF0XCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMjUgMjUgNTAgNTBcIn19LFt0KFwiY2lyY2xlXCIse3N0YXRpY0NsYXNzOlwicGF0aFwiLGF0dHJzOntjeDpcIjUwXCIsY3k6XCI1MFwiLHI6XCIyMFwiLGZpbGw6XCJub25lXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2Utd2lkdGhcIjpcIjNcIixcInN0cm9rZS1taXRlcmxpbWl0XCI6XCIxMFwifX0pXSl9fSxRU3Bpbm5lcj17bWl4aW5zOltEZWZhdWx0U3Bpbm5lcl0sbmFtZTpcIlFTcGlubmVyXCJ9LFFCdG49e25hbWU6XCJRQnRuXCIsbWl4aW5zOltCdG5NaXhpbl0scHJvcHM6e3BlcmNlbnRhZ2U6TnVtYmVyLGRhcmtQZXJjZW50YWdlOkJvb2xlYW4sd2FpdEZvclJpcHBsZTpCb29sZWFuLHJlcGVhdFRpbWVvdXQ6W051bWJlcixGdW5jdGlvbl19LGNvbXB1dGVkOntoYXNQZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMucGVyY2VudGFnZX0sd2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gYmV0d2Vlbih0aGlzLnBlcmNlbnRhZ2UsMCwxMDApK1wiJVwifSxldmVudHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmlzRGlzYWJsZWR8fCF0aGlzLnJlcGVhdFRpbWVvdXQ/e2NsaWNrOnRoaXMuY2xpY2ssa2V5ZG93bjp0aGlzLl9fb25LZXlEb3duLGtleXVwOnRoaXMuX19vbktleVVwfTp7bW91c2Vkb3duOnRoaXMuX19zdGFydFJlcGVhdCx0b3VjaHN0YXJ0OnRoaXMuX19zdGFydFJlcGVhdCxrZXlkb3duOmZ1bmN0aW9uKGUpe3QuX19vbktleURvd24oZSwhMCl9LG1vdXNldXA6dGhpcy5fX2VuZFJlcGVhdCx0b3VjaGVuZDp0aGlzLl9fZW5kUmVwZWF0LGtleXVwOmZ1bmN0aW9uKGUpe3QuX19vbktleVVwKGUsITApfSxtb3VzZWxlYXZlOnRoaXMuX19hYm9ydFJlcGVhdCx0b3VjaG1vdmU6dGhpcy5fX2Fib3J0UmVwZWF0LGJsdXI6dGhpcy5fX2Fib3J0UmVwZWF0fX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cmVwZWF0aW5nOiExLGFjdGl2ZTohMX19LG1ldGhvZHM6e2NsaWNrOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodGhpcy5fX2NsZWFudXAoKSx2b2lkIDA9PT10aGlzLnRvJiYhdGhpcy5pc0Rpc2FibGVkfHwodCYmc3RvcEFuZFByZXZlbnQodCksIXRoaXMuaXNEaXNhYmxlZCkpaWYodCYmLTEhPT10LmRldGFpbCYmXCJzdWJtaXRcIj09PXRoaXMudHlwZSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLE9iamVjdC5hc3NpZ24oe30sdCx7ZGV0YWlsOi0xfSkpO3RoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBlLiRlbCYmZS4kZWwuZGlzcGF0Y2hFdmVudChpKX0sMjAwKX1lbHNle3ZhciBzPWZ1bmN0aW9uKCl7ZS4kcm91dGVyW2UucmVwbGFjZT9cInJlcGxhY2VcIjpcInB1c2hcIl0oZS50byl9LG49ZnVuY3Rpb24oKXtlLmlzRGlzYWJsZWR8fChlLiRlbWl0KFwiY2xpY2tcIix0LHMpLHZvaWQgMCE9PWUudG8mJiExIT09dC5uYXZpZ2F0ZSYmcygpKX07dGhpcy53YWl0Rm9yUmlwcGxlJiZ0aGlzLmhhc1JpcHBsZT90aGlzLnRpbWVyPXNldFRpbWVvdXQobiwzMDApOm4oKX19LF9fY2xlYW51cDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKX0sX19vbktleURvd246ZnVuY3Rpb24odCxlKXt0aGlzLmlzRGlzYWJsZWR8fDEzIT09dC5rZXlDb2RlfHwodGhpcy5hY3RpdmU9ITAsZT90aGlzLl9fc3RhcnRSZXBlYXQodCk6c3RvcEFuZFByZXZlbnQodCkpfSxfX29uS2V5VXA6ZnVuY3Rpb24odCxlKXt0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlPSExLHRoaXMuaXNEaXNhYmxlZHx8MTMhPT10LmtleUNvZGV8fHRoaXNbZT9cIl9fZW5kUmVwZWF0XCI6XCJjbGlja1wiXSh0KSl9LF9fc3RhcnRSZXBlYXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5yZXBlYXRpbmcpe3ZhciBpPWZ1bmN0aW9uKCl7ZS50aW1lcj1zZXRUaW1lb3V0KHMsXCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZXBlYXRUaW1lb3V0P2UucmVwZWF0VGltZW91dChlLnJlcGVhdENvdW50KTplLnJlcGVhdFRpbWVvdXQpfSxzPWZ1bmN0aW9uKCl7ZS5pc0Rpc2FibGVkfHwoZS5yZXBlYXRDb3VudCs9MSx0LnJlcGVhdENvdW50PWUucmVwZWF0Q291bnQsZS4kZW1pdChcImNsaWNrXCIsdCksaSgpKX07dGhpcy5yZXBlYXRDb3VudD0wLHRoaXMucmVwZWF0aW5nPSEwLGkoKX19LF9fYWJvcnRSZXBlYXQ6ZnVuY3Rpb24oKXt0aGlzLnJlcGVhdGluZz0hMSx0aGlzLl9fY2xlYW51cCgpfSxfX2VuZFJlcGVhdDpmdW5jdGlvbih0KXt0aGlzLnJlcGVhdGluZyYmKHRoaXMucmVwZWF0aW5nPSExLHRoaXMucmVwZWF0Q291bnQ/dGhpcy5yZXBlYXRDb3VudD0wOih0LmRldGFpbHx8dC5rZXlDb2RlKSYmKHQucmVwZWF0Q291bnQ9MCx0aGlzLiRlbWl0KFwiY2xpY2tcIix0KSksdGhpcy5fX2NsZWFudXAoKSl9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFudXAoKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVtdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KTtyZXR1cm4gdm9pZCAwIT09dGhpcy5sYWJlbCYmITA9PT10aGlzLmlzUmVjdGFuZ2xlJiZlLnVuc2hpZnQodChcImRpdlwiLFt0aGlzLmxhYmVsXSkpLHZvaWQgMCE9PXRoaXMuaWNvbiYmZS51bnNoaWZ0KHQoUUljb24se2NsYXNzOntcIm9uLWxlZnRcIjp2b2lkIDAhPT10aGlzLmxhYmVsJiYhMD09PXRoaXMuaXNSZWN0YW5nbGV9LHByb3BzOntuYW1lOnRoaXMuaWNvbn19KSksdm9pZCAwIT09dGhpcy5pY29uUmlnaHQmJiExPT09dGhpcy5pc1JvdW5kJiZlLnB1c2godChRSWNvbix7c3RhdGljQ2xhc3M6XCJvbi1yaWdodFwiLHByb3BzOntuYW1lOnRoaXMuaWNvblJpZ2h0fX0pKSx0KHRoaXMuaXNMaW5rP1wiYVwiOlwiYnV0dG9uXCIse3N0YXRpY0NsYXNzOlwicS1idG4gaW5saW5lIHJlbGF0aXZlLXBvc2l0aW9uIHEtYnRuLWl0ZW0gbm9uLXNlbGVjdGFibGVcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zdHlsZSxhdHRyczp0aGlzLmF0dHJzLG9uOnRoaXMuZXZlbnRzLGRpcmVjdGl2ZXM6dGhpcy5oYXNSaXBwbGU/W3tuYW1lOlwicmlwcGxlXCIsdmFsdWU6ITAsbW9kaWZpZXJzOntjZW50ZXI6dGhpcy5pc1JvdW5kfX1dOm51bGx9LFt0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3A/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZm9jdXMtaGVscGVyXCJ9KTpudWxsLHRoaXMubG9hZGluZyYmdGhpcy5oYXNQZXJjZW50YWdlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJ0bi1wcm9ncmVzcyBhYnNvbHV0ZS1mdWxsXCIsY2xhc3M6e1wicS1idG4tZGFyay1wcm9ncmVzc1wiOnRoaXMuZGFya1BlcmNlbnRhZ2V9LHN0eWxlOnt3aWR0aDp0aGlzLndpZHRofX0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYnRuLWlubmVyIHJvdyBjb2wgaXRlbXMtY2VudGVyIHEtcG9wdXAtLXNraXBcIixjbGFzczp0aGlzLmlubmVyQ2xhc3Nlc30sZSksbnVsbCE9PXRoaXMubG9hZGluZz90KFwidHJhbnNpdGlvblwiLHtwcm9wczp7bmFtZTpcInEtdHJhbnNpdGlvbi0tZmFkZVwifX0sITA9PT10aGlzLmxvYWRpbmc/W3QoXCJkaXZcIix7a2V5OlwibG9hZGluZ1wiLHN0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbCBmbGV4IGZsZXgtY2VudGVyXCJ9LHZvaWQgMCE9PXRoaXMuJHNsb3RzLmxvYWRpbmc/dGhpcy4kc2xvdHMubG9hZGluZzpbdChRU3Bpbm5lcildKV06dm9pZCAwKTpudWxsXSl9fSxRQWxlcnQ9e25hbWU6XCJRQWxlcnRcIixwcm9wczp7dHlwZTp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInBvc2l0aXZlXCIsXCJuZWdhdGl2ZVwiLFwid2FybmluZ1wiLFwiaW5mb1wiXS5pbmNsdWRlcyh0KX19LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwibmVnYXRpdmVcIn0sdGV4dENvbG9yOlN0cmluZyxtZXNzYWdlOlN0cmluZyxkZXRhaWw6U3RyaW5nLGljb246U3RyaW5nLGF2YXRhcjpTdHJpbmcsYWN0aW9uczpBcnJheX0sY29tcHV0ZWQ6e2NvbXB1dGVkSWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmljb24/dGhpcy5pY29uOnRoaXMuJHEuaWNvbi50eXBlW3RoaXMudHlwZXx8dGhpcy5jb2xvcl19LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5cImJnLVwiKyh0aGlzLnR5cGV8fHRoaXMuY29sb3IpK1wiIHRleHQtXCIrKHRoaXMudGV4dENvbG9yfHxcIndoaXRlXCIpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPXRoaXMuJHNsb3RzLmRldGFpbHx8dGhpcy5kZXRhaWw7cmV0dXJuIHRoaXMuYXZhdGFyP2kucHVzaCh0KFwiaW1nXCIse3N0YXRpY0NsYXNzOlwiYXZhdGFyXCIsYXR0cnM6e3NyYzp0aGlzLmF2YXRhcn19KSk6KHRoaXMuaWNvbnx8dGhpcy50eXBlKSYmaS5wdXNoKHQoUUljb24se3Byb3BzOntuYW1lOnRoaXMuY29tcHV0ZWRJY29ufX0pKSx0KFwiZGl2XCIsW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFsZXJ0IHJvdyBuby13cmFwIHNoYWRvdy0yXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbaS5sZW5ndGg/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtYWxlcnQtc2lkZSBjb2wtYXV0byByb3cgZmxleC1jZW50ZXJcIn0saSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydC1jb250ZW50IGNvbCBzZWxmLWNlbnRlclwifSxbdChcImRpdlwiLHRoaXMuJHNsb3RzLmRlZmF1bHR8fHRoaXMubWVzc2FnZSkscz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1hbGVydC1kZXRhaWxcIn0sW3NdKTpudWxsXSksdGhpcy5hY3Rpb25zJiZ0aGlzLmFjdGlvbnMubGVuZ3RoP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWFsZXJ0LWFjdGlvbnMgY29sLWF1dG8gZ3V0dGVyLXhzIGNvbHVtbiBmbGV4LWNlbnRlclwifSx0aGlzLmFjdGlvbnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiZnVsbC13aWR0aFwifSxbdChRQnRuLHtzdGF0aWNDbGFzczpcImZ1bGwtd2lkdGhcIixwcm9wczp7ZmxhdDohMCxkZW5zZTohMCxhbGlnbjpcImxlZnRcIixpY29uOmkuaWNvbixsYWJlbDohMD09PWkuY2xvc2VCdG4/XCJzdHJpbmdcIj09dHlwZW9mIGkubGFiZWw/aS5sYWJlbDplLiRxLmkxOG4ubGFiZWwuY2xvc2U6aS5sYWJlbH0sb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGkuaGFuZGxlcigpfX19KV0pfSkpOm51bGxdKV0pfX07ZnVuY3Rpb24gZmlsdGVyKHQsZSl7dmFyIGk9ZS5maWVsZCxzPWUubGlzdCxuPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gcy5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuKFwiXCIrdFtpXSkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG4pfSl9ZnVuY3Rpb24gczQoKXtyZXR1cm4gTWF0aC5mbG9vcig2NTUzNiooMStNYXRoLnJhbmRvbSgpKSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKX1mdW5jdGlvbiB1aWQoKXtyZXR1cm4gczQoKStzNCgpK1wiLVwiK3M0KCkrXCItXCIrczQoKStcIi1cIitzNCgpK1wiLVwiK3M0KCkrczQoKStzNCgpfWZ1bmN0aW9uIGdldEFuY2hvclBvc2l0aW9uKHQsZSl7dmFyIGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWkudG9wLG49aS5sZWZ0LG89aS5yaWdodCxyPWkuYm90dG9tLGE9e3RvcDpzLGxlZnQ6bix3aWR0aDp0Lm9mZnNldFdpZHRoLGhlaWdodDp0Lm9mZnNldEhlaWdodH07cmV0dXJuIGUmJihhLnRvcC09ZVsxXSxhLmxlZnQtPWVbMF0sciYmKHIrPWVbMV0pLG8mJihvKz1lWzBdKSxhLndpZHRoKz1lWzBdLGEuaGVpZ2h0Kz1lWzFdKSxhLnJpZ2h0PW98fGEubGVmdCthLndpZHRoLGEuYm90dG9tPXJ8fGEudG9wK2EuaGVpZ2h0LGEubWlkZGxlPWEubGVmdCsoYS5yaWdodC1hLmxlZnQpLzIsYS5jZW50ZXI9YS50b3ArKGEuYm90dG9tLWEudG9wKS8yLGF9ZnVuY3Rpb24gZ2V0VGFyZ2V0UG9zaXRpb24odCl7cmV0dXJue3RvcDowLGNlbnRlcjp0Lm9mZnNldEhlaWdodC8yLGJvdHRvbTp0Lm9mZnNldEhlaWdodCxsZWZ0OjAsbWlkZGxlOnQub2Zmc2V0V2lkdGgvMixyaWdodDp0Lm9mZnNldFdpZHRofX1mdW5jdGlvbiByZXBvc2l0aW9uSWZOZWVkZWQodCxlLGkscyxuLG8pe3ZhciByPWdldFNjcm9sbGJhcldpZHRoKCksYT13aW5kb3cuaW5uZXJIZWlnaHQsbD13aW5kb3cuaW5uZXJXaWR0aDtpZihhLT1yLGwtPXIsbi50b3A8MHx8bi50b3ArZS5ib3R0b20+YSlpZihcImNlbnRlclwiPT09aS52ZXJ0aWNhbCluLnRvcD10W2kudmVydGljYWxdPmEvMj9hLWUuYm90dG9tOjAsbi5tYXhIZWlnaHQ9TWF0aC5taW4oZS5ib3R0b20sYSk7ZWxzZSBpZih0W2kudmVydGljYWxdPmEvMil7dmFyIGM9TWF0aC5taW4oYSxcImNlbnRlclwiPT09cy52ZXJ0aWNhbD90LmNlbnRlcjpzLnZlcnRpY2FsPT09aS52ZXJ0aWNhbD90LmJvdHRvbTp0LnRvcCk7bi5tYXhIZWlnaHQ9TWF0aC5taW4oZS5ib3R0b20sYyksbi50b3A9TWF0aC5tYXgoMCxjLW4ubWF4SGVpZ2h0KX1lbHNlIG4udG9wPVwiY2VudGVyXCI9PT1zLnZlcnRpY2FsP3QuY2VudGVyOnMudmVydGljYWw9PT1pLnZlcnRpY2FsP3QudG9wOnQuYm90dG9tLG4ubWF4SGVpZ2h0PU1hdGgubWluKGUuYm90dG9tLGEtbi50b3ApO2lmKG4ubGVmdDwwfHxuLmxlZnQrZS5yaWdodD5sKWlmKG4ubWF4V2lkdGg9TWF0aC5taW4oZS5yaWdodCxsKSxcIm1pZGRsZVwiPT09aS5ob3Jpem9udGFsKW4ubGVmdD10W2kuaG9yaXpvbnRhbF0+bC8yP2wtZS5yaWdodDowO2Vsc2UgaWYobyluLmxlZnQ9bi5sZWZ0PDA/MDpsLWUucmlnaHQ7ZWxzZSBpZih0W2kuaG9yaXpvbnRhbF0+bC8yKXt2YXIgaD1NYXRoLm1pbihsLFwibWlkZGxlXCI9PT1zLmhvcml6b250YWw/dC5jZW50ZXI6cy5ob3Jpem9udGFsPT09aS5ob3Jpem9udGFsP3QucmlnaHQ6dC5sZWZ0KTtuLm1heFdpZHRoPU1hdGgubWluKGUucmlnaHQsaCksbi5sZWZ0PU1hdGgubWF4KDAsaC1uLm1heFdpZHRoKX1lbHNlIG4ubGVmdD1cIm1pZGRsZVwiPT09cy5ob3Jpem9udGFsP3QuY2VudGVyOnMuaG9yaXpvbnRhbD09PWkuaG9yaXpvbnRhbD90LmxlZnQ6dC5yaWdodCxuLm1heFdpZHRoPU1hdGgubWluKGUucmlnaHQsbC1uLmxlZnQpO3JldHVybiBufWZ1bmN0aW9uIHNldFBvc2l0aW9uKHQpe3ZhciBlLGk9dC5lbCxzPXQuYW5pbWF0ZSxuPXQuYW5jaG9yRWwsbz10LmFuY2hvck9yaWdpbixyPXQuc2VsZk9yaWdpbixhPXQubWF4SGVpZ2h0LGw9dC5ldmVudCxjPXQuYW5jaG9yQ2xpY2ssaD10LnRvdWNoUG9zaXRpb24sdT10Lm9mZnNldCxkPXQudG91Y2hPZmZzZXQscD10LmNvdmVyO2lmKGkuc3R5bGUubWF4SGVpZ2h0PWF8fFwiNjV2aFwiLGkuc3R5bGUubWF4V2lkdGg9XCIxMDB2d1wiLCFsfHxjJiYhaClpZihkKXt2YXIgZj1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09Zi50b3AsZz1mLmxlZnQsdj1tK2QudG9wLGI9ZytkLmxlZnQ7ZT17dG9wOnYsbGVmdDpiLHdpZHRoOjEsaGVpZ2h0OjEscmlnaHQ6YisxLGNlbnRlcjp2LG1pZGRsZTpiLGJvdHRvbTp2KzF9fWVsc2UgZT1nZXRBbmNob3JQb3NpdGlvbihuLHUpO2Vsc2V7dmFyIF89cG9zaXRpb24obCkseT1fLnRvcCx3PV8ubGVmdDtlPXt0b3A6eSxsZWZ0Oncsd2lkdGg6MSxoZWlnaHQ6MSxyaWdodDp3KzEsY2VudGVyOnksbWlkZGxlOncsYm90dG9tOnkrMX19dmFyIEM9Z2V0VGFyZ2V0UG9zaXRpb24oaSkseD17dG9wOmVbby52ZXJ0aWNhbF0tQ1tyLnZlcnRpY2FsXSxsZWZ0OmVbby5ob3Jpem9udGFsXS1DW3IuaG9yaXpvbnRhbF19O2lmKHg9cmVwb3NpdGlvbklmTmVlZGVkKGUsQyxyLG8seCxwKSxpLnN0eWxlLnRvcD1NYXRoLm1heCgwLHgudG9wKStcInB4XCIsaS5zdHlsZS5sZWZ0PU1hdGgubWF4KDAseC5sZWZ0KStcInB4XCIseC5tYXhIZWlnaHQmJihpLnN0eWxlLm1heEhlaWdodD14Lm1heEhlaWdodCtcInB4XCIpLHgubWF4V2lkdGgmJihpLnN0eWxlLm1heFdpZHRoPXgubWF4V2lkdGgrXCJweFwiKSxzKXt2YXIgUz14LnRvcDxlLnRvcD9bXCJ1cFwiLFwiZG93blwiXTpbXCJkb3duXCIsXCJ1cFwiXTtpLmNsYXNzTGlzdC5hZGQoXCJhbmltYXRlLXBvcHVwLVwiK1NbMF0pLGkuY2xhc3NMaXN0LnJlbW92ZShcImFuaW1hdGUtcG9wdXAtXCIrU1sxXSl9fWZ1bmN0aW9uIHBvc2l0aW9uVmFsaWRhdG9yKHQpe3ZhciBlPXQuc3BsaXQoXCIgXCIpO3JldHVybiAyPT09ZS5sZW5ndGgmJihbXCJ0b3BcIixcImNlbnRlclwiLFwiYm90dG9tXCJdLmluY2x1ZGVzKGVbMF0pPyEhW1wibGVmdFwiLFwibWlkZGxlXCIsXCJyaWdodFwiXS5pbmNsdWRlcyhlWzFdKXx8KGNvbnNvbGUuZXJyb3IoXCJBbmNob3IvU2VsZiBwb3NpdGlvbiBtdXN0IGVuZCB3aXRoIG9uZSBvZiBsZWZ0L21pZGRsZS9yaWdodFwiKSwhMSk6KGNvbnNvbGUuZXJyb3IoXCJBbmNob3IvU2VsZiBwb3NpdGlvbiBtdXN0IHN0YXJ0IHdpdGggb25lIG9mIHRvcC9jZW50ZXIvYm90dG9tXCIpLCExKSl9ZnVuY3Rpb24gb2Zmc2V0VmFsaWRhdG9yKHQpe3JldHVybiF0fHwyPT09dC5sZW5ndGgmJihcIm51bWJlclwiPT10eXBlb2YgdFswXSYmXCJudW1iZXJcIj09dHlwZW9mIHRbMV0pfWZ1bmN0aW9uIHBhcnNlUG9zaXRpb24odCl7dmFyIGU9dC5zcGxpdChcIiBcIik7cmV0dXJue3ZlcnRpY2FsOmVbMF0saG9yaXpvbnRhbDplWzFdfX1mdW5jdGlvbiBmcmFtZURlYm91bmNlKHQpe3ZhciBlLGk9ITE7ZnVuY3Rpb24gcygpe2Zvcih2YXIgcz10aGlzLG49W10sbz1hcmd1bWVudHMubGVuZ3RoO28tLTspbltvXT1hcmd1bWVudHNbb107aXx8KGk9ITAsZT1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXt0LmFwcGx5KHMsbiksaT0hMX0pKX1yZXR1cm4gcy5jYW5jZWw9ZnVuY3Rpb24oKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSksaT0hMX0sc312YXIgQ2FuUmVuZGVyTWl4aW49e2RhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y2FuUmVuZGVyOiFvblNTUn19LG1vdW50ZWQ6ZnVuY3Rpb24oKXshMT09PXRoaXMuY2FuUmVuZGVyJiYodGhpcy5jYW5SZW5kZXI9ITApfX0sUVBvcG92ZXI9e25hbWU6XCJRUG9wb3ZlclwiLG1peGluczpbTW9kZWxUb2dnbGVNaXhpbixDYW5SZW5kZXJNaXhpbl0scHJvcHM6e2FuY2hvcjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOnBvc2l0aW9uVmFsaWRhdG9yfSxzZWxmOnt0eXBlOlN0cmluZyx2YWxpZGF0b3I6cG9zaXRpb25WYWxpZGF0b3J9LGZpdDpCb29sZWFuLGNvdmVyOkJvb2xlYW4scGVyc2lzdGVudDpCb29sZWFuLGtlZXBPblNjcmVlbjpCb29sZWFuLG1heEhlaWdodDpTdHJpbmcsdG91Y2hQb3NpdGlvbjpCb29sZWFuLGFuY2hvckNsaWNrOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sb2Zmc2V0Ont0eXBlOkFycmF5LHZhbGlkYXRvcjpvZmZzZXRWYWxpZGF0b3J9LG5vRm9jdXM6Qm9vbGVhbixub1JlZm9jdXM6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW59LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKX19LGNvbXB1dGVkOntob3JpelNpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD9cInJpZ2h0XCI6XCJsZWZ0XCJ9LGFuY2hvck9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuY292ZXI/XCJ0b3AgXCIrdGhpcy5ob3JpelNpZGU6dGhpcy5hbmNob3J8fFwiYm90dG9tIFwiK3RoaXMuaG9yaXpTaWRlKX0sc2VsZk9yaWdpbjpmdW5jdGlvbigpe3JldHVybiBwYXJzZVBvc2l0aW9uKHRoaXMuc2VsZnx8XCJ0b3AgXCIrdGhpcy5ob3JpelNpZGUpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY2FuUmVuZGVyKXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wb3BvdmVyIHNjcm9sbFwiLHJlZjpcImNvbnRlbnRcIixhdHRyczp7dGFiaW5kZXg6LTF9LG9uOntjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fdXBkYXRlUG9zaXRpb249ZnJhbWVEZWJvdW5jZShmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQucmVwb3NpdGlvbihpLHMpfSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LmFuY2hvckVsPXQuJGVsLnBhcmVudE5vZGUsdC5hbmNob3JFbC5yZW1vdmVDaGlsZCh0LiRlbCksKHQuYW5jaG9yRWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1wb3B1cC0tc2tpcFwiKXx8dC5hbmNob3JFbC5jbGFzc0xpc3QuY29udGFpbnMoXCJuby1wb2ludGVyLWV2ZW50c1wiKSkmJih0LmFuY2hvckVsPXQuYW5jaG9yRWwucGFyZW50Tm9kZSksdC5hbmNob3JDbGljayYmKHQuYW5jaG9yRWwuY2xhc3NMaXN0LmFkZChcImN1cnNvci1wb2ludGVyXCIpLHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdC50b2dnbGUpLHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdC5fX3RvZ2dsZUtleSkpfSksdGhpcy52YWx1ZSYmdGhpcy5zaG93KCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNob3dpbmcmJnRoaXMuX19jbGVhbnVwKCksdGhpcy5hbmNob3JDbGljayYmdGhpcy5hbmNob3JFbCYmKHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy50b2dnbGUpLHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsdGhpcy5fX3RvZ2dsZUtleSkpfSxtZXRob2RzOntfX3Nob3c6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLm5vUmVmb2N1c3x8KHRoaXMuX19yZWZvY3VzVGFyZ2V0PXRoaXMuYW5jaG9yQ2xpY2smJnRoaXMuYW5jaG9yRWx8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpLEVzY2FwZUtleS5yZWdpc3RlcihmdW5jdGlvbigpe2UuJGVtaXQoXCJlc2NhcGUta2V5XCIpLGUuaGlkZSgpfSksdGhpcy5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHRoaXMuYW5jaG9yRWwpLHRoaXMuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLnNjcm9sbFRhcmdldCE9PXdpbmRvdyYmd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMuX191cGRhdGVQb3NpdGlvbixsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuX191cGRhdGVQb3NpdGlvbigwLHQsITApLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSwhdGhpcy5ub0ZvY3VzJiZ0aGlzLiRyZWZzLmNvbnRlbnQmJnRoaXMuJHJlZnMuY29udGVudC5mb2N1cygpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLGUuX19ib2R5SGlkZSwhMCksZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGUuX19ib2R5SGlkZSwhMCksZS5zaG93UHJvbWlzZSYmZS5zaG93UHJvbWlzZVJlc29sdmUoKX0sMCl9LF9fdG9nZ2xlS2V5OmZ1bmN0aW9uKHQpezEzPT09dC5rZXlDb2RlJiZ0aGlzLnRvZ2dsZSh0KX0sX19ib2R5SGlkZTpmdW5jdGlvbih0KXt0aGlzLnBlcnNpc3RlbnR8fHQmJnQudGFyZ2V0JiYodGhpcy4kZWwuY29udGFpbnModC50YXJnZXQpfHx0aGlzLmFuY2hvckVsLmNvbnRhaW5zKHQudGFyZ2V0KSl8fHRoaXMuaGlkZSh0KX0sX19oaWRlOmZ1bmN0aW9uKCl7dGhpcy5fX2NsZWFudXAoKSx0aGlzLmhpZGVQcm9taXNlJiZ0aGlzLmhpZGVQcm9taXNlUmVzb2x2ZSgpLCF0aGlzLm5vUmVmb2N1cyYmdGhpcy5fX3JlZm9jdXNUYXJnZXQmJih0aGlzLl9fcmVmb2N1c1RhcmdldC5mb2N1cygpLCF0aGlzLl9fcmVmb2N1c1RhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLWlmXCIpJiZ0aGlzLl9fcmVmb2N1c1RhcmdldC5ibHVyKCkpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5fX2JvZHlIaWRlLCEwKSxkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fX2JvZHlIaWRlLCEwKSx0aGlzLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5zY3JvbGxUYXJnZXQhPT13aW5kb3cmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9fdXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSxFc2NhcGVLZXkucG9wKCksdGhpcy4kZWwucmVtb3ZlKCl9LHJlcG9zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmFuY2hvckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9aS50b3Asbj1pLmJvdHRvbSxvPWkubGVmdCxyPWkucmlnaHQ7aWYoIXRoaXMua2VlcE9uU2NyZWVuJiYobjwwfHxzPndpbmRvdy5pbm5lckhlaWdodHx8cjwwfHxvPndpbmRvdy5pbm5lcldpZHRoKSlyZXR1cm4gdGhpcy5oaWRlKCk7aWYodGhpcy5maXR8fHRoaXMuY292ZXIpe3ZhciBhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuYW5jaG9yRWwpO3RoaXMuJGVsLnN0eWxlLm1pbldpZHRoPWEuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpLHRoaXMuY292ZXImJih0aGlzLiRlbC5zdHlsZS5taW5IZWlnaHQ9YS5nZXRQcm9wZXJ0eVZhbHVlKFwiaGVpZ2h0XCIpKX1pZihlKWlmKHRoaXMudG91Y2hQb3NpdGlvbil7dmFyIGw9cG9zaXRpb24odCksYz1sLnRvcCxoPWwubGVmdDt0aGlzLnRvdWNoT2Zmc2V0PXtsZWZ0Omgtbyx0b3A6Yy1zfX1lbHNlIGRlbGV0ZSB0aGlzLnRvdWNoT2Zmc2V0O3NldFBvc2l0aW9uKHtldmVudDp0LGFuaW1hdGU6ZSxlbDp0aGlzLiRlbCxvZmZzZXQ6dGhpcy5vZmZzZXQsYW5jaG9yRWw6dGhpcy5hbmNob3JFbCxhbmNob3JPcmlnaW46dGhpcy5hbmNob3JPcmlnaW4sc2VsZk9yaWdpbjp0aGlzLnNlbGZPcmlnaW4sbWF4SGVpZ2h0OnRoaXMubWF4SGVpZ2h0LGFuY2hvckNsaWNrOnRoaXMuYW5jaG9yQ2xpY2ssdG91Y2hQb3NpdGlvbjp0aGlzLnRvdWNoUG9zaXRpb24sdG91Y2hPZmZzZXQ6dGhpcy50b3VjaE9mZnNldCxjb3Zlcjp0aGlzLmNvdmVyfSl9fX07ZnVuY3Rpb24gcHVzaCh0LGUsaSxzLG4sbyl7dmFyIHI9e3Byb3BzOntyaWdodDpvLnJpZ2h0fX07aWYocyYmbil0LnB1c2goZShpLHIscykpO2Vsc2V7dmFyIGE9ITE7Zm9yKHZhciBsIGluIG8paWYoby5oYXNPd25Qcm9wZXJ0eShsKSYmdm9pZCAwIT09KGE9b1tsXSkmJiEwIT09YSl7dC5wdXNoKGUoaSx7cHJvcHM6b30pKTticmVha31zJiZ0LnB1c2goZShpLHIscykpfX12YXIgUUl0ZW1XcmFwcGVyPXtuYW1lOlwiUUl0ZW1XcmFwcGVyXCIscHJvcHM6e2NmZzp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sc2xvdFJlcGxhY2U6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2ZnLGk9dGhpcy5zbG90UmVwbGFjZSxzPVtdO3JldHVybiBwdXNoKHMsdCxRSXRlbVNpZGUsdGhpcy4kc2xvdHMubGVmdCxpLHtpY29uOmUuaWNvbixjb2xvcjplLmxlZnRDb2xvcixhdmF0YXI6ZS5hdmF0YXIsbGV0dGVyOmUubGV0dGVyLGltYWdlOmUuaW1hZ2UsaW52ZXJ0ZWQ6ZS5sZWZ0SW52ZXJ0ZWQsdGV4dENvbG9yOmUubGVmdFRleHRDb2xvcn0pLHB1c2gocyx0LFFJdGVtTWFpbix0aGlzLiRzbG90cy5tYWluLGkse2xhYmVsOmUubGFiZWwsc3VibGFiZWw6ZS5zdWJsYWJlbCxsYWJlbExpbmVzOmUubGFiZWxMaW5lcyxzdWJsYWJlbExpbmVzOmUuc3VibGFiZWxMaW5lcyxpbnNldDplLmluc2V0fSkscHVzaChzLHQsUUl0ZW1TaWRlLHRoaXMuJHNsb3RzLnJpZ2h0LGkse3JpZ2h0OiEwLGljb246ZS5yaWdodEljb24sY29sb3I6ZS5yaWdodENvbG9yLGF2YXRhcjplLnJpZ2h0QXZhdGFyLGxldHRlcjplLnJpZ2h0TGV0dGVyLGltYWdlOmUucmlnaHRJbWFnZSxzdGFtcDplLnN0YW1wLGludmVydGVkOmUucmlnaHRJbnZlcnRlZCx0ZXh0Q29sb3I6ZS5yaWdodFRleHRDb2xvcn0pLHMucHVzaCh0aGlzLiRzbG90cy5kZWZhdWx0KSx0KFFJdGVtLHthdHRyczp0aGlzLiRhdHRycyxvbjp0aGlzLiRsaXN0ZW5lcnMscHJvcHM6ZX0scyl9fSxLZXlib2FyZFNlbGVjdGlvbk1peGluPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2tleWJvYXJkSW5kZXg6MCxrZXlib2FyZE1vdmVEaXJlY3Rpb246ITEsa2V5Ym9hcmRNb3ZlVGltZXI6ITF9fSx3YXRjaDp7a2V5Ym9hcmRJbmRleDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJHJlZnMucG9wb3ZlciYmdGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcmJnRoaXMua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uJiZ0Pi0xJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lmKGUuJHJlZnMucG9wb3Zlcil7dmFyIHQ9ZS4kcmVmcy5wb3BvdmVyLiRlbC5xdWVyeVNlbGVjdG9yKFwiLnEtc2VsZWN0LWhpZ2hsaWdodFwiKTtpZih0JiZ0LnNjcm9sbEludG9WaWV3KXtpZih0LnNjcm9sbEludG9WaWV3SWZOZWVkZWQpcmV0dXJuIHQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCghMSk7dC5zY3JvbGxJbnRvVmlldyhlLmtleWJvYXJkTW92ZURpcmVjdGlvbjwwKX19fSl9fSxtZXRob2RzOntfX2tleWJvYXJkU2hvdzpmdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKSx0aGlzLmtleWJvYXJkSW5kZXghPT10JiYodGhpcy5rZXlib2FyZEluZGV4PXQpfSxfX2tleWJvYXJkU2V0Q3VycmVudFNlbGVjdGlvbjpmdW5jdGlvbih0KXt0aGlzLmtleWJvYXJkSW5kZXg+PTAmJnRoaXMua2V5Ym9hcmRJbmRleDw9dGhpcy5rZXlib2FyZE1heEluZGV4JiZ0aGlzLl9fa2V5Ym9hcmRTZXRTZWxlY3Rpb24odGhpcy5rZXlib2FyZEluZGV4LHQpfSxfX2tleWJvYXJkSGFuZGxlS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPWdldEV2ZW50S2V5KHQpO3N3aXRjaChlKXtjYXNlIDM4OnRoaXMuX19rZXlib2FyZE1vdmVDdXJzb3IoLTEsdCk7YnJlYWs7Y2FzZSA0MDp0aGlzLl9fa2V5Ym9hcmRNb3ZlQ3Vyc29yKDEsdCk7YnJlYWs7Y2FzZSAxMzppZih0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZylyZXR1cm4gc3RvcEFuZFByZXZlbnQodCksdm9pZCB0aGlzLl9fa2V5Ym9hcmRTZXRDdXJyZW50U2VsZWN0aW9uKCk7YnJlYWs7Y2FzZSA5OnRoaXMuaGlkZSgpfXRoaXMuX19rZXlib2FyZEN1c3RvbUtleUhhbmRsZShlLHQpfSxfX2tleWJvYXJkTW92ZUN1cnNvcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7aWYoc3RvcEFuZFByZXZlbnQoZSksdGhpcy4kcmVmcy5wb3BvdmVyLnNob3dpbmcpe2NsZWFyVGltZW91dCh0aGlzLmtleWJvYXJkTW92ZVRpbWVyKTt2YXIgcz10aGlzLmtleWJvYXJkSW5kZXgsbj10aGlzLl9fa2V5Ym9hcmRJc1NlbGVjdGFibGVJbmRleHx8ZnVuY3Rpb24oKXtyZXR1cm4hMH07ZG97cz1ub3JtYWxpemVUb0ludGVydmFsKHMrdCwtMSxpLmtleWJvYXJkTWF4SW5kZXgpfXdoaWxlKHMhPT10aGlzLmtleWJvYXJkSW5kZXgmJiFuKHMpKTtyZXR1cm4gdGhpcy5rZXlib2FyZE1vdmVEaXJlY3Rpb249cz50aGlzLmtleWJvYXJkSW5kZXg/MTotMSx0aGlzLmtleWJvYXJkTW92ZVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLmtleWJvYXJkTW92ZURpcmVjdGlvbj0hMX0sNTAwKSx2b2lkKHRoaXMua2V5Ym9hcmRJbmRleD1zKX10aGlzLl9fa2V5Ym9hcmRTaG93VHJpZ2dlcigpfX19LFFBdXRvY29tcGxldGU9e25hbWU6XCJRQXV0b2NvbXBsZXRlXCIsbWl4aW5zOltLZXlib2FyZFNlbGVjdGlvbk1peGluXSxwcm9wczp7bWluQ2hhcmFjdGVyczp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxtYXhSZXN1bHRzOnt0eXBlOk51bWJlcixkZWZhdWx0OjZ9LG1heEhlaWdodDpTdHJpbmcsZGVib3VuY2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NTAwfSxmaWx0ZXI6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmaWx0ZXJ9LHN0YXRpY0RhdGE6T2JqZWN0LHZhbHVlRmllbGQ6W1N0cmluZyxGdW5jdGlvbl0sc2VwYXJhdG9yOkJvb2xlYW59LGluamVjdDp7X19pbnB1dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRQXV0b2NvbXBsZXRlIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFJbnB1dCwgUUNoaXBzSW5wdXQgb3IgUVNlYXJjaFwiKX19LF9faW5wdXREZWJvdW5jZTp7ZGVmYXVsdDpudWxsfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntzZWFyY2hJZDpcIlwiLHJlc3VsdHM6W10sd2lkdGg6MCxlbnRlcktleTohMSx0aW1lcjpudWxsfX0sd2F0Y2g6e1wiX19pbnB1dC52YWxcIjpmdW5jdGlvbigpe3RoaXMuZW50ZXJLZXk/dGhpcy5lbnRlcktleT0hMTp0aGlzLl9fZGVsYXlUcmlnZ2VyKCl9fSxjb21wdXRlZDp7Y29tcHV0ZWRSZXN1bHRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF4UmVzdWx0cyYmdGhpcy5yZXN1bHRzLmxlbmd0aD4wP3RoaXMucmVzdWx0cy5zbGljZSgwLHRoaXMubWF4UmVzdWx0cyk6W119LGNvbXB1dGVkVmFsdWVGaWVsZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlRmllbGR8fHRoaXMuc3RhdGljRGF0YSYmdGhpcy5zdGF0aWNEYXRhLmZpZWxkfHxcInZhbHVlXCJ9LGtleWJvYXJkTWF4SW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb21wdXRlZFJlc3VsdHMubGVuZ3RoLTF9LGNvbXB1dGVkV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm57bWluV2lkdGg6dGhpcy53aWR0aH19LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlYXJjaElkLmxlbmd0aD4wfX0sbWV0aG9kczp7aXNXb3JraW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMmJnRoaXMuJHJlZnMucG9wb3Zlcn0sdHJpZ2dlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuX19pbnB1dCYmdGhpcy5fX2lucHV0LmlzRWRpdGFibGUoKSYmdGhpcy5fX2lucHV0Lmhhc0ZvY3VzKCkmJnRoaXMuaXNXb3JraW5nKCkpe3ZhciBpPVtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5fX2lucHV0LnZhbCk/XCJcIjpTdHJpbmcodGhpcy5fX2lucHV0LnZhbCkscz1pLmxlbmd0aCxuPXVpZCgpLG89dGhpcy4kcmVmcy5wb3BvdmVyO2lmKHRoaXMuc2VhcmNoSWQ9bixzPHRoaXMubWluQ2hhcmFjdGVyc3x8ITA9PT10JiZzPjApcmV0dXJuIHRoaXMuc2VhcmNoSWQ9XCJcIix0aGlzLl9fY2xlYXJTZWFyY2goKSx2b2lkIHRoaXMuaGlkZSgpO2lmKHRoaXMud2lkdGg9d2lkdGgodGhpcy5pbnB1dEVsKStcInB4XCIsdGhpcy5zdGF0aWNEYXRhKXJldHVybiB0aGlzLnNlYXJjaElkPVwiXCIsdGhpcy5yZXN1bHRzPXRoaXMuZmlsdGVyKGksdGhpcy5zdGF0aWNEYXRhKSx0aGlzLnJlc3VsdHMubGVuZ3RoP3ZvaWQgdGhpcy5fX3Nob3dSZXN1bHRzKCk6dm9pZCBvLmhpZGUoKTt0aGlzLl9faW5wdXQubG9hZGluZz0hMCx0aGlzLiRlbWl0KFwic2VhcmNoXCIsaSxmdW5jdGlvbih0KXtpZihlLmlzV29ya2luZygpJiZlLnNlYXJjaElkPT09bil7aWYoZS5fX2NsZWFyU2VhcmNoKCksQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+MClyZXR1cm4gZS5yZXN1bHRzPXQsdm9pZCBlLl9fc2hvd1Jlc3VsdHMoKTtlLmhpZGUoKX19KX19LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHRzPVtdLHRoaXMuaXNXb3JraW5nKCk/dGhpcy4kcmVmcy5wb3BvdmVyLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0sYmx1ckhpZGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19jbGVhclNlYXJjaCgpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0LmhpZGUoKX0sMzAwKX0sX19jbGVhclNlYXJjaDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLl9faW5wdXQubG9hZGluZz0hMSx0aGlzLnNlYXJjaElkPVwiXCJ9LF9fa2V5Ym9hcmRDdXN0b21LZXlIYW5kbGU6ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMjc6dGhpcy5fX2NsZWFyU2VhcmNoKCk7YnJlYWs7Y2FzZSAzODpjYXNlIDQwOmNhc2UgOTp0aGlzLl9fa2V5Ym9hcmRTZXRDdXJyZW50U2VsZWN0aW9uKCEwKX19LF9fa2V5Ym9hcmRTaG93VHJpZ2dlcjpmdW5jdGlvbigpe3RoaXMudHJpZ2dlcigpfSxfX2ZvY3VzU2hvd1RyaWdnZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gdC50cmlnZ2VyKCEwKX0sMTAwKX0sX19rZXlib2FyZElzU2VsZWN0YWJsZUluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0Pi0xJiZ0PHRoaXMuY29tcHV0ZWRSZXN1bHRzLmxlbmd0aCYmIXRoaXMuY29tcHV0ZWRSZXN1bHRzW3RdLmRpc2FibGV9LHNldFZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuY29tcHV0ZWRWYWx1ZUZpZWxkP3RoaXMuY29tcHV0ZWRWYWx1ZUZpZWxkKHQpOnRbdGhpcy5jb21wdXRlZFZhbHVlRmllbGRdLG49dGhpcy5fX2lucHV0RGVib3VuY2U/XCJEZWJvdW5jZVwiOlwiXCI7dGhpcy5pbnB1dEVsJiZ0aGlzLl9faW5wdXQmJiF0aGlzLl9faW5wdXQuaGFzRm9jdXMoKSYmKHRoaXMuJHEucGxhdGZvcm0uaXMuaWU/dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpLmlucHV0RWwuZm9jdXMoKX0pOnRoaXMuaW5wdXRFbC5mb2N1cygpKSx0aGlzLmVudGVyS2V5PXRoaXMuX19pbnB1dCYmcyE9PXRoaXMuX19pbnB1dC52YWwsdGhpc1tcIl9faW5wdXRcIituXVtlP1wic2V0TmF2XCI6XCJzZXRcIl0ocyksdGhpcy4kZW1pdChcInNlbGVjdGVkXCIsdCwhIWUpLGV8fCh0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLmhpZGUoKSl9LF9fa2V5Ym9hcmRTZXRTZWxlY3Rpb246ZnVuY3Rpb24odCxlKXt0aGlzLnNldFZhbHVlKHRoaXMucmVzdWx0c1t0XSxlKX0sX19kZWxheVRyaWdnZXI6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYXJTZWFyY2goKSx0aGlzLl9faW5wdXQuaGFzRm9jdXMoKSYmKHRoaXMuc3RhdGljRGF0YT90aGlzLnRyaWdnZXIoKTp0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy50cmlnZ2VyLHRoaXMuZGVib3VuY2UpKX0sX19zaG93UmVzdWx0czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHJlZnMucG9wb3Zlcjt0aGlzLl9fa2V5Ym9hcmRTaG93KC0xKSx0LnNob3dpbmc/dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gdC5zaG93aW5nJiZ0LnJlcG9zaXRpb24oKX0pOnQuc2hvdygpfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fX2lucHV0LnJlZ2lzdGVyKCksdGhpcy5fX2lucHV0RGVib3VuY2UmJnRoaXMuX19pbnB1dERlYm91bmNlLnNldENoaWxkRGVib3VuY2UoITApLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5fX2lucHV0JiYodC5pbnB1dEVsPXQuX19pbnB1dC5nZXRFbCgpLHQuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHQuX19rZXlib2FyZEhhbmRsZUtleSksdC5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdC5ibHVySGlkZSksdC5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHQuX19mb2N1c1Nob3dUcmlnZ2VyKSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19jbGVhclNlYXJjaCgpLHRoaXMuX19pbnB1dC51bnJlZ2lzdGVyKCksdGhpcy5fX2lucHV0RGVib3VuY2UmJnRoaXMuX19pbnB1dERlYm91bmNlLnNldENoaWxkRGVib3VuY2UoITEpLHRoaXMuaW5wdXRFbCYmKHRoaXMuaW5wdXRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMuX19rZXlib2FyZEhhbmRsZUtleSksdGhpcy5pbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5ibHVySGlkZSksdGhpcy5pbnB1dEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX19mb2N1c1Nob3dUcmlnZ2VyKSx0aGlzLmhpZGUoKSl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy5fX2lucHV0LmlzRGFyaygpO3JldHVybiB0KFFQb3BvdmVyLHtyZWY6XCJwb3BvdmVyXCIsY2xhc3M6aT9cImJnLWRhcmtcIjpudWxsLHByb3BzOntmaXQ6ITAsa2VlcE9uU2NyZWVuOiEwLGFuY2hvckNsaWNrOiExLG1heEhlaWdodDp0aGlzLm1heEhlaWdodCxub0ZvY3VzOiEwLG5vUmVmb2N1czohMH0sb246e3Nob3c6ZnVuY3Rpb24oKXtlLl9faW5wdXQuc2VsZWN0aW9uT3Blbj0hMCxlLiRlbWl0KFwic2hvd1wiKX0saGlkZTpmdW5jdGlvbigpe2UuX19pbnB1dC5zZWxlY3Rpb25PcGVuPSExLGUuJGVtaXQoXCJoaWRlXCIpfX19LFt0KFFMaXN0LHtwcm9wczp7ZGFyazppLG5vQm9yZGVyOiEwLHNlcGFyYXRvcjp0aGlzLnNlcGFyYXRvcn0sc3R5bGU6dGhpcy5jb21wdXRlZFdpZHRofSx0aGlzLmNvbXB1dGVkUmVzdWx0cy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRSXRlbVdyYXBwZXIse2tleTppLmlkfHxzLGNsYXNzOntcInEtc2VsZWN0LWhpZ2hsaWdodFwiOmUua2V5Ym9hcmRJbmRleD09PXMsXCJjdXJzb3ItcG9pbnRlclwiOiFpLmRpc2FibGUsXCJ0ZXh0LWZhZGVkXCI6aS5kaXNhYmxlfSxwcm9wczp7Y2ZnOml9LG5hdGl2ZU9uOnttb3VzZWVudGVyOmZ1bmN0aW9uKCl7IWkuZGlzYWJsZSYmKGUua2V5Ym9hcmRJbmRleD1zKX0sY2xpY2s6ZnVuY3Rpb24oKXshaS5kaXNhYmxlJiZlLnNldFZhbHVlKGkpfX19KX0pKV0pfX0sUUJyZWFkY3J1bWJzPXtuYW1lOlwiUUJyZWFkY3J1bWJzXCIsbWl4aW5zOltBbGlnbk1peGluXSxwcm9wczp7Y29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJmYWRlZFwifSxhY3RpdmVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sc2VwYXJhdG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiL1wifSxhbGlnbjpPYmplY3QuYXNzaWduKHt9LEFsaWduTWl4aW4ucHJvcHMuYWxpZ24se2RlZmF1bHQ6XCJsZWZ0XCJ9KX0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm5bXCJ0ZXh0LVwiK3RoaXMuY29sb3IsdGhpcy5hbGlnbkNsYXNzXX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuJHNsb3RzLmRlZmF1bHQpe3ZhciBpPVtdLHM9dGhpcy4kc2xvdHMuZGVmYXVsdC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQudGFnJiZ0LnRhZy5lbmRzV2l0aChcIi1RQnJlYWRjcnVtYnNFbFwiKX0pLmxlbmd0aCxuPXRoaXMuJHNjb3BlZFNsb3RzLnNlcGFyYXRvcnx8ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXBhcmF0b3J9LG89XCJ0ZXh0LVwiK3RoaXMuY29sb3Iscj1cInRleHQtXCIrdGhpcy5hY3RpdmVDb2xvcixhPTE7Zm9yKHZhciBsIGluIGUuJHNsb3RzLmRlZmF1bHQpe3ZhciBjPWUuJHNsb3RzLmRlZmF1bHRbbF07aWYodm9pZCAwIT09Yy50YWcmJmMudGFnLmVuZHNXaXRoKFwiLVFCcmVhZGNydW1ic0VsXCIpKXt2YXIgaD1hPHM7YSsrLGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiZmxleCBpdGVtcy1jZW50ZXJcIixjbGFzczpbaD9yOm8saD9cInRleHQtd2VpZ2h0LWJvbGRcIjpcInEtYnJlYWRjcnVtYnMtbGFzdFwiXX0sW2NdKSksaCYmaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJyZWFkY3J1bWJzLXNlcGFyYXRvclwiLGNsYXNzOm99LFtuKCldKSl9ZWxzZSBpLnB1c2goYyl9cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWJyZWFkY3J1bWJzIGZsZXggZ3V0dGVyLXhzIGl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIixjbGFzczp0aGlzLmNsYXNzZXN9LGkpfX19LFFCcmVhZGNydW1ic0VsPXtuYW1lOlwiUUJyZWFkY3J1bWJzRWxcIixtaXhpbnM6W3twcm9wczpyb3V0ZXJMaW5rUHJvcHN9XSxwcm9wczp7bGFiZWw6U3RyaW5nLGljb246U3RyaW5nLGNvbG9yOlN0cmluZ30scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KHZvaWQgMCE9PXRoaXMudG8/XCJyb3V0ZXItbGlua1wiOlwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtbGluayBxLWJyZWFkY3J1bWJzLWVsIGZsZXggaW5saW5lIGl0ZW1zLWNlbnRlciByZWxhdGl2ZS1wb3NpdGlvblwiLHByb3BzOnZvaWQgMCE9PXRoaXMudG8/dGhpcy4kcHJvcHM6bnVsbH0sW3RoaXMuaWNvbj90KFFJY29uLHtzdGF0aWNDbGFzczpcInEtYnJlYWNydW1icy1lbC1pY29uIHEtbXItc21cIixwcm9wczp7bmFtZTp0aGlzLmljb259fSk6bnVsbCx0aGlzLmxhYmVsXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpfX0sUUJ0bkdyb3VwPXtuYW1lOlwiUUJ0bkdyb3VwXCIscHJvcHM6e291dGxpbmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4scm91bmRlZDpCb29sZWFuLHB1c2g6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybltcIm91dGxpbmVcIixcImZsYXRcIixcInJvdW5kZWRcIixcInB1c2hcIl0uZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwicS1idG4tZ3JvdXAtXCIrdH0pLmpvaW4oXCIgXCIpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1idG4tZ3JvdXAgcm93IG5vLXdyYXAgaW5saW5lXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFCdG5Ecm9wZG93bj17bmFtZTpcIlFCdG5Ecm9wZG93blwiLG1peGluczpbQnRuTWl4aW5dLHByb3BzOnt2YWx1ZTpCb29sZWFuLHNwbGl0OkJvb2xlYW4sY29udGVudENsYXNzOltBcnJheSxTdHJpbmcsT2JqZWN0XSxjb250ZW50U3R5bGU6W0FycmF5LFN0cmluZyxPYmplY3RdLHBvcG92ZXJBbmNob3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJib3R0b20gcmlnaHRcIn0scG9wb3ZlclNlbGY6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0b3AgcmlnaHRcIn19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd2luZzp0aGlzLnZhbHVlfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuJHJlZnMucG9wb3ZlciYmdGhpcy4kcmVmcy5wb3BvdmVyW3Q/XCJzaG93XCI6XCJoaWRlXCJdKCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQoUVBvcG92ZXIse3JlZjpcInBvcG92ZXJcIixwcm9wczp7ZGlzYWJsZTp0aGlzLmRpc2FibGUsZml0OiEwLGFuY2hvckNsaWNrOiF0aGlzLnNwbGl0LGFuY2hvcjp0aGlzLnBvcG92ZXJBbmNob3Isc2VsZjp0aGlzLnBvcG92ZXJTZWxmfSxjbGFzczp0aGlzLmNvbnRlbnRDbGFzcyxzdHlsZTp0aGlzLmNvbnRlbnRTdHlsZSxvbjp7c2hvdzpmdW5jdGlvbih0KXtlLnNob3dpbmc9ITAsZS4kZW1pdChcInNob3dcIix0KSxlLiRlbWl0KFwiaW5wdXRcIiwhMCl9LGhpZGU6ZnVuY3Rpb24odCl7ZS5zaG93aW5nPSExLGUuJGVtaXQoXCJoaWRlXCIsdCksZS4kZW1pdChcImlucHV0XCIsITEpfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHM9dChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufSxzdGF0aWNDbGFzczpcInRyYW5zaXRpb24tZ2VuZXJpY1wiLGNsYXNzOntcInJvdGF0ZS0xODBcIjp0aGlzLnNob3dpbmcsXCJvbi1yaWdodFwiOiF0aGlzLnNwbGl0LFwicS1idG4tZHJvcGRvd24tYXJyb3dcIjohdGhpcy5zcGxpdH19KSxuPXQoUUJ0bix7cHJvcHM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRwcm9wcyx7aWNvblJpZ2h0OnRoaXMuc3BsaXQ/dGhpcy5pY29uUmlnaHQ6bnVsbH0pLGNsYXNzOnRoaXMuc3BsaXQ/XCJxLWJ0bi1kcm9wZG93bi1jdXJyZW50XCI6XCJxLWJ0bi1kcm9wZG93biBxLWJ0bi1kcm9wZG93bi1zaW1wbGVcIixvbjp7Y2xpY2s6ZnVuY3Rpb24odCl7ZS5zcGxpdCYmZS5oaWRlKCksZS5kaXNhYmxlfHxlLiRlbWl0KFwiY2xpY2tcIix0KX19fSx0aGlzLnNwbGl0P251bGw6W3MsaV0pO3JldHVybiB0aGlzLnNwbGl0P3QoUUJ0bkdyb3VwLHtwcm9wczp7b3V0bGluZTp0aGlzLm91dGxpbmUsZmxhdDp0aGlzLmZsYXQscm91bmRlZDp0aGlzLnJvdW5kZWQscHVzaDp0aGlzLnB1c2h9LHN0YXRpY0NsYXNzOlwicS1idG4tZHJvcGRvd24gcS1idG4tZHJvcGRvd24tc3BsaXQgbm8td3JhcCBxLWJ0bi1pdGVtXCJ9LFtuLHQoUUJ0bix7cHJvcHM6e2Rpc2FibGU6dGhpcy5kaXNhYmxlLG91dGxpbmU6dGhpcy5vdXRsaW5lLGZsYXQ6dGhpcy5mbGF0LHJvdW5kZWQ6dGhpcy5yb3VuZGVkLHB1c2g6dGhpcy5wdXNoLHNpemU6dGhpcy5zaXplLGNvbG9yOnRoaXMuY29sb3IsdGV4dENvbG9yOnRoaXMudGV4dENvbG9yLGRlbnNlOnRoaXMuZGVuc2UsZ2xvc3N5OnRoaXMuZ2xvc3N5LG5vUmlwcGxlOnRoaXMubm9SaXBwbGUsd2FpdEZvclJpcHBsZTp0aGlzLndhaXRGb3JSaXBwbGV9LHN0YXRpY0NsYXNzOlwicS1idG4tZHJvcGRvd24tYXJyb3dcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnRvZ2dsZSgpfX19LFtzXSksW2ldXSk6bn0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIudG9nZ2xlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5wb3BvdmVyP3RoaXMuJHJlZnMucG9wb3Zlci5zaG93KCk6UHJvbWlzZS5yZXNvbHZlKCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5wb3BvdmVyP3RoaXMuJHJlZnMucG9wb3Zlci5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QudmFsdWUmJnQuJHJlZnMucG9wb3ZlciYmdC4kcmVmcy5wb3BvdmVyLnNob3coKX0pfX0sUUJ0blRvZ2dsZT17bmFtZTpcIlFCdG5Ub2dnbGVcIixwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSxjb2xvcjpTdHJpbmcsdGV4dENvbG9yOlN0cmluZyx0b2dnbGVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdG9nZ2xlVGV4dENvbG9yOlN0cmluZyxvcHRpb25zOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4oXCJsYWJlbFwiaW4gdHx8XCJpY29uXCJpbiB0KSYmXCJ2YWx1ZVwiaW4gdH0pfX0scmVhZG9ubHk6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4sbm9DYXBzOkJvb2xlYW4sbm9XcmFwOkJvb2xlYW4sb3V0bGluZTpCb29sZWFuLGZsYXQ6Qm9vbGVhbixkZW5zZTpCb29sZWFuLHJvdW5kZWQ6Qm9vbGVhbixwdXNoOkJvb2xlYW4sc2l6ZTpTdHJpbmcsZ2xvc3N5OkJvb2xlYW4sbm9SaXBwbGU6Qm9vbGVhbix3YWl0Rm9yUmlwcGxlOkJvb2xlYW59LGNvbXB1dGVkOnt2YWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnZhbHVlPT09dC52YWx1ZX0pfX0sbWV0aG9kczp7c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpczt0aGlzLnJlYWRvbmx5fHwodGhpcy4kZW1pdChcImlucHV0XCIsdCxlKSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoaS52YWx1ZSkmJmkuJGVtaXQoXCJjaGFuZ2VcIix0LGUpfSkpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoUUJ0bkdyb3VwLHtzdGF0aWNDbGFzczpcInEtYnRuLXRvZ2dsZVwiLHByb3BzOntvdXRsaW5lOnRoaXMub3V0bGluZSxmbGF0OnRoaXMuZmxhdCxyb3VuZGVkOnRoaXMucm91bmRlZCxwdXNoOnRoaXMucHVzaH19LHRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRQnRuLHtrZXk6XCJcIitpLmxhYmVsK2kuaWNvbitpLmljb25SaWdodCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoaS52YWx1ZSxpKX19LHByb3BzOntkaXNhYmxlOmUuZGlzYWJsZXx8aS5kaXNhYmxlLGxhYmVsOmkubGFiZWwsY29sb3I6ZS52YWxbc10/aS50b2dnbGVDb2xvcnx8ZS50b2dnbGVDb2xvcjppLmNvbG9yfHxlLmNvbG9yLHRleHRDb2xvcjplLnZhbFtzXT9pLnRvZ2dsZVRleHRDb2xvcnx8ZS50b2dnbGVUZXh0Q29sb3I6aS50ZXh0Q29sb3J8fGUudGV4dENvbG9yLGljb246aS5pY29uLGljb25SaWdodDppLmljb25SaWdodCxub0NhcHM6ZS5ub0NhcHN8fGkubm9DYXBzLG5vV3JhcDplLm5vV3JhcHx8aS5ub1dyYXAsb3V0bGluZTplLm91dGxpbmUsZmxhdDplLmZsYXQscm91bmRlZDplLnJvdW5kZWQscHVzaDplLnB1c2gsZ2xvc3N5OmUuZ2xvc3N5LHNpemU6ZS5zaXplLGRlbnNlOmUuZGVuc2Usbm9SaXBwbGU6ZS5ub1JpcHBsZXx8aS5ub1JpcHBsZSx3YWl0Rm9yUmlwcGxlOmUud2FpdEZvclJpcHBsZXx8aS53YWl0Rm9yUmlwcGxlLHRhYmluZGV4OmkudGFiaW5kZXh9fSl9KSl9fSxRQ2FyZD17bmFtZTpcIlFDYXJkXCIscHJvcHM6e2Rhcms6Qm9vbGVhbixzcXVhcmU6Qm9vbGVhbixmbGF0OkJvb2xlYW4saW5saW5lOkJvb2xlYW4sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmd9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W3tcIm5vLWJvcmRlci1yYWRpdXNcIjp0aGlzLnNxdWFyZSxcIm5vLXNoYWRvd1wiOnRoaXMuZmxhdCxcImlubGluZS1ibG9ja1wiOnRoaXMuaW5saW5lLFwicS1jYXJkLWRhcmtcIjp0aGlzLmRhcmt9XTtyZXR1cm4gdGhpcy5jb2xvcj8odC5wdXNoKFwiYmctXCIrdGhpcy5jb2xvciksdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fFwid2hpdGVcIikpKTp0aGlzLnRleHRDb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLnRleHRDb2xvciksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZFwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRQ2FyZFRpdGxlPXtuYW1lOlwiUUNhcmRUaXRsZVwiLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC1wcmltYXJ5IHEtY2FyZC1jb250YWluZXIgcm93IG5vLXdyYXBcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgY29sdW1uXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLXRpdGxlXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtc3VidGl0bGVcIn0sW3RoaXMuJHNsb3RzLnN1YnRpdGxlXSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWF1dG8gc2VsZi1jZW50ZXIgcS1jYXJkLXRpdGxlLWV4dHJhXCJ9LFt0aGlzLiRzbG90cy5yaWdodF0pXSl9fSxRQ2FyZE1haW49e25hbWU6XCJRQ2FyZE1haW5cIixyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtbWFpbiBxLWNhcmQtY29udGFpbmVyXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNhcmRBY3Rpb25zPXtuYW1lOlwiUUNhcmRBY3Rpb25zXCIscHJvcHM6e3ZlcnRpY2FsOkJvb2xlYW4sYWxpZ246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJzdGFydFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJzdGFydFwiLFwiY2VudGVyXCIsXCJlbmRcIixcImFyb3VuZFwiLFwiYmV0d2VlblwiXS5pbmNsdWRlcyh0KX19fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVyblwicS1jYXJkLWFjdGlvbnMtXCIrKHRoaXMudmVydGljYWw/XCJ2ZXJ0IGNvbHVtbiBqdXN0aWZ5LXN0YXJ0XCI6XCJob3JpeiByb3dcIikrXCIgXCIrKHRoaXMudmVydGljYWw/XCJpdGVtc1wiOlwianVzdGlmeVwiKStcIi1cIit0aGlzLmFsaWdufX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJkLWFjdGlvbnNcIixjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNhcmRNZWRpYT17bmFtZTpcIlFDYXJkTWVkaWFcIixwcm9wczp7b3ZlcmxheVBvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcFwiLFwiYm90dG9tXCIsXCJmdWxsXCJdLmluY2x1ZGVzKHQpfX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2FyZC1tZWRpYSByZWxhdGl2ZS1wb3NpdGlvblwifSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLiRzbG90cy5vdmVybGF5P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtbWVkaWEtb3ZlcmxheVwiLGNsYXNzOlwiYWJzb2x1dGUtXCIrdGhpcy5vdmVybGF5UG9zaXRpb259LFt0aGlzLiRzbG90cy5vdmVybGF5XSk6bnVsbF0pfX0sUUNhcmRTZXBhcmF0b3I9e25hbWU6XCJRQ2FyZFNlcGFyYXRvclwiLHByb3BzOntpbnNldDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcmQtc2VwYXJhdG9yXCIsY2xhc3M6e2luc2V0OnRoaXMuaW5zZXR9fSx0aGlzLiRzbG90cy5kZWZhdWx0KX19O2Z1bmN0aW9uIGdldERpcmVjdGlvbih0KXt2YXIgZT0hMCE9PXQuaG9yaXpvbnRhbCYmITAhPT10LnZlcnRpY2FsLGk9e307cmV0dXJuITAhPT10Lmhvcml6b250YWwmJiEwIT09ZXx8KGkuaG9yaXpvbnRhbD0hMCksITAhPT10LnZlcnRpY2FsJiYhMCE9PWV8fChpLnZlcnRpY2FsPSEwKSxpfWZ1bmN0aW9uIHByb2Nlc3NDaGFuZ2VzKHQsZSxpKXt2YXIgcz1wb3NpdGlvbih0KSxuPXMubGVmdC1lLmV2ZW50Lngsbz1zLnRvcC1lLmV2ZW50Lnkscj1NYXRoLmFicyhuKSxhPU1hdGguYWJzKG8pO3JldHVybntldnQ6dCxwb3NpdGlvbjpzLGRpcmVjdGlvbjplLmRpcmVjdGlvbi5ob3Jpem9udGFsJiYhZS5kaXJlY3Rpb24udmVydGljYWw/bjwwP1wibGVmdFwiOlwicmlnaHRcIjohZS5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmZS5kaXJlY3Rpb24udmVydGljYWw/bzwwP1widXBcIjpcImRvd25cIjpyPj1hP248MD9cImxlZnRcIjpcInJpZ2h0XCI6bzwwP1widXBcIjpcImRvd25cIixpc0ZpcnN0OmUuZXZlbnQuaXNGaXJzdCxpc0ZpbmFsOmksZHVyYXRpb246KG5ldyBEYXRlKS5nZXRUaW1lKCktZS5ldmVudC50aW1lLGRpc3RhbmNlOnt4OnIseTphfSxvZmZzZXQ6e3g6bix5Om99LGRlbHRhOnt4OnMubGVmdC1lLmV2ZW50Lmxhc3RYLHk6cy50b3AtZS5ldmVudC5sYXN0WX19fWZ1bmN0aW9uIHNob3VsZFRyaWdnZXIodCxlKXtyZXR1cm4hKCF0LmRpcmVjdGlvbi5ob3Jpem9udGFsfHwhdC5kaXJlY3Rpb24udmVydGljYWwpfHwodC5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmIXQuZGlyZWN0aW9uLnZlcnRpY2FsP01hdGguYWJzKGUuZGVsdGEueCk+MDohdC5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmdC5kaXJlY3Rpb24udmVydGljYWw/TWF0aC5hYnMoZS5kZWx0YS55KT4wOnZvaWQgMCl9dmFyIFRvdWNoUGFuPXtuYW1lOlwidG91Y2gtcGFuXCIsYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPSEwIT09ZS5tb2RpZmllcnMubm9Nb3VzZSxzPWUubW9kaWZpZXJzLnN0b3Asbj1lLm1vZGlmaWVycy5wcmV2ZW50LG89bnx8ZS5tb2RpZmllcnMubWlnaHRQcmV2ZW50P251bGw6bGlzdGVuT3B0cy5wYXNzaXZlLHI9e2hhbmRsZXI6ZS52YWx1ZSxkaXJlY3Rpb246Z2V0RGlyZWN0aW9uKGUubW9kaWZpZXJzKSxtb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe2xlZnRDbGljayh0KSYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixyLm1vdmUsbyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixyLm1vdXNlRW5kLG8pLHIuc3RhcnQodCwhMCkpfSxtb3VzZUVuZDpmdW5jdGlvbih0KXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsci5tb3ZlLG8pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsci5tb3VzZUVuZCxvKSxyLmVuZCh0KX0sc3RhcnQ6ZnVuY3Rpb24oZSxpKXt2YXIgbz1wb3NpdGlvbihlKTtyLmV2ZW50PXt4Om8ubGVmdCx5Om8udG9wLHRpbWU6KG5ldyBEYXRlKS5nZXRUaW1lKCksZGV0ZWN0ZWQ6ITA9PT1pfHxyLmRpcmVjdGlvbi5ob3Jpem9udGFsJiZyLmRpcmVjdGlvbi52ZXJ0aWNhbCxhYm9ydDohMSxpc0ZpcnN0OiEwLGxhc3RYOm8ubGVmdCxsYXN0WTpvLnRvcH0sci5ldmVudC5kZXRlY3RlZCYmKHQuY2xhc3NMaXN0LmFkZChcInEtdG91Y2hcIiksITAhPT1pJiYocyYmZS5zdG9wUHJvcGFnYXRpb24oKSxuJiZlLnByZXZlbnREZWZhdWx0KCksci5tb3ZlKGUpKSl9LG1vdmU6ZnVuY3Rpb24odCl7aWYoITAhPT1yLmV2ZW50LmFib3J0KWlmKCEwIT09ci5ldmVudC5kZXRlY3RlZCl7dmFyIGU9cG9zaXRpb24odCksaT1NYXRoLmFicyhlLmxlZnQtci5ldmVudC54KSxvPU1hdGguYWJzKGUudG9wLXIuZXZlbnQueSk7aSE9PW8mJihyLmV2ZW50LmRldGVjdGVkPSEwLHIuZXZlbnQuYWJvcnQ9ci5kaXJlY3Rpb24udmVydGljYWw/aT5vOmk8byxyLm1vdmUodCkpfWVsc2V7cyYmdC5zdG9wUHJvcGFnYXRpb24oKSxuJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIGE9cHJvY2Vzc0NoYW5nZXModCxyLCExKTtzaG91bGRUcmlnZ2VyKHIsYSkmJihyLmhhbmRsZXIoYSksci5ldmVudC5sYXN0WD1hLnBvc2l0aW9uLmxlZnQsci5ldmVudC5sYXN0WT1hLnBvc2l0aW9uLnRvcCxyLmV2ZW50LmlzRmlyc3Q9ITEpfX0sZW5kOmZ1bmN0aW9uKGUpe3QuY2xhc3NMaXN0LnJlbW92ZShcInEtdG91Y2hcIiksci5ldmVudC5hYm9ydHx8IXIuZXZlbnQuZGV0ZWN0ZWR8fHIuZXZlbnQuaXNGaXJzdHx8KHMmJmUuc3RvcFByb3BhZ2F0aW9uKCksbiYmZS5wcmV2ZW50RGVmYXVsdCgpLHIuaGFuZGxlcihwcm9jZXNzQ2hhbmdlcyhlLHIsITApKSl9fTt0Ll9fcXRvdWNocGFuJiYodC5fX3F0b3VjaHBhbl9vbGQ9dC5fX3F0b3VjaHBhbiksdC5fX3F0b3VjaHBhbj1yLGkmJnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHIubW91c2VTdGFydCxvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsci5zdGFydCxvKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixyLm1vdmUsbyksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixyLmVuZCxvKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS5vbGRWYWx1ZSxzPWUudmFsdWUsbj1lLm1vZGlmaWVycyxvPXQuX19xdG91Y2hwYW47aSE9PXMmJihvLmhhbmRsZXI9cyksbi5ob3Jpem9udGFsPT09by5kaXJlY3Rpb24uaG9yaXpvbnRhbCYmbi52ZXJ0aWNhbD09PW8uZGlyZWN0aW9uLnZlcnRpY2FsfHwoby5kaXJlY3Rpb249Z2V0RGlyZWN0aW9uKG4pKX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fX3F0b3VjaHBhbl9vbGR8fHQuX19xdG91Y2hwYW47aWYodm9pZCAwIT09aSl7dmFyIHM9ZS5tb2RpZmllcnMucHJldmVudD9udWxsOmxpc3Rlbk9wdHMucGFzc2l2ZTt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixpLm1vdXNlU3RhcnQscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLGkuc3RhcnQscyksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsaS5tb3ZlLHMpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaS5lbmQscyksZGVsZXRlIHRbdC5fX3F0b3VjaHBhbl9vbGQ/XCJfX3F0b3VjaHBhbl9vbGRcIjpcIl9fcXRvdWNocGFuXCJdfX19O2Z1bmN0aW9uIGlzRGF0ZSh0KXtyZXR1cm5cIltvYmplY3QgRGF0ZV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBpc051bWJlcih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmaXNGaW5pdGUodCl9ZnVuY3Rpb24gaXNTdHJpbmcodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR9dmFyIGxpbmVhcj1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZWFzZUluUXVhZD1mdW5jdGlvbih0KXtyZXR1cm4gdCp0fSxlYXNlT3V0UXVhZD1mdW5jdGlvbih0KXtyZXR1cm4gdCooMi10KX0sZWFzZUluT3V0UXVhZD1mdW5jdGlvbih0KXtyZXR1cm4gdDwuNT8yKnQqdDooNC0yKnQpKnQtMX0sZWFzZUluQ3ViaWM9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsMyl9LGVhc2VPdXRDdWJpYz1mdW5jdGlvbih0KXtyZXR1cm4gMStNYXRoLnBvdyh0LTEsMyl9LGVhc2VJbk91dEN1YmljPWZ1bmN0aW9uKHQpe3JldHVybiB0PC41PzQqTWF0aC5wb3codCwzKToxKyh0LTEpKk1hdGgucG93KDIqdC0yLDIpfSxlYXNlSW5RdWFydD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3codCw0KX0sZWFzZU91dFF1YXJ0PWZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGgucG93KHQtMSw0KX0sZWFzZUluT3V0UXVhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/OCpNYXRoLnBvdyh0LDQpOjEtOCpNYXRoLnBvdyh0LTEsNCl9LGVhc2VJblF1aW50PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LDUpfSxlYXNlT3V0UXVpbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDErTWF0aC5wb3codC0xLDUpfSxlYXNlSW5PdXRRdWludD1mdW5jdGlvbih0KXtyZXR1cm4gdDwuNT8xNipNYXRoLnBvdyh0LDUpOjErMTYqTWF0aC5wb3codC0xLDUpfSxlYXNlSW5DaXJjPWZ1bmN0aW9uKHQpe3JldHVybi0xKk1hdGguc3FydCgxLU1hdGgucG93KHQsMikpKzF9LGVhc2VPdXRDaXJjPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoLTEqKHQtMikqdCl9LGVhc2VJbk91dENpcmM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/LjUqKDEtTWF0aC5zcXJ0KDEtNCp0KnQpKTouNSooMStNYXRoLnNxcnQoOCp0LTMtNCp0KnQpKX0sb3ZlcnNob290PWZ1bmN0aW9uKHQpe3JldHVybi0xKk1hdGgucG93KE1hdGguRSwtNi4zKnQpKk1hdGguY29zKDUqdCkrMX0sc3RhbmRhcmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjQwMzE/MTIqTWF0aC5wb3codCw0KToxLzEyOTAqKDExKk1hdGguc3FydCgtNGU0KnQqdCs4ZTQqdC0yMzM1OSktMTI5KX0sZGVjZWxlcmF0ZT1lYXNlT3V0Q3ViaWMsYWNjZWxlcmF0ZT1lYXNlSW5DdWJpYyxzaGFycD1lYXNlSW5PdXRRdWFkLGVhc2luZz17bGluZWFyOmxpbmVhcixlYXNlSW5RdWFkOmVhc2VJblF1YWQsZWFzZU91dFF1YWQ6ZWFzZU91dFF1YWQsZWFzZUluT3V0UXVhZDplYXNlSW5PdXRRdWFkLGVhc2VJbkN1YmljOmVhc2VJbkN1YmljLGVhc2VPdXRDdWJpYzplYXNlT3V0Q3ViaWMsZWFzZUluT3V0Q3ViaWM6ZWFzZUluT3V0Q3ViaWMsZWFzZUluUXVhcnQ6ZWFzZUluUXVhcnQsZWFzZU91dFF1YXJ0OmVhc2VPdXRRdWFydCxlYXNlSW5PdXRRdWFydDplYXNlSW5PdXRRdWFydCxlYXNlSW5RdWludDplYXNlSW5RdWludCxlYXNlT3V0UXVpbnQ6ZWFzZU91dFF1aW50LGVhc2VJbk91dFF1aW50OmVhc2VJbk91dFF1aW50LGVhc2VJbkNpcmM6ZWFzZUluQ2lyYyxlYXNlT3V0Q2lyYzplYXNlT3V0Q2lyYyxlYXNlSW5PdXRDaXJjOmVhc2VJbk91dENpcmMsb3ZlcnNob290Om92ZXJzaG9vdCxzdGFuZGFyZDpzdGFuZGFyZCxkZWNlbGVyYXRlOmRlY2VsZXJhdGUsYWNjZWxlcmF0ZTphY2NlbGVyYXRlLHNoYXJwOnNoYXJwfSxpZHM9e307ZnVuY3Rpb24gc3RhcnQodCl7dmFyIGU9dC5uYW1lLGk9dC5kdXJhdGlvbjt2b2lkIDA9PT1pJiYoaT0zMDApO3ZhciBzPXQudG8sbj10LmZyb20sbz10LmFwcGx5LHI9dC5kb25lLGE9dC5jYW5jZWwsbD10LmVhc2luZyxjPWUsaD1uZXcgRGF0ZTtjP3N0b3AoYyk6Yz11aWQoKTt2YXIgdT1sfHxsaW5lYXIsZD1mdW5jdGlvbigpe3ZhciB0PShuZXcgRGF0ZS1oKS9pO3Q+MSYmKHQ9MSk7dmFyIGU9bisocy1uKSp1KHQpO2lmKG8oZSx0KSwxPT09dClyZXR1cm4gZGVsZXRlIGlkc1tjXSx2b2lkKHImJnIoZSkpO3AubGFzdD17cG9zOmUscHJvZ3Jlc3M6dH0scC50aW1lcj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9LHA9aWRzW2NdPXtjYW5jZWw6YSx0aW1lcjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZCl9O3JldHVybiBjfWZ1bmN0aW9uIHN0b3AodCl7aWYodCl7dmFyIGU9aWRzW3RdO2UmJmUudGltZXImJihjYW5jZWxBbmltYXRpb25GcmFtZShlLnRpbWVyKSxlLmNhbmNlbCYmZS5jYW5jZWwoZS5sYXN0KSxkZWxldGUgaWRzW3RdKX19dmFyIGFuaW1hdGU9e3N0YXJ0OnN0YXJ0LHN0b3A6c3RvcH0sRnVsbHNjcmVlbk1peGluPXtkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luRnVsbHNjcmVlbjohMX19LHdhdGNoOnskcm91dGU6ZnVuY3Rpb24oKXt0aGlzLmV4aXRGdWxsc2NyZWVuKCl9LGluRnVsbHNjcmVlbjpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwiZnVsbHNjcmVlblwiLHQpfX0sbWV0aG9kczp7dG9nZ2xlRnVsbHNjcmVlbjpmdW5jdGlvbigpe3RoaXMuaW5GdWxsc2NyZWVuP3RoaXMuZXhpdEZ1bGxzY3JlZW4oKTp0aGlzLnNldEZ1bGxzY3JlZW4oKX0sc2V0RnVsbHNjcmVlbjpmdW5jdGlvbigpe3RoaXMuaW5GdWxsc2NyZWVufHwodGhpcy5pbkZ1bGxzY3JlZW49ITAsdGhpcy5jb250YWluZXI9dGhpcy4kZWwucGFyZW50Tm9kZSx0aGlzLmNvbnRhaW5lci5yZXBsYWNlQ2hpbGQodGhpcy5mdWxsc2NyZWVuRmlsbGVyTm9kZSx0aGlzLiRlbCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwicS1ib2R5LWZ1bGxzY3JlZW4tbWl4aW5cIiksdGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuPXtoYW5kbGVyOnRoaXMuZXhpdEZ1bGxzY3JlZW59LEhpc3RvcnkuYWRkKHRoaXMuX19oaXN0b3J5RnVsbHNjcmVlbikpfSxleGl0RnVsbHNjcmVlbjpmdW5jdGlvbigpe3RoaXMuaW5GdWxsc2NyZWVuJiYodGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuJiYoSGlzdG9yeS5yZW1vdmUodGhpcy5fX2hpc3RvcnlGdWxsc2NyZWVuKSx0aGlzLl9faGlzdG9yeUZ1bGxzY3JlZW49bnVsbCksdGhpcy5jb250YWluZXIucmVwbGFjZUNoaWxkKHRoaXMuJGVsLHRoaXMuZnVsbHNjcmVlbkZpbGxlck5vZGUpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcInEtYm9keS1mdWxsc2NyZWVuLW1peGluXCIpLHRoaXMuaW5GdWxsc2NyZWVuPSExKX19LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dGhpcy5mdWxsc2NyZWVuRmlsbGVyTm9kZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZXhpdEZ1bGxzY3JlZW4oKX19LFFDYXJvdXNlbD17bmFtZTpcIlFDYXJvdXNlbFwiLG1peGluczpbRnVsbHNjcmVlbk1peGluXSxkaXJlY3RpdmVzOntUb3VjaFBhbjpUb3VjaFBhbn0scHJvcHM6e3ZhbHVlOk51bWJlcixjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0saGVpZ2h0OlN0cmluZyxhcnJvd3M6Qm9vbGVhbixpbmZpbml0ZTpCb29sZWFuLGFuaW1hdGlvbjp7dHlwZTpbTnVtYmVyLEJvb2xlYW5dLGRlZmF1bHQ6ITB9LGVhc2luZzpGdW5jdGlvbixzd2lwZUVhc2luZzpGdW5jdGlvbixub1N3aXBlOkJvb2xlYW4sYXV0b3BsYXk6W051bWJlcixCb29sZWFuXSxoYW5kbGVBcnJvd0tleXM6Qm9vbGVhbixxdWlja05hdjpCb29sZWFuLHF1aWNrTmF2UG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJib3R0b21cIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1widG9wXCIsXCJib3R0b21cIl0uaW5jbHVkZXModCl9fSxxdWlja05hdkljb246U3RyaW5nLHRodW1ibmFpbHM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX0sdGh1bWJuYWlsc0ljb246U3RyaW5nLHRodW1ibmFpbHNIb3Jpem9udGFsOkJvb2xlYW59LHByb3ZpZGU6ZnVuY3Rpb24oKXtyZXR1cm57Y2Fyb3VzZWw6dGhpc319LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cG9zaXRpb246MCxzbGlkZTowLHBvc2l0aW9uU2xpZGU6MCxzbGlkZXNOdW1iZXI6MCxhbmltVWlkOiExLHZpZXdUaHVtYm5haWxzOiExfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3QhPT10aGlzLnNsaWRlJiZ0aGlzLmdvVG9TbGlkZSh0KX0sYXV0b3BsYXk6ZnVuY3Rpb24oKXt0aGlzLl9fcGxhbkF1dG9QbGF5KCl9LGluZmluaXRlOmZ1bmN0aW9uKCl7dGhpcy5fX3BsYW5BdXRvUGxheSgpfSxoYW5kbGVBcnJvd0tleXM6ZnVuY3Rpb24odCl7dGhpcy5fX3NldEFycm93S2V5cyh0KX19LGNvbXB1dGVkOntydGxEaXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD8tMToxfSxhcnJvd0ljb246ZnVuY3Rpb24oKXt2YXIgdD1bdGhpcy4kcS5pY29uLmNhcm91c2VsLmxlZnQsdGhpcy4kcS5pY29uLmNhcm91c2VsLnJpZ2h0XTtyZXR1cm4gdGhpcy4kcS5pMThuLnJ0bD90LnJldmVyc2UoKTp0fSx0cmFja1Bvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJue3RyYW5zZm9ybTpcInRyYW5zbGF0ZVgoXCIrdGhpcy5ydGxEaXIqdGhpcy5wb3NpdGlvbitcIiUpXCJ9fSxpbmZpbml0ZUxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZpbml0ZSYmdGhpcy5zbGlkZXNOdW1iZXI+MSYmdGhpcy5wb3NpdGlvblNsaWRlPDB9LGluZmluaXRlUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZpbml0ZSYmdGhpcy5zbGlkZXNOdW1iZXI+MSYmdGhpcy5wb3NpdGlvblNsaWRlPj10aGlzLnNsaWRlc051bWJlcn0sY2FuR29Ub1ByZXZpb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGU/dGhpcy5zbGlkZXNOdW1iZXI+MTp0aGlzLnNsaWRlPjB9LGNhbkdvVG9OZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5maW5pdGU/dGhpcy5zbGlkZXNOdW1iZXI+MTp0aGlzLnNsaWRlPHRoaXMuc2xpZGVzTnVtYmVyLTF9LGNvbXB1dGVkUXVpY2tOYXZJY29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVpY2tOYXZJY29ufHx0aGlzLiRxLmljb24uY2Fyb3VzZWwucXVpY2tOYXZ9LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtpZighdGhpcy5pbkZ1bGxzY3JlZW4mJnRoaXMuaGVpZ2h0KXJldHVyblwiaGVpZ2h0OiBcIit0aGlzLmhlaWdodH0sc2xvdFNjb3BlOmZ1bmN0aW9uKCl7cmV0dXJue3NsaWRlOnRoaXMuc2xpZGUsc2xpZGVzTnVtYmVyOnRoaXMuc2xpZGVzTnVtYmVyLHBlcmNlbnRhZ2U6dGhpcy5zbGlkZXNOdW1iZXI8Mj8xMDA6MTAwKnRoaXMuc2xpZGUvKHRoaXMuc2xpZGVzTnVtYmVyLTEpLGdvVG9TbGlkZTp0aGlzLmdvVG9TbGlkZSxwcmV2aW91czp0aGlzLnByZXZpb3VzLG5leHQ6dGhpcy5uZXh0LGNvbG9yOnRoaXMuY29sb3IsaW5GdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVuLHRvZ2dsZUZ1bGxzY3JlZW46dGhpcy50b2dnbGVGdWxsc2NyZWVuLGNhbkdvVG9OZXh0OnRoaXMuY2FuR29Ub05leHQsY2FuR29Ub1ByZXZpb3VzOnRoaXMuY2FuR29Ub1ByZXZpb3VzfX0sY29tcHV0ZWRUaHVtYm5haWxJY29uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGh1bWJuYWlsc0ljb258fHRoaXMuJHEuaWNvbi5jYXJvdXNlbC50aHVtYm5haWxzfX0sbWV0aG9kczp7cHJldmlvdXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5Hb1RvUHJldmlvdXM/dGhpcy5nb1RvU2xpZGUodGhpcy5zbGlkZS0xKTpQcm9taXNlLnJlc29sdmUoKX0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbkdvVG9OZXh0P3RoaXMuZ29Ub1NsaWRlKHRoaXMuc2xpZGUrMSk6UHJvbWlzZS5yZXNvbHZlKCl9LGdvVG9TbGlkZTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7cmV0dXJuIHZvaWQgMD09PWUmJihlPSExKSxuZXcgUHJvbWlzZShmdW5jdGlvbihzKXt2YXIgbixvPVwiXCIscj1pLnNsaWRlO2kuX19jbGVhbnVwKCk7dmFyIGE9ZnVuY3Rpb24oKXtpLiRlbWl0KFwiaW5wdXRcIixpLnNsaWRlKSxpLiRlbWl0KFwic2xpZGVcIixpLnNsaWRlLG8pLGkuJGVtaXQoXCJzbGlkZS1kaXJlY3Rpb25cIixvKSxpLl9fcGxhbkF1dG9QbGF5KCkscygpfTtpZihpLnNsaWRlc051bWJlcjwyPyhpLnNsaWRlPTAsaS5wb3NpdGlvblNsaWRlPTAsbj0wKTooaS5oYXNPd25Qcm9wZXJ0eShcImluaXRpYWxQb3NpdGlvblwiKXx8KGkucG9zaXRpb249MTAwKi1pLnNsaWRlKSxvPXQ+aS5zbGlkZT9cIm5leHRcIjpcInByZXZpb3VzXCIsaS5pbmZpbml0ZT8oaS5zbGlkZT1ub3JtYWxpemVUb0ludGVydmFsKHQsMCxpLnNsaWRlc051bWJlci0xKSxuPW5vcm1hbGl6ZVRvSW50ZXJ2YWwodCwtMSxpLnNsaWRlc051bWJlciksZXx8KGkucG9zaXRpb25TbGlkZT1uKSk6KGkuc2xpZGU9YmV0d2Vlbih0LDAsaS5zbGlkZXNOdW1iZXItMSksaS5wb3NpdGlvblNsaWRlPWkuc2xpZGUsbj1pLnNsaWRlKSksaS4kZW1pdChcInNsaWRlLXRyaWdnZXJcIixyLGkuc2xpZGUsbyksbio9LTEwMCwhaS5hbmltYXRpb24pcmV0dXJuIGkucG9zaXRpb249bix2b2lkIGEoKTtpLmFuaW1hdGlvbkluUHJvZ3Jlc3M9ITAsaS5hbmltVWlkPXN0YXJ0KHtmcm9tOmkucG9zaXRpb24sdG86bixkdXJhdGlvbjppc051bWJlcihpLmFuaW1hdGlvbik/aS5hbmltYXRpb246MzAwLGVhc2luZzplP2kuc3dpcGVFYXNpbmd8fGRlY2VsZXJhdGU6aS5lYXNpbmd8fHN0YW5kYXJkLGFwcGx5OmZ1bmN0aW9uKHQpe2kucG9zaXRpb249dH0sZG9uZTpmdW5jdGlvbigpe2kuaW5maW5pdGUmJihpLnBvc2l0aW9uPTEwMCotaS5zbGlkZSxpLnBvc2l0aW9uU2xpZGU9aS5zbGlkZSksaS5hbmltYXRpb25JblByb2dyZXNzPSExLGEoKX19KX0pfSxzdG9wQW5pbWF0aW9uOmZ1bmN0aW9uKCl7c3RvcCh0aGlzLmFuaW1VaWQpLHRoaXMuYW5pbWF0aW9uSW5Qcm9ncmVzcz0hMX0sX19wYW46ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5pbmZpbml0ZXx8IXRoaXMuYW5pbWF0aW9uSW5Qcm9ncmVzcyl7dC5pc0ZpcnN0JiYodGhpcy5pbml0aWFsUG9zaXRpb249dGhpcy5wb3NpdGlvbix0aGlzLl9fY2xlYW51cCgpKTt2YXIgaT10aGlzLnJ0bERpciooXCJsZWZ0XCI9PT10LmRpcmVjdGlvbj8tMToxKSp0LmRpc3RhbmNlLng7KHRoaXMuaW5maW5pdGUmJnRoaXMuc2xpZGVzTnVtYmVyPDJ8fCF0aGlzLmluZmluaXRlJiYoMD09PXRoaXMuc2xpZGUmJmk+MHx8dGhpcy5zbGlkZT09PXRoaXMuc2xpZGVzTnVtYmVyLTEmJmk8MCkpJiYoaT0wKTt2YXIgcz10aGlzLmluaXRpYWxQb3NpdGlvbitpL3RoaXMuJHJlZnMudHJhY2sub2Zmc2V0V2lkdGgqMTAwLG49dGhpcy5zbGlkZSt0aGlzLnJ0bERpciooXCJsZWZ0XCI9PT10LmRpcmVjdGlvbj8xOi0xKTt0aGlzLnBvc2l0aW9uIT09cyYmKHRoaXMucG9zaXRpb249cyksdGhpcy5wb3NpdGlvblNsaWRlIT09biYmKHRoaXMucG9zaXRpb25TbGlkZT1uKSx0LmlzRmluYWwmJnRoaXMuZ29Ub1NsaWRlKHQuZGlzdGFuY2UueDw0MD90aGlzLnNsaWRlOnRoaXMucG9zaXRpb25TbGlkZSwhMCkudGhlbihmdW5jdGlvbigpe2RlbGV0ZSBlLmluaXRpYWxQb3NpdGlvbn0pfX0sX19wbGFuQXV0b1BsYXk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hdXRvcGxheSYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPXNldFRpbWVvdXQodC5uZXh0LGlzTnVtYmVyKHQuYXV0b3BsYXkpP3QuYXV0b3BsYXk6NWUzKSl9KX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5zdG9wQW5pbWF0aW9uKCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpfSxfX2hhbmRsZUFycm93S2V5OmZ1bmN0aW9uKHQpe3ZhciBlPWdldEV2ZW50S2V5KHQpOzM3PT09ZT90aGlzLnByZXZpb3VzKCk6Mzk9PT1lJiZ0aGlzLm5leHQoKX0sX19zZXRBcnJvd0tleXM6ZnVuY3Rpb24odCl7ZG9jdW1lbnRbKCEwPT09dD9cImFkZFwiOlwicmVtb3ZlXCIpK1wiRXZlbnRMaXN0ZW5lclwiXShcImtleWRvd25cIix0aGlzLl9faGFuZGxlQXJyb3dLZXkpfSxfX3JlZ2lzdGVyU2xpZGU6ZnVuY3Rpb24oKXt0aGlzLnNsaWRlc051bWJlcisrfSxfX3VucmVnaXN0ZXJTbGlkZTpmdW5jdGlvbigpe3RoaXMuc2xpZGVzTnVtYmVyLS19LF9fZ2V0U2NvcGVkU2xvdHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigwIT09dGhpcy5zbGlkZXNOdW1iZXIpe3ZhciBpPXRoaXMuJHNjb3BlZFNsb3RzO3JldHVybiBpP09iamVjdC5rZXlzKGkpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zdGFydHNXaXRoKFwiY29udHJvbC1cIil9KS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGlbdF0oZS5zbG90U2NvcGUpfSk6dm9pZCAwfX0sX19nZXRRdWlja05hdjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKDAhPT10aGlzLnNsaWRlc051bWJlciYmdGhpcy5xdWlja05hdil7dmFyIGk9dGhpcy4kc2NvcGVkU2xvdHNbXCJxdWljay1uYXZcIl0scz1bXTtpZihpKWZvcih2YXIgbj1mdW5jdGlvbih0KXtzLnB1c2goaSh7c2xpZGU6dCxiZWZvcmU6dDxlLnNsaWRlLGN1cnJlbnQ6dD09PWUuc2xpZGUsYWZ0ZXI6dD5lLnNsaWRlLGNvbG9yOmUuY29sb3IsZ29Ub1NsaWRlOmZ1bmN0aW9uKGkpe2UuZ29Ub1NsaWRlKGl8fHQpfX0pKX0sbz0wO288dGhpcy5zbGlkZXNOdW1iZXI7bysrKW4obyk7ZWxzZSBmb3IodmFyIHI9ZnVuY3Rpb24oaSl7cy5wdXNoKHQoUUJ0bix7a2V5OmksY2xhc3M6e2luYWN0aXZlOmkhPT1lLnNsaWRlfSxwcm9wczp7aWNvbjplLmNvbXB1dGVkUXVpY2tOYXZJY29uLHJvdW5kOiEwLGZsYXQ6ITAsZGVuc2U6ITAsY29sb3I6ZS5jb2xvcn0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5nb1RvU2xpZGUoaSl9fX0pKX0sYT0wO2E8dGhpcy5zbGlkZXNOdW1iZXI7YSsrKXIoYSk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXF1aWNrLW5hdiBzY3JvbGwgdGV4dC1jZW50ZXJcIixjbGFzczpbXCJ0ZXh0LVwiK3RoaXMuY29sb3IsXCJhYnNvbHV0ZS1cIit0aGlzLnF1aWNrTmF2UG9zaXRpb25dfSxzKX19LF9fZ2V0VGh1bWJuYWlsczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy50aHVtYm5haWxzLm1hcChmdW5jdGlvbihpLHMpe2lmKGkpcmV0dXJuIHQoXCJkaXZcIix7b246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5nb1RvU2xpZGUocyl9fX0sW3QoXCJpbWdcIix7YXR0cnM6e3NyYzppfSxjbGFzczp7YWN0aXZlOmUuc2xpZGU9PT1zfX0pXSl9KSxzPVt0KFFCdG4se3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC10aHVtYm5haWwtYnRuIGFic29sdXRlXCIscHJvcHM6e2ljb246dGhpcy5jb21wdXRlZFRodW1ibmFpbEljb24sZmFiTWluaTohMCxmbGF0OiEwLGNvbG9yOnRoaXMuY29sb3J9LG9uOntjbGljazpmdW5jdGlvbigpe2Uudmlld1RodW1ibmFpbHM9IWUudmlld1RodW1ibmFpbHN9fX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXRodW1ibmFpbHMgc2Nyb2xsIGFic29sdXRlLWJvdHRvbVwiLGNsYXNzOnthY3RpdmU6dGhpcy52aWV3VGh1bWJuYWlsc319LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGd1dHRlci14c1wiLGNsYXNzOnRoaXMudGh1bWJuYWlsc0hvcml6b250YWw/XCJuby13cmFwXCI6XCJqdXN0aWZ5LWNlbnRlclwifSxpKV0pXTtyZXR1cm4gdGhpcy52aWV3VGh1bWJuYWlscyYmcy51bnNoaWZ0KHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZS1mdWxsXCIsb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3VGh1bWJuYWlscz0hMX19fSkpLHN9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsXCIsc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlLGNsYXNzOntmdWxsc2NyZWVuOnRoaXMuaW5GdWxsc2NyZWVufX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLWlubmVyXCIsZGlyZWN0aXZlczp0aGlzLm5vU3dpcGU/bnVsbDpbe25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e2hvcml6b250YWw6ITAscHJldmVudDohMCxzdG9wOiEwfSx2YWx1ZTp0aGlzLl9fcGFufV19LFt0KFwiZGl2XCIse3JlZjpcInRyYWNrXCIsc3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXRyYWNrXCIsc3R5bGU6dGhpcy50cmFja1Bvc2l0aW9uLGNsYXNzOntcImluZmluaXRlLWxlZnRcIjp0aGlzLmluZmluaXRlTGVmdCxcImluZmluaXRlLXJpZ2h0XCI6dGhpcy5pbmZpbml0ZVJpZ2h0fX0sW3RoaXMuaW5maW5pdGVSaWdodD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1zbGlkZVwiLHN0eWxlOlwiZmxleDogMCAwIDEwMCVcIn0pOm51bGwsdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLmluZmluaXRlTGVmdD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jYXJvdXNlbC1zbGlkZVwiLHN0eWxlOlwiZmxleDogMCAwIDEwMCVcIn0pOm51bGxdKV0pLHRoaXMuYXJyb3dzP3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLWxlZnQtYXJyb3cgYWJzb2x1dGVcIixwcm9wczp7Y29sb3I6dGhpcy5jb2xvcixpY29uOnRoaXMuYXJyb3dJY29uWzBdLGZhYk1pbmk6ITAsZmxhdDohMH0sZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6dGhpcy5jYW5Hb1RvUHJldmlvdXN9XSxvbjp7Y2xpY2s6dGhpcy5wcmV2aW91c319KTpudWxsLHRoaXMuYXJyb3dzP3QoUUJ0bix7c3RhdGljQ2xhc3M6XCJxLWNhcm91c2VsLXJpZ2h0LWFycm93IGFic29sdXRlXCIscHJvcHM6e2NvbG9yOnRoaXMuY29sb3IsaWNvbjp0aGlzLmFycm93SWNvblsxXSxmYWJNaW5pOiEwLGZsYXQ6ITB9LGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuY2FuR29Ub05leHR9XSxvbjp7Y2xpY2s6dGhpcy5uZXh0fX0pOm51bGwsdGhpcy5fX2dldFF1aWNrTmF2KHQpLHRoaXMuX19nZXRTY29wZWRTbG90cyh0KSx0aGlzLnRodW1ibmFpbHMubGVuZ3RoP3RoaXMuX19nZXRUaHVtYm5haWxzKHQpOm51bGwsdGhpcy4kc2xvdHMuY29udHJvbF0pfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9fcGxhbkF1dG9QbGF5KCksdGhpcy5oYW5kbGVBcnJvd0tleXMmJnRoaXMuX19zZXRBcnJvd0tleXMoITApLHRoaXMuX19zdG9wU2xpZGVOdW1iZXJOb3RpZmllcj10aGlzLiR3YXRjaChcInNsaWRlc051bWJlclwiLGZ1bmN0aW9uKGUpe3QudmFsdWU+PWUmJnQuJGVtaXQoXCJpbnB1dFwiLGUtMSl9LHtpbW1lZGlhdGU6ITB9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX19jbGVhbnVwKCksdGhpcy5fX3N0b3BTbGlkZU51bWJlck5vdGlmaWVyKCksdGhpcy5oYW5kbGVBcnJvd0tleXMmJnRoaXMuX19zZXRBcnJvd0tleXMoITEpfX0sUUNhcm91c2VsU2xpZGU9e25hbWU6XCJRQ2Fyb3VzZWxTbGlkZVwiLGluamVjdDp7Y2Fyb3VzZWw6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUNhcm91c2VsU2xpZGUgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUNhcm91c2VsXCIpfX19LHByb3BzOntpbWdTcmM6U3RyaW5nfSxjb21wdXRlZDp7Y29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmltZ1NyYyYmKHQuYmFja2dyb3VuZEltYWdlPVwidXJsKFwiK3RoaXMuaW1nU3JjK1wiKVwiLHQuYmFja2dyb3VuZFNpemU9XCJjb3ZlclwiLHQuYmFja2dyb3VuZFBvc2l0aW9uPVwiNTAlXCIpLCF0aGlzLmNhcm91c2VsLmluRnVsbHNjcmVlbiYmdGhpcy5jYXJvdXNlbC5oZWlnaHQmJih0Lm1heEhlaWdodD10aGlzLmNhcm91c2VsLmhlaWdodCksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtc2xpZGUgcmVsYXRpdmUtcG9zaXRpb24gc2Nyb2xsXCIsc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSx0aGlzLiRzbG90cy5kZWZhdWx0KX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuY2Fyb3VzZWwuX19yZWdpc3RlclNsaWRlKCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmNhcm91c2VsLl9fdW5yZWdpc3RlclNsaWRlKCl9fSxRQ2Fyb3VzZWxDb250cm9sPXtuYW1lOlwiUUNhcm91c2VsQ29udHJvbFwiLHByb3BzOntwb3NpdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImJvdHRvbS1yaWdodFwifSxvZmZzZXQ6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblsxOCwxOF19fX0sY29tcHV0ZWQ6e2NvbXB1dGVkQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cImFic29sdXRlLVwiK3RoaXMucG9zaXRpb259LGNvbXB1dGVkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57bWFyZ2luOnRoaXMub2Zmc2V0WzFdK1wicHggXCIrdGhpcy5vZmZzZXRbMF0rXCJweFwifX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2Fyb3VzZWwtY29udHJvbCBhYnNvbHV0ZVwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3N9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUUNoYXRNZXNzYWdlPXtuYW1lOlwiUUNoYXRNZXNzYWdlXCIscHJvcHM6e3NlbnQ6Qm9vbGVhbixsYWJlbDpTdHJpbmcsYmdDb2xvcjpTdHJpbmcsdGV4dENvbG9yOlN0cmluZyxuYW1lOlN0cmluZyxhdmF0YXI6U3RyaW5nLHRleHQ6QXJyYXksc3RhbXA6U3RyaW5nLHNpemU6U3RyaW5nfSxjb21wdXRlZDp7dGV4dENsYXNzOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXh0Q29sb3IpcmV0dXJuXCJ0ZXh0LVwiK3RoaXMudGV4dENvbG9yfSxtZXNzYWdlQ2xhc3M6ZnVuY3Rpb24oKXtpZih0aGlzLmJnQ29sb3IpcmV0dXJuXCJ0ZXh0LVwiK3RoaXMuYmdDb2xvcn0sc2l6ZUNsYXNzOmZ1bmN0aW9uKCl7aWYodGhpcy5zaXplKXJldHVyblwiY29sLVwiK3RoaXMuc2l6ZX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcInEtbWVzc2FnZS1zZW50XCI6dGhpcy5zZW50LFwicS1tZXNzYWdlLXJlY2VpdmVkXCI6IXRoaXMuc2VudH19fSxtZXRob2RzOntfX2dldFRleHQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy50ZXh0Lm1hcChmdW5jdGlvbihpLHMpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXRleHRcIixjbGFzczplLm1lc3NhZ2VDbGFzc30sW3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXRleHQtY29udGVudFwiLGNsYXNzOmUudGV4dENsYXNzfSxbdChcImRpdlwiLHtkb21Qcm9wczp7aW5uZXJIVE1MOml9fSksZS5zdGFtcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXN0YW1wXCIsZG9tUHJvcHM6e2lubmVySFRNTDplLnN0YW1wfX0pOm51bGxdKV0pfSl9LF9fZ2V0TWVzc2FnZTpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0XCIsY2xhc3M6dGhpcy5tZXNzYWdlQ2xhc3N9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS10ZXh0LWNvbnRlbnRcIixjbGFzczp0aGlzLnRleHRDbGFzc30sW3RoaXMuJHNsb3RzLmRlZmF1bHQsdGhpcy5zdGFtcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLXN0YW1wXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLnN0YW1wfX0pOm51bGxdKV0pfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSxbdGhpcy5sYWJlbD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLWxhYmVsIHRleHQtY2VudGVyXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbWVzc2FnZS1jb250YWluZXIgcm93IGl0ZW1zLWVuZCBuby13cmFwXCJ9LFt0aGlzLiRzbG90cy5hdmF0YXJ8fCh0aGlzLmF2YXRhcj90KFwiaW1nXCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLWF2YXRhciBjb2wtYXV0b1wiLGF0dHJzOntzcmM6dGhpcy5hdmF0YXJ9fSk6bnVsbCksdChcImRpdlwiLHtjbGFzczp0aGlzLnNpemVDbGFzc30sW3RoaXMubmFtZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1tZXNzYWdlLW5hbWVcIixkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMubmFtZX19KTpudWxsLHRoaXMudGV4dD90aGlzLl9fZ2V0VGV4dCh0KTpudWxsLHRoaXMuJHNsb3RzLmRlZmF1bHQ/dGhpcy5fX2dldE1lc3NhZ2UodCk6bnVsbF0pXSldKX19O2Z1bmN0aW9uIGdldERpcmVjdGlvbiQxKHQpe3ZhciBlPXt9O3JldHVybltcImxlZnRcIixcInJpZ2h0XCIsXCJ1cFwiLFwiZG93blwiLFwiaG9yaXpvbnRhbFwiLFwidmVydGljYWxcIl0uZm9yRWFjaChmdW5jdGlvbihpKXt0W2ldJiYoZVtpXT0hMCl9KSwwPT09T2JqZWN0LmtleXMoZSkubGVuZ3RoP3tsZWZ0OiEwLHJpZ2h0OiEwLHVwOiEwLGRvd246ITAsaG9yaXpvbnRhbDohMCx2ZXJ0aWNhbDohMH06KGUuaG9yaXpvbnRhbCYmKGUubGVmdD1lLnJpZ2h0PSEwKSxlLnZlcnRpY2FsJiYoZS51cD1lLmRvd249ITApLGUubGVmdCYmZS5yaWdodCYmKGUuaG9yaXpvbnRhbD0hMCksZS51cCYmZS5kb3duJiYoZS52ZXJ0aWNhbD0hMCksZSl9dmFyIFRvdWNoU3dpcGU9e25hbWU6XCJ0b3VjaC1zd2lwZVwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT0hZS5tb2RpZmllcnMubm9Nb3VzZSxzPXtoYW5kbGVyOmUudmFsdWUsdGhyZXNob2xkOnBhcnNlSW50KGUuYXJnLDEwKXx8MzAwLGRpcmVjdGlvbjpnZXREaXJlY3Rpb24kMShlLm1vZGlmaWVycyksbW91c2VTdGFydDpmdW5jdGlvbih0KXtsZWZ0Q2xpY2sodCkmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscy5tb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHMubW91c2VFbmQpLHMuc3RhcnQodCkpfSxtb3VzZUVuZDpmdW5jdGlvbih0KXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIscy5tb3ZlKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHMubW91c2VFbmQpLHMuZW5kKHQpfSxzdGFydDpmdW5jdGlvbihlKXt2YXIgaT1wb3NpdGlvbihlKTtzLmV2ZW50PXt4OmkubGVmdCx5OmkudG9wLHRpbWU6KG5ldyBEYXRlKS5nZXRUaW1lKCksZGV0ZWN0ZWQ6ITEsYWJvcnQ6ITF9LHQuY2xhc3NMaXN0LmFkZChcInEtdG91Y2hcIil9LG1vdmU6ZnVuY3Rpb24odCl7aWYoIXMuZXZlbnQuYWJvcnQpaWYoKG5ldyBEYXRlKS5nZXRUaW1lKCktcy5ldmVudC50aW1lPnMudGhyZXNob2xkKXMuZXZlbnQuYWJvcnQ9ITA7ZWxzZXtpZihzLmV2ZW50LmRldGVjdGVkKXJldHVybiB0LnN0b3BQcm9wYWdhdGlvbigpLHZvaWQgdC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBlPXBvc2l0aW9uKHQpLGk9ZS5sZWZ0LXMuZXZlbnQueCxuPU1hdGguYWJzKGkpLG89ZS50b3Atcy5ldmVudC55LHI9TWF0aC5hYnMobyk7biE9PXImJihzLmV2ZW50LmRldGVjdGVkPSEwLHMuZXZlbnQuYWJvcnQ9IShzLmRpcmVjdGlvbi52ZXJ0aWNhbCYmbjxyfHxzLmRpcmVjdGlvbi5ob3Jpem9udGFsJiZuPnJ8fHMuZGlyZWN0aW9uLnVwJiZuPHImJm88MHx8cy5kaXJlY3Rpb24uZG93biYmbjxyJiZvPjB8fHMuZGlyZWN0aW9uLmxlZnQmJm4+ciYmaTwwfHxzLmRpcmVjdGlvbi5yaWdodCYmbj5yJiZpPjApLHMubW92ZSh0KSl9fSxlbmQ6ZnVuY3Rpb24oZSl7aWYodC5jbGFzc0xpc3QucmVtb3ZlKFwicS10b3VjaFwiKSwhcy5ldmVudC5hYm9ydCYmcy5ldmVudC5kZXRlY3RlZCl7dmFyIGk9KG5ldyBEYXRlKS5nZXRUaW1lKCktcy5ldmVudC50aW1lO2lmKCEoaT5zLnRocmVzaG9sZCkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBuLG89cG9zaXRpb24oZSkscj1vLmxlZnQtcy5ldmVudC54LGE9TWF0aC5hYnMociksbD1vLnRvcC1zLmV2ZW50LnksYz1NYXRoLmFicyhsKTtpZihhPj1jKXtpZihhPDUwKXJldHVybjtuPXI8MD9cImxlZnRcIjpcInJpZ2h0XCJ9ZWxzZXtpZihjPDUwKXJldHVybjtuPWw8MD9cInVwXCI6XCJkb3duXCJ9cy5kaXJlY3Rpb25bbl0mJnMuaGFuZGxlcih7ZXZ0OmUsZGlyZWN0aW9uOm4sZHVyYXRpb246aSxkaXN0YW5jZTp7eDphLHk6Y319KX19fX07dC5fX3F0b3VjaHN3aXBlPXMsaSYmdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIscy5tb3VzZVN0YXJ0KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIscy5zdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIscy5tb3ZlKSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLHMuZW5kKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7ZS5vbGRWYWx1ZSE9PWUudmFsdWUmJih0Ll9fcXRvdWNoc3dpcGUuaGFuZGxlcj1lLnZhbHVlKX0sdW5iaW5kOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fX3F0b3VjaHN3aXBlO2kmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixpLm1vdXNlU3RhcnQpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIixpLnN0YXJ0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixpLm1vdmUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsaS5lbmQpLGRlbGV0ZSB0Ll9fcXRvdWNoc3dpcGUpfX0sQ2hlY2tib3hNaXhpbj17ZGlyZWN0aXZlczp7VG91Y2hTd2lwZTpUb3VjaFN3aXBlfSxwcm9wczp7dmFsOnt9LHRydWVWYWx1ZTp7ZGVmYXVsdDohMH0sZmFsc2VWYWx1ZTp7ZGVmYXVsdDohMX19LGNvbXB1dGVkOntpc1RydWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbElzQXJyYXk/dGhpcy5pbmRleD4tMTp0aGlzLnZhbHVlPT09dGhpcy50cnVlVmFsdWV9LGlzRmFsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbElzQXJyYXk/LTE9PT10aGlzLmluZGV4OnRoaXMudmFsdWU9PT10aGlzLmZhbHNlVmFsdWV9LGluZGV4OmZ1bmN0aW9uKCl7aWYodGhpcy5tb2RlbElzQXJyYXkpcmV0dXJuIHRoaXMudmFsdWUuaW5kZXhPZih0aGlzLnZhbCl9LG1vZGVsSXNBcnJheTpmdW5jdGlvbigpe3JldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpfX0sbWV0aG9kczp7dG9nZ2xlOmZ1bmN0aW9uKHQsZSl7dmFyIGk7KHZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHkpfHwodCYmc3RvcEFuZFByZXZlbnQodCksZSYmdGhpcy4kZWwuYmx1cigpLHRoaXMubW9kZWxJc0FycmF5P3RoaXMuaXNUcnVlPyhpPXRoaXMudmFsdWUuc2xpY2UoKSkuc3BsaWNlKHRoaXMuaW5kZXgsMSk6aT10aGlzLnZhbHVlLmNvbmNhdCh0aGlzLnZhbCk6aT10aGlzLmlzVHJ1ZT90aGlzLnRvZ2dsZUluZGV0ZXJtaW5hdGU/dGhpcy5pbmRldGVybWluYXRlVmFsdWU6dGhpcy5mYWxzZVZhbHVlOnRoaXMuaXNGYWxzZT90aGlzLnRydWVWYWx1ZTp0aGlzLmZhbHNlVmFsdWUsdGhpcy5fX3VwZGF0ZShpKSl9fX0sT3B0aW9uTWl4aW49e3Byb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LGxhYmVsOlN0cmluZyxsZWZ0TGFiZWw6Qm9vbGVhbixjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sa2VlcENvbG9yOkJvb2xlYW4sZGFyazpCb29sZWFuLGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLG5vRm9jdXM6Qm9vbGVhbixjaGVja2VkSWNvbjpTdHJpbmcsdW5jaGVja2VkSWNvbjpTdHJpbmd9LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuX19rZWJhYlRhZyx7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLHJldmVyc2U6dGhpcy5sZWZ0TGFiZWwsXCJxLWZvY3VzYWJsZVwiOnRoaXMuZm9jdXNhYmxlfV19LGlubmVyQ2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVHJ1ZXx8dGhpcy5pc0luZGV0ZXJtaW5hdGU/W1wiYWN0aXZlXCIsXCJ0ZXh0LVwiK3RoaXMuY29sb3JdOlwidGV4dC1cIisodGhpcy5rZWVwQ29sb3I/dGhpcy5jb2xvcjp0aGlzLmRhcms/XCJsaWdodFwiOlwiZmFkZWRcIil9LGZvY3VzYWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vRm9jdXMmJiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSx0YWJpbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZvY3VzYWJsZT8wOi0xfX0sbWV0aG9kczp7X191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuJHJlZnMucmlwcGxlO2kmJihpLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIiksc2V0VGltZW91dChmdW5jdGlvbigpe2kuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKX0sMTApKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfSxfX2hhbmRsZUtleURvd246ZnVuY3Rpb24odCl7WzEzLDMyXS5pbmNsdWRlcyhnZXRFdmVudEtleSh0KSkmJnRoaXMudG9nZ2xlKHQsITEpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW9wdGlvbiBjdXJzb3ItcG9pbnRlciBuby1vdXRsaW5lIHJvdyBpbmxpbmUgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3RhYmluZGV4OnRoaXMudGFiaW5kZXh9LG9uOntjbGljazp0aGlzLnRvZ2dsZSxmb2N1czpmdW5jdGlvbigpe2UuJGVtaXQoXCJmb2N1c1wiKX0sYmx1cjpmdW5jdGlvbigpe2UuJGVtaXQoXCJibHVyXCIpfSxrZXlkb3duOnRoaXMuX19oYW5kbGVLZXlEb3dufSxkaXJlY3RpdmVzOlwicS10b2dnbGVcIiE9PXRoaXMuX19rZWJhYlRhZ3x8dGhpcy5kaXNhYmxlfHx0aGlzLnJlYWRvbmx5P251bGw6W3tuYW1lOlwidG91Y2gtc3dpcGVcIixtb2RpZmllcnM6e2hvcml6b250YWw6ITB9LHZhbHVlOnRoaXMuX19zd2lwZX1dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtb3B0aW9uLWlubmVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5pbm5lckNsYXNzZXN9LFt0KFwiaW5wdXRcIix7YXR0cnM6e3R5cGU6XCJjaGVja2JveFwifSxvbjp7Y2hhbmdlOnRoaXMudG9nZ2xlfX0pLHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1mb2N1cy1oZWxwZXJcIixjbGFzczpcInEtcmFkaW9cIj09PXRoaXMuX19rZWJhYlRhZz9cInEtZm9jdXMtaGVscGVyLXJvdW5kXCI6XCJxLWZvY3VzLWhlbHBlci1yb3VuZGVkXCJ9KTpudWxsLHRoaXMuX19nZXRDb250ZW50KHQpXSksdGhpcy5sYWJlbD90KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtb3B0aW9uLWxhYmVsXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pOm51bGwsdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sUUNoZWNrYm94PXtuYW1lOlwiUUNoZWNrYm94XCIsbWl4aW5zOltDaGVja2JveE1peGluLE9wdGlvbk1peGluXSxwcm9wczp7dG9nZ2xlSW5kZXRlcm1pbmF0ZTpCb29sZWFuLGluZGV0ZXJtaW5hdGVWYWx1ZTp7ZGVmYXVsdDpudWxsfSxpbmRldGVybWluYXRlSWNvbjpTdHJpbmd9LGNvbXB1dGVkOntpc0luZGV0ZXJtaW5hdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy52YWx1ZXx8dGhpcy52YWx1ZT09PXRoaXMuaW5kZXRlcm1pbmF0ZVZhbHVlfSxjaGVja2VkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1RydWU/e3RyYW5zaXRpb246XCJvcGFjaXR5IDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zLCB0cmFuc2Zvcm0gODAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtc1wiLG9wYWNpdHk6MSx0cmFuc2Zvcm06XCJzY2FsZSgxKVwifTp7dHJhbnNpdGlvbjpcIm9wYWNpdHkgNDUwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpIDBtcywgdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgNDUwbXNcIixvcGFjaXR5OjAsdHJhbnNmb3JtOlwic2NhbGUoMClcIn19LGluZGV0ZXJtaW5hdGVTdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5kZXRlcm1pbmF0ZT97dHJhbnNpdGlvbjpcIm9wYWNpdHkgMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSAwbXMsIHRyYW5zZm9ybSA4MDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zXCIsb3BhY2l0eToxLHRyYW5zZm9ybTpcInNjYWxlKDEpXCJ9Ont0cmFuc2l0aW9uOlwib3BhY2l0eSA0NTBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMG1zLCB0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKSA0NTBtc1wiLG9wYWNpdHk6MCx0cmFuc2Zvcm06XCJzY2FsZSgwKVwifX0sdW5jaGVja2VkU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0ZhbHNlP3tvcGFjaXR5OjF9Ont0cmFuc2l0aW9uOlwib3BhY2l0eSA2NTBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSkgMTUwbXNcIixvcGFjaXR5OjB9fX0sbWV0aG9kczp7X19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVyblt0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtY2hlY2tib3gtaWNvbiBjdXJzb3ItcG9pbnRlclwiLHByb3BzOntuYW1lOnRoaXMudW5jaGVja2VkSWNvbnx8dGhpcy4kcS5pY29uLmNoZWNrYm94LnVuY2hlY2tlZC5tYXR9LHN0eWxlOnRoaXMudW5jaGVja2VkU3R5bGV9KSx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtY2hlY2tib3gtaWNvbiBjdXJzb3ItcG9pbnRlciBhYnNvbHV0ZS1mdWxsXCIscHJvcHM6e25hbWU6dGhpcy5pbmRldGVybWluYXRlSWNvbnx8dGhpcy4kcS5pY29uLmNoZWNrYm94LmluZGV0ZXJtaW5hdGUubWF0fSxzdHlsZTp0aGlzLmluZGV0ZXJtaW5hdGVTdHlsZX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwicS1jaGVja2JveC1pY29uIGN1cnNvci1wb2ludGVyIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmNoZWNrZWRJY29ufHx0aGlzLiRxLmljb24uY2hlY2tib3guY2hlY2tlZC5tYXR9LHN0eWxlOnRoaXMuY2hlY2tlZFN0eWxlfSksdChcImRpdlwiLHtyZWY6XCJyaXBwbGVcIixzdGF0aWNDbGFzczpcInEtcmFkaWFsLXJpcHBsZVwifSldfX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fX2tlYmFiVGFnPVwicS1jaGVja2JveFwifX0sUUNoaXA9e25hbWU6XCJRQ2hpcFwiLHByb3BzOntzbWFsbDpCb29sZWFuLGRlbnNlOkJvb2xlYW4sdGFnOkJvb2xlYW4sc3F1YXJlOkJvb2xlYW4sZmxvYXRpbmc6Qm9vbGVhbixwb2ludGluZzp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInVwXCIsXCJyaWdodFwiLFwiZG93blwiLFwibGVmdFwiXS5pbmNsdWRlcyh0KX19LGNvbG9yOlN0cmluZyx0ZXh0Q29sb3I6U3RyaW5nLGljb246U3RyaW5nLGljb25SaWdodDpTdHJpbmcsYXZhdGFyOlN0cmluZyxjbG9zYWJsZTpCb29sZWFuLGRldGFpbDpCb29sZWFufSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdGhpcy5wb2ludGluZyYmZS5wdXNoKFwicS1jaGlwLXBvaW50aW5nLVwiK3RoaXMucG9pbnRpbmcpLFtcInRhZ1wiLFwic3F1YXJlXCIsXCJmbG9hdGluZ1wiLFwicG9pbnRpbmdcIixcInNtYWxsXCIsXCJkZW5zZVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3RbaV0mJmUucHVzaChcInEtY2hpcC1cIitpKX0pLHRoaXMuZmxvYXRpbmcmJighdGhpcy5kZW5zZSYmZS5wdXNoKFwicS1jaGlwLWRlbnNlXCIpLCF0aGlzLnNxdWFyZSYmZS5wdXNoKFwicS1jaGlwLXNxdWFyZVwiKSksdGhpcy5jb2xvciYmKGUucHVzaChcImJnLVwiK3RoaXMuY29sb3IpLCF0aGlzLnRleHRDb2xvciYmZS5wdXNoKFwidGV4dC13aGl0ZVwiKSksdGhpcy50ZXh0Q29sb3ImJmUucHVzaChcInRleHQtXCIrdGhpcy50ZXh0Q29sb3IpLGV9fSxtZXRob2RzOntfX29uQ2xpY2s6ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImNsaWNrXCIsdCl9LF9fb25Nb3VzZURvd246ZnVuY3Rpb24odCl7dGhpcy4kZW1pdChcImZvY3VzXCIsdCl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXt0aGlzLmNsb3NhYmxlJiZbOCwxMywzMl0uaW5jbHVkZXMoZ2V0RXZlbnRLZXkodCkpJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy4kZW1pdChcImhpZGVcIikpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNoaXAgcm93IG5vLXdyYXAgaW5saW5lIGl0ZW1zLWNlbnRlclwiLGNsYXNzOnRoaXMuY2xhc3Nlcyxvbjp7bW91c2Vkb3duOnRoaXMuX19vbk1vdXNlRG93bix0b3VjaHN0YXJ0OnRoaXMuX19vbk1vdXNlRG93bixjbGljazp0aGlzLl9fb25DbGljayxrZXlkb3duOnRoaXMuX19oYW5kbGVLZXlEb3dufX0sW3RoaXMuaWNvbnx8dGhpcy5hdmF0YXI/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2hpcC1zaWRlIHEtY2hpcC1sZWZ0IHJvdyBmbGV4LWNlbnRlclwiLGNsYXNzOntcInEtY2hpcC1kZXRhaWxcIjp0aGlzLmRldGFpbH19LFt0aGlzLmljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLWNoaXAtaWNvblwiLHByb3BzOntuYW1lOnRoaXMuaWNvbn19KTp0aGlzLmF2YXRhcj90KFwiaW1nXCIse2F0dHJzOntzcmM6dGhpcy5hdmF0YXJ9fSk6bnVsbF0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2hpcC1tYWluIGVsbGlwc2lzIHEtcG9wdXAtLXNraXBcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCksdGhpcy5pY29uUmlnaHQ/dChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy5pY29uUmlnaHR9LGNsYXNzOnRoaXMuY2xvc2FibGU/XCJvbi1yaWdodCBxLWNoaXAtaWNvblwiOlwicS1jaGlwLXNpZGUgcS1jaGlwLXJpZ2h0XCJ9KTpudWxsLHRoaXMuY2xvc2FibGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY2hpcC1zaWRlIHEtY2hpcC1jbG9zZSBxLWNoaXAtcmlnaHQgcm93IGZsZXgtY2VudGVyXCJ9LFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uY2hpcC5jbG9zZX0sc3RhdGljQ2xhc3M6XCJjdXJzb3ItcG9pbnRlclwiLG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbih0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpLGUuJGVtaXQoXCJoaWRlXCIpfX19KV0pOm51bGxdKX19LG1hcmdpbmFsPXt0eXBlOkFycmF5LHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm5cImljb25cImluIHR9KX19LEZyYW1lTWl4aW49e21peGluczpbQWxpZ25NaXhpbl0scHJvcHM6e3ByZWZpeDpTdHJpbmcsc3VmZml4OlN0cmluZyxzdGFja0xhYmVsOlN0cmluZyxmbG9hdExhYmVsOlN0cmluZyxwbGFjZWhvbGRlcjpTdHJpbmcsZXJyb3I6Qm9vbGVhbix3YXJuaW5nOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW4sY2xlYXJhYmxlOkJvb2xlYW4sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGFsaWduOntkZWZhdWx0OlwibGVmdFwifSxkYXJrOkJvb2xlYW4sYmVmb3JlOm1hcmdpbmFsLGFmdGVyOm1hcmdpbmFsLGludmVydGVkOkJvb2xlYW4saW52ZXJ0ZWRMaWdodDpCb29sZWFuLGhpZGVVbmRlcmxpbmU6Qm9vbGVhbixjbGVhclZhbHVlOnt9LG5vUGFyZW50RmllbGQ6Qm9vbGVhbn0sY29tcHV0ZWQ6e2lucHV0UGxhY2Vob2xkZXI6ZnVuY3Rpb24oKXtpZighdGhpcy5mbG9hdExhYmVsJiYhdGhpcy5zdGFja0xhYmVsfHx0aGlzLmxhYmVsSXNBYm92ZSlyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcn0saXNJbnZlcnRlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmludmVydGVkfHx0aGlzLmludmVydGVkTGlnaHR9LGlzSW52ZXJ0ZWRMaWdodDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW52ZXJ0ZWQmJih0aGlzLmludmVydGVkTGlnaHQmJiF0aGlzLmhhc0Vycm9yfHx0aGlzLmludmVydGVkJiZ0aGlzLmhhc1dhcm5pbmcpfSxpc1N0YW5kYXJkOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNJbnZlcnRlZH0saXNIaWRlVW5kZXJsaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNTdGFuZGFyZCYmdGhpcy5oaWRlVW5kZXJsaW5lfSxsYWJlbElzQWJvdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mb2N1c2VkfHx0aGlzLmxlbmd0aHx8dGhpcy5hZGRpdGlvbmFsTGVuZ3RofHx0aGlzLnN0YWNrTGFiZWx9LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGg+MHx8dGhpcy5hZGRpdGlvbmFsTGVuZ3RoPjB8fHRoaXMucGxhY2Vob2xkZXJ8fDA9PT10aGlzLnBsYWNlaG9sZGVyfSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP251bGw6dGhpcy5jbGVhclZhbHVlfSxpc0NsZWFyYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0aGlzLmNsZWFyYWJsZSYmdGhpcy5jb21wdXRlZENsZWFyVmFsdWUhPT10aGlzLm1vZGVsfSxoYXNFcnJvcjpmdW5jdGlvbigpe3JldHVybiEhKCF0aGlzLm5vUGFyZW50RmllbGQmJnRoaXMuZmllbGQmJnRoaXMuZmllbGQuZXJyb3J8fHRoaXMuZXJyb3IpfSxoYXNXYXJuaW5nOmZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLmhhc0Vycm9yfHwhKCF0aGlzLm5vUGFyZW50RmllbGQmJnRoaXMuZmllbGQmJnRoaXMuZmllbGQud2FybmluZ3x8dGhpcy53YXJuaW5nKSl9LGZha2VJbnB1dFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0dWFsVmFsdWV8fDA9PT10aGlzLmFjdHVhbFZhbHVlP3RoaXMuYWN0dWFsVmFsdWU6dGhpcy5wbGFjZWhvbGRlcnx8MD09PXRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjpcIlwifSxmYWtlSW5wdXRDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY3R1YWxWYWx1ZXx8MD09PXRoaXMuYWN0dWFsVmFsdWU7cmV0dXJuW3RoaXMuYWxpZ25DbGFzcyx7aW52aXNpYmxlOih0aGlzLnN0YWNrTGFiZWx8fHRoaXMuZmxvYXRMYWJlbCkmJiF0aGlzLmxhYmVsSXNBYm92ZSYmIXQsXCJxLWlucHV0LXRhcmdldC1wbGFjZWhvbGRlclwiOiF0JiZ0aGlzLmlucHV0UGxhY2Vob2xkZXJ9XX19LG1ldGhvZHM6e2NsZWFyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZWRpdGFibGUpe3QmJnN0b3BBbmRQcmV2ZW50KHQpO3ZhciBlPXRoaXMuY29tcHV0ZWRDbGVhclZhbHVlO3RoaXMuX19zZXRNb2RlbCYmdGhpcy5fX3NldE1vZGVsKGUsITApLHRoaXMuJGVtaXQoXCJjbGVhclwiLGUpfX19fSxJbnB1dE1peGluPXtwcm9wczp7YXV0b2ZvY3VzOltCb29sZWFuLFN0cmluZ10sbWF4SGVpZ2h0Ok51bWJlcixsb2FkaW5nOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Zm9jdXNlZDohMSx0aW1lcjpudWxsLGlzTnVtYmVyRXJyb3I6ITEsaXNOZWdaZXJvOiExfX0sbWV0aG9kczp7Zm9jdXM6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGV8fHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKX0sYmx1cjpmdW5jdGlvbigpe3RoaXMuJHJlZnMuaW5wdXQmJnRoaXMuJHJlZnMuaW5wdXQuYmx1cigpfSxzZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLmlucHV0LnNlbGVjdCgpfSxfX29uRm9jdXM6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXNlZHx8KHRoaXMuZm9jdXNlZD0hMCx0aGlzLiRyZWZzLmlucHV0JiZ0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCksdGhpcy4kZW1pdChcImZvY3VzXCIsdCkpfSxfX29uSW5wdXRCbHVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuX19vbkJsdXIodCl9LDIwMCl9LF9fb25CbHVyOmZ1bmN0aW9uKHQsZSl7dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPSExLHRoaXMuJGVtaXQoXCJibHVyXCIsdCkpLHRoaXMuX19lbWl0KGUpfSxfX2VtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuaXNOdW1iZXImJnRoaXMuaXNOdW1iZXJFcnJvcixzPWk/dGhpcy5pc05lZ1plcm8/LTA6bnVsbDp0aGlzLm1vZGVsO3RoaXMuaXNOdW1iZXImJih0aGlzLm1vZGVsPXRoaXMudmFsdWUpLGkmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLHMpO3ZhciBuPWZ1bmN0aW9uKCl7ZS5pc051bWJlcj8ocz1wYXJzZUZsb2F0KHMpLE51bWJlci5pc0ludGVnZXIoZS5kZWNpbWFscykmJihzPXBhcnNlRmxvYXQocy50b0ZpeGVkKGUuZGVjaW1hbHMpKSksU3RyaW5nKDEvcykhPT1TdHJpbmcoMS9lLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHMpKTpKU09OLnN0cmluZ2lmeShzKSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIscyl9O3Q/bigpOnRoaXMuJG5leHRUaWNrKG4pfSxfX29uS2V5ZG93bjpmdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmKFwidGV4dGFyZWFcIj09PXRoaXMudHlwZT90LnN0b3BQcm9wYWdhdGlvbigpOnRoaXMuX19lbWl0KCkpLHRoaXMuJGVtaXQoXCJrZXlkb3duXCIsdCl9LF9fb25LZXl1cDpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwia2V5dXBcIix0KX0sX19vbkNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuZm9jdXMoKSx0aGlzLiRlbWl0KFwiY2xpY2tcIix0KX0sX19vblBhc3RlOmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJwYXN0ZVwiLHQpfX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt2YXIgZT10LiRyZWZzLmlucHV0O3QuYXV0b2ZvY3VzJiZlJiYoZS5mb2N1cygpLFwic2VsZWN0XCI9PT10LmF1dG9mb2N1cyYmZS5zZWxlY3QoKSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzZWQmJnRoaXMuX19vbkJsdXIodm9pZCAwLCEwKX19LFBhcmVudEZpZWxkTWl4aW49e2luamVjdDp7ZmllbGQ6e2Zyb206XCJfX2ZpZWxkXCIsZGVmYXVsdDpudWxsfX0scHJvcHM6e25vUGFyZW50RmllbGQ6Qm9vbGVhbn0sd2F0Y2g6e25vUGFyZW50RmllbGQ6ZnVuY3Rpb24odCl7dGhpcy5maWVsZCYmdGhpcy5maWVsZFt0P1wiX19yZWdpc3RlcklucHV0XCI6XCJfX3VucmVnaXN0ZXJJbnB1dFwiXSh0aGlzKX19LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7IXRoaXMubm9QYXJlbnRGaWVsZCYmdGhpcy5maWVsZCYmdGhpcy5maWVsZC5fX3JlZ2lzdGVySW5wdXQodGhpcyl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXshdGhpcy5ub1BhcmVudEZpZWxkJiZ0aGlzLmZpZWxkJiZ0aGlzLmZpZWxkLl9fdW5yZWdpc3RlcklucHV0KHRoaXMpfX0sUUlucHV0RnJhbWU9e25hbWU6XCJRSW5wdXRGcmFtZVwiLG1peGluczpbRnJhbWVNaXhpbixQYXJlbnRGaWVsZE1peGluXSxwcm9wczp7Zm9jdXNlZDpCb29sZWFuLGxlbmd0aDpOdW1iZXIsZm9jdXNhYmxlOkJvb2xlYW4sYWRkaXRpb25hbExlbmd0aDpCb29sZWFufSxjb21wdXRlZDp7aGFzU3RhY2tMYWJlbDpmdW5jdGlvbigpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnN0YWNrTGFiZWwmJnRoaXMuc3RhY2tMYWJlbC5sZW5ndGg+MH0saGFzTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNTdGFja0xhYmVsfHxcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5mbG9hdExhYmVsJiZ0aGlzLmZsb2F0TGFiZWwubGVuZ3RoPjB9LGxhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzU3RhY2tMYWJlbD90aGlzLnN0YWNrTGFiZWw6dGhpcy5mbG9hdExhYmVsfSxhZGRvbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1wicS1pZi1hZGRvbi12aXNpYmxlXCI6IXRoaXMuaGFzTGFiZWx8fHRoaXMubGFiZWxJc0Fib3ZlfX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt7XCJxLWlmLWhhcy1sYWJlbFwiOnRoaXMubGFiZWwsXCJxLWlmLWZvY3VzZWRcIjp0aGlzLmZvY3VzZWQsXCJxLWlmLWVycm9yXCI6dGhpcy5oYXNFcnJvcixcInEtaWYtd2FybmluZ1wiOnRoaXMuaGFzV2FybmluZyxcInEtaWYtZGlzYWJsZWRcIjp0aGlzLmRpc2FibGUsXCJxLWlmLXJlYWRvbmx5XCI6dGhpcy5yZWFkb25seSxcInEtaWYtZm9jdXNhYmxlXCI6dGhpcy5mb2N1c2FibGUmJiF0aGlzLmRpc2FibGUsXCJxLWlmLWludmVydGVkXCI6dGhpcy5pc0ludmVydGVkLFwicS1pZi1pbnZlcnRlZC1saWdodFwiOnRoaXMuaXNJbnZlcnRlZExpZ2h0LFwicS1pZi1saWdodC1jb2xvclwiOnRoaXMubGlnaHRDb2xvcixcInEtaWYtZGFya1wiOnRoaXMuZGFyayxcInEtaWYtaGlkZS11bmRlcmxpbmVcIjp0aGlzLmlzSGlkZVVuZGVybGluZSxcInEtaWYtc3RhbmRhcmRcIjp0aGlzLmlzU3RhbmRhcmQsXCJxLWlmLWhhcy1jb250ZW50XCI6dGhpcy5oYXNDb250ZW50fV0sZT10aGlzLmhhc0Vycm9yP1wibmVnYXRpdmVcIjp0aGlzLmhhc1dhcm5pbmc/XCJ3YXJuaW5nXCI6dGhpcy5jb2xvcjtyZXR1cm4gdGhpcy5pc0ludmVydGVkPyh0LnB1c2goXCJiZy1cIitlKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLmlzSW52ZXJ0ZWRMaWdodD9cImJsYWNrXCI6XCJ3aGl0ZVwiKSkpOmUmJnQucHVzaChcInRleHQtXCIrZSksdH19LG1ldGhvZHM6e19fb25DbGljazpmdW5jdGlvbih0KXt0aGlzLiRlbWl0KFwiY2xpY2tcIix0KX0sX19vbk1vdXNlRG93bjpmdW5jdGlvbih0KXt2YXIgZT10aGlzOyF0aGlzLmRpc2FibGUmJnRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7cmV0dXJuIGUuJGVtaXQoXCJmb2N1c1wiLHQpfSl9LF9fYWRkaXRpb25hbEhpZGRlbjpmdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gdm9pZCAwIT09dC5jb25kaXRpb24/ITE9PT10LmNvbmRpdGlvbjp2b2lkIDAhPT10LmNvbnRlbnQmJiF0LmNvbnRlbnQ9PXM+MHx8dm9pZCAwIT09dC5lcnJvciYmIXQuZXJyb3I9PT1lfHx2b2lkIDAhPT10Lndhcm5pbmcmJiF0Lndhcm5pbmc9PT1pfSxfX2JhSGFuZGxlcjpmdW5jdGlvbih0LGUpe2UuYWxsb3dQcm9wYWdhdGlvbnx8dC5zdG9wUHJvcGFnYXRpb24oKSxlLmhhbmRsZXImJmUuaGFuZGxlcih0KX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZiByb3cgbm8td3JhcCByZWxhdGl2ZS1wb3NpdGlvblwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7dGFiaW5kZXg6dGhpcy5mb2N1c2FibGUmJiF0aGlzLmRpc2FibGU/MDotMX0sb246e2NsaWNrOnRoaXMuX19vbkNsaWNrfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlmLWJhc2VsaW5lXCJ9LFwifFwiKSx0aGlzLmJlZm9yZSYmdGhpcy5iZWZvcmUubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFFJY29uLHtrZXk6XCJiXCIraS5pY29uLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sIHEtaWYtY29udHJvbC1iZWZvcmVcIixjbGFzczpbaS5jbGFzcyx7aGlkZGVuOmUuX19hZGRpdGlvbmFsSGlkZGVuKGksZS5oYXNFcnJvcixlLmhhc1dhcm5pbmcsZS5sZW5ndGgpfV0scHJvcHM6e25hbWU6aS5pY29ufSxuYXRpdmVPbjp7bW91c2Vkb3duOmUuX19vbk1vdXNlRG93bix0b3VjaHN0YXJ0OmUuX19vbk1vdXNlRG93bixjbGljazpmdW5jdGlvbih0KXtlLl9fYmFIYW5kbGVyKHQsaSl9fX0pfSl8fHZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1pbm5lciBjb2wgY29sdW1uIHEtcG9wdXAtLXNraXBcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCByZWxhdGl2ZS1wb3NpdGlvblwifSxbdGhpcy5wcmVmaXgmJnQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1pZi1hZGRvbiBxLWlmLWFkZG9uLWxlZnRcIixjbGFzczp0aGlzLmFkZG9uQ2xhc3MsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLnByZWZpeH19KXx8dm9pZCAwLHRoaXMuaGFzTGFiZWwmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlmLWxhYmVsXCIsY2xhc3M6e1wicS1pZi1sYWJlbC1hYm92ZVwiOnRoaXMubGFiZWxJc0Fib3ZlfX0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlmLWxhYmVsLWlubmVyIGVsbGlwc2lzXCIsZG9tUHJvcHM6e2lubmVySFRNTDp0aGlzLmxhYmVsfX0pXSl8fHZvaWQgMF0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpLmNvbmNhdChbdGhpcy5zdWZmaXgmJnQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1pZi1hZGRvbiBxLWlmLWFkZG9uLXJpZ2h0XCIsY2xhc3M6dGhpcy5hZGRvbkNsYXNzLGRvbVByb3BzOntpbm5lckhUTUw6dGhpcy5zdWZmaXh9fSl8fHZvaWQgMF0pKSx0aGlzLmhhc0xhYmVsJiZ0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1sYWJlbC1zcGFjZXJcIixkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMubGFiZWx9fSl8fHZvaWQgMF0pLHRoaXMuYWZ0ZXImJnRoaXMuYWZ0ZXIubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFFJY29uLHtrZXk6XCJhXCIraS5pY29uLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsY2xhc3M6W2kuY2xhc3Mse2hpZGRlbjplLl9fYWRkaXRpb25hbEhpZGRlbihpLGUuaGFzRXJyb3IsZS5oYXNXYXJuaW5nLGUubGVuZ3RoKX1dLHByb3BzOntuYW1lOmkuaWNvbn0sbmF0aXZlT246e21vdXNlZG93bjplLl9fb25Nb3VzZURvd24sdG91Y2hzdGFydDplLl9fb25Nb3VzZURvd24sY2xpY2s6ZnVuY3Rpb24odCl7ZS5fX2JhSGFuZGxlcih0LGkpfX19KX0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5hZnRlcikpfX0sUUNoaXBzSW5wdXQ9e25hbWU6XCJRQ2hpcHNJbnB1dFwiLG1peGluczpbRnJhbWVNaXhpbixJbnB1dE1peGluXSxwcm9wczp7dmFsdWU6e3R5cGU6QXJyYXkscmVxdWlyZWQ6ITB9LGNoaXBzQ29sb3I6U3RyaW5nLGNoaXBzQmdDb2xvcjpTdHJpbmcscmVhZG9ubHk6Qm9vbGVhbixhZGRJY29uOlN0cmluZyx1cHBlckNhc2U6Qm9vbGVhbixsb3dlckNhc2U6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue2lucHV0OlwiXCIsbW9kZWw6dGhpcy52YWx1ZS5zbGljZSgpLHdhdGNoZXI6bnVsbCxzaGFkb3c6e3ZhbDp0aGlzLmlucHV0LHNldDp0aGlzLmFkZCxzZXROYXY6ZnVuY3Rpb24oZSl7dC5pbnB1dD1lfSxsb2FkaW5nOiExLHNlbGVjdGlvbk9wZW46ITEsd2F0Y2hlZDowLGlzRWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdC5lZGl0YWJsZX0saXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGFya30saGFzRm9jdXM6ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXQuJHJlZnMuaW5wdXR9LHJlZ2lzdGVyOmZ1bmN0aW9uKCl7dC5zaGFkb3cud2F0Y2hlZCs9MSx0Ll9fd2F0Y2hlclJlZ2lzdGVyKCl9LHVucmVnaXN0ZXI6ZnVuY3Rpb24oKXt0LnNoYWRvdy53YXRjaGVkPU1hdGgubWF4KDAsdC5zaGFkb3cud2F0Y2hlZC0xKSx0Ll9fd2F0Y2hlclVucmVnaXN0ZXIoKX0sZ2V0RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdC4kcmVmcy5pbnB1dH19fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw9dC5zbGljZSgpfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX2lucHV0OnRoaXMuc2hhZG93fX0sY29tcHV0ZWQ6e2xlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsP3RoaXMubW9kZWwubGVuZ3RoOjB9LGlzTG9hZGluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRpbmd8fHRoaXMuc2hhZG93LndhdGNoZWQmJnRoaXMuc2hhZG93LmxvYWRpbmd9LGNvbXB1dGVkQWRkSWNvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZEljb258fHRoaXMuJHEuaWNvbi5jaGlwc0lucHV0LmFkZH0sY29tcHV0ZWRDaGlwVGV4dENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpcHNDb2xvcj90aGlzLmNoaXBzQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P3RoaXMuY29sb3I6XCJ3aGl0ZVwiOnRoaXMuaXNJbnZlcnRlZD90aGlzLmludmVydGVkTGlnaHQ/XCJncmV5LTEwXCI6dGhpcy5jb2xvcjp0aGlzLmRhcms/dGhpcy5jb2xvcjpcIndoaXRlXCJ9LGNvbXB1dGVkQ2hpcEJnQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlwc0JnQ29sb3I/dGhpcy5jaGlwc0JnQ29sb3I6dGhpcy5pc0ludmVydGVkTGlnaHQ/dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS0xMFwiOnRoaXMuY29sb3I6dGhpcy5pc0ludmVydGVkP3RoaXMuaW52ZXJ0ZWRMaWdodD90aGlzLmNvbG9yOlwid2hpdGVcIjp0aGlzLmRhcms/XCJ3aGl0ZVwiOnRoaXMuY29sb3J9LGlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLmFsaWduQ2xhc3NdO3JldHVybiB0aGlzLnVwcGVyQ2FzZSYmdC5wdXNoKFwidXBwZXJjYXNlXCIpLHRoaXMubG93ZXJDYXNlJiZ0LnB1c2goXCJsb3dlcmNhc2VcIiksdH0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJjAhPT10aGlzLm1vZGVsLmxlbmd0aH19LG1ldGhvZHM6e2FkZDpmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD10aGlzLmlucHV0KSxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpLCF0aGlzLmlzTG9hZGluZyYmdGhpcy5lZGl0YWJsZSYmdCl7dmFyIGU9dGhpcy5sb3dlckNhc2U/dC50b0xvd2VyQ2FzZSgpOnRoaXMudXBwZXJDYXNlP3QudG9VcHBlckNhc2UoKTp0O3RoaXMubW9kZWwuaW5jbHVkZXMoZSk/dGhpcy4kZW1pdChcImR1cGxpY2F0ZVwiLGUpOih0aGlzLiRlbWl0KFwiYWRkXCIse2luZGV4OnRoaXMubW9kZWwubGVuZ3RoLHZhbDplfSksdGhpcy5tb2RlbC5wdXNoKGUpLHRoaXMuJGVtaXQoXCJpbnB1dFwiLHRoaXMubW9kZWwpLHRoaXMuaW5wdXQ9XCJcIil9fSxyZW1vdmU6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZm9jdXMoKSx0aGlzLmVkaXRhYmxlJiZ0Pj0wJiZ0PHRoaXMubGVuZ3RoJiYodGhpcy4kZW1pdChcInJlbW92ZVwiLHtpbmRleDp0LHZhbHVlOnRoaXMubW9kZWwuc3BsaWNlKHQsMSl9KSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSl9LGNsZWFyOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0JiZzdG9wQW5kUHJldmVudCh0KSx0aGlzLmVkaXRhYmxlJiYodGhpcy4kZW1pdChcImlucHV0XCIsW10pLHRoaXMuJGVtaXQoXCJjbGVhclwiKSl9LF9fY2xlYXJUaW1lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHQudGltZXIpfSl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXtzd2l0Y2goZ2V0RXZlbnRLZXkodCkpe2Nhc2UgMTM6aWYodGhpcy5zaGFkb3cuc2VsZWN0aW9uT3BlbilyZXR1cm47cmV0dXJuIHN0b3BBbmRQcmV2ZW50KHQpLHRoaXMuYWRkKCk7Y2FzZSA4OnJldHVybiB2b2lkKCF0aGlzLmlucHV0Lmxlbmd0aCYmdGhpcy5sZW5ndGgmJnRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpKTtkZWZhdWx0OnJldHVybiB0aGlzLl9fb25LZXlkb3duKHQpfX0sX19vbkNsaWNrOmZ1bmN0aW9uKCl7dGhpcy5mb2N1cygpfSxfX3dhdGNoZXI6ZnVuY3Rpb24odCl7dGhpcy5zaGFkb3cud2F0Y2hlZCYmKHRoaXMuc2hhZG93LnZhbD10KX0sX193YXRjaGVyUmVnaXN0ZXI6ZnVuY3Rpb24oKXt0aGlzLndhdGNoZXJ8fCh0aGlzLndhdGNoZXI9dGhpcy4kd2F0Y2goXCJpbnB1dFwiLHRoaXMuX193YXRjaGVyKSl9LF9fd2F0Y2hlclVucmVnaXN0ZXI6ZnVuY3Rpb24odCl7IXRoaXMud2F0Y2hlcnx8IXQmJnRoaXMuc2hhZG93LndhdGNoZWR8fCh0aGlzLndhdGNoZXIoKSx0aGlzLndhdGNoZXI9bnVsbCx0aGlzLnNoYWRvdy5zZWxlY3Rpb25PcGVuPSExKX19LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fd2F0Y2hlclVucmVnaXN0ZXIoITApfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXRGcmFtZSx7c3RhdGljQ2xhc3M6XCJxLWNoaXBzLWlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZCxsZW5ndGg6dGhpcy5sZW5ndGgsYWRkaXRpb25hbExlbmd0aDp0aGlzLmlucHV0Lmxlbmd0aD4wfSxvbjp7Y2xpY2s6dGhpcy5fX29uQ2xpY2t9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCByb3cgaXRlbXMtY2VudGVyIHEtaW5wdXQtY2hpcHNcIn0sdGhpcy5tb2RlbC5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRQ2hpcCx7a2V5OmkrXCIjXCIrcyxwcm9wczp7c21hbGw6ITAsY2xvc2FibGU6ZS5lZGl0YWJsZSxjb2xvcjplLmNvbXB1dGVkQ2hpcEJnQ29sb3IsdGV4dENvbG9yOmUuY29tcHV0ZWRDaGlwVGV4dENvbG9yfSxhdHRyczp7dGFiaW5kZXg6ZS5lZGl0YWJsZSYmZS5mb2N1c2VkPzA6LTF9LG9uOntibHVyOmUuX19vbklucHV0Qmx1cixmb2N1czplLl9fY2xlYXJUaW1lcixoaWRlOmZ1bmN0aW9uKCl7ZS5yZW1vdmUocyl9fSxuYXRpdmVPbjp7Ymx1cjplLl9fb25JbnB1dEJsdXIsZm9jdXM6ZS5fX2NsZWFyVGltZXJ9fSxpKX0pLmNvbmNhdChbdChcImlucHV0XCIse3JlZjpcImlucHV0XCIsc3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXRcIixjbGFzczp0aGlzLmlucHV0Q2xhc3Nlcyxkb21Qcm9wczp7dmFsdWU6dGhpcy5pbnB1dH0sYXR0cnM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRhdHRycyx7cGxhY2Vob2xkZXI6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLGRpc2FibGVkOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5fSksb246e2lucHV0OmZ1bmN0aW9uKHQpe2UuaW5wdXQ9dC50YXJnZXQudmFsdWV9LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uSW5wdXRCbHVyLGtleWRvd246dGhpcy5fX2hhbmRsZUtleURvd24sa2V5dXA6dGhpcy5fX29uS2V5dXB9fSldKSksdGhpcy5pc0xvYWRpbmc/dGhpcy4kc2xvdHMubG9hZGluZz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmxvYWRpbmcpOnQoUVNwaW5uZXIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e3NpemU6XCIyNHB4XCJ9fSk6dGhpcy5lZGl0YWJsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixjbGFzczp7aW52aXNpYmxlOjA9PT10aGlzLmlucHV0Lmxlbmd0aH0scHJvcHM6e25hbWU6dGhpcy5jb21wdXRlZEFkZEljb259LG5hdGl2ZU9uOnttb3VzZWRvd246dGhpcy5fX2NsZWFyVGltZXIsdG91Y2hzdGFydDp0aGlzLl9fY2xlYXJUaW1lcixjbGljazpmdW5jdGlvbigpe2UuYWRkKCl9fX0pfHx2b2lkIDAsdGhpcy5pc0NsZWFyYWJsZSYmdChRSWNvbix7c2xvdDpcImFmdGVyXCIsc3RhdGljQ2xhc3M6XCJxLWlmLWNvbnRyb2xcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXRbXCJjbGVhclwiKyh0aGlzLmlzSW52ZXJ0ZWQ/XCJJbnZlcnRlZFwiOlwiXCIpXX0sbmF0aXZlT246e21vdXNlZG93bjp0aGlzLl9fY2xlYXJUaW1lcix0b3VjaHN0YXJ0OnRoaXMuX19jbGVhclRpbWVyLGNsaWNrOnRoaXMuY2xlYXJ9fSl8fHZvaWQgMF0uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQ/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImFic29sdXRlLWZ1bGwgbm8tcG9pbnRlci1ldmVudHNcIixzbG90OlwiYWZ0ZXJcIn0sdGhpcy4kc2xvdHMuZGVmYXVsdCk6dm9pZCAwKSl9fSxRSXRlbVRpbGU9e25hbWU6XCJRSXRlbVRpbGVcIixwcm9wczp7aWNvbjpTdHJpbmcsbGV0dGVyOkJvb2xlYW4saW52ZXJ0ZWQ6Qm9vbGVhbixpbWFnZTpCb29sZWFuLGF2YXRhcjpCb29sZWFuLHN0YW1wOkJvb2xlYW4sbGFiZWw6Qm9vbGVhbixzdWJsYWJlbDpCb29sZWFuLGxpbmVzOltOdW1iZXIsU3RyaW5nXSx0YWc6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJkaXZcIn0sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmd9LGNvbXB1dGVkOntoYXNMaW5lczpmdW5jdGlvbigpe3JldHVybih0aGlzLmxhYmVsfHx0aGlzLnN1YmxhYmVsKSYmdGhpcy5saW5lc30sdHlwZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW1wiaWNvblwiLFwibGFiZWxcIixcInN1YmxhYmVsXCIsXCJpbWFnZVwiLFwiYXZhdGFyXCIsXCJsZXR0ZXJcIixcInN0YW1wXCJdLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmNvbG9yJiYodGhpcy5pbnZlcnRlZD90LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKTp0aGlzLnRleHRDb2xvcnx8dC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSksdGhpcy50ZXh0Q29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy50ZXh0Q29sb3IpLHRoaXMudHlwZSYmdC5wdXNoKFwicS1pdGVtLVwiK3RoaXMudHlwZSksdGhpcy5pbnZlcnRlZCYmKHRoaXMuaWNvbnx8dGhpcy5sZXR0ZXIpJiYodC5wdXNoKFwicS1pdGVtLWludmVydGVkXCIpLHQucHVzaChcImZsZXhcIiksdC5wdXNoKFwiZmxleC1jZW50ZXJcIikpLCF0aGlzLmhhc0xpbmVzfHxcIjFcIiE9PXRoaXMubGluZXMmJjEhPT10aGlzLmxpbmVzfHx0LnB1c2goXCJlbGxpcHNpc1wiKSx0fSxzdHlsZTpmdW5jdGlvbigpe2lmKHRoaXMuaGFzTGluZXMpcmV0dXJuIHRleHRTdHlsZSh0aGlzLmxpbmVzKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT17Y2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnRoaXMuc3R5bGV9O2lmKHRoaXMuaWNvbil7aWYodGhpcy5pbnZlcnRlZClyZXR1cm4gdCh0aGlzLnRhZyxlLFt0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLmljb259fSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pO2UucHJvcHM9e25hbWU6dGhpcy5pY29ufX1yZXR1cm4gdCh0aGlzLmljb24/UUljb246dGhpcy50YWcsZSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFTbGlkZVRyYW5zaXRpb249e25hbWU6XCJRU2xpZGVUcmFuc2l0aW9uXCIscHJvcHM6e2FwcGVhcjpCb29sZWFuLGR1cmF0aW9uOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMH19LG1ldGhvZHM6e19fYmVnaW46ZnVuY3Rpb24odCxlLGkpe3Quc3R5bGUub3ZlcmZsb3dZPVwiaGlkZGVuXCIsdm9pZCAwIT09ZSYmKHQuc3R5bGUuaGVpZ2h0PWUrXCJweFwiKSx0LnN0eWxlLnRyYW5zaXRpb249XCJoZWlnaHQgXCIrdGhpcy5kdXJhdGlvbitcIm1zIGN1YmljLWJlemllciguMjUsIC44LCAuNTAsIDEpXCIsdGhpcy5hbmltYXRpbmc9ITAsdGhpcy5kb25lPWl9LF9fZW5kOmZ1bmN0aW9uKHQsZSl7dC5zdHlsZS5vdmVyZmxvd1k9bnVsbCx0LnN0eWxlLmhlaWdodD1udWxsLHQuc3R5bGUudHJhbnNpdGlvbj1udWxsLHRoaXMuX19jbGVhbnVwKCksZSE9PXRoaXMubGFzdEV2ZW50JiZ0aGlzLiRlbWl0KGUpfSxfX2NsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLmRvbmUmJnRoaXMuZG9uZSgpLHRoaXMuZG9uZT1udWxsLHRoaXMuYW5pbWF0aW5nPSExLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsdGhpcy5hbmltTGlzdGVuZXIpLHRoaXMuYW5pbUxpc3RlbmVyPW51bGx9fSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpbmcmJnRoaXMuX19jbGVhbnVwKCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwidHJhbnNpdGlvblwiLHtwcm9wczp7Y3NzOiExLGFwcGVhcjp0aGlzLmFwcGVhcn0sb246e2VudGVyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9MDtlLmVsPXQsITA9PT1lLmFuaW1hdGluZz8oZS5fX2NsZWFudXAoKSxzPXQub2Zmc2V0SGVpZ2h0PT09dC5zY3JvbGxIZWlnaHQ/MDp2b2lkIDApOmUubGFzdEV2ZW50PVwiaGlkZVwiLGUuX19iZWdpbih0LHMsaSksZS50aW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5zdHlsZS5oZWlnaHQ9dC5zY3JvbGxIZWlnaHQrXCJweFwiLGUuYW5pbUxpc3RlbmVyPWZ1bmN0aW9uKCl7ZS5fX2VuZCh0LFwic2hvd1wiKX0sdC5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLGUuYW5pbUxpc3RlbmVyKX0sMTAwKX0sbGVhdmU6ZnVuY3Rpb24odCxpKXt2YXIgcztlLmVsPXQsITA9PT1lLmFuaW1hdGluZz9lLl9fY2xlYW51cCgpOihlLmxhc3RFdmVudD1cInNob3dcIixzPXQuc2Nyb2xsSGVpZ2h0KSxlLl9fYmVnaW4odCxzLGkpLGUudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3Quc3R5bGUuaGVpZ2h0PTAsZS5hbmltTGlzdGVuZXI9ZnVuY3Rpb24oKXtlLl9fZW5kKHQsXCJoaWRlXCIpfSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsZS5hbmltTGlzdGVuZXIpfSwxMDApfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sZXZlbnROYW1lPVwicTpjb2xsYXBzaWJsZTpjbG9zZVwiLFFDb2xsYXBzaWJsZT17bmFtZTpcIlFDb2xsYXBzaWJsZVwiLG1peGluczpbTW9kZWxUb2dnbGVNaXhpbixJdGVtTWl4aW4se3Byb3BzOnN1Ykl0ZW1Qcm9wc31dLG1vZGVsVG9nZ2xlOntoaXN0b3J5OiExfSxwcm9wczp7ZGlzYWJsZTpCb29sZWFuLHBvcHVwOkJvb2xlYW4saW5kZW50OkJvb2xlYW4sZ3JvdXA6U3RyaW5nLGljb25Ub2dnbGU6Qm9vbGVhbixjb2xsYXBzZUljb246U3RyaW5nLG9wZW5lZDpCb29sZWFuLGR1cmF0aW9uOk51bWJlcixoZWFkZXJTdHlsZTpbQXJyYXksU3RyaW5nLE9iamVjdF0saGVhZGVyQ2xhc3M6W0FycmF5LFN0cmluZyxPYmplY3RdfSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcInEtY29sbGFwc2libGUtb3BlbmVkXCI6dGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1jbG9zZWRcIjohdGhpcy5zaG93aW5nLFwicS1jb2xsYXBzaWJsZS1wb3B1cC1vcGVuZWRcIjp0aGlzLnBvcHVwJiZ0aGlzLnNob3dpbmcsXCJxLWNvbGxhcHNpYmxlLXBvcHVwLWNsb3NlZFwiOnRoaXMucG9wdXAmJiF0aGlzLnNob3dpbmcsXCJxLWNvbGxhcHNpYmxlLWN1cnNvci1wb2ludGVyXCI6IXRoaXMuc2VwYXJhdGVUb2dnbGUsXCJxLWl0ZW0tZGFya1wiOnRoaXMuZGFyayxcInEtaXRlbS1zZXBhcmF0b3JcIjp0aGlzLnNlcGFyYXRvcixcInEtaXRlbS1pbnNldC1zZXBhcmF0b3JcIjp0aGlzLmluc2V0U2VwYXJhdG9yLGRpc2FibGVkOnRoaXMuZGlzYWJsZX19LHNlcGFyYXRlVG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaWNvblRvZ2dsZXx8dm9pZCAwIT09dGhpcy50b319LHdhdGNoOntzaG93aW5nOmZ1bmN0aW9uKHQpe3QmJnRoaXMuZ3JvdXAmJnRoaXMuJHJvb3QuJGVtaXQoZXZlbnROYW1lLHRoaXMpfX0sbWV0aG9kczp7X190b2dnbGVJdGVtOmZ1bmN0aW9uKCl7dGhpcy5zZXBhcmF0ZVRvZ2dsZXx8dGhpcy50b2dnbGUoKX0sX190b2dnbGVJY29uOmZ1bmN0aW9uKHQpe3RoaXMuc2VwYXJhdGVUb2dnbGUmJih0JiZzdG9wQW5kUHJldmVudCh0KSx0aGlzLnRvZ2dsZSgpKX0sX19ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dGhpcy5ncm91cCYmdGhpcyE9PXQmJnQuZ3JvdXA9PT10aGlzLmdyb3VwJiZ0aGlzLmhpZGUoKX0sX19nZXRUb2dnbGVTaWRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QoUUl0ZW1UaWxlLHtzbG90OmU/XCJyaWdodFwiOnZvaWQgMCxzdGF0aWNDbGFzczpcImN1cnNvci1wb2ludGVyIHRyYW5zaXRpb24tZ2VuZXJpYyByZWxhdGl2ZS1wb3NpdGlvbiBxLWNvbGxhcHNpYmxlLXRvZ2dsZS1pY29uXCIsY2xhc3M6e1wicm90YXRlLTE4MFwiOnRoaXMuc2hvd2luZyxpbnZpc2libGU6dGhpcy5kaXNhYmxlfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5fX3RvZ2dsZUljb259LHByb3BzOntpY29uOnRoaXMuY29sbGFwc2VJY29ufHx0aGlzLiRxLmljb24uY29sbGFwc2libGUuaWNvbn19KV19LF9fZ2V0SXRlbVByb3BzOmZ1bmN0aW9uKHQpe3JldHVybntwcm9wczp0P3tjZmc6dGhpcy4kcHJvcHN9OnRoaXMuJHByb3BzLHN0eWxlOnRoaXMuaGVhZGVyU3R5bGUsY2xhc3M6dGhpcy5oZWFkZXJDbGFzcyxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5fX3RvZ2dsZUl0ZW19fX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLiRyb290LiRvbihldmVudE5hbWUsdGhpcy5fX2V2ZW50SGFuZGxlciksKHRoaXMub3BlbmVkfHx0aGlzLnZhbHVlKSYmdGhpcy5zaG93KCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLiRyb290LiRvZmYoZXZlbnROYW1lLHRoaXMuX19ldmVudEhhbmRsZXIpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1jb2xsYXBzaWJsZSBxLWl0ZW0tZGl2aXNpb24gcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xsYXBzaWJsZS1pbm5lclwifSxbdGhpcy4kc2xvdHMuaGVhZGVyP3QoUUl0ZW0sdGhpcy5fX2dldEl0ZW1Qcm9wcygpLFt0aGlzLiRzbG90cy5oZWFkZXIsdChRSXRlbVNpZGUse3Byb3BzOntyaWdodDohMH0sc3RhdGljQ2xhc3M6XCJyZWxhdGl2ZS1wb3NpdGlvblwifSx0aGlzLl9fZ2V0VG9nZ2xlU2lkZSh0KSldKTp0KFFJdGVtV3JhcHBlcix0aGlzLl9fZ2V0SXRlbVByb3BzKCEwKSx0aGlzLl9fZ2V0VG9nZ2xlU2lkZSh0LCEwKSksdChRU2xpZGVUcmFuc2l0aW9uLHtwcm9wczp7ZHVyYXRpb246dGhpcy5kdXJhdGlvbn19LFt0KFwiZGl2XCIse2RpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuc2hvd2luZ31dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sbGFwc2libGUtc3ViLWl0ZW0gcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp7aW5kZW50OnRoaXMuaW5kZW50fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCldKV0pXSldKX19LERpc3BsYXlNb2RlTWl4aW49e3Byb3BzOntwb3BvdmVyOkJvb2xlYW4sbW9kYWw6Qm9vbGVhbn0sY29tcHV0ZWQ6e2lzUG9wb3ZlcjpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5wb3BvdmVyfHwhdGhpcy5tb2RhbCYmKHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcCYmIXRoaXMuJHEucGxhdGZvcm0ud2l0aGluLmlmcmFtZSl9fX07ZnVuY3Rpb24gZ2V0UGVyY2VudGFnZSh0LGUsaSl7dmFyIHM9YmV0d2VlbigocG9zaXRpb24odCkubGVmdC1lLmxlZnQpL2Uud2lkdGgsMCwxKTtyZXR1cm4gaT8xLXM6c31mdW5jdGlvbiBub3REaXZpZGVzKHQsZSl7dmFyIGk9ZT9wYXJzZUZsb2F0KHQudG9GaXhlZChlKSk6dDtyZXR1cm4gaSE9PXBhcnNlSW50KGksMTApfWZ1bmN0aW9uIGdldE1vZGVsKHQsZSxpLHMsbil7dmFyIG89ZSt0KihpLWUpLHI9KG8tZSklcztyZXR1cm4gbys9KE1hdGguYWJzKHIpPj1zLzI/KHI8MD8tMToxKSpzOjApLXIsbiYmKG89cGFyc2VGbG9hdChvLnRvRml4ZWQobikpKSxiZXR3ZWVuKG8sZSxpKX12YXIgU2xpZGVyTWl4aW49e2RpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7bWluOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1fSxzdGVwOnt0eXBlOk51bWJlcixkZWZhdWx0OjF9LGRlY2ltYWxzOk51bWJlcixzbmFwOkJvb2xlYW4sbWFya2VyczpCb29sZWFuLGxhYmVsOkJvb2xlYW4sbGFiZWxBbHdheXM6Qm9vbGVhbixzcXVhcmU6Qm9vbGVhbixjb2xvcjpTdHJpbmcsZmlsbEhhbmRsZUFsd2F5czpCb29sZWFuLGVycm9yOkJvb2xlYW4sd2FybmluZzpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSxjb21wdXRlZDp7ZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sY2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PXtkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxcImxhYmVsLWFsd2F5c1wiOnRoaXMubGFiZWxBbHdheXMsXCJoYXMtZXJyb3JcIjp0aGlzLmVycm9yLFwiaGFzLXdhcm5pbmdcIjp0aGlzLndhcm5pbmd9O3JldHVybiB0aGlzLmVycm9yfHx0aGlzLndhcm5pbmd8fCF0aGlzLmNvbG9yfHwodFtcInRleHQtXCIrdGhpcy5jb2xvcl09ITApLHR9LG1hcmtlcnNMZW46ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCsxfSxsYWJlbENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXJyb3I/XCJuZWdhdGl2ZVwiOnRoaXMud2FybmluZz9cIndhcm5pbmdcIjp0aGlzLmNvbG9yfHxcInByaW1hcnlcIn0sY29tcHV0ZWREZWNpbWFsczpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmRlY2ltYWxzP3RoaXMuZGVjaW1hbHN8fDA6KFN0cmluZyh0aGlzLnN0ZXApLnRyaW0oXCIwXCIpLnNwbGl0KFwiLlwiKVsxXXx8XCJcIikubGVuZ3RofSxjb21wdXRlZFN0ZXA6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz8xL01hdGgucG93KDEwLHRoaXMuZGVjaW1hbHN8fDApOnRoaXMuc3RlcH19LG1ldGhvZHM6e19fcGFuOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dC5pc0ZpbmFsP3RoaXMuZHJhZ2dpbmcmJih0aGlzLmRyYWdUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5kcmFnZ2luZz0hMX0sMTAwKSx0aGlzLl9fZW5kKHQuZXZ0KSx0aGlzLl9fdXBkYXRlKCEwKSk6dC5pc0ZpcnN0PyhjbGVhclRpbWVvdXQodGhpcy5kcmFnVGltZXIpLHRoaXMuZHJhZ2dpbmc9dGhpcy5fX2dldERyYWdnaW5nKHQuZXZ0KSk6dGhpcy5kcmFnZ2luZyYmKHRoaXMuX19tb3ZlKHQuZXZ0KSx0aGlzLl9fdXBkYXRlKCkpfSxfX3VwZGF0ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO0pTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSkmJih0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSx0JiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KGUubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKX0pKX0sX19jbGljazpmdW5jdGlvbih0KXtpZighdGhpcy5kcmFnZ2luZyl7dmFyIGU9dGhpcy5fX2dldERyYWdnaW5nKHQpO2UmJih0aGlzLl9fZW5kKHQsZSksdGhpcy5fX3VwZGF0ZSghMCkpfX0sX19nZXRNYXJrZXJzOmZ1bmN0aW9uKHQpe2lmKHRoaXMubWFya2Vycyl7Zm9yKHZhciBlPVtdLGk9MDtpPHRoaXMubWFya2Vyc0xlbjtpKyspZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1tYXJrXCIsa2V5OlwibWFya2VyXCIraSxzdHlsZTp7bGVmdDoxMDAqaSp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKStcIiVcIn19KSk7cmV0dXJuIGV9fX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX192YWxpZGF0ZVByb3BzKCl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc2xpZGVyIG5vbi1zZWxlY3RhYmxlXCIsY2xhc3M6dGhpcy5jbGFzc2VzLG9uOnRoaXMuZWRpdGFibGU/e2NsaWNrOnRoaXMuX19jbGlja306bnVsbCxkaXJlY3RpdmVzOnRoaXMuZWRpdGFibGU/W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwLHByZXZlbnQ6ITAsc3RvcDohMH0sdmFsdWU6dGhpcy5fX3Bhbn1dOm51bGx9LFt0KFwiZGl2XCIse3JlZjpcImhhbmRsZVwiLHN0YXRpY0NsYXNzOlwicS1zbGlkZXItaGFuZGxlLWNvbnRhaW5lclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc2xpZGVyLXRyYWNrXCJ9KSx0aGlzLl9fZ2V0TWFya2Vycyh0KV0uY29uY2F0KHRoaXMuX19nZXRDb250ZW50KHQpKSldKX19LFFTbGlkZXI9e25hbWU6XCJRU2xpZGVyXCIsbWl4aW5zOltTbGlkZXJNaXhpbl0scHJvcHM6e3ZhbHVlOk51bWJlcixsYWJlbFZhbHVlOlN0cmluZ30sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb2RlbDp0aGlzLnZhbHVlLGRyYWdnaW5nOiExLGN1cnJlbnRQZXJjZW50YWdlOih0aGlzLnZhbHVlLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfX0sY29tcHV0ZWQ6e3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwPyh0aGlzLm1vZGVsLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pKjEwMCtcIiVcIjoxMDAqdGhpcy5jdXJyZW50UGVyY2VudGFnZStcIiVcIn0sZGlzcGxheVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubGFiZWxWYWx1ZT90aGlzLmxhYmVsVmFsdWU6dGhpcy5tb2RlbH19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nfHwodDx0aGlzLm1pbj90aGlzLm1vZGVsPXRoaXMubWluOnQ+dGhpcy5tYXg/dGhpcy5tb2RlbD10aGlzLm1heDp0aGlzLm1vZGVsPXQsdGhpcy5jdXJyZW50UGVyY2VudGFnZT0odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSl9LG1pbjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPHQ/dGhpcy5tb2RlbD10OnRoaXMuJG5leHRUaWNrKHRoaXMuX192YWxpZGF0ZVByb3BzKX0sbWF4OmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw+dD90aGlzLm1vZGVsPXQ6dGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfSxzdGVwOmZ1bmN0aW9uKCl7dGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfX0sbWV0aG9kczp7X19nZXREcmFnZ2luZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRyZWZzLmhhbmRsZTtyZXR1cm57bGVmdDplLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsd2lkdGg6ZS5vZmZzZXRXaWR0aH19LF9fbW92ZTpmdW5jdGlvbih0KXt2YXIgZT1nZXRQZXJjZW50YWdlKHQsdGhpcy5kcmFnZ2luZyx0aGlzLiRxLmkxOG4ucnRsKTt0aGlzLmN1cnJlbnRQZXJjZW50YWdlPWUsdGhpcy5tb2RlbD1nZXRNb2RlbChlLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpfSxfX2VuZDpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXRoaXMuZHJhZ2dpbmcpO3ZhciBpPWdldFBlcmNlbnRhZ2UodCxlLHRoaXMuJHEuaTE4bi5ydGwpO3RoaXMubW9kZWw9Z2V0TW9kZWwoaSx0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKSx0aGlzLmN1cnJlbnRQZXJjZW50YWdlPSh0aGlzLm1vZGVsLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfSxfX29uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7aWYodGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhlKSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9dGhpcy5jb21wdXRlZERlY2ltYWxzLHM9dC5jdHJsS2V5PzEwKnRoaXMuY29tcHV0ZWRTdGVwOnRoaXMuY29tcHV0ZWRTdGVwLG49WzM3LDQwXS5pbmNsdWRlcyhlKT8tczpzLG89aT9wYXJzZUZsb2F0KCh0aGlzLm1vZGVsK24pLnRvRml4ZWQoaSkpOnRoaXMubW9kZWwrbjt0aGlzLm1vZGVsPWJldHdlZW4obyx0aGlzLm1pbix0aGlzLm1heCksdGhpcy5jdXJyZW50UGVyY2VudGFnZT0odGhpcy5tb2RlbC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSx0aGlzLl9fdXBkYXRlKCl9fSxfX29uS2V5VXA6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXlDb2RlO3RoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoZSkmJnRoaXMuX191cGRhdGUoITApfSxfX3ZhbGlkYXRlUHJvcHM6ZnVuY3Rpb24oKXt0aGlzLm1pbj49dGhpcy5tYXg/Y29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBtaW4gPj0gbWF4XCIsdGhpcy4kZWwsdGhpcy5taW4sdGhpcy5tYXgpOm5vdERpdmlkZXMoKHRoaXMubWF4LXRoaXMubWluKS90aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKSYmY29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBzdGVwIG11c3QgYmUgYSBkaXZpc29yIG9mIG1heCAtIG1pblwiLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpfSxfX2dldENvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci10cmFjayBhY3RpdmUtdHJhY2tcIixzdHlsZTp7d2lkdGg6dGhpcy5wZXJjZW50YWdlfSxjbGFzczp7XCJuby10cmFuc2l0aW9uXCI6dGhpcy5kcmFnZ2luZyxcImhhbmRsZS1hdC1taW5pbXVtXCI6dGhpcy5tb2RlbD09PXRoaXMubWlufX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1oYW5kbGVcIixzdHlsZTooZT17fSxlW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT10aGlzLnBlcmNlbnRhZ2UsZS5ib3JkZXJSYWRpdXM9dGhpcy5zcXVhcmU/XCIwXCI6XCI1MCVcIixlKSxjbGFzczp7ZHJhZ2dpbmc6dGhpcy5kcmFnZ2luZyxcImhhbmRsZS1hdC1taW5pbXVtXCI6IXRoaXMuZmlsbEhhbmRsZUFsd2F5cyYmdGhpcy5tb2RlbD09PXRoaXMubWlufSxhdHRyczp7dGFiaW5kZXg6dGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wP3RoaXMuZWRpdGFibGU/MDotMTp2b2lkIDB9LG9uOntrZXlkb3duOnRoaXMuX19vbktleURvd24sa2V5dXA6dGhpcy5fX29uS2V5VXB9fSxbdGhpcy5sYWJlbHx8dGhpcy5sYWJlbEFsd2F5cz90KFFDaGlwLHtzdGF0aWNDbGFzczpcInEtc2xpZGVyLWxhYmVsIG5vLXBvaW50ZXItZXZlbnRzXCIsY2xhc3M6e1wibGFiZWwtYWx3YXlzXCI6dGhpcy5sYWJlbEFsd2F5c30scHJvcHM6e3BvaW50aW5nOlwiZG93blwiLHNxdWFyZTohMCxkZW5zZTohMCxjb2xvcjp0aGlzLmxhYmVsQ29sb3J9fSxbdGhpcy5kaXNwbGF5VmFsdWVdKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1yaW5nXCJ9KV0pXX19fTtmdW5jdGlvbiB0aHJvdHRsZSh0LGUpe3ZvaWQgMD09PWUmJihlPTI1MCk7dmFyIGkscz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49W10sbz1hcmd1bWVudHMubGVuZ3RoO28tLTspbltvXT1hcmd1bWVudHNbb107cmV0dXJuIHM/aToocz0hMCxpPXQuYXBwbHkodGhpcyxuKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz0hMX0sZSksaSl9fWZ1bmN0aW9uIGNsb25lKHQpe3ZhciBlPUpTT04uc3RyaW5naWZ5KHQpO2lmKGUpcmV0dXJuIEpTT04ucGFyc2UoZSl9dmFyIFFDb2xvclBpY2tlcj17bmFtZTpcIlFDb2xvclBpY2tlclwiLG1peGluczpbUGFyZW50RmllbGRNaXhpbl0sZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt2YWx1ZTpbU3RyaW5nLE9iamVjdF0sZGVmYXVsdFZhbHVlOnt0eXBlOltTdHJpbmcsT2JqZWN0XSxkZWZhdWx0Om51bGx9LGZvcm1hdE1vZGVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYXV0b1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJhdXRvXCIsXCJoZXhcIixcInJnYlwiLFwiaGV4YVwiLFwicmdiYVwiXS5pbmNsdWRlcyh0KX19LGRpc2FibGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGRhcms6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt2aWV3OnRoaXMudmFsdWUmJlwic3RyaW5nXCIhPXR5cGVvZiB0aGlzLnZhbHVlP1wicmdiXCI6XCJoZXhcIixtb2RlbDp0aGlzLl9fcGFyc2VNb2RlbCh0aGlzLnZhbHVlfHx0aGlzLmRlZmF1bHRWYWx1ZSl9fSx3YXRjaDp7dmFsdWU6e2hhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX3BhcnNlTW9kZWwodHx8dGhpcy5kZWZhdWx0VmFsdWUpO2UuaGV4IT09dGhpcy5tb2RlbC5oZXgmJih0aGlzLm1vZGVsPWUpfSxkZWVwOiEwfX0sY29tcHV0ZWQ6e2ZvcmNlSGV4OmZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCI9PT10aGlzLmZvcm1hdE1vZGVsP251bGw6dGhpcy5mb3JtYXRNb2RlbC5pbmRleE9mKFwiaGV4XCIpPi0xfSxmb3JjZUFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuXCJhdXRvXCI9PT10aGlzLmZvcm1hdE1vZGVsP251bGw6dGhpcy5mb3JtYXRNb2RlbC5pbmRleE9mKFwiYVwiKT4tMX0saXNIZXg6ZnVuY3Rpb24oKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZX0saXNPdXRwdXRIZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuZm9yY2VIZXg/dGhpcy5mb3JjZUhleDp0aGlzLmlzSGV4fSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJiF0aGlzLnJlYWRvbmx5fSxoYXNBbHBoYTpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5mb3JjZUFscGhhP3RoaXMuZm9yY2VBbHBoYTp0aGlzLmlzSGV4P3RoaXMudmFsdWUudHJpbSgpLmxlbmd0aD43OnRoaXMudmFsdWUmJnZvaWQgMCE9PXRoaXMudmFsdWUuYX0sc3dhdGNoQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOlwicmdiYShcIit0aGlzLm1vZGVsLnIrXCIsXCIrdGhpcy5tb2RlbC5nK1wiLFwiK3RoaXMubW9kZWwuYitcIixcIisodm9pZCAwPT09dGhpcy5tb2RlbC5hPzEwMDp0aGlzLm1vZGVsLmEpLzEwMCtcIilcIn19LHNhdHVyYXRpb25TdHlsZTpmdW5jdGlvbigpe3JldHVybntiYWNrZ3JvdW5kOlwiaHNsKFwiK3RoaXMubW9kZWwuaCtcIiwxMDAlLDUwJSlcIn19LHNhdHVyYXRpb25Qb2ludGVyU3R5bGU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD17dG9wOjEwMS10aGlzLm1vZGVsLnYrXCIlXCJ9KVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5tb2RlbC5zK1wiJVwiLHR9LGlucHV0c0FycmF5OmZ1bmN0aW9uKCl7dmFyIHQ9W1wiclwiLFwiZ1wiLFwiYlwiXTtyZXR1cm4gdGhpcy5oYXNBbHBoYSYmdC5wdXNoKFwiYVwiKSx0fSxfX25lZWRzQm9yZGVyOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fX3NhdHVyYXRpb25DaGFuZ2U9dGhyb3R0bGUodGhpcy5fX3NhdHVyYXRpb25DaGFuZ2UsMjApfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yXCIsY2xhc3M6e2Rpc2FibGVkOnRoaXMuZGlzYWJsZSxcInEtY29sb3ItZGFya1wiOnRoaXMuZGFya319LFt0aGlzLl9fZ2V0U2F0dXJhdGlvbih0KSx0aGlzLl9fZ2V0U2xpZGVycyh0KSx0aGlzLl9fZ2V0SW5wdXRzKHQpXSl9LG1ldGhvZHM6e19fZ2V0U2F0dXJhdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtyZWY6XCJzYXR1cmF0aW9uXCIsc3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNhdHVyYXRpb24gbm9uLXNlbGVjdGFibGUgcmVsYXRpdmUtcG9zaXRpb24gb3ZlcmZsb3ctaGlkZGVuIGN1cnNvci1wb2ludGVyXCIsc3R5bGU6dGhpcy5zYXR1cmF0aW9uU3R5bGUsY2xhc3M6e3JlYWRvbmx5OiF0aGlzLmVkaXRhYmxlfSxvbjp0aGlzLmVkaXRhYmxlP3tjbGljazp0aGlzLl9fc2F0dXJhdGlvbkNsaWNrfTpudWxsLGRpcmVjdGl2ZXM6dGhpcy5lZGl0YWJsZT9be25hbWU6XCJ0b3VjaC1wYW5cIixtb2RpZmllcnM6e21pZ2h0UHJldmVudDohMH0sdmFsdWU6dGhpcy5fX3NhdHVyYXRpb25QYW59XTpudWxsfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3Itc2F0dXJhdGlvbi13aGl0ZSBhYnNvbHV0ZS1mdWxsXCJ9KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1zYXR1cmF0aW9uLWJsYWNrIGFic29sdXRlLWZ1bGxcIn0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZVwiLHN0eWxlOnRoaXMuc2F0dXJhdGlvblBvaW50ZXJTdHlsZX0sW3ZvaWQgMCE9PXRoaXMubW9kZWwuaGV4P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNhdHVyYXRpb24tY2lyY2xlXCJ9KTpudWxsXSldKX0sX19nZXRTbGlkZXJzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLXNsaWRlcnMgcm93IGl0ZW1zLWNlbnRlclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3Itc3dhdGNoIHEtbXQtc20gcS1tbC1tZCBxLW1iLXNtIG5vbi1zZWxlY3RhYmxlIG92ZXJmbG93LWhpZGRlblwifSxbdChcImRpdlwiLHtzdHlsZTp0aGlzLnN3YXRjaENvbG9yLHN0YXRpY0NsYXNzOlwiZml0XCJ9KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1wYS1zbVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItaHVlIG5vbi1zZWxlY3RhYmxlXCJ9LFt0KFFTbGlkZXIse3Byb3BzOnt2YWx1ZTp0aGlzLm1vZGVsLmgsY29sb3I6XCJ3aGl0ZVwiLG1pbjowLG1heDozNjAsZmlsbEhhbmRsZUFsd2F5czohMCxyZWFkb25seTohdGhpcy5lZGl0YWJsZX0sb246e2lucHV0OnRoaXMuX19vbkh1ZUNoYW5nZSxkcmFnZW5kOmZ1bmN0aW9uKHQpe3JldHVybiBlLl9fb25IdWVDaGFuZ2UodCwhMCl9fX0pXSksdGhpcy5oYXNBbHBoYT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1jb2xvci1hbHBoYSBub24tc2VsZWN0YWJsZVwifSxbdChRU2xpZGVyLHtwcm9wczp7dmFsdWU6dGhpcy5tb2RlbC5hLGNvbG9yOlwid2hpdGVcIixtaW46MCxtYXg6MTAwLGZpbGxIYW5kbGVBbHdheXM6ITAscmVhZG9ubHk6IXRoaXMuZWRpdGFibGV9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uTnVtZXJpY0NoYW5nZSh7dGFyZ2V0Ont2YWx1ZTp0fX0sXCJhXCIsMTAwKX0sZHJhZ2VuZDpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX29uTnVtZXJpY0NoYW5nZSh7dGFyZ2V0Ont2YWx1ZTp0fX0sXCJhXCIsMTAwLCEwKX19fSldKTpudWxsXSldKX0sX19nZXROdW1lcmljSW5wdXRzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaW5wdXRzQXJyYXkubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPVwiYVwiPT09aT8xMDA6MjU1O3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtY29sb3ItcGFkZGluZ1wifSxbdChcImlucHV0XCIse2F0dHJzOnt0eXBlOlwibnVtYmVyXCIsbWluOjAsbWF4OnMscmVhZG9ubHk6IWUuZWRpdGFibGUsdGFiaW5kZXg6ZS5lZGl0YWJsZT8wOi0xfSxzdGF0aWNDbGFzczpcImZ1bGwtd2lkdGggdGV4dC1jZW50ZXIgcS1uby1pbnB1dC1zcGlubmVyXCIsZG9tUHJvcHM6e3ZhbHVlOnZvaWQgMD09PWUubW9kZWwuaGV4P1wiXCI6TWF0aC5yb3VuZChlLm1vZGVsW2ldKX0sb246e2lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBlLl9fb25OdW1lcmljQ2hhbmdlKHQsaSxzKX0sYmx1cjpmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGl0YWJsZSYmZS5fX29uTnVtZXJpY0NoYW5nZSh0LGkscywhMCl9fX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWxhYmVsIHRleHQtY2VudGVyIHVwcGVyY2FzZVwifSxbaV0pXSl9KX0sX19nZXRJbnB1dHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItaW5wdXRzIHJvdyBpdGVtcy1jZW50ZXIgcS1weC1zbSBxLXBiLXNtXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtbXItc20gcm93IG5vLXdyYXBcIn0sXCJoZXhcIj09PXRoaXMudmlldz9bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSxbdChcImlucHV0XCIse2RvbVByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsLmhleH0sYXR0cnM6e3JlYWRvbmx5OiF0aGlzLmVkaXRhYmxlLHRhYmluZGV4OnRoaXMuZWRpdGFibGU/MDotMX0sb246e2NoYW5nZTp0aGlzLl9fb25IZXhDaGFuZ2UsYmx1cjpmdW5jdGlvbih0KXtyZXR1cm4gZS5lZGl0YWJsZSYmZS5fX29uSGV4Q2hhbmdlKHQsITApfX0sc3RhdGljQ2xhc3M6XCJmdWxsLXdpZHRoIHRleHQtY2VudGVyIHVwcGVyY2FzZVwifSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtY29sb3ItbGFiZWwgdGV4dC1jZW50ZXJcIn0sW1wiSEVYXCIrKHRoaXMuaGFzQWxwaGE/XCIgLyBBXCI6XCJcIildKV0pXTp0aGlzLl9fZ2V0TnVtZXJpY0lucHV0cyh0KSksdChcImRpdlwiLFt0KFFCdG4se3Byb3BzOntmbGF0OiEwLGRpc2FibGU6dGhpcy5kaXNhYmxlfSxvbjp7Y2xpY2s6dGhpcy5fX25leHRJbnB1dFZpZXd9LHN0YXRpY0NsYXNzOlwicS1wYS1ub25lXCJ9LFt0KFwic3ZnXCIse2F0dHJzOnt2aWV3Qm94OlwiMCAwIDI0IDI0XCJ9LHN0eWxlOnt3aWR0aDpcIjI0cHhcIixoZWlnaHQ6XCIyNHB4XCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIixkOlwiTTEyLDE4LjE3TDguODMsMTVMNy40MiwxNi40MUwxMiwyMUwxNi41OSwxNi40MUwxNS4xNywxNU0xMiw1LjgzTDE1LjE3LDlMMTYuNTgsNy41OUwxMiwzTDcuNDEsNy41OUw4LjgzLDlMMTIsNS44M1pcIn19KV0pXSldKV0pfSxfX29uU2F0dXJhdGlvbkNoYW5nZTpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpcy4kcmVmcy5zYXR1cmF0aW9uO2lmKHMpe3ZhciBuPXMuY2xpZW50V2lkdGgsbz1zLmNsaWVudEhlaWdodCxyPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1NYXRoLm1pbihuLE1hdGgubWF4KDAsdC1yLmxlZnQpKTt0aGlzLiRxLmkxOG4ucnRsJiYoYT1uLWEpO3ZhciBsPU1hdGgubWluKG8sTWF0aC5tYXgoMCxlLXIudG9wKSksYz1NYXRoLnJvdW5kKDEwMCphL24pLGg9TWF0aC5yb3VuZCgxMDAqTWF0aC5tYXgoMCxNYXRoLm1pbigxLC1sL28rMSkpKSx1PWhzdlRvUmdiKHtoOnRoaXMubW9kZWwuaCxzOmMsdjpoLGE6dGhpcy5oYXNBbHBoYT90aGlzLm1vZGVsLmE6dm9pZCAwfSk7dGhpcy5tb2RlbC5zPWMsdGhpcy5tb2RlbC52PWgsdGhpcy5fX3VwZGF0ZSh1LHJnYlRvSGV4KHUpLGkpfX0sX19vbkh1ZUNoYW5nZTpmdW5jdGlvbih0LGUpe3ZhciBpPWhzdlRvUmdiKHtoOnQ9TWF0aC5yb3VuZCh0KSxzOnRoaXMubW9kZWwucyx2OnRoaXMubW9kZWwudixhOnRoaXMuaGFzQWxwaGE/dGhpcy5tb2RlbC5hOnZvaWQgMH0pO3RoaXMubW9kZWwuaD10LHRoaXMuX191cGRhdGUoaSxyZ2JUb0hleChpKSxlKX0sX19vbk51bWVyaWNDaGFuZ2U6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49TnVtYmVyKHQudGFyZ2V0LnZhbHVlKTtpZighaXNOYU4obikpaWYoKG49TWF0aC5mbG9vcihuKSk8MHx8bj5pKXMmJnRoaXMuJGZvcmNlVXBkYXRlKCk7ZWxzZXt2YXIgbz17cjpcInJcIj09PWU/bjp0aGlzLm1vZGVsLnIsZzpcImdcIj09PWU/bjp0aGlzLm1vZGVsLmcsYjpcImJcIj09PWU/bjp0aGlzLm1vZGVsLmIsYTp0aGlzLmhhc0FscGhhP1wiYVwiPT09ZT9uOnRoaXMubW9kZWwuYTp2b2lkIDB9O2lmKFwiYVwiIT09ZSl7dmFyIHI9cmdiVG9Ic3Yobyk7dGhpcy5tb2RlbC5oPXIuaCx0aGlzLm1vZGVsLnM9ci5zLHRoaXMubW9kZWwudj1yLnZ9dGhpcy5fX3VwZGF0ZShvLHJnYlRvSGV4KG8pLHMpfX0sX19vbkhleENoYW5nZTpmdW5jdGlvbih0LGUpe3ZhciBpPXQudGFyZ2V0LnZhbHVlLHM9aS5sZW5ndGgsbj10aGlzLmhhc0FscGhhP1s1LDldOls0LDddO2lmKHM9PT1uWzBdfHxzPT09blsxXSl7dmFyIG89aGV4VG9SZ2IoaSkscj1yZ2JUb0hzdihvKTt0aGlzLm1vZGVsLmg9ci5oLHRoaXMubW9kZWwucz1yLnMsdGhpcy5tb2RlbC52PXIudix0aGlzLl9fdXBkYXRlKG8saSxlKX1lbHNlIGUmJnRoaXMuJGZvcmNlVXBkYXRlKCl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLG49dGhpcy5pc091dHB1dEhleD9lOnQ7dGhpcy5tb2RlbC5oZXg9ZSx0aGlzLm1vZGVsLnI9dC5yLHRoaXMubW9kZWwuZz10LmcsdGhpcy5tb2RlbC5iPXQuYix0aGlzLm1vZGVsLmE9dGhpcy5oYXNBbHBoYT90LmE6dm9pZCAwLHRoaXMuJGVtaXQoXCJpbnB1dFwiLG4pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aSYmSlNPTi5zdHJpbmdpZnkobikhPT1KU09OLnN0cmluZ2lmeShzLnZhbHVlKSYmcy4kZW1pdChcImNoYW5nZVwiLG4pfSl9LF9fbmV4dElucHV0VmlldzpmdW5jdGlvbigpe3RoaXMudmlldz1cImhleFwiPT09dGhpcy52aWV3P1wicmdiYVwiOlwiaGV4XCJ9LF9fcGFyc2VNb2RlbDpmdW5jdGlvbih0KXtpZihudWxsPT09dHx8dm9pZCAwPT09dClyZXR1cm57aDowLHM6MCx2OjAscjowLGc6MCxiOjAsaGV4OnZvaWQgMCxhOjEwMH07dmFyIGU9XCJzdHJpbmdcIj09dHlwZW9mIHQ/aGV4VG9SZ2IodC50cmltKCkpOmNsb25lKHQpO3JldHVybiB0aGlzLmZvcmNlQWxwaGE9PT0odm9pZCAwPT09ZS5hKSYmKGUuYT10aGlzLmZvcmNlQWxwaGE/MTAwOnZvaWQgMCksZS5oZXg9cmdiVG9IZXgoZSksT2JqZWN0LmFzc2lnbih7YToxMDB9LGUscmdiVG9Ic3YoZSkpfSxfX3NhdHVyYXRpb25QYW46ZnVuY3Rpb24odCl7dC5pc0ZpbmFsP3RoaXMuX19kcmFnU3RvcCh0KTp0LmlzRmlyc3Q/dGhpcy5fX2RyYWdTdGFydCh0KTp0aGlzLl9fZHJhZ01vdmUodCl9LF9fZHJhZ1N0YXJ0OmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQuZXZ0KSx0aGlzLnNhdHVyYXRpb25EcmFnZ2luZz0hMCx0aGlzLl9fc2F0dXJhdGlvbkNoYW5nZSh0KX0sX19kcmFnTW92ZTpmdW5jdGlvbih0KXt0aGlzLnNhdHVyYXRpb25EcmFnZ2luZyYmKHN0b3BBbmRQcmV2ZW50KHQuZXZ0KSx0aGlzLl9fc2F0dXJhdGlvbkNoYW5nZSh0KSl9LF9fZHJhZ1N0b3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztzdG9wQW5kUHJldmVudCh0LmV2dCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uuc2F0dXJhdGlvbkRyYWdnaW5nPSExfSwxMDApLHRoaXMuX19vblNhdHVyYXRpb25DaGFuZ2UodC5wb3NpdGlvbi5sZWZ0LHQucG9zaXRpb24udG9wLCEwKX0sX19zYXR1cmF0aW9uQ2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMuX19vblNhdHVyYXRpb25DaGFuZ2UodC5wb3NpdGlvbi5sZWZ0LHQucG9zaXRpb24udG9wKX0sX19zYXR1cmF0aW9uQ2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5zYXR1cmF0aW9uRHJhZ2dpbmd8fHRoaXMuX19vblNhdHVyYXRpb25DaGFuZ2UodC5wYWdlWC13aW5kb3cucGFnZVhPZmZzZXQsdC5wYWdlWS13aW5kb3cucGFnZVlPZmZzZXQsITApfX19LGNvbnRlbnRDc3M9e21heFdpZHRoOlwiOTV2d1wiLG1heEhlaWdodDpcIjk4dmhcIn0sUUNvbG9yPXtuYW1lOlwiUUNvbG9yXCIsbWl4aW5zOltGcmFtZU1peGluLERpc3BsYXlNb2RlTWl4aW5dLHByb3BzOnt2YWx1ZTp7cmVxdWlyZWQ6ITB9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSxkZWZhdWx0VmFsdWU6e3R5cGU6W1N0cmluZyxPYmplY3RdLGRlZmF1bHQ6bnVsbH0sZm9ybWF0TW9kZWw6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJhdXRvXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImF1dG9cIixcImhleFwiLFwicmdiXCIsXCJoZXhhXCIsXCJyZ2JhXCJdLmluY2x1ZGVzKHQpfX0sZGlzcGxheVZhbHVlOlN0cmluZyxva0xhYmVsOlN0cmluZyxjYW5jZWxMYWJlbDpTdHJpbmd9LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXshdGhpcy5kaXNhYmxlJiZ0aGlzLmlzUG9wb3ZlciYmKHRoaXMubW9kZWw9Y2xvbmUodCkpfX0sZGF0YTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaXNQb3BvdmVyP3t9Ont0cmFuc2l0aW9uOlwicS1tb2RhbFwifTtyZXR1cm4gdC5mb2N1c2VkPSExLHQubW9kZWw9Y2xvbmUodGhpcy52YWx1ZXx8dGhpcy5kZWZhdWx0VmFsdWUpLHR9LGNvbXB1dGVkOnthY3R1YWxWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc3BsYXlWYWx1ZT90aGlzLmRpc3BsYXlWYWx1ZTp0aGlzLnZhbHVlP1wic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3RoaXMudmFsdWU6XCJyZ2JcIisodm9pZCAwIT09dGhpcy52YWx1ZS5hP1wiYVwiOlwiXCIpK1wiKFwiK3RoaXMudmFsdWUucitcIixcIit0aGlzLnZhbHVlLmcrXCIsXCIrdGhpcy52YWx1ZS5iKyh2b2lkIDAhPT10aGlzLnZhbHVlLmE/XCIsXCIrdGhpcy52YWx1ZS5hLzEwMDpcIlwiKStcIilcIjpcIlwifSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP3RoaXMuZGVmYXVsdFZhbHVlOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJkpTT04uc3RyaW5naWZ5KHRoaXMuY29tcHV0ZWRDbGVhclZhbHVlKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMudmFsdWUpfSxtb2RhbEJ0bkNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sb3J9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLnBvcHVwJiZ0aGlzW3RoaXMuJHJlZnMucG9wdXAuc2hvd2luZz9cImhpZGVcIjpcInNob3dcIl0oKX0sc2hvdzpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGUpcmV0dXJuIHRoaXMuX19zZXRNb2RlbCh0aGlzLnZhbHVlfHx0aGlzLmRlZmF1bHRWYWx1ZSksdGhpcy4kcmVmcy5wb3B1cC5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5wb3B1cD90aGlzLiRyZWZzLnBvcHVwLmhpZGUoKTpQcm9taXNlLnJlc29sdmUoKX0sX19oYW5kbGVLZXlEb3duOmZ1bmN0aW9uKHQpe3N3aXRjaChnZXRFdmVudEtleSh0KSl7Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBzdG9wQW5kUHJldmVudCh0KSx0aGlzLnNob3coKTtjYXNlIDg6dGhpcy5pc0NsZWFyYWJsZSYmdGhpcy5jbGVhcigpfX0sX19vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHx0aGlzLmZvY3VzZWR8fCh0aGlzLm1vZGVsPWNsb25lKHRoaXMudmFsdWV8fHRoaXMuZGVmYXVsdFZhbHVlKSx0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kZW1pdChcImZvY3VzXCIpKX0sX19vbkJsdXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmZvY3VzZWQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UuJHJlZnMucG9wdXAmJmUuJHJlZnMucG9wdXAuc2hvd2luZyYmKHQ9PT1kb2N1bWVudC5ib2R5fHxlLiRyZWZzLnBvcHVwLiRlbC5jb250YWlucyh0KSl8fChlLl9fb25IaWRlKCksZS5oaWRlKCkpfSwxKX0sX19vbkhpZGU6ZnVuY3Rpb24odCxlKXsodHx8dGhpcy5pc1BvcG92ZXIpJiZ0aGlzLl9fdXBkYXRlKHQpLHRoaXMuZm9jdXNlZCYmKGU/dGhpcy4kZWwuZm9jdXMoKToodGhpcy4kZW1pdChcImJsdXJcIiksdGhpcy5mb2N1c2VkPSExKSl9LF9fc2V0TW9kZWw6ZnVuY3Rpb24odCxlKXt0aGlzLm1vZGVsPWNsb25lKHQpLChlfHx0aGlzLmlzUG9wb3ZlcikmJnRoaXMuX191cGRhdGUoZSl9LF9faGFzTW9kZWxDaGFuZ2VkOmZ1bmN0aW9uKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpIT09SlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSl9LF9fdXBkYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLl9faGFzTW9kZWxDaGFuZ2VkKCkmJihlLiRlbWl0KFwiaW5wdXRcIixlLm1vZGVsKSx0JiZlLiRlbWl0KFwiY2hhbmdlXCIsZS5tb2RlbCkpfSl9LF9fZ2V0UGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPVt0KFFDb2xvclBpY2tlcix7c3RhdGljQ2xhc3M6XCJuby1ib3JkZXJcIisoZT9cIiBmdWxsLXdpZHRoXCI6XCJcIikscHJvcHM6T2JqZWN0LmFzc2lnbih7fSx0aGlzLiRhdHRycyx7dmFsdWU6dGhpcy5tb2RlbCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGZvcm1hdE1vZGVsOnRoaXMuZm9ybWF0TW9kZWwsZGFyazp0aGlzLmRhcmssbm9QYXJlbnRGaWVsZDohMH0pLG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gaS4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gaS5fX3NldE1vZGVsKHQpfSl9fX0pXTtyZXR1cm4gZSYmcy5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1idXR0b25zIG1vZGFsLWJ1dHRvbnMtdG9wIHJvdyBmdWxsLXdpZHRoXCIsY2xhc3M6dGhpcy5kYXJrP1wiYmctYmxhY2tcIjpudWxsfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSksdChRQnRuLHtwcm9wczp7Y29sb3I6dGhpcy5tb2RhbEJ0bkNvbG9yLGZsYXQ6ITAsbGFiZWw6dGhpcy5jYW5jZWxMYWJlbHx8dGhpcy4kcS5pMThuLmxhYmVsLmNhbmNlbCxub1JpcHBsZTohMH0sb246e2NsaWNrOmZ1bmN0aW9uKCl7aS5fX29uSGlkZSghMSwhMCksaS5oaWRlKCl9fX0pLHRoaXMuZWRpdGFibGU/dChRQnRuLHtwcm9wczp7Y29sb3I6dGhpcy5tb2RhbEJ0bkNvbG9yLGZsYXQ6ITAsbGFiZWw6dGhpcy5va0xhYmVsfHx0aGlzLiRxLmkxOG4ubGFiZWwuc2V0LG5vUmlwcGxlOiEwLGRpc2FibGU6IXRoaXMubW9kZWx9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkhpZGUoITAsITApLGkuaGlkZSgpfX19KTpudWxsXSkpLHN9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXRGcmFtZSx7c3RhdGljQ2xhc3M6XCJxLWNvbG9yLWlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZHx8dGhpcy4kcmVmcy5wb3B1cCYmdGhpcy4kcmVmcy5wb3B1cC5zaG93aW5nLGZvY3VzYWJsZTohMCxsZW5ndGg6dGhpcy5hY3R1YWxWYWx1ZS5sZW5ndGh9LG5hdGl2ZU9uOntjbGljazp0aGlzLnRvZ2dsZSxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbkJsdXIsa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5mYWtlSW5wdXRDbGFzc2VzfSxbdGhpcy5mYWtlSW5wdXRWYWx1ZV0pLHRoaXMuaXNQb3BvdmVyP3QoUVBvcG92ZXIse3JlZjpcInBvcHVwXCIscHJvcHM6e2NvdmVyOiEwLGtlZXBPblNjcmVlbjohMCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6XCIxMDB2aFwifSxzbG90OlwiYWZ0ZXJcIixvbjp7c2hvdzp0aGlzLl9fb25Gb2N1cyxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITAsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCkpOnQoUU1vZGFsLHtyZWY6XCJwb3B1cFwiLHN0YXRpY0NsYXNzOlwid2l0aC1iYWNrZHJvcFwiLHByb3BzOntjb250ZW50Q3NzOmNvbnRlbnRDc3MsbWluaW1pemVkOiEwLHBvc2l0aW9uOm51bGwsdHJhbnNpdGlvbjp0aGlzLnRyYW5zaXRpb259LG9uOntkaXNtaXNzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITEsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCwhMCkpLHRoaXMuaXNDbGVhcmFibGU/dChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOntjbGljazp0aGlzLmNsZWFyfSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSk6bnVsbCx0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXQuZHJvcGRvd259LHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCJ9KV0pfX0sUUNvbnRleHRNZW51PXtuYW1lOlwiUUNvbnRleHRNZW51XCIscHJvcHM6e2Rpc2FibGU6Qm9vbGVhbn0sZGF0YTpmdW5jdGlvbigpe3JldHVybnttb2JpbGU6dGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGV9fSxtZXRob2RzOntoaWRlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuJHJlZnMucG9wdXApcmV0dXJuIHRoaXMubW9iaWxlJiZ0aGlzLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwibm9uLXNlbGVjdGFibGVcIiksdGhpcy4kcmVmcy5wb3B1cC5oaWRlKHQpfSxzaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5kaXNhYmxlfHwodGhpcy5tb2JpbGU/dGhpcy4kcmVmcy5wb3B1cCYmKHRoaXMuZXZlbnQ9dCx0aGlzLiRyZWZzLnBvcHVwLnNob3codCkpOnQmJihzdG9wQW5kUHJldmVudCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS4kcmVmcy5wb3B1cCYmKGUuZXZlbnQ9dCxlLiRyZWZzLnBvcHVwLnNob3codCkpfSwxMDApKSl9LF9fZGVza3RvcEJvZHlIaWRlOmZ1bmN0aW9uKHQpe3RoaXMuJGVsLmNvbnRhaW5zKHQudGFyZ2V0KXx8dGhpcy5oaWRlKHQpfSxfX2Rlc2t0b3BPblNob3c6ZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLHRoaXMuX19kZXNrdG9wQm9keUhpZGUsITApLGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5fX2Rlc2t0b3BCb2R5SGlkZSwhMCksdGhpcy4kZW1pdChcInNob3dcIix0aGlzLmV2ZW50KX0sX19kZXNrdG9wT25IaWRlOmZ1bmN0aW9uKHQpe2RvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsdGhpcy5fX2Rlc2t0b3BCb2R5SGlkZSwhMCksZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLl9fZGVza3RvcEJvZHlIaWRlLCEwKSx0aGlzLiRlbWl0KFwiaGlkZVwiLHRoaXMuZXZlbnQsdCl9LF9fbW9iaWxlVG91Y2hTdGFydEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9fbW9iaWxlQ2xlYW51cCgpLHQmJnQudG91Y2hlcyYmdC50b3VjaGVzLmxlbmd0aD4xfHwodGhpcy50YXJnZXQuY2xhc3NMaXN0LmFkZChcIm5vbi1zZWxlY3RhYmxlXCIpLHRoaXMudG91Y2hUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dCYmc3RvcEFuZFByZXZlbnQodCksZS5fX21vYmlsZUNsZWFudXAoKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5zaG93KHQpfSwxMCl9LDYwMCkpfSxfX21vYmlsZUNsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwibm9uLXNlbGVjdGFibGVcIiksY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lcil9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5tb2JpbGU/dChRTW9kYWwse3JlZjpcInBvcHVwXCIscHJvcHM6e21pbmltaXplZDohMH0sb246e3Nob3c6ZnVuY3Rpb24oKXtlLiRlbWl0KFwic2hvd1wiLGUuZXZlbnQpfSxoaWRlOmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJoaWRlXCIsZS5ldmVudCx0KX19fSx0aGlzLiRzbG90cy5kZWZhdWx0KTp0KFFQb3BvdmVyLHtyZWY6XCJwb3B1cFwiLHByb3BzOnthbmNob3JDbGljazohMSx0b3VjaFBvc2l0aW9uOiEwfSxvbjp7c2hvdzp0aGlzLl9fZGVza3RvcE9uU2hvdyxoaWRlOnRoaXMuX19kZXNrdG9wT25IaWRlfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMubW9iaWxlP3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC50YXJnZXQ9dC4kZWwucGFyZW50Tm9kZSx0LnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hzdGFydFwiLHQuX19tb2JpbGVUb3VjaFN0YXJ0SGFuZGxlciksW1widG91Y2hjYW5jZWxcIixcInRvdWNobW92ZVwiLFwidG91Y2hlbmRcIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0LnRhcmdldC5hZGRFdmVudExpc3RlbmVyKGUsdC5fX21vYmlsZUNsZWFudXApfSl9KToodGhpcy50YXJnZXQ9dGhpcy4kZWwucGFyZW50Tm9kZSx0aGlzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIix0aGlzLnNob3cpKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5tb2JpbGU/KHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdGhpcy5fX21vYmlsZVRvdWNoU3RhcnRIYW5kbGVyKSxbXCJ0b3VjaGNhbmNlbFwiLFwidG91Y2htb3ZlXCIsXCJ0b3VjaGVuZFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSx0Ll9fbW9iaWxlQ2xlYW51cCl9KSk6dGhpcy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsdGhpcy5zaG93KX19LG1vZGVsVmFsaWRhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09dHx8XCJudW1iZXJcIj09PWV8fFwic3RyaW5nXCI9PT1lfHxpc0RhdGUodCl9LGlubGluZT17dmFsdWU6e3ZhbGlkYXRvcjptb2RlbFZhbGlkYXRvcixyZXF1aXJlZDohMH0sZGVmYXVsdFZhbHVlOnt0eXBlOltTdHJpbmcsTnVtYmVyLERhdGVdLGRlZmF1bHQ6bnVsbH0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImRhdGVcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wiZGF0ZVwiLFwidGltZVwiLFwiZGF0ZXRpbWVcIl0uaW5jbHVkZXModCl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sZGFyazpCb29sZWFuLG1pbjp7dmFsaWRhdG9yOm1vZGVsVmFsaWRhdG9yLGRlZmF1bHQ6bnVsbH0sbWF4Ont2YWxpZGF0b3I6bW9kZWxWYWxpZGF0b3IsZGVmYXVsdDpudWxsfSxoZWFkZXJMYWJlbDpTdHJpbmcsZmlyc3REYXlPZldlZWs6TnVtYmVyLGZvcm1hdE1vZGVsOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYXV0b1wiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJhdXRvXCIsXCJkYXRlXCIsXCJudW1iZXJcIixcInN0cmluZ1wiXS5pbmNsdWRlcyh0KX19LGZvcm1hdDI0aDp7dHlwZTpbQm9vbGVhbixOdW1iZXJdLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuWyEwLCExLDBdLmluY2x1ZGVzKHQpfX0sZGVmYXVsdFZpZXc6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5XCIsXCJob3VyXCIsXCJtaW51dGVcIl0uaW5jbHVkZXModCl9fSxtaW5pbWFsOkJvb2xlYW59LGlucHV0PXtmb3JtYXQ6U3RyaW5nLG9rTGFiZWw6U3RyaW5nLGNhbmNlbExhYmVsOlN0cmluZyxkaXNwbGF5VmFsdWU6U3RyaW5nfSxNSUxMSVNFQ09ORFNfSU5fREFZPTg2NGU1LE1JTExJU0VDT05EU19JTl9IT1VSPTM2ZTUsTUlMTElTRUNPTkRTX0lOX01JTlVURT02ZTQsdG9rZW49L1xcWygoPzpbXlxcXVxcXFxdfFxcXFxdfFxcXFwpKilcXF18ZHsxLDR9fE17MSw0fXxtezEsMn18d3sxLDJ9fFFvfERvfER7MSw0fXxZWSg/OllZKT98SHsxLDJ9fGh7MSwyfXxzezEsMn18U3sxLDN9fFp7MSwyfXxhezEsMn18W0FRRXhYXS9nLHJlTXlTUUxEYXRlVGltZVN0cj0vXlswLTldezR9LVswLTldezJ9LVswLTldezJ9IFswLTldezJ9OlswLTldezJ9OlswLTldezJ9KC5bMC05XXs2fSk/JC87ZnVuY3Rpb24gZm9ybWF0VGltZXpvbmUodCxlKXt2b2lkIDA9PT1lJiYoZT1cIlwiKTt2YXIgaT10PjA/XCItXCI6XCIrXCIscz1NYXRoLmFicyh0KSxuPXMlNjA7cmV0dXJuIGkrcGFkKE1hdGguZmxvb3Iocy82MCkpK2UrcGFkKG4pfWZ1bmN0aW9uIHNldE1vbnRoKHQsZSl7dmFyIGk9bmV3IERhdGUodC5nZXRGdWxsWWVhcigpLGUsMCwwLDAsMCwwKS5nZXREYXRlKCk7dC5zZXRNb250aChlLTEsTWF0aC5taW4oaSx0LmdldERhdGUoKSkpfWZ1bmN0aW9uIGJ1aWxkRGF0ZVZhbCh0KXtyZXR1cm4gbmV3IERhdGUoaXNTdHJpbmcodCkmJm51bGwhPT1yZU15U1FMRGF0ZVRpbWVTdHIuZXhlYyh0KT90LnN1YnN0cmluZygwLDIzKS5yZXBsYWNlKFwiIFwiLFwiVFwiKTp0KX1mdW5jdGlvbiBnZXRDaGFuZ2UodCxlLGkpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPWk/MTotMTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtpZihcIm1vbnRoXCIhPT10KXt2YXIgaT1cInllYXJcIj09PXQ/XCJGdWxsWWVhclwiOmNhcGl0YWxpemUoXCJkYXlzXCI9PT10P1wiZGF0ZVwiOnQpO3NbXCJzZXRcIitpXShzW1wiZ2V0XCIraV0oKStuKmVbdF0pfWVsc2Ugc2V0TW9udGgocyxzLmdldE1vbnRoKCkrMStuKmUubW9udGgpfSksc31mdW5jdGlvbiBpc1ZhbGlkKHQpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiEwO3ZhciBlPURhdGUucGFyc2UodCk7cmV0dXJuITE9PT1pc05hTihlKX1mdW5jdGlvbiBidWlsZERhdGUodCxlKXtyZXR1cm4gYWRqdXN0RGF0ZShuZXcgRGF0ZSx0LGUpfWZ1bmN0aW9uIGdldERheU9mV2Vlayh0KXt2YXIgZT1idWlsZERhdGVWYWwodCkuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBnZXRXZWVrT2ZZZWFyKHQpe3ZhciBlPW5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpO2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs2KSU3KzMpO3ZhciBpPW5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSwwLDQpO2kuc2V0RGF0ZShpLmdldERhdGUoKS0oaS5nZXREYXkoKSs2KSU3KzMpO3ZhciBzPWUuZ2V0VGltZXpvbmVPZmZzZXQoKS1pLmdldFRpbWV6b25lT2Zmc2V0KCk7ZS5zZXRIb3VycyhlLmdldEhvdXJzKCktcyk7dmFyIG49KGUtaSkvKDcqTUlMTElTRUNPTkRTX0lOX0RBWSk7cmV0dXJuIDErTWF0aC5mbG9vcihuKX1mdW5jdGlvbiBpc0JldHdlZW5EYXRlcyh0LGUsaSxzKXt2b2lkIDA9PT1zJiYocz17fSk7dmFyIG49YnVpbGREYXRlVmFsKGUpLmdldFRpbWUoKSxvPWJ1aWxkRGF0ZVZhbChpKS5nZXRUaW1lKCkscj1idWlsZERhdGVWYWwodCkuZ2V0VGltZSgpO3JldHVybiBzLmluY2x1c2l2ZUZyb20mJm4tLSxzLmluY2x1c2l2ZVRvJiZvKysscj5uJiZyPG99ZnVuY3Rpb24gYWRkVG9EYXRlKHQsZSl7cmV0dXJuIGdldENoYW5nZSh0LGUsITApfWZ1bmN0aW9uIHN1YnRyYWN0RnJvbURhdGUodCxlKXtyZXR1cm4gZ2V0Q2hhbmdlKHQsZSwhMSl9ZnVuY3Rpb24gYWRqdXN0RGF0ZSh0LGUsaSl7dmFyIHM9YnVpbGREYXRlVmFsKHQpLG49XCJzZXRcIisoaT9cIlVUQ1wiOlwiXCIpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2lmKFwibW9udGhcIiE9PXQpe3ZhciBpPVwieWVhclwiPT09dD9cIkZ1bGxZZWFyXCI6dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3NbXCJcIituK2ldKGVbdF0pfWVsc2Ugc2V0TW9udGgocyxlLm1vbnRoKX0pLHN9ZnVuY3Rpb24gc3RhcnRPZkRhdGUodCxlKXt2YXIgaT1idWlsZERhdGVWYWwodCk7c3dpdGNoKGUpe2Nhc2VcInllYXJcIjppLnNldE1vbnRoKDApO2Nhc2VcIm1vbnRoXCI6aS5zZXREYXRlKDEpO2Nhc2VcImRheVwiOmkuc2V0SG91cnMoMCk7Y2FzZVwiaG91clwiOmkuc2V0TWludXRlcygwKTtjYXNlXCJtaW51dGVcIjppLnNldFNlY29uZHMoMCk7Y2FzZVwic2Vjb25kXCI6aS5zZXRNaWxsaXNlY29uZHMoMCl9cmV0dXJuIGl9ZnVuY3Rpb24gZW5kT2ZEYXRlKHQsZSl7dmFyIGk9YnVpbGREYXRlVmFsKHQpO3N3aXRjaChlKXtjYXNlXCJ5ZWFyXCI6aS5zZXRNb250aCgxMSk7Y2FzZVwibW9udGhcIjppLnNldERhdGUoZGF5c0luTW9udGgodCkpO2Nhc2VcImRheVwiOmkuc2V0SG91cnMoMjMpO2Nhc2VcImhvdXJcIjppLnNldE1pbnV0ZXMoNTkpO2Nhc2VcIm1pbnV0ZVwiOmkuc2V0U2Vjb25kcyg1OSk7Y2FzZVwic2Vjb25kXCI6aS5zZXRNaWxsaXNlY29uZHMoNTkpfXJldHVybiBpfWZ1bmN0aW9uIGdldE1heERhdGUodCl7Zm9yKHZhciBlPVtdLGk9YXJndW1lbnRzLmxlbmd0aC0xO2ktLSA+MDspZVtpXT1hcmd1bWVudHNbaSsxXTt2YXIgcz1idWlsZERhdGVWYWwodCk7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbih0KXtzPU1hdGgubWF4KHMsYnVpbGREYXRlVmFsKHQpKX0pLHN9ZnVuY3Rpb24gZ2V0TWluRGF0ZSh0KXtmb3IodmFyIGU9W10saT1hcmd1bWVudHMubGVuZ3RoLTE7aS0tID4wOyllW2ldPWFyZ3VtZW50c1tpKzFdO3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3M9TWF0aC5taW4ocyxidWlsZERhdGVWYWwodCkpfSksc31mdW5jdGlvbiBnZXREaWZmKHQsZSxpKXtyZXR1cm4odC5nZXRUaW1lKCktdC5nZXRUaW1lem9uZU9mZnNldCgpKk1JTExJU0VDT05EU19JTl9NSU5VVEUtKGUuZ2V0VGltZSgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSpNSUxMSVNFQ09ORFNfSU5fTUlOVVRFKSkvaX1mdW5jdGlvbiBnZXREYXRlRGlmZih0LGUsaSl7dm9pZCAwPT09aSYmKGk9XCJkYXlzXCIpO3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPWJ1aWxkRGF0ZVZhbChlKTtzd2l0Y2goaSl7Y2FzZVwieWVhcnNcIjpyZXR1cm4gcy5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKTtjYXNlXCJtb250aHNcIjpyZXR1cm4gMTIqKHMuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCkpK3MuZ2V0TW9udGgoKS1uLmdldE1vbnRoKCk7Y2FzZVwiZGF5c1wiOnJldHVybiBnZXREaWZmKHN0YXJ0T2ZEYXRlKHMsXCJkYXlcIiksc3RhcnRPZkRhdGUobixcImRheVwiKSxNSUxMSVNFQ09ORFNfSU5fREFZKTtjYXNlXCJob3Vyc1wiOnJldHVybiBnZXREaWZmKHN0YXJ0T2ZEYXRlKHMsXCJob3VyXCIpLHN0YXJ0T2ZEYXRlKG4sXCJob3VyXCIpLE1JTExJU0VDT05EU19JTl9IT1VSKTtjYXNlXCJtaW51dGVzXCI6cmV0dXJuIGdldERpZmYoc3RhcnRPZkRhdGUocyxcIm1pbnV0ZVwiKSxzdGFydE9mRGF0ZShuLFwibWludXRlXCIpLE1JTExJU0VDT05EU19JTl9NSU5VVEUpO2Nhc2VcInNlY29uZHNcIjpyZXR1cm4gZ2V0RGlmZihzdGFydE9mRGF0ZShzLFwic2Vjb25kXCIpLHN0YXJ0T2ZEYXRlKG4sXCJzZWNvbmRcIiksMWUzKX19ZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKHQpe3JldHVybiBnZXREYXRlRGlmZih0LHN0YXJ0T2ZEYXRlKHQsXCJ5ZWFyXCIpLFwiZGF5c1wiKSsxfWZ1bmN0aW9uIGluZmVyRGF0ZUZvcm1hdCh0KXtyZXR1cm4gaXNEYXRlKHQpP1wiZGF0ZVwiOlwibnVtYmVyXCI9PXR5cGVvZiB0P1wibnVtYmVyXCI6XCJzdHJpbmdcIn1mdW5jdGlvbiBjb252ZXJ0RGF0ZVRvRm9ybWF0KHQsZSxpKXtpZih0fHwwPT09dClzd2l0Y2goZSl7Y2FzZVwiZGF0ZVwiOnJldHVybiB0O2Nhc2VcIm51bWJlclwiOnJldHVybiB0LmdldFRpbWUoKTtkZWZhdWx0OnJldHVybiBmb3JtYXREYXRlKHQsaSl9fWZ1bmN0aW9uIGdldERhdGVCZXR3ZWVuKHQsZSxpKXt2YXIgcz1idWlsZERhdGVWYWwodCk7aWYoZSl7dmFyIG49YnVpbGREYXRlVmFsKGUpO2lmKHM8bilyZXR1cm4gbn1pZihpKXt2YXIgbz1idWlsZERhdGVWYWwoaSk7aWYocz5vKXJldHVybiBvfXJldHVybiBzfWZ1bmN0aW9uIGlzU2FtZURhdGUodCxlLGkpe3ZhciBzPWJ1aWxkRGF0ZVZhbCh0KSxuPWJ1aWxkRGF0ZVZhbChlKTtpZih2b2lkIDA9PT1pKXJldHVybiBzLmdldFRpbWUoKT09PW4uZ2V0VGltZSgpO3N3aXRjaChpKXtjYXNlXCJzZWNvbmRcIjppZihzLmdldFNlY29uZHMoKSE9PW4uZ2V0U2Vjb25kcygpKXJldHVybiExO2Nhc2VcIm1pbnV0ZVwiOmlmKHMuZ2V0TWludXRlcygpIT09bi5nZXRNaW51dGVzKCkpcmV0dXJuITE7Y2FzZVwiaG91clwiOmlmKHMuZ2V0SG91cnMoKSE9PW4uZ2V0SG91cnMoKSlyZXR1cm4hMTtjYXNlXCJkYXlcIjppZihzLmdldERhdGUoKSE9PW4uZ2V0RGF0ZSgpKXJldHVybiExO2Nhc2VcIm1vbnRoXCI6aWYocy5nZXRNb250aCgpIT09bi5nZXRNb250aCgpKXJldHVybiExO2Nhc2VcInllYXJcIjppZihzLmdldEZ1bGxZZWFyKCkhPT1uLmdldEZ1bGxZZWFyKCkpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJkYXRlIGlzU2FtZURhdGUgdW5rbm93biB1bml0IFwiK2kpfXJldHVybiEwfWZ1bmN0aW9uIGRheXNJbk1vbnRoKHQpe3JldHVybiBuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsMCkuZ2V0RGF0ZSgpfWZ1bmN0aW9uIGdldE9yZGluYWwodCl7aWYodD49MTEmJnQ8PTEzKXJldHVybiB0K1widGhcIjtzd2l0Y2godCUxMCl7Y2FzZSAxOnJldHVybiB0K1wic3RcIjtjYXNlIDI6cmV0dXJuIHQrXCJuZFwiO2Nhc2UgMzpyZXR1cm4gdCtcInJkXCJ9cmV0dXJuIHQrXCJ0aFwifXZhciBmb3JtYXR0ZXI9e1lZOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXRGdWxsWWVhcigpLDQpLnN1YnN0cigyKX0sWVlZWTpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0RnVsbFllYXIoKSw0KX0sTTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpKzF9LE1NOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXRNb250aCgpKzEpfSxNTU06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLm1vbnRoTmFtZXNTaG9ydHx8aTE4bi5sYW5nLmRhdGUubW9udGhzU2hvcnQpW3QuZ2V0TW9udGgoKV19LE1NTU06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLm1vbnRoTmFtZXN8fGkxOG4ubGFuZy5kYXRlLm1vbnRocylbdC5nZXRNb250aCgpXX0sUTpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKCh0LmdldE1vbnRoKCkrMSkvMyl9LFFvOmZ1bmN0aW9uKHQpe3JldHVybiBnZXRPcmRpbmFsKHRoaXMuUSh0KSl9LEQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpfSxEbzpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0T3JkaW5hbCh0LmdldERhdGUoKSl9LEREOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQodC5nZXREYXRlKCkpfSxEREQ6ZnVuY3Rpb24odCl7cmV0dXJuIGdldERheU9mWWVhcih0KX0sRERERDpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKGdldERheU9mWWVhcih0KSwzKX0sZDpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKX0sZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGRkZCh0KS5zbGljZSgwLDIpfSxkZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLmRheU5hbWVzU2hvcnR8fGkxOG4ubGFuZy5kYXRlLmRheXNTaG9ydClbdC5nZXREYXkoKV19LGRkZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9e30pLChlLmRheU5hbWVzfHxpMThuLmxhbmcuZGF0ZS5kYXlzKVt0LmdldERheSgpXX0sRTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXkoKXx8N30sdzpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0V2Vla09mWWVhcih0KX0sd3c6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZChnZXRXZWVrT2ZZZWFyKHQpKX0sSDpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSxISDpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0SG91cnMoKSl9LGg6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRIb3VycygpO3JldHVybiAwPT09ZT8xMjplPjEyP2UlMTI6ZX0saGg6ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0aGlzLmgodCkpfSxtOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0sbW06ZnVuY3Rpb24odCl7cmV0dXJuIHBhZCh0LmdldE1pbnV0ZXMoKSl9LHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0U2Vjb25kcygpfSxzczpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0U2Vjb25kcygpKX0sUzpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5mbG9vcih0LmdldE1pbGxpc2Vjb25kcygpLzEwMCl9LFNTOmZ1bmN0aW9uKHQpe3JldHVybiBwYWQoTWF0aC5mbG9vcih0LmdldE1pbGxpc2Vjb25kcygpLzEwKSl9LFNTUzpmdW5jdGlvbih0KXtyZXR1cm4gcGFkKHQuZ2V0TWlsbGlzZWNvbmRzKCksMyl9LEE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuSCh0KTwxMj9cIkFNXCI6XCJQTVwifSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLkgodCk8MTI/XCJhbVwiOlwicG1cIn0sYWE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuSCh0KTwxMj9cImEubS5cIjpcInAubS5cIn0sWjpmdW5jdGlvbih0KXtyZXR1cm4gZm9ybWF0VGltZXpvbmUodC5nZXRUaW1lem9uZU9mZnNldCgpLFwiOlwiKX0sWlo6ZnVuY3Rpb24odCl7cmV0dXJuIGZvcm1hdFRpbWV6b25lKHQuZ2V0VGltZXpvbmVPZmZzZXQoKSl9LFg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguZmxvb3IodC5nZXRUaW1lKCkvMWUzKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRUaW1lKCl9fTtmdW5jdGlvbiBmb3JtYXREYXRlKHQsZSxpKXtpZih2b2lkIDA9PT1lJiYoZT1cIllZWVktTU0tRERUSEg6bW06c3MuU1NTWlwiKSwwPT09dHx8dCl7dmFyIHM9YnVpbGREYXRlVmFsKHQpO3JldHVybiBlLnJlcGxhY2UodG9rZW4sZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbiBmb3JtYXR0ZXI/Zm9ybWF0dGVyW3RdKHMsaSk6dm9pZCAwPT09ZT90OmUuc3BsaXQoXCJcXFxcXVwiKS5qb2luKFwiXVwiKX0pfX1mdW5jdGlvbiBtYXRjaEZvcm1hdCh0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJcIiksdC5tYXRjaCh0b2tlbil9ZnVuY3Rpb24gY2xvbmUkMSh0KXtyZXR1cm4gaXNEYXRlKHQpP25ldyBEYXRlKHQuZ2V0VGltZSgpKTp0fXZhciBkYXRlPXtpc1ZhbGlkOmlzVmFsaWQsYnVpbGREYXRlOmJ1aWxkRGF0ZSxnZXREYXlPZldlZWs6Z2V0RGF5T2ZXZWVrLGdldFdlZWtPZlllYXI6Z2V0V2Vla09mWWVhcixpc0JldHdlZW5EYXRlczppc0JldHdlZW5EYXRlcyxhZGRUb0RhdGU6YWRkVG9EYXRlLHN1YnRyYWN0RnJvbURhdGU6c3VidHJhY3RGcm9tRGF0ZSxhZGp1c3REYXRlOmFkanVzdERhdGUsc3RhcnRPZkRhdGU6c3RhcnRPZkRhdGUsZW5kT2ZEYXRlOmVuZE9mRGF0ZSxnZXRNYXhEYXRlOmdldE1heERhdGUsZ2V0TWluRGF0ZTpnZXRNaW5EYXRlLGdldERhdGVEaWZmOmdldERhdGVEaWZmLGdldERheU9mWWVhcjpnZXREYXlPZlllYXIsaW5mZXJEYXRlRm9ybWF0OmluZmVyRGF0ZUZvcm1hdCxjb252ZXJ0RGF0ZVRvRm9ybWF0OmNvbnZlcnREYXRlVG9Gb3JtYXQsZ2V0RGF0ZUJldHdlZW46Z2V0RGF0ZUJldHdlZW4saXNTYW1lRGF0ZTppc1NhbWVEYXRlLGRheXNJbk1vbnRoOmRheXNJbk1vbnRoLGZvcm1hdHRlcjpmb3JtYXR0ZXIsZm9ybWF0RGF0ZTpmb3JtYXREYXRlLG1hdGNoRm9ybWF0Om1hdGNoRm9ybWF0LGNsb25lOmNsb25lJDF9LHJlRGF0ZT0vXlxcZHs0fVteXFxkXVxcZHsyfVteXFxkXVxcZHsyfS8sRGF0ZU1peGluPXtwcm9wczppbmxpbmUsY29tcHV0ZWQ6e2NvbXB1dGVkVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cImRhdGVcIj09PXRoaXMudHlwZSYmXCJzdHJpbmdcIj09PXRoaXMuZm9ybWF0TW9kZWwmJnJlRGF0ZS50ZXN0KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuc2xpY2UoMCwxMCkuc3BsaXQoL1teXFxkXS8pLmpvaW4oXCIvXCIpOnRoaXMudmFsdWV9LGNvbXB1dGVkRGVmYXVsdFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJkYXRlXCI9PT10aGlzLnR5cGUmJlwic3RyaW5nXCI9PT10aGlzLmZvcm1hdE1vZGVsJiZyZURhdGUudGVzdCh0aGlzLmRlZmF1bHRWYWx1ZSk/dGhpcy5kZWZhdWx0VmFsdWUuc2xpY2UoMCwxMCkuc3BsaXQoL1teXFxkXSsvKS5qb2luKFwiL1wiKTp0aGlzLmRlZmF1bHRWYWx1ZX0sY29tcHV0ZWREYXRlRm9ybWF0OmZ1bmN0aW9uKCl7aWYoXCJkYXRlXCI9PT10aGlzLnR5cGUmJlwic3RyaW5nXCI9PT10aGlzLmZvcm1hdE1vZGVsKXJldHVyblwiWVlZWS9NTS9ERCBISDptbTpzc1wifSxtb2RlbDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGlzVmFsaWQodGhpcy5jb21wdXRlZFZhbHVlKT9uZXcgRGF0ZSh0aGlzLmNvbXB1dGVkVmFsdWUpOnRoaXMuY29tcHV0ZWREZWZhdWx0VmFsdWU/bmV3IERhdGUodGhpcy5jb21wdXRlZERlZmF1bHRWYWx1ZSk6c3RhcnRPZkRhdGUobmV3IERhdGUsXCJkYXlcIil9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9Y29udmVydERhdGVUb0Zvcm1hdChnZXREYXRlQmV0d2Vlbih0LHRoaXMucG1pbix0aGlzLnBtYXgpLFwiYXV0b1wiPT09dGhpcy5mb3JtYXRNb2RlbD9pbmZlckRhdGVGb3JtYXQodGhpcy52YWx1ZSk6dGhpcy5mb3JtYXRNb2RlbCx0aGlzLmNvbXB1dGVkRGF0ZUZvcm1hdCk7dGhpcy4kZW1pdChcImlucHV0XCIsaSksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtpc1NhbWVEYXRlKGksZS52YWx1ZSl8fGUuJGVtaXQoXCJjaGFuZ2VcIixpKX0pfX0scG1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbj9uZXcgRGF0ZSh0aGlzLm1pbik6bnVsbH0scG1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heD9uZXcgRGF0ZSh0aGlzLm1heCk6bnVsbH0sdHlwZUhhc0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm5cImRhdGVcIj09PXRoaXMudHlwZXx8XCJkYXRldGltZVwiPT09dGhpcy50eXBlfSx0eXBlSGFzVGltZTpmdW5jdGlvbigpe3JldHVyblwidGltZVwiPT09dGhpcy50eXBlfHxcImRhdGV0aW1lXCI9PT10aGlzLnR5cGV9LHllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRGdWxsWWVhcigpfSxtb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldE1vbnRoKCkrMX0sZGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0RGF0ZSgpfSxtaW51dGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2RlbC5nZXRNaW51dGVzKCl9LGN1cnJlbnRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfSx5ZWFySW50ZXJ2YWw6ZnVuY3Rpb24oKXtyZXR1cm57bWluOm51bGwhPT10aGlzLnBtaW4/dGhpcy5wbWluLmdldEZ1bGxZZWFyKCk6KHRoaXMueWVhcnx8dGhpcy5jdXJyZW50WWVhciktODAsbWF4Om51bGwhPT10aGlzLnBtYXg/dGhpcy5wbWF4LmdldEZ1bGxZZWFyKCk6KHRoaXMueWVhcnx8dGhpcy5jdXJyZW50WWVhcikrODB9fSxtb250aEludGVydmFsOmZ1bmN0aW9uKCl7cmV0dXJue21pbjp0aGlzLm1vbnRoTWluLG1heDpudWxsIT09dGhpcy5wbWF4JiZ0aGlzLnBtYXguZ2V0RnVsbFllYXIoKT09PXRoaXMueWVhcj90aGlzLnBtYXguZ2V0TW9udGgoKToxMX19LG1vbnRoTWluOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLnBtaW4mJnRoaXMucG1pbi5nZXRGdWxsWWVhcigpPT09dGhpcy55ZWFyP3RoaXMucG1pbi5nZXRNb250aCgpOjB9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vZGVsLmdldE1vbnRoKCkrMSwwKS5nZXREYXRlKCl9LGVkaXRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGlzYWJsZSYmIXRoaXMucmVhZG9ubHl9LF9fbmVlZHNCb3JkZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LG1ldGhvZHM6e3RvZ2dsZUFtUG06ZnVuY3Rpb24oKXtpZih0aGlzLmVkaXRhYmxlKXt2YXIgdD10aGlzLm1vZGVsLmdldEhvdXJzKCksZT10aGlzLmFtPzEyOi0xMjt0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldEhvdXJzKHQrZSkpfX0sX19wYXJzZVR5cGVWYWx1ZTpmdW5jdGlvbih0LGUpe3JldHVyblwibW9udGhcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDEsMTIpOlwiZGF0ZVwiPT09dD9ub3JtYWxpemVUb0ludGVydmFsKGUsMSx0aGlzLmRheXNJbk1vbnRoKTpcInllYXJcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLHRoaXMueWVhckludGVydmFsLm1pbix0aGlzLnllYXJJbnRlcnZhbC5tYXgpOlwiaG91clwiPT09dD9ub3JtYWxpemVUb0ludGVydmFsKGUsMCwyMyk6XCJtaW51dGVcIj09PXQ/bm9ybWFsaXplVG9JbnRlcnZhbChlLDAsNTkpOnZvaWQgMH19fTtmdW5jdGlvbiBjb252ZXJ0VG9BbVBtKHQpe3JldHVybiAwPT09dD8xMjp0Pj0xMz90LTEyOnR9dmFyIFFEYXRldGltZVBpY2tlcj17bmFtZTpcIlFEYXRldGltZVBpY2tlclwiLG1peGluczpbRGF0ZU1peGluLFBhcmVudEZpZWxkTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOntkZWZhdWx0VmFsdWU6W1N0cmluZyxOdW1iZXIsRGF0ZV0sZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW59LGRpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dmlldzp0aGlzLl9fY2FsY1ZpZXcodGhpcy5kZWZhdWx0VmlldyksZHJhZ2dpbmc6ITEsY2VudGVyQ2xvY2tQb3M6MCxmYWtlVmFsdWU6e3llYXI6bnVsbCxtb250aDpudWxsfX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0fHwodGhpcy52aWV3PVtcImRhdGVcIixcImRhdGV0aW1lXCJdLmluY2x1ZGVzKHRoaXMudHlwZSk/XCJkYXlcIjpcImhvdXJcIil9LHZpZXc6ZnVuY3Rpb24oKXt0aGlzLl9fc2Nyb2xsVmlldyghMCl9LG1vZGVsOmZ1bmN0aW9uKCl7dGhpcy5mYWtlVmFsdWUubW9udGghPT10aGlzLm1vbnRoJiYodGhpcy5mYWtlVmFsdWUubW9udGg9dGhpcy5tb250aCx0aGlzLl9fc2Nyb2xsVmlldygpKSx0aGlzLmZha2VWYWx1ZS55ZWFyIT09dGhpcy55ZWFyJiYodGhpcy5mYWtlVmFsdWUueWVhcj10aGlzLnllYXIsdGhpcy5fX3Njcm9sbFZpZXcoKSl9fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmRpc2FibGUmJnQucHVzaChcImRpc2FibGVkXCIpLHRoaXMucmVhZG9ubHkmJnQucHVzaChcInJlYWRvbmx5XCIpLHRoaXMuZGFyayYmdC5wdXNoKFwicS1kYXRldGltZS1kYXJrXCIpLHRoaXMubWluaW1hbCYmdC5wdXNoKFwicS1kYXRldGltZS1taW5pbWFsXCIpLHRoaXMuY29sb3ImJnQucHVzaChcInRleHQtXCIrdGhpcy5jb2xvciksdH0sZGF0ZUFycm93OmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuJHEuaWNvbi5kYXRldGltZS5hcnJvd0xlZnQsdGhpcy4kcS5pY29uLmRhdGV0aW1lLmFycm93UmlnaHRdO3JldHVybiB0aGlzLiRxLmkxOG4ucnRsP3QucmV2ZXJzZSgpOnR9LGNvbXB1dGVkRm9ybWF0MjRoOmZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLmZvcm1hdDI0aD90aGlzLmZvcm1hdDI0aDp0aGlzLiRxLmkxOG4uZGF0ZS5mb3JtYXQyNGh9LGNvbXB1dGVkRmlyc3REYXlPZldlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5maXJzdERheU9mV2Vlaz90aGlzLmZpcnN0RGF5T2ZXZWVrOnRoaXMuJHEuaTE4bi5kYXRlLmZpcnN0RGF5T2ZXZWVrfSxoZWFkZXJEYXlOYW1lczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuJHEuaTE4bi5kYXRlLmRheXNTaG9ydCxlPXRoaXMuY29tcHV0ZWRGaXJzdERheU9mV2VlaztyZXR1cm4gZT4wP3Quc2xpY2UoZSw3KS5jb25jYXQodC5zbGljZSgwLGUpKTp0fSxmYWtlTW9kZWw6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy5mYWtlWWVhcix0aGlzLmZha2VNb250aC0xLDEpfSxmYWtlWWVhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZha2VWYWx1ZS55ZWFyfHx0aGlzLnllYXJ9LGZha2VNb250aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZha2VWYWx1ZS5tb250aHx8dGhpcy5tb250aH0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy5mYWtlWWVhcix0aGlzLmZha2VNb250aCwwKS5nZXREYXRlKCl9LG1vbnRoU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJcIit0aGlzLiRxLmkxOG4uZGF0ZS5tb250aHNTaG9ydFt0aGlzLm1vbnRoLTFdfSxtb250aFN0YW1wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHEuaTE4bi5kYXRlLm1vbnRoc1t0aGlzLmZha2VNb250aC0xXStcIiBcIit0aGlzLmZha2VZZWFyfSx3ZWVrRGF5U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZGVyTGFiZWx8fHRoaXMuJHEuaTE4bi5kYXRlLmRheXNbdGhpcy5tb2RlbC5nZXREYXkoKV19LGZpbGxlckRheXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZha2VNb2RlbC5nZXREYXkoKS10aGlzLmNvbXB1dGVkRmlyc3REYXlPZldlZWs7cmV0dXJuIHQ8MCYmKHQrPTcpLHR9LGJlZm9yZU1pbkRheXM6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5wbWluKXJldHVybiExO3ZhciB0PXRoaXMucG1pbi5nZXRGdWxsWWVhcigpLGU9dGhpcy5wbWluLmdldE1vbnRoKCkrMTtyZXR1cm4gdD09PXRoaXMuZmFrZVllYXImJmU9PT10aGlzLmZha2VNb250aD90aGlzLnBtaW4uZ2V0RGF0ZSgpLTE6KHQ+dGhpcy5mYWtlWWVhcnx8dD09PXRoaXMuZmFrZVllYXImJmU+dGhpcy5mYWtlTW9udGgpJiZ0aGlzLmRheXNJbk1vbnRofSxhZnRlck1heERheXM6ZnVuY3Rpb24oKXtpZihudWxsPT09dGhpcy5wbWF4KXJldHVybiExO3ZhciB0PXRoaXMucG1heC5nZXRGdWxsWWVhcigpLGU9dGhpcy5wbWF4LmdldE1vbnRoKCkrMTtyZXR1cm4gdD09PXRoaXMuZmFrZVllYXImJmU9PT10aGlzLmZha2VNb250aD90aGlzLmRheXNJbk1vbnRoLXRoaXMubWF4RGF5Oih0PHRoaXMuZmFrZVllYXJ8fHQ9PT10aGlzLmZha2VZZWFyJiZlPHRoaXMuZmFrZU1vbnRoKSYmdGhpcy5kYXlzSW5Nb250aH0sbWF4RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT10aGlzLnBtYXg/dGhpcy5wbWF4LmdldERhdGUoKTp0aGlzLmRheXNJbk1vbnRofSxkYXRlSW50ZXJ2YWw6ZnVuY3Rpb24oKXt2YXIgdD1udWxsPT09dGhpcy5wbWF4fHwhMT09PXRoaXMuYWZ0ZXJNYXhEYXlzPzA6dGhpcy5hZnRlck1heERheXM7cmV0dXJuIHRoaXMuYmVmb3JlTWluRGF5cz4wfHx0P3ttaW46dGhpcy5iZWZvcmVNaW5EYXlzPjA/dGhpcy5iZWZvcmVNaW5EYXlzKzE6MSxtYXg6dGhpcy5kYXlzSW5Nb250aC10fTp7bWluOjEsbWF4OnRoaXMuZGF5c0luTW9udGh9fSxob3VyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tb2RlbC5nZXRIb3VycygpO3JldHVybiB0aGlzLmNvbXB1dGVkRm9ybWF0MjRoP3Q6Y29udmVydFRvQW1QbSh0KX0sbWludXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9kZWwuZ2V0TWludXRlcygpfSxhbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsLmdldEhvdXJzKCk8PTExfSxjbG9ja1BvaW50ZXJTdHlsZTpmdW5jdGlvbigpe3ZhciB0PVwibWludXRlXCI9PT10aGlzLnZpZXcsZT10PzYwOjEyLGk9W1wicm90YXRlKFwiKyhNYXRoLnJvdW5kKCh0P3RoaXMubWludXRlOnRoaXMuaG91cikqKDM2MC9lKSktMTgwKStcImRlZylcIl07cmV0dXJuIHR8fCF0aGlzLmNvbXB1dGVkRm9ybWF0MjRofHx0aGlzLmhvdXI+MCYmdGhpcy5ob3VyPDEzfHxpLnB1c2goXCJzY2FsZSguNywgLjcpXCIpLHt0cmFuc2Zvcm06aS5qb2luKFwiIFwiKX19LGlzVmFsaWQ6ZnVuY3Rpb24oKXtyZXR1cm4gaXNWYWxpZCh0aGlzLnZhbHVlKX0sdG9kYXk6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gaXNTYW1lRGF0ZSh0LHRoaXMuZmFrZU1vZGVsLFwibW9udGhcIik/dC5nZXREYXRlKCk6LTF9fSxtZXRob2RzOntzZXRZZWFyOmZ1bmN0aW9uKHQsZSl7dGhpcy5lZGl0YWJsZSYmKGV8fCh0aGlzLnZpZXc9XCJtb250aFwiKSx0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldEZ1bGxZZWFyKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcInllYXJcIix0KSkpKX0sc2V0TW9udGg6ZnVuY3Rpb24odCxlKXt0aGlzLmVkaXRhYmxlJiYoZXx8KHRoaXMudmlldz1cImRheVwiKSx0aGlzLm1vZGVsPWFkanVzdERhdGUodGhpcy5tb2RlbCx7bW9udGg6dH0pKX0sbW92ZUZha2VNb250aDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmZha2VNb250aCsodD4wPzE6LTEpLGk9dGhpcy5mYWtlWWVhcjtpZihlPDE/KGU9MTIsaS09MSk6ZT4xMiYmKGU9MSxpKz0xKSxudWxsIT09dGhpcy5wbWluJiZ0PjApe3ZhciBzPXRoaXMucG1pbi5nZXRGdWxsWWVhcigpLG49dGhpcy5wbWluLmdldE1vbnRoKCkrMTtpPHM/KGk9cyxlPW4pOmk9PT1zJiZlPG4mJihlPW4pfWlmKG51bGwhPT10aGlzLnBtYXgmJnQ8MCl7dmFyIG89dGhpcy5wbWF4LmdldEZ1bGxZZWFyKCkscj10aGlzLnBtYXguZ2V0TW9udGgoKSsxO2k+bz8oaT1vLGU9cik6aT09PW8mJmU+ciYmKGU9cil9dGhpcy5mYWtlVmFsdWUueWVhcj1pLHRoaXMuZmFrZVZhbHVlLm1vbnRoPWV9LHNldERheTpmdW5jdGlvbih0LGUsaSxzKXtpZih0aGlzLmVkaXRhYmxlKXtpZihpJiZzKXt2YXIgbj1hZGp1c3REYXRlKHRoaXMubW9kZWwse21vbnRoOnN9KTtuLnNldEZ1bGxZZWFyKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcInllYXJcIixpKSksbi5zZXREYXRlKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcImRhdGVcIix0KSksdGhpcy5tb2RlbD1ufWVsc2UgdGhpcy5tb2RlbD1uZXcgRGF0ZShuZXcgRGF0ZSh0aGlzLm1vZGVsKS5zZXREYXRlKHRoaXMuX19wYXJzZVR5cGVWYWx1ZShcImRhdGVcIix0KSkpO2V8fFwiZGF0ZVwiIT09dGhpcy50eXBlP2V8fCh0aGlzLnZpZXc9XCJob3VyXCIpOih0aGlzLiRlbWl0KFwiY2FuQ2xvc2VcIiksdGhpcy5taW5pbWFsJiZ0aGlzLnNldFZpZXcodGhpcy5kZWZhdWx0VmlldykpfX0sc2V0SG91cjpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYodD10aGlzLl9fcGFyc2VUeXBlVmFsdWUoXCJob3VyXCIsdCksIXRoaXMuY29tcHV0ZWRGb3JtYXQyNGgmJnQ8MTImJiF0aGlzLmFtJiYodCs9MTIpLHRoaXMubW9kZWw9bmV3IERhdGUobmV3IERhdGUodGhpcy5tb2RlbCkuc2V0SG91cnModCkpKX0sc2V0TWludXRlOmZ1bmN0aW9uKHQpe3RoaXMuZWRpdGFibGUmJih0aGlzLm1vZGVsPW5ldyBEYXRlKG5ldyBEYXRlKHRoaXMubW9kZWwpLnNldE1pbnV0ZXModGhpcy5fX3BhcnNlVHlwZVZhbHVlKFwibWludXRlXCIsdCkpKSl9LHNldFZpZXc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2NhbGNWaWV3KHQpO3RoaXMudmlldyE9PWUmJih0aGlzLnZpZXc9ZSl9LF9fY2FsY1ZpZXc6ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVwidGltZVwiOnJldHVybltcImhvdXJcIixcIm1pbnV0ZVwiXS5pbmNsdWRlcyh0KT90OlwiaG91clwiO2Nhc2VcImRhdGVcIjpyZXR1cm5bXCJ5ZWFyXCIsXCJtb250aFwiLFwiZGF5XCJdLmluY2x1ZGVzKHQpP3Q6XCJkYXlcIjtkZWZhdWx0OnJldHVybltcInllYXJcIixcIm1vbnRoXCIsXCJkYXlcIixcImhvdXJcIixcIm1pbnV0ZVwiXS5pbmNsdWRlcyh0KT90OlwiZGF5XCJ9fSxfX3BhZDpmdW5jdGlvbih0LGUpe3JldHVybih0PDEwP2V8fFwiMFwiOlwiXCIpK3R9LF9fc2Nyb2xsVmlldzpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKFwieWVhclwiPT09dGhpcy52aWV3fHxcIm1vbnRoXCI9PT10aGlzLnZpZXcpe3QmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLl9fc2Nyb2xsVmlldygpfSwyMDApO3ZhciBpPXRoaXMuJHJlZnMuc2VsZWN0b3Iscz1pP2kucXVlcnlTZWxlY3RvcihcIi5xLWJ0bjpub3QoLmFjdGl2ZSlcIik6bnVsbCxuPWk/aS5xdWVyeVNlbGVjdG9yKFwiLnEtYnRuLmFjdGl2ZVwiKTpudWxsLG89aT9pLm9mZnNldEhlaWdodDowO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIHQ9XCJ5ZWFyXCI9PT1lLnZpZXc/ZS55ZWFyLWUueWVhckludGVydmFsLm1pbjplLm1vbnRoLWUubW9udGhNaW4tMTtvJiZuJiYoaS5zY3JvbGxUb3A9dCoocz9zLm9mZnNldEhlaWdodDowKSsobi5vZmZzZXRIZWlnaHQtbykvMil9KX19LF9fZHJhZ1N0YXJ0OmZ1bmN0aW9uKHQsZSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9dGhpcy4kcmVmcy5jbG9jayxzPW9mZnNldChpKTt0aGlzLmNlbnRlckNsb2NrUG9zPXt0b3A6cy50b3AraGVpZ2h0KGkpLzIsbGVmdDpzLmxlZnQrd2lkdGgoaSkvMn0sdGhpcy5kcmFnZ2luZz0hMCx0aGlzLl9fdXBkYXRlQ2xvY2sodCxlKX0sX19kcmFnTW92ZTpmdW5jdGlvbih0KXt0aGlzLmRyYWdnaW5nJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy5fX3VwZGF0ZUNsb2NrKHQpKX0sX19kcmFnU3RvcDpmdW5jdGlvbih0LGUpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZHJhZ2dpbmc9ITEsdm9pZCAwIT09dCYmdGhpcy5fX3VwZGF0ZUNsb2NrKHQsZSksXCJtaW51dGVcIj09PXRoaXMudmlldz8odGhpcy4kZW1pdChcImNhbkNsb3NlXCIpLHRoaXMubWluaW1hbCYmdGhpcy5zZXRWaWV3KHRoaXMuZGVmYXVsdFZpZXcpKTp0aGlzLnZpZXc9XCJtaW51dGVcIn0sX191cGRhdGVDbG9jazpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUpcmV0dXJuIHRoaXNbXCJob3VyXCI9PT10aGlzLnZpZXc/XCJzZXRIb3VyXCI6XCJzZXRNaW51dGVcIl0oZSk7dmFyIGk9cG9zaXRpb24odCkscz1NYXRoLmFicyhpLnRvcC10aGlzLmNlbnRlckNsb2NrUG9zLnRvcCksbj1NYXRoLnNxcnQoTWF0aC5wb3coTWF0aC5hYnMoaS50b3AtdGhpcy5jZW50ZXJDbG9ja1Bvcy50b3ApLDIpK01hdGgucG93KE1hdGguYWJzKGkubGVmdC10aGlzLmNlbnRlckNsb2NrUG9zLmxlZnQpLDIpKSxvPU1hdGguYXNpbihzL24pKigxODAvTWF0aC5QSSk7aWYobz1pLnRvcDx0aGlzLmNlbnRlckNsb2NrUG9zLnRvcD90aGlzLmNlbnRlckNsb2NrUG9zLmxlZnQ8aS5sZWZ0PzkwLW86MjcwK286dGhpcy5jZW50ZXJDbG9ja1Bvcy5sZWZ0PGkubGVmdD9vKzkwOjI3MC1vLFwiaG91clwiPT09dGhpcy52aWV3KXt2YXIgcj1NYXRoLnJvdW5kKG8vMzApO3RoaXMuY29tcHV0ZWRGb3JtYXQyNGgmJihyP248ODUmJihyKz0xMik6cj1uPDg1PzA6MTIpLHRoaXMuc2V0SG91cihyKX1lbHNlIHRoaXMuc2V0TWludXRlKE1hdGgucm91bmQoby82KSl9LF9fcmVwZWF0VGltZW91dDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMTAwLDMwMC10KnQqMTApfSxfX2dldFRvcFNlY3Rpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVt0aGlzLnR5cGVIYXNEYXRlP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXdlZWtkYXlzdHJpbmdcIn0sW3RoaXMud2Vla0RheVN0cmluZ10pOnZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sXCJ9KV07aWYodGhpcy50eXBlSGFzRGF0ZSl7dmFyIHM9W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWRhdGVzdHJpbmcgcm93IGp1c3RpZnktY2VudGVyIGl0ZW1zLWVuZFwifSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmsgc21hbGwgY29sLWF1dG8gY29sLW1kLTEyXCIsY2xhc3M6e2FjdGl2ZTpcIm1vbnRoXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTszOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNb250aChlLm1vbnRoLTEsITApKTo0MD09PWl8fDM3PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNb250aChlLm1vbnRoKzEsITApKToxMyE9PWkmJjIwIT09aXx8KGUudmlldz1cIm1vbnRoXCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJtb250aFwifX19LFt0aGlzLm1vbnRoU3RyaW5nXSldKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGluayBjb2wtYXV0byBjb2wtbWQtMTJcIixjbGFzczp7YWN0aXZlOlwiZGF5XCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTszNz09PWl8fDM4PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXREYXkoZS5kYXktKDM3PT09aT8xOjcpLCEwKSk6Mzk9PT1pfHw0MD09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0RGF5KGUuZGF5KygzOT09PWk/MTo3KSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwiZGF5XCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJkYXlcIn19fSxbdGhpcy5kYXldKV0pLHQoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1saW5rIHNtYWxsIGNvbC1hdXRvIGNvbC1tZC0xMlwiLGNsYXNzOnthY3RpdmU6XCJ5ZWFyXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTszOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRZZWFyKGUueWVhci0xLCEwKSk6NDA9PT1pfHwzNz09PWk/KHN0b3BBbmRQcmV2ZW50KHQpLGUuc2V0WWVhcihlLnllYXIrMSwhMCkpOjEzIT09aSYmMjAhPT1pfHwoZS52aWV3PVwieWVhclwiKX19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp0aGlzLmRpc2FibGU/e306e2NsaWNrOmZ1bmN0aW9uKCl7ZS52aWV3PVwieWVhclwifX19LFt0aGlzLnllYXJdKV0pXSldO2kucHVzaCh0KFwiZGl2XCIscykpfWlmKHRoaXMudHlwZUhhc1RpbWUpe3ZhciBuPSF0aGlzLmNvbXB1dGVkRm9ybWF0MjRoJiZ0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYW1wbSBjb2x1bW5cIixhdHRyczp7dGFiaW5kZXg6MH0sb246dGhpcy5fX2FtUG1FdmVudHN9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGlua1wiLGNsYXNzOnthY3RpdmU6dGhpcy5hbX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOntjbGljazp0aGlzLnRvZ2dsZUFtUG19fSxbXCJBTVwiXSldKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtbGlua1wiLGNsYXNzOnthY3RpdmU6IXRoaXMuYW19fSxbdChcInNwYW5cIix7YXR0cnM6e3RhYmluZGV4Oi0xfSxvbjp7Y2xpY2s6dGhpcy50b2dnbGVBbVBtfX0sW1wiUE1cIl0pXSldKSxvPVt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcImNvbC1hdXRvXCIsc3R5bGU6e3RleHRBbGlnbjpcInJpZ2h0XCJ9fSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixzdHlsZTp7dGV4dEFsaWduOlwicmlnaHRcIn0sY2xhc3M6e2FjdGl2ZTpcImhvdXJcIj09PXRoaXMudmlld30sYXR0cnM6e3RhYmluZGV4OjB9LG9uOntrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPWdldEV2ZW50S2V5KHQpOzQwPT09aXx8Mzc9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldEhvdXIoZS5ob3VyLTEsITApKTozOD09PWl8fDM5PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRIb3VyKGUuaG91cisxLCEwKSk6MTMhPT1pJiYyMCE9PWl8fChlLnZpZXc9XCJob3VyXCIpfX19LFt0KFwic3BhblwiLHthdHRyczp7dGFiaW5kZXg6LTF9LG9uOnRoaXMuZGlzYWJsZT97fTp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnZpZXc9XCJob3VyXCJ9fX0sW3RoaXMuY29tcHV0ZWRGb3JtYXQyNGg/dGhpcy5fX3BhZCh0aGlzLmhvdXIpOnRoaXMuaG91cl0pXSldKSx0KFwic3BhblwiLHtzdHlsZTpcIm9wYWNpdHk6MC42O1wifSxbXCI6XCJdKSx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcImNvbC1hdXRvIHJvdyBuby13cmFwIGl0ZW1zLWNlbnRlclwiLHN0eWxlOnt0ZXh0QWxpZ246XCJsZWZ0XCJ9fSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWxpbmtcIixzdHlsZTp7dGV4dEFsaWduOlwibGVmdFwifSxjbGFzczp7YWN0aXZlOlwibWludXRlXCI9PT10aGlzLnZpZXd9LGF0dHJzOnt0YWJpbmRleDowfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgaT1nZXRFdmVudEtleSh0KTs0MD09PWl8fDM3PT09aT8oc3RvcEFuZFByZXZlbnQodCksZS5zZXRNaW51dGUoZS5taW51dGUtMSwhMCkpOjM4PT09aXx8Mzk9PT1pPyhzdG9wQW5kUHJldmVudCh0KSxlLnNldE1pbnV0ZShlLm1pbnV0ZSsxLCEwKSk6MTMhPT1pJiYyMCE9PWl8fChlLnZpZXc9XCJtaW51dGVcIil9fX0sW3QoXCJzcGFuXCIse2F0dHJzOnt0YWJpbmRleDotMX0sb246dGhpcy5kaXNhYmxlP3t9OntjbGljazpmdW5jdGlvbigpe2Uudmlldz1cIm1pbnV0ZVwifX19LFt0aGlzLl9fcGFkKHRoaXMubWludXRlKV0pXSksbl0pXTtpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtdGltZSByb3cgc2Nyb2xsIGZsZXgtY2VudGVyXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1jbG9ja3N0cmluZyBjb2wgcm93IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0XCJ9LG8pXSkpfXJldHVybiBpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWhlYWRlciBjb2x1bW4gbm8td3JhcCBpdGVtcy1jZW50ZXJcIn0saSl9LF9fZ2V0WWVhclZpZXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMsaT1bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbC1ncm93XCJ9KV0scz1mdW5jdGlvbihzKXtpLnB1c2godChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYnRuIG5vLWJvcmRlci1yYWRpdXNcIixjbGFzczp7YWN0aXZlOnM9PT1lLnllYXJ9LGF0dHJzOnt0YWJpbmRleDotMX0scHJvcHM6e2ZsYXQ6ITAsZGlzYWJsZTohZS5lZGl0YWJsZX0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5zZXRZZWFyKHMpfX19LFtzXSkpfSxuPXRoaXMueWVhckludGVydmFsLm1pbjtuPD10aGlzLnllYXJJbnRlcnZhbC5tYXg7bisrKXMobik7cmV0dXJuIGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWdyb3dcIn0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS12aWV3LXllYXIgZml0IGNvbHVtbiBuby13cmFwXCJ9LGkpfSxfX2dldE1vbnRoVmlldzpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxpPVt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWdyb3dcIn0pXSxzPWZ1bmN0aW9uKHMpe2kucHVzaCh0KFFCdG4se3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1idG4gbm8tYm9yZGVyLXJhZGl1c1wiLGNsYXNzOnthY3RpdmU6cysxPT09ZS5tb250aH0sYXR0cnM6e3RhYmluZGV4Oi0xfSxwcm9wczp7ZmxhdDohMCxkaXNhYmxlOiFlLmVkaXRhYmxlfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLnNldE1vbnRoKHMrMSl9fX0sW2UuJHEuaTE4bi5kYXRlLm1vbnRoc1tzXV0pKX0sbj10aGlzLm1vbnRoSW50ZXJ2YWwubWluO248PXRoaXMubW9udGhJbnRlcnZhbC5tYXg7bisrKXMobik7cmV0dXJuIGkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sLWdyb3dcIn0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS12aWV3LW1vbnRoIGZpdCBjb2x1bW4gbm8td3JhcFwifSxpKX0sX19nZXREYXlWaWV3OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLGk9W10scz10aGlzLmZha2VNb250aD09PXRoaXMubW9udGgmJnRoaXMuZmFrZVllYXI9PT10aGlzLnllYXI/dGhpcy5kYXk6LTEsbj0xO248PXRoaXMuZmlsbGVyRGF5cztuKyspaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWZpbGxlcmRheVwifSkpO2lmKHRoaXMubWluKWZvcih2YXIgbz0xO288PXRoaXMuYmVmb3JlTWluRGF5cztvKyspaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyIGp1c3RpZnktY2VudGVyIGRpc2FibGVkXCIsY2xhc3M6e1wicS1kYXRldGltZS1kYXktYWN0aXZlXCI6ZS5pc1ZhbGlkJiZvPT09c319LFt0KFwic3BhblwiLFtvXSldKSk7Zm9yKHZhciByPXRoaXMuZGF0ZUludGVydmFsLGE9ci5taW4sbD1yLm1heCxjPWZ1bmN0aW9uKG4pe2kucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlclwiLGNsYXNzOltlLmNvbG9yJiZuPT09cz9cInRleHQtXCIrZS5jb2xvcjpudWxsLHtcInEtZGF0ZXRpbWUtZGF5LWFjdGl2ZVwiOmUuaXNWYWxpZCYmbj09PXMsXCJxLWRhdGV0aW1lLWRheS10b2RheVwiOm49PT1lLnRvZGF5LGRpc2FibGVkOiFlLmVkaXRhYmxlfV0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5zZXREYXkobiwhMSxlLmZha2VZZWFyLGUuZmFrZU1vbnRoKX19fSxbdChcInNwYW5cIixbbl0pXSkpfSxoPWE7aDw9bDtoKyspYyhoKTtpZih0aGlzLm1heClmb3IodmFyIHU9MTt1PD10aGlzLmFmdGVyTWF4RGF5czt1KyspaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgaXRlbXMtY2VudGVyIGNvbnRlbnQtY2VudGVyIGp1c3RpZnktY2VudGVyIGRpc2FibGVkXCIsY2xhc3M6e1wicS1kYXRldGltZS1kYXktYWN0aXZlXCI6ZS5pc1ZhbGlkJiZ1K2UubWF4RGF5PT09c319LFt0KFwic3BhblwiLFt1K2UubWF4RGF5XSldKSk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXZpZXctZGF5XCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicm93IGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlclwifSxbdChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYXJyb3dcIixhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOntyb3VuZDohMCxkZW5zZTohMCxmbGF0OiEwLGljb246dGhpcy5kYXRlQXJyb3dbMF0scmVwZWF0VGltZW91dDp0aGlzLl9fcmVwZWF0VGltZW91dCxkaXNhYmxlOnRoaXMuYmVmb3JlTWluRGF5cz4wfHx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHl9LG9uOntjbGljazpmdW5jdGlvbigpe2UubW92ZUZha2VNb250aCgtMSl9fX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1kYXRldGltZS1tb250aC1zdGFtcFwifSxbdGhpcy5tb250aFN0YW1wXSksdChRQnRuLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtYXJyb3dcIixhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOntyb3VuZDohMCxkZW5zZTohMCxmbGF0OiEwLGljb246dGhpcy5kYXRlQXJyb3dbMV0scmVwZWF0VGltZW91dDp0aGlzLl9fcmVwZWF0VGltZW91dCxkaXNhYmxlOnRoaXMuYWZ0ZXJNYXhEYXlzPjB8fHRoaXMuZGlzYWJsZXx8dGhpcy5yZWFkb25seX0sb246e2NsaWNrOmZ1bmN0aW9uKCl7ZS5tb3ZlRmFrZU1vbnRoKDEpfX19KV0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXdlZWtkYXlzIHJvdyBuby13cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0XCJ9LHRoaXMuaGVhZGVyRGF5TmFtZXMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0KFwiZGl2XCIsW2VdKX0pKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZS1kYXlzIHJvdyB3cmFwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGNvbnRlbnQtY2VudGVyXCJ9LGkpXSl9LF9fZ2V0Q2xvY2tWaWV3OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXTtpZihcImhvdXJcIj09PXRoaXMudmlldyl7dmFyIHMsbixvPVwiXCI7dGhpcy5jb21wdXRlZEZvcm1hdDI0aD8ocz0wLG49MjQsbz1cIiBmbXQyNFwiKToocz0xLG49MTMpO2Zvcih2YXIgcj1mdW5jdGlvbihzKXtpLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2stcG9zaXRpb25cIitvLGNsYXNzOltcInEtZGF0ZXRpbWUtY2xvY2stcG9zLVwiK3Mscz09PWUuaG91cj9cImFjdGl2ZVwiOlwiXCJdLG9uOntcIiFtb3VzZWRvd25cIjpmdW5jdGlvbih0KXtyZXR1cm4gZS5fX2RyYWdTdGFydCh0LHMpfSxcIiFtb3VzZXVwXCI6ZnVuY3Rpb24odCl7cmV0dXJuIGUuX19kcmFnU3RvcCh0LHMpfX19LFt0KFwic3BhblwiLFtzfHxcIjAwXCJdKV0pKX0sYT1zO2E8bjthKyspcihhKX1lbHNlIGZvcih2YXIgbD0wO2w8MTI7bCsrKXt2YXIgYz01Kmw7aS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLXBvc2l0aW9uXCIsY2xhc3M6W1wicS1kYXRldGltZS1jbG9jay1wb3MtXCIrbCxjPT09ZS5taW51dGU/XCJhY3RpdmVcIjpcIlwiXX0sW3QoXCJzcGFuXCIsW2NdKV0pKX1yZXR1cm4gdChcImRpdlwiLHtyZWY6XCJjbG9ja1wiLGtleTpcImNsb2NrXCIrdGhpcy52aWV3LHN0YXRpY0NsYXNzOlwiY29sdW1uIGl0ZW1zLWNlbnRlciBjb250ZW50LWNlbnRlciBqdXN0aWZ5LWNlbnRlclwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2sgY3Vyc29yLXBvaW50ZXJcIixvbjp7bW91c2Vkb3duOnRoaXMuX19kcmFnU3RhcnQsbW91c2Vtb3ZlOnRoaXMuX19kcmFnTW92ZSxtb3VzZXVwOnRoaXMuX19kcmFnU3RvcCx0b3VjaHN0YXJ0OnRoaXMuX19kcmFnU3RhcnQsdG91Y2htb3ZlOnRoaXMuX19kcmFnTW92ZSx0b3VjaGVuZDp0aGlzLl9fZHJhZ1N0b3B9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2stY2lyY2xlIGZ1bGwtd2lkdGggZnVsbC1oZWlnaHRcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNsb2NrLWNlbnRlclwifSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZGF0ZXRpbWUtY2xvY2stcG9pbnRlclwiLHN0eWxlOnRoaXMuY2xvY2tQb2ludGVyU3R5bGV9LFt0KFwic3BhblwiKV0pLGldKV0pXSl9LF9fZ2V0Vmlld1NlY3Rpb246ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMudmlldyl7Y2FzZVwieWVhclwiOnJldHVybiB0aGlzLl9fZ2V0WWVhclZpZXcodCk7Y2FzZVwibW9udGhcIjpyZXR1cm4gdGhpcy5fX2dldE1vbnRoVmlldyh0KTtjYXNlXCJkYXlcIjpyZXR1cm4gdGhpcy5fX2dldERheVZpZXcodCk7Y2FzZVwiaG91clwiOmNhc2VcIm1pbnV0ZVwiOnJldHVybiB0aGlzLl9fZ2V0Q2xvY2tWaWV3KHQpfX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19hbVBtRXZlbnRzPXtrZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpPWdldEV2ZW50S2V5KGUpO1sxMywzMiwzNywzOCwzOSw0MF0uaW5jbHVkZXMoaSkmJihzdG9wQW5kUHJldmVudChlKSx0LnRvZ2dsZUFtUG0oKSl9fX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuX19zY3JvbGxWaWV3KCEwKX0scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY2FuUmVuZGVyKXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kYXRldGltZSByb3dcIixjbGFzczp0aGlzLmNsYXNzZXN9LFshdGhpcy5taW5pbWFsJiZ0aGlzLl9fZ2V0VG9wU2VjdGlvbih0KXx8dm9pZCAwLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWNvbnRlbnQgc2Nyb2xsXCJ9LFt0KFwiZGl2XCIse3JlZjpcInNlbGVjdG9yXCIsc3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLXNlbGVjdG9yIHJvdyBpdGVtcy1jZW50ZXJcIn0sW3QoXCJkaXZcIix7Y2xhc3M6XCJjb2xcIn0pLHRoaXMuX19nZXRWaWV3U2VjdGlvbih0KSx0KFwiZGl2XCIse2NsYXNzOlwiY29sXCJ9KV0pXS5jb25jYXQodGhpcy4kc2xvdHMuZGVmYXVsdCkpXSl9fSxjb250ZW50Q3NzJDE9e21heFdpZHRoOlwiOTV2d1wiLG1heEhlaWdodDpcIjk4dmhcIn0sUURhdGV0aW1lPXtuYW1lOlwiUURhdGV0aW1lXCIsbWl4aW5zOltGcmFtZU1peGluLERpc3BsYXlNb2RlTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOk9iamVjdC5hc3NpZ24oe30saW5wdXQsaW5saW5lKSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7IXRoaXMuZGlzYWJsZSYmdGhpcy5pc1BvcG92ZXImJih0aGlzLm1vZGVsPWNsb25lJDEodCkpfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnt0cmFuc2l0aW9uOm51bGwsbW9kZWw6bnVsbCxmb2N1c2VkOiExfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMubW9kZWw9Y2xvbmUkMSh0aGlzLmNvbXB1dGVkVmFsdWUpLHRoaXMuaXNQb3BvdmVyfHwodGhpcy50cmFuc2l0aW9uPVwicS1tb2RhbFwiKX0sY29tcHV0ZWQ6e2NvbXB1dGVkRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZm9ybWF0P3RoaXMuZm9ybWF0OlwiZGF0ZVwiPT09dGhpcy50eXBlP1wiWVlZWS9NTS9ERFwiOlwidGltZVwiPT09dGhpcy50eXBlP1wiSEg6bW1cIjpcIllZWVkvTU0vREQgSEg6bW06c3NcIn0sYWN0dWFsVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaXNwbGF5VmFsdWU/dGhpcy5kaXNwbGF5VmFsdWU6aXNWYWxpZCh0aGlzLnZhbHVlKSYmdGhpcy5jYW5SZW5kZXI/Zm9ybWF0RGF0ZSh0aGlzLnZhbHVlLHRoaXMuY29tcHV0ZWRGb3JtYXQsdGhpcy4kcS5pMThuLmRhdGUpOlwiXCJ9LGNvbXB1dGVkVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gaXNWYWxpZCh0aGlzLnZhbHVlKT90aGlzLnZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlfSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5jbGVhclZhbHVlP3RoaXMuZGVmYXVsdFZhbHVlOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJiFpc1NhbWVEYXRlKHRoaXMuY29tcHV0ZWRDbGVhclZhbHVlLHRoaXMudmFsdWUpfSxtb2RhbEJ0bkNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29sb3J9fSxtZXRob2RzOnt0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLiRyZWZzLnBvcHVwJiZ0aGlzW3RoaXMuJHJlZnMucG9wdXAuc2hvd2luZz9cImhpZGVcIjpcInNob3dcIl0oKX0sc2hvdzpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGUpcmV0dXJuIHRoaXMuX19zZXRNb2RlbCh0aGlzLmNvbXB1dGVkVmFsdWUpLHRoaXMuJHJlZnMucG9wdXAuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wdXA/dGhpcy4kcmVmcy5wb3B1cC5oaWRlKCk6UHJvbWlzZS5yZXNvbHZlKCl9LF9faGFuZGxlS2V5RG93bjpmdW5jdGlvbih0KXtzd2l0Y2goZ2V0RXZlbnRLZXkodCkpe2Nhc2UgMTM6Y2FzZSAzMjpyZXR1cm4gc3RvcEFuZFByZXZlbnQodCksdGhpcy5zaG93KCk7Y2FzZSA4OnRoaXMuaXNDbGVhcmFibGUmJnRoaXMuY2xlYXIoKX19LF9fb25Gb2N1czpmdW5jdGlvbigpe2lmKCF0aGlzLmRpc2FibGUmJiF0aGlzLmZvY3VzZWQpe3ZhciB0PXRoaXMuJHJlZnMudGFyZ2V0O3QmJnQuc2V0Vmlldyh0aGlzLmRlZmF1bHRWaWV3LCEwKSx0aGlzLm1vZGVsPWNsb25lJDEodGhpcy5jb21wdXRlZFZhbHVlKSx0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kZW1pdChcImZvY3VzXCIpfX0sX19vbkJsdXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmZvY3VzZWQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UuJHJlZnMucG9wdXAmJmUuJHJlZnMucG9wdXAuc2hvd2luZyYmKHQ9PT1kb2N1bWVudC5ib2R5fHxlLiRyZWZzLnBvcHVwLiRlbC5jb250YWlucyh0KSl8fChlLl9fb25IaWRlKCksZS5oaWRlKCkpfSwxKX0sX19vbkhpZGU6ZnVuY3Rpb24odCxlKXsodHx8dGhpcy5pc1BvcG92ZXIpJiZ0aGlzLl9fdXBkYXRlKHQpLHRoaXMuZm9jdXNlZCYmKGU/dGhpcy4kZWwuZm9jdXMoKToodGhpcy4kZW1pdChcImJsdXJcIiksdGhpcy5mb2N1c2VkPSExKSl9LF9fc2V0TW9kZWw6ZnVuY3Rpb24odCxlKXt0aGlzLm1vZGVsPWNsb25lJDEodCksKGV8fHRoaXMuaXNQb3BvdmVyKSYmdGhpcy5fX3VwZGF0ZShlKX0sX191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2lzU2FtZURhdGUoZS5tb2RlbCxlLnZhbHVlKXx8KGUuJGVtaXQoXCJpbnB1dFwiLGUubW9kZWwpLHQmJmUuJGVtaXQoXCJjaGFuZ2VcIixlLm1vZGVsKSl9KX0sX19zY3JvbGxWaWV3OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcmVmcy50YXJnZXQ7dCYmdC5fX3Njcm9sbFZpZXcoKX0sX19nZXRQaWNrZXI6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO3JldHVyblt0KFFEYXRldGltZVBpY2tlcix7cmVmOlwidGFyZ2V0XCIsc3RhdGljQ2xhc3M6XCJuby1ib3JkZXJcIixjbGFzczp7XCJkYXRldGltZS1pb3MtbW9kYWxcIjohMX0scHJvcHM6e3R5cGU6dGhpcy50eXBlLG1pbjp0aGlzLm1pbixtYXg6dGhpcy5tYXgsaGVhZGVyTGFiZWw6dGhpcy5oZWFkZXJMYWJlbCxtaW5pbWFsOnRoaXMubWluaW1hbCxmb3JtYXRNb2RlbDp0aGlzLmZvcm1hdE1vZGVsLGZvcm1hdDI0aDp0aGlzLmZvcm1hdDI0aCxmaXJzdERheU9mV2Vlazp0aGlzLmZpcnN0RGF5T2ZXZWVrLGRlZmF1bHRWaWV3OnRoaXMuZGVmYXVsdFZpZXcsY29sb3I6dGhpcy5pbnZlcnRlZExpZ2h0P1wiZ3JleS03XCI6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFyayx2YWx1ZTp0aGlzLm1vZGVsLGRpc2FibGU6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksbm9QYXJlbnRGaWVsZDohMH0sb246e2lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBpLiRuZXh0VGljayhmdW5jdGlvbigpe3JldHVybiBpLl9fc2V0TW9kZWwodCl9KX0sY2FuQ2xvc2U6ZnVuY3Rpb24oKXtpLmlzUG9wb3ZlciYmaS5oaWRlKCl9fX0sW2U/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcIm1vZGFsLWJ1dHRvbnMgbW9kYWwtYnV0dG9ucy10b3Agcm93IGZ1bGwtd2lkdGhcIn0sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2xcIn0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMuY2FuY2VsTGFiZWx8fHRoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWwsbm9SaXBwbGU6ITB9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkhpZGUoITEsITApLGkuaGlkZSgpfX19KSx0aGlzLmVkaXRhYmxlP3QoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMubW9kYWxCdG5Db2xvcixmbGF0OiEwLGxhYmVsOnRoaXMub2tMYWJlbHx8dGhpcy4kcS5pMThuLmxhYmVsLnNldCxub1JpcHBsZTohMCxkaXNhYmxlOiF0aGlzLm1vZGVsfSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtpLl9fb25IaWRlKCEwLCEwKSxpLmhpZGUoKX19fSk6bnVsbF0pOm51bGxdKV19fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXRGcmFtZSx7c3RhdGljQ2xhc3M6XCJxLWRhdGV0aW1lLWlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZHx8dGhpcy4kcmVmcy5wb3B1cCYmdGhpcy4kcmVmcy5wb3B1cC5zaG93aW5nLGZvY3VzYWJsZTohMCxsZW5ndGg6dGhpcy5hY3R1YWxWYWx1ZS5sZW5ndGh9LG5hdGl2ZU9uOntjbGljazp0aGlzLnRvZ2dsZSxmb2N1czp0aGlzLl9fb25Gb2N1cyxibHVyOnRoaXMuX19vbkJsdXIsa2V5ZG93bjp0aGlzLl9faGFuZGxlS2V5RG93bn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IGVsbGlwc2lzXCIsY2xhc3M6dGhpcy5mYWtlSW5wdXRDbGFzc2VzfSxbdGhpcy5mYWtlSW5wdXRWYWx1ZV0pLHRoaXMuaXNQb3BvdmVyP3QoUVBvcG92ZXIse3JlZjpcInBvcHVwXCIscHJvcHM6e2NvdmVyOiEwLGtlZXBPblNjcmVlbjohMCxkaXNhYmxlOnRoaXMuZGlzYWJsZSxhbmNob3JDbGljazohMSxtYXhIZWlnaHQ6XCIxMDB2aFwifSxzbG90OlwiYWZ0ZXJcIixvbjp7c2hvdzpmdW5jdGlvbih0KXtlLl9fb25Gb2N1cyh0KSxlLl9fc2Nyb2xsVmlldygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITAsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCkpOnQoUU1vZGFsLHtyZWY6XCJwb3B1cFwiLHN0YXRpY0NsYXNzOlwid2l0aC1iYWNrZHJvcCBxLWRhdGV0aW1lLW1vZGFsXCIscHJvcHM6e2NvbnRlbnRDc3M6Y29udGVudENzcyQxLG1pbmltaXplZDohMCxwb3NpdGlvbjpudWxsLHRyYW5zaXRpb246dGhpcy50cmFuc2l0aW9ufSxvbjp7c2hvdzp0aGlzLl9fc2Nyb2xsVmlldyxkaXNtaXNzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19vbkhpZGUoITEsITApfX19LHRoaXMuX19nZXRQaWNrZXIodCwhMCkpLHRoaXMuaXNDbGVhcmFibGU/dChRSWNvbix7c2xvdDpcImFmdGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOntjbGljazp0aGlzLmNsZWFyfSxzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwifSk6bnVsbCx0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixwcm9wczp7bmFtZTp0aGlzLiRxLmljb24uaW5wdXQuZHJvcGRvd259LHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCJ9KV0pfX0saW5wdXRUeXBlcz1bXCJ0ZXh0XCIsXCJ0ZXh0YXJlYVwiLFwiZW1haWxcIixcInNlYXJjaFwiLFwidGVsXCIsXCJmaWxlXCIsXCJudW1iZXJcIixcInBhc3N3b3JkXCIsXCJ1cmxcIixcInRpbWVcIixcImRhdGVcIl0sUVJlc2l6ZU9ic2VydmFibGU9e25hbWU6XCJRUmVzaXplT2JzZXJ2YWJsZVwiLG1peGluczpbQ2FuUmVuZGVyTWl4aW5dLHByb3BzOntkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxMDB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzT2JzZXJ2ZXI/e306e3VybDp0aGlzLiRxLnBsYXRmb3JtLmlzLmllP251bGw6XCJhYm91dDpibGFua1wifX0sbWV0aG9kczp7b25SZXNpemU6ZnVuY3Rpb24oKXtpZih0aGlzLnRpbWVyPW51bGwsdGhpcy4kZWwmJnRoaXMuJGVsLnBhcmVudE5vZGUpe3ZhciB0PXRoaXMuJGVsLnBhcmVudE5vZGUsZT17d2lkdGg6dC5vZmZzZXRXaWR0aCxoZWlnaHQ6dC5vZmZzZXRIZWlnaHR9O2Uud2lkdGg9PT10aGlzLnNpemUud2lkdGgmJmUuaGVpZ2h0PT09dGhpcy5zaXplLmhlaWdodHx8KHRoaXMuc2l6ZT1lLHRoaXMuJGVtaXQoXCJyZXNpemVcIix0aGlzLnNpemUpKX19LHRyaWdnZXI6ZnVuY3Rpb24odCl7ITA9PT10fHwwPT09dGhpcy5kZWJvdW5jZT90aGlzLm9uUmVzaXplKCk6dGhpcy50aW1lcnx8KHRoaXMudGltZXI9c2V0VGltZW91dCh0aGlzLm9uUmVzaXplLHRoaXMuZGVib3VuY2UpKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuY2FuUmVuZGVyJiYhdGhpcy5oYXNPYnNlcnZlcilyZXR1cm4gdChcIm9iamVjdFwiLHtzdHlsZTp0aGlzLnN0eWxlLGF0dHJzOnt0YWJpbmRleDotMSx0eXBlOlwidGV4dC9odG1sXCIsZGF0YTp0aGlzLnVybCxcImFyaWEtaGlkZGVuXCI6ITB9LG9uOntsb2FkOmZ1bmN0aW9uKCl7ZS4kZWwuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixlLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKSxlLnRyaWdnZXIoITApfX19KX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5zaXplPXt3aWR0aDotMSxoZWlnaHQ6LTF9LGlzU1NSfHwodGhpcy5oYXNPYnNlcnZlcj1cInVuZGVmaW5lZFwiIT10eXBlb2YgUmVzaXplT2JzZXJ2ZXIsdGhpcy5oYXNPYnNlcnZlcnx8KHRoaXMuc3R5bGU9KHRoaXMuJHEucGxhdGZvcm0uaXMuaWU/XCJ2aXNpYmlsaXR5OmhpZGRlbjtcIjpcIlwiKStcImRpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Oi0xO1wiKSl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmhhc09ic2VydmVyKXJldHVybiB0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcih0aGlzLnRyaWdnZXIpLHZvaWQgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRoaXMuJGVsLnBhcmVudE5vZGUpO3RoaXMudHJpZ2dlcighMCksdGhpcy4kcS5wbGF0Zm9ybS5pcy5pZSYmKHRoaXMudXJsPVwiYWJvdXQ6YmxhbmtcIil9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5oYXNPYnNlcnZlcj90aGlzLiRlbC5wYXJlbnROb2RlJiZ0aGlzLm9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLiRlbC5wYXJlbnROb2RlKTp0aGlzLiRlbC5jb250ZW50RG9jdW1lbnQmJnRoaXMuJGVsLmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlldy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy50cmlnZ2VyLGxpc3Rlbk9wdHMucGFzc2l2ZSl9fSxRSW5wdXQ9e25hbWU6XCJRSW5wdXRcIixtaXhpbnM6W0ZyYW1lTWl4aW4sSW5wdXRNaXhpbl0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sdHlwZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInRleHRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIGlucHV0VHlwZXMuaW5jbHVkZXModCl9fSxhbGlnbjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImxlZnRcIixcImNlbnRlclwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSxub1Bhc3NUb2dnbGU6Qm9vbGVhbixudW1lcmljS2V5Ym9hcmRUb2dnbGU6Qm9vbGVhbixyZWFkb25seTpCb29sZWFuLGRlY2ltYWxzOk51bWJlcixzdGVwOk51bWJlcix1cHBlckNhc2U6Qm9vbGVhbixsb3dlckNhc2U6Qm9vbGVhbixpbml0aWFsU2hvd1Bhc3N3b3JkOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybntzaG93UGFzczp0aGlzLmluaXRpYWxTaG93UGFzc3dvcmQsc2hvd051bWJlcjohMCxtb2RlbDp0aGlzLnZhbHVlLHdhdGNoZXI6bnVsbCxhdXRvZmlsbGVkOiExLHNoYWRvdzp7dmFsOnRoaXMubW9kZWwsc2V0OnRoaXMuX19zZXQsc2V0TmF2OnRoaXMuX19zZXQsbG9hZGluZzohMSx3YXRjaGVkOjAsaXNFZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiB0LmVkaXRhYmxlfSxpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXJrfSxoYXNGb2N1czpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dC4kcmVmcy5pbnB1dH0scmVnaXN0ZXI6ZnVuY3Rpb24oKXt0LnNoYWRvdy53YXRjaGVkKz0xLHQuX193YXRjaGVyUmVnaXN0ZXIoKX0sdW5yZWdpc3RlcjpmdW5jdGlvbigpe3Quc2hhZG93LndhdGNoZWQ9TWF0aC5tYXgoMCx0LnNoYWRvdy53YXRjaGVkLTEpLHQuX193YXRjaGVyVW5yZWdpc3RlcigpfSxnZXRFbDpmdW5jdGlvbigpe3JldHVybiB0LiRyZWZzLmlucHV0fX19fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VGbG9hdCh0aGlzLm1vZGVsKSxpPXBhcnNlRmxvYXQodCk7KCF0aGlzLmlzTnVtYmVyfHx0aGlzLmlzTnVtYmVyRXJyb3J8fGlzTmFOKGUpfHxpc05hTihpKXx8ZSE9PWkpJiYodGhpcy5tb2RlbD10KSx0aGlzLmlzTnVtYmVyRXJyb3I9ITEsdGhpcy5pc05lZ1plcm89ITF9LGlzVGV4dGFyZWE6ZnVuY3Rpb24odCl7dGhpc1t0P1wiX193YXRjaGVyUmVnaXN0ZXJcIjpcIl9fd2F0Y2hlclVucmVnaXN0ZXJcIl0oKX0sXCIkYXR0cnMucm93c1wiOmZ1bmN0aW9uKCl7dGhpcy5pc1RleHRhcmVhJiZ0aGlzLl9fdXBkYXRlQXJlYSgpfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX2lucHV0OnRoaXMuc2hhZG93fX0sY29tcHV0ZWQ6e2lzTnVtYmVyOmZ1bmN0aW9uKCl7cmV0dXJuXCJudW1iZXJcIj09PXRoaXMudHlwZX0saXNQYXNzd29yZDpmdW5jdGlvbigpe3JldHVyblwicGFzc3dvcmRcIj09PXRoaXMudHlwZX0saXNUZXh0YXJlYTpmdW5jdGlvbigpe3JldHVyblwidGV4dGFyZWFcIj09PXRoaXMudHlwZX0saXNMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9hZGluZ3x8dGhpcy5zaGFkb3cud2F0Y2hlZCYmdGhpcy5zaGFkb3cubG9hZGluZ30sa2V5Ym9hcmRUb2dnbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGUmJnRoaXMuaXNOdW1iZXImJnRoaXMubnVtZXJpY0tleWJvYXJkVG9nZ2xlfSxpbnB1dFR5cGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1Bhc3N3b3JkP3RoaXMuc2hvd1Bhc3MmJnRoaXMuZWRpdGFibGU/XCJ0ZXh0XCI6XCJwYXNzd29yZFwiOnRoaXMuaXNOdW1iZXI/dGhpcy5zaG93TnVtYmVyfHwhdGhpcy5lZGl0YWJsZT9cIm51bWJlclwiOlwidGV4dFwiOnRoaXMudHlwZX0saW5wdXRDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuYWxpZ24mJnQucHVzaChcInRleHQtXCIrdGhpcy5hbGlnbiksdGhpcy5hdXRvZmlsbGVkJiZ0LnB1c2goXCJxLWlucHV0LWF1dG9maWxsXCIpLHR9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiBudWxsIT09dGhpcy5tb2RlbCYmdm9pZCAwIT09dGhpcy5tb2RlbD8oXCJcIit0aGlzLm1vZGVsKS5sZW5ndGg6MH0sY29tcHV0ZWRDbGVhclZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmlzTnVtYmVyP251bGw6XCJcIjp0aGlzLmNsZWFyVmFsdWV9LGNvbXB1dGVkU3RlcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0ZXB8fCh0aGlzLmRlY2ltYWxzP01hdGgucG93KDEwLC10aGlzLmRlY2ltYWxzKTpcImFueVwiKX0sZnJhbWVQcm9wczpmdW5jdGlvbigpe3JldHVybntwcmVmaXg6dGhpcy5wcmVmaXgsc3VmZml4OnRoaXMuc3VmZml4LHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLHBsYWNlaG9sZGVyOnRoaXMucGxhY2Vob2xkZXIsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxkaXNhYmxlOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixub1BhcmVudEZpZWxkOnRoaXMubm9QYXJlbnRGaWVsZCxmb2N1c2VkOnRoaXMuZm9jdXNlZCxsZW5ndGg6dGhpcy5hdXRvZmlsbGVkK3RoaXMubGVuZ3RofX19LG1ldGhvZHM6e3RvZ2dsZVBhc3M6ZnVuY3Rpb24oKXt0aGlzLnNob3dQYXNzPSF0aGlzLnNob3dQYXNzLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzKCl9LHRvZ2dsZU51bWJlcjpmdW5jdGlvbigpe3RoaXMuc2hvd051bWJlcj0hdGhpcy5zaG93TnVtYmVyLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmZvY3VzKCl9LF9fY2xlYXJUaW1lcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHQudGltZXIpfSl9LF9fb25BbmltYXRpb25TdGFydDpmdW5jdGlvbih0KXtpZigwPT09dC5hbmltYXRpb25OYW1lLmluZGV4T2YoXCJ3ZWJraXQtYXV0b2ZpbGwtXCIpKXt2YXIgZT1cIndlYmtpdC1hdXRvZmlsbC1vblwiPT09dC5hbmltYXRpb25OYW1lO2lmKGUhPT10aGlzLmF1dG9maWxsZWQpcmV0dXJuIHQudmFsdWU9dGhpcy5hdXRvZmlsbGVkPWUsdC5lbD10aGlzLHRoaXMuJGVtaXQoXCJhdXRvZmlsbFwiLHQpfX0sX19zZXRNb2RlbDpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5mb2N1cygpLHRoaXMuX19zZXQodGhpcy5pc051bWJlciYmMD09PXQ/dDp0fHwodGhpcy5pc051bWJlcj9udWxsOlwiXCIpLCEwKX0sX19zZXQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLHM9dCYmdC50YXJnZXQ/dC50YXJnZXQudmFsdWU6dDtpZih0aGlzLmlzTnVtYmVyKXt0aGlzLmlzTmVnWmVybz0xL3M9PS0xLzA7dmFyIG49dGhpcy5pc05lZ1plcm8/LTA6cztpZih0aGlzLm1vZGVsPXMscz1wYXJzZUZsb2F0KHMpLGlzTmFOKHMpfHx0aGlzLmlzTmVnWmVybylyZXR1cm4gdGhpcy5pc051bWJlckVycm9yPSEwLHZvaWQoZSYmKHRoaXMuJGVtaXQoXCJpbnB1dFwiLG4pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7U3RyaW5nKDEvbikhPT1TdHJpbmcoMS9pLnZhbHVlKSYmaS4kZW1pdChcImNoYW5nZVwiLG4pfSkpKTt0aGlzLmlzTnVtYmVyRXJyb3I9ITEsTnVtYmVyLmlzSW50ZWdlcih0aGlzLmRlY2ltYWxzKSYmKHM9cGFyc2VGbG9hdChzLnRvRml4ZWQodGhpcy5kZWNpbWFscykpKX1lbHNlIHRoaXMubG93ZXJDYXNlP3M9cy50b0xvd2VyQ2FzZSgpOnRoaXMudXBwZXJDYXNlJiYocz1zLnRvVXBwZXJDYXNlKCkpLHRoaXMubW9kZWw9czt0aGlzLiRlbWl0KFwiaW5wdXRcIixzKSxlJiZ0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHMpIT09SlNPTi5zdHJpbmdpZnkoaS52YWx1ZSkmJmkuJGVtaXQoXCJjaGFuZ2VcIixzKX0pfSxfX3VwZGF0ZUFyZWE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRyZWZzLnNoYWRvdyxlPXRoaXMuJHJlZnMuaW5wdXQ7aWYodCYmZSl7dmFyIGk9dC5zY3JvbGxIZWlnaHQscz1iZXR3ZWVuKGksdC5vZmZzZXRIZWlnaHQsdGhpcy5tYXhIZWlnaHR8fGkpO2Uuc3R5bGUuaGVpZ2h0PXMrXCJweFwiLGUuc3R5bGUub3ZlcmZsb3dZPXRoaXMubWF4SGVpZ2h0JiZzPGk/XCJzY3JvbGxcIjpcImhpZGRlblwifX0sX193YXRjaGVyOmZ1bmN0aW9uKHQpe3RoaXMuaXNUZXh0YXJlYSYmdGhpcy5fX3VwZGF0ZUFyZWEoKSx0aGlzLnNoYWRvdy53YXRjaGVkJiYodGhpcy5zaGFkb3cudmFsPXQpfSxfX3dhdGNoZXJSZWdpc3RlcjpmdW5jdGlvbigpe3RoaXMud2F0Y2hlcnx8KHRoaXMud2F0Y2hlcj10aGlzLiR3YXRjaChcIm1vZGVsXCIsdGhpcy5fX3dhdGNoZXIpKX0sX193YXRjaGVyVW5yZWdpc3RlcjpmdW5jdGlvbih0KXt0aGlzLndhdGNoZXImJih0fHwhdGhpcy5pc1RleHRhcmVhJiYhdGhpcy5zaGFkb3cud2F0Y2hlZCkmJih0aGlzLndhdGNoZXIoKSx0aGlzLndhdGNoZXI9bnVsbCl9LF9fZ2V0VGV4dGFyZWE6ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0LmFzc2lnbih7cm93czoxfSx0aGlzLiRhdHRycyk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcm93IHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX191cGRhdGVBcmVhfX0pLHQoXCJ0ZXh0YXJlYVwiLHtyZWY6XCJzaGFkb3dcIixzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBxLWlucHV0LXNoYWRvdyBhYnNvbHV0ZS10b3BcIixkb21Qcm9wczp7dmFsdWU6dGhpcy5tb2RlbH0sYXR0cnM6ZX0pLHQoXCJ0ZXh0YXJlYVwiLHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwiY29sIHEtaW5wdXQtdGFyZ2V0IHEtaW5wdXQtYXJlYVwiLGF0dHJzOk9iamVjdC5hc3NpZ24oe30sZSx7cGxhY2Vob2xkZXI6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLGRpc2FibGVkOnRoaXMuZGlzYWJsZSxyZWFkb25seTp0aGlzLnJlYWRvbmx5fSksZG9tUHJvcHM6e3ZhbHVlOnRoaXMubW9kZWx9LG9uOntpbnB1dDp0aGlzLl9fc2V0LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uSW5wdXRCbHVyLGtleWRvd246dGhpcy5fX29uS2V5ZG93bixrZXl1cDp0aGlzLl9fb25LZXl1cCxwYXN0ZTp0aGlzLl9fb25QYXN0ZX19KV0pfSxfX2dldElucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiaW5wdXRcIix7cmVmOlwiaW5wdXRcIixzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBxLW5vLWlucHV0LXNwaW5uZXIgZWxsaXBzaXNcIixjbGFzczp0aGlzLmlucHV0Q2xhc3NlcyxhdHRyczpPYmplY3QuYXNzaWduKHt9LHRoaXMuJGF0dHJzLHt0eXBlOnRoaXMuaW5wdXRUeXBlLHBsYWNlaG9sZGVyOnRoaXMuaW5wdXRQbGFjZWhvbGRlcixkaXNhYmxlZDp0aGlzLmRpc2FibGUscmVhZG9ubHk6dGhpcy5yZWFkb25seSxzdGVwOnRoaXMuY29tcHV0ZWRTdGVwfSksZG9tUHJvcHM6e3ZhbHVlOnRoaXMubW9kZWx9LG9uOntpbnB1dDp0aGlzLl9fc2V0LGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uSW5wdXRCbHVyLGtleWRvd246dGhpcy5fX29uS2V5ZG93bixrZXl1cDp0aGlzLl9fb25LZXl1cCxwYXN0ZTp0aGlzLl9fb25QYXN0ZSxhbmltYXRpb25zdGFydDp0aGlzLl9fb25BbmltYXRpb25TdGFydH19KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fdXBkYXRlQXJlYT1mcmFtZURlYm91bmNlKHRoaXMuX191cGRhdGVBcmVhKSx0aGlzLmlzVGV4dGFyZWEmJih0aGlzLl9fdXBkYXRlQXJlYSgpLHRoaXMuX193YXRjaGVyUmVnaXN0ZXIoKSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fd2F0Y2hlclVucmVnaXN0ZXIoITApfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoUUlucHV0RnJhbWUse3N0YXRpY0NsYXNzOlwicS1pbnB1dFwiLHByb3BzOnRoaXMuZnJhbWVQcm9wcyxvbjp7Y2xpY2s6dGhpcy5fX29uQ2xpY2ssZm9jdXM6dGhpcy5fX29uRm9jdXMscGFzdGU6dGhpcy5fX29uUGFzdGV9fSxbXS5jb25jYXQodGhpcy4kc2xvdHMuYmVmb3JlKS5jb25jYXQoW3RoaXMuaXNUZXh0YXJlYT90aGlzLl9fZ2V0VGV4dGFyZWEodCk6dGhpcy5fX2dldElucHV0KHQpLCF0aGlzLmRpc2FibGUmJnRoaXMuaXNQYXNzd29yZCYmIXRoaXMubm9QYXNzVG9nZ2xlJiYodGhpcy5pbml0aWFsU2hvd1Bhc3N3b3JkfHx0aGlzLmxlbmd0aCkmJnQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W3RoaXMuc2hvd1Bhc3M/XCJzaG93UGFzc1wiOlwiaGlkZVBhc3NcIl19LG5hdGl2ZU9uOnttb3VzZWRvd246dGhpcy5fX2NsZWFyVGltZXIsdG91Y2hzdGFydDp0aGlzLl9fY2xlYXJUaW1lcixjbGljazp0aGlzLnRvZ2dsZVBhc3N9fSl8fHZvaWQgMCx0aGlzLmVkaXRhYmxlJiZ0aGlzLmtleWJvYXJkVG9nZ2xlJiZ0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFt0aGlzLnNob3dOdW1iZXI/XCJzaG93TnVtYmVyXCI6XCJoaWRlTnVtYmVyXCJdfSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6dGhpcy50b2dnbGVOdW1iZXJ9fSl8fHZvaWQgMCx0aGlzLmlzQ2xlYXJhYmxlJiZ0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5pbnB1dFtcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7bW91c2Vkb3duOnRoaXMuX19jbGVhclRpbWVyLHRvdWNoc3RhcnQ6dGhpcy5fX2NsZWFyVGltZXIsY2xpY2s6dGhpcy5jbGVhcn19KXx8dm9pZCAwLHRoaXMuaXNMb2FkaW5nJiYodGhpcy4kc2xvdHMubG9hZGluZz90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmxvYWRpbmcpOnQoUVNwaW5uZXIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e3NpemU6XCIyNHB4XCJ9fSkpfHx2b2lkIDBdKS5jb25jYXQodGhpcy4kc2xvdHMuYWZ0ZXIpLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0P3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJhYnNvbHV0ZS1mdWxsIG5vLXBvaW50ZXItZXZlbnRzXCIsc2xvdDpcImFmdGVyXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpOnZvaWQgMCkpfX0sUVJhZGlvPXtuYW1lOlwiUVJhZGlvXCIsbWl4aW5zOltPcHRpb25NaXhpbl0scHJvcHM6e3ZhbDp7cmVxdWlyZWQ6ITB9fSxjb21wdXRlZDp7aXNUcnVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWU9PT10aGlzLnZhbH19LG1ldGhvZHM6e3RvZ2dsZTpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPSEwKSx0aGlzLmRpc2FibGV8fHRoaXMucmVhZG9ubHl8fCh0JiZzdG9wQW5kUHJldmVudCh0KSxlJiZ0aGlzLiRlbC5ibHVyKCksdGhpcy5pc1RydWV8fHRoaXMuX191cGRhdGUodGhpcy52YWwpKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVyblt0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtcmFkaW8tdW5jaGVja2VkIGN1cnNvci1wb2ludGVyIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLnVuY2hlY2tlZEljb258fHRoaXMuJHEuaWNvbi5yYWRpby51bmNoZWNrZWQubWF0fX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwicS1yYWRpby1jaGVja2VkIGN1cnNvci1wb2ludGVyIGFic29sdXRlLWZ1bGxcIixwcm9wczp7bmFtZTp0aGlzLmNoZWNrZWRJY29ufHx0aGlzLiRxLmljb24ucmFkaW8uY2hlY2tlZC5tYXR9fSksdChcImRpdlwiLHtyZWY6XCJyaXBwbGVcIixzdGF0aWNDbGFzczpcInEtcmFkaWFsLXJpcHBsZVwifSldfX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fX2tlYmFiVGFnPVwicS1yYWRpb1wifX0sUVRvZ2dsZT17bmFtZTpcIlFUb2dnbGVcIixtaXhpbnM6W0NoZWNrYm94TWl4aW4sT3B0aW9uTWl4aW5dLHByb3BzOntpY29uOlN0cmluZ30sY29tcHV0ZWQ6e2N1cnJlbnRJY29uOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaXNUcnVlP3RoaXMuY2hlY2tlZEljb246dGhpcy51bmNoZWNrZWRJY29uKXx8dGhpcy5pY29ufSxpY29uQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1RydWU/XCJ3aGl0ZVwiOlwiZGFya1wifSxiYXNlQ2xhc3M6ZnVuY3Rpb24oKXt9fSxtZXRob2RzOntfX3N3aXBlOmZ1bmN0aW9uKHQpe1wibGVmdFwiPT09dC5kaXJlY3Rpb24/dGhpcy5pc1RydWUmJnRoaXMudG9nZ2xlKCk6XCJyaWdodFwiPT09dC5kaXJlY3Rpb24mJnRoaXMuaXNGYWxzZSYmdGhpcy50b2dnbGUoKX0sX19nZXRDb250ZW50OmZ1bmN0aW9uKHQpe3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10b2dnbGUtYmFzZVwiLGNsYXNzOnRoaXMuYmFzZUNsYXNzfSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9nZ2xlLWhhbmRsZSByb3cgZmxleC1jZW50ZXJcIn0sW3RoaXMuY3VycmVudEljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRvZ2dsZS1pY29uXCIscHJvcHM6e25hbWU6dGhpcy5jdXJyZW50SWNvbixjb2xvcjp0aGlzLmljb25Db2xvcn19KTpudWxsLHQoXCJkaXZcIix7cmVmOlwicmlwcGxlXCIsc3RhdGljQ2xhc3M6XCJxLXJhZGlhbC1yaXBwbGVcIn0pXSldfX0sYmVmb3JlQ3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fX2tlYmFiVGFnPVwicS10b2dnbGVcIn19LGNvbXBvbmVudHM9e3JhZGlvOlFSYWRpbyxjaGVja2JveDpRQ2hlY2tib3gsdG9nZ2xlOlFUb2dnbGV9LFFPcHRpb25Hcm91cD17bmFtZTpcIlFPcHRpb25Hcm91cFwiLG1peGluczpbUGFyZW50RmllbGRNaXhpbl0scHJvcHM6e3ZhbHVlOntyZXF1aXJlZDohMH0sdHlwZTp7ZGVmYXVsdDpcInJhZGlvXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInJhZGlvXCIsXCJjaGVja2JveFwiLFwidG9nZ2xlXCJdLmluY2x1ZGVzKHQpfX0sY29sb3I6U3RyaW5nLGtlZXBDb2xvcjpCb29sZWFuLGRhcms6Qm9vbGVhbixvcHRpb25zOnt0eXBlOkFycmF5LHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm5cInZhbHVlXCJpbiB0JiZcImxhYmVsXCJpbiB0fSl9fSxsZWZ0TGFiZWw6Qm9vbGVhbixpbmxpbmU6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4scmVhZG9ubHk6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NvbXBvbmVudDpmdW5jdGlvbigpe3JldHVybiBjb21wb25lbnRzW3RoaXMudHlwZV19LG1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5zbGljZSgpOnRoaXMudmFsdWV9LGxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlP1wicmFkaW9cIj09PXRoaXMudHlwZT8xOnRoaXMudmFsdWUubGVuZ3RoOjB9LF9fbmVlZHNCb3JkZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LG1ldGhvZHM6e19fb25Gb2N1czpmdW5jdGlvbigpe3RoaXMuJGVtaXQoXCJmb2N1c1wiKX0sX19vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiYmx1clwiKX0sX191cGRhdGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfX0sY3JlYXRlZDpmdW5jdGlvbigpe3ZhciB0PUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk7XCJyYWRpb1wiPT09dGhpcy50eXBlP3QmJmNvbnNvbGUuZXJyb3IoXCJxLW9wdGlvbi1ncm91cDogbW9kZWwgc2hvdWxkIG5vdCBiZSBhcnJheVwiKTp0fHxjb25zb2xlLmVycm9yKFwicS1vcHRpb24tZ3JvdXA6IG1vZGVsIHNob3VsZCBiZSBhcnJheSBpbiB5b3VyIGNhc2VcIil9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1vcHRpb24tZ3JvdXAgZ3JvdXBcIixjbGFzczp7XCJxLW9wdGlvbi1ncm91cC1pbmxpbmUtb3B0c1wiOnRoaXMuaW5saW5lfX0sdGhpcy5vcHRpb25zLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChcImRpdlwiLFt0KGUuY29tcG9uZW50LHtwcm9wczp7dmFsdWU6ZS52YWx1ZSx2YWw6aS52YWx1ZSxyZWFkb25seTplLnJlYWRvbmx5fHxpLnJlYWRvbmx5LGRpc2FibGU6ZS5kaXNhYmxlfHxpLmRpc2FibGUsbGFiZWw6aS5sYWJlbCxsZWZ0TGFiZWw6ZS5sZWZ0TGFiZWx8fGkubGVmdExhYmVsLGNvbG9yOmkuY29sb3J8fGUuY29sb3IsY2hlY2tlZEljb246aS5jaGVja2VkSWNvbix1bmNoZWNrZWRJY29uOmkudW5jaGVja2VkSWNvbixkYXJrOmkuZGFya3x8ZS5kYXJrLGtlZXBDb2xvcjppLmtlZXBDb2xvcnx8ZS5rZWVwQ29sb3J9LG9uOntpbnB1dDplLl9fdXBkYXRlLGZvY3VzOmUuX19vbkZvY3VzLGJsdXI6ZS5fX29uQmx1cn19KV0pfSkpfX0sUURpYWxvZz17bmFtZTpcIlFEaWFsb2dcIixwcm9wczp7dmFsdWU6Qm9vbGVhbix0aXRsZTpTdHJpbmcsbWVzc2FnZTpTdHJpbmcscHJvbXB0Ok9iamVjdCxvcHRpb25zOk9iamVjdCxvazp7dHlwZTpbU3RyaW5nLE9iamVjdCxCb29sZWFuXSxkZWZhdWx0OiEwfSxjYW5jZWw6W1N0cmluZyxPYmplY3QsQm9vbGVhbl0sc3RhY2tCdXR0b25zOkJvb2xlYW4scHJldmVudENsb3NlOkJvb2xlYW4sbm9CYWNrZHJvcERpc21pc3M6Qm9vbGVhbixub0VzY0Rpc21pc3M6Qm9vbGVhbixub1JlZm9jdXM6Qm9vbGVhbixwb3NpdGlvbjpTdHJpbmcsY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPVtdLHM9dGhpcy4kc2xvdHMudGl0bGV8fHRoaXMudGl0bGUsbj10aGlzLiRzbG90cy5tZXNzYWdlfHx0aGlzLm1lc3NhZ2U7cmV0dXJuIHMmJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtaGVhZGVyXCJ9LFtzXSkpLG4mJmkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYm9keSBtb2RhbC1tZXNzYWdlIG1vZGFsLXNjcm9sbFwifSxbbl0pKSwodGhpcy5oYXNGb3JtfHx0aGlzLiRzbG90cy5ib2R5KSYmaS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1ib2R5IG1vZGFsLXNjcm9sbFwifSx0aGlzLmhhc0Zvcm0/dGhpcy5wcm9tcHQ/dGhpcy5fX2dldFByb21wdCh0KTp0aGlzLl9fZ2V0T3B0aW9ucyh0KTpbdGhpcy4kc2xvdHMuYm9keV0pKSx0aGlzLiRzY29wZWRTbG90cy5idXR0b25zP2kucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwibW9kYWwtYnV0dG9uc1wiLGNsYXNzOnRoaXMuYnV0dG9uQ2xhc3N9LFt0aGlzLiRzY29wZWRTbG90cy5idXR0b25zKHtvazp0aGlzLl9fb25PayxjYW5jZWw6dGhpcy5fX29uQ2FuY2VsfSldKSk6KHRoaXMub2t8fHRoaXMuY2FuY2VsKSYmaS5wdXNoKHRoaXMuX19nZXRCdXR0b25zKHQpKSx0KFFNb2RhbCx7cmVmOlwibW9kYWxcIixwcm9wczp7dmFsdWU6dGhpcy52YWx1ZSxtaW5pbWl6ZWQ6ITAsbm9CYWNrZHJvcERpc21pc3M6dGhpcy5ub0JhY2tkcm9wRGlzbWlzc3x8dGhpcy5wcmV2ZW50Q2xvc2Usbm9Fc2NEaXNtaXNzOnRoaXMubm9Fc2NEaXNtaXNzfHx0aGlzLnByZXZlbnRDbG9zZSxub1JlZm9jdXM6dGhpcy5ub1JlZm9jdXMscG9zaXRpb246dGhpcy5wb3NpdGlvbn0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJpbnB1dFwiLHQpfSxzaG93OmZ1bmN0aW9uKCl7aWYoZS4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wKXt2YXIgdDtpZigoZS5wcm9tcHR8fGUub3B0aW9ucykmJih0PWUucHJvbXB0P2UuJHJlZnMubW9kYWwuJGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiSU5QVVRcIik6ZS4kcmVmcy5tb2RhbC4kZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInEtb3B0aW9uXCIpKS5sZW5ndGgpcmV0dXJuIHRbMF0uZm9jdXMoKSx2b2lkIGUuJGVtaXQoXCJzaG93XCIpOyh0PWUuJHJlZnMubW9kYWwuJGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJxLWJ0blwiKSkubGVuZ3RoJiZ0W3QubGVuZ3RoLTFdLmZvY3VzKCksZS4kZW1pdChcInNob3dcIil9ZWxzZSBlLiRlbWl0KFwic2hvd1wiKX0saGlkZTpmdW5jdGlvbigpe2UuJGVtaXQoXCJoaWRlXCIpfSxkaXNtaXNzOmZ1bmN0aW9uKCl7ZS4kZW1pdChcImNhbmNlbFwiKX0sXCJlc2NhcGUta2V5XCI6ZnVuY3Rpb24oKXtlLiRlbWl0KFwiZXNjYXBlLWtleVwiKX19fSxpKX0sY29tcHV0ZWQ6e2hhc0Zvcm06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9tcHR8fHRoaXMub3B0aW9uc30sb2tMYWJlbDpmdW5jdGlvbigpe3JldHVybiEwPT09dGhpcy5vaz90aGlzLiRxLmkxOG4ubGFiZWwub2s6dGhpcy5va30sY2FuY2VsTGFiZWw6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PXRoaXMuY2FuY2VsP3RoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWw6dGhpcy5jYW5jZWx9LGJ1dHRvbkNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhY2tCdXR0b25zP1wiY29sdW1uXCI6XCJyb3dcIn0sb2tQcm9wczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QodGhpcy5vayk9PT10aGlzLm9rP09iamVjdC5hc3NpZ24oe2NvbG9yOnRoaXMuY29sb3IsbGFiZWw6dGhpcy4kcS5pMThuLmxhYmVsLm9rLG5vUmlwcGxlOiEwfSx0aGlzLm9rKTp7Y29sb3I6dGhpcy5jb2xvcixmbGF0OiEwLGxhYmVsOnRoaXMub2tMYWJlbCxub1JpcHBsZTohMH19LGNhbmNlbFByb3BzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdCh0aGlzLmNhbmNlbCk9PT10aGlzLmNhbmNlbD9PYmplY3QuYXNzaWduKHtjb2xvcjp0aGlzLmNvbG9yLGxhYmVsOnRoaXMuJHEuaTE4bi5sYWJlbC5jYW5jZWwsbm9SaXBwbGU6ITB9LHRoaXMuY2FuY2VsKTp7Y29sb3I6dGhpcy5jb2xvcixmbGF0OiEwLGxhYmVsOnRoaXMuY2FuY2VsTGFiZWwsbm9SaXBwbGU6ITB9fX0sbWV0aG9kczp7c2hvdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZWZzLm1vZGFsLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuJHJlZnMubW9kYWw/dGhpcy4kcmVmcy5tb2RhbC5oaWRlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB0Lmhhc0Zvcm0/Y2xvbmUodC5fX2dldERhdGEoKSk6dm9pZCAwfSk6UHJvbWlzZS5yZXNvbHZlKCl9LF9fZ2V0UHJvbXB0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuW3QoUUlucHV0LHtzdHlsZTpcIm1hcmdpbi1ib3R0b206IDEwcHhcIixwcm9wczp7dmFsdWU6dGhpcy5wcm9tcHQubW9kZWwsdHlwZTp0aGlzLnByb21wdC50eXBlfHxcInRleHRcIixjb2xvcjp0aGlzLmNvbG9yLG5vUGFzc1RvZ2dsZTohMH0sb246e2lucHV0OmZ1bmN0aW9uKHQpe2UucHJvbXB0Lm1vZGVsPXR9LGtleXVwOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJmUuX19vbk9rKCl9fX0pXX0sX19nZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuW3QoUU9wdGlvbkdyb3VwLHtwcm9wczp7dmFsdWU6dGhpcy5vcHRpb25zLm1vZGVsLHR5cGU6dGhpcy5vcHRpb25zLnR5cGUsY29sb3I6dGhpcy5jb2xvcixpbmxpbmU6dGhpcy5vcHRpb25zLmlubGluZSxvcHRpb25zOnRoaXMub3B0aW9ucy5pdGVtc30sb246e2NoYW5nZTpmdW5jdGlvbih0KXtlLm9wdGlvbnMubW9kZWw9dH19fSldfSxfX2dldEJ1dHRvbnM6ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHRoaXMuY2FuY2VsJiZlLnB1c2godChRQnRuLHtwcm9wczp0aGlzLmNhbmNlbFByb3BzLG9uOntjbGljazp0aGlzLl9fb25DYW5jZWx9fSkpLHRoaXMub2smJmUucHVzaCh0KFFCdG4se3Byb3BzOnRoaXMub2tQcm9wcyxvbjp7Y2xpY2s6dGhpcy5fX29uT2t9fSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJtb2RhbC1idXR0b25zXCIsY2xhc3M6dGhpcy5idXR0b25DbGFzc30sZSl9LF9fb25PazpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oZSl7dC4kZW1pdChcIm9rXCIsZSl9KX0sX19vbkNhbmNlbDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaGlkZSgpLnRoZW4oZnVuY3Rpb24oKXt0LiRlbWl0KFwiY2FuY2VsXCIpfSl9LF9fZ2V0RGF0YTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByb21wdD90aGlzLnByb21wdC5tb2RlbDp0aGlzLm9wdGlvbnM/dGhpcy5vcHRpb25zLm1vZGVsOnZvaWQgMH19fTtmdW5jdGlvbiBkZWJvdW5jZSh0LGUsaSl7dmFyIHM7ZnVuY3Rpb24gbigpe2Zvcih2YXIgbj10aGlzLG89W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspb1tyXT1hcmd1bWVudHNbcl07Y2xlYXJUaW1lb3V0KHMpLGkmJiFzJiZ0LmFwcGx5KHRoaXMsbykscz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cz1udWxsLGl8fHQuYXBwbHkobixvKX0sZSl9cmV0dXJuIHZvaWQgMD09PWUmJihlPTI1MCksbi5jYW5jZWw9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocyl9LG59dmFyIFFUb29sdGlwPXtuYW1lOlwiUVRvb2x0aXBcIixtaXhpbnM6W01vZGVsVG9nZ2xlTWl4aW4sQ2FuUmVuZGVyTWl4aW5dLHByb3BzOnthbmNob3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0b3AgbWlkZGxlXCIsdmFsaWRhdG9yOnBvc2l0aW9uVmFsaWRhdG9yfSxzZWxmOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tIG1pZGRsZVwiLHZhbGlkYXRvcjpwb3NpdGlvblZhbGlkYXRvcn0sb2Zmc2V0Ont0eXBlOkFycmF5LHZhbGlkYXRvcjpvZmZzZXRWYWxpZGF0b3J9LGRlbGF5Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9LG1heEhlaWdodDpTdHJpbmcsZGlzYWJsZTpCb29sZWFufSx3YXRjaDp7JHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9fSxjb21wdXRlZDp7YW5jaG9yT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlUG9zaXRpb24odGhpcy5hbmNob3IpfSxzZWxmT3JpZ2luOmZ1bmN0aW9uKCl7cmV0dXJuIHBhcnNlUG9zaXRpb24odGhpcy5zZWxmKX19LG1ldGhvZHM6e19fc2hvdzpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKSx0aGlzLnNjcm9sbFRhcmdldD1nZXRTY3JvbGxUYXJnZXQodGhpcy5hbmNob3JFbCksdGhpcy5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuaGlkZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX2RlYm91bmNlZFVwZGF0ZVBvc2l0aW9uLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy4kcS5wbGF0Zm9ybS5pcy5tb2JpbGUmJmRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsdGhpcy5oaWRlLCEwKSx0aGlzLl9fdXBkYXRlUG9zaXRpb24oKSx0aGlzLnNob3dQcm9taXNlJiZ0aGlzLnNob3dQcm9taXNlUmVzb2x2ZSgpfSxfX2hpZGU6ZnVuY3Rpb24oKXt0aGlzLl9fY2xlYW51cCgpLHRoaXMuaGlkZVByb21pc2UmJnRoaXMuaGlkZVByb21pc2VSZXNvbHZlKCl9LF9fY2xlYW51cDpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5oaWRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLl9fZGVib3VuY2VkVXBkYXRlUG9zaXRpb24sbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLiRlbC5yZW1vdmUoKSx0aGlzLiRxLnBsYXRmb3JtLmlzLm1vYmlsZSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLmhpZGUsITApfSxfX3VwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7c2V0UG9zaXRpb24oe2VsOnRoaXMuJGVsLGFuaW1hdGU6ITAsb2Zmc2V0OnRoaXMub2Zmc2V0LGFuY2hvckVsOnRoaXMuYW5jaG9yRWwsYW5jaG9yT3JpZ2luOnRoaXMuYW5jaG9yT3JpZ2luLHNlbGZPcmlnaW46dGhpcy5zZWxmT3JpZ2luLG1heEhlaWdodDp0aGlzLm1heEhlaWdodH0pfSxfX2RlbGF5U2hvdzpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy5zaG93LHRoaXMuZGVsYXkpfSxfX2RlbGF5SGlkZTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmhpZGUoKX19LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLmNhblJlbmRlcilyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbHRpcCBhbmltYXRlLXBvcHVwXCJ9LFt0KFwiZGl2XCIsdGhpcy4kc2xvdHMuZGVmYXVsdCldKX0sYmVmb3JlTW91bnQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX19kZWJvdW5jZWRVcGRhdGVQb3NpdGlvbj1kZWJvdW5jZShmdW5jdGlvbigpe3QuX191cGRhdGVQb3NpdGlvbigpfSw3MCl9LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kZWwub2Zmc2V0SGVpZ2h0LHQuYW5jaG9yRWw9dC4kZWwucGFyZW50Tm9kZSx0LmFuY2hvckVsLnJlbW92ZUNoaWxkKHQuJGVsKSwodC5hbmNob3JFbC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLXBvcHVwLS1za2lwXCIpfHx0LmFuY2hvckVsLmNsYXNzTGlzdC5jb250YWlucyhcIm5vLXBvaW50ZXItZXZlbnRzXCIpKSYmKHQuYW5jaG9yRWw9dC5hbmNob3JFbC5wYXJlbnROb2RlKSx0LiRxLnBsYXRmb3JtLmlzLm1vYmlsZT90LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQuc2hvdyk6KHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix0Ll9fZGVsYXlTaG93KSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHQuX19kZWxheVNob3cpLHQuYW5jaG9yRWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0Ll9fZGVsYXlIaWRlKSx0LmFuY2hvckVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdC5fX2RlbGF5SGlkZSkpLHQudmFsdWUmJnQuc2hvdygpfSl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpLHRoaXMuYW5jaG9yRWwmJih0aGlzLiRxLnBsYXRmb3JtLmlzLm1vYmlsZT90aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMuc2hvdyk6KHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIix0aGlzLl9fZGVsYXlTaG93KSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLHRoaXMuX19kZWxheVNob3cpLHRoaXMuYW5jaG9yRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0aGlzLl9fZGVsYXlIaWRlKSx0aGlzLmFuY2hvckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5fX2RlbGF5SGlkZSkpKX19O2Z1bmN0aW9uIHJ1bih0LGUsaSl7ZS5oYW5kbGVyP2UuaGFuZGxlcih0LGksaS5jYXJldCk6aS5ydW5DbWQoZS5jbWQsZS5wYXJhbSl9ZnVuY3Rpb24gZ2V0QnRuKHQsZSxpLHMsbil7dm9pZCAwPT09biYmKG49ITEpO3ZhciBvPW58fFwidG9nZ2xlXCI9PT1pLnR5cGUmJihpLnRvZ2dsZWQ/aS50b2dnbGVkKGUpOmkuY21kJiZlLmNhcmV0LmlzKGkuY21kLGkucGFyYW0pKSxyPVtdLGE9e2NsaWNrOmZ1bmN0aW9uKHQpe3MmJnMoKSxydW4odCxpLGUpfX07aWYoaS50aXAmJmUuJHEucGxhdGZvcm0uaXMuZGVza3RvcCl7dmFyIGw9aS5rZXk/dChcImRpdlwiLFt0KFwic21hbGxcIixcIihDVFJMICsgXCIrU3RyaW5nLmZyb21DaGFyQ29kZShpLmtleSkrXCIpXCIpXSk6bnVsbDtyLnB1c2godChRVG9vbHRpcCx7cHJvcHM6e2RlbGF5OjFlM319LFt0KFwiZGl2XCIse2RvbVByb3BzOntpbm5lckhUTUw6aS50aXB9fSksbF0pKX1yZXR1cm4gdChRQnRuLHtwcm9wczpPYmplY3QuYXNzaWduKHt9LGUuYnV0dG9uUHJvcHMse2ljb246aS5pY29uLGNvbG9yOm8/aS50b2dnbGVDb2xvcnx8ZS50b29sYmFyVG9nZ2xlQ29sb3I6aS5jb2xvcnx8ZS50b29sYmFyQ29sb3IsdGV4dENvbG9yOm8mJihlLnRvb2xiYXJGbGF0fHxlLnRvb2xiYXJPdXRsaW5lKT9udWxsOmkudGV4dENvbG9yfHxlLnRvb2xiYXJUZXh0Q29sb3IsbGFiZWw6aS5sYWJlbCxkaXNhYmxlOiEhaS5kaXNhYmxlJiYoXCJmdW5jdGlvblwiIT10eXBlb2YgaS5kaXNhYmxlfHxpLmRpc2FibGUoZSkpfSksb246YX0scil9ZnVuY3Rpb24gZ2V0RHJvcGRvd24odCxlLGkpe3ZhciBzLG4sbz1pLmxhYmVsLHI9aS5pY29uLGE9XCJuby1pY29uc1wiPT09aS5saXN0O2Z1bmN0aW9uIGwoKXtoLmNvbXBvbmVudEluc3RhbmNlLmhpZGUoKX1cIm9ubHktaWNvbnNcIj09PWkubGlzdD8obj1pLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPXZvaWQgMD09PWkudHlwZSYmZS5jYXJldC5pcyhpLmNtZCxpLnBhcmFtKTtyZXR1cm4gcyYmKG89aS50aXAscj1pLmljb24pLGdldEJ0bih0LGUsaSxsLHMpfSkscz1lLnRvb2xiYXJCYWNrZ3JvdW5kQ2xhc3Msbj1bdChRQnRuR3JvdXAse3Byb3BzOmUuYnV0dG9uUHJvcHMsc3RhdGljQ2xhc3M6XCJyZWxhdGl2ZS1wb3NpdGlvbiBxLWVkaXRvci10b29sYmFyLXBhZGRpbmdcIixzdHlsZTp7Ym9yZGVyUmFkaXVzOlwiMFwifX0sbildKToobj1pLm9wdGlvbnMubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPSEhaS5kaXNhYmxlJiZpLmRpc2FibGUoZSksbj12b2lkIDA9PT1pLnR5cGUmJmUuY2FyZXQuaXMoaS5jbWQsaS5wYXJhbSk7biYmKG89aS50aXAscj1pLmljb24pO3ZhciBjPWkuaHRtbFRpcDtyZXR1cm4gdChRSXRlbSx7cHJvcHM6e2FjdGl2ZTpuLGxpbms6IXN9LGNsYXNzOntkaXNhYmxlZDpzfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24odCl7c3x8KGwoKSxlLiRyZWZzLmNvbnRlbnQmJmUuJHJlZnMuY29udGVudC5mb2N1cygpLGUuY2FyZXQucmVzdG9yZSgpLHJ1bih0LGksZSkpfX19LFthP1wiXCI6dChRSXRlbVNpZGUse3Byb3BzOntpY29uOmkuaWNvbn19KSx0KFFJdGVtTWFpbix7cHJvcHM6IWMmJmkudGlwP3tsYWJlbDppLnRpcH06bnVsbCxkb21Qcm9wczpjP3tpbm5lckhUTUw6aS5odG1sVGlwfTpudWxsfSldKX0pLHM9W2UudG9vbGJhckJhY2tncm91bmRDbGFzcyxlLnRvb2xiYXJUZXh0Q29sb3I/XCJ0ZXh0LVwiK2UudG9vbGJhclRleHRDb2xvcjpcIlwiXSxuPVt0KFFMaXN0LHtwcm9wczp7c2VwYXJhdG9yOiEwfX0sW25dKV0pO3ZhciBjPWkuaGlnaGxpZ2h0JiZvIT09aS5sYWJlbCxoPXQoUUJ0bkRyb3Bkb3duLHtwcm9wczpPYmplY3QuYXNzaWduKHt9LGUuYnV0dG9uUHJvcHMse25vQ2FwczohMCxub1dyYXA6ITAsY29sb3I6Yz9lLnRvb2xiYXJUb2dnbGVDb2xvcjplLnRvb2xiYXJDb2xvcix0ZXh0Q29sb3I6YyYmKGUudG9vbGJhckZsYXR8fGUudG9vbGJhck91dGxpbmUpP251bGw6ZS50b29sYmFyVGV4dENvbG9yLGxhYmVsOmkuZml4ZWRMYWJlbD9pLmxhYmVsOm8saWNvbjppLmZpeGVkSWNvbj9pLmljb246cixjb250ZW50Q2xhc3M6c30pfSxuKTtyZXR1cm4gaH1mdW5jdGlvbiBnZXRUb29sYmFyKHQsZSl7aWYoZS5jYXJldClyZXR1cm4gZS5idXR0b25zLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChRQnRuR3JvdXAse3Byb3BzOmUuYnV0dG9uUHJvcHMsc3RhdGljQ2xhc3M6XCJpdGVtcy1jZW50ZXIgcmVsYXRpdmUtcG9zaXRpb25cIn0saS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuXCJzbG90XCI9PT1pLnR5cGU/ZS4kc2xvdHNbaS5zbG90XTpcImRyb3Bkb3duXCI9PT1pLnR5cGU/Z2V0RHJvcGRvd24odCxlLGkpOmdldEJ0bih0LGUsaSl9KSl9KX1mdW5jdGlvbiBnZXRGb250cyh0LGUsaSxzKXt2b2lkIDA9PT1zJiYocz17fSk7dmFyIG49T2JqZWN0LmtleXMocyk7aWYoMD09PW4ubGVuZ3RoKXJldHVybnt9O3ZhciBvPXtkZWZhdWx0X2ZvbnQ6e2NtZDpcImZvbnROYW1lXCIscGFyYW06dCxpY29uOmksdGlwOmV9fTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXNbdF07b1t0XT17Y21kOlwiZm9udE5hbWVcIixwYXJhbTplLGljb246aSx0aXA6ZSxodG1sVGlwOic8Zm9udCBmYWNlPVwiJytlKydcIj4nK2UrXCI8L2ZvbnQ+XCJ9fSksb31mdW5jdGlvbiBnZXRMaW5rRWRpdG9yKHQsZSl7aWYoZS5jYXJldCl7dmFyIGk9ZS50b29sYmFyQ29sb3J8fGUudG9vbGJhclRleHRDb2xvcixzPWUuZWRpdExpbmtVcmwsbj1mdW5jdGlvbigpe2UuY2FyZXQucmVzdG9yZSgpLHMhPT1lLmVkaXRMaW5rVXJsJiZkb2N1bWVudC5leGVjQ29tbWFuZChcImNyZWF0ZUxpbmtcIiwhMSxcIlwiPT09cz9cIiBcIjpzKSxlLmVkaXRMaW5rVXJsPW51bGx9O3JldHVyblt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1teC14c1wiLGNsYXNzOlwidGV4dC1cIitpfSxbZS4kcS5pMThuLmVkaXRvci51cmwrXCI6IFwiXSksdChRSW5wdXQse2tleTpcInFlZHRfYnRtX2lucHV0XCIsc3RhdGljQ2xhc3M6XCJxLW1hLW5vbmUgcS1wYS1ub25lIGNvbCBxLWVkaXRvci1pbnB1dFwiLHByb3BzOnt2YWx1ZTpzLGNvbG9yOmksYXV0b2ZvY3VzOiEwLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtzPXR9LGtleWRvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksbigpO2Nhc2UgMjc6ZS5jYXJldC5yZXN0b3JlKCksIWUuZWRpdExpbmtVcmwmJmRvY3VtZW50LmV4ZWNDb21tYW5kKFwidW5saW5rXCIpLGUuZWRpdExpbmtVcmw9bnVsbH19fX0pLHQoUUJ0bkdyb3VwLHtrZXk6XCJxZWR0X2J0bV9ncnBcIixwcm9wczplLmJ1dHRvblByb3BzfSxbdChRQnRuLHtrZXk6XCJxZWR0X2J0bV9yZW1cIixhdHRyczp7dGFiaW5kZXg6LTF9LHByb3BzOk9iamVjdC5hc3NpZ24oe30sZS5idXR0b25Qcm9wcyx7bGFiZWw6ZS4kcS5pMThuLmxhYmVsLnJlbW92ZSxub0NhcHM6ITB9KSxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLmNhcmV0LnJlc3RvcmUoKSxkb2N1bWVudC5leGVjQ29tbWFuZChcInVubGlua1wiKSxlLmVkaXRMaW5rVXJsPW51bGx9fX0pLHQoUUJ0bix7a2V5OlwicWVkdF9idG1fdXBkXCIscHJvcHM6T2JqZWN0LmFzc2lnbih7fSxlLmJ1dHRvblByb3BzLHtsYWJlbDplLiRxLmkxOG4ubGFiZWwudXBkYXRlLG5vQ2FwczohMH0pLG9uOntjbGljazpufX0pXSldfX1mdW5jdGlvbiBnZXRCbG9ja0VsZW1lbnQodCxlKXtpZihlJiZ0PT09ZSlyZXR1cm4gbnVsbDt2YXIgaT0od2luZG93LmdldENvbXB1dGVkU3R5bGU/d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk6dC5jdXJyZW50U3R5bGUpLmRpc3BsYXk7cmV0dXJuXCJibG9ja1wiPT09aXx8XCJ0YWJsZVwiPT09aT90OmdldEJsb2NrRWxlbWVudCh0LnBhcmVudE5vZGUpfWZ1bmN0aW9uIGlzQ2hpbGRPZih0LGUpe2lmKCF0KXJldHVybiExO2Zvcig7dD10LnBhcmVudE5vZGU7KXtpZih0PT09ZG9jdW1lbnQuYm9keSlyZXR1cm4hMTtpZih0PT09ZSlyZXR1cm4hMH1yZXR1cm4hMX12YXIgdXJsUmVnZXg9L15odHRwcz86XFwvXFwvLyxDYXJldD1mdW5jdGlvbih0LGUpe3RoaXMuZWw9dCx0aGlzLnZtPWV9LHByb3RvdHlwZUFjY2Vzc29ycz17c2VsZWN0aW9uOntjb25maWd1cmFibGU6ITB9LGhhc1NlbGVjdGlvbjp7Y29uZmlndXJhYmxlOiEwfSxyYW5nZTp7Y29uZmlndXJhYmxlOiEwfSxwYXJlbnQ6e2NvbmZpZ3VyYWJsZTohMH0sYmxvY2tQYXJlbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3Byb3RvdHlwZUFjY2Vzc29ycy5zZWxlY3Rpb24uZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5lbCl7dmFyIHQ9ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIGlzQ2hpbGRPZih0LmFuY2hvck5vZGUsdGhpcy5lbCkmJmlzQ2hpbGRPZih0LmZvY3VzTm9kZSx0aGlzLmVsKT90OnZvaWQgMH19LHByb3RvdHlwZUFjY2Vzc29ycy5oYXNTZWxlY3Rpb24uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uP3RoaXMuc2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoPjA6bnVsbH0scHJvdG90eXBlQWNjZXNzb3JzLnJhbmdlLmdldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc2VsZWN0aW9uO2lmKHQpcmV0dXJuIHQucmFuZ2VDb3VudD90LmdldFJhbmdlQXQoMCk6bnVsbH0scHJvdG90eXBlQWNjZXNzb3JzLnBhcmVudC5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJhbmdlO2lmKHQpe3ZhciBlPXQuc3RhcnRDb250YWluZXI7cmV0dXJuIGUubm9kZVR5cGU9PT1kb2N1bWVudC5FTEVNRU5UX05PREU/ZTplLnBhcmVudE5vZGV9fSxwcm90b3R5cGVBY2Nlc3NvcnMuYmxvY2tQYXJlbnQuZ2V0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnQ7aWYodClyZXR1cm4gZ2V0QmxvY2tFbGVtZW50KHQsdGhpcy5lbCl9LENhcmV0LnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXRoaXMucmFuZ2UpLHRoaXMuX3JhbmdlPXR9LENhcmV0LnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PXRoaXMuX3JhbmdlKTt2YXIgZT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLGk9ZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCk7dD8oZS5zZXRTdGFydCh0LnN0YXJ0Q29udGFpbmVyLHQuc3RhcnRPZmZzZXQpLGUuc2V0RW5kKHQuZW5kQ29udGFpbmVyLHQuZW5kT2Zmc2V0KSxpLnJlbW92ZUFsbFJhbmdlcygpLGkuYWRkUmFuZ2UoZSkpOihpLnNlbGVjdEFsbENoaWxkcmVuKHRoaXMuZWwpLGkuY29sbGFwc2VUb0VuZCgpKX0sQ2FyZXQucHJvdG90eXBlLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe3ZhciBpPWU/dGhpcy5wYXJlbnQ6dGhpcy5ibG9ja1BhcmVudDtyZXR1cm4hIWkmJmkubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sQ2FyZXQucHJvdG90eXBlLmhhc1BhcmVudHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnQ7cmV0dXJuISFlJiZ0LmluY2x1ZGVzKGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl9LENhcmV0LnByb3RvdHlwZS5pcz1mdW5jdGlvbih0LGUpe3N3aXRjaCh0KXtjYXNlXCJmb3JtYXRCbG9ja1wiOnJldHVyblwiRElWXCI9PT1lJiZ0aGlzLnBhcmVudD09PXRoaXMuZWx8fHRoaXMuaGFzUGFyZW50KGUsXCJQUkVcIj09PWUpO2Nhc2VcImxpbmtcIjpyZXR1cm4gdGhpcy5oYXNQYXJlbnQoXCJBXCIsITApO2Nhc2VcImZvbnRTaXplXCI6cmV0dXJuIGRvY3VtZW50LnF1ZXJ5Q29tbWFuZFZhbHVlKHQpPT09ZTtjYXNlXCJmb250TmFtZVwiOnZhciBpPWRvY3VtZW50LnF1ZXJ5Q29tbWFuZFZhbHVlKHQpO3JldHVybiBpPT09J1wiJytlKydcIid8fGk9PT1lO2Nhc2VcImZ1bGxzY3JlZW5cIjpyZXR1cm4gdGhpcy52bS5pbkZ1bGxzY3JlZW47Y2FzZSB2b2lkIDA6cmV0dXJuITE7ZGVmYXVsdDp2YXIgcz1kb2N1bWVudC5xdWVyeUNvbW1hbmRTdGF0ZSh0KTtyZXR1cm4gZT9zPT09ZTpzfX0sQ2FyZXQucHJvdG90eXBlLmdldFBhcmVudEF0dHJpYnV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0QXR0cmlidXRlKHQpfSxDYXJldC5wcm90b3R5cGUuY2FuPWZ1bmN0aW9uKHQpe2lmKFwib3V0ZGVudFwiPT09dClyZXR1cm4gdGhpcy5oYXNQYXJlbnRzKFtcImJsb2NrcXVvdGVcIixcImxpXCJdKTtpZihcImluZGVudFwiPT09dCl7dmFyIGU9ISF0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihcImJsb2NrcXVvdGVcIj09PWUpcmV0dXJuITE7aWYoXCJsaVwiPT09ZSl7dmFyIGk9dGhpcy5wYXJlbnQucHJldmlvdXNTaWJsaW5nO3JldHVybiBpJiZcImxpXCI9PT1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9cmV0dXJuITF9fSxDYXJldC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24odCxlLGkpe2lmKHZvaWQgMD09PWkmJihpPWZ1bmN0aW9uKCl7fSksXCJmb3JtYXRCbG9ja1wiPT09dClbXCJCTE9DS1FVT1RFXCIsXCJIMVwiLFwiSDJcIixcIkgzXCIsXCJINFwiLFwiSDVcIixcIkg2XCJdLmluY2x1ZGVzKGUpJiZ0aGlzLmlzKHQsZSkmJih0PVwib3V0ZGVudFwiLGU9bnVsbCksXCJQUkVcIj09PWUmJnRoaXMuaXModCxcIlBSRVwiKSYmKGU9XCJQXCIpO2Vsc2V7aWYoXCJwcmludFwiPT09dCl7aSgpO3ZhciBzPXdpbmRvdy5vcGVuKCk7cmV0dXJuIHMuZG9jdW1lbnQud3JpdGUoXCJcXG4gICAgICAgIDwhZG9jdHlwZSBodG1sPlxcbiAgICAgICAgPGh0bWw+XFxuICAgICAgICAgIDxoZWFkPlxcbiAgICAgICAgICAgIDx0aXRsZT5QcmludCAtIFwiK2RvY3VtZW50LnRpdGxlK1wiPC90aXRsZT5cXG4gICAgICAgICAgPC9oZWFkPlxcbiAgICAgICAgICA8Ym9keT5cXG4gICAgICAgICAgICA8ZGl2PlwiK3RoaXMuZWwuaW5uZXJIVE1MK1wiPC9kaXY+XFxuICAgICAgICAgIDwvYm9keT5cXG4gICAgICAgIDwvaHRtbD5cXG4gICAgICBcIikscy5wcmludCgpLHZvaWQgcy5jbG9zZSgpfWlmKFwibGlua1wiPT09dCl7dmFyIG49dGhpcy5nZXRQYXJlbnRBdHRyaWJ1dGUoXCJocmVmXCIpO2lmKG4pdGhpcy52bS5lZGl0TGlua1VybD1uO2Vsc2V7dmFyIG89dGhpcy5zZWxlY3RXb3JkKHRoaXMuc2VsZWN0aW9uKSxyPW8/by50b1N0cmluZygpOlwiXCI7aWYoIXIubGVuZ3RoKXJldHVybjt0aGlzLnZtLmVkaXRMaW5rVXJsPXVybFJlZ2V4LnRlc3Qocik/cjpcIlwiLGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY3JlYXRlTGlua1wiLCExLFwiXCI9PT10aGlzLnZtLmVkaXRMaW5rVXJsP1wiIFwiOnRoaXMudm0uZWRpdExpbmtVcmwpfXJldHVybiB0aGlzLnJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLnBhcmVudCksdm9pZCB0aGlzLnNhdmUoKX1pZihcImZ1bGxzY3JlZW5cIj09PXQpcmV0dXJuIHRoaXMudm0udG9nZ2xlRnVsbHNjcmVlbigpLHZvaWQgaSgpfWRvY3VtZW50LmV4ZWNDb21tYW5kKHQsITEsZSksaSgpfSxDYXJldC5wcm90b3R5cGUuc2VsZWN0V29yZD1mdW5jdGlvbih0KXtpZighdC5pc0NvbGxhcHNlZClyZXR1cm4gdDt2YXIgZT1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO2Uuc2V0U3RhcnQodC5hbmNob3JOb2RlLHQuYW5jaG9yT2Zmc2V0KSxlLnNldEVuZCh0LmZvY3VzTm9kZSx0LmZvY3VzT2Zmc2V0KTt2YXIgaT1lLmNvbGxhcHNlZD9bXCJiYWNrd2FyZFwiLFwiZm9yd2FyZFwiXTpbXCJmb3J3YXJkXCIsXCJiYWNrd2FyZFwiXTtlLmRldGFjaCgpO3ZhciBzPXQuZm9jdXNOb2RlLG49dC5mb2N1c09mZnNldDtyZXR1cm4gdC5jb2xsYXBzZSh0LmFuY2hvck5vZGUsdC5hbmNob3JPZmZzZXQpLHQubW9kaWZ5KFwibW92ZVwiLGlbMF0sXCJjaGFyYWN0ZXJcIiksdC5tb2RpZnkoXCJtb3ZlXCIsaVsxXSxcIndvcmRcIiksdC5leHRlbmQocyxuKSx0Lm1vZGlmeShcImV4dGVuZFwiLGlbMV0sXCJjaGFyYWN0ZXJcIiksdC5tb2RpZnkoXCJleHRlbmRcIixpWzBdLFwid29yZFwiKSx0fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYXJldC5wcm90b3R5cGUscHJvdG90eXBlQWNjZXNzb3JzKTt2YXIgdG9TdHJpbmc9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoYXNPd249T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxjbGFzczJ0eXBlPXt9O2Z1bmN0aW9uIHR5cGUodCl7cmV0dXJuIG51bGw9PT10P1N0cmluZyh0KTpjbGFzczJ0eXBlW3RvU3RyaW5nLmNhbGwodCldfHxcIm9iamVjdFwifWZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodCl7aWYoIXR8fFwib2JqZWN0XCIhPT10eXBlKHQpKXJldHVybiExO2lmKHQuY29uc3RydWN0b3ImJiFoYXNPd24uY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJiFoYXNPd24uY2FsbCh0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcImlzUHJvdG90eXBlT2ZcIikpcmV0dXJuITE7dmFyIGU7Zm9yKGUgaW4gdCk7cmV0dXJuIHZvaWQgMD09PWV8fGhhc093bi5jYWxsKHQsZSl9ZnVuY3Rpb24gZXh0ZW5kKCl7dmFyIHQsZSxpLHMsbixvLHI9YXJndW1lbnRzLGE9YXJndW1lbnRzWzBdfHx7fSxsPTEsYz1hcmd1bWVudHMubGVuZ3RoLGg9ITE7Zm9yKFwiYm9vbGVhblwiPT10eXBlb2YgYSYmKGg9YSxhPWFyZ3VtZW50c1sxXXx8e30sbD0yKSxPYmplY3QoYSkhPT1hJiZcImZ1bmN0aW9uXCIhPT10eXBlKGEpJiYoYT17fSksYz09PWwmJihhPXRoaXMsbC0tKTtsPGM7bCsrKWlmKG51bGwhPT0odD1yW2xdKSlmb3IoZSBpbiB0KWk9YVtlXSxhIT09KHM9dFtlXSkmJihoJiZzJiYoaXNQbGFpbk9iamVjdChzKXx8KG49XCJhcnJheVwiPT09dHlwZShzKSkpPyhuPyhuPSExLG89aSYmXCJhcnJheVwiPT09dHlwZShpKT9pOltdKTpvPWkmJmlzUGxhaW5PYmplY3QoaSk/aTp7fSxhW2VdPWV4dGVuZChoLG8scykpOnZvaWQgMCE9PXMmJihhW2VdPXMpKTtyZXR1cm4gYX1cIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3RcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbih0KXtjbGFzczJ0eXBlW1wiW29iamVjdCBcIit0K1wiXVwiXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgUUVkaXRvcj17bmFtZTpcIlFFZGl0b3JcIixtaXhpbnM6W0Z1bGxzY3JlZW5NaXhpbl0scHJvcHM6e3ZhbHVlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0scmVhZG9ubHk6Qm9vbGVhbixkaXNhYmxlOkJvb2xlYW4sbWluSGVpZ2h0Ont0eXBlOlN0cmluZyxkZWZhdWx0OlwiMTByZW1cIn0sbWF4SGVpZ2h0OlN0cmluZyxoZWlnaHQ6U3RyaW5nLGRlZmluaXRpb25zOk9iamVjdCxmb250czpPYmplY3QsdG9vbGJhcjp7dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10Lmxlbmd0aHx8dC5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGh9KX0sZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltbXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCIsXCJqdXN0aWZ5XCJdLFtcImJvbGRcIixcIml0YWxpY1wiLFwidW5kZXJsaW5lXCIsXCJzdHJpa2VcIl0sW1widW5kb1wiLFwicmVkb1wiXV19fSx0b29sYmFyQ29sb3I6U3RyaW5nLHRvb2xiYXJUZXh0Q29sb3I6U3RyaW5nLHRvb2xiYXJUb2dnbGVDb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdG9vbGJhckJnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleS0zXCJ9LHRvb2xiYXJGbGF0OkJvb2xlYW4sdG9vbGJhck91dGxpbmU6Qm9vbGVhbix0b29sYmFyUHVzaDpCb29sZWFuLHRvb2xiYXJSb3VuZGVkOkJvb2xlYW4sY29udGVudFN0eWxlOk9iamVjdCxjb250ZW50Q2xhc3M6W09iamVjdCxBcnJheSxTdHJpbmddfSxjb21wdXRlZDp7ZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5yZWFkb25seSYmIXRoaXMuZGlzYWJsZX0saGFzVG9vbGJhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvb2xiYXImJnRoaXMudG9vbGJhci5sZW5ndGg+MH0sdG9vbGJhckJhY2tncm91bmRDbGFzczpmdW5jdGlvbigpe2lmKHRoaXMudG9vbGJhckJnKXJldHVyblwiYmctXCIrdGhpcy50b29sYmFyQmd9LGJ1dHRvblByb3BzOmZ1bmN0aW9uKCl7cmV0dXJue291dGxpbmU6dGhpcy50b29sYmFyT3V0bGluZSxmbGF0OnRoaXMudG9vbGJhckZsYXQscHVzaDp0aGlzLnRvb2xiYXJQdXNoLHJvdW5kZWQ6dGhpcy50b29sYmFyUm91bmRlZCxkZW5zZTohMCxjb2xvcjp0aGlzLnRvb2xiYXJDb2xvcixkaXNhYmxlOiF0aGlzLmVkaXRhYmxlfX0sYnV0dG9uRGVmOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcS5pMThuLmVkaXRvcixlPXRoaXMuJHEuaWNvbi5lZGl0b3I7cmV0dXJue2JvbGQ6e2NtZDpcImJvbGRcIixpY29uOmUuYm9sZCx0aXA6dC5ib2xkLGtleTo2Nn0saXRhbGljOntjbWQ6XCJpdGFsaWNcIixpY29uOmUuaXRhbGljLHRpcDp0Lml0YWxpYyxrZXk6NzN9LHN0cmlrZTp7Y21kOlwic3RyaWtlVGhyb3VnaFwiLGljb246ZS5zdHJpa2V0aHJvdWdoLHRpcDp0LnN0cmlrZXRocm91Z2gsa2V5OjgzfSx1bmRlcmxpbmU6e2NtZDpcInVuZGVybGluZVwiLGljb246ZS51bmRlcmxpbmUsdGlwOnQudW5kZXJsaW5lLGtleTo4NX0sdW5vcmRlcmVkOntjbWQ6XCJpbnNlcnRVbm9yZGVyZWRMaXN0XCIsaWNvbjplLnVub3JkZXJlZExpc3QsdGlwOnQudW5vcmRlcmVkTGlzdH0sb3JkZXJlZDp7Y21kOlwiaW5zZXJ0T3JkZXJlZExpc3RcIixpY29uOmUub3JkZXJlZExpc3QsdGlwOnQub3JkZXJlZExpc3R9LHN1YnNjcmlwdDp7Y21kOlwic3Vic2NyaXB0XCIsaWNvbjplLnN1YnNjcmlwdCx0aXA6dC5zdWJzY3JpcHQsaHRtbFRpcDpcIng8c3Vic2NyaXB0PjI8L3N1YnNjcmlwdD5cIn0sc3VwZXJzY3JpcHQ6e2NtZDpcInN1cGVyc2NyaXB0XCIsaWNvbjplLnN1cGVyc2NyaXB0LHRpcDp0LnN1cGVyc2NyaXB0LGh0bWxUaXA6XCJ4PHN1cGVyc2NyaXB0PjI8L3N1cGVyc2NyaXB0PlwifSxsaW5rOntjbWQ6XCJsaW5rXCIsaWNvbjplLmh5cGVybGluayx0aXA6dC5oeXBlcmxpbmssa2V5Ojc2fSxmdWxsc2NyZWVuOntjbWQ6XCJmdWxsc2NyZWVuXCIsaWNvbjplLnRvZ2dsZUZ1bGxzY3JlZW4sdGlwOnQudG9nZ2xlRnVsbHNjcmVlbixrZXk6NzB9LHF1b3RlOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiQkxPQ0tRVU9URVwiLGljb246ZS5xdW90ZSx0aXA6dC5xdW90ZSxrZXk6ODF9LGxlZnQ6e2NtZDpcImp1c3RpZnlMZWZ0XCIsaWNvbjplLmxlZnQsdGlwOnQubGVmdH0sY2VudGVyOntjbWQ6XCJqdXN0aWZ5Q2VudGVyXCIsaWNvbjplLmNlbnRlcix0aXA6dC5jZW50ZXJ9LHJpZ2h0OntjbWQ6XCJqdXN0aWZ5UmlnaHRcIixpY29uOmUucmlnaHQsdGlwOnQucmlnaHR9LGp1c3RpZnk6e2NtZDpcImp1c3RpZnlGdWxsXCIsaWNvbjplLmp1c3RpZnksdGlwOnQuanVzdGlmeX0scHJpbnQ6e3R5cGU6XCJuby1zdGF0ZVwiLGNtZDpcInByaW50XCIsaWNvbjplLnByaW50LHRpcDp0LnByaW50LGtleTo4MH0sb3V0ZGVudDp7dHlwZTpcIm5vLXN0YXRlXCIsZGlzYWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXJldCYmIXQuY2FyZXQuY2FuKFwib3V0ZGVudFwiKX0sY21kOlwib3V0ZGVudFwiLGljb246ZS5vdXRkZW50LHRpcDp0Lm91dGRlbnR9LGluZGVudDp7dHlwZTpcIm5vLXN0YXRlXCIsZGlzYWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXJldCYmIXQuY2FyZXQuY2FuKFwiaW5kZW50XCIpfSxjbWQ6XCJpbmRlbnRcIixpY29uOmUuaW5kZW50LHRpcDp0LmluZGVudH0scmVtb3ZlRm9ybWF0Ont0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJyZW1vdmVGb3JtYXRcIixpY29uOmUucmVtb3ZlRm9ybWF0LHRpcDp0LnJlbW92ZUZvcm1hdH0saHI6e3R5cGU6XCJuby1zdGF0ZVwiLGNtZDpcImluc2VydEhvcml6b250YWxSdWxlXCIsaWNvbjplLmhyLHRpcDp0LmhyfSx1bmRvOnt0eXBlOlwibm8tc3RhdGVcIixjbWQ6XCJ1bmRvXCIsaWNvbjplLnVuZG8sdGlwOnQudW5kbyxrZXk6OTB9LHJlZG86e3R5cGU6XCJuby1zdGF0ZVwiLGNtZDpcInJlZG9cIixpY29uOmUucmVkbyx0aXA6dC5yZWRvLGtleTo4OX0saDE6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJIMVwiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyMSxodG1sVGlwOic8aDEgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyMStcIjwvaDE+XCJ9LGgyOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDJcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjIsaHRtbFRpcDonPGgyIGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjIrXCI8L2gyPlwifSxoMzp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkgzXCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXIzLGh0bWxUaXA6JzxoMyBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXIzK1wiPC9oMz5cIn0saDQ6e2NtZDpcImZvcm1hdEJsb2NrXCIscGFyYW06XCJINFwiLGljb246ZS5oZWFkZXIsdGlwOnQuaGVhZGVyNCxodG1sVGlwOic8aDQgY2xhc3M9XCJxLW1hLW5vbmVcIj4nK3QuaGVhZGVyNCtcIjwvaDQ+XCJ9LGg1OntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiSDVcIixpY29uOmUuaGVhZGVyLHRpcDp0LmhlYWRlcjUsaHRtbFRpcDonPGg1IGNsYXNzPVwicS1tYS1ub25lXCI+Jyt0LmhlYWRlcjUrXCI8L2g1PlwifSxoNjp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkg2XCIsaWNvbjplLmhlYWRlcix0aXA6dC5oZWFkZXI2LGh0bWxUaXA6JzxoNiBjbGFzcz1cInEtbWEtbm9uZVwiPicrdC5oZWFkZXI2K1wiPC9oNj5cIn0scDp7Y21kOlwiZm9ybWF0QmxvY2tcIixwYXJhbTpcIkRJVlwiLGljb246ZS5oZWFkZXIsdGlwOnQucGFyYWdyYXBofSxjb2RlOntjbWQ6XCJmb3JtYXRCbG9ja1wiLHBhcmFtOlwiUFJFXCIsaWNvbjplLmNvZGUsdGlwOlwiPGNvZGU+XCIrdC5jb2RlK1wiPC9jb2RlPlwifSxcInNpemUtMVwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiMVwiLGljb246ZS5zaXplLHRpcDp0LnNpemUxLGh0bWxUaXA6Jzxmb250IHNpemU9XCIxXCI+Jyt0LnNpemUxK1wiPC9mb250PlwifSxcInNpemUtMlwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiMlwiLGljb246ZS5zaXplLHRpcDp0LnNpemUyLGh0bWxUaXA6Jzxmb250IHNpemU9XCIyXCI+Jyt0LnNpemUyK1wiPC9mb250PlwifSxcInNpemUtM1wiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiM1wiLGljb246ZS5zaXplLHRpcDp0LnNpemUzLGh0bWxUaXA6Jzxmb250IHNpemU9XCIzXCI+Jyt0LnNpemUzK1wiPC9mb250PlwifSxcInNpemUtNFwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiNFwiLGljb246ZS5zaXplLHRpcDp0LnNpemU0LGh0bWxUaXA6Jzxmb250IHNpemU9XCI0XCI+Jyt0LnNpemU0K1wiPC9mb250PlwifSxcInNpemUtNVwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiNVwiLGljb246ZS5zaXplLHRpcDp0LnNpemU1LGh0bWxUaXA6Jzxmb250IHNpemU9XCI1XCI+Jyt0LnNpemU1K1wiPC9mb250PlwifSxcInNpemUtNlwiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiNlwiLGljb246ZS5zaXplLHRpcDp0LnNpemU2LGh0bWxUaXA6Jzxmb250IHNpemU9XCI2XCI+Jyt0LnNpemU2K1wiPC9mb250PlwifSxcInNpemUtN1wiOntjbWQ6XCJmb250U2l6ZVwiLHBhcmFtOlwiN1wiLGljb246ZS5zaXplLHRpcDp0LnNpemU3LGh0bWxUaXA6Jzxmb250IHNpemU9XCI3XCI+Jyt0LnNpemU3K1wiPC9mb250PlwifX19LGJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5kZWZpbml0aW9uc3x8e30saT10aGlzLmRlZmluaXRpb25zfHx0aGlzLmZvbnRzP2V4dGVuZCghMCx7fSx0aGlzLmJ1dHRvbkRlZixlLGdldEZvbnRzKHRoaXMuZGVmYXVsdEZvbnQsdGhpcy4kcS5pMThuLmVkaXRvci5kZWZhdWx0Rm9udCx0aGlzLiRxLmljb24uZWRpdG9yLmZvbnQsdGhpcy5mb250cykpOnRoaXMuYnV0dG9uRGVmO3JldHVybiB0aGlzLnRvb2xiYXIubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLm1hcChmdW5jdGlvbihzKXtpZihzLm9wdGlvbnMpcmV0dXJue3R5cGU6XCJkcm9wZG93blwiLGljb246cy5pY29uLGxhYmVsOnMubGFiZWwsZml4ZWRMYWJlbDpzLmZpeGVkTGFiZWwsZml4ZWRJY29uOnMuZml4ZWRJY29uLGhpZ2hsaWdodDpzLmhpZ2hsaWdodCxsaXN0OnMubGlzdCxvcHRpb25zOnMub3B0aW9ucy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGlbdF19KX07dmFyIG49aVtzXTtyZXR1cm4gbj9cIm5vLXN0YXRlXCI9PT1uLnR5cGV8fGVbc10mJih2b2lkIDA9PT1uLmNtZHx8dC5idXR0b25EZWZbbi5jbWRdJiZcIm5vLXN0YXRlXCI9PT10LmJ1dHRvbkRlZltuLmNtZF0udHlwZSk/bjpleHRlbmQoITAse3R5cGU6XCJ0b2dnbGVcIn0sbik6e3R5cGU6XCJzbG90XCIsc2xvdDpzfX0pfSl9LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPWZ1bmN0aW9uKGUpe2Uua2V5JiYodFtlLmtleV09e2NtZDplLmNtZCxwYXJhbTplLnBhcmFtfSl9O3JldHVybiB0aGlzLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmZvckVhY2goZnVuY3Rpb24odCl7dC5vcHRpb25zP3Qub3B0aW9ucy5mb3JFYWNoKGUpOmUodCl9KX0pLHR9LGlubmVyU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbkZ1bGxzY3JlZW4/dGhpcy5jb250ZW50U3R5bGU6W3ttaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHQsaGVpZ2h0OnRoaXMuaGVpZ2h0LG1heEhlaWdodDp0aGlzLm1heEhlaWdodH0sdGhpcy5jb250ZW50U3R5bGVdfSxpbm5lckNsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuY29udGVudENsYXNzLHtjb2w6dGhpcy5pbkZ1bGxzY3JlZW4sXCJvdmVyZmxvdy1hdXRvXCI6dGhpcy5pbkZ1bGxzY3JlZW58fHRoaXMubWF4SGVpZ2h0fV19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2VkaXRXYXRjaGVyOiEwLGVkaXRMaW5rVXJsOm51bGx9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5lZGl0V2F0Y2hlcj90aGlzLiRyZWZzLmNvbnRlbnQuaW5uZXJIVE1MPXQ6dGhpcy5lZGl0V2F0Y2hlcj0hMH19LG1ldGhvZHM6e29uSW5wdXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5lZGl0V2F0Y2hlcil7dmFyIGU9dGhpcy4kcmVmcy5jb250ZW50LmlubmVySFRNTDtlIT09dGhpcy52YWx1ZSYmKHRoaXMuZWRpdFdhdGNoZXI9ITEsdGhpcy4kZW1pdChcImlucHV0XCIsZSkpfX0sb25LZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBlPWdldEV2ZW50S2V5KHQpO2lmKCF0LmN0cmxLZXkpcmV0dXJuIHRoaXMucmVmcmVzaFRvb2xiYXIoKSx2b2lkKHRoaXMuJHEucGxhdGZvcm0uaXMuaWUmJnRoaXMuJG5leHRUaWNrKHRoaXMub25JbnB1dCkpO3ZhciBpPXRoaXMua2V5c1tlXTtpZih2b2lkIDAhPT1pKXt2YXIgcz1pLmNtZCxuPWkucGFyYW07c3RvcEFuZFByZXZlbnQodCksdGhpcy5ydW5DbWQocyxuLCExKSx0aGlzLiRxLnBsYXRmb3JtLmlzLmllJiZ0aGlzLiRuZXh0VGljayh0aGlzLm9uSW5wdXQpfX0scnVuQ21kOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzO3ZvaWQgMD09PWkmJihpPSEwKSx0aGlzLmZvY3VzKCksdGhpcy5jYXJldC5hcHBseSh0LGUsZnVuY3Rpb24oKXtzLmZvY3VzKCksaSYmcy5yZWZyZXNoVG9vbGJhcigpfSl9LHJlZnJlc2hUb29sYmFyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5lZGl0TGlua1VybD1udWxsLHQuJGZvcmNlVXBkYXRlKCl9LDEpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuJHJlZnMuY29udGVudC5mb2N1cygpfSxnZXRDb250ZW50RWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kcmVmcy5jb250ZW50fX0sY3JlYXRlZDpmdW5jdGlvbigpe2lzU1NSfHwoZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJkZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yXCIsITEsXCJkaXZcIiksdGhpcy5kZWZhdWx0Rm9udD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5mb250RmFtaWx5KX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LiRyZWZzLmNvbnRlbnQmJih0LmNhcmV0PW5ldyBDYXJldCh0LiRyZWZzLmNvbnRlbnQsdCksdC4kcmVmcy5jb250ZW50LmlubmVySFRNTD10LnZhbHVlKSx0LiRuZXh0VGljayh0LnJlZnJlc2hUb29sYmFyKX0pfSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzO2lmKHRoaXMuaGFzVG9vbGJhcil7dmFyIHM9e3N0YXRpY0NsYXNzOlwicS1lZGl0b3ItdG9vbGJhciByb3cgbm8td3JhcCBzY3JvbGwteFwiLGNsYXNzOlt7XCJxLWVkaXRvci10b29sYmFyLXNlcGFyYXRvclwiOiF0aGlzLnRvb2xiYXJPdXRsaW5lJiYhdGhpcy50b29sYmFyUHVzaH0sdGhpcy50b29sYmFyQmFja2dyb3VuZENsYXNzXX07KGU9W10pLnB1c2godChcImRpdlwiLGV4dGVuZCh7a2V5OlwicWVkdF90b3BcIn0scyksW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCBxLWVkaXRvci10b29sYmFyLXBhZGRpbmcgZml0IGl0ZW1zLWNlbnRlclwifSxnZXRUb29sYmFyKHQsdGhpcykpXSkpLG51bGwhPT10aGlzLmVkaXRMaW5rVXJsJiZlLnB1c2godChcImRpdlwiLGV4dGVuZCh7a2V5OlwicWVkdF9idG1cIn0scyksW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyb3cgbm8td3JhcCBxLWVkaXRvci10b29sYmFyLXBhZGRpbmcgZml0IGl0ZW1zLWNlbnRlclwifSxnZXRMaW5rRWRpdG9yKHQsdGhpcykpXSkpLGU9dChcImRpdlwiLGUpfXJldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1lZGl0b3JcIixzdHlsZTp7aGVpZ2h0OnRoaXMuaW5GdWxsc2NyZWVuP1wiMTAwdmhcIjpudWxsfSxjbGFzczp7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLGZ1bGxzY3JlZW46dGhpcy5pbkZ1bGxzY3JlZW4sY29sdW1uOnRoaXMuaW5GdWxsc2NyZWVufX0sW2UsdChcImRpdlwiLHtyZWY6XCJjb250ZW50XCIsc3RhdGljQ2xhc3M6XCJxLWVkaXRvci1jb250ZW50XCIsc3R5bGU6dGhpcy5pbm5lclN0eWxlLGNsYXNzOnRoaXMuaW5uZXJDbGFzcyxhdHRyczp7Y29udGVudGVkaXRhYmxlOnRoaXMuZWRpdGFibGV9LGRvbVByb3BzOmlzU1NSP3tpbm5lckhUTUw6dGhpcy52YWx1ZX06dm9pZCAwLG9uOntpbnB1dDp0aGlzLm9uSW5wdXQsa2V5ZG93bjp0aGlzLm9uS2V5ZG93bixjbGljazp0aGlzLnJlZnJlc2hUb29sYmFyLGJsdXI6ZnVuY3Rpb24oKXtpLmNhcmV0LnNhdmUoKX19fSldKX19LEZhYk1peGluPXtwcm9wczp7b3V0bGluZTpCb29sZWFuLHB1c2g6Qm9vbGVhbixmbGF0OkJvb2xlYW4sY29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsZ2xvc3N5OkJvb2xlYW59fSxRRmFiPXtuYW1lOlwiUUZhYlwiLG1peGluczpbRmFiTWl4aW4sTW9kZWxUb2dnbGVNaXhpbl0scHJvdmlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJue19fcUZhYkNsb3NlOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhpZGUoZSkudGhlbihmdW5jdGlvbigpe3JldHVybiB0LiRyZWZzLnRyaWdnZXImJnQuJHJlZnMudHJpZ2dlci4kZWwmJnQuJHJlZnMudHJpZ2dlci4kZWwuZm9jdXMoKSxlfSl9fX0scHJvcHM6e2ljb246U3RyaW5nLGFjdGl2ZUljb246U3RyaW5nLGRpcmVjdGlvbjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInJpZ2h0XCJ9LHBlcnNpc3RlbnQ6Qm9vbGVhbn0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpeyF0aGlzLnBlcnNpc3RlbnQmJnRoaXMuaGlkZSgpfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMudmFsdWUmJnRoaXMuc2hvdygpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZhYiB6LWZhYiByb3cgaW5saW5lIGp1c3RpZnktY2VudGVyXCIsY2xhc3M6e1wicS1mYWItb3BlbmVkXCI6dGhpcy5zaG93aW5nfX0sW3QoUUJ0bix7cmVmOlwidHJpZ2dlclwiLHByb3BzOntmYWI6ITAsb3V0bGluZTp0aGlzLm91dGxpbmUscHVzaDp0aGlzLnB1c2gsZmxhdDp0aGlzLmZsYXQsY29sb3I6dGhpcy5jb2xvcix0ZXh0Q29sb3I6dGhpcy50ZXh0Q29sb3IsZ2xvc3N5OnRoaXMuZ2xvc3N5fSxvbjp7Y2xpY2s6dGhpcy50b2dnbGV9fSxbdGhpcy4kc2xvdHMudG9vbHRpcCx0KFFJY29uLHtzdGF0aWNDbGFzczpcInEtZmFiLWljb24gYWJzb2x1dGUtZnVsbFwiLHByb3BzOntuYW1lOnRoaXMuaWNvbnx8dGhpcy4kcS5pY29uLmZhYi5pY29ufX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwicS1mYWItYWN0aXZlLWljb24gYWJzb2x1dGUtZnVsbFwiLHByb3BzOntuYW1lOnRoaXMuYWN0aXZlSWNvbnx8dGhpcy4kcS5pY29uLmZhYi5hY3RpdmVJY29ufX0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmFiLWFjdGlvbnMgZmxleCBuby13cmFwIGlubGluZSBpdGVtcy1jZW50ZXJcIixjbGFzczpcInEtZmFiLVwiK3RoaXMuZGlyZWN0aW9ufSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfX0sUUZhYkFjdGlvbj17bmFtZTpcIlFGYWJBY3Rpb25cIixtaXhpbnM6W0ZhYk1peGluXSxwcm9wczp7aWNvbjp7dHlwZTpTdHJpbmcscmVxdWlyZWQ6ITB9fSxpbmplY3Q6e19fcUZhYkNsb3NlOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFGYWJBY3Rpb24gbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUZhYlwiKX19fSxtZXRob2RzOntjbGljazpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuX19xRmFiQ2xvc2UoKS50aGVuKGZ1bmN0aW9uKCl7ZS4kZW1pdChcImNsaWNrXCIsdCl9KX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChRQnRuLHtwcm9wczp7ZmFiTWluaTohMCxvdXRsaW5lOnRoaXMub3V0bGluZSxwdXNoOnRoaXMucHVzaCxmbGF0OnRoaXMuZmxhdCxjb2xvcjp0aGlzLmNvbG9yLHRleHRDb2xvcjp0aGlzLnRleHRDb2xvcixnbG9zc3k6dGhpcy5nbG9zc3ksaWNvbjp0aGlzLmljb259LG9uOntjbGljazp0aGlzLmNsaWNrfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRRmllbGQ9e25hbWU6XCJRRmllbGRcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxwcm9wczp7aW5zZXQ6e3R5cGU6U3RyaW5nLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJpY29uXCIsXCJsYWJlbFwiLFwiZnVsbFwiXS5pbmNsdWRlcyh0KX19LGxhYmVsOlN0cmluZyxjb3VudDp7dHlwZTpbTnVtYmVyLEJvb2xlYW5dLGRlZmF1bHQ6ITF9LGVycm9yOkJvb2xlYW4sZXJyb3JMYWJlbDpTdHJpbmcsd2FybmluZzpCb29sZWFuLHdhcm5pbmdMYWJlbDpTdHJpbmcsaGVscGVyOlN0cmluZyxpY29uOlN0cmluZyxpY29uQ29sb3I6U3RyaW5nLGRhcms6Qm9vbGVhbixvcmllbnRhdGlvbjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInZlcnRpY2FsXCIsXCJob3Jpem9udGFsXCJdLmluY2x1ZGVzKHQpfX0sbGFiZWxXaWR0aDp7dHlwZTpbTnVtYmVyLFN0cmluZ10sZGVmYXVsdDo1LHZhbGlkYXRvcjpmdW5jdGlvbih0KXt2YXIgZT1wYXJzZUludCh0LDEwKTtyZXR1cm4gZT4wJiZlPDEzfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5wdXQ6e319fSxjb21wdXRlZDp7aGFzRXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5lcnJvcnx8dGhpcy5lcnJvcn0saGFzV2FybmluZzpmdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0Vycm9yJiYodGhpcy5pbnB1dC53YXJuaW5nfHx0aGlzLndhcm5pbmcpfSxjaGlsZEhhc0xhYmVsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXQuZmxvYXRMYWJlbHx8dGhpcy5pbnB1dC5zdGFja0xhYmVsfSxpc0Rhcms6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnB1dC5kYXJrfHx0aGlzLmRhcmt9LGluc2V0SWNvbjpmdW5jdGlvbigpe3JldHVybltcImljb25cIixcImZ1bGxcIl0uaW5jbHVkZXModGhpcy5pbnNldCl9LGhhc05vSW5wdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5SZW5kZXImJighdGhpcy5pbnB1dC4kb3B0aW9uc3x8dGhpcy5pbnB1dC5fX25lZWRzQm9yZGVyKX0sY291bnRlcjpmdW5jdGlvbigpe2lmKHRoaXMuY291bnQpe3ZhciB0PXRoaXMuaW5wdXQubGVuZ3RofHxcIjBcIjtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih0aGlzLmNvdW50KT90K1wiIC8gXCIrdGhpcy5jb3VudDp0fX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybntcInEtZmllbGQtcmVzcG9uc2l2ZVwiOiF0aGlzLmlzVmVydGljYWwmJiF0aGlzLmlzSG9yaXpvbnRhbCxcInEtZmllbGQtdmVydGljYWxcIjp0aGlzLmlzVmVydGljYWwsXCJxLWZpZWxkLWhvcml6b250YWxcIjp0aGlzLmlzSG9yaXpvbnRhbCxcInEtZmllbGQtZmxvYXRpbmdcIjp0aGlzLmNoaWxkSGFzTGFiZWwsXCJxLWZpZWxkLW5vLWxhYmVsXCI6IXRoaXMubGFiZWwmJiF0aGlzLiRzbG90cy5sYWJlbCxcInEtZmllbGQtd2l0aC1lcnJvclwiOnRoaXMuaGFzRXJyb3IsXCJxLWZpZWxkLXdpdGgtd2FybmluZ1wiOnRoaXMuaGFzV2FybmluZyxcInEtZmllbGQtZGFya1wiOnRoaXMuaXNEYXJrLFwicS1maWVsZC1uby1pbnB1dFwiOnRoaXMuaGFzTm9JbnB1dH19LGNvbXB1dGVkTGFiZWxXaWR0aDpmdW5jdGlvbigpe3JldHVybiBwYXJzZUludCh0aGlzLmxhYmVsV2lkdGgsMTApfSxpc1ZlcnRpY2FsOmZ1bmN0aW9uKCl7cmV0dXJuXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbnx8MTI9PT10aGlzLmNvbXB1dGVkTGFiZWxXaWR0aH0saXNIb3Jpem9udGFsOmZ1bmN0aW9uKCl7cmV0dXJuXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9ufSxsYWJlbENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsP1wiY29sLTEyXCI6dGhpcy5pc0hvcml6b250YWw/XCJjb2wtXCIrdGhpcy5sYWJlbFdpZHRoOlwiY29sLXhzLTEyIGNvbC1zbS1cIit0aGlzLmxhYmVsV2lkdGh9LGlucHV0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmVydGljYWw/XCJjb2wteHMtMTJcIjp0aGlzLmlzSG9yaXpvbnRhbD9cImNvbFwiOlwiY29sLXhzLTEyIGNvbC1zbVwifSxpY29uUHJvcHM6ZnVuY3Rpb24oKXt2YXIgdD17bmFtZTp0aGlzLmljb259O3JldHVybiF0aGlzLmljb25Db2xvcnx8dGhpcy5oYXNFcnJvcnx8dGhpcy5oYXNXYXJuaW5nfHwodC5jb2xvcj10aGlzLmljb25Db2xvciksdH0saW5zZXRIYXNMYWJlbDpmdW5jdGlvbigpe3JldHVybltcImxhYmVsXCIsXCJmdWxsXCJdLmluY2x1ZGVzKHRoaXMuaW5zZXQpfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX2ZpZWxkOnRoaXN9fSxtZXRob2RzOntfX3JlZ2lzdGVySW5wdXQ6ZnVuY3Rpb24odCl7dGhpcy5pbnB1dD10fSxfX3VucmVnaXN0ZXJJbnB1dDpmdW5jdGlvbih0KXt0JiZ0IT09dGhpcy5pbnB1dHx8KHRoaXMuaW5wdXQ9e30pfSxfX2dldEJvdHRvbUNvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHRoaXMuaGFzRXJyb3ImJihlPXRoaXMuJHNsb3RzW1wiZXJyb3ItbGFiZWxcIl18fHRoaXMuZXJyb3JMYWJlbCk/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtZXJyb3IgY29sXCJ9LGUpOnRoaXMuaGFzV2FybmluZyYmKGU9dGhpcy4kc2xvdHNbXCJ3YXJuaW5nLWxhYmVsXCJdfHx0aGlzLndhcm5pbmdMYWJlbCk/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtd2FybmluZyBjb2xcIn0sZSk6KGU9dGhpcy4kc2xvdHMuaGVscGVyfHx0aGlzLmhlbHBlcik/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtaGVscGVyIGNvbFwifSxlKTp0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiY29sIHRleHQtdHJhbnNwYXJlbnRcIn0sW1wifFwiXSl9LF9faGFzQm90dG9tOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNsb3RzW1wiZXJyb3ItbGFiZWxcIl18fHRoaXMuZXJyb3JMYWJlbHx8dGhpcy4kc2xvdHNbXCJ3YXJuaW5nLWxhYmVsXCJdfHx0aGlzLndhcm5pbmdMYWJlbHx8dGhpcy4kc2xvdHMuaGVscGVyfHx0aGlzLmhlbHBlcnx8dGhpcy5jb3VudH19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLiRzbG90cy5sYWJlbHx8dGhpcy5sYWJlbDtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQgcm93IG5vLXdyYXAgaXRlbXMtc3RhcnRcIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0aGlzLmljb24/dChRSWNvbix7cHJvcHM6dGhpcy5pY29uUHJvcHMsc3RhdGljQ2xhc3M6XCJxLWZpZWxkLWljb24gcS1maWVsZC1tYXJnaW5cIn0pOnRoaXMuaW5zZXRJY29uP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWZpZWxkLWljb25cIn0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBjb2xcIn0sW2V8fHRoaXMuaW5zZXRIYXNMYWJlbD90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1maWVsZC1sYWJlbCBxLWZpZWxkLW1hcmdpblwiLGNsYXNzOnRoaXMubGFiZWxDbGFzc2VzfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtbGFiZWwtaW5uZXIgcm93IGl0ZW1zLWNlbnRlclwifSxbdGhpcy4kc2xvdHMubGFiZWx8fHRoaXMubGFiZWxdKV0pOm51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtY29udGVudFwiLGNsYXNzOnRoaXMuaW5wdXRDbGFzc2VzfSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLl9faGFzQm90dG9tKCk/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtYm90dG9tIHJvdyBuby13cmFwXCJ9LFt0aGlzLl9fZ2V0Qm90dG9tQ29udGVudCh0KSx0aGlzLmNvdW50ZXI/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtZmllbGQtY291bnRlciBjb2wtYXV0b1wifSxbdGhpcy5jb3VudGVyXSk6bnVsbF0pOm51bGxdKV0pXSl9fSxRSW5maW5pdGVTY3JvbGw9e25hbWU6XCJRSW5maW5pdGVTY3JvbGxcIixwcm9wczp7aGFuZGxlcjp7dHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMH0saW5saW5lOkJvb2xlYW4sb2Zmc2V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjB9fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2luZGV4OjAsZmV0Y2hpbmc6ITEsd29ya2luZzohMH19LG1ldGhvZHM6e3BvbGw6ZnVuY3Rpb24oKXtpZighdGhpcy5mZXRjaGluZyYmdGhpcy53b3JraW5nKXt2YXIgdD1oZWlnaHQodGhpcy5zY3JvbGxDb250YWluZXIpLGU9b2Zmc2V0KHRoaXMuc2Nyb2xsQ29udGFpbmVyKS50b3ArdDtvZmZzZXQodGhpcy5lbGVtZW50KS50b3AraGVpZ2h0KHRoaXMuZWxlbWVudCktKHRoaXMub2Zmc2V0fHx0KTxlJiZ0aGlzLmxvYWRNb3JlKCl9fSxsb2FkTW9yZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7IXRoaXMuZmV0Y2hpbmcmJnRoaXMud29ya2luZyYmKHRoaXMuaW5kZXgrKyx0aGlzLmZldGNoaW5nPSEwLHRoaXMuaGFuZGxlcih0aGlzLmluZGV4LGZ1bmN0aW9uKGUpe3QuZmV0Y2hpbmc9ITEsZT90LnN0b3AoKTp0LmVsZW1lbnQuY2xvc2VzdChcImJvZHlcIikmJnQucG9sbCgpfSkpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5kZXg9MH0scmVzdW1lOmZ1bmN0aW9uKCl7ITAhPT10aGlzLndvcmtpbmcmJih0aGlzLndvcmtpbmc9ITAsdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMucG9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpKSx0aGlzLmltbWVkaWF0ZVBvbGwoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMud29ya2luZz0hMSx0aGlzLmZldGNoaW5nPSExLHRoaXMuc2Nyb2xsQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5lbGVtZW50PXQuJHJlZnMuY29udGVudCx0LnNjcm9sbENvbnRhaW5lcj10LmlubGluZT90LiRlbDpnZXRTY3JvbGxUYXJnZXQodC4kZWwpLHQucG9sbCgpLHQuaW1tZWRpYXRlUG9sbD10LnBvbGwsdC5wb2xsPWRlYm91bmNlKHQucG9sbCw1MCksITA9PT10LndvcmtpbmcmJnQuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0LnBvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKX0pfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMucG9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpfSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWluZmluaXRlLXNjcm9sbFwifSxbdChcImRpdlwiLHtyZWY6XCJjb250ZW50XCIsc3RhdGljQ2xhc3M6XCJxLWluZmluaXRlLXNjcm9sbC1jb250ZW50XCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpLHRoaXMuZmV0Y2hpbmc/dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtaW5maW5pdGUtc2Nyb2xsLW1lc3NhZ2VcIn0sdGhpcy4kc2xvdHMubWVzc2FnZSk6bnVsbF0pfX0sUUlubmVyTG9hZGluZz17bmFtZTpcIlFJbm5lckxvYWRpbmdcIixwcm9wczp7ZGFyazpCb29sZWFuLHZpc2libGU6Qm9vbGVhbixzaXplOnt0eXBlOltTdHJpbmcsTnVtYmVyXSxkZWZhdWx0OjQyfSxjb2xvcjpTdHJpbmd9LHJlbmRlcjpmdW5jdGlvbih0KXtpZih0aGlzLnZpc2libGUpcmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWlubmVyLWxvYWRpbmcgYW5pbWF0ZS1mYWRlIGFic29sdXRlLWZ1bGwgY29sdW1uIGZsZXgtY2VudGVyXCIsY2xhc3M6e2Rhcms6dGhpcy5kYXJrfX0sdGhpcy4kc2xvdHMuZGVmYXVsdHx8W3QoUVNwaW5uZXIse3Byb3BzOntzaXplOnRoaXMuc2l6ZSxjb2xvcjp0aGlzLmNvbG9yfX0pXSl9fSxRSnVtYm90cm9uPXtuYW1lOlwiUUp1bWJvdHJvblwiLHByb3BzOntkYXJrOkJvb2xlYW4sdGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9LGltZ1NyYzpTdHJpbmcsZ3JhZGllbnQ6U3RyaW5nfSxjb21wdXRlZDp7Z3JhZGllbnRUeXBlOmZ1bmN0aW9uKCl7aWYodGhpcy5ncmFkaWVudClyZXR1cm4gdGhpcy5ncmFkaWVudC5pbmRleE9mKFwiY2lyY2xlXCIpPi0xP1wicmFkaWFsXCI6XCJsaW5lYXJcIn0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmltZ1NyYz97XCJiYWNrZ3JvdW5kLWltYWdlXCI6XCJ1cmwoXCIrdGhpcy5pbWdTcmMrXCIpXCJ9OnRoaXMuZ3JhZGllbnRUeXBlP3tiYWNrZ3JvdW5kOnRoaXMuZ3JhZGllbnRUeXBlK1wiLWdyYWRpZW50KFwiK3RoaXMuZ3JhZGllbnQrXCIpXCJ9OnZvaWQgMH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLWp1bWJvdHJvblwiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp7XCJxLWp1bWJvdHJvbi1kYXJrXCI6dGhpcy5kYXJrfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRS25vYj17bmFtZTpcIlFLbm9iXCIsZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt2YWx1ZTpOdW1iZXIsbWluOnt0eXBlOk51bWJlcixkZWZhdWx0OjB9LG1heDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxMDB9LGNvbG9yOlN0cmluZyx0cmFja0NvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleS0zXCJ9LGxpbmVXaWR0aDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIjZweFwifSxzaXplOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiMTAwcHhcIn0sc3RlcDp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxkZWNpbWFsczpOdW1iZXIsZGlzYWJsZTpCb29sZWFuLHJlYWRvbmx5OkJvb2xlYW59LGNvbXB1dGVkOntjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZGlzYWJsZSYmdC5wdXNoKFwiZGlzYWJsZWRcIiksdGhpcy5yZWFkb25seXx8dC5wdXNoKFwiY3Vyc29yLXBvaW50ZXJcIiksdGhpcy5jb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSx0fSxzdmdTdHlsZTpmdW5jdGlvbigpe3JldHVybntcInN0cm9rZS1kYXNoYXJyYXlcIjpcIjI5NS4zMXB4LCAyOTUuMzFweFwiLFwic3Ryb2tlLWRhc2hvZmZzZXRcIjoyOTUuMzEqKHRoaXMuJHEuaTE4bi5ydGw/LTE6MSkqKDEtKHRoaXMubW9kZWwtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbikpK1wicHhcIix0cmFuc2l0aW9uOnRoaXMuZHJhZ2dpbmc/XCJcIjpcInN0cm9rZS1kYXNob2Zmc2V0IDAuNnMgZWFzZSAwcywgc3Ryb2tlIDAuNnMgZWFzZVwifX0sZWRpdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiYhdGhpcy5yZWFkb25seX0sY29tcHV0ZWREZWNpbWFsczpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLmRlY2ltYWxzP3RoaXMuZGVjaW1hbHN8fDA6KFN0cmluZyh0aGlzLnN0ZXApLnRyaW0oXCIwXCIpLnNwbGl0KFwiLlwiKVsxXXx8XCJcIikubGVuZ3RofSxjb21wdXRlZFN0ZXA6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5kZWNpbWFscz8xL01hdGgucG93KDEwLHRoaXMuZGVjaW1hbHN8fDApOnRoaXMuc3RlcH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy52YWx1ZSxkcmFnZ2luZzohMX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHQ8dGhpcy5taW4pdGhpcy5tb2RlbD10aGlzLm1pbjtlbHNle2lmKCEodD50aGlzLm1heCkpe3ZhciBpPXRoaXMuY29tcHV0ZWREZWNpbWFscyYmXCJudW1iZXJcIj09dHlwZW9mIHQ/cGFyc2VGbG9hdCh0LnRvRml4ZWQodGhpcy5jb21wdXRlZERlY2ltYWxzKSk6dDtyZXR1cm4gdm9pZChpIT09dGhpcy5tb2RlbCYmKHRoaXMubW9kZWw9aSkpfXRoaXMubW9kZWw9dGhpcy5tYXh9dGhpcy4kZW1pdChcImlucHV0XCIsdGhpcy5tb2RlbCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtlLm1vZGVsIT09ZS52YWx1ZSYmZS4kZW1pdChcImNoYW5nZVwiLGUubW9kZWwpfSl9fSxtZXRob2RzOntfX3BhbjpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYodC5pc0ZpbmFsP3RoaXMuX19kcmFnU3RvcCh0LmV2dCk6dC5pc0ZpcnN0P3RoaXMuX19kcmFnU3RhcnQodC5ldnQpOnRoaXMuX19kcmFnTW92ZSh0LmV2dCkpfSxfX2RyYWdTdGFydDpmdW5jdGlvbih0KXt0aGlzLmVkaXRhYmxlJiYoc3RvcEFuZFByZXZlbnQodCksdGhpcy5jZW50ZXJQb3NpdGlvbj10aGlzLl9fZ2V0Q2VudGVyKCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5fX29uSW5wdXQodCkpfSxfX2RyYWdNb3ZlOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmcmJnRoaXMuZWRpdGFibGUmJihzdG9wQW5kUHJldmVudCh0KSx0aGlzLl9fb25JbnB1dCh0LHRoaXMuY2VudGVyUG9zaXRpb24pKX0sX19kcmFnU3RvcDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuZWRpdGFibGUmJihzdG9wQW5kUHJldmVudCh0KSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmRyYWdnaW5nPSExfSwxMDApLHRoaXMuX19vbklucHV0KHQsdGhpcy5jZW50ZXJQb3NpdGlvbiwhMCkpfSxfX29uS2V5RG93bjpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7aWYodGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhlKSl7c3RvcEFuZFByZXZlbnQodCk7dmFyIGk9dC5jdHJsS2V5PzEwKnRoaXMuY29tcHV0ZWRTdGVwOnRoaXMuY29tcHV0ZWRTdGVwLHM9WzM3LDQwXS5pbmNsdWRlcyhlKT8taTppO3RoaXMuX19vbklucHV0VmFsdWUoYmV0d2Vlbih0aGlzLm1vZGVsK3MsdGhpcy5taW4sdGhpcy5tYXgpKX19LF9fb25LZXlVcDpmdW5jdGlvbih0KXt2YXIgZT10LmtleUNvZGU7dGhpcy5lZGl0YWJsZSYmWzM3LDQwLDM5LDM4XS5pbmNsdWRlcyhlKSYmdGhpcy5fX2VtaXRDaGFuZ2UoKX0sX19vbklucHV0OmZ1bmN0aW9uKHQsZSxpKXtpZih2b2lkIDA9PT1lJiYoZT10aGlzLl9fZ2V0Q2VudGVyKCkpLHRoaXMuZWRpdGFibGUpe3ZhciBzPXBvc2l0aW9uKHQpLG49TWF0aC5hYnMocy50b3AtZS50b3ApLG89TWF0aC5zcXJ0KE1hdGgucG93KE1hdGguYWJzKHMudG9wLWUudG9wKSwyKStNYXRoLnBvdyhNYXRoLmFicyhzLmxlZnQtZS5sZWZ0KSwyKSkscj1NYXRoLmFzaW4obi9vKSooMTgwL01hdGguUEkpO3I9cy50b3A8ZS50b3A/ZS5sZWZ0PHMubGVmdD85MC1yOjI3MCtyOmUubGVmdDxzLmxlZnQ/cis5MDoyNzAtcix0aGlzLiRxLmkxOG4ucnRsJiYocj0zNjAtcik7dmFyIGE9dGhpcy5taW4rci8zNjAqKHRoaXMubWF4LXRoaXMubWluKSxsPWEldGhpcy5zdGVwLGM9YmV0d2VlbihhLWwrKE1hdGguYWJzKGwpPj10aGlzLnN0ZXAvMj8obDwwPy0xOjEpKnRoaXMuc3RlcDowKSx0aGlzLm1pbix0aGlzLm1heCk7dGhpcy5fX29uSW5wdXRWYWx1ZShjLGkpfX0sX19vbklucHV0VmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLmNvbXB1dGVkRGVjaW1hbHMmJih0PXBhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuY29tcHV0ZWREZWNpbWFscykpKSx0aGlzLm1vZGVsIT09dCYmKHRoaXMubW9kZWw9dCksdGhpcy4kZW1pdChcImRyYWctdmFsdWVcIix0KSx0aGlzLnZhbHVlIT09dCYmKHRoaXMuJGVtaXQoXCJpbnB1dFwiLHQpLGUmJnRoaXMuX19lbWl0Q2hhbmdlKHQpKX0sX19lbWl0Q2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9dGhpcy5tb2RlbCksdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtKU09OLnN0cmluZ2lmeSh0KSE9PUpTT04uc3RyaW5naWZ5KGUudmFsdWUpJiZlLiRlbWl0KFwiY2hhbmdlXCIsdCl9KX0sX19nZXRDZW50ZXI6ZnVuY3Rpb24oKXt2YXIgdD1vZmZzZXQodGhpcy4kZWwpO3JldHVybnt0b3A6dC50b3AraGVpZ2h0KHRoaXMuJGVsKS8yLGxlZnQ6dC5sZWZ0K3dpZHRoKHRoaXMuJGVsKS8yfX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1rbm9iIG5vbi1zZWxlY3RhYmxlXCIsY2xhc3M6dGhpcy5jbGFzc2VzLHN0eWxlOnt3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZX19LFt0KFwiZGl2XCIse29uOntjbGljazpmdW5jdGlvbih0KXtyZXR1cm4hZS5kcmFnZ2luZyYmZS5fX29uSW5wdXQodCx2b2lkIDAsITApfX0sZGlyZWN0aXZlczp0aGlzLmVkaXRhYmxlP1t7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7cHJldmVudDohMCxzdG9wOiEwfSx2YWx1ZTp0aGlzLl9fcGFufV06bnVsbH0sW3QoXCJzdmdcIix7YXR0cnM6e3ZpZXdCb3g6XCIwIDAgMTAwIDEwMFwifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTSA1MCw1MCBtIDAsLTQ3IGEgNDcsNDcgMCAxIDEgMCw5NCBhIDQ3LDQ3IDAgMSAxIDAsLTk0XCIsXCJmaWxsLW9wYWNpdHlcIjpcIjBcIixzdHJva2U6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZS13aWR0aFwiOnRoaXMubGluZVdpZHRofSxjbGFzczpcInRleHQtXCIrdGhpcy50cmFja0NvbG9yfSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNIDUwLDUwIG0gMCwtNDcgYSA0Nyw0NyAwIDEgMSAwLDk0IGEgNDcsNDcgMCAxIDEgMCwtOTRcIixcImZpbGwtb3BhY2l0eVwiOlwiMFwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLWxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2Utd2lkdGhcIjp0aGlzLmxpbmVXaWR0aH0sc3R5bGU6dGhpcy5zdmdTdHlsZX0pXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEta25vYi1sYWJlbCByb3cgZmxleC1jZW50ZXIgY29udGVudC1jZW50ZXJcIixhdHRyczp7dGFiaW5kZXg6dGhpcy5lZGl0YWJsZT8wOi0xfSxvbjp7a2V5ZG93bjp0aGlzLl9fb25LZXlEb3duLGtleXVwOnRoaXMuX19vbktleVVwfX0sdGhpcy4kc2xvdHMuZGVmYXVsdHx8W3QoXCJzcGFuXCIsW3RoaXMubW9kZWxdKV0pXSldKX19LFFTY3JvbGxPYnNlcnZhYmxlPXtuYW1lOlwiUVNjcm9sbE9ic2VydmFibGVcIixwcm9wczp7ZGVib3VuY2U6TnVtYmVyfSxyZW5kZXI6ZnVuY3Rpb24oKXt9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cG9zOjAsZGlyOlwiZG93blwiLGRpckNoYW5nZWQ6ITEsZGlyQ2hhbmdlUG9zOjB9fSxtZXRob2RzOntnZXRQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybntwb3NpdGlvbjp0aGlzLnBvcyxkaXJlY3Rpb246dGhpcy5kaXIsZGlyZWN0aW9uQ2hhbmdlZDp0aGlzLmRpckNoYW5nZWQsaW5mbGV4aW9uUG9zaXRpb246dGhpcy5kaXJDaGFuZ2VQb3N9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQpeyEwPT09dHx8MD09PXRoaXMuZGVib3VuY2U/dGhpcy5lbWl0KCk6dGhpcy50aW1lcnx8KHRoaXMudGltZXI9dGhpcy5kZWJvdW5jZT9zZXRUaW1lb3V0KHRoaXMuZW1pdCx0aGlzLmRlYm91bmNlKTpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5lbWl0KSl9LGVtaXQ6ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLm1heCgwLGdldFNjcm9sbFBvc2l0aW9uKHRoaXMudGFyZ2V0KSksZT10LXRoaXMucG9zPDA/XCJ1cFwiOlwiZG93blwiO3RoaXMuZGlyQ2hhbmdlZD10aGlzLmRpciE9PWUsdGhpcy5kaXJDaGFuZ2VkJiYodGhpcy5kaXI9ZSx0aGlzLmRpckNoYW5nZVBvcz10aGlzLnBvcyksdGhpcy50aW1lcj1udWxsLHRoaXMucG9zPXQsdGhpcy4kZW1pdChcInNjcm9sbFwiLHRoaXMuZ2V0UG9zaXRpb24oKSl9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy50YXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHRoaXMuJGVsLnBhcmVudE5vZGUpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLnRyaWdnZXIoITApfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpLHRoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKX19LFFMYXlvdXQ9e25hbWU6XCJRTGF5b3V0XCIscHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntsYXlvdXQ6dGhpc319LHByb3BzOntjb250YWluZXI6Qm9vbGVhbix2aWV3Ont0eXBlOlN0cmluZyxkZWZhdWx0OlwiaGhoIGxwciBmZmZcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuL14oaHxsKWgoaHxyKSBscHIgKGZ8bClmKGZ8cikkLy50ZXN0KHQudG9Mb3dlckNhc2UoKSl9fX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntoZWlnaHQ6b25TU1I/MDp3aW5kb3cuaW5uZXJIZWlnaHQsd2lkdGg6b25TU1J8fHRoaXMuY29udGFpbmVyPzA6d2luZG93LmlubmVyV2lkdGgsY29udGFpbmVySGVpZ2h0OjAsc2Nyb2xsYmFyV2lkdGg6b25TU1I/MDpnZXRTY3JvbGxiYXJXaWR0aCgpLGhlYWRlcjp7c2l6ZTowLG9mZnNldDowLHNwYWNlOiExfSxyaWdodDp7c2l6ZTozMDAsb2Zmc2V0OjAsc3BhY2U6ITF9LGZvb3Rlcjp7c2l6ZTowLG9mZnNldDowLHNwYWNlOiExfSxsZWZ0OntzaXplOjMwMCxvZmZzZXQ6MCxzcGFjZTohMX0sc2Nyb2xsOntwb3NpdGlvbjowLGRpcmVjdGlvbjpcImRvd25cIn19fSxjb21wdXRlZDp7cm93czpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmlldy50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtyZXR1cm57dG9wOnRbMF0uc3BsaXQoXCJcIiksbWlkZGxlOnRbMV0uc3BsaXQoXCJcIiksYm90dG9tOnRbMl0uc3BsaXQoXCJcIil9fSx0YXJnZXRTdHlsZTpmdW5jdGlvbigpe3ZhciB0O2lmKDAhPT10aGlzLnNjcm9sbGJhcldpZHRoKXJldHVybih0PXt9KVt0aGlzLiRxLmkxOG4ucnRsP1wibGVmdFwiOlwicmlnaHRcIl09dGhpcy5zY3JvbGxiYXJXaWR0aCtcInB4XCIsdH0sdGFyZ2V0Q2hpbGRTdHlsZTpmdW5jdGlvbigpe3ZhciB0O2lmKDAhPT10aGlzLnNjcm9sbGJhcldpZHRoKXJldHVybih0PXt9KVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09MCx0W3RoaXMuJHEuaTE4bi5ydGw/XCJsZWZ0XCI6XCJyaWdodFwiXT1cIi1cIit0aGlzLnNjcm9sbGJhcldpZHRoK1wicHhcIix0LndpZHRoPVwiY2FsYygxMDAlICsgXCIrdGhpcy5zY3JvbGxiYXJXaWR0aCtcInB4KVwiLHR9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZXM9e2hlYWRlcjpudWxsLHJpZ2h0Om51bGwsZm9vdGVyOm51bGwsbGVmdDpudWxsfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dFwifSxbdChRU2Nyb2xsT2JzZXJ2YWJsZSx7b246e3Njcm9sbDp0aGlzLl9fb25QYWdlU2Nyb2xsfX0pLHQoUVJlc2l6ZU9ic2VydmFibGUse29uOntyZXNpemU6dGhpcy5fX29uUGFnZVJlc2l6ZX19KSx0aGlzLiRzbG90cy5kZWZhdWx0XSk7cmV0dXJuIHRoaXMuY29udGFpbmVyP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1jb250YWluZXIgcmVsYXRpdmUtcG9zaXRpb24gb3ZlcmZsb3ctaGlkZGVuXCJ9LFt0KFFSZXNpemVPYnNlcnZhYmxlLHtvbjp7cmVzaXplOnRoaXMuX19vbkNvbnRhaW5lclJlc2l6ZX19KSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwiYWJzb2x1dGUtZnVsbFwiLHN0eWxlOnRoaXMudGFyZ2V0U3R5bGV9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwib3ZlcmZsb3ctYXV0b1wiLHN0eWxlOnRoaXMudGFyZ2V0Q2hpbGRTdHlsZX0sW2VdKV0pXSk6ZX0sbWV0aG9kczp7X19hbmltYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnRpbWVyP2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTpkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJxLWxheW91dC1hbmltYXRlXCIpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcInEtbGF5b3V0LWFuaW1hdGVcIiksdC50aW1lcj1udWxsfSwxNTApfSxfX29uUGFnZVNjcm9sbDpmdW5jdGlvbih0KXt0aGlzLnNjcm9sbD10LHRoaXMuJGVtaXQoXCJzY3JvbGxcIix0KX0sX19vblBhZ2VSZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQsaT10LndpZHRoLHM9ITE7dGhpcy5oZWlnaHQhPT1lJiYocz0hMCx0aGlzLmhlaWdodD1lLHRoaXMuJGVtaXQoXCJzY3JvbGxIZWlnaHRcIixlKSx0aGlzLl9fdXBkYXRlU2Nyb2xsYmFyV2lkdGgoKSksdGhpcy53aWR0aCE9PWkmJihzPSEwLHRoaXMud2lkdGg9aSkscyYmdGhpcy4kZW1pdChcInJlc2l6ZVwiLHtoZWlnaHQ6ZSx3aWR0aDppfSl9LF9fb25Db250YWluZXJSZXNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dC5oZWlnaHQ7dGhpcy5jb250YWluZXJIZWlnaHQhPT1lJiYodGhpcy5jb250YWluZXJIZWlnaHQ9ZSx0aGlzLl9fdXBkYXRlU2Nyb2xsYmFyV2lkdGgoKSl9LF9fdXBkYXRlU2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lcil7dmFyIHQ9dGhpcy5oZWlnaHQ+dGhpcy5jb250YWluZXJIZWlnaHQ/Z2V0U2Nyb2xsYmFyV2lkdGgoKTowO3RoaXMuc2Nyb2xsYmFyV2lkdGghPT10JiYodGhpcy5zY3JvbGxiYXJXaWR0aD10KX19fX0sZHVyYXRpb249MTUwLFFMYXlvdXREcmF3ZXI9e25hbWU6XCJRTGF5b3V0RHJhd2VyXCIsaW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUUxheW91dERyYXdlciBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTGF5b3V0XCIpfX19LG1peGluczpbTW9kZWxUb2dnbGVNaXhpbl0sZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOntvdmVybGF5OkJvb2xlYW4sc2lkZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImxlZnRcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibGVmdFwiLFwicmlnaHRcIl0uaW5jbHVkZXModCl9fSx3aWR0aDp7dHlwZTpOdW1iZXIsZGVmYXVsdDozMDB9LG1pbmk6Qm9vbGVhbixtaW5pV2lkdGg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NjB9LGJyZWFrcG9pbnQ6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6OTkyfSxiZWhhdmlvcjp7dHlwZTpTdHJpbmcsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImRlZmF1bHRcIixcImRlc2t0b3BcIixcIm1vYmlsZVwiXS5pbmNsdWRlcyh0KX0sZGVmYXVsdDpcImRlZmF1bHRcIn0sc2hvd0lmQWJvdmU6Qm9vbGVhbixjb250ZW50U3R5bGU6T2JqZWN0LGNvbnRlbnRDbGFzczpbU3RyaW5nLE9iamVjdCxBcnJheV0sbm9IaWRlT25Sb3V0ZUNoYW5nZTpCb29sZWFuLG5vU3dpcGVPcGVuOkJvb2xlYW4sbm9Td2lwZUNsb3NlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnNob3dJZkFib3ZlfHx2b2lkIDA9PT10aGlzLnZhbHVlfHx0aGlzLnZhbHVlLGU9XCJtb2JpbGVcIiE9PXRoaXMuYmVoYXZpb3ImJnRoaXMuYnJlYWtwb2ludDx0aGlzLmxheW91dC53aWR0aCYmIXRoaXMub3ZlcmxheSYmdDtyZXR1cm4gdm9pZCAwIT09dGhpcy52YWx1ZSYmdGhpcy52YWx1ZSE9PWUmJnRoaXMuJGVtaXQoXCJpbnB1dFwiLGUpLHtzaG93aW5nOmUsYmVsb3dCcmVha3BvaW50OlwibW9iaWxlXCI9PT10aGlzLmJlaGF2aW9yfHxcImRlc2t0b3BcIiE9PXRoaXMuYmVoYXZpb3ImJnRoaXMuYnJlYWtwb2ludD49dGhpcy5sYXlvdXQud2lkdGgsbGFyZ2VTY3JlZW5TdGF0ZTp0LG1vYmlsZU9wZW5lZDohMX19LHdhdGNoOntiZWxvd0JyZWFrcG9pbnQ6ZnVuY3Rpb24odCl7dGhpcy5tb2JpbGVPcGVuZWR8fCh0Pyh0aGlzLm92ZXJsYXl8fCh0aGlzLmxhcmdlU2NyZWVuU3RhdGU9dGhpcy5zaG93aW5nKSx0aGlzLmhpZGUoITEpKTp0aGlzLm92ZXJsYXl8fHRoaXNbdGhpcy5sYXJnZVNjcmVlblN0YXRlP1wic2hvd1wiOlwiaGlkZVwiXSghMSkpfSxzaWRlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXlvdXRbZV0uc3BhY2U9ITEsdGhpcy5sYXlvdXRbZV0ub2Zmc2V0PTB9LGJlaGF2aW9yOmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGVMb2NhbChcImJlbG93QnJlYWtwb2ludFwiLFwibW9iaWxlXCI9PT10fHxcImRlc2t0b3BcIiE9PXQmJnRoaXMuYnJlYWtwb2ludD49dGhpcy5sYXlvdXQud2lkdGgpfSxicmVha3BvaW50OmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGVMb2NhbChcImJlbG93QnJlYWtwb2ludFwiLFwibW9iaWxlXCI9PT10aGlzLmJlaGF2aW9yfHxcImRlc2t0b3BcIiE9PXRoaXMuYmVoYXZpb3ImJnQ+PXRoaXMubGF5b3V0LndpZHRoKX0sXCJsYXlvdXQud2lkdGhcIjpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlTG9jYWwoXCJiZWxvd0JyZWFrcG9pbnRcIixcIm1vYmlsZVwiPT09dGhpcy5iZWhhdmlvcnx8XCJkZXNrdG9wXCIhPT10aGlzLmJlaGF2aW9yJiZ0aGlzLmJyZWFrcG9pbnQ+PXQpfSxcImxheW91dC5zY3JvbGxiYXJXaWR0aFwiOmZ1bmN0aW9uKCl7dGhpcy5hcHBseVBvc2l0aW9uKHRoaXMuc2hvd2luZz8wOnZvaWQgMCl9LG9mZnNldDpmdW5jdGlvbih0KXt0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdCl9LG9uTGF5b3V0OmZ1bmN0aW9uKHQpe3RoaXMuJGVtaXQoXCJvbi1sYXlvdXRcIix0KSx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0KX0sJHJvdXRlOmZ1bmN0aW9uKCl7dGhpcy5ub0hpZGVPblJvdXRlQ2hhbmdlfHwodGhpcy5tb2JpbGVPcGVuZWR8fHRoaXMub25TY3JlZW5PdmVybGF5KSYmdGhpcy5oaWRlKCl9LHJpZ2h0U2lkZTpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbigpfSxzaXplOmZ1bmN0aW9uKHQpe3RoaXMuYXBwbHlQb3NpdGlvbigpLHRoaXMuX191cGRhdGUoXCJzaXplXCIsdCl9LFwiJHEuaTE4bi5ydGxcIjpmdW5jdGlvbigpe3RoaXMuYXBwbHlQb3NpdGlvbigpfSxtaW5pOmZ1bmN0aW9uKCl7dGhpcy52YWx1ZSYmdGhpcy5sYXlvdXQuX19hbmltYXRlKCl9fSxjb21wdXRlZDp7cmlnaHRTaWRlOmZ1bmN0aW9uKCl7cmV0dXJuXCJyaWdodFwiPT09dGhpcy5zaWRlfSxvZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zaG93aW5nfHx0aGlzLm1vYmlsZU9wZW5lZHx8dGhpcy5vdmVybGF5PzA6dGhpcy5zaXplfSxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNNaW5pP3RoaXMubWluaVdpZHRoOnRoaXMud2lkdGh9LGZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3ZlcmxheXx8dGhpcy5sYXlvdXQudmlldy5pbmRleE9mKHRoaXMucmlnaHRTaWRlP1wiUlwiOlwiTFwiKT4tMX0sb25MYXlvdXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93aW5nJiYhdGhpcy5tb2JpbGVWaWV3JiYhdGhpcy5vdmVybGF5fSxvblNjcmVlbk92ZXJsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93aW5nJiYhdGhpcy5tb2JpbGVWaWV3JiZ0aGlzLm92ZXJsYXl9LGJhY2tkcm9wQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57XCJuby1wb2ludGVyLWV2ZW50c1wiOiF0aGlzLnNob3dpbmd8fCF0aGlzLm1vYmlsZVZpZXd9fSxtb2JpbGVWaWV3OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmVsb3dCcmVha3BvaW50fHx0aGlzLm1vYmlsZU9wZW5lZH0saGVhZGVyU2xvdDpmdW5jdGlvbigpe3JldHVybiF0aGlzLm92ZXJsYXkmJih0aGlzLnJpZ2h0U2lkZT9cInJcIj09PXRoaXMubGF5b3V0LnJvd3MudG9wWzJdOlwibFwiPT09dGhpcy5sYXlvdXQucm93cy50b3BbMF0pfSxmb290ZXJTbG90OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMub3ZlcmxheSYmKHRoaXMucmlnaHRTaWRlP1wiclwiPT09dGhpcy5sYXlvdXQucm93cy5ib3R0b21bMl06XCJsXCI9PT10aGlzLmxheW91dC5yb3dzLmJvdHRvbVswXSl9LGJlbG93Q2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57Zml4ZWQ6ITAsXCJvbi10b3BcIjohMCxcInEtbGF5b3V0LWRyYXdlci1kZWxpbWl0ZXJcIjp0aGlzLmZpeGVkJiZ0aGlzLnNob3dpbmcsXCJxLWxheW91dC1kcmF3ZXItbW9iaWxlXCI6ITAsXCJ0b3AtcGFkZGluZ1wiOiEwfX0sYWJvdmVDbGFzczpmdW5jdGlvbigpe3JldHVybntmaXhlZDp0aGlzLmZpeGVkfHwhdGhpcy5vbkxheW91dCxcInEtbGF5b3V0LWRyYXdlci1taW5pXCI6dGhpcy5pc01pbmksXCJxLWxheW91dC1kcmF3ZXItbm9ybWFsXCI6IXRoaXMuaXNNaW5pLFwicS1sYXlvdXQtZHJhd2VyLWRlbGltaXRlclwiOnRoaXMuZml4ZWQmJnRoaXMuc2hvd2luZyxcInRvcC1wYWRkaW5nXCI6dGhpcy5oZWFkZXJTbG90fX0sYWJvdmVTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmxheW91dC5oZWFkZXIuc3BhY2UmJiF0aGlzLmhlYWRlclNsb3QmJih0aGlzLmZpeGVkP3QudG9wPXRoaXMubGF5b3V0LmhlYWRlci5vZmZzZXQrXCJweFwiOnRoaXMubGF5b3V0LmhlYWRlci5zcGFjZSYmKHQudG9wPXRoaXMubGF5b3V0LmhlYWRlci5zaXplK1wicHhcIikpLHRoaXMubGF5b3V0LmZvb3Rlci5zcGFjZSYmIXRoaXMuZm9vdGVyU2xvdCYmKHRoaXMuZml4ZWQ/dC5ib3R0b209dGhpcy5sYXlvdXQuZm9vdGVyLm9mZnNldCtcInB4XCI6dGhpcy5sYXlvdXQuZm9vdGVyLnNwYWNlJiYodC5ib3R0b209dGhpcy5sYXlvdXQuZm9vdGVyLnNpemUrXCJweFwiKSksdH0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3JldHVyblt0aGlzLmNvbnRlbnRTdHlsZSx7d2lkdGg6dGhpcy5zaXplK1wicHhcIn0sdGhpcy5tb2JpbGVWaWV3P1wiXCI6dGhpcy5hYm92ZVN0eWxlXX0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVybltcInEtbGF5b3V0LWRyYXdlci1cIit0aGlzLnNpZGUsdGhpcy5sYXlvdXQuY29udGFpbmVyP1wib3ZlcmZsb3ctYXV0b1wiOlwic2Nyb2xsXCIsdGhpcy5jb250ZW50Q2xhc3MsdGhpcy5tb2JpbGVWaWV3P3RoaXMuYmVsb3dDbGFzczp0aGlzLmFib3ZlQ2xhc3NdfSxzdGF0ZURpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybih0aGlzLiRxLmkxOG4ucnRsPy0xOjEpKih0aGlzLnJpZ2h0U2lkZT8xOi0xKX0saXNNaW5pOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWluaSYmIXRoaXMubW9iaWxlVmlld30sb25OYXRpdmVFdmVudHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCF0aGlzLm1vYmlsZVZpZXcpcmV0dXJue1wiIWNsaWNrXCI6ZnVuY3Rpb24oZSl7dC4kZW1pdChcImNsaWNrXCIsZSl9LG1vdXNlb3ZlcjpmdW5jdGlvbihlKXt0LiRlbWl0KFwibW91c2VvdmVyXCIsZSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe3QuJGVtaXQoXCJtb3VzZW91dFwiLGUpfX19fSxtZXRob2RzOnthcHBseVBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dD90aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3Q9ZS5zaG93aW5nPzA6ZS5zaXplLGUuYXBwbHlQb3NpdGlvbihlLnN0YXRlRGlyZWN0aW9uKnQpfSk6dGhpcy4kcmVmcy5jb250ZW50JiYodGhpcy5sYXlvdXQuY29udGFpbmVyJiZ0aGlzLnJpZ2h0U2lkZSYmKHRoaXMubW9iaWxlVmlld3x8TWF0aC5hYnModCk9PT10aGlzLnNpemUpJiYodCs9dGhpcy5zdGF0ZURpcmVjdGlvbip0aGlzLmxheW91dC5zY3JvbGxiYXJXaWR0aCksdGhpcy4kcmVmcy5jb250ZW50LnN0eWxlLnRyYW5zZm9ybT1cInRyYW5zbGF0ZVgoXCIrdCtcInB4KVwiKX0sYXBwbHlCYWNrZHJvcDpmdW5jdGlvbih0KXt0aGlzLiRyZWZzLmJhY2tkcm9wJiYodGhpcy4kcmVmcy5iYWNrZHJvcC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XCJyZ2JhKDAsMCwwLFwiKy40KnQrXCIpXCIpfSxfX3NldFNjcm9sbGFibGU6ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXQuY29udGFpbmVyfHxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdFt0P1wiYWRkXCI6XCJyZW1vdmVcIl0oXCJxLWJvZHktZHJhd2VyLXRvZ2dsZVwiKX0sX19vcGVuQnlUb3VjaDpmdW5jdGlvbih0KXtpZih0aGlzLmJlbG93QnJlYWtwb2ludCl7dmFyIGU9dGhpcy5zaXplLGk9YmV0d2Vlbih0LmRpc3RhbmNlLngsMCxlKTtpZih0LmlzRmluYWwpe3ZhciBzPXRoaXMuJHJlZnMuY29udGVudCxuPWk+PU1hdGgubWluKDc1LGUpO3JldHVybiBzLmNsYXNzTGlzdC5yZW1vdmUoXCJuby10cmFuc2l0aW9uXCIpLHZvaWQobj90aGlzLnNob3coKToodGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy5hcHBseUJhY2tkcm9wKDApLHRoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnN0YXRlRGlyZWN0aW9uKmUpLHMuY2xhc3NMaXN0LnJlbW92ZShcInEtbGF5b3V0LWRyYXdlci1kZWxpbWl0ZXJcIikpKX1pZih0aGlzLmFwcGx5UG9zaXRpb24oKHRoaXMuJHEuaTE4bi5ydGw/IXRoaXMucmlnaHRTaWRlOnRoaXMucmlnaHRTaWRlKT9NYXRoLm1heChlLWksMCk6TWF0aC5taW4oMCxpLWUpKSx0aGlzLmFwcGx5QmFja2Ryb3AoYmV0d2VlbihpL2UsMCwxKSksdC5pc0ZpcnN0KXt2YXIgbz10aGlzLiRyZWZzLmNvbnRlbnQ7by5jbGFzc0xpc3QuYWRkKFwibm8tdHJhbnNpdGlvblwiKSxvLmNsYXNzTGlzdC5hZGQoXCJxLWxheW91dC1kcmF3ZXItZGVsaW1pdGVyXCIpfX19LF9fY2xvc2VCeVRvdWNoOmZ1bmN0aW9uKHQpe2lmKHRoaXMubW9iaWxlT3BlbmVkKXt2YXIgZT10aGlzLnNpemUsaT10LmRpcmVjdGlvbj09PXRoaXMuc2lkZSxzPSh0aGlzLiRxLmkxOG4ucnRsPyFpOmkpP2JldHdlZW4odC5kaXN0YW5jZS54LDAsZSk6MDtpZih0LmlzRmluYWwpe3ZhciBuPU1hdGguYWJzKHMpPE1hdGgubWluKDc1LGUpO3JldHVybiB0aGlzLiRyZWZzLmNvbnRlbnQuY2xhc3NMaXN0LnJlbW92ZShcIm5vLXRyYW5zaXRpb25cIiksdm9pZChuPyh0aGlzLmxheW91dC5fX2FuaW1hdGUoKSx0aGlzLmFwcGx5QmFja2Ryb3AoMSksdGhpcy5hcHBseVBvc2l0aW9uKDApKTp0aGlzLmhpZGUoKSl9dGhpcy5hcHBseVBvc2l0aW9uKHRoaXMuc3RhdGVEaXJlY3Rpb24qcyksdGhpcy5hcHBseUJhY2tkcm9wKGJldHdlZW4oMS1zL2UsMCwxKSksdC5pc0ZpcnN0JiZ0aGlzLiRyZWZzLmNvbnRlbnQuY2xhc3NMaXN0LmFkZChcIm5vLXRyYW5zaXRpb25cIil9fSxfX3Nob3c6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt2b2lkIDA9PT10JiYodD0hMCksdCYmdGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy5hcHBseVBvc2l0aW9uKDApO3ZhciBpPXRoaXMubGF5b3V0Lmluc3RhbmNlc1t0aGlzLnJpZ2h0U2lkZT9cImxlZnRcIjpcInJpZ2h0XCJdO2kmJmkubW9iaWxlT3BlbmVkJiZpLmhpZGUoKSx0aGlzLmJlbG93QnJlYWtwb2ludD8odGhpcy5tb2JpbGVPcGVuZWQ9ITAsdGhpcy5hcHBseUJhY2tkcm9wKDEpLHRoaXMubGF5b3V0LmNvbnRhaW5lcnx8KHRoaXMucHJldmVudGVkU2Nyb2xsPSEwLHByZXZlbnRTY3JvbGwoITApKSk6dGhpcy5fX3NldFNjcm9sbGFibGUoITApLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnNob3dQcm9taXNlJiYoZS5zaG93UHJvbWlzZS50aGVuKGZ1bmN0aW9uKCl7ZS5fX3NldFNjcm9sbGFibGUoITEpfSksZS5zaG93UHJvbWlzZVJlc29sdmUoKSl9LGR1cmF0aW9uKX0sX19oaWRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dm9pZCAwPT09dCYmKHQ9ITApLHQmJnRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpLHRoaXMubW9iaWxlT3BlbmVkJiYodGhpcy5tb2JpbGVPcGVuZWQ9ITEpLHRoaXMuYXBwbHlQb3NpdGlvbih0aGlzLnN0YXRlRGlyZWN0aW9uKnRoaXMuc2l6ZSksdGhpcy5hcHBseUJhY2tkcm9wKDApLHRoaXMuX19jbGVhbnVwKCksY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2UuaGlkZVByb21pc2UmJmUuaGlkZVByb21pc2VSZXNvbHZlKCl9LGR1cmF0aW9uKX0sX19jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5wcmV2ZW50ZWRTY3JvbGwmJih0aGlzLnByZXZlbnRlZFNjcm9sbD0hMSxwcmV2ZW50U2Nyb2xsKCExKSksdGhpcy5fX3NldFNjcm9sbGFibGUoITEpfSxfX3VwZGF0ZTpmdW5jdGlvbih0LGUpe3RoaXMubGF5b3V0W3RoaXMuc2lkZV1bdF0hPT1lJiYodGhpcy5sYXlvdXRbdGhpcy5zaWRlXVt0XT1lKX0sX191cGRhdGVMb2NhbDpmdW5jdGlvbih0LGUpe3RoaXNbdF0hPT1lJiYodGhpc1t0XT1lKX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmxheW91dC5pbnN0YW5jZXNbdGhpcy5zaWRlXT10aGlzLHRoaXMuX191cGRhdGUoXCJzaXplXCIsdGhpcy5zaXplKSx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0aGlzLm9uTGF5b3V0KSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdGhpcy5vZmZzZXQpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5hcHBseVBvc2l0aW9uKHRoaXMuc2hvd2luZz8wOnZvaWQgMCl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5zaG93aW5nJiZ0aGlzLl9fY2xlYW51cCgpLHRoaXMubGF5b3V0Lmluc3RhbmNlc1t0aGlzLnNpZGVdPT09dGhpcyYmKHRoaXMubGF5b3V0Lmluc3RhbmNlc1t0aGlzLnNpZGVdPW51bGwsdGhpcy5fX3VwZGF0ZShcInNpemVcIiwwKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsMCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsITEpKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1kcmF3ZXItY29udGFpbmVyXCJ9LFt0aGlzLm1vYmlsZVZpZXcmJiF0aGlzLm5vU3dpcGVPcGVuP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1kcmF3ZXItb3BlbmVyIGZpeGVkLVwiK3RoaXMuc2lkZSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMH0sdmFsdWU6dGhpcy5fX29wZW5CeVRvdWNofV19KTpudWxsLHQoXCJkaXZcIix7cmVmOlwiYmFja2Ryb3BcIixzdGF0aWNDbGFzczpcImZ1bGxzY3JlZW4gcS1sYXlvdXQtYmFja2Ryb3AgcS1sYXlvdXQtdHJhbnNpdGlvblwiLGNsYXNzOnRoaXMuYmFja2Ryb3BDbGFzcyxvbjp7Y2xpY2s6dGhpcy5oaWRlfSxkaXJlY3RpdmVzOlt7bmFtZTpcInRvdWNoLXBhblwiLG1vZGlmaWVyczp7aG9yaXpvbnRhbDohMH0sdmFsdWU6dGhpcy5fX2Nsb3NlQnlUb3VjaH1dfSldLmNvbmNhdChbdChcImFzaWRlXCIse3JlZjpcImNvbnRlbnRcIixzdGF0aWNDbGFzczpcInEtbGF5b3V0LWRyYXdlciBxLWxheW91dC10cmFuc2l0aW9uXCIsY2xhc3M6dGhpcy5jb21wdXRlZENsYXNzLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxhdHRyczp0aGlzLiRhdHRycyxvbjp0aGlzLm9uTmF0aXZlRXZlbnRzLGRpcmVjdGl2ZXM6dGhpcy5tb2JpbGVWaWV3JiYhdGhpcy5ub1N3aXBlQ2xvc2U/W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOntob3Jpem9udGFsOiEwfSx2YWx1ZTp0aGlzLl9fY2xvc2VCeVRvdWNofV06bnVsbH0sdGhpcy5pc01pbmkmJnRoaXMuJHNsb3RzLm1pbmk/W3RoaXMuJHNsb3RzLm1pbmldOnRoaXMuJHNsb3RzLmRlZmF1bHQpXSkpfX0sUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGU9e25hbWU6XCJRV2luZG93UmVzaXplT2JzZXJ2YWJsZVwiLHByb3BzOntkZWJvdW5jZTp7dHlwZTpOdW1iZXIsZGVmYXVsdDo4MH19LHJlbmRlcjpmdW5jdGlvbigpe30sbWV0aG9kczp7dHJpZ2dlcjpmdW5jdGlvbigpezA9PT10aGlzLmRlYm91bmNlP3RoaXMuZW1pdCgpOnRoaXMudGltZXJ8fCh0aGlzLnRpbWVyPXNldFRpbWVvdXQodGhpcy5lbWl0LHRoaXMuZGVib3VuY2UpKX0sZW1pdDpmdW5jdGlvbih0KXt0aGlzLnRpbWVyPW51bGwsdGhpcy4kZW1pdChcInJlc2l6ZVwiLHtoZWlnaHQ6dD8wOndpbmRvdy5pbm5lckhlaWdodCx3aWR0aDp0PzA6d2luZG93LmlubmVyV2lkdGh9KX19LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmVtaXQob25TU1IpfSxtb3VudGVkOmZ1bmN0aW9uKCl7ZnJvbVNTUiYmdGhpcy5lbWl0KCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLnRyaWdnZXIsbGlzdGVuT3B0cy5wYXNzaXZlKX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMudHJpZ2dlcixsaXN0ZW5PcHRzLnBhc3NpdmUpfX0sUUxheW91dEZvb3Rlcj17bmFtZTpcIlFMYXlvdXRGb290ZXJcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxpbmplY3Q6e2xheW91dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRTGF5b3V0Rm9vdGVyIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvcHM6e3ZhbHVlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0scmV2ZWFsOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZTowLHJldmVhbGVkOiEwLHdpbmRvd0hlaWdodDpvblNTUnx8dGhpcy5sYXlvdXQuY29udGFpbmVyPzA6d2luZG93LmlubmVySGVpZ2h0fX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJzcGFjZVwiLHQpLHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsITApLHRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpfSxvZmZzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHQpfSxyZXZlYWw6ZnVuY3Rpb24odCl7dHx8dGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIix0aGlzLnZhbHVlKX0scmV2ZWFsZWQ6ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy4kZW1pdChcInJldmVhbFwiLHQpfSxcImxheW91dC5zY3JvbGxcIjpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVSZXZlYWxlZCgpfSxcImxheW91dC5oZWlnaHRcIjpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVSZXZlYWxlZCgpfSxzaXplOmZ1bmN0aW9uKCl7dGhpcy5fX3VwZGF0ZVJldmVhbGVkKCl9fSxjb21wdXRlZDp7Zml4ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXZlYWx8fHRoaXMubGF5b3V0LnZpZXcuaW5kZXhPZihcIkZcIik+LTF8fHRoaXMubGF5b3V0LmNvbnRhaW5lcn0sY29udGFpbmVySGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF5b3V0LmNvbnRhaW5lcj90aGlzLmxheW91dC5jb250YWluZXJIZWlnaHQ6dGhpcy53aW5kb3dIZWlnaHR9LG9mZnNldDpmdW5jdGlvbigpe2lmKCF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWUpcmV0dXJuIDA7aWYodGhpcy5maXhlZClyZXR1cm4gdGhpcy5yZXZlYWxlZD90aGlzLnNpemU6MDt2YXIgdD10aGlzLmxheW91dC5zY3JvbGwucG9zaXRpb24rdGhpcy5jb250YWluZXJIZWlnaHQrdGhpcy5zaXplLXRoaXMubGF5b3V0LmhlaWdodDtyZXR1cm4gdD4wP3Q6MH0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVybntcImZpeGVkLWJvdHRvbVwiOnRoaXMuZml4ZWQsXCJhYnNvbHV0ZS1ib3R0b21cIjohdGhpcy5maXhlZCxoaWRkZW46IXRoaXMudmFsdWUmJiF0aGlzLmZpeGVkLFwicS1sYXlvdXQtZm9vdGVyLWhpZGRlblwiOiF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWV8fHRoaXMuZml4ZWQmJiF0aGlzLnJldmVhbGVkfX0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGF5b3V0LnJvd3MuYm90dG9tLGU9e307cmV0dXJuXCJsXCI9PT10WzBdJiZ0aGlzLmxheW91dC5sZWZ0LnNwYWNlJiYoZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5sYXlvdXQubGVmdC5zaXplK1wicHhcIiksXCJyXCI9PT10WzJdJiZ0aGlzLmxheW91dC5yaWdodC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMubGF5b3V0LnJpZ2h0LnNpemUrXCJweFwiKSxlfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZm9vdGVyXCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtZm9vdGVyIHEtbGF5b3V0LW1hcmdpbmFsIHEtbGF5b3V0LXRyYW5zaXRpb25cIixjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3Msc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7cHJvcHM6e2RlYm91bmNlOjB9LG9uOntyZXNpemU6dGhpcy5fX29uUmVzaXplfX0pLCF0aGlzLmxheW91dC5jb250YWluZXImJnQoUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGUse3Byb3BzOntkZWJvdW5jZTowfSxvbjp7cmVzaXplOnRoaXMuX19vbldpbmRvd1Jlc2l6ZX19KXx8dm9pZCAwLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5mb290ZXI9dGhpcyx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0aGlzLnZhbHVlKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdGhpcy5vZmZzZXQpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5sYXlvdXQuaW5zdGFuY2VzLmZvb3Rlcj09PXRoaXMmJih0aGlzLmxheW91dC5pbnN0YW5jZXMuZm9vdGVyPW51bGwsdGhpcy5fX3VwZGF0ZShcInNpemVcIiwwKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsMCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsITEpKX0sbWV0aG9kczp7X19vblJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLl9fdXBkYXRlTG9jYWwoXCJzaXplXCIsZSksdGhpcy5fX3VwZGF0ZShcInNpemVcIixlKX0sX19vbldpbmRvd1Jlc2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLl9fdXBkYXRlTG9jYWwoXCJ3aW5kb3dIZWlnaHRcIixlKX0sX191cGRhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheW91dC5mb290ZXJbdF0hPT1lJiYodGhpcy5sYXlvdXQuZm9vdGVyW3RdPWUpfSxfX3VwZGF0ZUxvY2FsOmZ1bmN0aW9uKHQsZSl7dGhpc1t0XSE9PWUmJih0aGlzW3RdPWUpfSxfX3VwZGF0ZVJldmVhbGVkOmZ1bmN0aW9uKCl7aWYodGhpcy5yZXZlYWwpe3ZhciB0PXRoaXMubGF5b3V0LnNjcm9sbCxlPXQuZGlyZWN0aW9uLGk9dC5wb3NpdGlvbixzPXQuaW5mbGV4aW9uUG9zaXRpb247dGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIixcInVwXCI9PT1lfHxpLXM8MTAwfHx0aGlzLmxheW91dC5oZWlnaHQtdGhpcy5jb250YWluZXJIZWlnaHQtaS10aGlzLnNpemU8MzAwKX19fX0sUUxheW91dEhlYWRlcj17bmFtZTpcIlFMYXlvdXRIZWFkZXJcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxpbmplY3Q6e2xheW91dDp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRTGF5b3V0SGVhZGVyIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvcHM6e3ZhbHVlOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0scmV2ZWFsOkJvb2xlYW4scmV2ZWFsT2Zmc2V0Ont0eXBlOk51bWJlcixkZWZhdWx0OjI1MH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2l6ZTowLHJldmVhbGVkOiEwfX0sd2F0Y2g6e3ZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuX191cGRhdGUoXCJzcGFjZVwiLHQpLHRoaXMuX191cGRhdGVMb2NhbChcInJldmVhbGVkXCIsITApLHRoaXMubGF5b3V0Ll9fYW5pbWF0ZSgpfSxvZmZzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fX3VwZGF0ZShcIm9mZnNldFwiLHQpfSxyZXZlYWw6ZnVuY3Rpb24odCl7dHx8dGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIix0aGlzLnZhbHVlKX0scmV2ZWFsZWQ6ZnVuY3Rpb24odCl7dGhpcy5sYXlvdXQuX19hbmltYXRlKCksdGhpcy4kZW1pdChcInJldmVhbFwiLHQpfSxcImxheW91dC5zY3JvbGxcIjpmdW5jdGlvbih0KXt0aGlzLnJldmVhbCYmdGhpcy5fX3VwZGF0ZUxvY2FsKFwicmV2ZWFsZWRcIixcInVwXCI9PT10LmRpcmVjdGlvbnx8dC5wb3NpdGlvbjw9dGhpcy5yZXZlYWxPZmZzZXR8fHQucG9zaXRpb24tdC5pbmZsZXhpb25Qb3NpdGlvbjwxMDApfX0sY29tcHV0ZWQ6e2ZpeGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmV2ZWFsfHx0aGlzLmxheW91dC52aWV3LmluZGV4T2YoXCJIXCIpPi0xfHx0aGlzLmxheW91dC5jb250YWluZXJ9LG9mZnNldDpmdW5jdGlvbigpe2lmKCF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWUpcmV0dXJuIDA7aWYodGhpcy5maXhlZClyZXR1cm4gdGhpcy5yZXZlYWxlZD90aGlzLnNpemU6MDt2YXIgdD10aGlzLnNpemUtdGhpcy5sYXlvdXQuc2Nyb2xsLnBvc2l0aW9uO3JldHVybiB0PjA/dDowfSxjb21wdXRlZENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJue1wiZml4ZWQtdG9wXCI6dGhpcy5maXhlZCxcImFic29sdXRlLXRvcFwiOiF0aGlzLmZpeGVkLFwicS1sYXlvdXQtaGVhZGVyLWhpZGRlblwiOiF0aGlzLmNhblJlbmRlcnx8IXRoaXMudmFsdWV8fHRoaXMuZml4ZWQmJiF0aGlzLnJldmVhbGVkfX0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGF5b3V0LnJvd3MudG9wLGU9e307cmV0dXJuXCJsXCI9PT10WzBdJiZ0aGlzLmxheW91dC5sZWZ0LnNwYWNlJiYoZVt0aGlzLiRxLmkxOG4ucnRsP1wicmlnaHRcIjpcImxlZnRcIl09dGhpcy5sYXlvdXQubGVmdC5zaXplK1wicHhcIiksXCJyXCI9PT10WzJdJiZ0aGlzLmxheW91dC5yaWdodC5zcGFjZSYmKGVbdGhpcy4kcS5pMThuLnJ0bD9cImxlZnRcIjpcInJpZ2h0XCJdPXRoaXMubGF5b3V0LnJpZ2h0LnNpemUrXCJweFwiKSxlfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiaGVhZGVyXCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtaGVhZGVyIHEtbGF5b3V0LW1hcmdpbmFsIHEtbGF5b3V0LXRyYW5zaXRpb25cIixjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3Msc3R5bGU6dGhpcy5jb21wdXRlZFN0eWxlfSxbdChRUmVzaXplT2JzZXJ2YWJsZSx7cHJvcHM6e2RlYm91bmNlOjB9LG9uOntyZXNpemU6dGhpcy5fX29uUmVzaXplfX0pLHRoaXMuJHNsb3RzLmRlZmF1bHRdKX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMubGF5b3V0Lmluc3RhbmNlcy5oZWFkZXI9dGhpcyx0aGlzLl9fdXBkYXRlKFwic3BhY2VcIix0aGlzLnZhbHVlKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsdGhpcy5vZmZzZXQpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5sYXlvdXQuaW5zdGFuY2VzLmhlYWRlcj09PXRoaXMmJih0aGlzLmxheW91dC5pbnN0YW5jZXMuaGVhZGVyPW51bGwsdGhpcy5fX3VwZGF0ZShcInNpemVcIiwwKSx0aGlzLl9fdXBkYXRlKFwib2Zmc2V0XCIsMCksdGhpcy5fX3VwZGF0ZShcInNwYWNlXCIsITEpKX0sbWV0aG9kczp7X19vblJlc2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLl9fdXBkYXRlTG9jYWwoXCJzaXplXCIsZSksdGhpcy5fX3VwZGF0ZShcInNpemVcIixlKX0sX191cGRhdGU6ZnVuY3Rpb24odCxlKXt0aGlzLmxheW91dC5oZWFkZXJbdF0hPT1lJiYodGhpcy5sYXlvdXQuaGVhZGVyW3RdPWUpfSxfX3VwZGF0ZUxvY2FsOmZ1bmN0aW9uKHQsZSl7dGhpc1t0XSE9PWUmJih0aGlzW3RdPWUpfX19LFFQYWdlPXtuYW1lOlwiUVBhZ2VcIixpbmplY3Q6e3BhZ2VDb250YWluZXI6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUVBhZ2UgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUVBhZ2VDb250YWluZXJcIil9fSxsYXlvdXQ6e319LHByb3BzOntwYWRkaW5nOkJvb2xlYW4sc3R5bGVGbjpGdW5jdGlvbn0sY29tcHV0ZWQ6e3N0eWxlOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMubGF5b3V0LmhlYWRlci5zcGFjZT90aGlzLmxheW91dC5oZWFkZXIuc2l6ZTowKSsodGhpcy5sYXlvdXQuZm9vdGVyLnNwYWNlP3RoaXMubGF5b3V0LmZvb3Rlci5zaXplOjApO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuc3R5bGVGbj90aGlzLnN0eWxlRm4odCk6e21pbkhlaWdodDp0aGlzLmxheW91dC5jb250YWluZXI/dGhpcy5sYXlvdXQuY29udGFpbmVySGVpZ2h0LXQrXCJweFwiOnQ/XCJjYWxjKDEwMHZoIC0gXCIrdCtcInB4KVwiOlwiMTAwdmhcIn19LGNsYXNzZXM6ZnVuY3Rpb24oKXtpZih0aGlzLnBhZGRpbmcpcmV0dXJuXCJsYXlvdXQtcGFkZGluZ1wifX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwibWFpblwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LXBhZ2VcIixzdHlsZTp0aGlzLnN0eWxlLGNsYXNzOnRoaXMuY2xhc3Nlc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRUGFnZUNvbnRhaW5lcj17bmFtZTpcIlFQYWdlQ29udGFpbmVyXCIsaW5qZWN0OntsYXlvdXQ6e2RlZmF1bHQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiUVBhZ2VDb250YWluZXIgbmVlZHMgdG8gYmUgY2hpbGQgb2YgUUxheW91dFwiKX19fSxwcm92aWRlOntwYWdlQ29udGFpbmVyOiEwfSxjb21wdXRlZDp7c3R5bGU6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5sYXlvdXQuaGVhZGVyLnNwYWNlJiYodC5wYWRkaW5nVG9wPXRoaXMubGF5b3V0LmhlYWRlci5zaXplK1wicHhcIiksdGhpcy5sYXlvdXQucmlnaHQuc3BhY2UmJih0W1wicGFkZGluZ1wiKyh0aGlzLiRxLmkxOG4ucnRsP1wiTGVmdFwiOlwiUmlnaHRcIildPXRoaXMubGF5b3V0LnJpZ2h0LnNpemUrXCJweFwiKSx0aGlzLmxheW91dC5mb290ZXIuc3BhY2UmJih0LnBhZGRpbmdCb3R0b209dGhpcy5sYXlvdXQuZm9vdGVyLnNpemUrXCJweFwiKSx0aGlzLmxheW91dC5sZWZ0LnNwYWNlJiYodFtcInBhZGRpbmdcIisodGhpcy4kcS5pMThuLnJ0bD9cIlJpZ2h0XCI6XCJMZWZ0XCIpXT10aGlzLmxheW91dC5sZWZ0LnNpemUrXCJweFwiKSx0fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1sYXlvdXQtcGFnZS1jb250YWluZXIgcS1sYXlvdXQtdHJhbnNpdGlvblwiLHN0eWxlOnRoaXMuc3R5bGV9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVBhZ2VTdGlja3k9e25hbWU6XCJRUGFnZVN0aWNreVwiLGluamVjdDp7bGF5b3V0OntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFQYWdlU3RpY2t5IG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFMYXlvdXRcIil9fX0scHJvcHM6e3Bvc2l0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiYm90dG9tLXJpZ2h0XCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcInRvcC1yaWdodFwiLFwidG9wLWxlZnRcIixcImJvdHRvbS1yaWdodFwiLFwiYm90dG9tLWxlZnRcIixcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXS5pbmNsdWRlcyh0KX19LG9mZnNldDp7dHlwZTpBcnJheSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIDI9PT10Lmxlbmd0aH19LGV4cGFuZDpCb29sZWFufSxjb21wdXRlZDp7YXR0YWNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3NpdGlvbjtyZXR1cm57dG9wOnQuaW5kZXhPZihcInRvcFwiKT4tMSxyaWdodDp0LmluZGV4T2YoXCJyaWdodFwiKT4tMSxib3R0b206dC5pbmRleE9mKFwiYm90dG9tXCIpPi0xLGxlZnQ6dC5pbmRleE9mKFwibGVmdFwiKT4tMSx2ZXJ0aWNhbDpcInRvcFwiPT09dHx8XCJib3R0b21cIj09PXQsaG9yaXpvbnRhbDpcImxlZnRcIj09PXR8fFwicmlnaHRcIj09PXR9fSx0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQuaGVhZGVyLm9mZnNldH0scmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQucmlnaHQub2Zmc2V0fSxib3R0b206ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXlvdXQuZm9vdGVyLm9mZnNldH0sbGVmdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxheW91dC5sZWZ0Lm9mZnNldH0sY29tcHV0ZWRTdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYXR0YWNoLGU9W10saT10aGlzLiRxLmkxOG4ucnRsPy0xOjE7dC50b3AmJnRoaXMudG9wP2UucHVzaChcInRyYW5zbGF0ZVkoXCIrdGhpcy50b3ArXCJweClcIik6dC5ib3R0b20mJnRoaXMuYm90dG9tJiZlLnB1c2goXCJ0cmFuc2xhdGVZKFwiKy10aGlzLmJvdHRvbStcInB4KVwiKSx0LmxlZnQmJnRoaXMubGVmdD9lLnB1c2goXCJ0cmFuc2xhdGVYKFwiK2kqdGhpcy5sZWZ0K1wicHgpXCIpOnQucmlnaHQmJnRoaXMucmlnaHQmJmUucHVzaChcInRyYW5zbGF0ZVgoXCIrLWkqdGhpcy5yaWdodCtcInB4KVwiKTt2YXIgcz1lLmxlbmd0aD97dHJhbnNmb3JtOmUuam9pbihcIiBcIil9Ont9O3JldHVybiB0aGlzLm9mZnNldCYmKHMubWFyZ2luPXRoaXMub2Zmc2V0WzFdK1wicHggXCIrdGhpcy5vZmZzZXRbMF0rXCJweFwiKSx0LnZlcnRpY2FsPyh0aGlzLmxlZnQmJihzW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT10aGlzLmxlZnQrXCJweFwiKSx0aGlzLnJpZ2h0JiYoc1t0aGlzLiRxLmkxOG4ucnRsP1wibGVmdFwiOlwicmlnaHRcIl09dGhpcy5yaWdodCtcInB4XCIpKTp0Lmhvcml6b250YWwmJih0aGlzLnRvcCYmKHMudG9wPXRoaXMudG9wK1wicHhcIiksdGhpcy5ib3R0b20mJihzLmJvdHRvbT10aGlzLmJvdHRvbStcInB4XCIpKSxzfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW1wiZml4ZWQtXCIrdGhpcy5wb3NpdGlvbixcInEtcGFnZS1zdGlja3ktXCIrKHRoaXMuZXhwYW5kP1wiZXhwYW5kXCI6XCJzaHJpbmtcIildfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wYWdlLXN0aWNreSBxLWxheW91dC10cmFuc2l0aW9uIHJvdyBmbGV4LWNlbnRlclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxzdHlsZTp0aGlzLmNvbXB1dGVkU3R5bGV9LHRoaXMuZXhwYW5kP3RoaXMuJHNsb3RzLmRlZmF1bHQ6W3QoXCJzcGFuXCIsdGhpcy4kc2xvdHMuZGVmYXVsdCldKX19LFFMaXN0SGVhZGVyPXtuYW1lOlwiUUxpc3RIZWFkZXJcIixwcm9wczp7aW5zZXQ6Qm9vbGVhbn0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1saXN0LWhlYWRlclwiLGNsYXNzOntcInEtbGlzdC1oZWFkZXItaW5zZXRcIjp0aGlzLmluc2V0fX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRTW9kYWxMYXlvdXQ9e25hbWU6XCJRTW9kYWxMYXlvdXRcIixpbmplY3Q6e19fcW1vZGFsOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFNb2RhbExheW91dCBuZWVkcyB0byBiZSBjaGlsZCBvZiBRTW9kYWxcIil9fX0scHJvcHM6e2hlYWRlclN0eWxlOltTdHJpbmcsT2JqZWN0LEFycmF5XSxoZWFkZXJDbGFzczpbU3RyaW5nLE9iamVjdCxBcnJheV0sY29udGVudFN0eWxlOltTdHJpbmcsT2JqZWN0LEFycmF5XSxjb250ZW50Q2xhc3M6W1N0cmluZyxPYmplY3QsQXJyYXldLGZvb3RlclN0eWxlOltTdHJpbmcsT2JqZWN0LEFycmF5XSxmb290ZXJDbGFzczpbU3RyaW5nLE9iamVjdCxBcnJheV19LHdhdGNoOntfX3Ftb2RhbDpmdW5jdGlvbih0LGUpe2UmJmUudW5yZWdpc3Rlcih0aGlzKSx0JiZ0LnJlZ2lzdGVyKHRoaXMpfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuX19xbW9kYWwmJnRoaXMuX19xbW9kYWwucmVnaXN0ZXIodGhpcyl9LGJlZm9yZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9fcW1vZGFsJiZ0aGlzLl9fcW1vZGFsLnVucmVnaXN0ZXIodGhpcyl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4odGhpcy4kc2xvdHMuaGVhZGVyfHx0aGlzLiRzbG90cy5uYXZpZ2F0aW9uKSYmZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLWxheW91dC1oZWFkZXJcIixzdHlsZTp0aGlzLmhlYWRlclN0eWxlLGNsYXNzOnRoaXMuaGVhZGVyQ2xhc3N9LFt0aGlzLiRzbG90cy5oZWFkZXIsdGhpcy4kc2xvdHMubmF2aWdhdGlvbl0pKSxlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbW9kYWwtbGF5b3V0LWNvbnRlbnQgY29sIHNjcm9sbFwiLHN0eWxlOnRoaXMuY29udGVudFN0eWxlLGNsYXNzOnRoaXMuY29udGVudENsYXNzfSx0aGlzLiRzbG90cy5kZWZhdWx0KSksdGhpcy4kc2xvdHMuZm9vdGVyJiZlLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtbGF5b3V0LWZvb3RlclwiLHN0eWxlOnRoaXMuZm9vdGVyU3R5bGUsY2xhc3M6dGhpcy5mb290ZXJDbGFzc30sW3RoaXMuJHNsb3RzLmZvb3RlcixudWxsXSkpLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW1vZGFsLWxheW91dCBjb2wgY29sdW1uIG5vLXdyYXBcIn0sZSl9fSxRTm9Tc3I9e25hbWU6XCJRTm9Tc3JcIixtaXhpbnM6W0NhblJlbmRlck1peGluXSxwcm9wczp7dGFnOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZGl2XCJ9LHBsYWNlaG9sZGVyOlN0cmluZ30scmVuZGVyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY2FuUmVuZGVyKXt2YXIgZT10aGlzLiRzbG90cy5kZWZhdWx0O3JldHVybiBlJiZlLmxlbmd0aD4xP3QodGhpcy50YWcsZSk6ZT9lWzBdOm51bGx9aWYodGhpcy4kc2xvdHMucGxhY2Vob2xkZXIpe3ZhciBpPXRoaXMuJHNsb3RzLnBsYWNlaG9sZGVyO3JldHVybiBpJiZpLmxlbmd0aD4xP3QodGhpcy50YWcse3N0YXRpY0NsYXNzOlwicS1uby1zc3ItcGxhY2Vob2xkZXJcIn0saSk6aT9pWzBdOm51bGx9aWYodGhpcy5wbGFjZWhvbGRlcilyZXR1cm4gdCh0aGlzLnRhZyx7c3RhdGljQ2xhc3M6XCJxLW5vLXNzci1wbGFjZWhvbGRlclwifSxbdGhpcy5wbGFjZWhvbGRlcl0pfX0sUVBhZ2luYXRpb249e25hbWU6XCJRUGFnaW5hdGlvblwiLHByb3BzOnt2YWx1ZTp7dHlwZTpOdW1iZXIscmVxdWlyZWQ6ITB9LG1pbjp7dHlwZTpOdW1iZXIsZGVmYXVsdDoxfSxtYXg6e3R5cGU6TnVtYmVyLHJlcXVpcmVkOiEwfSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdGV4dENvbG9yOlN0cmluZyxzaXplOlN0cmluZyxkaXNhYmxlOkJvb2xlYW4saW5wdXQ6Qm9vbGVhbixib3VuZGFyeUxpbmtzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxib3VuZGFyeU51bWJlcnM6e3R5cGU6Qm9vbGVhbixkZWZhdWx0Om51bGx9LGRpcmVjdGlvbkxpbmtzOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDpudWxsfSxlbGxpcHNlczp7dHlwZTpCb29sZWFuLGRlZmF1bHQ6bnVsbH0sbWF4UGFnZXM6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuISh0PDApfHwoY29uc29sZS5lcnJvcihcIm1heFBhZ2VzIHNob3VsZCBub3QgYmUgbmVnYXRpdmVcIiksITEpfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bmV3UGFnZTpudWxsfX0sd2F0Y2g6e21pbjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXRoaXMudmFsdWV9LG1heDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXRoaXMudmFsdWV9fSxjb21wdXRlZDp7bW9kZWw6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5kaXNhYmxlJiZ0JiYhaXNOYU4odCkpe3ZhciBpPWJldHdlZW4ocGFyc2VJbnQodCwxMCksdGhpcy5taW4sdGhpcy5tYXgpO3RoaXMuJGVtaXQoXCJpbnB1dFwiLGkpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkoaSkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLGkpfSl9fX0saW5wdXRQbGFjZWhvbGRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vZGVsK1wiIC8gXCIrdGhpcy5tYXh9LF9fYm91bmRhcnlMaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmJvdW5kYXJ5TGlua3MsdGhpcy5pbnB1dCl9LF9fYm91bmRhcnlOdW1iZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRCb29sKHRoaXMuYm91bmRhcnlOdW1iZXJzLCF0aGlzLmlucHV0KX0sX19kaXJlY3Rpb25MaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9fZ2V0Qm9vbCh0aGlzLmRpcmVjdGlvbkxpbmtzLHRoaXMuaW5wdXQpfSxfX2VsbGlwc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19nZXRCb29sKHRoaXMuZWxsaXBzZXMsIXRoaXMuaW5wdXQpfSxpY29uczpmdW5jdGlvbigpe3ZhciB0PVt0aGlzLiRxLmljb24ucGFnaW5hdGlvbi5maXJzdCx0aGlzLiRxLmljb24ucGFnaW5hdGlvbi5wcmV2LHRoaXMuJHEuaWNvbi5wYWdpbmF0aW9uLm5leHQsdGhpcy4kcS5pY29uLnBhZ2luYXRpb24ubGFzdF07cmV0dXJuIHRoaXMuJHEuaTE4bi5ydGw/dC5yZXZlcnNlKCk6dH19LG1ldGhvZHM6e3NldDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXR9LHNldEJ5T2Zmc2V0OmZ1bmN0aW9uKHQpe3RoaXMubW9kZWw9dGhpcy5tb2RlbCt0fSxfX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMubW9kZWw9dGhpcy5uZXdQYWdlLHRoaXMubmV3UGFnZT1udWxsfSxfX2dldEJvb2w6ZnVuY3Rpb24odCxlKXtyZXR1cm5bITAsITFdLmluY2x1ZGVzKHQpP3Q6ZX0sX19nZXRCdG46ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlLnByb3BzPU9iamVjdC5hc3NpZ24oe2NvbG9yOnRoaXMuY29sb3IsZmxhdDohMCxzaXplOnRoaXMuc2l6ZX0saSksdChRQnRuLGUpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT1bXSxzPVtdLG49W107aWYodGhpcy5fX2JvdW5kYXJ5TGlua3MmJihpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibHNcIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoZS5taW4pfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZXx8dGhpcy52YWx1ZTw9dGhpcy5taW4saWNvbjp0aGlzLmljb25zWzBdfSkpLHMudW5zaGlmdCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJsZVwiLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChlLm1heCl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlfHx0aGlzLnZhbHVlPj10aGlzLm1heCxpY29uOnRoaXMuaWNvbnNbM119KSkpLHRoaXMuX19kaXJlY3Rpb25MaW5rcyYmKGkucHVzaCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJkcFwiLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldEJ5T2Zmc2V0KC0xKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGV8fHRoaXMudmFsdWU8PXRoaXMubWluLGljb246dGhpcy5pY29uc1sxXX0pKSxzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZG5cIixvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXRCeU9mZnNldCgxKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGV8fHRoaXMudmFsdWU+PXRoaXMubWF4LGljb246dGhpcy5pY29uc1syXX0pKSksdGhpcy5pbnB1dCluLnB1c2godChRSW5wdXQse3N0YXRpY0NsYXNzOlwiaW5saW5lIG5vLXBhZGRpbmdcIixzdHlsZTp7d2lkdGg6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLmxlbmd0aCtcInJlbVwifSxwcm9wczp7dHlwZTpcIm51bWJlclwiLHZhbHVlOnRoaXMubmV3UGFnZSxub051bWJlclRvZ2dsZTohMCxtaW46dGhpcy5taW4sbWF4OnRoaXMubWF4LGNvbG9yOnRoaXMuY29sb3IscGxhY2Vob2xkZXI6dGhpcy5pbnB1dFBsYWNlaG9sZGVyLGRpc2FibGU6dGhpcy5kaXNhYmxlLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZS5uZXdQYWdlPXR9LGtleWRvd246ZnVuY3Rpb24odCl7cmV0dXJuIDEzPT09Z2V0RXZlbnRLZXkodCkmJmUuX191cGRhdGUoKX0sYmx1cjpmdW5jdGlvbigpe3JldHVybiBlLl9fdXBkYXRlKCl9fX0pKTtlbHNle3ZhciBvPU1hdGgubWF4KHRoaXMubWF4UGFnZXMsMSsodGhpcy5fX2VsbGlwc2VzPzI6MCkrKHRoaXMuX19ib3VuZGFyeU51bWJlcnM/MjowKSkscj10aGlzLm1pbixhPXRoaXMubWF4LGw9ITEsYz0hMSxoPSExLHU9ITE7dGhpcy5tYXhQYWdlcyYmbzx0aGlzLm1heC10aGlzLm1pbisxJiYobz0xKzIqTWF0aC5mbG9vcihvLzIpLHI9TWF0aC5tYXgodGhpcy5taW4sTWF0aC5taW4odGhpcy5tYXgtbysxLHRoaXMudmFsdWUtTWF0aC5mbG9vcihvLzIpKSksYT1NYXRoLm1pbih0aGlzLm1heCxyK28tMSksdGhpcy5fX2JvdW5kYXJ5TnVtYmVycyYmKGg9ITAscis9MSksdGhpcy5fX2VsbGlwc2VzJiZyPnRoaXMubWluKyh0aGlzLl9fYm91bmRhcnlOdW1iZXJzPzE6MCkmJihsPSEwLHIrPTEpLHRoaXMuX19ib3VuZGFyeU51bWJlcnMmJih1PSEwLGEtPTEpLHRoaXMuX19lbGxpcHNlcyYmYTx0aGlzLm1heC0odGhpcy5fX2JvdW5kYXJ5TnVtYmVycz8xOjApJiYoYz0hMCxhLT0xKSk7dmFyIGQ9e21pbldpZHRoOk1hdGgubWF4KDIsU3RyaW5nKHRoaXMubWF4KS5sZW5ndGgpK1wiZW1cIn07aWYoaCl7dmFyIHA9dGhpcy5taW49PT10aGlzLnZhbHVlO2kucHVzaCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJuc1wiLHN0eWxlOmQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGUubWluKX19fSx7ZGlzYWJsZTp0aGlzLmRpc2FibGUsZmxhdDohcCx0ZXh0Q29sb3I6cD90aGlzLnRleHRDb2xvcjpudWxsLGxhYmVsOnRoaXMubWluLG5vUmlwcGxlOiEwfSkpfWlmKHUpe3ZhciBmPXRoaXMubWF4PT09dGhpcy52YWx1ZTtzLnVuc2hpZnQodGhpcy5fX2dldEJ0bih0LHtrZXk6XCJibmVcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChlLm1heCl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlLGZsYXQ6IWYsdGV4dENvbG9yOmY/dGhpcy50ZXh0Q29sb3I6bnVsbCxsYWJlbDp0aGlzLm1heCxub1JpcHBsZTohMH0pKX1sJiZpLnB1c2godGhpcy5fX2dldEJ0bih0LHtrZXk6XCJiZXNcIixzdHlsZTpkLG9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChyLTEpfX19LHtkaXNhYmxlOnRoaXMuZGlzYWJsZSxsYWJlbDpcIuKAplwifSkpLGMmJnMudW5zaGlmdCh0aGlzLl9fZ2V0QnRuKHQse2tleTpcImJlZVwiLHN0eWxlOmQsb246e2NsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGUuc2V0KGErMSl9fX0se2Rpc2FibGU6dGhpcy5kaXNhYmxlLGxhYmVsOlwi4oCmXCJ9KSk7Zm9yKHZhciBtPWZ1bmN0aW9uKGkpe3ZhciBzPWk9PT1lLnZhbHVlO24ucHVzaChlLl9fZ2V0QnRuKHQse2tleTpcImJwZ1wiK2ksc3R5bGU6ZCxvbjp7Y2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZS5zZXQoaSl9fX0se2Rpc2FibGU6ZS5kaXNhYmxlLGZsYXQ6IXMsdGV4dENvbG9yOnM/ZS50ZXh0Q29sb3I6bnVsbCxsYWJlbDppLG5vUmlwcGxlOiEwfSkpfSxnPXI7Zzw9YTtnKyspbShnKX1yZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFnaW5hdGlvbiByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp7ZGlzYWJsZWQ6dGhpcy5kaXNhYmxlfX0sW2ksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBqdXN0aWZ5LWNlbnRlclwifSxbbl0pLHNdKX19LFFQYXJhbGxheD17bmFtZTpcIlFQYXJhbGxheFwiLHByb3BzOntzcmM6U3RyaW5nLGhlaWdodDp7dHlwZTpOdW1iZXIsZGVmYXVsdDo1MDB9LHNwZWVkOnt0eXBlOk51bWJlcixkZWZhdWx0OjEsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wJiZ0PD0xfX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2Nyb2xsaW5nOiExfX0sd2F0Y2g6e2hlaWdodDpmdW5jdGlvbigpe3RoaXMuX191cGRhdGVQb3MoKX19LG1ldGhvZHM6e19fb25SZXNpemU6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbFRhcmdldCYmKHRoaXMubWVkaWFIZWlnaHQ9dGhpcy5tZWRpYS5uYXR1cmFsSGVpZ2h0fHxoZWlnaHQodGhpcy5tZWRpYSksdGhpcy5fX3VwZGF0ZVBvcygpKX0sX191cGRhdGVQb3M6ZnVuY3Rpb24oKXt2YXIgdCxlLGkscztpZih0aGlzLnNjcm9sbFRhcmdldD09PXdpbmRvdz8odD0wLGk9ZT13aW5kb3cuaW5uZXJIZWlnaHQpOmk9KHQ9b2Zmc2V0KHRoaXMuc2Nyb2xsVGFyZ2V0KS50b3ApKyhlPWhlaWdodCh0aGlzLnNjcm9sbFRhcmdldCkpLChzPW9mZnNldCh0aGlzLiRlbCkudG9wKSt0aGlzLmhlaWdodD50JiZzPGkpe3ZhciBuPShpLXMpLyh0aGlzLmhlaWdodCtlKTt0aGlzLl9fc2V0UG9zKCh0aGlzLm1lZGlhSGVpZ2h0LXRoaXMuaGVpZ2h0KSpuKnRoaXMuc3BlZWQpfX0sX19zZXRQb3M6ZnVuY3Rpb24odCl7dGhpcy5tZWRpYS5zdHlsZS50cmFuc2Zvcm09XCJ0cmFuc2xhdGUzRCgtNTAlLFwiK3QrXCJweCwgMClcIn19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtcGFyYWxsYXhcIixzdHlsZTp7aGVpZ2h0OnRoaXMuaGVpZ2h0K1wicHhcIn19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wYXJhbGxheC1tZWRpYSBhYnNvbHV0ZS1mdWxsXCJ9LFt0aGlzLiRzbG90cy5tZWRpYXx8dChcImltZ1wiLHtyZWY6XCJtZWRpYVwiLGF0dHJzOntzcmM6dGhpcy5zcmN9fSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wYXJhbGxheC10ZXh0IGFic29sdXRlLWZ1bGwgY29sdW1uIGZsZXgtY2VudGVyIG5vLXBvaW50ZXItZXZlbnRzXCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9LGJlZm9yZU1vdW50OmZ1bmN0aW9uKCl7dGhpcy5fX3NldFBvcz1mcmFtZURlYm91bmNlKHRoaXMuX19zZXRQb3MpfSxtb3VudGVkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe3QubWVkaWE9dC4kc2xvdHMubWVkaWE/dC4kc2xvdHMubWVkaWFbMF0uZWxtOnQuJHJlZnMubWVkaWEsdC5tZWRpYS5vbmxvYWQ9dC5tZWRpYS5vbmxvYWRzdGFydD10Ll9fb25SZXNpemUsdC5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHQuJGVsKSx0LnJlc2l6ZUhhbmRsZXI9ZGVib3VuY2UodC5fX29uUmVzaXplLDUwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQucmVzaXplSGFuZGxlcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHQuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0Ll9fdXBkYXRlUG9zLGxpc3Rlbk9wdHMucGFzc2l2ZSksdC5fX29uUmVzaXplKCl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5yZXNpemVIYW5kbGVyLGxpc3Rlbk9wdHMucGFzc2l2ZSksdGhpcy5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMuX191cGRhdGVQb3MsbGlzdGVuT3B0cy5wYXNzaXZlKSx0aGlzLm1lZGlhLm9ubG9hZD10aGlzLm1lZGlhLm9ubG9hZHN0YXJ0PW51bGx9fSxRUG9wdXBFZGl0PXtuYW1lOlwiUVBvcHVwRWRpdFwiLHByb3BzOnt2YWx1ZTp7fSxwZXJzaXN0ZW50OkJvb2xlYW4sa2VlcE9uU2NyZWVuOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH0sdGl0bGU6U3RyaW5nLGJ1dHRvbnM6Qm9vbGVhbixsYWJlbFNldDpTdHJpbmcsbGFiZWxDYW5jZWw6U3RyaW5nLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSx2YWxpZGF0ZTp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSxkaXNhYmxlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5pdGlhbFZhbHVlOlwiXCJ9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC4kcmVmcy5wb3BvdmVyLnJlcG9zaXRpb24oKX0pfX0sbWV0aG9kczp7Y2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5fX2hhc0NoYW5nZWQoKSYmKHRoaXMuJGVtaXQoXCJjYW5jZWxcIix0aGlzLnZhbHVlLHRoaXMuaW5pdGlhbFZhbHVlKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLmluaXRpYWxWYWx1ZSkpLHRoaXMuJG5leHRUaWNrKHRoaXMuX19jbG9zZSl9LHNldDpmdW5jdGlvbigpe2lmKHRoaXMuX19oYXNDaGFuZ2VkKCkpe2lmKCF0aGlzLnZhbGlkYXRlKHRoaXMudmFsdWUpKXJldHVybjt0aGlzLiRlbWl0KFwic2F2ZVwiLHRoaXMudmFsdWUsdGhpcy5pbml0aWFsVmFsdWUpfXRoaXMuX19jbG9zZSgpfSxfX2hhc0NoYW5nZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy52YWx1ZSkhPT1KU09OLnN0cmluZ2lmeSh0aGlzLmluaXRpYWxWYWx1ZSl9LF9fY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLnZhbGlkYXRlZD0hMCx0aGlzLiRyZWZzLnBvcG92ZXIuaGlkZSgpfSxfX2dldENvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kc2xvdHMudGl0bGV8fHRoaXMudGl0bGU7cmV0dXJuW2UmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRpdGxlIHEtbXQtc20gcS1tYi1zbVwifSxbZV0pfHx2b2lkIDBdLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KS5jb25jYXQoW3RoaXMuYnV0dG9ucyYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvdyBqdXN0aWZ5LWNlbnRlciBuby13cmFwIHEtbXQtc21cIn0sW3QoUUJ0bix7cHJvcHM6e2ZsYXQ6ITAsY29sb3I6dGhpcy5jb2xvcixsYWJlbDp0aGlzLmxhYmVsQ2FuY2VsfHx0aGlzLiRxLmkxOG4ubGFiZWwuY2FuY2VsfSxvbjp7Y2xpY2s6dGhpcy5jYW5jZWx9fSksdChRQnRuLHtzdGF0aWNDbGFzczpcInEtbWwtc21cIixwcm9wczp7ZmxhdDohMCxjb2xvcjp0aGlzLmNvbG9yLGxhYmVsOnRoaXMubGFiZWxTZXR8fHRoaXMuJHEuaTE4bi5sYWJlbC5zZXR9LG9uOntjbGljazp0aGlzLnNldH19KV0pfHx2b2lkIDBdKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFFQb3BvdmVyLHtzdGF0aWNDbGFzczpcInEtdGFibGUtZWRpdCBxLXB4LW1kIHEtcHktc21cIixyZWY6XCJwb3BvdmVyXCIscHJvcHM6e2NvdmVyOiEwLHBlcnNpc3RlbnQ6dGhpcy5wZXJzaXN0ZW50LGtlZXBPblNjcmVlbjp0aGlzLmtlZXBPblNjcmVlbixkaXNhYmxlOnRoaXMuZGlzYWJsZX0sb246e3Nob3c6ZnVuY3Rpb24oKXt2YXIgdD1lLiRlbC5xdWVyeVNlbGVjdG9yKFwiLnEtaW5wdXQtdGFyZ2V0Om5vdCgucS1pbnB1dC1zaGFkb3cpXCIpfHxlLiRlbC5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIil8fGUuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJ0ZXh0YXJlYVwiKTt0JiZ0LmZvY3VzKCksZS4kZW1pdChcInNob3dcIiksZS5pbml0aWFsVmFsdWU9Y2xvbmUoZS52YWx1ZSksZS52YWxpZGF0ZWQ9ITF9LFwiZXNjYXBlLWtleVwiOmZ1bmN0aW9uKCl7ZS52YWxpZGF0ZWQ9ITAsZS4kZW1pdChcImNhbmNlbFwiLGUudmFsdWUsZS5pbml0aWFsVmFsdWUpLGUuJGVtaXQoXCJpbnB1dFwiLGUuaW5pdGlhbFZhbHVlKX0saGlkZTpmdW5jdGlvbigpe2UudmFsaWRhdGVkfHwoZS5fX2hhc0NoYW5nZWQoKSYmKGUudmFsaWRhdGUoZS52YWx1ZSk/ZS4kZW1pdChcInNhdmVcIixlLnZhbHVlLGUuaW5pdGlhbFZhbHVlKTooZS4kZW1pdChcImNhbmNlbFwiLGUudmFsdWUsZS5pbml0aWFsVmFsdWUpLGUuJGVtaXQoXCJpbnB1dFwiLGUuaW5pdGlhbFZhbHVlKSkpLGUuJGVtaXQoXCJoaWRlXCIpKX19LG5hdGl2ZU9uOntrZXlkb3duOmZ1bmN0aW9uKHQpezEzPT09Z2V0RXZlbnRLZXkodCkmJihlLmJ1dHRvbnM/ZS5zZXQoKTplLiRyZWZzLnBvcG92ZXIuaGlkZSgpKX19fSx0aGlzLl9fZ2V0Q29udGVudCh0KSl9fTtmdW5jdGlvbiB3aWR0aCQxKHQpe3JldHVybnt3aWR0aDp0K1wiJVwifX12YXIgUVByb2dyZXNzPXtuYW1lOlwiUVByb2dyZXNzXCIscHJvcHM6e3BlcmNlbnRhZ2U6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MH0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHN0cmlwZTpCb29sZWFuLGFuaW1hdGU6Qm9vbGVhbixpbmRldGVybWluYXRlOkJvb2xlYW4sYnVmZmVyOk51bWJlcixoZWlnaHQ6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCI0cHhcIn19LGNvbXB1dGVkOnttb2RlbDpmdW5jdGlvbigpe3JldHVybiBiZXR3ZWVuKHRoaXMucGVyY2VudGFnZSwwLDEwMCl9LGJ1ZmZlck1vZGVsOmZ1bmN0aW9uKCl7cmV0dXJuIGJldHdlZW4odGhpcy5idWZmZXJ8fDAsMCwxMDAtdGhpcy5tb2RlbCl9LGJ1ZmZlclN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHdpZHRoJDEodGhpcy5idWZmZXJNb2RlbCl9LHRyYWNrU3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4gd2lkdGgkMSh0aGlzLmJ1ZmZlcj8xMDAtdGhpcy5idWZmZXI6MTAwKX0sY29tcHV0ZWRDbGFzczpmdW5jdGlvbigpe3JldHVyblwidGV4dC1cIit0aGlzLmNvbG9yfSxjb21wdXRlZFN0eWxlOmZ1bmN0aW9uKCl7cmV0dXJue2hlaWdodDp0aGlzLmhlaWdodH19LG1vZGVsQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm57YW5pbWF0ZTp0aGlzLmFuaW1hdGUsc3RyaXBlOnRoaXMuc3RyaXBlLGluZGV0ZXJtaW5hdGU6dGhpcy5pbmRldGVybWluYXRlfX0sbW9kZWxTdHlsZTpmdW5jdGlvbigpe3JldHVybiB3aWR0aCQxKHRoaXMubW9kZWwpfX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzc1wiLHN0eWxlOnRoaXMuY29tcHV0ZWRTdHlsZSxjbGFzczp0aGlzLmNvbXB1dGVkQ2xhc3N9LFt0aGlzLmJ1ZmZlciYmIXRoaXMuaW5kZXRlcm1pbmF0ZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzcy1idWZmZXJcIixzdHlsZTp0aGlzLmJ1ZmZlclN0eWxlfSk6bnVsbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1wcm9ncmVzcy10cmFja1wiLHN0eWxlOnRoaXMudHJhY2tTdHlsZX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXByb2dyZXNzLW1vZGVsXCIsc3R5bGU6dGhpcy5tb2RlbFN0eWxlLGNsYXNzOnRoaXMubW9kZWxDbGFzc30pXSl9fSxoZWlnaHQkMT0tNjUsUVB1bGxUb1JlZnJlc2g9e25hbWU6XCJRUHVsbFRvUmVmcmVzaFwiLGRpcmVjdGl2ZXM6e1RvdWNoUGFuOlRvdWNoUGFufSxwcm9wczp7aGFuZGxlcjp7dHlwZTpGdW5jdGlvbixyZXF1aXJlZDohMH0sY29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LGRpc3RhbmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjM1fSxwdWxsTWVzc2FnZTpTdHJpbmcscmVsZWFzZU1lc3NhZ2U6U3RyaW5nLHJlZnJlc2hNZXNzYWdlOlN0cmluZyxyZWZyZXNoSWNvbjpTdHJpbmcsaW5saW5lOkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3N0YXRlOlwicHVsbFwiLHB1bGxQb3NpdGlvbjpoZWlnaHQkMSxhbmltYXRpbmc6ITEscHVsbGluZzohMSxzY3JvbGxpbmc6ITF9fSx3YXRjaDp7aW5saW5lOmZ1bmN0aW9uKHQpe3RoaXMuc2V0U2Nyb2xsQ29udGFpbmVyKHQpfX0sY29tcHV0ZWQ6e21lc3NhZ2U6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5zdGF0ZSl7Y2FzZVwicHVsbGVkXCI6cmV0dXJuIHRoaXMucmVsZWFzZU1lc3NhZ2V8fHRoaXMuJHEuaTE4bi5wdWxsVG9SZWZyZXNoLnJlbGVhc2U7Y2FzZVwicmVmcmVzaGluZ1wiOnJldHVybiB0aGlzLnJlZnJlc2hNZXNzYWdlfHx0aGlzLiRxLmkxOG4ucHVsbFRvUmVmcmVzaC5yZWZyZXNoO2Nhc2VcInB1bGxcIjpkZWZhdWx0OnJldHVybiB0aGlzLnB1bGxNZXNzYWdlfHx0aGlzLiRxLmkxOG4ucHVsbFRvUmVmcmVzaC5wdWxsfX0sc3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm57dHJhbnNmb3JtOlwidHJhbnNsYXRlWShcIit0aGlzLnB1bGxQb3NpdGlvbitcInB4KVwiLG1hcmdpbkJvdHRvbTpoZWlnaHQkMStcInB4XCJ9fSxtZXNzYWdlQ2xhc3M6ZnVuY3Rpb24oKXtyZXR1cm5cInRleHQtXCIrdGhpcy5jb2xvcn19LG1ldGhvZHM6e19fcHVsbDpmdW5jdGlvbih0KXtpZighdGhpcy5kaXNhYmxlKXtpZih0LmlzRmluYWwpcmV0dXJuIHRoaXMuc2Nyb2xsaW5nPSExLHRoaXMucHVsbGluZz0hMSx2b2lkKFwicHVsbGVkXCI9PT10aGlzLnN0YXRlPyh0aGlzLnN0YXRlPVwicmVmcmVzaGluZ1wiLHRoaXMuX19hbmltYXRlVG8oMCksdGhpcy50cmlnZ2VyKCkpOlwicHVsbFwiPT09dGhpcy5zdGF0ZSYmdGhpcy5fX2FuaW1hdGVUbyhoZWlnaHQkMSkpO2lmKHRoaXMuYW5pbWF0aW5nfHx0aGlzLnNjcm9sbGluZ3x8XCJyZWZyZXNoaW5nXCI9PT10aGlzLnN0YXRlKXJldHVybiEwO3ZhciBlPWdldFNjcm9sbFBvc2l0aW9uKHRoaXMuc2Nyb2xsQ29udGFpbmVyKTtpZigwIT09ZXx8MD09PWUmJlwiZG93blwiIT09dC5kaXJlY3Rpb24pcmV0dXJuIHRoaXMuc2Nyb2xsaW5nPSEwLHRoaXMucHVsbGluZyYmKHRoaXMucHVsbGluZz0hMSx0aGlzLnN0YXRlPVwicHVsbFwiLHRoaXMuX19hbmltYXRlVG8oaGVpZ2h0JDEpKSwhMDt0LmV2dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucHVsbGluZz0hMCx0aGlzLnB1bGxQb3NpdGlvbj1oZWlnaHQkMStNYXRoLm1heCgwLE1hdGgucG93KHQuZGlzdGFuY2UueSwuODUpKSx0aGlzLnN0YXRlPXRoaXMucHVsbFBvc2l0aW9uPnRoaXMuZGlzdGFuY2U/XCJwdWxsZWRcIjpcInB1bGxcIn19LF9fYW5pbWF0ZVRvOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzOyFpJiZ0aGlzLmFuaW1hdGlvbklkJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGluZyksdGhpcy5wdWxsUG9zaXRpb24tPSh0aGlzLnB1bGxQb3NpdGlvbi10KS83LHRoaXMucHVsbFBvc2l0aW9uLXQ+MT90aGlzLmFuaW1hdGluZz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtzLl9fYW5pbWF0ZVRvKHQsZSwhMCl9KTp0aGlzLmFuaW1hdGluZz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtzLnB1bGxQb3NpdGlvbj10LHMuYW5pbWF0aW5nPSExLGUmJmUoKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmhhbmRsZXIoZnVuY3Rpb24oKXt0Ll9fYW5pbWF0ZVRvKGhlaWdodCQxLGZ1bmN0aW9uKCl7dC5zdGF0ZT1cInB1bGxcIn0pfSl9LHNldFNjcm9sbENvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7ZS5zY3JvbGxDb250YWluZXI9dD9lLiRlbC5wYXJlbnROb2RlOmdldFNjcm9sbFRhcmdldChlLiRlbCl9KX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLnNldFNjcm9sbENvbnRhaW5lcih0aGlzLmlubGluZSl9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInB1bGwtdG8tcmVmcmVzaCBvdmVyZmxvdy1oaWRkZW4teVwifSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInB1bGwtdG8tcmVmcmVzaC1jb250YWluZXJcIixzdHlsZTp0aGlzLnN0eWxlLGRpcmVjdGl2ZXM6dGhpcy5kaXNhYmxlP251bGw6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnt2ZXJ0aWNhbDohMCxtaWdodFByZXZlbnQ6ITB9LHZhbHVlOnRoaXMuX19wdWxsfV19LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicHVsbC10by1yZWZyZXNoLW1lc3NhZ2Ugcm93IGZsZXgtY2VudGVyXCIsY2xhc3M6dGhpcy5tZXNzYWdlQ2xhc3N9LFt0KFFJY29uLHtjbGFzczp7XCJyb3RhdGUtMTgwXCI6XCJwdWxsZWRcIj09PXRoaXMuc3RhdGV9LHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi5wdWxsVG9SZWZyZXNoLmFycm93fSxkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTpcInJlZnJlc2hpbmdcIiE9PXRoaXMuc3RhdGV9XX0pLHQoUUljb24se3N0YXRpY0NsYXNzOlwiYW5pbWF0ZS1zcGluXCIscHJvcHM6e25hbWU6dGhpcy5yZWZyZXNoSWNvbnx8dGhpcy4kcS5pY29uLnB1bGxUb1JlZnJlc2gucmVmcmVzaH0sZGlyZWN0aXZlczpbe25hbWU6XCJzaG93XCIsdmFsdWU6XCJyZWZyZXNoaW5nXCI9PT10aGlzLnN0YXRlfV19KSxcIiBcIit0aGlzLm1lc3NhZ2VdKSx0aGlzLiRzbG90cy5kZWZhdWx0XSldKX19LGRyYWdUeXBlPXtNSU46MCxSQU5HRToxLE1BWDoyfSxRUmFuZ2U9e25hbWU6XCJRUmFuZ2VcIixtaXhpbnM6W1NsaWRlck1peGluXSxwcm9wczp7dmFsdWU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57bWluOjAsbWF4OjB9fSx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuaGFzT3duUHJvcGVydHkoXCJtaW5cIikmJnQuaGFzT3duUHJvcGVydHkoXCJtYXhcIil9fSxkcmFnUmFuZ2U6Qm9vbGVhbixkcmFnT25seVJhbmdlOkJvb2xlYW4sbGVmdExhYmVsQ29sb3I6U3RyaW5nLGxlZnRMYWJlbFZhbHVlOlN0cmluZyxyaWdodExhYmVsQ29sb3I6U3RyaW5nLHJpZ2h0TGFiZWxWYWx1ZTpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZhbHVlKSxkcmFnZ2luZzohMSxjdXJyZW50TWluUGVyY2VudGFnZToodGhpcy52YWx1ZS5taW4tdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbiksY3VycmVudE1heFBlcmNlbnRhZ2U6KHRoaXMudmFsdWUubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pfX0sY29tcHV0ZWQ6e3BlcmNlbnRhZ2VNaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zbmFwPyh0aGlzLm1vZGVsLm1pbi10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKTp0aGlzLmN1cnJlbnRNaW5QZXJjZW50YWdlfSxwZXJjZW50YWdlTWF4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc25hcD8odGhpcy5tb2RlbC5tYXgtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbik6dGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZX0sYWN0aXZlVHJhY2tXaWR0aDpmdW5jdGlvbigpe3JldHVybiAxMDAqKHRoaXMucGVyY2VudGFnZU1heC10aGlzLnBlcmNlbnRhZ2VNaW4pK1wiJVwifSxsZWZ0RGlzcGxheVZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubGVmdExhYmVsVmFsdWU/dGhpcy5sZWZ0TGFiZWxWYWx1ZTp0aGlzLm1vZGVsLm1pbn0scmlnaHREaXNwbGF5VmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5yaWdodExhYmVsVmFsdWU/dGhpcy5yaWdodExhYmVsVmFsdWU6dGhpcy5tb2RlbC5tYXh9LGxlZnRUb29sdGlwQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWZ0TGFiZWxDb2xvcnx8dGhpcy5sYWJlbENvbG9yfSxyaWdodFRvb2x0aXBDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJpZ2h0TGFiZWxDb2xvcnx8dGhpcy5sYWJlbENvbG9yfX0sd2F0Y2g6e1widmFsdWUubWluXCI6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbC5taW49dH0sXCJ2YWx1ZS5tYXhcIjpmdW5jdGlvbih0KXt0aGlzLm1vZGVsLm1heD10fSxcIm1vZGVsLm1pblwiOmZ1bmN0aW9uKHQpe3RoaXMuZHJhZ2dpbmd8fCh0PnRoaXMubW9kZWwubWF4JiYodD10aGlzLm1vZGVsLm1heCksdGhpcy5jdXJyZW50TWluUGVyY2VudGFnZT0odC10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKSl9LFwibW9kZWwubWF4XCI6ZnVuY3Rpb24odCl7dGhpcy5kcmFnZ2luZ3x8KHQ8dGhpcy5tb2RlbC5taW4mJih0PXRoaXMubW9kZWwubWluKSx0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlPSh0LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pKX0sbWluOmZ1bmN0aW9uKHQpe3RoaXMubW9kZWwubWluPHQmJnRoaXMuX191cGRhdGUoe21pbjp0fSksdGhpcy5tb2RlbC5tYXg8dCYmdGhpcy5fX3VwZGF0ZSh7bWF4OnR9KSx0aGlzLiRuZXh0VGljayh0aGlzLl9fdmFsaWRhdGVQcm9wcyl9LG1heDpmdW5jdGlvbih0KXt0aGlzLm1vZGVsLm1pbj50JiZ0aGlzLl9fdXBkYXRlKHttaW46dH0pLHRoaXMubW9kZWwubWF4PnQmJnRoaXMuX191cGRhdGUoe21heDp0fSksdGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfSxzdGVwOmZ1bmN0aW9uKCl7dGhpcy4kbmV4dFRpY2sodGhpcy5fX3ZhbGlkYXRlUHJvcHMpfX0sbWV0aG9kczp7X19nZXREcmFnZ2luZzpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMuJHJlZnMuaGFuZGxlLHM9aS5vZmZzZXRXaWR0aCxuPSh0aGlzLmRyYWdPbmx5UmFuZ2U/LTE6MSkqdGhpcy4kcmVmcy5oYW5kbGVNaW4ub2Zmc2V0V2lkdGgvKDIqcyksbz17bGVmdDppLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQsd2lkdGg6cyx2YWx1ZU1pbjp0aGlzLm1vZGVsLm1pbix2YWx1ZU1heDp0aGlzLm1vZGVsLm1heCxwZXJjZW50YWdlTWluOnRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2UscGVyY2VudGFnZU1heDp0aGlzLmN1cnJlbnRNYXhQZXJjZW50YWdlfSxyPWdldFBlcmNlbnRhZ2UodCxvLHRoaXMuJHEuaTE4bi5ydGwpO3JldHVybiByPHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2Urbj9lPWRyYWdUeXBlLk1JTjpyPHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2Utbj90aGlzLmRyYWdSYW5nZXx8dGhpcy5kcmFnT25seVJhbmdlPyhlPWRyYWdUeXBlLlJBTkdFLE9iamVjdC5hc3NpZ24obyx7b2Zmc2V0UGVyY2VudGFnZTpyLG9mZnNldE1vZGVsOmdldE1vZGVsKHIsdGhpcy5taW4sdGhpcy5tYXgsdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscykscmFuZ2VWYWx1ZTpvLnZhbHVlTWF4LW8udmFsdWVNaW4scmFuZ2VQZXJjZW50YWdlOnRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2UtdGhpcy5jdXJyZW50TWluUGVyY2VudGFnZX0pKTplPXRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2UtcjxyLXRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U/ZHJhZ1R5cGUuTUFYOmRyYWdUeXBlLk1JTjplPWRyYWdUeXBlLk1BWCwoIXRoaXMuZHJhZ09ubHlSYW5nZXx8ZT09PWRyYWdUeXBlLlJBTkdFKSYmKG8udHlwZT1lLG8pfSxfX21vdmU6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT10aGlzLmRyYWdnaW5nKTt2YXIgaSxzPWdldFBlcmNlbnRhZ2UodCxlLHRoaXMuJHEuaTE4bi5ydGwpLG49Z2V0TW9kZWwocyx0aGlzLm1pbix0aGlzLm1heCx0aGlzLnN0ZXAsdGhpcy5jb21wdXRlZERlY2ltYWxzKTtzd2l0Y2goZS50eXBlKXtjYXNlIGRyYWdUeXBlLk1JTjppPXM8PWUucGVyY2VudGFnZU1heD97bWluUDpzLG1heFA6ZS5wZXJjZW50YWdlTWF4LG1pbjpuLG1heDplLnZhbHVlTWF4fTp7bWluUDplLnBlcmNlbnRhZ2VNYXgsbWF4UDpzLG1pbjplLnZhbHVlTWF4LG1heDpufTticmVhaztjYXNlIGRyYWdUeXBlLk1BWDppPXM+PWUucGVyY2VudGFnZU1pbj97bWluUDplLnBlcmNlbnRhZ2VNaW4sbWF4UDpzLG1pbjplLnZhbHVlTWluLG1heDpufTp7bWluUDpzLG1heFA6ZS5wZXJjZW50YWdlTWluLG1pbjpuLG1heDplLnZhbHVlTWlufTticmVhaztjYXNlIGRyYWdUeXBlLlJBTkdFOnZhciBvPXMtZS5vZmZzZXRQZXJjZW50YWdlLHI9YmV0d2VlbihlLnBlcmNlbnRhZ2VNaW4rbywwLDEtZS5yYW5nZVBlcmNlbnRhZ2UpLGE9bi1lLm9mZnNldE1vZGVsLGw9YmV0d2VlbihlLnZhbHVlTWluK2EsdGhpcy5taW4sdGhpcy5tYXgtZS5yYW5nZVZhbHVlKTtpPXttaW5QOnIsbWF4UDpyK2UucmFuZ2VQZXJjZW50YWdlLG1pbjpwYXJzZUZsb2F0KGwudG9GaXhlZCh0aGlzLmNvbXB1dGVkRGVjaW1hbHMpKSxtYXg6cGFyc2VGbG9hdCgobCtlLnJhbmdlVmFsdWUpLnRvRml4ZWQodGhpcy5jb21wdXRlZERlY2ltYWxzKSl9fXRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9aS5taW5QLHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2U9aS5tYXhQLHRoaXMubW9kZWw9e21pbjppLm1pbixtYXg6aS5tYXh9fSxfX2VuZDpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXRoaXMuZHJhZ2dpbmcpLHRoaXMuX19tb3ZlKHQsZSksdGhpcy5jdXJyZW50TWluUGVyY2VudGFnZT0odGhpcy5tb2RlbC5taW4tdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbiksdGhpcy5jdXJyZW50TWF4UGVyY2VudGFnZT0odGhpcy5tb2RlbC5tYXgtdGhpcy5taW4pLyh0aGlzLm1heC10aGlzLm1pbil9LF9fb25LZXlEb3duOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5rZXlDb2RlO2lmKHRoaXMuZWRpdGFibGUmJlszNyw0MCwzOSwzOF0uaW5jbHVkZXMoaSkpe3N0b3BBbmRQcmV2ZW50KHQpO3ZhciBzPXRoaXMuY29tcHV0ZWREZWNpbWFscyxuPXQuY3RybEtleT8xMCp0aGlzLmNvbXB1dGVkU3RlcDp0aGlzLmNvbXB1dGVkU3RlcCxvPVszNyw0MF0uaW5jbHVkZXMoaSk/LW46bixyPXM/cGFyc2VGbG9hdCgodGhpcy5tb2RlbFtlXStvKS50b0ZpeGVkKHMpKTp0aGlzLm1vZGVsW2VdK287dGhpcy5tb2RlbFtlXT1iZXR3ZWVuKHIsXCJtaW5cIj09PWU/dGhpcy5taW46dGhpcy5tb2RlbC5taW4sXCJtYXhcIj09PWU/dGhpcy5tYXg6dGhpcy5tb2RlbC5tYXgpLHRoaXMuY3VycmVudE1pblBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWluLXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLHRoaXMuY3VycmVudE1heFBlcmNlbnRhZ2U9KHRoaXMubW9kZWwubWF4LXRoaXMubWluKS8odGhpcy5tYXgtdGhpcy5taW4pLHRoaXMuX191cGRhdGUoKX19LF9fb25LZXlVcDpmdW5jdGlvbih0LGUpe3ZhciBpPXQua2V5Q29kZTt0aGlzLmVkaXRhYmxlJiZbMzcsNDAsMzksMzhdLmluY2x1ZGVzKGkpJiZ0aGlzLl9fdXBkYXRlKCEwKX0sX192YWxpZGF0ZVByb3BzOmZ1bmN0aW9uKCl7dGhpcy5taW4+PXRoaXMubWF4P2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogbWluID49IG1heFwiLHRoaXMuJGVsLHRoaXMubWluLHRoaXMubWF4KTpub3REaXZpZGVzKCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy5zdGVwLHRoaXMuY29tcHV0ZWREZWNpbWFscyk/Y29uc29sZS5lcnJvcihcIlJhbmdlIGVycm9yOiBzdGVwIG11c3QgYmUgYSBkaXZpc29yIG9mIG1heCAtIG1pblwiLHRoaXMubWluLHRoaXMubWF4LHRoaXMuc3RlcCk6bm90RGl2aWRlcygodGhpcy5tb2RlbC5taW4tdGhpcy5taW4pL3RoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpP2NvbnNvbGUuZXJyb3IoXCJSYW5nZSBlcnJvcjogc3RlcCBtdXN0IGJlIGEgZGl2aXNvciBvZiBpbml0aWFsIHZhbHVlLm1pbiAtIG1pblwiLHRoaXMubW9kZWwubWluLHRoaXMubWluLHRoaXMuc3RlcCk6bm90RGl2aWRlcygodGhpcy5tb2RlbC5tYXgtdGhpcy5taW4pL3RoaXMuc3RlcCx0aGlzLmNvbXB1dGVkRGVjaW1hbHMpJiZjb25zb2xlLmVycm9yKFwiUmFuZ2UgZXJyb3I6IHN0ZXAgbXVzdCBiZSBhIGRpdmlzb3Igb2YgaW5pdGlhbCB2YWx1ZS5tYXggLSBtaW5cIix0aGlzLm1vZGVsLm1heCx0aGlzLm1heCx0aGlzLnN0ZXApfSxfX2dldEhhbmRsZTpmdW5jdGlvbih0LGUsaSxzLG4sbyxyKXt2YXIgYSxsPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7cmVmOlwiaGFuZGxlXCIraSxzdGF0aWNDbGFzczpcInEtc2xpZGVyLWhhbmRsZSBxLXNsaWRlci1oYW5kbGUtXCIrZSxzdHlsZTooYT17fSxhW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT0xMDAqbitcIiVcIixhLmJvcmRlclJhZGl1cz10aGlzLnNxdWFyZT9cIjBcIjpcIjUwJVwiLGEpLGNsYXNzOltzP1wiaGFuZGxlLWF0LW1pbmltdW1cIjpudWxsLHtkcmFnZ2luZzp0aGlzLmRyYWdnaW5nfV0sYXR0cnM6e3RhYmluZGV4OnRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcD90aGlzLmVkaXRhYmxlPzA6LTE6dm9pZCAwfSxvbjp7a2V5ZG93bjpmdW5jdGlvbih0KXtyZXR1cm4gbC5fX29uS2V5RG93bih0LGUpfSxrZXl1cDpmdW5jdGlvbih0KXtyZXR1cm4gbC5fX29uS2V5VXAodCxlKX19fSxbdGhpcy5sYWJlbHx8dGhpcy5sYWJlbEFsd2F5cz90KFFDaGlwLHtwcm9wczp7cG9pbnRpbmc6XCJkb3duXCIsc3F1YXJlOiEwLGRlbnNlOiEwLGNvbG9yOm99LHN0YXRpY0NsYXNzOlwicS1zbGlkZXItbGFiZWwgbm8tcG9pbnRlci1ldmVudHNcIixjbGFzczp7XCJsYWJlbC1hbHdheXNcIjp0aGlzLmxhYmVsQWx3YXlzfX0sW3JdKTpudWxsLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci1yaW5nXCJ9KV0pfSxfX2dldENvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNsaWRlci10cmFjayBhY3RpdmUtdHJhY2tcIixzdHlsZTooZT17fSxlW3RoaXMuJHEuaTE4bi5ydGw/XCJyaWdodFwiOlwibGVmdFwiXT0xMDAqdGhpcy5wZXJjZW50YWdlTWluK1wiJVwiLGUud2lkdGg9dGhpcy5hY3RpdmVUcmFja1dpZHRoLGUpLGNsYXNzOntkcmFnZ2luZzp0aGlzLmRyYWdnaW5nLFwidHJhY2stZHJhZ2dhYmxlXCI6dGhpcy5kcmFnUmFuZ2V8fHRoaXMuZHJhZ09ubHlSYW5nZX19KSx0aGlzLl9fZ2V0SGFuZGxlKHQsXCJtaW5cIixcIk1pblwiLCF0aGlzLmZpbGxIYW5kbGVBbHdheXMmJnRoaXMubW9kZWwubWluPT09dGhpcy5taW4sdGhpcy5wZXJjZW50YWdlTWluLHRoaXMubGVmdFRvb2x0aXBDb2xvcix0aGlzLmxlZnREaXNwbGF5VmFsdWUpLHRoaXMuX19nZXRIYW5kbGUodCxcIm1heFwiLFwiTWF4XCIsITEsdGhpcy5wZXJjZW50YWdlTWF4LHRoaXMucmlnaHRUb29sdGlwQ29sb3IsdGhpcy5yaWdodERpc3BsYXlWYWx1ZSldfX19LFFSYXRpbmc9e25hbWU6XCJRUmF0aW5nXCIscHJvcHM6e3ZhbHVlOk51bWJlcixtYXg6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6NX0saWNvbjpTdHJpbmcsY29sb3I6U3RyaW5nLHNpemU6U3RyaW5nLHJlYWRvbmx5OkJvb2xlYW4sZGlzYWJsZTpCb29sZWFufSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue21vdXNlTW9kZWw6MH19LGNvbXB1dGVkOnttb2RlbDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWV9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJGVtaXQoXCJpbnB1dFwiLHQpLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkodCkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLHQpfSl9fSxlZGl0YWJsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLnJlYWRvbmx5JiYhdGhpcy5kaXNhYmxlfSxjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZGlzYWJsZSYmdC5wdXNoKFwiZGlzYWJsZWRcIiksdGhpcy5lZGl0YWJsZSYmdC5wdXNoKFwiZWRpdGFibGVcIiksdGhpcy5jb2xvciYmdC5wdXNoKFwidGV4dC1cIit0aGlzLmNvbG9yKSx0fX0sbWV0aG9kczp7c2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZWRpdGFibGUpe3ZhciBlPWJldHdlZW4ocGFyc2VJbnQodCwxMCksMSx0aGlzLm1heCk7dGhpcy5tb2RlbD10aGlzLm1vZGVsPT09ZT8wOmUsdGhpcy5tb3VzZU1vZGVsPTB9fSxfX3NldEhvdmVyVmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5lZGl0YWJsZSYmKHRoaXMubW91c2VNb2RlbD10KX19LHJlbmRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxpPVtdLHM9dGhpcy5lZGl0YWJsZT8wOi0xLG49ZnVuY3Rpb24obil7aS5wdXNoKHQoXCJzcGFuXCIse2tleTpuLHJlZjpcInJ0XCIrbixhdHRyczp7dGFiaW5kZXg6c30sb246e2tleWRvd246ZnVuY3Rpb24odCl7c3dpdGNoKGdldEV2ZW50S2V5KHQpKXtjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGUuc2V0KG4pLHN0b3BBbmRQcmV2ZW50KHQpO2Nhc2UgMzc6Y2FzZSA0MDpyZXR1cm4gZS4kcmVmc1tcInJ0XCIrKG4tMSldJiZlLiRyZWZzW1wicnRcIisobi0xKV0uZm9jdXMoKSxzdG9wQW5kUHJldmVudCh0KTtjYXNlIDM5OmNhc2UgMzg6cmV0dXJuIGUuJHJlZnNbXCJydFwiKyhuKzEpXSYmZS4kcmVmc1tcInJ0XCIrKG4rMSldLmZvY3VzKCksc3RvcEFuZFByZXZlbnQodCl9fX19LFt0KFFJY29uLHtwcm9wczp7bmFtZTplLmljb258fGUuJHEuaWNvbi5yYXRpbmcuaWNvbn0sY2xhc3M6e2FjdGl2ZTohZS5tb3VzZU1vZGVsJiZlLm1vZGVsPj1ufHxlLm1vdXNlTW9kZWwmJmUubW91c2VNb2RlbD49bixleHNlbGVjdGVkOmUubW91c2VNb2RlbCYmZS5tb2RlbD49biYmZS5tb3VzZU1vZGVsPG4saG92ZXJlZDplLm1vdXNlTW9kZWw9PT1ufSxhdHRyczp7dGFiaW5kZXg6LTF9LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbigpe3JldHVybiBlLnNldChuKX0sbW91c2VvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGUuX19zZXRIb3ZlclZhbHVlKG4pfSxtb3VzZW91dDpmdW5jdGlvbigpe2UubW91c2VNb2RlbD0wfSxmb2N1czpmdW5jdGlvbigpe3JldHVybiBlLl9fc2V0SG92ZXJWYWx1ZShuKX0sYmx1cjpmdW5jdGlvbigpe2UubW91c2VNb2RlbD0wfX19KV0pKX0sbz0xO288PXRoaXMubWF4O28rKyluKG8pO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1yYXRpbmcgcm93IGlubGluZSBpdGVtcy1jZW50ZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsc3R5bGU6dGhpcy5zaXplP1wiZm9udC1zaXplOiBcIit0aGlzLnNpemU6XCJcIn0saSl9fSxRU2Nyb2xsQXJlYT17bmFtZTpcIlFTY3JvbGxBcmVhXCIsZGlyZWN0aXZlczp7VG91Y2hQYW46VG91Y2hQYW59LHByb3BzOnt0aHVtYlN0eWxlOnt0eXBlOk9iamVjdCxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJue319fSxjb250ZW50U3R5bGU6e3R5cGU6T2JqZWN0LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19LGNvbnRlbnRBY3RpdmVTdHlsZTp7dHlwZTpPYmplY3QsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybnt9fX0sZGVsYXk6e3R5cGU6TnVtYmVyLGRlZmF1bHQ6MWUzfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybnthY3RpdmU6ITEsaG92ZXI6ITEsY29udGFpbmVySGVpZ2h0OjAsc2Nyb2xsUG9zaXRpb246MCxzY3JvbGxIZWlnaHQ6MH19LGNvbXB1dGVkOnt0aHVtYkhpZGRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbEhlaWdodDw9dGhpcy5jb250YWluZXJIZWlnaHR8fCF0aGlzLmFjdGl2ZSYmIXRoaXMuaG92ZXJ9LHRodW1iSGVpZ2h0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoYmV0d2Vlbih0aGlzLmNvbnRhaW5lckhlaWdodCp0aGlzLmNvbnRhaW5lckhlaWdodC90aGlzLnNjcm9sbEhlaWdodCw1MCx0aGlzLmNvbnRhaW5lckhlaWdodCkpfSxzdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc2Nyb2xsUGVyY2VudGFnZSoodGhpcy5jb250YWluZXJIZWlnaHQtdGhpcy50aHVtYkhlaWdodCk7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy50aHVtYlN0eWxlLHt0b3A6dCtcInB4XCIsaGVpZ2h0OnRoaXMudGh1bWJIZWlnaHQrXCJweFwifSl9LG1haW5TdHlsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRodW1iSGlkZGVuP3RoaXMuY29udGVudFN0eWxlOnRoaXMuY29udGVudEFjdGl2ZVN0eWxlfSxzY3JvbGxQZXJjZW50YWdlOmZ1bmN0aW9uKCl7dmFyIHQ9YmV0d2Vlbih0aGlzLnNjcm9sbFBvc2l0aW9uLyh0aGlzLnNjcm9sbEhlaWdodC10aGlzLmNvbnRhaW5lckhlaWdodCksMCwxKTtyZXR1cm4gTWF0aC5yb3VuZCgxZTQqdCkvMWU0fX0sbWV0aG9kczp7c2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24odCxlKXtzZXRTY3JvbGxQb3NpdGlvbih0aGlzLiRyZWZzLnRhcmdldCx0LGUpfSxfX3VwZGF0ZUNvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgZT10LmhlaWdodDt0aGlzLmNvbnRhaW5lckhlaWdodCE9PWUmJih0aGlzLmNvbnRhaW5lckhlaWdodD1lLHRoaXMuX19zZXRBY3RpdmUoITAsITApKX0sX191cGRhdGVTY3JvbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC5wb3NpdGlvbjt0aGlzLnNjcm9sbFBvc2l0aW9uIT09ZSYmKHRoaXMuc2Nyb2xsUG9zaXRpb249ZSx0aGlzLl9fc2V0QWN0aXZlKCEwLCEwKSl9LF9fdXBkYXRlU2Nyb2xsSGVpZ2h0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaGVpZ2h0O3RoaXMuc2Nyb2xsSGVpZ2h0IT09ZSYmKHRoaXMuc2Nyb2xsSGVpZ2h0PWUsdGhpcy5fX3NldEFjdGl2ZSghMCwhMCkpfSxfX3BhblRodW1iOmZ1bmN0aW9uKHQpe3QuaXNGaXJzdCYmKHRoaXMucmVmUG9zPXRoaXMuc2Nyb2xsUG9zaXRpb24sdGhpcy5fX3NldEFjdGl2ZSghMCwhMCksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwibm9uLXNlbGVjdGFibGVcIiksZG9jdW1lbnQuc2VsZWN0aW9uP2RvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOndpbmRvdy5nZXRTZWxlY3Rpb24mJndpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSksdC5pc0ZpbmFsJiYodGhpcy5fX3NldEFjdGl2ZSghMSksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwibm9uLXNlbGVjdGFibGVcIikpO3ZhciBlPSh0aGlzLnNjcm9sbEhlaWdodC10aGlzLmNvbnRhaW5lckhlaWdodCkvKHRoaXMuY29udGFpbmVySGVpZ2h0LXRoaXMudGh1bWJIZWlnaHQpO3RoaXMuJHJlZnMudGFyZ2V0LnNjcm9sbFRvcD10aGlzLnJlZlBvcysoXCJkb3duXCI9PT10LmRpcmVjdGlvbj8xOi0xKSp0LmRpc3RhbmNlLnkqZX0sX19wYW5Db250YWluZXI6ZnVuY3Rpb24odCl7dC5pc0ZpcnN0JiYodGhpcy5yZWZQb3M9dGhpcy5zY3JvbGxQb3NpdGlvbix0aGlzLl9fc2V0QWN0aXZlKCEwLCEwKSksdC5pc0ZpbmFsJiZ0aGlzLl9fc2V0QWN0aXZlKCExKTt2YXIgZT10aGlzLnJlZlBvcysoXCJkb3duXCI9PT10LmRpcmVjdGlvbj8tMToxKSp0LmRpc3RhbmNlLnk7dGhpcy4kcmVmcy50YXJnZXQuc2Nyb2xsVG9wPWUsZT4wJiZlK3RoaXMuY29udGFpbmVySGVpZ2h0PHRoaXMuc2Nyb2xsSGVpZ2h0JiZ0LmV2dC5wcmV2ZW50RGVmYXVsdCgpfSxfX21vdXNlV2hlZWw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy4kcmVmcy50YXJnZXQ7ZS5zY3JvbGxUb3ArPWdldE1vdXNlV2hlZWxEaXN0YW5jZSh0KS55LGUuc2Nyb2xsVG9wPjAmJmUuc2Nyb2xsVG9wK3RoaXMuY29udGFpbmVySGVpZ2h0PHRoaXMuc2Nyb2xsSGVpZ2h0JiZ0LnByZXZlbnREZWZhdWx0KCl9LF9fc2V0QWN0aXZlOmZ1bmN0aW9uKHQsZSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHQhPT10aGlzLmFjdGl2ZT90Pyh0aGlzLmFjdGl2ZT0hMCxlJiZ0aGlzLl9fc3RhcnRUaW1lcigpKTp0aGlzLmFjdGl2ZT0hMTp0JiZ0aGlzLnRpbWVyJiZ0aGlzLl9fc3RhcnRUaW1lcigpfSxfX3N0YXJ0VGltZXI6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe3QuYWN0aXZlPSExLHQudGltZXI9bnVsbH0sdGhpcy5kZWxheSl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNjcm9sbGFyZWEgcmVsYXRpdmUtcG9zaXRpb25cIixvbjp7bW91c2VlbnRlcjpmdW5jdGlvbigpe2UuaG92ZXI9ITB9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oKXtlLmhvdmVyPSExfX19LFt0KFwiZGl2XCIse3JlZjpcInRhcmdldFwiLHN0YXRpY0NsYXNzOlwic2Nyb2xsIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlbiBmaXRcIixvbjp7d2hlZWw6dGhpcy5fX21vdXNlV2hlZWx9LGRpcmVjdGl2ZXM6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnt2ZXJ0aWNhbDohMCxub01vdXNlOiEwLG1pZ2h0UHJldmVudDohMH0sdmFsdWU6dGhpcy5fX3BhbkNvbnRhaW5lcn1dfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImFic29sdXRlIGZ1bGwtd2lkdGhcIixzdHlsZTp0aGlzLm1haW5TdHlsZX0sW3QoUVJlc2l6ZU9ic2VydmFibGUse29uOntyZXNpemU6dGhpcy5fX3VwZGF0ZVNjcm9sbEhlaWdodH19KSx0aGlzLiRzbG90cy5kZWZhdWx0XSksdChRU2Nyb2xsT2JzZXJ2YWJsZSx7b246e3Njcm9sbDp0aGlzLl9fdXBkYXRlU2Nyb2xsfX0pXSksdChRUmVzaXplT2JzZXJ2YWJsZSx7b246e3Jlc2l6ZTp0aGlzLl9fdXBkYXRlQ29udGFpbmVyfX0pLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXNjcm9sbGFyZWEtdGh1bWIgYWJzb2x1dGUtcmlnaHRcIixzdHlsZTp0aGlzLnN0eWxlLGNsYXNzOntcImludmlzaWJsZS10aHVtYlwiOnRoaXMudGh1bWJIaWRkZW59LGRpcmVjdGl2ZXM6W3tuYW1lOlwidG91Y2gtcGFuXCIsbW9kaWZpZXJzOnt2ZXJ0aWNhbDohMCxwcmV2ZW50OiEwfSx2YWx1ZTp0aGlzLl9fcGFuVGh1bWJ9XX0pXSk6dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc2Nyb2xsLWFyZWEgcmVsYXRpdmUtcG9zaXRpb25cIixzdHlsZTp0aGlzLmNvbnRlbnRTdHlsZX0sW3QoXCJkaXZcIix7cmVmOlwidGFyZ2V0XCIsc3RhdGljQ2xhc3M6XCJzY3JvbGwgcmVsYXRpdmUtcG9zaXRpb24gZml0XCJ9LHRoaXMuJHNsb3RzLmRlZmF1bHQpXSl9fSxRU2VhcmNoPXtuYW1lOlwiUVNlYXJjaFwiLG1peGluczpbRnJhbWVNaXhpbixJbnB1dE1peGluXSxwcm9wczp7dmFsdWU6e3JlcXVpcmVkOiEwfSx0eXBlOnt0eXBlOlN0cmluZyxkZWZhdWx0Olwic2VhcmNoXCJ9LGRlYm91bmNlOnt0eXBlOk51bWJlcixkZWZhdWx0OjMwMH0saWNvbjpTdHJpbmcsbm9JY29uOkJvb2xlYW4sdXBwZXJDYXNlOkJvb2xlYW4sbG93ZXJDYXNlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy52YWx1ZSxjaGlsZERlYm91bmNlOiExfX0scHJvdmlkZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbihlKXt0Lm1vZGVsIT09ZSYmKHQubW9kZWw9ZSl9O3JldHVybntfX2lucHV0RGVib3VuY2U6e3NldDplLHNldE5hdjplLHNldENoaWxkRGVib3VuY2U6ZnVuY3Rpb24oZSl7dC5jaGlsZERlYm91bmNlPWV9fX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLm1vZGVsPXR9LG1vZGVsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudmFsdWUhPT10JiYodHx8MD09PXR8fCh0aGlzLm1vZGVsPVwibnVtYmVyXCI9PT10aGlzLnR5cGU/bnVsbDpcIlwiKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLiRlbWl0KFwiaW5wdXRcIixlLm1vZGVsKX0sdGhpcy5kZWJvdW5jZVZhbHVlKSl9fSxjb21wdXRlZDp7ZGVib3VuY2VWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkRGVib3VuY2U/MDp0aGlzLmRlYm91bmNlfSxjb21wdXRlZENsZWFyVmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc051bWJlciYmMD09PXRoaXMuY2xlYXJWYWx1ZT90aGlzLmNsZWFyVmFsdWU6dGhpcy5jbGVhclZhbHVlfHwoXCJudW1iZXJcIj09PXRoaXMudHlwZT9udWxsOlwiXCIpfSxjb250cm9sQmVmb3JlOmZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuYmVmb3JlfHxbXSkuc2xpY2UoKTtyZXR1cm4gdGhpcy5ub0ljb258fHQudW5zaGlmdCh7aWNvbjp0aGlzLmljb258fHRoaXMuJHEuaWNvbi5zZWFyY2guaWNvbixoYW5kbGVyOnRoaXMuZm9jdXN9KSx0fSxjb250cm9sQWZ0ZXI6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5hZnRlcnx8W10pLnNsaWNlKCk7cmV0dXJuIHRoaXMuaXNDbGVhcmFibGUmJnQucHVzaCh7aWNvbjp0aGlzLiRxLmljb24uc2VhcmNoW1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV0saGFuZGxlcjp0aGlzLmNsZWFyfSksdH19LG1ldGhvZHM6e2NsZWFyOmZ1bmN0aW9uKHQpe3RoaXMuJHJlZnMuaW5wdXQuY2xlYXIodCl9fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdChRSW5wdXQse3JlZjpcImlucHV0XCIsc3RhdGljQ2xhc3M6XCJxLXNlYXJjaFwiLHByb3BzOnt2YWx1ZTp0aGlzLm1vZGVsLHR5cGU6dGhpcy50eXBlLGF1dG9mb2N1czp0aGlzLmF1dG9mb2N1cyxwbGFjZWhvbGRlcjp0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLiRxLmkxOG4ubGFiZWwuc2VhcmNoLGRpc2FibGU6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxhbGlnbjp0aGlzLmFsaWduLG5vUGFyZW50RmllbGQ6dGhpcy5ub1BhcmVudEZpZWxkLGZsb2F0TGFiZWw6dGhpcy5mbG9hdExhYmVsLHN0YWNrTGFiZWw6dGhpcy5zdGFja0xhYmVsLHByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsaW52ZXJ0ZWQ6dGhpcy5pbnZlcnRlZCxpbnZlcnRlZExpZ2h0OnRoaXMuaW52ZXJ0ZWRMaWdodCxkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOnRoaXMuaGlkZVVuZGVybGluZSxjb2xvcjp0aGlzLmNvbG9yLHJvd3M6dGhpcy5yb3dzLGJlZm9yZTp0aGlzLmNvbnRyb2xCZWZvcmUsYWZ0ZXI6dGhpcy5jb250cm9sQWZ0ZXIsY2xlYXJWYWx1ZTp0aGlzLmNsZWFyVmFsdWUsdXBwZXJDYXNlOnRoaXMudXBwZXJDYXNlLGxvd2VyQ2FzZTp0aGlzLmxvd2VyQ2FzZX0sYXR0cnM6dGhpcy4kYXR0cnMsb246e2lucHV0OmZ1bmN0aW9uKHQpe2UubW9kZWw9dH0sZm9jdXM6dGhpcy5fX29uRm9jdXMsYmx1cjp0aGlzLl9fb25CbHVyLGtleXVwOnRoaXMuX19vbktleXVwLGtleWRvd246dGhpcy5fX29uS2V5ZG93bixjbGljazp0aGlzLl9fb25DbGljayxwYXN0ZTp0aGlzLl9fb25QYXN0ZSxjbGVhcjpmdW5jdGlvbih0KXtlLiRlbWl0KFwiY2xlYXJcIix0KSxlLl9fZW1pdCgpfX19LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX07ZnVuY3Rpb24gZGVmYXVsdEZpbHRlckZuKHQsZSl7cmV0dXJuIGUubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKHQpPi0xfXZhciBRU2VsZWN0PXtuYW1lOlwiUVNlbGVjdFwiLG1peGluczpbRnJhbWVNaXhpbixLZXlib2FyZFNlbGVjdGlvbk1peGluXSxwcm9wczp7ZmlsdGVyOltGdW5jdGlvbixCb29sZWFuXSxmaWx0ZXJQbGFjZWhvbGRlcjpTdHJpbmcscmFkaW86Qm9vbGVhbixwbGFjZWhvbGRlcjpTdHJpbmcsc2VwYXJhdG9yOkJvb2xlYW4sdmFsdWU6e3JlcXVpcmVkOiEwfSxtdWx0aXBsZTpCb29sZWFuLHRvZ2dsZTpCb29sZWFuLGNoaXBzOkJvb2xlYW4sb3B0aW9uczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMCx2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuXCJsYWJlbFwiaW4gdCYmXCJ2YWx1ZVwiaW4gdH0pfX0sY2hpcHNDb2xvcjpTdHJpbmcsY2hpcHNCZ0NvbG9yOlN0cmluZyxkaXNwbGF5VmFsdWU6U3RyaW5nLHBvcHVwTWF4SGVpZ2h0OlN0cmluZyxwb3B1cENvdmVyOnt0eXBlOkJvb2xlYW4sZGVmYXVsdDohMH19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bW9kZWw6dGhpcy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLnNsaWNlKCk6dGhpcy52YWx1ZSx0ZXJtczpcIlwiLGZvY3VzZWQ6ITF9fSx3YXRjaDp7dmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5tb2RlbD10aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHQpP3Quc2xpY2UoKTp0fSx2aXNpYmxlT3B0aW9uczpmdW5jdGlvbigpe3RoaXMuX19rZXlib2FyZENhbGNJbmRleCgpfX0sY29tcHV0ZWQ6e29wdE1vZGVsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZih0aGlzLm11bHRpcGxlKXJldHVybiB0aGlzLm1vZGVsLmxlbmd0aD4wP3RoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQubW9kZWwuaW5jbHVkZXMoZS52YWx1ZSl9KTp0aGlzLm9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiExfSl9LHZpc2libGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0LHtpbmRleDplfSl9KTtpZih0aGlzLmZpbHRlciYmdGhpcy50ZXJtcy5sZW5ndGgpe3ZhciBpPXRoaXMudGVybXMudG9Mb3dlckNhc2UoKTtlPWUuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiB0LmZpbHRlckZuKGksZSl9KX1yZXR1cm4gZX0sa2V5Ym9hcmRNYXhJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aC0xfSxmaWx0ZXJGbjpmdW5jdGlvbigpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy5maWx0ZXI/ZGVmYXVsdEZpbHRlckZuOnRoaXMuZmlsdGVyfSxhY3R1YWxWYWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5kaXNwbGF5VmFsdWUpcmV0dXJuIHRoaXMuZGlzcGxheVZhbHVlO2lmKCF0aGlzLm11bHRpcGxlKXt2YXIgZT10aGlzLm9wdGlvbnMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS52YWx1ZT09PXQubW9kZWx9KTtyZXR1cm4gZT9lLmxhYmVsOlwiXCJ9dmFyIGk9dGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxhYmVsfSk7cmV0dXJuIGkubGVuZ3RoP2kuam9pbihcIiwgXCIpOlwiXCJ9LGNvbXB1dGVkQ2xlYXJWYWx1ZTpmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLmNsZWFyVmFsdWU/dGhpcy5tdWx0aXBsZT9bXTpudWxsOnRoaXMuY2xlYXJWYWx1ZX0saXNDbGVhcmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGl0YWJsZSYmdGhpcy5jbGVhcmFibGUmJkpTT04uc3RyaW5naWZ5KHRoaXMuY29tcHV0ZWRDbGVhclZhbHVlKSE9PUpTT04uc3RyaW5naWZ5KHRoaXMubW9kZWwpfSxzZWxlY3RlZE9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMubXVsdGlwbGUpcmV0dXJuIHRoaXMubGVuZ3RoPjA/dGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gdC5tb2RlbC5pbmNsdWRlcyhlLnZhbHVlKX0pOltdfSxoYXNDaGlwczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm11bHRpcGxlJiZ0aGlzLmNoaXBzJiZ0aGlzLmxlbmd0aD4wfSxsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLm1vZGVsLmxlbmd0aDpbbnVsbCx2b2lkIDAsXCJcIl0uaW5jbHVkZXModGhpcy5tb2RlbCk/MDoxfSxhZGRpdGlvbmFsTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzcGxheVZhbHVlJiZ0aGlzLmRpc3BsYXlWYWx1ZS5sZW5ndGg+MH19LG1ldGhvZHM6e3RvZ2dsZVBvcHVwOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5wb3BvdmVyJiZ0aGlzW3RoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nP1wiaGlkZVwiOlwic2hvd1wiXSgpfSxzaG93OmZ1bmN0aW9uKCl7aWYodGhpcy5fX2tleWJvYXJkQ2FsY0luZGV4KCksdGhpcy4kcmVmcy5wb3BvdmVyKXJldHVybiB0aGlzLiRyZWZzLnBvcG92ZXIuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHJlZnMucG9wb3Zlcj90aGlzLiRyZWZzLnBvcG92ZXIuaGlkZSgpOlByb21pc2UucmVzb2x2ZSgpfSxyZXBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kcmVmcy5wb3BvdmVyO3QmJnQuc2hvd2luZyYmdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXtyZXR1cm4gdCYmdC5yZXBvc2l0aW9uKCl9KX0sX19rZXlib2FyZENhbGNJbmRleDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5rZXlib2FyZEluZGV4PS0xO3ZhciBlPXRoaXMubXVsdGlwbGU/dGhpcy5zZWxlY3RlZE9wdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSk6W3RoaXMubW9kZWxdO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dmFyIGk9dm9pZCAwPT09ZT8tMTpNYXRoLm1heCgtMSx0LnZpc2libGVPcHRpb25zLmZpbmRJbmRleChmdW5jdGlvbih0KXtyZXR1cm4gZS5pbmNsdWRlcyh0LnZhbHVlKX0pKTtpPi0xJiYodC5rZXlib2FyZE1vdmVEaXJlY3Rpb249ITAsc2V0VGltZW91dChmdW5jdGlvbigpe3Qua2V5Ym9hcmRNb3ZlRGlyZWN0aW9uPSExfSw1MDApLHQuX19rZXlib2FyZFNob3coaSkpfSl9LF9fa2V5Ym9hcmRDdXN0b21LZXlIYW5kbGU6ZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSAyNzp0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZyYmdGhpcy5oaWRlKCk7YnJlYWs7Y2FzZSAxMzpjYXNlIDMyOnRoaXMuJHJlZnMucG9wb3Zlci5zaG93aW5nfHx0aGlzLnNob3coKX19LF9fa2V5Ym9hcmRTaG93VHJpZ2dlcjpmdW5jdGlvbigpe3RoaXMuc2hvdygpfSxfX2tleWJvYXJkU2V0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudmlzaWJsZU9wdGlvbnNbdF07dGhpcy5tdWx0aXBsZT90aGlzLl9fdG9nZ2xlTXVsdGlwbGUoZS52YWx1ZSxlLmRpc2FibGUpOnRoaXMuX19zaW5nbGVTZWxlY3QoZS52YWx1ZSxlLmRpc2FibGUpfSxfX2tleWJvYXJkSXNTZWxlY3RhYmxlSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+LTEmJnQ8dGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgmJiF0aGlzLnZpc2libGVPcHRpb25zW3RdLmRpc2FibGV9LF9fbW91c2VFbnRlckhhbmRsZXI6ZnVuY3Rpb24odCxlKXt0aGlzLmtleWJvYXJkTW92ZURpcmVjdGlvbnx8KHRoaXMua2V5Ym9hcmRJbmRleD1lKX0sX19vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlfHx0aGlzLmZvY3VzZWR8fCh0aGlzLmZvY3VzZWQ9ITAsdGhpcy4kZW1pdChcImZvY3VzXCIpKX0sX19vblNob3c6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGV8fCh0aGlzLl9fb25Gb2N1cygpLHRoaXMuZmlsdGVyJiZ0aGlzLiRyZWZzLmZpbHRlciYmKHRoaXMuJHJlZnMuZmlsdGVyLmZvY3VzKCksdGhpcy5yZXBvc2l0aW9uKCkpKX0sX19vbkJsdXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLmZvY3VzZWQmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2UuJHJlZnMucG9wb3ZlciYmZS4kcmVmcy5wb3BvdmVyLnNob3dpbmcmJih0PT09ZG9jdW1lbnQuYm9keXx8ZS4kcmVmcy5wb3BvdmVyLiRlbC5jb250YWlucyh0KSl8fChlLl9fb25DbG9zZSgpLGUuaGlkZSgpKX0sMSl9LF9fb25DbG9zZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7SlNPTi5zdHJpbmdpZnkoZS5tb2RlbCkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKSYmZS4kZW1pdChcImNoYW5nZVwiLGUubW9kZWwpfSksdGhpcy50ZXJtcz1cIlwiLHRoaXMuZm9jdXNlZCYmKHQ/dGhpcy4kcmVmcy5pbnB1dCYmdGhpcy4kcmVmcy5pbnB1dC4kZWwmJnRoaXMuJHJlZnMuaW5wdXQuJGVsLmZvY3VzKCk6KHRoaXMuZm9jdXNlZD0hMSx0aGlzLiRlbWl0KFwiYmx1clwiKSkpfSxfX3NpbmdsZVNlbGVjdDpmdW5jdGlvbih0LGUpe2V8fCh0aGlzLl9fZW1pdCh0KSx0aGlzLmhpZGUoKSl9LF9fdG9nZ2xlTXVsdGlwbGU6ZnVuY3Rpb24odCxlKXtpZighZSl7dmFyIGk9dGhpcy5tb2RlbCxzPWkuaW5kZXhPZih0KTtzPi0xP3RoaXMuJGVtaXQoXCJyZW1vdmVcIix7aW5kZXg6cyx2YWx1ZTppLnNwbGljZShzLDEpfSk6KHRoaXMuJGVtaXQoXCJhZGRcIix7aW5kZXg6aS5sZW5ndGgsdmFsdWU6dH0pLGkucHVzaCh0KSksdGhpcy4kZW1pdChcImlucHV0XCIsaSl9fSxfX2VtaXQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRlbWl0KFwiaW5wdXRcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pfSxfX3NldE1vZGVsOmZ1bmN0aW9uKHQsZSl7dGhpcy5tb2RlbD10fHwodGhpcy5tdWx0aXBsZT9bXTpudWxsKSx0aGlzLiRlbWl0KFwiaW5wdXRcIix0aGlzLm1vZGVsKSwhZSYmdGhpcy4kcmVmcy5wb3BvdmVyJiZ0aGlzLiRyZWZzLnBvcG92ZXIuc2hvd2luZ3x8dGhpcy5fX29uQ2xvc2UoZSl9LF9fZ2V0Q2hpcFRleHRDb2xvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jaGlwc0NvbG9yP3RoaXMuY2hpcHNDb2xvcjp0aGlzLmlzSW52ZXJ0ZWRMaWdodD90aGlzLmludmVydGVkTGlnaHQ/dHx8dGhpcy5jb2xvcjpcIndoaXRlXCI6dGhpcy5pc0ludmVydGVkP3R8fCh0aGlzLmludmVydGVkTGlnaHQ/XCJncmV5LTEwXCI6dGhpcy5jb2xvcik6dGhpcy5kYXJrP3R8fHRoaXMuY29sb3I6XCJ3aGl0ZVwifSxfX2dldENoaXBCZ0NvbG9yOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNoaXBzQmdDb2xvcj90aGlzLmNoaXBzQmdDb2xvcjp0aGlzLmlzSW52ZXJ0ZWRMaWdodD90aGlzLmludmVydGVkTGlnaHQ/XCJncmV5LTEwXCI6dHx8dGhpcy5jb2xvcjp0aGlzLmlzSW52ZXJ0ZWQ/dGhpcy5pbnZlcnRlZExpZ2h0P3RoaXMuY29sb3I6XCJ3aGl0ZVwiOnRoaXMuZGFyaz9cIndoaXRlXCI6dHx8dGhpcy5jb2xvcn19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W107aWYodGhpcy5oYXNDaGlwcyl7dmFyIHM9dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCByb3cgaXRlbXMtY2VudGVyIHEtaW5wdXQtY2hpcHNcIixjbGFzczp0aGlzLmFsaWduQ2xhc3N9LHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChmdW5jdGlvbihpLHMpe3JldHVybiB0KFFDaGlwLHtrZXk6cyxwcm9wczp7c21hbGw6ITAsY2xvc2FibGU6ZS5lZGl0YWJsZSYmIWkuZGlzYWJsZSxjb2xvcjplLl9fZ2V0Q2hpcEJnQ29sb3IoaS5jb2xvciksdGV4dENvbG9yOmUuX19nZXRDaGlwVGV4dENvbG9yKGkuY29sb3IpLGljb246aS5pY29uLGljb25SaWdodDppLnJpZ2h0SWNvbixhdmF0YXI6aS5hdmF0YXJ9LG9uOntoaWRlOmZ1bmN0aW9uKCl7ZS5fX3RvZ2dsZU11bHRpcGxlKGkudmFsdWUsZS5kaXNhYmxlfHxpLmRpc2FibGUpfX0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9fX0sW3QoXCJkaXZcIix7ZG9tUHJvcHM6e2lubmVySFRNTDppLmxhYmVsfX0pXSl9KSk7aS5wdXNoKHMpfWVsc2V7dmFyIG49dChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbCBxLWlucHV0LXRhcmdldCBlbGxpcHNpc1wiLGNsYXNzOnRoaXMuZmFrZUlucHV0Q2xhc3Nlcyxkb21Qcm9wczp7aW5uZXJIVE1MOnRoaXMuZmFrZUlucHV0VmFsdWV9fSk7aS5wdXNoKG4pfXJldHVybiBpLnB1c2godChRUG9wb3Zlcix7cmVmOlwicG9wb3ZlclwiLHN0YXRpY0NsYXNzOlwiY29sdW1uIG5vLXdyYXBcIixjbGFzczp0aGlzLmRhcms/XCJiZy1kYXJrXCI6bnVsbCxwcm9wczp7Y292ZXI6dGhpcy5wb3B1cENvdmVyLGtlZXBPblNjcmVlbjohMCxkaXNhYmxlOiF0aGlzLmVkaXRhYmxlLGFuY2hvckNsaWNrOiExLG1heEhlaWdodDp0aGlzLnBvcHVwTWF4SGVpZ2h0fSxzbG90OlwiYWZ0ZXJcIixvbjp7c2hvdzp0aGlzLl9fb25TaG93LGhpZGU6ZnVuY3Rpb24oKXtlLl9fb25DbG9zZSghMCl9fSxuYXRpdmVPbjp7a2V5ZG93bjp0aGlzLl9fa2V5Ym9hcmRIYW5kbGVLZXl9fSxbdGhpcy5maWx0ZXImJnQoUVNlYXJjaCx7cmVmOlwiZmlsdGVyXCIsc3RhdGljQ2xhc3M6XCJjb2wtYXV0b1wiLHN0eWxlOlwicGFkZGluZzogMTBweDtcIixwcm9wczp7dmFsdWU6dGhpcy50ZXJtcyxwbGFjZWhvbGRlcjp0aGlzLmZpbHRlclBsYWNlaG9sZGVyfHx0aGlzLiRxLmkxOG4ubGFiZWwuZmlsdGVyLGRlYm91bmNlOjEwMCxjb2xvcjp0aGlzLmNvbG9yLGRhcms6dGhpcy5kYXJrLG5vUGFyZW50RmllbGQ6ITAsbm9JY29uOiEwfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7ZS50ZXJtcz10LGUucmVwb3NpdGlvbigpfX19KXx8dm9pZCAwLHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoJiZ0KFFMaXN0LHtzdGF0aWNDbGFzczpcIm5vLWJvcmRlciBzY3JvbGxcIixwcm9wczp7c2VwYXJhdG9yOnRoaXMuc2VwYXJhdG9yLGRhcms6dGhpcy5kYXJrfX0sdGhpcy52aXNpYmxlT3B0aW9ucy5tYXAoZnVuY3Rpb24oaSxzKXtyZXR1cm4gdChRSXRlbVdyYXBwZXIse2tleTpzLGNsYXNzOltpLmRpc2FibGU/XCJ0ZXh0LWZhZGVkXCI6XCJjdXJzb3ItcG9pbnRlclwiLHM9PT1lLmtleWJvYXJkSW5kZXg/XCJxLXNlbGVjdC1oaWdobGlnaHRcIjpcIlwiLGkuZGlzYWJsZT9cIlwiOlwiY3Vyc29yLXBvaW50ZXJcIixpLmNsYXNzTmFtZXx8XCJcIl0scHJvcHM6e2NmZzppLHNsb3RSZXBsYWNlOiEwLGFjdGl2ZTplLm11bHRpcGxlP3ZvaWQgMDplLnZhbHVlPT09aS52YWx1ZX0sbmF0aXZlT246e1wiIWNsaWNrXCI6ZnVuY3Rpb24oKXt2YXIgdD1lLm11bHRpcGxlP1wiX190b2dnbGVNdWx0aXBsZVwiOlwiX19zaW5nbGVTZWxlY3RcIjtlW3RdKGkudmFsdWUsaS5kaXNhYmxlKX0sbW91c2VlbnRlcjpmdW5jdGlvbih0KXshaS5kaXNhYmxlJiZlLl9fbW91c2VFbnRlckhhbmRsZXIodCxzKX19fSxbZS5tdWx0aXBsZT90KGUudG9nZ2xlP1FUb2dnbGU6UUNoZWNrYm94LHtzbG90OmUudG9nZ2xlP1wicmlnaHRcIjpcImxlZnRcIixwcm9wczp7a2VlcENvbG9yOiEwLGNvbG9yOmkuY29sb3J8fGUuY29sb3IsZGFyazplLmRhcmssdmFsdWU6ZS5vcHRNb2RlbFtpLmluZGV4XSxkaXNhYmxlOmkuZGlzYWJsZSxub0ZvY3VzOiEwfX0pOmUucmFkaW8mJnQoUVJhZGlvLHtzbG90OlwibGVmdFwiLHByb3BzOntrZWVwQ29sb3I6ITAsY29sb3I6aS5jb2xvcnx8ZS5jb2xvcixkYXJrOmUuZGFyayx2YWx1ZTplLnZhbHVlLHZhbDppLnZhbHVlLGRpc2FibGU6aS5kaXNhYmxlLG5vRm9jdXM6ITB9fSl8fHZvaWQgMF0pfSkpfHx2b2lkIDBdKSksdGhpcy5pc0NsZWFyYWJsZSYmaS5wdXNoKHQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0W1wiY2xlYXJcIisodGhpcy5pc0ludmVydGVkP1wiSW52ZXJ0ZWRcIjpcIlwiKV19LG5hdGl2ZU9uOntjbGljazp0aGlzLmNsZWFyfX0pKSxpLnB1c2godChRSWNvbix0aGlzLnJlYWRvbmx5P3tzbG90OlwiYWZ0ZXJcIn06e3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLmlucHV0LmRyb3Bkb3dufX0pKSx0KFFJbnB1dEZyYW1lLHtyZWY6XCJpbnB1dFwiLHN0YXRpY0NsYXNzOlwicS1zZWxlY3RcIixwcm9wczp7cHJlZml4OnRoaXMucHJlZml4LHN1ZmZpeDp0aGlzLnN1ZmZpeCxzdGFja0xhYmVsOnRoaXMuc3RhY2tMYWJlbCxmbG9hdExhYmVsOnRoaXMuZmxvYXRMYWJlbCxlcnJvcjp0aGlzLmVycm9yLHdhcm5pbmc6dGhpcy53YXJuaW5nLGRpc2FibGU6dGhpcy5kaXNhYmxlLHJlYWRvbmx5OnRoaXMucmVhZG9ubHksaW52ZXJ0ZWQ6dGhpcy5pbnZlcnRlZCxpbnZlcnRlZExpZ2h0OnRoaXMuaW52ZXJ0ZWRMaWdodCxkYXJrOnRoaXMuZGFyayxoaWRlVW5kZXJsaW5lOnRoaXMuaGlkZVVuZGVybGluZSxiZWZvcmU6dGhpcy5iZWZvcmUsYWZ0ZXI6dGhpcy5hZnRlcixjb2xvcjp0aGlzLmNvbG9yLG5vUGFyZW50RmllbGQ6dGhpcy5ub1BhcmVudEZpZWxkLGZvY3VzZWQ6dGhpcy5mb2N1c2VkLGZvY3VzYWJsZTohMCxsZW5ndGg6dGhpcy5sZW5ndGgsYWRkaXRpb25hbExlbmd0aDp0aGlzLmFkZGl0aW9uYWxMZW5ndGh9LG5hdGl2ZU9uOntjbGljazp0aGlzLnRvZ2dsZVBvcHVwLGZvY3VzOnRoaXMuX19vbkZvY3VzLGJsdXI6dGhpcy5fX29uQmx1cixrZXlkb3duOnRoaXMuX19rZXlib2FyZEhhbmRsZUtleX19LGkpfX0sUVNwaW5uZXJBdWRpbz17bmFtZTpcIlFTcGlubmVyQXVkaW9cIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgNTUgODBcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcIm1hdHJpeCgxIDAgMCAtMSAwIDgwKVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiMjBcIixyeDpcIjNcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMHNcIixkdXI6XCI0LjNzXCIsdmFsdWVzOlwiMjA7NDU7NTc7ODA7NjQ7MzI7NjY7NDU7NjQ7MjM7NjY7MTM7NjQ7NTY7MzQ7MzQ7MjsyMzs3Njs3OTsyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicmVjdFwiLHthdHRyczp7eDpcIjE1XCIsd2lkdGg6XCIxMFwiLGhlaWdodDpcIjgwXCIscng6XCIzXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiMnNcIix2YWx1ZXM6XCI4MDs1NTszMzs1Ozc1OzIzOzczOzMzOzEyOzE0OzYwOzgwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiMzBcIix3aWR0aDpcIjEwXCIsaGVpZ2h0OlwiNTBcIixyeDpcIjNcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjRzXCIsdmFsdWVzOlwiNTA7MzQ7Nzg7MjM7NTY7MjM7MzQ7NzY7ODA7NTQ7MjE7NTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInJlY3RcIix7YXR0cnM6e3g6XCI0NVwiLHdpZHRoOlwiMTBcIixoZWlnaHQ6XCIzMFwiLHJ4OlwiM1wifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwc1wiLGR1cjpcIjJzXCIsdmFsdWVzOlwiMzA7NDU7MTM7ODA7NTY7NzI7NDU7NzY7MzQ7MjM7Njc7MzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJCYWxsPXtuYW1lOlwiUVNwaW5uZXJCYWxsXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3N0cm9rZTpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgNTcgNTdcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIixmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1XCIsY3k6XCI1MFwiLHI6XCI1XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeVwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsdmFsdWVzOlwiNTA7NTs1MDs1MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeFwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsdmFsdWVzOlwiNTsyNzs0OTs1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjdcIixjeTpcIjVcIixyOlwiNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiY3lcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLGZyb206XCI1XCIsdG86XCI1XCIsdmFsdWVzOlwiNTs1MDs1MDs1XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImN4XCIsYmVnaW46XCIwc1wiLGR1cjpcIjIuMnNcIixmcm9tOlwiMjdcIix0bzpcIjI3XCIsdmFsdWVzOlwiMjc7NDk7NTsyN1wiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjQ5XCIsY3k6XCI1MFwiLHI6XCI1XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeVwiLGJlZ2luOlwiMHNcIixkdXI6XCIyLjJzXCIsdmFsdWVzOlwiNTA7NTA7NTs1MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJjeFwiLGZyb206XCI0OVwiLHRvOlwiNDlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMi4yc1wiLHZhbHVlczpcIjQ5OzU7Mjc7NDlcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJCYXJzPXtuYW1lOlwiUVNwaW5uZXJCYXJzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEzNSAxNDBcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3k6XCIxMFwiLHdpZHRoOlwiMTVcIixoZWlnaHQ6XCIxMjBcIixyeDpcIjZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImhlaWdodFwiLGJlZ2luOlwiMC41c1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTIwOzExMDsxMDA7OTA7ODA7NzA7NjA7NTA7NDA7MTQwOzEyMFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsYmVnaW46XCIwLjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiMzBcIix5OlwiMTBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTIwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiNjBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTQwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjBzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiOTBcIix5OlwiMTBcIix3aWR0aDpcIjE1XCIsaGVpZ2h0OlwiMTIwXCIscng6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjAuMjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMDsxNTsyMDsyNTszMDszNTs0MDs0NTs1MDswOzEwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJyZWN0XCIse2F0dHJzOnt4OlwiMTIwXCIseTpcIjEwXCIsd2lkdGg6XCIxNVwiLGhlaWdodDpcIjEyMFwiLHJ4OlwiNlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsYmVnaW46XCIwLjVzXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxMjA7MTEwOzEwMDs5MDs4MDs3MDs2MDs1MDs0MDsxNDA7MTIwXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KSx0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInlcIixiZWdpbjpcIjAuNXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjEwOzE1OzIwOzI1OzMwOzM1OzQwOzQ1OzUwOzA7MTBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKX19LFFTcGlubmVyQ2lyY2xlcz17bmFtZTpcIlFTcGlubmVyQ2lyY2xlc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMzUgMTM1XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJwYXRoXCIse2F0dHJzOntkOlwiTTY3LjQ0NyA1OGM1LjUyMyAwIDEwLTQuNDc3IDEwLTEwcy00LjQ3Ny0xMC0xMC0xMC0xMCA0LjQ3Ny0xMCAxMCA0LjQ3NyAxMCAxMCAxMHptOS40NDggOS40NDdjMCA1LjUyMyA0LjQ3NyAxMCAxMCAxMCA1LjUyMiAwIDEwLTQuNDc3IDEwLTEwcy00LjQ3OC0xMC0xMC0xMGMtNS41MjMgMC0xMCA0LjQ3Ny0xMCAxMHptLTkuNDQ4IDkuNDQ4Yy01LjUyMyAwLTEwIDQuNDc3LTEwIDEwIDAgNS41MjIgNC40NzcgMTAgMTAgMTBzMTAtNC40NzggMTAtMTBjMC01LjUyMy00LjQ3Ny0xMC0xMC0xMHpNNTggNjcuNDQ3YzAtNS41MjMtNC40NzctMTAtMTAtMTBzLTEwIDQuNDc3LTEwIDEwIDQuNDc3IDEwIDEwIDEwIDEwLTQuNDc3IDEwLTEwelwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDY3IDY3XCIsdG86XCItMzYwIDY3IDY3XCIsZHVyOlwiMi41c1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMjguMTkgNDAuMzFjNi42MjcgMCAxMi01LjM3NCAxMi0xMiAwLTYuNjI4LTUuMzczLTEyLTEyLTEyLTYuNjI4IDAtMTIgNS4zNzItMTIgMTIgMCA2LjYyNiA1LjM3MiAxMiAxMiAxMnptMzAuNzItMTkuODI1YzQuNjg2IDQuNjg3IDEyLjI4NCA0LjY4NyAxNi45NyAwIDQuNjg2LTQuNjg2IDQuNjg2LTEyLjI4NCAwLTE2Ljk3LTQuNjg2LTQuNjg3LTEyLjI4NC00LjY4Ny0xNi45NyAwLTQuNjg3IDQuNjg2LTQuNjg3IDEyLjI4NCAwIDE2Ljk3em0zNS43NCA3LjcwNWMwIDYuNjI3IDUuMzcgMTIgMTIgMTIgNi42MjYgMCAxMi01LjM3MyAxMi0xMiAwLTYuNjI4LTUuMzc0LTEyLTEyLTEyLTYuNjMgMC0xMiA1LjM3Mi0xMiAxMnptMTkuODIyIDMwLjcyYy00LjY4NiA0LjY4Ni00LjY4NiAxMi4yODQgMCAxNi45NyA0LjY4NyA0LjY4NiAxMi4yODUgNC42ODYgMTYuOTcgMCA0LjY4Ny00LjY4NiA0LjY4Ny0xMi4yODQgMC0xNi45Ny00LjY4NS00LjY4Ny0xMi4yODMtNC42ODctMTYuOTcgMHptLTcuNzA0IDM1Ljc0Yy02LjYyNyAwLTEyIDUuMzctMTIgMTIgMCA2LjYyNiA1LjM3MyAxMiAxMiAxMnMxMi01LjM3NCAxMi0xMmMwLTYuNjMtNS4zNzMtMTItMTItMTJ6bS0zMC43MiAxOS44MjJjLTQuNjg2LTQuNjg2LTEyLjI4NC00LjY4Ni0xNi45NyAwLTQuNjg2IDQuNjg3LTQuNjg2IDEyLjI4NSAwIDE2Ljk3IDQuNjg2IDQuNjg3IDEyLjI4NCA0LjY4NyAxNi45NyAwIDQuNjg3LTQuNjg1IDQuNjg3LTEyLjI4MyAwLTE2Ljk3em0tMzUuNzQtNy43MDRjMC02LjYyNy01LjM3Mi0xMi0xMi0xMi02LjYyNiAwLTEyIDUuMzczLTEyIDEyczUuMzc0IDEyIDEyIDEyYzYuNjI4IDAgMTItNS4zNzMgMTItMTJ6bS0xOS44MjMtMzAuNzJjNC42ODctNC42ODYgNC42ODctMTIuMjg0IDAtMTYuOTctNC42ODYtNC42ODYtMTIuMjg0LTQuNjg2LTE2Ljk3IDAtNC42ODcgNC42ODYtNC42ODcgMTIuMjg0IDAgMTYuOTcgNC42ODYgNC42ODcgMTIuMjg0IDQuNjg3IDE2Ljk3IDB6XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNjcgNjdcIix0bzpcIjM2MCA2NyA2N1wiLGR1cjpcIjhzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJDb21tZW50PXtuYW1lOlwiUVNwaW5uZXJDb21tZW50XCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIix2aWV3Qm94OlwiMCAwIDEwMCAxMDBcIixwcmVzZXJ2ZUFzcGVjdFJhdGlvOlwieE1pZFlNaWRcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIjBcIix5OlwiMFwiLHdpZHRoOlwiMTAwXCIsaGVpZ2h0OlwiMTAwXCIsZmlsbDpcIm5vbmVcIn19KSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk03OCwxOUgyMmMtNi42LDAtMTIsNS40LTEyLDEydjMxYzAsNi42LDUuNCwxMiwxMiwxMmgzNy4yYzAuNCwzLDEuOCw1LjYsMy43LDcuNmMyLjQsMi41LDUuMSw0LjEsOS4xLDQgYy0xLjQtMi4xLTItNy4yLTItMTAuM2MwLTAuNCwwLTAuOCwwLTEuM2g4YzYuNiwwLDEyLTUuNCwxMi0xMlYzMUM5MCwyNC40LDg0LjYsMTksNzgsMTl6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMzBcIixjeTpcIjQ3XCIscjpcIjVcIixmaWxsOlwiI2ZmZlwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsdmFsdWVzOlwiMDsxOzFcIixrZXlUaW1lczpcIjA7MC4yOzFcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1MFwiLGN5OlwiNDdcIixyOlwiNVwiLGZpbGw6XCIjZmZmXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJvcGFjaXR5XCIsZnJvbTpcIjBcIix0bzpcIjFcIix2YWx1ZXM6XCIwOzA7MTsxXCIsa2V5VGltZXM6XCIwOzAuMjswLjQ7MVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjcwXCIsY3k6XCI0N1wiLHI6XCI1XCIsZmlsbDpcIiNmZmZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcIm9wYWNpdHlcIixmcm9tOlwiMFwiLHRvOlwiMVwiLHZhbHVlczpcIjA7MDsxOzFcIixrZXlUaW1lczpcIjA7MC40OzAuNjsxXCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSl9fSxRU3Bpbm5lckN1YmU9e25hbWU6XCJRU3Bpbm5lckN1YmVcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiMFwiLHk6XCIwXCIsd2lkdGg6XCIxMDBcIixoZWlnaHQ6XCIxMDBcIixmaWxsOlwibm9uZVwifX0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMjUgMjUpXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMjBcIix5OlwiLTIwXCIsd2lkdGg6XCI0MFwiLGhlaWdodDpcIjQwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjlcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIxLjVcIix0bzpcIjFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixiZWdpbjpcIjBzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDc1IDI1KVwifX0sW3QoXCJyZWN0XCIse2F0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC44XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwLjFzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDI1IDc1KVwifX0sW3QoXCJyZWN0XCIse3N0YXRpY0NsYXNzOlwiY3ViZVwiLGF0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC43XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwLjNzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKSx0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwidHJhbnNsYXRlKDc1IDc1KVwifX0sW3QoXCJyZWN0XCIse3N0YXRpY0NsYXNzOlwiY3ViZVwiLGF0dHJzOnt4OlwiLTIwXCIseTpcIi0yMFwiLHdpZHRoOlwiNDBcIixoZWlnaHQ6XCI0MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC42XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwic2NhbGVcIixmcm9tOlwiMS41XCIsdG86XCIxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsYmVnaW46XCIwLjJzXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjIgMC44IDAuMiAwLjhcIixrZXlUaW1lczpcIjA7MVwifX0pXSldKV0pfX0sUVNwaW5uZXJEb3RzPXtuYW1lOlwiUVNwaW5uZXJEb3RzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e2ZpbGw6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDEyMCAzMFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjE1XCIsY3k6XCIxNVwiLHI6XCIxNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGZyb206XCIxNVwiLHRvOlwiMTVcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE1Ozk7MTVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsZnJvbTpcIjFcIix0bzpcIjFcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE7LjU7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjYwXCIsY3k6XCIxNVwiLHI6XCI5XCIsXCJmaWxsLW9wYWNpdHlcIjpcIi4zXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsZnJvbTpcIjlcIix0bzpcIjlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjk7MTU7OVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixmcm9tOlwiLjVcIix0bzpcIi41XCIsYmVnaW46XCIwc1wiLGR1cjpcIjAuOHNcIix2YWx1ZXM6XCIuNTsxOy41XCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMTA1XCIsY3k6XCIxNVwiLHI6XCIxNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGZyb206XCIxNVwiLHRvOlwiMTVcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE1Ozk7MTVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsZnJvbTpcIjFcIix0bzpcIjFcIixiZWdpbjpcIjBzXCIsZHVyOlwiMC44c1wiLHZhbHVlczpcIjE7LjU7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJGYWNlYm9vaz17bmFtZTpcIlFTcGlubmVyRmFjZWJvb2tcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMjAgNTApXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMTBcIix5OlwiLTMwXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjYwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjZcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIyXCIsdG86XCIxXCIsYmVnaW46XCIwc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGR1cjpcIjFzXCIsY2FsY01vZGU6XCJzcGxpbmVcIixrZXlTcGxpbmVzOlwiMC4xIDAuOSAwLjQgMVwiLGtleVRpbWVzOlwiMDsxXCIsdmFsdWVzOlwiMjsxXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoNTAgNTApXCJ9fSxbdChcInJlY3RcIix7YXR0cnM6e3g6XCItMTBcIix5OlwiLTMwXCIsd2lkdGg6XCIyMFwiLGhlaWdodDpcIjYwXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLG9wYWNpdHk6XCIwLjhcIn19LFt0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJzY2FsZVwiLGZyb206XCIyXCIsdG86XCIxXCIsYmVnaW46XCIwLjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZHVyOlwiMXNcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVNwbGluZXM6XCIwLjEgMC45IDAuNCAxXCIsa2V5VGltZXM6XCIwOzFcIix2YWx1ZXM6XCIyOzFcIn19KV0pXSksdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSg4MCA1MClcIn19LFt0KFwicmVjdFwiLHthdHRyczp7eDpcIi0xMFwiLHk6XCItMzBcIix3aWR0aDpcIjIwXCIsaGVpZ2h0OlwiNjBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuOVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInNjYWxlXCIsZnJvbTpcIjJcIix0bzpcIjFcIixiZWdpbjpcIjAuMnNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixkdXI6XCIxc1wiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5U3BsaW5lczpcIjAuMSAwLjkgMC40IDFcIixrZXlUaW1lczpcIjA7MVwiLHZhbHVlczpcIjI7MVwifX0pXSldKV0pfX0sUVNwaW5uZXJHZWFycz17bmFtZTpcIlFTcGlubmVyR2VhcnNcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcInhNaWRZTWlkXCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoLTIwLC0yMClcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk03OS45LDUyLjZDODAsNTEuOCw4MCw1MC45LDgwLDUwczAtMS44LTAuMS0yLjZsLTUuMS0wLjRjLTAuMy0yLjQtMC45LTQuNi0xLjgtNi43bDQuMi0yLjljLTAuNy0xLjYtMS42LTMuMS0yLjYtNC41IEw3MCwzNWMtMS40LTEuOS0zLjEtMy41LTQuOS00LjlsMi4yLTQuNmMtMS40LTEtMi45LTEuOS00LjUtMi42TDU5LjgsMjdjLTIuMS0wLjktNC40LTEuNS02LjctMS44bC0wLjQtNS4xQzUxLjgsMjAsNTAuOSwyMCw1MCwyMCBzLTEuOCwwLTIuNiwwLjFsLTAuNCw1LjFjLTIuNCwwLjMtNC42LDAuOS02LjcsMS44bC0yLjktNC4xYy0xLjYsMC43LTMuMSwxLjYtNC41LDIuNmwyLjEsNC42Yy0xLjksMS40LTMuNSwzLjEtNSw0LjlsLTQuNS0yLjEgYy0xLDEuNC0xLjksMi45LTIuNiw0LjVsNC4xLDIuOWMtMC45LDIuMS0xLjUsNC40LTEuOCw2LjhsLTUsMC40QzIwLDQ4LjIsMjAsNDkuMSwyMCw1MHMwLDEuOCwwLjEsMi42bDUsMC40IGMwLjMsMi40LDAuOSw0LjcsMS44LDYuOGwtNC4xLDIuOWMwLjcsMS42LDEuNiwzLjEsMi42LDQuNWw0LjUtMi4xYzEuNCwxLjksMy4xLDMuNSw1LDQuOWwtMi4xLDQuNmMxLjQsMSwyLjksMS45LDQuNSwyLjZsMi45LTQuMSBjMi4xLDAuOSw0LjQsMS41LDYuNywxLjhsMC40LDUuMUM0OC4yLDgwLDQ5LjEsODAsNTAsODBzMS44LDAsMi42LTAuMWwwLjQtNS4xYzIuMy0wLjMsNC42LTAuOSw2LjctMS44bDIuOSw0LjIgYzEuNi0wLjcsMy4xLTEuNiw0LjUtMi42TDY1LDY5LjljMS45LTEuNCwzLjUtMyw0LjktNC45bDQuNiwyLjJjMS0xLjQsMS45LTIuOSwyLjYtNC41TDczLDU5LjhjMC45LTIuMSwxLjUtNC40LDEuOC02LjdMNzkuOSw1Mi42IHogTTUwLDY1Yy04LjMsMC0xNS02LjctMTUtMTVjMC04LjMsNi43LTE1LDE1LTE1czE1LDYuNywxNSwxNUM2NSw1OC4zLDU4LjMsNjUsNTAsNjV6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCI5MCA1MCA1MFwiLHRvOlwiMCA1MCA1MFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMjAsMjApIHJvdGF0ZSgxNSA1MCA1MClcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk03OS45LDUyLjZDODAsNTEuOCw4MCw1MC45LDgwLDUwczAtMS44LTAuMS0yLjZsLTUuMS0wLjRjLTAuMy0yLjQtMC45LTQuNi0xLjgtNi43bDQuMi0yLjljLTAuNy0xLjYtMS42LTMuMS0yLjYtNC41IEw3MCwzNWMtMS40LTEuOS0zLjEtMy41LTQuOS00LjlsMi4yLTQuNmMtMS40LTEtMi45LTEuOS00LjUtMi42TDU5LjgsMjdjLTIuMS0wLjktNC40LTEuNS02LjctMS44bC0wLjQtNS4xQzUxLjgsMjAsNTAuOSwyMCw1MCwyMCBzLTEuOCwwLTIuNiwwLjFsLTAuNCw1LjFjLTIuNCwwLjMtNC42LDAuOS02LjcsMS44bC0yLjktNC4xYy0xLjYsMC43LTMuMSwxLjYtNC41LDIuNmwyLjEsNC42Yy0xLjksMS40LTMuNSwzLjEtNSw0LjlsLTQuNS0yLjEgYy0xLDEuNC0xLjksMi45LTIuNiw0LjVsNC4xLDIuOWMtMC45LDIuMS0xLjUsNC40LTEuOCw2LjhsLTUsMC40QzIwLDQ4LjIsMjAsNDkuMSwyMCw1MHMwLDEuOCwwLjEsMi42bDUsMC40IGMwLjMsMi40LDAuOSw0LjcsMS44LDYuOGwtNC4xLDIuOWMwLjcsMS42LDEuNiwzLjEsMi42LDQuNWw0LjUtMi4xYzEuNCwxLjksMy4xLDMuNSw1LDQuOWwtMi4xLDQuNmMxLjQsMSwyLjksMS45LDQuNSwyLjZsMi45LTQuMSBjMi4xLDAuOSw0LjQsMS41LDYuNywxLjhsMC40LDUuMUM0OC4yLDgwLDQ5LjEsODAsNTAsODBzMS44LDAsMi42LTAuMWwwLjQtNS4xYzIuMy0wLjMsNC42LTAuOSw2LjctMS44bDIuOSw0LjIgYzEuNi0wLjcsMy4xLTEuNiw0LjUtMi42TDY1LDY5LjljMS45LTEuNCwzLjUtMyw0LjktNC45bDQuNiwyLjJjMS0xLjQsMS45LTIuOSwyLjYtNC41TDczLDU5LjhjMC45LTIuMSwxLjUtNC40LDEuOC02LjdMNzkuOSw1Mi42IHogTTUwLDY1Yy04LjMsMC0xNS02LjctMTUtMTVjMC04LjMsNi43LTE1LDE1LTE1czE1LDYuNywxNSwxNUM2NSw1OC4zLDU4LjMsNjUsNTAsNjV6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCI5MCA1MCA1MFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lckdyaWQ9e25hbWU6XCJRU3Bpbm5lckdyaWRcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7ZmlsbDpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTA1IDEwNVwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEyLjVcIixjeTpcIjEyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMTIuNVwiLGN5OlwiNTIuNVwiLHI6XCIxMi41XCIsXCJmaWxsLW9wYWNpdHlcIjpcIi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjEwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI1Mi41XCIsY3k6XCIxMi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMzAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjUyLjVcIixjeTpcIjUyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI2MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiOTIuNVwiLGN5OlwiMTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjgwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI5Mi41XCIsY3k6XCI1Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiNDAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjEyLjVcIixjeTpcIjkyLjVcIixyOlwiMTIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCI3MDBtc1wiLGR1cjpcIjFzXCIsdmFsdWVzOlwiMTsuMjsxXCIsY2FsY01vZGU6XCJsaW5lYXJcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiNTIuNVwiLGN5OlwiOTIuNVwiLHI6XCIxMi41XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJmaWxsLW9wYWNpdHlcIixiZWdpbjpcIjUwMG1zXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIxOy4yOzFcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCI5Mi41XCIsY3k6XCI5Mi41XCIscjpcIjEyLjVcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcImZpbGwtb3BhY2l0eVwiLGJlZ2luOlwiMjAwbXNcIixkdXI6XCIxc1wiLHZhbHVlczpcIjE7LjI7MVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pfX0sUVNwaW5uZXJIZWFydHM9e25hbWU6XCJRU3Bpbm5lckhlYXJ0c1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxNDAgNjRcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMzAuMjYyIDU3LjAyTDcuMTk1IDQwLjcyM2MtNS44NC0zLjk3Ni03LjU2LTEyLjA2LTMuODQyLTE4LjA2MyAzLjcxNS02IDExLjQ2Ny03LjY1IDE3LjMwNi0zLjY4bDQuNTIgMy43NiAyLjYtNS4yNzRjMy43MTYtNi4wMDIgMTEuNDctNy42NSAxNy4zMDQtMy42OCA1Ljg0IDMuOTcgNy41NiAxMi4wNTQgMy44NDIgMTguMDYyTDM0LjQ5IDU2LjExOGMtLjg5NyAxLjUxMi0yLjc5MyAxLjkxNS00LjIyOC45elwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIwc1wiLGR1cjpcIjEuNHNcIix2YWx1ZXM6XCIwLjU7MTswLjVcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMTA1LjUxMiA1Ni4xMmwtMTQuNDQtMjQuMjcyYy0zLjcxNi02LjAwOC0xLjk5Ni0xNC4wOTMgMy44NDMtMTguMDYyIDUuODM1LTMuOTcgMTMuNTg4LTIuMzIyIDE3LjMwNiAzLjY4bDIuNiA1LjI3NCA0LjUyLTMuNzZjNS44NC0zLjk3IDEzLjU5My0yLjMyIDE3LjMwOCAzLjY4IDMuNzE4IDYuMDAzIDEuOTk4IDE0LjA4OC0zLjg0MiAxOC4wNjRMMTA5Ljc0IDU3LjAyYy0xLjQzNCAxLjAxNC0zLjMzLjYxLTQuMjI4LS45elwiLFwiZmlsbC1vcGFjaXR5XCI6XCIuNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiZmlsbC1vcGFjaXR5XCIsYmVnaW46XCIwLjdzXCIsZHVyOlwiMS40c1wiLHZhbHVlczpcIjAuNTsxOzAuNVwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk02Ny40MDggNTcuODM0bC0yMy4wMS0yNC45OGMtNS44NjQtNi4xNS01Ljg2NC0xNi4xMDggMC0yMi4yNDggNS44Ni02LjE0IDE1LjM3LTYuMTQgMjEuMjM0IDBMNzAgMTYuMTY4bDQuMzY4LTUuNTYyYzUuODYzLTYuMTQgMTUuMzc1LTYuMTQgMjEuMjM1IDAgNS44NjMgNi4xNCA1Ljg2MyAxNi4wOTggMCAyMi4yNDdsLTIzLjAwNyAyNC45OGMtMS40MyAxLjU1Ni0zLjc1NyAxLjU1Ni01LjE4OCAwelwifX0pXSl9fSxRU3Bpbm5lckhvdXJnbGFzcz17bmFtZTpcIlFTcGlubmVySG91cmdsYXNzXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLFt0KFwicGF0aFwiLHtzdGF0aWNDbGFzczpcImdsYXNzXCIsYXR0cnM6e2ZpbGw6XCJub25lXCIsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2Utd2lkdGhcIjpcIjVcIixcInN0cm9rZS1taXRlcmxpbWl0XCI6XCIxMFwiLGQ6XCJNNTguNCw1MS43Yy0wLjktMC45LTEuNC0yLTEuNC0yLjNzMC41LTAuNCwxLjQtMS40IEM3MC44LDQzLjgsNzkuOCwzMC41LDgwLDE1LjVINzBIMzBIMjBjMC4yLDE1LDkuMiwyOC4xLDIxLjYsMzIuM2MwLjksMC45LDEuNCwxLjIsMS40LDEuNXMtMC41LDEuNi0xLjQsMi41IEMyOS4yLDU2LjEsMjAuMiw2OS41LDIwLDg1LjVoMTBoNDBoMTBDNzkuOCw2OS41LDcwLjgsNTUuOSw1OC40LDUxLjd6XCJ9fSksdChcImNsaXBQYXRoXCIse2F0dHJzOntpZDpcInVpbC1ob3VyZ2xhc3MtY2xpcDFcIn19LFt0KFwicmVjdFwiLHtzdGF0aWNDbGFzczpcImNsaXBcIixhdHRyczp7eDpcIjE1XCIseTpcIjIwXCIsd2lkdGg6XCI3MFwiLGhlaWdodDpcIjI1XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJoZWlnaHRcIixmcm9tOlwiMjVcIix0bzpcIjBcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLHZsYXVlczpcIjI1OzA7MFwiLGtleVRpbWVzOlwiMDswLjU7MVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwieVwiLGZyb206XCIyMFwiLHRvOlwiNDVcIixkdXI6XCIxc1wiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLHZsYXVlczpcIjIwOzQ1OzQ1XCIsa2V5VGltZXM6XCIwOzAuNTsxXCJ9fSldKV0pLHQoXCJjbGlwUGF0aFwiLHthdHRyczp7aWQ6XCJ1aWwtaG91cmdsYXNzLWNsaXAyXCJ9fSxbdChcInJlY3RcIix7c3RhdGljQ2xhc3M6XCJjbGlwXCIsYXR0cnM6e3g6XCIxNVwiLHk6XCI1NVwiLHdpZHRoOlwiNzBcIixoZWlnaHQ6XCIyNVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiaGVpZ2h0XCIsZnJvbTpcIjBcIix0bzpcIjI1XCIsZHVyOlwiMXNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIix2bGF1ZXM6XCIwOzI1OzI1XCIsa2V5VGltZXM6XCIwOzAuNTsxXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ5XCIsZnJvbTpcIjgwXCIsdG86XCI1NVwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsdmxhdWVzOlwiODA7NTU7NTVcIixrZXlUaW1lczpcIjA7MC41OzFcIn19KV0pXSksdChcInBhdGhcIix7c3RhdGljQ2xhc3M6XCJzYW5kXCIsYXR0cnM6e2Q6XCJNMjksMjNjMy4xLDExLjQsMTEuMywxOS41LDIxLDE5LjVTNjcuOSwzNC40LDcxLDIzSDI5elwiLFwiY2xpcC1wYXRoXCI6XCJ1cmwoI3VpbC1ob3VyZ2xhc3MtY2xpcDEpXCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0pLHQoXCJwYXRoXCIse3N0YXRpY0NsYXNzOlwic2FuZFwiLGF0dHJzOntkOlwiTTcxLjYsNzhjLTMtMTEuNi0xMS41LTIwLTIxLjUtMjBzLTE4LjUsOC40LTIxLjUsMjBINzEuNnpcIixcImNsaXAtcGF0aFwiOlwidXJsKCN1aWwtaG91cmdsYXNzLWNsaXAyKVwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIn19KSx0KFwiYW5pbWF0ZVRyYW5zZm9ybVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInRyYW5zZm9ybVwiLHR5cGU6XCJyb3RhdGVcIixmcm9tOlwiMCA1MCA1MFwiLHRvOlwiMTgwIDUwIDUwXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCIsZHVyOlwiMXNcIix2YWx1ZXM6XCIwIDUwIDUwOzAgNTAgNTA7MTgwIDUwIDUwXCIsa2V5VGltZXM6XCIwOzAuNzsxXCJ9fSldKV0pfX0sUVNwaW5uZXJJbmZpbml0eT17bmFtZTpcIlFTcGlubmVySW5maW5pdHlcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAxMDAgMTAwXCIscHJlc2VydmVBc3BlY3RSYXRpbzpcInhNaWRZTWlkXCJ9fSxbdChcInBhdGhcIix7YXR0cnM6e2Q6XCJNMjQuMywzMEMxMS40LDMwLDUsNDMuMyw1LDUwczYuNCwyMCwxOS4zLDIwYzE5LjMsMCwzMi4xLTQwLDUxLjQtNDBDODguNiwzMCw5NSw0My4zLDk1LDUwcy02LjQsMjAtMTkuMywyMEM1Ni40LDcwLDQzLjYsMzAsMjQuMywzMHpcIixmaWxsOlwibm9uZVwiLHN0cm9rZTpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlLXdpZHRoXCI6XCI4XCIsXCJzdHJva2UtZGFzaGFycmF5XCI6XCIxMC42OTEyMDUzNDI2MTA2NzggMTAuNjkxMjA1MzQyNjEwNjc4XCIsXCJzdHJva2UtZGFzaG9mZnNldFwiOlwiMFwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLWRhc2hvZmZzZXRcIixmcm9tOlwiMFwiLHRvOlwiMjEuMzgyNDEwNjg1MjIxMzU1XCIsYmVnaW46XCIwXCIsZHVyOlwiMnNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIixmaWxsOlwiZnJlZXplXCJ9fSldKV0pfX0sUVNwaW5uZXJfaW9zPXtuYW1lOlwiUVNwaW5uZXJJb3NcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsc3Ryb2tlOlwiY3VycmVudENvbG9yXCIsZmlsbDpcImN1cnJlbnRDb2xvclwiLHZpZXdCb3g6XCIwIDAgNjQgNjRcIn19LFt0KFwiZ1wiLHthdHRyczp7XCJzdHJva2Utd2lkdGhcIjpcIjRcIixcInN0cm9rZS1saW5lY2FwXCI6XCJyb3VuZFwifX0sW3QoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDE4MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIxOy44NTsuNzsuNjU7LjU1Oy40NTsuMzU7LjI1Oy4xNTsuMTswOzFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDIxMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIwOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzBcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDI0MClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgyNzApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDMwMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMzMwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NTsuNDU7LjM1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi40NTsuMzU7LjI1Oy4xNTsuMTswOzE7Ljg1Oy43Oy42NTsuNTU7LjQ1XCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwibGluZVwiLHthdHRyczp7eTE6XCIxN1wiLHkyOlwiMjlcIix0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMzIsMzIpIHJvdGF0ZSgzMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7Ljc7LjY1Oy41NVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoNjApXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGR1cjpcIjc1MG1zXCIsdmFsdWVzOlwiLjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxOy44NTsuNzsuNjVcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDkwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIi43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MTsuODU7LjdcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJsaW5lXCIse2F0dHJzOnt5MTpcIjE3XCIseTI6XCIyOVwiLHRyYW5zZm9ybTpcInRyYW5zbGF0ZSgzMiwzMikgcm90YXRlKDEyMClcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInN0cm9rZS1vcGFjaXR5XCIsZHVyOlwiNzUwbXNcIix2YWx1ZXM6XCIuODU7Ljc7LjY1Oy41NTsuNDU7LjM1Oy4yNTsuMTU7LjE7MDsxOy44NVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImxpbmVcIix7YXR0cnM6e3kxOlwiMTdcIix5MjpcIjI5XCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDMyLDMyKSByb3RhdGUoMTUwKVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixkdXI6XCI3NTBtc1wiLHZhbHVlczpcIjE7Ljg1Oy43Oy42NTsuNTU7LjQ1Oy4zNTsuMjU7LjE1Oy4xOzA7MVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSldKV0pfX0sUVNwaW5uZXJPdmFsPXtuYW1lOlwiUVNwaW5uZXJPdmFsXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3N0cm9rZTpcImN1cnJlbnRDb2xvclwiLHdpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMzggMzhcIix4bWxuczpcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJ9fSxbdChcImdcIix7YXR0cnM6e3RyYW5zZm9ybTpcInRyYW5zbGF0ZSgxIDEpXCIsXCJzdHJva2Utd2lkdGhcIjpcIjJcIixmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7XCJzdHJva2Utb3BhY2l0eVwiOlwiLjVcIixjeDpcIjE4XCIsY3k6XCIxOFwiLHI6XCIxOFwifX0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTM2IDE4YzAtOS45NC04LjA2LTE4LTE4LTE4XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgMTggMThcIix0bzpcIjM2MCAxOCAxOFwiLGR1cjpcIjFzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclBpZT17bmFtZTpcIlFTcGlubmVyUGllXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0wIDUwQTUwIDUwIDAgMCAxIDUwIDBMNTAgNTBMMCA1MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC41XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjM2MCA1MCA1MFwiLGR1cjpcIjAuOHNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTUwIDBBNTAgNTAgMCAwIDEgMTAwIDUwTDUwIDUwTDUwIDBcIixmaWxsOlwiY3VycmVudENvbG9yXCIsb3BhY2l0eTpcIjAuNVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDUwIDUwXCIsdG86XCIzNjAgNTAgNTBcIixkdXI6XCIxLjZzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0xMDAgNTBBNTAgNTAgMCAwIDEgNTAgMTAwTDUwIDUwTDEwMCA1MFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC41XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjM2MCA1MCA1MFwiLGR1cjpcIjIuNHNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pLHQoXCJwYXRoXCIse2F0dHJzOntkOlwiTTUwIDEwMEE1MCA1MCAwIDAgMSAwIDUwTDUwIDUwTDUwIDEwMFwiLGZpbGw6XCJjdXJyZW50Q29sb3JcIixvcGFjaXR5OlwiMC41XCJ9fSxbdChcImFuaW1hdGVUcmFuc2Zvcm1cIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJ0cmFuc2Zvcm1cIix0eXBlOlwicm90YXRlXCIsZnJvbTpcIjAgNTAgNTBcIix0bzpcIjM2MCA1MCA1MFwiLGR1cjpcIjMuMnNcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSl9fSxRU3Bpbm5lclB1ZmY9e25hbWU6XCJRU3Bpbm5lclB1ZmZcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7c3Ryb2tlOlwiY3VycmVudENvbG9yXCIsd2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCA0NCA0NFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7ZmlsbDpcIm5vbmVcIixcImZpbGwtcnVsZVwiOlwiZXZlbm9kZFwiLFwic3Ryb2tlLXdpZHRoXCI6XCIyXCJ9fSxbdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiMVwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjhzXCIsdmFsdWVzOlwiMTsgMjBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjE2NSwgMC44NCwgMC40NCwgMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIjBzXCIsZHVyOlwiMS44c1wiLHZhbHVlczpcIjE7IDBcIixjYWxjTW9kZTpcInNwbGluZVwiLGtleVRpbWVzOlwiMDsgMVwiLGtleVNwbGluZXM6XCIwLjMsIDAuNjEsIDAuMzU1LCAxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjIyXCIsY3k6XCIyMlwiLHI6XCIxXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsYmVnaW46XCItMC45c1wiLGR1cjpcIjEuOHNcIix2YWx1ZXM6XCIxOyAyMFwiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5VGltZXM6XCIwOyAxXCIsa2V5U3BsaW5lczpcIjAuMTY1LCAwLjg0LCAwLjQ0LCAxXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGJlZ2luOlwiLTAuOXNcIixkdXI6XCIxLjhzXCIsdmFsdWVzOlwiMTsgMFwiLGNhbGNNb2RlOlwic3BsaW5lXCIsa2V5VGltZXM6XCIwOyAxXCIsa2V5U3BsaW5lczpcIjAuMywgMC42MSwgMC4zNTUsIDFcIixyZXBlYXRDb3VudDpcImluZGVmaW5pdGVcIn19KV0pXSldKX19LFFTcGlubmVyUmFkaW89e25hbWU6XCJRU3Bpbm5lclJhZGlvXCIsbWl4aW5zOlttaXhpbiQxXSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJzdmdcIix7c3RhdGljQ2xhc3M6XCJxLXNwaW5uZXJcIixjbGFzczp0aGlzLmNsYXNzZXMsYXR0cnM6e3dpZHRoOnRoaXMuc2l6ZSxoZWlnaHQ6dGhpcy5zaXplLHZpZXdCb3g6XCIwIDAgMTAwIDEwMFwiLHByZXNlcnZlQXNwZWN0UmF0aW86XCJ4TWlkWU1pZFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZ1wiLHthdHRyczp7dHJhbnNmb3JtOlwic2NhbGUoMC41NSlcIn19LFt0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjMwXCIsY3k6XCIxNTBcIixyOlwiMzBcIixmaWxsOlwiY3VycmVudENvbG9yXCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJvcGFjaXR5XCIsZnJvbTpcIjBcIix0bzpcIjFcIixkdXI6XCIxc1wiLGJlZ2luOlwiMFwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGtleVRpbWVzOlwiMDswLjU7MVwiLHZhbHVlczpcIjA7MTsxXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk05MCwxNTBoMzBjMC00OS43LTQwLjMtOTAtOTAtOTB2MzBDNjMuMSw5MCw5MCwxMTYuOSw5MCwxNTB6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsZHVyOlwiMXNcIixiZWdpbjpcIjAuMVwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGtleVRpbWVzOlwiMDswLjU7MVwiLHZhbHVlczpcIjA7MTsxXCJ9fSldKSx0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0xNTAsMTUwaDMwQzE4MCw2Ny4yLDExMi44LDAsMzAsMHYzMEM5Ni4zLDMwLDE1MCw4My43LDE1MCwxNTB6XCIsZmlsbDpcImN1cnJlbnRDb2xvclwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwib3BhY2l0eVwiLGZyb206XCIwXCIsdG86XCIxXCIsZHVyOlwiMXNcIixiZWdpbjpcIjAuMlwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwiLGtleVRpbWVzOlwiMDswLjU7MVwiLHZhbHVlczpcIjA7MTsxXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclJpbmdzPXtuYW1lOlwiUVNwaW5uZXJSaW5nc1wiLG1peGluczpbbWl4aW4kMV0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwic3ZnXCIse3N0YXRpY0NsYXNzOlwicS1zcGlubmVyXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntzdHJva2U6XCJjdXJyZW50Q29sb3JcIix3aWR0aDp0aGlzLnNpemUsaGVpZ2h0OnRoaXMuc2l6ZSx2aWV3Qm94OlwiMCAwIDQ1IDQ1XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifX0sW3QoXCJnXCIse2F0dHJzOntmaWxsOlwibm9uZVwiLFwiZmlsbC1ydWxlXCI6XCJldmVub2RkXCIsdHJhbnNmb3JtOlwidHJhbnNsYXRlKDEgMSlcIixcInN0cm9rZS13aWR0aFwiOlwiMlwifX0sW3QoXCJjaXJjbGVcIix7YXR0cnM6e2N4OlwiMjJcIixjeTpcIjIyXCIscjpcIjZcIn19LFt0KFwiYW5pbWF0ZVwiLHthdHRyczp7YXR0cmlidXRlTmFtZTpcInJcIixiZWdpbjpcIjEuNXNcIixkdXI6XCIzc1wiLHZhbHVlczpcIjY7MjJcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pLHQoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwic3Ryb2tlLW9wYWNpdHlcIixiZWdpbjpcIjEuNXNcIixkdXI6XCIzc1wiLHZhbHVlczpcIjE7MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utd2lkdGhcIixiZWdpbjpcIjEuNXNcIixkdXI6XCIzc1wiLHZhbHVlczpcIjI7MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntjeDpcIjIyXCIsY3k6XCIyMlwiLHI6XCI2XCJ9fSxbdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJyXCIsYmVnaW46XCIzc1wiLGR1cjpcIjNzXCIsdmFsdWVzOlwiNjsyMlwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utb3BhY2l0eVwiLGJlZ2luOlwiM3NcIixkdXI6XCIzc1wiLHZhbHVlczpcIjE7MFwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSksdChcImFuaW1hdGVcIix7YXR0cnM6e2F0dHJpYnV0ZU5hbWU6XCJzdHJva2Utd2lkdGhcIixiZWdpbjpcIjNzXCIsZHVyOlwiM3NcIix2YWx1ZXM6XCIyOzBcIixjYWxjTW9kZTpcImxpbmVhclwiLHJlcGVhdENvdW50OlwiaW5kZWZpbml0ZVwifX0pXSksdChcImNpcmNsZVwiLHthdHRyczp7Y3g6XCIyMlwiLGN5OlwiMjJcIixyOlwiOFwifX0sW3QoXCJhbmltYXRlXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwiclwiLGJlZ2luOlwiMHNcIixkdXI6XCIxLjVzXCIsdmFsdWVzOlwiNjsxOzI7Mzs0OzU7NlwiLGNhbGNNb2RlOlwibGluZWFyXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxRU3Bpbm5lclRhaWw9e25hbWU6XCJRU3Bpbm5lclRhaWxcIixtaXhpbnM6W21peGluJDFdLHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInN2Z1wiLHtzdGF0aWNDbGFzczpcInEtc3Bpbm5lclwiLGNsYXNzOnRoaXMuY2xhc3NlcyxhdHRyczp7d2lkdGg6dGhpcy5zaXplLGhlaWdodDp0aGlzLnNpemUsdmlld0JveDpcIjAgMCAzOCAzOFwiLHhtbG5zOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIn19LFt0KFwiZGVmc1wiLFt0KFwibGluZWFyR3JhZGllbnRcIix7YXR0cnM6e3gxOlwiOC4wNDIlXCIseTE6XCIwJVwiLHgyOlwiNjUuNjgyJVwiLHkyOlwiMjMuODY1JVwiLGlkOlwiYVwifX0sW3QoXCJzdG9wXCIse2F0dHJzOntcInN0b3AtY29sb3JcIjpcImN1cnJlbnRDb2xvclwiLFwic3RvcC1vcGFjaXR5XCI6XCIwXCIsb2Zmc2V0OlwiMCVcIn19KSx0KFwic3RvcFwiLHthdHRyczp7XCJzdG9wLWNvbG9yXCI6XCJjdXJyZW50Q29sb3JcIixcInN0b3Atb3BhY2l0eVwiOlwiLjYzMVwiLG9mZnNldDpcIjYzLjE0NiVcIn19KSx0KFwic3RvcFwiLHthdHRyczp7XCJzdG9wLWNvbG9yXCI6XCJjdXJyZW50Q29sb3JcIixvZmZzZXQ6XCIxMDAlXCJ9fSldKV0pLHQoXCJnXCIse2F0dHJzOnt0cmFuc2Zvcm06XCJ0cmFuc2xhdGUoMSAxKVwiLGZpbGw6XCJub25lXCIsXCJmaWxsLXJ1bGVcIjpcImV2ZW5vZGRcIn19LFt0KFwicGF0aFwiLHthdHRyczp7ZDpcIk0zNiAxOGMwLTkuOTQtOC4wNi0xOC0xOC0xOFwiLHN0cm9rZTpcInVybCgjYSlcIixcInN0cm9rZS13aWR0aFwiOlwiMlwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIwLjlzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKSx0KFwiY2lyY2xlXCIse2F0dHJzOntmaWxsOlwiY3VycmVudENvbG9yXCIsY3g6XCIzNlwiLGN5OlwiMThcIixyOlwiMVwifX0sW3QoXCJhbmltYXRlVHJhbnNmb3JtXCIse2F0dHJzOnthdHRyaWJ1dGVOYW1lOlwidHJhbnNmb3JtXCIsdHlwZTpcInJvdGF0ZVwiLGZyb206XCIwIDE4IDE4XCIsdG86XCIzNjAgMTggMThcIixkdXI6XCIwLjlzXCIscmVwZWF0Q291bnQ6XCJpbmRlZmluaXRlXCJ9fSldKV0pXSl9fSxTdGVwVGFiPXtuYW1lOlwiUVN0ZXBUYWJcIixkaXJlY3RpdmVzOntSaXBwbGU6UmlwcGxlfSxwcm9wczpbXCJ2bVwiXSxjb21wdXRlZDp7aGFzTmF2aWdhdGlvbjpmdW5jdGlvbigpe3JldHVybiF0aGlzLnZtLl9fc3RlcHBlci5ub0hlYWRlck5hdmlnYXRpb259LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJzdGVwLWVycm9yXCI6dGhpcy52bS5lcnJvcixcInN0ZXAtYWN0aXZlXCI6dGhpcy52bS5hY3RpdmUsXCJzdGVwLWRvbmVcIjp0aGlzLnZtLmRvbmUsXCJzdGVwLW5hdmlnYXRpb25cIjp0aGlzLnZtLmRvbmUmJnRoaXMuaGFzTmF2aWdhdGlvbixcInN0ZXAtd2FpdGluZ1wiOnRoaXMudm0ud2FpdGluZyxcInN0ZXAtZGlzYWJsZWRcIjp0aGlzLnZtLmRpc2FibGUsXCJzdGVwLWNvbG9yZWRcIjp0aGlzLnZtLmFjdGl2ZXx8dGhpcy52bS5kb25lLFwiaXRlbXMtY2VudGVyXCI6IXRoaXMudm0uX19zdGVwcGVyLnZlcnRpY2FsLFwiaXRlbXMtc3RhcnRcIjp0aGlzLnZtLl9fc3RlcHBlci52ZXJ0aWNhbCxcInEtc3RlcHBlci1maXJzdFwiOnRoaXMudm0uZmlyc3QsXCJxLXN0ZXBwZXItbGFzdFwiOnRoaXMudm0ubGFzdH19fSxtZXRob2RzOntfX3NlbGVjdDpmdW5jdGlvbigpe3RoaXMuaGFzTmF2aWdhdGlvbiYmdGhpcy52bS5zZWxlY3QoKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnZtLnN0ZXBJY29uP3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMudm0uc3RlcEljb259fSk6dChcInNwYW5cIixbdGhpcy52bS5pbm5lck9yZGVyKzFdKTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci10YWIgY29sLWdyb3cgZmxleCBuby13cmFwIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLG9uOntjbGljazp0aGlzLl9fc2VsZWN0fSxkaXJlY3RpdmVzOnRoaXMuaGFzTmF2aWdhdGlvbj9be25hbWU6XCJyaXBwbGVcIix2YWx1ZTp0aGlzLnZtLmRvbmV9XTpudWxsfSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1kb3Qgcm93IGZsZXgtY2VudGVyIHEtc3RlcHBlci1saW5lIHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInJvdyBmbGV4LWNlbnRlclwifSxbZV0pXSksdGhpcy52bS50aXRsZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLWxhYmVsIHEtc3RlcHBlci1saW5lIHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXRpdGxlXCJ9LFt0aGlzLnZtLnRpdGxlXSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1zdWJ0aXRsZVwifSxbdGhpcy52bS5zdWJ0aXRsZV0pXSk6bnVsbF0pfX0sUVN0ZXA9e25hbWU6XCJRU3RlcFwiLGluamVjdDp7X19zdGVwcGVyOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFTdGVwIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFTdGVwcGVyXCIpfX19LHByb3BzOntuYW1lOnt0eXBlOltOdW1iZXIsU3RyaW5nXSxkZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHVpZCgpfX0sZGVmYXVsdDpCb29sZWFuLHRpdGxlOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sc3VidGl0bGU6U3RyaW5nLGljb246U3RyaW5nLG9yZGVyOltOdW1iZXIsU3RyaW5nXSxlcnJvcjpCb29sZWFuLGFjdGl2ZUljb246U3RyaW5nLGVycm9ySWNvbjpTdHJpbmcsZG9uZUljb246U3RyaW5nLGRpc2FibGU6Qm9vbGVhbn0sd2F0Y2g6e29yZGVyOmZ1bmN0aW9uKCl7dGhpcy5fX3N0ZXBwZXIuX19zb3J0U3RlcHMoKX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aW5uZXJPcmRlcjowLGZpcnN0OiExLGxhc3Q6ITF9fSxjb21wdXRlZDp7c3RlcEljb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fc3RlcHBlcjtyZXR1cm4gdGhpcy5hY3RpdmU/dGhpcy5hY3RpdmVJY29ufHx0LmFjdGl2ZUljb258fHRoaXMuJHEuaWNvbi5zdGVwcGVyLmFjdGl2ZTp0aGlzLmVycm9yP3RoaXMuZXJyb3JJY29ufHx0LmVycm9ySWNvbnx8dGhpcy4kcS5pY29uLnN0ZXBwZXIuZXJyb3I6dGhpcy5kb25lJiYhdGhpcy5kaXNhYmxlP3RoaXMuZG9uZUljb258fHQuZG9uZUljb258fHRoaXMuJHEuaWNvbi5zdGVwcGVyLmRvbmU6dGhpcy5pY29ufSxhY3R1YWxPcmRlcjpmdW5jdGlvbigpe3JldHVybiBwYXJzZUludCh0aGlzLm9yZGVyfHx0aGlzLmlubmVyT3JkZXIsMTApfSxhY3RpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3N0ZXBwZXIuc3RlcD09PXRoaXMubmFtZX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmRpc2FibGUmJnRoaXMuX19zdGVwcGVyLmN1cnJlbnRPcmRlcj50aGlzLmlubmVyT3JkZXJ9LHdhaXRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5kaXNhYmxlJiZ0aGlzLl9fc3RlcHBlci5jdXJyZW50T3JkZXI8dGhpcy5pbm5lck9yZGVyfSxzdHlsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWN0dWFsT3JkZXI7cmV0dXJue1wiLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91cFwiOnQsXCItbXMtZmxleC1vcmRlclwiOnQsb3JkZXI6dH19LGNsYXNzZXM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3N0ZXBwZXIudmVydGljYWwpe3ZhciB0PVtdO3JldHVybiF0aGlzLmFjdGl2ZSYmdC5wdXNoKFwiaGlkZGVuXCIpLG51bGwhPT10aGlzLl9fc3RlcHBlci5hbmltYXRpb24mJnQucHVzaCh0aGlzLl9fc3RlcHBlci5hbmltYXRpb24pLHR9fX0sbWV0aG9kczp7c2VsZWN0OmZ1bmN0aW9uKCl7dGhpcy5kb25lJiZ0aGlzLl9fc3RlcHBlci5nb1RvU3RlcCh0aGlzLm5hbWUpfSxfX2dldENvbnRhaW5lcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXN0ZXAtY29udGVudFwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXN0ZXBwZXItc3RlcC1pbm5lclwifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pOm51bGw7cmV0dXJuIHRoaXMuX19zdGVwcGVyLnZlcnRpY2FsP3QoUVNsaWRlVHJhbnNpdGlvbixbZV0pOmV9fSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy5fX3N0ZXBwZXIuX19yZWdpc3RlclN0ZXAodGhpcyksdGhpcy5kZWZhdWx0JiZ0aGlzLnNlbGVjdCgpfSxiZWZvcmVEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fX3N0ZXBwZXIuX191bnJlZ2lzdGVyU3RlcCh0aGlzKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLXN0ZXBcIixzdHlsZTp0aGlzLnN0eWxlfSxbdGhpcy5fX3N0ZXBwZXIudmVydGljYWw/dChTdGVwVGFiLHtwcm9wczp7dm06dGhpc319KTpudWxsLHRoaXMuX19nZXRDb250YWluZXIodCldKX19LFFTdGVwcGVyPXtuYW1lOlwiUVN0ZXBwZXJcIixwcm9wczp7dmFsdWU6W051bWJlcixTdHJpbmddLGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwicHJpbWFyeVwifSx2ZXJ0aWNhbDpCb29sZWFuLGFsdGVybmF0aXZlTGFiZWxzOkJvb2xlYW4sbm9IZWFkZXJOYXZpZ2F0aW9uOkJvb2xlYW4sY29udHJhY3RhYmxlOkJvb2xlYW4sZG9uZUljb246Qm9vbGVhbixhY3RpdmVJY29uOkJvb2xlYW4sZXJyb3JJY29uOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57YW5pbWF0aW9uOm51bGwsc3RlcDp0aGlzLnZhbHVlfHxudWxsLHN0ZXBzOltdfX0scHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntfX3N0ZXBwZXI6dGhpc319LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmdvVG9TdGVwKHQpfSxzdGVwOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMudmVydGljYWwpe3ZhciBpPXRoaXMuc3RlcHMuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWU9PT10fSkscz10aGlzLnN0ZXBzLmZpbmRJbmRleChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZX0pO3RoaXMuYW5pbWF0aW9uPWk8cz9cImFuaW1hdGUtZmFkZS1sZWZ0XCI6aT5zP1wiYW5pbWF0ZS1mYWRlLXJpZ2h0XCI6bnVsbH19fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3ZhciB0PVtcInEtc3RlcHBlci1cIisodGhpcy52ZXJ0aWNhbD9cInZlcnRpY2FsXCI6XCJob3Jpem9udGFsXCIpLFwidGV4dC1cIit0aGlzLmNvbG9yXTtyZXR1cm4gdGhpcy5jb250cmFjdGFibGUmJnQucHVzaChcInEtc3RlcHBlci1jb250cmFjdGFibGVcIiksdH0saGFzU3RlcHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGVwcy5sZW5ndGg+MH0sY3VycmVudFN0ZXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuaGFzU3RlcHMpcmV0dXJuIHRoaXMuc3RlcHMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dC5zdGVwfSl9LGN1cnJlbnRPcmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuY3VycmVudFN0ZXApcmV0dXJuIHRoaXMuY3VycmVudFN0ZXAuaW5uZXJPcmRlcn0sbGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RofX0sbWV0aG9kczp7Z29Ub1N0ZXA6ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLnN0ZXAhPT10JiZ2b2lkIDAhPT10JiYodGhpcy5zdGVwPXQsdGhpcy4kZW1pdChcImlucHV0XCIsdCksdGhpcy4kZW1pdChcInN0ZXBcIix0KSx0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe0pTT04uc3RyaW5naWZ5KHQpIT09SlNPTi5zdHJpbmdpZnkoZS52YWx1ZSkmJmUuJGVtaXQoXCJjaGFuZ2VcIix0KX0pKX0sbmV4dDpmdW5jdGlvbigpe3RoaXMuX19nbygxKX0scHJldmlvdXM6ZnVuY3Rpb24oKXt0aGlzLl9fZ28oLTEpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaGFzU3RlcHMmJnRoaXMuZ29Ub1N0ZXAodGhpcy5zdGVwc1swXS5uYW1lKX0sX19nbzpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMuY3VycmVudE9yZGVyO2lmKHZvaWQgMD09PWkpe2lmKCF0aGlzLmhhc1N0ZXBzKXJldHVybjtlPXRoaXMuc3RlcHNbMF0ubmFtZX1lbHNle2Rve2krPXR9d2hpbGUoaT49MCYmaTx0aGlzLmxlbmd0aC0xJiZ0aGlzLnN0ZXBzW2ldLmRpc2FibGUpO2lmKGk8MHx8aT50aGlzLmxlbmd0aC0xfHx0aGlzLnN0ZXBzW2ldLmRpc2FibGUpcmV0dXJuO2U9dGhpcy5zdGVwc1tpXS5uYW1lfXRoaXMuZ29Ub1N0ZXAoZSl9LF9fc29ydFN0ZXBzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLnN0ZXBzLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hY3R1YWxPcmRlci1lLmFjdHVhbE9yZGVyfSk7dmFyIGU9dGhpcy5zdGVwcy5sZW5ndGgtMTt0aGlzLnN0ZXBzLmZvckVhY2goZnVuY3Rpb24odCxpKXt0LmlubmVyT3JkZXI9aSx0LmZpcnN0PTA9PT1pLHQubGFzdD1pPT09ZX0pLHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7dC5zdGVwcy5zb21lKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFjdGl2ZX0pfHx0LmdvVG9TdGVwKHQuc3RlcHNbMF0ubmFtZSl9KX0sX19yZWdpc3RlclN0ZXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaCh0KSx0aGlzLl9fc29ydFN0ZXBzKCksdGhpc30sX191bnJlZ2lzdGVyU3RlcDpmdW5jdGlvbih0KXt0aGlzLnN0ZXBzPXRoaXMuc3RlcHMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX19zb3J0U3RlcHM9ZnJhbWVEZWJvdW5jZSh0aGlzLl9fc29ydFN0ZXBzKX0scmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyIGNvbHVtbiBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0aGlzLnZlcnRpY2FsP251bGw6dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtc3RlcHBlci1oZWFkZXIgcm93IGl0ZW1zLXN0cmV0Y2gganVzdGlmeS1iZXR3ZWVuIHNoYWRvdy0xXCIsY2xhc3M6e1wiYWx0ZXJuYXRpdmUtbGFiZWxzXCI6dGhpcy5hbHRlcm5hdGl2ZUxhYmVsc319LHRoaXMuc3RlcHMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0KFN0ZXBUYWIse2tleTplLm5hbWUscHJvcHM6e3ZtOmV9fSl9KSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sUVN0ZXBwZXJOYXZpZ2F0aW9uPXtuYW1lOlwiUVN0ZXBwZXJOYXZpZ2F0aW9uXCIscmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS1zdGVwcGVyLW5hdiBvcmRlci1sYXN0IHJvdyBpdGVtcy1jZW50ZXJcIn0sW3RoaXMuJHNsb3RzLmxlZnQsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcImNvbFwifSksdGhpcy4kc2xvdHMuZGVmYXVsdF0pfX0sVGFiTWl4aW49e2RpcmVjdGl2ZXM6e1JpcHBsZTpSaXBwbGV9LHByb3BzOntsYWJlbDpTdHJpbmcsaWNvbjpTdHJpbmcsZGlzYWJsZTpCb29sZWFuLGhpZGRlbjpCb29sZWFuLGhpZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJcIn0sbmFtZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybiB1aWQoKX19LGFsZXJ0OkJvb2xlYW4sY291bnQ6W051bWJlcixTdHJpbmddLGNvbG9yOlN0cmluZyx0YWJpbmRleDpOdW1iZXJ9LGluamVjdDp7ZGF0YTp7ZGVmYXVsdDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJRVGFiL1FSb3V0ZVRhYiBjb21wb25lbnRzIG5lZWQgdG8gYmUgY2hpbGQgb2YgUVRhYnNcIil9fSxzZWxlY3RUYWI6e319LHdhdGNoOnthY3RpdmU6ZnVuY3Rpb24odCl7dCYmdGhpcy4kZW1pdChcInNlbGVjdFwiLHRoaXMubmFtZSl9fSxjb21wdXRlZDp7YWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS50YWJOYW1lPT09dGhpcy5uYW1lfSxjbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIHQ9e2FjdGl2ZTp0aGlzLmFjdGl2ZSxoaWRkZW46dGhpcy5oaWRkZW4sZGlzYWJsZWQ6dGhpcy5kaXNhYmxlLFwicS10YWItZnVsbFwiOnRoaXMuaWNvbiYmdGhpcy5sYWJlbCxcInEtdGFiLW9ubHktbGFiZWxcIjohdGhpcy5pY29uJiZ0aGlzLmxhYmVsLFwiaGlkZS1ub25lXCI6IXRoaXMuaGlkZSxcImhpZGUtaWNvblwiOlwiaWNvblwiPT09dGhpcy5oaWRlLFwiaGlkZS1sYWJlbFwiOlwibGFiZWxcIj09PXRoaXMuaGlkZX0sZT10aGlzLmRhdGEuaW52ZXJ0ZWQ/dGhpcy5jb2xvcnx8dGhpcy5kYXRhLnRleHRDb2xvcnx8dGhpcy5kYXRhLmNvbG9yOnRoaXMuY29sb3I7cmV0dXJuIGUmJih0W1widGV4dC1cIitlXT0hMCksdH0sYmFyU3R5bGU6ZnVuY3Rpb24oKXtpZighdGhpcy5hY3RpdmV8fCF0aGlzLmRhdGEuaGlnaGxpZ2h0KXJldHVyblwiZGlzcGxheTogbm9uZTtcIn0sY29tcHV0ZWRUYWJJbmRleDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGV8fHRoaXMuYWN0aXZlPy0xOnRoaXMudGFiaW5kZXh8fDB9fSxtZXRob2RzOntfX2dldFRhYk1ldGE6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY291bnQ/W3QoUUNoaXAse3N0YXRpY0NsYXNzOlwicS10YWItbWV0YVwiLHByb3BzOntmbG9hdGluZzohMH19LFt0aGlzLmNvdW50XSldOnRoaXMuYWxlcnQ/W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYi1tZXRhIHEtZG90XCJ9KV06dm9pZCAwfSxfX2dldFRhYkNvbnRlbnQ6ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHRoaXMuaWNvbiYmZS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYi1pY29uLXBhcmVudCByZWxhdGl2ZS1wb3NpdGlvblwifSxbdChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRhYi1pY29uXCIscHJvcHM6e25hbWU6dGhpcy5pY29ufX0pLHRoaXMuX19nZXRUYWJNZXRhKHQpXSkpLHRoaXMubGFiZWwmJmUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItbGFiZWwtcGFyZW50IHJlbGF0aXZlLXBvc2l0aW9uXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItbGFiZWxcIn0sW3RoaXMubGFiZWxdKSx0aGlzLl9fZ2V0VGFiTWV0YSh0KV0pKSwoZT1lLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KSkucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzLWJhclwiLHN0eWxlOnRoaXMuYmFyU3R5bGUsY2xhc3M6dGhpcy5kYXRhLnVuZGVybGluZUNsYXNzfSkpLGUucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWItZm9jdXMtaGVscGVyIGFic29sdXRlLWZ1bGxcIixhdHRyczp7dGFiaW5kZXg6dGhpcy5jb21wdXRlZFRhYkluZGV4fX0pKSxlfX19LFFSb3V0ZVRhYj17bmFtZTpcIlFSb3V0ZVRhYlwiLG1peGluczpbVGFiTWl4aW4sUm91dGVyTGlua01peGluXSxpbmplY3Q6e3NlbGVjdFRhYlJvdXRlcjp7fX0sd2F0Y2g6eyRyb3V0ZTpmdW5jdGlvbigpe3RoaXMuY2hlY2tJZlNlbGVjdGVkKCl9fSxtZXRob2RzOntzZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiY2xpY2tcIix0aGlzLm5hbWUpLHRoaXMuZGlzYWJsZXx8KHRoaXMuJGVsLmRpc3BhdGNoRXZlbnQoZXZ0KSx0aGlzLnNlbGVjdFRhYlJvdXRlcih7dmFsdWU6dGhpcy5uYW1lLHNlbGVjdGVkOiEwfSkpfSxjaGVja0lmU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uKCl7aWYodC4kZWwuY2xhc3NMaXN0LmNvbnRhaW5zKFwicS1yb3V0ZXItbGluay1leGFjdC1hY3RpdmVcIikpdC5zZWxlY3RUYWJSb3V0ZXIoe3ZhbHVlOnQubmFtZSxzZWxlY3RhYmxlOiEwLGV4YWN0OiEwfSk7ZWxzZSBpZih0LiRlbC5jbGFzc0xpc3QuY29udGFpbnMoXCJxLXJvdXRlci1saW5rLWFjdGl2ZVwiKSl7dmFyIGU9dC4kcm91dGVyLnJlc29sdmUodC50byx2b2lkIDAsdC5hcHBlbmQpO3Quc2VsZWN0VGFiUm91dGVyKHt2YWx1ZTp0Lm5hbWUsc2VsZWN0YWJsZTohMCxwcmlvcml0eTplLmhyZWYubGVuZ3RofSl9ZWxzZSB0LmFjdGl2ZSYmdC5zZWxlY3RUYWJSb3V0ZXIoe3ZhbHVlOm51bGx9KX0pfX0sbW91bnRlZDpmdW5jdGlvbigpe3RoaXMuY2hlY2tJZlNlbGVjdGVkKCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwicm91dGVyLWxpbmtcIix7cHJvcHM6e3RhZzpcImFcIix0bzp0aGlzLnRvLGV4YWN0OnRoaXMuZXhhY3QsYXBwZW5kOnRoaXMuYXBwZW5kLHJlcGxhY2U6dGhpcy5yZXBsYWNlLGV2ZW50OnJvdXRlckxpbmtFdmVudE5hbWUsYWN0aXZlQ2xhc3M6XCJxLXJvdXRlci1saW5rLWFjdGl2ZVwiLGV4YWN0QWN0aXZlQ2xhc3M6XCJxLXJvdXRlci1saW5rLWV4YWN0LWFjdGl2ZVwifSxhdHRyczp7dGFiaW5kZXg6LTF9LG5hdGl2ZU9uOntjbGljazp0aGlzLnNlbGVjdCxrZXl1cDpmdW5jdGlvbih0KXtyZXR1cm4gMTM9PT10LmtleUNvZGUmJmUuc2VsZWN0KHQpfX0sc3RhdGljQ2xhc3M6XCJxLWxpbmsgcS10YWIgY29sdW1uIGZsZXgtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGRpcmVjdGl2ZXM6W3tuYW1lOlwicmlwcGxlXCJ9XX0sdGhpcy5fX2dldFRhYkNvbnRlbnQodCkpfX0sUVRhYj17bmFtZTpcIlFUYWJcIixtaXhpbnM6W1RhYk1peGluXSxwcm9wczp7ZGVmYXVsdDpCb29sZWFufSxtZXRob2RzOntzZWxlY3Q6ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwiY2xpY2tcIix0aGlzLm5hbWUpLHRoaXMuZGlzYWJsZXx8dGhpcy5zZWxlY3RUYWIodGhpcy5uYW1lKX19LG1vdW50ZWQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHQmJiF0aGlzLmRpc2FibGUmJnRoaXMuc2VsZWN0KCl9LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWIgY29sdW1uIGZsZXgtY2VudGVyIHJlbGF0aXZlLXBvc2l0aW9uXCIsY2xhc3M6dGhpcy5jbGFzc2VzLGF0dHJzOntcImRhdGEtdGFiLW5hbWVcIjp0aGlzLm5hbWV9LG9uOntjbGljazp0aGlzLnNlbGVjdCxrZXl1cDpmdW5jdGlvbih0KXtyZXR1cm4gMTM9PT10LmtleUNvZGUmJmUuc2VsZWN0KHQpfX0sZGlyZWN0aXZlczpbe25hbWU6XCJyaXBwbGVcIn1dfSx0aGlzLl9fZ2V0VGFiQ29udGVudCh0KSl9fSxRVGFiUGFuZT17bmFtZTpcIlFUYWJQYW5lXCIsaW5qZWN0OntkYXRhOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFUYWJQYW5lIG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFUYWJzXCIpfX19LHByb3BzOntuYW1lOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH0sa2VlcEFsaXZlOkJvb2xlYW59LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd246ITF9fSxjb21wdXRlZDp7YWN0aXZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS50YWJOYW1lPT09dGhpcy5uYW1lfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJue2hpZGRlbjohdGhpcy5hY3RpdmUsXCJhbmltYXRlLWZhZGUtbGVmdFwiOlwibGVmdFwiPT09dGhpcy5kYXRhLmRpcmVjdGlvbixcImFuaW1hdGUtZmFkZS1yaWdodFwiOlwicmlnaHRcIj09PXRoaXMuZGF0YS5kaXJlY3Rpb259fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYi1wYW5lXCIsY2xhc3M6dGhpcy5jbGFzc2VzfSx0aGlzLiRzbG90cy5kZWZhdWx0KTtpZih0aGlzLmtlZXBBbGl2ZSl7aWYoIXRoaXMuc2hvd24mJiF0aGlzLmFjdGl2ZSlyZXR1cm47cmV0dXJuIHRoaXMuc2hvd249ITAsZX1pZih0aGlzLnNob3duPXRoaXMuYWN0aXZlLHRoaXMuYWN0aXZlKXJldHVybiBlfX0sc2Nyb2xsTmF2aWdhdGlvblNwZWVkPTUsZGVib3VuY2VEZWxheT01MDtmdW5jdGlvbiBnZXRVbmRlcmxpbmVDbGFzcyh0KXtpZih0KXJldHVyblwidGV4dC1cIit0fXZhciBRVGFicz17bmFtZTpcIlFUYWJzXCIscHJvdmlkZTpmdW5jdGlvbigpe3JldHVybntkYXRhOnRoaXMuZGF0YSxzZWxlY3RUYWI6dGhpcy5zZWxlY3RUYWIsc2VsZWN0VGFiUm91dGVyOnRoaXMuc2VsZWN0VGFiUm91dGVyfX0sZGlyZWN0aXZlczp7VG91Y2hTd2lwZTpUb3VjaFN3aXBlfSxwcm9wczp7dmFsdWU6U3RyaW5nLGFsaWduOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwibGVmdFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCIsXCJqdXN0aWZ5XCJdLmluY2x1ZGVzKHQpfX0scG9zaXRpb246e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJ0b3BcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1widG9wXCIsXCJib3R0b21cIl0uaW5jbHVkZXModCl9fSxjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0sdGV4dENvbG9yOlN0cmluZyxpbnZlcnRlZDpCb29sZWFuLHR3b0xpbmVzOkJvb2xlYW4sZ2xvc3N5OkJvb2xlYW4sYW5pbWF0ZWQ6Qm9vbGVhbixzd2lwZWFibGU6Qm9vbGVhbixwYW5lc0NvbnRhaW5lckNsYXNzOlN0cmluZyx1bmRlcmxpbmVDb2xvcjpTdHJpbmd9LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudEVsOm51bGwscG9zYmFyOnt3aWR0aDowLGxlZnQ6MH0sZGF0YTp7aGlnaGxpZ2h0OiEwLHRhYk5hbWU6dGhpcy52YWx1ZXx8XCJcIixjb2xvcjp0aGlzLmNvbG9yLHRleHRDb2xvcjp0aGlzLnRleHRDb2xvcixpbnZlcnRlZDp0aGlzLmludmVydGVkLHVuZGVybGluZUNsYXNzOmdldFVuZGVybGluZUNsYXNzKHRoaXMudW5kZXJsaW5lQ29sb3IpLGRpcmVjdGlvbjpudWxsfX19LHdhdGNoOnt2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNlbGVjdFRhYih0KX0sY29sb3I6ZnVuY3Rpb24odCl7dGhpcy5kYXRhLmNvbG9yPXR9LHRleHRDb2xvcjpmdW5jdGlvbih0KXt0aGlzLmRhdGEudGV4dENvbG9yPXR9LGludmVydGVkOmZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5pbnZlcnRlZD10fSx1bmRlcmxpbmVDb2xvcjpmdW5jdGlvbih0KXt0aGlzLmRhdGEudW5kZXJsaW5lQ2xhc3M9Z2V0VW5kZXJsaW5lQ2xhc3ModCl9fSxjb21wdXRlZDp7Y2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcInEtdGFicy1wb3NpdGlvbi1cIit0aGlzLnBvc2l0aW9uLFwicS10YWJzLVwiKyh0aGlzLmludmVydGVkP1wiaW52ZXJ0ZWRcIjpcIm5vcm1hbFwiKSx0aGlzLnR3b0xpbmVzP1wicS10YWJzLXR3by1saW5lc1wiOlwiXCJdfSxpbm5lckNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLXRhYnMtYWxpZ24tXCIrdGhpcy5hbGlnbl07cmV0dXJuIHRoaXMuZ2xvc3N5JiZ0LnB1c2goXCJnbG9zc3lcIiksdGhpcy5pbnZlcnRlZD90LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8dGhpcy5jb2xvcikpOih0LnB1c2goXCJiZy1cIit0aGlzLmNvbG9yKSx0LnB1c2goXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8XCJ3aGl0ZVwiKSkpLHR9LHBvc2JhckNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5pbnZlcnRlZCYmdC5wdXNoKFwidGV4dC1cIisodGhpcy50ZXh0Q29sb3J8fHRoaXMuY29sb3IpKSx0aGlzLmRhdGEuaGlnaGxpZ2h0JiZ0LnB1c2goXCJoaWdobGlnaHRcIiksdH19LG1ldGhvZHM6e2dvOmZ1bmN0aW9uKHQpe3ZhciBlPTA7aWYodGhpcy5kYXRhLnRhYk5hbWUpe3ZhciBpPXRoaXMuJHJlZnMuc2Nyb2xsZXIucXVlcnlTZWxlY3RvcignW2RhdGEtdGFiLW5hbWU9XCInK3RoaXMuZGF0YS50YWJOYW1lKydcIl0nKTtpJiYoZT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMuJHJlZnMuc2Nyb2xsZXIuY2hpbGRyZW4saSkpfXZhciBzPXRoaXMuJHJlZnMuc2Nyb2xsZXIucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXRhYi1uYW1lXVwiKTsoZSs9dCk+LTEmJmU8cy5sZW5ndGgmJnRoaXMuc2VsZWN0VGFiKHNbZV0uZ2V0QXR0cmlidXRlKFwiZGF0YS10YWItbmFtZVwiKSl9LHByZXZpb3VzOmZ1bmN0aW9uKCl7dGhpcy5nbygtMSl9LG5leHQ6ZnVuY3Rpb24oKXt0aGlzLmdvKDEpfSxzZWxlY3RUYWI6ZnVuY3Rpb24odCl7aWYodGhpcy5kYXRhLnRhYk5hbWUhPT10KXt0aGlzLmRhdGEudGFiTmFtZT10O3ZhciBlPXRoaXMuX19nZXRUYWJFbEJ5TmFtZSh0KTtpZihlKWlmKHRoaXMuX19zY3JvbGxUb1RhYihlKSx0aGlzLmN1cnJlbnRFbD1lLHRoaXMub2xkRWwpe2lmKHRoaXMuYW5pbWF0ZWQpe3ZhciBpPXRoaXMuJHJlZnMuc2Nyb2xsZXIuY2hpbGRyZW47dGhpcy5kYXRhLmRpcmVjdGlvbj1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGksZSk8QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChpLHRoaXMub2xkRWwpP1wibGVmdFwiOlwicmlnaHRcIn10aGlzLl9fcmVwb3NpdGlvbkJhcigpfWVsc2UgdGhpcy5vbGRFbD1lO2Vsc2UgdGhpcy5vbGRFbD1udWxsLHRoaXMuZGF0YS5kaXJlY3Rpb249bnVsbDt0aGlzLiRlbWl0KFwiaW5wdXRcIix0LHRoaXMuZGF0YS5kaXJlY3Rpb24pLHRoaXMuJGVtaXQoXCJzZWxlY3RcIix0LHRoaXMuZGF0YS5kaXJlY3Rpb24pfX0sc2VsZWN0VGFiUm91dGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LnZhbHVlLHM9dC5zZWxlY3RhYmxlLG49dC5leGFjdCxvPXQuc2VsZWN0ZWQscj10LnByaW9yaXR5LGE9IXRoaXMuYnVmZmVyLmxlbmd0aCxsPWE/LTE6dGhpcy5idWZmZXIuZmluZEluZGV4KGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlPT09aX0pO2lmKGw+LTEpe3ZhciBjPXRoaXMuYnVmZmVyW2xdO24mJihjLmV4YWN0PW4pLHMmJihjLnNlbGVjdGFibGU9cyksbyYmKGMuc2VsZWN0ZWQ9byksciYmKGMucHJpb3JpdHk9cil9ZWxzZSB0aGlzLmJ1ZmZlci5wdXNoKHQpO2EmJih0aGlzLmJ1ZmZlclRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgdD1lLmJ1ZmZlci5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LmV4YWN0JiZ0LnNlbGVjdGVkfSl8fGUuYnVmZmVyLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2VsZWN0YWJsZSYmdC5zZWxlY3RlZH0pfHxlLmJ1ZmZlci5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LmV4YWN0fSl8fGUuYnVmZmVyLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5zZWxlY3RhYmxlfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiBlLnByaW9yaXR5LXQucHJpb3JpdHl9KVswXXx8ZS5idWZmZXJbMF07ZS5idWZmZXIubGVuZ3RoPTAsZS5zZWxlY3RUYWIodC52YWx1ZSl9LDEwMCkpfSxfX3N3aXBlOmZ1bmN0aW9uKHQpe3RoaXMuZ28oXCJsZWZ0XCI9PT10LmRpcmVjdGlvbj8xOi0xKX0sX19yZXBvc2l0aW9uQmFyOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztjbGVhclRpbWVvdXQodGhpcy50aW1lcik7dmFyIGU9ITEsaT10aGlzLiRyZWZzLnBvc2JhcixzPXRoaXMuY3VycmVudEVsO2lmKCExIT09dGhpcy5kYXRhLmhpZ2hsaWdodCYmKHRoaXMuZGF0YS5oaWdobGlnaHQ9ITEsZT0hMCksIXMpcmV0dXJuIHRoaXMuZmluYWxQb3NiYXI9e3dpZHRoOjAsbGVmdDowfSx2b2lkIHRoaXMuX19zZXRQb3NpdGlvbkJhcigwLDApO3ZhciBuPWkucGFyZW50Tm9kZS5vZmZzZXRMZWZ0O2UmJnRoaXMub2xkRWwmJnRoaXMuX19zZXRQb3NpdGlvbkJhcih0aGlzLm9sZEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHRoaXMub2xkRWwub2Zmc2V0TGVmdC1uKSx0aGlzLnRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgZT1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLG89cy5vZmZzZXRMZWZ0LW47aS5jbGFzc0xpc3QucmVtb3ZlKFwiY29udHJhY3RcIiksdC5vbGRFbD1zLHQuZmluYWxQb3NiYXI9e3dpZHRoOmUsbGVmdDpvfSx0Ll9fc2V0UG9zaXRpb25CYXIodC5wb3NiYXIubGVmdDxvP28rZS10LnBvc2Jhci5sZWZ0OnQucG9zYmFyLmxlZnQrdC5wb3NiYXIud2lkdGgtbyx0LnBvc2Jhci5sZWZ0PG8/dC5wb3NiYXIubGVmdDpvKX0sMjApfSxfX3NldFBvc2l0aW9uQmFyOmZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ZSYmKGU9MCksdGhpcy5wb3NiYXIud2lkdGghPT10fHx0aGlzLnBvc2Jhci5sZWZ0IT09ZSl7dGhpcy5wb3NiYXI9e3dpZHRoOnQsbGVmdDplfTt2YXIgaT10aGlzLiRxLmkxOG4ucnRsP2UrdDplO3RoaXMuJHJlZnMucG9zYmFyLnN0eWxlLnRyYW5zZm9ybT1cInRyYW5zbGF0ZVgoXCIraStcInB4KSBzY2FsZVgoXCIrdCtcIilcIn1lbHNlIHRoaXMuX191cGRhdGVQb3NiYXJUcmFuc2l0aW9uKCl9LF9fdXBkYXRlUG9zYmFyVHJhbnNpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXMuZmluYWxQb3NiYXIud2lkdGg9PT10aGlzLnBvc2Jhci53aWR0aCYmdGhpcy5maW5hbFBvc2Jhci5sZWZ0PT09dGhpcy5wb3NiYXIubGVmdClyZXR1cm4gdGhpcy5wb3NiYXI9e30sdm9pZCghMCE9PXRoaXMuZGF0YS5oaWdobGlnaHQmJih0aGlzLmRhdGEuaGlnaGxpZ2h0PSEwKSk7dGhpcy4kcmVmcy5wb3NiYXIuY2xhc3NMaXN0LmFkZChcImNvbnRyYWN0XCIpLHRoaXMuX19zZXRQb3NpdGlvbkJhcih0aGlzLmZpbmFsUG9zYmFyLndpZHRoLHRoaXMuZmluYWxQb3NiYXIubGVmdCl9LF9fcmVkcmF3OmZ1bmN0aW9uKCl7dGhpcy4kcS5wbGF0Zm9ybS5pcy5kZXNrdG9wJiYodGhpcy5zY3JvbGxlcldpZHRoPXdpZHRoKHRoaXMuJHJlZnMuc2Nyb2xsZXIpLDA9PT10aGlzLnNjcm9sbGVyV2lkdGgmJjA9PT10aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbFdpZHRofHwodGhpcy5zY3JvbGxlcldpZHRoKzU8dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxXaWR0aD8odGhpcy4kcmVmcy50YWJzLmNsYXNzTGlzdC5hZGQoXCJzY3JvbGxhYmxlXCIpLHRoaXMuc2Nyb2xsYWJsZT0hMCx0aGlzLl9fdXBkYXRlU2Nyb2xsSW5kaWNhdG9yKCkpOih0aGlzLiRyZWZzLnRhYnMuY2xhc3NMaXN0LnJlbW92ZShcInNjcm9sbGFibGVcIiksdGhpcy5zY3JvbGxhYmxlPSExKSkpfSxfX3VwZGF0ZVNjcm9sbEluZGljYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuJHEucGxhdGZvcm0uaXMuZGVza3RvcCYmdGhpcy5zY3JvbGxhYmxlKXt2YXIgdD10aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQrd2lkdGgodGhpcy4kcmVmcy5zY3JvbGxlcikrNT49dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxXaWR0aD9cImFkZFwiOlwicmVtb3ZlXCI7dGhpcy4kcmVmcy5sZWZ0U2Nyb2xsLmNsYXNzTGlzdFt0aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQ8PTA/XCJhZGRcIjpcInJlbW92ZVwiXShcImRpc2FibGVkXCIpLHRoaXMuJHJlZnMucmlnaHRTY3JvbGwuY2xhc3NMaXN0W3RdKFwiZGlzYWJsZWRcIil9fSxfX2dldFRhYkVsQnlOYW1lOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJGNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZT09PXQmJmUuJGVsJiYxPT09ZS4kZWwubm9kZVR5cGV9KTtpZihlKXJldHVybiBlLiRlbH0sX19maW5kVGFiQW5kU2Nyb2xsOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5fX3Njcm9sbFRvVGFiKGkuX19nZXRUYWJFbEJ5TmFtZSh0KSxlKX0sNCpkZWJvdW5jZURlbGF5KX0sX19zY3JvbGxUb1RhYjpmdW5jdGlvbih0LGUpe2lmKHQmJnRoaXMuc2Nyb2xsYWJsZSl7dmFyIGk9dGhpcy4kcmVmcy5zY3JvbGxlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1zLndpZHRoLG89cy5sZWZ0LWkubGVmdDtvPDA/ZT90aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQrPW86dGhpcy5fX2FuaW1TY3JvbGxUbyh0aGlzLiRyZWZzLnNjcm9sbGVyLnNjcm9sbExlZnQrbyk6KG8rPW4tdGhpcy4kcmVmcy5zY3JvbGxlci5vZmZzZXRXaWR0aCk+MCYmKGU/dGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0Kz1vOnRoaXMuX19hbmltU2Nyb2xsVG8odGhpcy4kcmVmcy5zY3JvbGxlci5zY3JvbGxMZWZ0K28pKX19LF9fYW5pbVNjcm9sbFRvOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fX3N0b3BBbmltU2Nyb2xsKCksdGhpcy5fX3Njcm9sbFRvd2FyZHModCksdGhpcy5zY3JvbGxUaW1lcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2UuX19zY3JvbGxUb3dhcmRzKHQpJiZlLl9fc3RvcEFuaW1TY3JvbGwoKX0sNSl9LF9fc2Nyb2xsVG9TdGFydDpmdW5jdGlvbigpe3RoaXMuX19hbmltU2Nyb2xsVG8oMCl9LF9fc2Nyb2xsVG9FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9fYW5pbVNjcm9sbFRvKDk5OTkpfSxfX3N0b3BBbmltU2Nyb2xsOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbCh0aGlzLnNjcm9sbFRpbWVyKX0sX19zY3JvbGxUb3dhcmRzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdCxpPXQ8ZT8tMToxLHM9ITE7cmV0dXJuKGUrPWkqc2Nyb2xsTmF2aWdhdGlvblNwZWVkKTwwPyhzPSEwLGU9MCk6KC0xPT09aSYmZTw9dHx8MT09PWkmJmU+PXQpJiYocz0hMCxlPXQpLHRoaXMuJHJlZnMuc2Nyb2xsZXIuc2Nyb2xsTGVmdD1lLHN9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYnMgZmxleCBuby13cmFwIG92ZXJmbG93LWhpZGRlblwiLGNsYXNzOnRoaXMuY2xhc3Nlc30sW3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYnMtaGVhZCByb3dcIixyZWY6XCJ0YWJzXCIsY2xhc3M6dGhpcy5pbm5lckNsYXNzZXN9LFt0KFwiZGl2XCIse3JlZjpcInNjcm9sbGVyXCIsc3RhdGljQ2xhc3M6XCJxLXRhYnMtc2Nyb2xsZXIgcm93IG5vLXdyYXBcIn0sW3RoaXMuJHNsb3RzLnRpdGxlLHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJyZWxhdGl2ZS1wb3NpdGlvbiBzZWxmLXN0cmV0Y2ggcS10YWJzLWdsb2JhbC1iYXItY29udGFpbmVyXCIsY2xhc3M6dGhpcy5wb3NiYXJDbGFzc2VzfSxbdChcImRpdlwiLHtyZWY6XCJwb3NiYXJcIixzdGF0aWNDbGFzczpcInEtdGFicy1iYXIgcS10YWJzLWdsb2JhbC1iYXJcIixjbGFzczp0aGlzLmRhdGEudW5kZXJsaW5lQ2xhc3Msb246e3RyYW5zaXRpb25lbmQ6dGhpcy5fX3VwZGF0ZVBvc2JhclRyYW5zaXRpb259fSldKV0pLHQoXCJkaXZcIix7cmVmOlwibGVmdFNjcm9sbFwiLHN0YXRpY0NsYXNzOlwicm93IGZsZXgtY2VudGVyIHEtdGFicy1sZWZ0LXNjcm9sbFwiLG9uOnttb3VzZWRvd246dGhpcy5fX3Njcm9sbFRvU3RhcnQsdG91Y2hzdGFydDp0aGlzLl9fc2Nyb2xsVG9TdGFydCxtb3VzZXVwOnRoaXMuX19zdG9wQW5pbVNjcm9sbCxtb3VzZWxlYXZlOnRoaXMuX19zdG9wQW5pbVNjcm9sbCx0b3VjaGVuZDp0aGlzLl9fc3RvcEFuaW1TY3JvbGx9fSxbdChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnRhYnMubGVmdH19KV0pLHQoXCJkaXZcIix7cmVmOlwicmlnaHRTY3JvbGxcIixzdGF0aWNDbGFzczpcInJvdyBmbGV4LWNlbnRlciBxLXRhYnMtcmlnaHQtc2Nyb2xsXCIsb246e21vdXNlZG93bjp0aGlzLl9fc2Nyb2xsVG9FbmQsdG91Y2hzdGFydDp0aGlzLl9fc2Nyb2xsVG9FbmQsbW91c2V1cDp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsbW91c2VsZWF2ZTp0aGlzLl9fc3RvcEFuaW1TY3JvbGwsdG91Y2hlbmQ6dGhpcy5fX3N0b3BBbmltU2Nyb2xsfX0sW3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi50YWJzLnJpZ2h0fX0pXSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJzLXBhbmVzXCIsY2xhc3M6dGhpcy5wYW5lc0NvbnRhaW5lckNsYXNzLGRpcmVjdGl2ZXM6dGhpcy5zd2lwZWFibGU/W3tuYW1lOlwidG91Y2gtc3dpcGVcIix2YWx1ZTp0aGlzLl9fc3dpcGV9XTpudWxsfSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy50aW1lcj1udWxsLHRoaXMuc2Nyb2xsVGltZXI9bnVsbCx0aGlzLmJ1ZmZlclRpbWVyPW51bGwsdGhpcy5idWZmZXI9W10sdGhpcy5zY3JvbGxhYmxlPSF0aGlzLiRxLnBsYXRmb3JtLmlzLmRlc2t0b3AsdGhpcy5fX3JlZHJhdz1kZWJvdW5jZSh0aGlzLl9fcmVkcmF3LGRlYm91bmNlRGVsYXkpLHRoaXMuX191cGRhdGVTY3JvbGxJbmRpY2F0b3I9ZGVib3VuY2UodGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcixkZWJvdW5jZURlbGF5KX0sbW91bnRlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LiRyZWZzLnNjcm9sbGVyJiYodC4kcmVmcy5zY3JvbGxlci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdC5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdC5fX3JlZHJhdyxsaXN0ZW5PcHRzLnBhc3NpdmUpLFwiXCIhPT10LmRhdGEudGFiTmFtZSYmdC52YWx1ZSYmdC5zZWxlY3RUYWIodC52YWx1ZSksdC5fX3JlZHJhdygpLHQuX19maW5kVGFiQW5kU2Nyb2xsKHQuZGF0YS50YWJOYW1lLCEwKSl9KX0sYmVmb3JlRGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5idWZmZXJUaW1lciksdGhpcy5fX3N0b3BBbmltU2Nyb2xsKCksdGhpcy4kcmVmcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvcixsaXN0ZW5PcHRzLnBhc3NpdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5fX3JlZHJhdyxsaXN0ZW5PcHRzLnBhc3NpdmUpLHRoaXMuX19yZWRyYXcuY2FuY2VsKCksdGhpcy5fX3VwZGF0ZVNjcm9sbEluZGljYXRvci5jYW5jZWwoKX19LFRvcD17Y29tcHV0ZWQ6e21hcmdpbmFsc1Byb3BzOmZ1bmN0aW9uKCl7cmV0dXJue3BhZ2luYXRpb246dGhpcy5jb21wdXRlZFBhZ2luYXRpb24scGFnZXNOdW1iZXI6dGhpcy5wYWdlc051bWJlcixpc0ZpcnN0UGFnZTp0aGlzLmlzRmlyc3RQYWdlLGlzTGFzdFBhZ2U6dGhpcy5pc0xhc3RQYWdlLHByZXZQYWdlOnRoaXMucHJldlBhZ2UsbmV4dFBhZ2U6dGhpcy5uZXh0UGFnZSxpbkZ1bGxzY3JlZW46dGhpcy5pbkZ1bGxzY3JlZW4sdG9nZ2xlRnVsbHNjcmVlbjp0aGlzLnRvZ2dsZUZ1bGxzY3JlZW59fX0sbWV0aG9kczp7Z2V0VG9wOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuJHNjb3BlZFNsb3RzLnRvcCxpPXRoaXMuJHNjb3BlZFNsb3RzW1widG9wLWxlZnRcIl0scz10aGlzLiRzY29wZWRTbG90c1tcInRvcC1yaWdodFwiXSxuPXRoaXMuJHNjb3BlZFNsb3RzW1widG9wLXNlbGVjdGlvblwiXSxvPXRoaXMuaGFzU2VsZWN0aW9uTW9kZSYmbiYmdGhpcy5yb3dzU2VsZWN0ZWROdW1iZXI+MCxyPVwicS10YWJsZS10b3AgcmVsYXRpdmUtcG9zaXRpb24gcm93IGl0ZW1zLWNlbnRlclwiLGE9W107cmV0dXJuIGU/dChcImRpdlwiLHtzdGF0aWNDbGFzczpyfSxbZSh0aGlzLm1hcmdpbmFsc1Byb3BzKV0pOihvP2EucHVzaChuKHRoaXMubWFyZ2luYWxzUHJvcHMpKTppP2EucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb250cm9sXCJ9LFtpKHRoaXMubWFyZ2luYWxzUHJvcHMpXSkpOnRoaXMudGl0bGUmJmEucHVzaCh0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb250cm9sXCJ9LFt0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS10aXRsZVwifSx0aGlzLnRpdGxlKV0pKSxzJiYoYS5wdXNoKHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLXNlcGFyYXRvciBjb2xcIn0pKSxhLnB1c2godChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbcyh0aGlzLm1hcmdpbmFsc1Byb3BzKV0pKSksMCE9PWEubGVuZ3RoP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6cn0sYSk6dm9pZCAwKX19fSxRVGg9e25hbWU6XCJRVGhcIixwcm9wczp7cHJvcHM6T2JqZWN0LGF1dG9XaWR0aDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGUsaT10aGlzO2lmKCF0aGlzLnByb3BzKXJldHVybiB0KFwidGRcIix7Y2xhc3M6e1wicS10YWJsZS1jb2wtYXV0by13aWR0aFwiOnRoaXMuYXV0b1dpZHRofX0sdGhpcy4kc2xvdHMuZGVmYXVsdCk7dmFyIHM9dGhpcy4kdm5vZGUua2V5LG49W10uY29uY2F0KHRoaXMuJHNsb3RzLmRlZmF1bHQpO2lmKHMpe2lmKCEoZT10aGlzLnByb3BzLmNvbHNNYXBbc10pKXJldHVybn1lbHNlIGU9dGhpcy5wcm9wcy5jb2w7ZS5zb3J0YWJsZSYmbltcInJpZ2h0XCI9PT1lLmFsaWduP1widW5zaGlmdFwiOlwicHVzaFwiXSh0KFFJY29uLHtwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udGFibGUuYXJyb3dVcH0sc3RhdGljQ2xhc3M6ZS5fX2ljb25DbGFzc30pKTtyZXR1cm4gdChcInRoXCIse2NsYXNzOltlLl9fdGhDbGFzcyx7XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCI6dGhpcy5hdXRvV2lkdGh9XSxvbjplLnNvcnRhYmxlP3tjbGljazpmdW5jdGlvbigpe2kucHJvcHMuc29ydChlKX19Om51bGx9LG4pfX0sVGFibGVIZWFkZXI9e21ldGhvZHM6e2dldFRhYmxlSGVhZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVt0aGlzLmdldFRhYmxlSGVhZGVyUm93KHQpXTtyZXR1cm4gdGhpcy5sb2FkaW5nJiZlLnB1c2godChcInRyXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1wcm9ncmVzcyBhbmltYXRlLWZhZGVcIn0sW3QoXCJ0ZFwiLHthdHRyczp7Y29sc3BhbjpcIjEwMCVcIn19LFt0KFFQcm9ncmVzcyx7cHJvcHM6e2NvbG9yOnRoaXMuY29sb3IsaW5kZXRlcm1pbmF0ZTohMCxoZWlnaHQ6XCIycHhcIn19KV0pXSkpLHQoXCJ0aGVhZFwiLGUpfSxnZXRUYWJsZUhlYWRlclJvdzpmdW5jdGlvbih0KXt2YXIgZSxpPXRoaXMscz10aGlzLiRzY29wZWRTbG90cy5oZWFkZXIsbj10aGlzLiRzY29wZWRTbG90c1tcImhlYWRlci1jZWxsXCJdO2lmKHMpcmV0dXJuIHModGhpcy5hZGRUYWJsZUhlYWRlclJvd01ldGEoe2hlYWRlcjohMCxjb2xzOnRoaXMuY29tcHV0ZWRDb2xzLHNvcnQ6dGhpcy5zb3J0LGNvbHNNYXA6dGhpcy5jb21wdXRlZENvbHNNYXB9KSk7ZT1uP2Z1bmN0aW9uKHQpe3JldHVybiBuKHtjb2w6dCxjb2xzOmkuY29tcHV0ZWRDb2xzLHNvcnQ6aS5zb3J0LGNvbHNNYXA6aS5jb21wdXRlZENvbHNNYXB9KX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQoUVRoLHtrZXk6ZS5uYW1lLHByb3BzOntwcm9wczp7Y29sOmUsY29sczppLmNvbXB1dGVkQ29scyxzb3J0Omkuc29ydCxjb2xzTWFwOmkuY29tcHV0ZWRDb2xzTWFwfX0sc3R5bGU6ZS5zdHlsZSxjbGFzczplLmNsYXNzZXN9LGUubGFiZWwpfTt2YXIgbz10aGlzLmNvbXB1dGVkQ29scy5tYXAoZSk7cmV0dXJuIHRoaXMuc2luZ2xlU2VsZWN0aW9uJiYhdGhpcy5ncmlkP28udW5zaGlmdCh0KFwidGhcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCJ9LFtcIiBcIl0pKTp0aGlzLm11bHRpcGxlU2VsZWN0aW9uJiZvLnVuc2hpZnQodChcInRoXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb2wtYXV0by13aWR0aFwifSxbdChRQ2hlY2tib3gse3Byb3BzOntjb2xvcjp0aGlzLmNvbG9yLHZhbHVlOnRoaXMuc29tZVJvd3NTZWxlY3RlZD9udWxsOnRoaXMuYWxsUm93c1NlbGVjdGVkLGRhcms6dGhpcy5kYXJrfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7aS5zb21lUm93c1NlbGVjdGVkJiYodD0hMSksaS5fX3VwZGF0ZVNlbGVjdGlvbihpLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbaS5yb3dLZXldfSksaS5jb21wdXRlZFJvd3MsdCl9fX0pXSkpLHQoXCJ0clwiLG8pfSxhZGRUYWJsZUhlYWRlclJvd01ldGE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwic2VsZWN0ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuc29tZVJvd3NTZWxlY3RlZD9cInNvbWVcIjplLmFsbFJvd3NTZWxlY3RlZH0sc2V0OmZ1bmN0aW9uKHQpe2Uuc29tZVJvd3NTZWxlY3RlZCYmKHQ9ITEpLGUuX191cGRhdGVTZWxlY3Rpb24oZS5jb21wdXRlZFJvd3MubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0W2Uucm93S2V5XX0pLGUuY29tcHV0ZWRSb3dzLHQpfX0pLHQucGFydGlhbFNlbGVjdGVkPXRoaXMuc29tZVJvd3NTZWxlY3RlZCx0Lm11bHRpcGxlU2VsZWN0PSEwKSx0fX19LFRhYmxlQm9keT17bWV0aG9kczp7Z2V0VGFibGVCb2R5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLiRzY29wZWRTbG90cy5ib2R5LHM9dGhpcy4kc2NvcGVkU2xvdHNbXCJib2R5LWNlbGxcIl0sbj10aGlzLiRzY29wZWRTbG90c1tcInRvcC1yb3dcIl0sbz10aGlzLiRzY29wZWRTbG90c1tcImJvdHRvbS1yb3dcIl0scj1bXTtyZXR1cm4gcj1pP3RoaXMuY29tcHV0ZWRSb3dzLm1hcChmdW5jdGlvbih0KXt2YXIgcz10W2Uucm93S2V5XSxuPWUuaXNSb3dTZWxlY3RlZChzKTtyZXR1cm4gaShlLmFkZEJvZHlSb3dNZXRhKHtrZXk6cyxyb3c6dCxjb2xzOmUuY29tcHV0ZWRDb2xzLGNvbHNNYXA6ZS5jb21wdXRlZENvbHNNYXAsX190ckNsYXNzOm4/XCJzZWxlY3RlZFwiOlwiXCJ9KSl9KTp0aGlzLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24oaSl7dmFyIG49aVtlLnJvd0tleV0sbz1lLmlzUm93U2VsZWN0ZWQobikscj1zP2UuY29tcHV0ZWRDb2xzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gcyhlLmFkZEJvZHlDZWxsTWV0YURhdGEoe3JvdzppLGNvbDp0fSkpfSk6ZS5jb21wdXRlZENvbHMubWFwKGZ1bmN0aW9uKHMpe3ZhciBuPWUuJHNjb3BlZFNsb3RzW1wiYm9keS1jZWxsLVwiK3MubmFtZV07cmV0dXJuIG4/bihlLmFkZEJvZHlDZWxsTWV0YURhdGEoe3JvdzppLGNvbDpzfSkpOnQoXCJ0ZFwiLHtzdGF0aWNDbGFzczpzLl9fdGRDbGFzcyxzdHlsZTpzLnN0eWxlLGNsYXNzOnMuY2xhc3Nlc30sZS5nZXRDZWxsVmFsdWUocyxpKSl9KTtyZXR1cm4gZS5oYXNTZWxlY3Rpb25Nb2RlJiZyLnVuc2hpZnQodChcInRkXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb2wtYXV0by13aWR0aFwifSxbdChRQ2hlY2tib3gse3Byb3BzOnt2YWx1ZTpvLGNvbG9yOmUuY29sb3IsZGFyazplLmRhcmt9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLl9fdXBkYXRlU2VsZWN0aW9uKFtuXSxbaV0sdCl9fX0pXSkpLHQoXCJ0clwiLHtrZXk6bixjbGFzczp7c2VsZWN0ZWQ6b319LHIpfSksbiYmci51bnNoaWZ0KG4oe2NvbHM6dGhpcy5jb21wdXRlZENvbHN9KSksbyYmci5wdXNoKG8oe2NvbHM6dGhpcy5jb21wdXRlZENvbHN9KSksdChcInRib2R5XCIscil9LGFkZEJvZHlSb3dNZXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaGFzU2VsZWN0aW9uTW9kZSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJzZWxlY3RlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pc1Jvd1NlbGVjdGVkKHQua2V5KX0sc2V0OmZ1bmN0aW9uKGkpe2UuX191cGRhdGVTZWxlY3Rpb24oW3Qua2V5XSxbdC5yb3ddLGkpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiZXhwYW5kXCIse2dldDpmdW5jdGlvbigpe3JldHVybiEwPT09ZS5yb3dzRXhwYW5kZWRbdC5rZXldfSxzZXQ6ZnVuY3Rpb24oaSl7ZS4kc2V0KGUucm93c0V4cGFuZGVkLHQua2V5LGkpfX0pLHQuY29scz10LmNvbHMubWFwKGZ1bmN0aW9uKGkpe3ZhciBzPU9iamVjdC5hc3NpZ24oe30saSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Q2VsbFZhbHVlKGksdC5yb3cpfX0pLHN9KSx0fSxhZGRCb2R5Q2VsbE1ldGFEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwidmFsdWVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Q2VsbFZhbHVlKHQuY29sLHQucm93KX19KSx0fSxnZXRDZWxsVmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmZpZWxkP3QuZmllbGQoZSk6ZVt0LmZpZWxkXTtyZXR1cm4gdC5mb3JtYXQ/dC5mb3JtYXQoaSk6aX19fSxCb3R0b209e2NvbXB1dGVkOntuYXZJY29uOmZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuJHEuaWNvbi50YWJsZS5wcmV2UGFnZSx0aGlzLiRxLmljb24udGFibGUubmV4dFBhZ2VdO3JldHVybiB0aGlzLiRxLmkxOG4ucnRsP3QucmV2ZXJzZSgpOnR9fSxtZXRob2RzOntnZXRCb3R0b206ZnVuY3Rpb24odCl7aWYoIXRoaXMuaGlkZUJvdHRvbSl7aWYodGhpcy5ub3RoaW5nVG9EaXNwbGF5KXt2YXIgZT10aGlzLmZpbHRlcj90aGlzLm5vUmVzdWx0c0xhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUubm9SZXN1bHRzOnRoaXMubG9hZGluZz90aGlzLmxvYWRpbmdMYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLmxvYWRpbmc6dGhpcy5ub0RhdGFMYWJlbHx8dGhpcy4kcS5pMThuLnRhYmxlLm5vRGF0YTtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtYm90dG9tIHJvdyBpdGVtcy1jZW50ZXIgcS10YWJsZS1ub2RhdGFcIn0sW3QoUUljb24se3Byb3BzOntuYW1lOnRoaXMuJHEuaWNvbi50YWJsZS53YXJuaW5nfX0pLGVdKX12YXIgaT10aGlzLiRzY29wZWRTbG90cy5ib3R0b207cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWJvdHRvbSByb3cgaXRlbXMtY2VudGVyXCIsY2xhc3M6aT9udWxsOlwianVzdGlmeS1lbmRcIn0saT9baSh0aGlzLm1hcmdpbmFsc1Byb3BzKV06dGhpcy5nZXRQYWdpbmF0aW9uUm93KHQpKX19LGdldFBhZ2luYXRpb25Sb3c6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnJvd3NQZXJQYWdlLHM9dGhpcy5wYWdpbmF0aW9uTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5wYWdpbmF0aW9uLG49dGhpcy4kc2NvcGVkU2xvdHMucGFnaW5hdGlvbjtyZXR1cm5bdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbdChcImRpdlwiLFt0aGlzLmhhc1NlbGVjdGlvbk1vZGUmJnRoaXMucm93c1NlbGVjdGVkTnVtYmVyPjA/KHRoaXMuc2VsZWN0ZWRSb3dzTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5zZWxlY3RlZFJlY29yZHMpKHRoaXMucm93c1NlbGVjdGVkTnVtYmVyKTpcIlwiXSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1zZXBhcmF0b3IgY29sXCJ9KSx0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5sZW5ndGg+MSYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtY29udHJvbFwifSxbdChcInNwYW5cIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLWJvdHRvbS1pdGVtXCJ9LFt0aGlzLnJvd3NQZXJQYWdlTGFiZWx8fHRoaXMuJHEuaTE4bi50YWJsZS5yZWNvcmRzUGVyUGFnZV0pLHQoUVNlbGVjdCx7c3RhdGljQ2xhc3M6XCJpbmxpbmUgcS10YWJsZS1ib3R0b20taXRlbVwiLHByb3BzOntjb2xvcjp0aGlzLmNvbG9yLHZhbHVlOmksb3B0aW9uczp0aGlzLmNvbXB1dGVkUm93c1BlclBhZ2VPcHRpb25zLGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLnNldFBhZ2luYXRpb24oe3BhZ2U6MSxyb3dzUGVyUGFnZTp0fSl9fX0pXSl8fHZvaWQgMCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1jb250cm9sXCJ9LFtuP24odGhpcy5tYXJnaW5hbHNQcm9wcyk6W3QoXCJzcGFuXCIse3N0YXRpY0NsYXNzOlwicS10YWJsZS1ib3R0b20taXRlbVwifSxbaT9zKHRoaXMuZmlyc3RSb3dJbmRleCsxLE1hdGgubWluKHRoaXMubGFzdFJvd0luZGV4LHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyKSx0aGlzLmNvbXB1dGVkUm93c051bWJlcik6cygxLHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyLHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyKV0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMuY29sb3Iscm91bmQ6ITAsaWNvbjp0aGlzLm5hdkljb25bMF0sZGVuc2U6ITAsZmxhdDohMCxkaXNhYmxlOnRoaXMuaXNGaXJzdFBhZ2V9LG9uOntjbGljazp0aGlzLnByZXZQYWdlfX0pLHQoUUJ0bix7cHJvcHM6e2NvbG9yOnRoaXMuY29sb3Iscm91bmQ6ITAsaWNvbjp0aGlzLm5hdkljb25bMV0sZGVuc2U6ITAsZmxhdDohMCxkaXNhYmxlOnRoaXMuaXNMYXN0UGFnZX0sb246e2NsaWNrOnRoaXMubmV4dFBhZ2V9fSldXSldfX19O2Z1bmN0aW9uIHNvcnREYXRlKHQsZSl7cmV0dXJuIG5ldyBEYXRlKHQpLW5ldyBEYXRlKGUpfXZhciBTb3J0PXtwcm9wczp7c29ydE1ldGhvZDp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLmNvbHVtbnMuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lPT09ZX0pO2lmKG51bGw9PT1zfHx2b2lkIDA9PT1zLmZpZWxkKXJldHVybiB0O3ZhciBuPWk/LTE6MSxvPVwiZnVuY3Rpb25cIj09dHlwZW9mIHMuZmllbGQ/ZnVuY3Rpb24odCl7cmV0dXJuIHMuZmllbGQodCl9OmZ1bmN0aW9uKHQpe3JldHVybiB0W3MuZmllbGRdfTtyZXR1cm4gdC5zb3J0KGZ1bmN0aW9uKHQsZSl7dmFyIGkscj1vKHQpLGE9byhlKTtyZXR1cm4gbnVsbD09PXJ8fHZvaWQgMD09PXI/LTEqbjpudWxsPT09YXx8dm9pZCAwPT09YT8xKm46cy5zb3J0P3Muc29ydChyLGEpKm46aXNOdW1iZXIocikmJmlzTnVtYmVyKGEpPyhyLWEpKm46aXNEYXRlKHIpJiZpc0RhdGUoYSk/c29ydERhdGUocixhKSpuOlwiYm9vbGVhblwiPT10eXBlb2YgciYmXCJib29sZWFuXCI9PXR5cGVvZiBhPyh0LWUpKm46KHI9KGk9W3IsYV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0K1wiXCIpLnRvTG93ZXJDYXNlKCl9KSlbMF0pPChhPWlbMV0pPy0xKm46cj09PWE/MDpufSl9fX0sY29tcHV0ZWQ6e2NvbHVtblRvU29ydDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnNvcnRCeTtpZih0KXJldHVybiB0aGlzLmNvbHVtbnMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lPT09dH0pfHxudWxsfX0sbWV0aG9kczp7c29ydDpmdW5jdGlvbih0KXt0PT09T2JqZWN0KHQpJiYodD10Lm5hbWUpO3ZhciBlPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGk9ZS5zb3J0Qnkscz1lLmRlc2NlbmRpbmc7aSE9PXQ/KGk9dCxzPSExKTp0aGlzLmJpbmFyeVN0YXRlU29ydD9zPSFzOnM/aT1udWxsOnM9ITAsdGhpcy5zZXRQYWdpbmF0aW9uKHtzb3J0Qnk6aSxkZXNjZW5kaW5nOnMscGFnZToxfSl9fX0sRmlsdGVyPXtwcm9wczp7ZmlsdGVyOltTdHJpbmcsT2JqZWN0XSxmaWx0ZXJNZXRob2Q6e3R5cGU6RnVuY3Rpb24sZGVmYXVsdDpmdW5jdGlvbih0LGUsaSxzKXt2b2lkIDA9PT1pJiYoaT10aGlzLmNvbXB1dGVkQ29scyksdm9pZCAwPT09cyYmKHM9dGhpcy5nZXRDZWxsVmFsdWUpO3ZhciBuPWU/ZS50b0xvd2VyQ2FzZSgpOlwiXCI7cmV0dXJuIHQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiBpLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT0ocyhlLHQpK1wiXCIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihuKX0pfSl9fX0sd2F0Y2g6e2ZpbHRlcjpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kbmV4dFRpY2soZnVuY3Rpb24oKXt0LnNldFBhZ2luYXRpb24oe3BhZ2U6MX0sITApfSl9fX07ZnVuY3Rpb24gc2FtZVBhZ2luYXRpb24odCxlKXtmb3IodmFyIGkgaW4gZSlpZihlW2ldIT09dFtpXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmaXhQYWdpbmF0aW9uKHQpe3JldHVybiB0LnBhZ2U8MSYmKHQucGFnZT0xKSx2b2lkIDAhPT10LnJvd3NQZXJQYWdlJiZ0LnJvd3NQZXJQYWdlPDEmJih0LnJvd3NQZXJQYWdlPTApLHR9dmFyIFBhZ2luYXRpb249e3Byb3BzOntwYWdpbmF0aW9uOk9iamVjdCxyb3dzUGVyUGFnZU9wdGlvbnM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVyblszLDUsNywxMCwxNSwyMCwyNSw1MCwwXX19fSxkYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2lubmVyUGFnaW5hdGlvbjp7c29ydEJ5Om51bGwsZGVzY2VuZGluZzohMSxwYWdlOjEscm93c1BlclBhZ2U6NX19fSxjb21wdXRlZDp7Y29tcHV0ZWRQYWdpbmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGZpeFBhZ2luYXRpb24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmlubmVyUGFnaW5hdGlvbix0aGlzLnBhZ2luYXRpb24pKX0sZmlyc3RSb3dJbmRleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uO3JldHVybih0LnBhZ2UtMSkqdC5yb3dzUGVyUGFnZX0sbGFzdFJvd0luZGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb21wdXRlZFBhZ2luYXRpb247cmV0dXJuIHQucGFnZSp0LnJvd3NQZXJQYWdlfSxpc0ZpcnN0UGFnZTpmdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucGFnZX0scGFnZXNOdW1iZXI6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoMSxNYXRoLmNlaWwodGhpcy5jb21wdXRlZFJvd3NOdW1iZXIvdGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucm93c1BlclBhZ2UpKX0saXNMYXN0UGFnZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXN0Um93SW5kZXh8fHRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnBhZ2U+PXRoaXMucGFnZXNOdW1iZXJ9LGNvbXB1dGVkUm93c1BlclBhZ2VPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybntsYWJlbDowPT09ZT90LiRxLmkxOG4udGFibGUuYWxsUm93czpcIlwiK2UsdmFsdWU6ZX19KX19LHdhdGNoOntwYWdlc051bWJlcjpmdW5jdGlvbih0LGUpe2lmKHQhPT1lKXt2YXIgaT10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5wYWdlO3QmJiFpP3RoaXMuc2V0UGFnaW5hdGlvbih7cGFnZToxfSk6dDxpJiZ0aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6dH0pfX19LG1ldGhvZHM6e19fc2VuZFNlcnZlclJlcXVlc3Q6ZnVuY3Rpb24odCl7dGhpcy5yZXF1ZXN0U2VydmVySW50ZXJhY3Rpb24oe3BhZ2luYXRpb246dCxmaWx0ZXI6dGhpcy5maWx0ZXJ9KX0sc2V0UGFnaW5hdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPWZpeFBhZ2luYXRpb24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmNvbXB1dGVkUGFnaW5hdGlvbix0KSk7c2FtZVBhZ2luYXRpb24odGhpcy5jb21wdXRlZFBhZ2luYXRpb24saSk/dGhpcy5pc1NlcnZlclNpZGUmJmUmJnRoaXMuX19zZW5kU2VydmVyUmVxdWVzdChpKTp0aGlzLmlzU2VydmVyU2lkZT90aGlzLl9fc2VuZFNlcnZlclJlcXVlc3QoaSk6dGhpcy5wYWdpbmF0aW9uP3RoaXMuJGVtaXQoXCJ1cGRhdGU6cGFnaW5hdGlvblwiLGkpOnRoaXMuaW5uZXJQYWdpbmF0aW9uPWl9LHByZXZQYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24ucGFnZTt0PjEmJnRoaXMuc2V0UGFnaW5hdGlvbih7cGFnZTp0LTF9KX0sbmV4dFBhZ2U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbXB1dGVkUGFnaW5hdGlvbixlPXQucGFnZSxpPXQucm93c1BlclBhZ2U7dGhpcy5sYXN0Um93SW5kZXg+MCYmZSppPHRoaXMuY29tcHV0ZWRSb3dzTnVtYmVyJiZ0aGlzLnNldFBhZ2luYXRpb24oe3BhZ2U6ZSsxfSl9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kZW1pdChcInVwZGF0ZTpwYWdpbmF0aW9uXCIsT2JqZWN0LmFzc2lnbih7fSx0aGlzLmNvbXB1dGVkUGFnaW5hdGlvbikpfX0sUm93U2VsZWN0aW9uPXtwcm9wczp7c2VsZWN0aW9uOnt0eXBlOlN0cmluZyxkZWZhdWx0Olwibm9uZVwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJzaW5nbGVcIixcIm11bHRpcGxlXCIsXCJub25lXCJdLmluY2x1ZGVzKHQpfX0sc2VsZWN0ZWQ6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX19LGNvbXB1dGVkOntzZWxlY3RlZEtleXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307cmV0dXJuIHRoaXMuc2VsZWN0ZWQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlW3Qucm93S2V5XX0pLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT0hMH0pLGV9LGhhc1NlbGVjdGlvbk1vZGU6ZnVuY3Rpb24oKXtyZXR1cm5cIm5vbmVcIiE9PXRoaXMuc2VsZWN0aW9ufSxzaW5nbGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm5cInNpbmdsZVwiPT09dGhpcy5zZWxlY3Rpb259LG11bHRpcGxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuXCJtdWx0aXBsZVwiPT09dGhpcy5zZWxlY3Rpb259LGFsbFJvd3NTZWxlY3RlZDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5tdWx0aXBsZVNlbGVjdGlvbilyZXR1cm4gdGhpcy5jb21wdXRlZFJvd3MubGVuZ3RoPjAmJnRoaXMuY29tcHV0ZWRSb3dzLmV2ZXJ5KGZ1bmN0aW9uKGUpe3JldHVybiEwPT09dC5zZWxlY3RlZEtleXNbZVt0LnJvd0tleV1dfSl9LHNvbWVSb3dzU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMubXVsdGlwbGVTZWxlY3Rpb24pcmV0dXJuIXRoaXMuYWxsUm93c1NlbGVjdGVkJiZ0aGlzLmNvbXB1dGVkUm93cy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiEwPT09dC5zZWxlY3RlZEtleXNbZVt0LnJvd0tleV1dfSl9LHJvd3NTZWxlY3RlZE51bWJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkLmxlbmd0aH19LG1ldGhvZHM6e2lzUm93U2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10aGlzLnNlbGVjdGVkS2V5c1t0XX0sY2xlYXJTZWxlY3Rpb246ZnVuY3Rpb24oKXt0aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsW10pfSxfX3VwZGF0ZVNlbGVjdGlvbjpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dGhpczt0aGlzLnNpbmdsZVNlbGVjdGlvbj90aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsaT9lOltdKTp0aGlzLiRlbWl0KFwidXBkYXRlOnNlbGVjdGVkXCIsaT90aGlzLnNlbGVjdGVkLmNvbmNhdChlKTp0aGlzLnNlbGVjdGVkLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hdC5pbmNsdWRlcyhlW3Mucm93S2V5XSl9KSl9fX0sQ29sdW1uU2VsZWN0aW9uPXtwcm9wczp7dmlzaWJsZUNvbHVtbnM6QXJyYXl9LGNvbXB1dGVkOntjb21wdXRlZENvbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5jb21wdXRlZFBhZ2luYXRpb24saT1lLnNvcnRCeSxzPWUuZGVzY2VuZGluZztyZXR1cm4odGhpcy52aXNpYmxlQ29sdW1ucz90aGlzLmNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcXVpcmVkfHx0LnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGUubmFtZSl9KTp0aGlzLmNvbHVtbnMpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5hbGlnbj10LmFsaWdufHxcInJpZ2h0XCIsdC5fX2ljb25DbGFzcz1cInEtdGFibGUtc29ydC1pY29uIHEtdGFibGUtc29ydC1pY29uLVwiK3QuYWxpZ24sdC5fX3RoQ2xhc3M9XCJ0ZXh0LVwiK3QuYWxpZ24rKHQuc29ydGFibGU/XCIgc29ydGFibGVcIjpcIlwiKSsodC5uYW1lPT09aT9cIiBzb3J0ZWQgXCIrKHM/XCJzb3J0LWRlc2NcIjpcIlwiKTpcIlwiKSx0Ll9fdGRDbGFzcz1cInRleHQtXCIrdC5hbGlnbix0fSl9LGNvbXB1dGVkQ29sc01hcDpmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLmNvbXB1dGVkQ29scy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZS5uYW1lXT1lfSksdH19fSxFeHBhbmQ9e2RhdGE6ZnVuY3Rpb24oKXtyZXR1cm57cm93c0V4cGFuZGVkOnt9fX19LFFUYWJsZT17bmFtZTpcIlFUYWJsZVwiLG1peGluczpbRnVsbHNjcmVlbk1peGluLFRvcCxUYWJsZUhlYWRlcixUYWJsZUJvZHksQm90dG9tLFNvcnQsRmlsdGVyLFBhZ2luYXRpb24sUm93U2VsZWN0aW9uLENvbHVtblNlbGVjdGlvbixFeHBhbmRdLHByb3BzOntkYXRhOnt0eXBlOkFycmF5LGRlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LHJvd0tleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImlkXCJ9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleS04XCJ9LGdyaWQ6Qm9vbGVhbixkZW5zZTpCb29sZWFuLGNvbHVtbnM6QXJyYXksbG9hZGluZzpCb29sZWFuLHRpdGxlOlN0cmluZyxoaWRlSGVhZGVyOkJvb2xlYW4saGlkZUJvdHRvbTpCb29sZWFuLGRhcms6Qm9vbGVhbixzZXBhcmF0b3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJob3Jpem9udGFsXCIsdmFsaWRhdG9yOmZ1bmN0aW9uKHQpe3JldHVybltcImhvcml6b250YWxcIixcInZlcnRpY2FsXCIsXCJjZWxsXCIsXCJub25lXCJdLmluY2x1ZGVzKHQpfX0sYmluYXJ5U3RhdGVTb3J0OkJvb2xlYW4sbm9EYXRhTGFiZWw6U3RyaW5nLG5vUmVzdWx0c0xhYmVsOlN0cmluZyxsb2FkaW5nTGFiZWw6U3RyaW5nLHNlbGVjdGVkUm93c0xhYmVsOkZ1bmN0aW9uLHJvd3NQZXJQYWdlTGFiZWw6U3RyaW5nLHBhZ2luYXRpb25MYWJlbDpGdW5jdGlvbix0YWJsZVN0eWxlOnt0eXBlOltTdHJpbmcsQXJyYXksT2JqZWN0XSxkZWZhdWx0OlwiXCJ9LHRhYmxlQ2xhc3M6e3R5cGU6W1N0cmluZyxBcnJheSxPYmplY3RdLGRlZmF1bHQ6XCJcIn19LGNvbXB1dGVkOntjb21wdXRlZERhdGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEuc2xpY2UoKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fX2luZGV4PWUsdH0pO2lmKDA9PT10Lmxlbmd0aClyZXR1cm57cm93c051bWJlcjowLHJvd3M6W119O2lmKHRoaXMuaXNTZXJ2ZXJTaWRlKXJldHVybntyb3dzOnR9O3ZhciBlPXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLGk9ZS5zb3J0Qnkscz1lLmRlc2NlbmRpbmcsbj1lLnJvd3NQZXJQYWdlO3RoaXMuZmlsdGVyJiYodD10aGlzLmZpbHRlck1ldGhvZCh0LHRoaXMuZmlsdGVyLHRoaXMuY29tcHV0ZWRDb2xzLHRoaXMuZ2V0Q2VsbFZhbHVlKSksdGhpcy5jb2x1bW5Ub1NvcnQmJih0PXRoaXMuc29ydE1ldGhvZCh0LGkscykpO3ZhciBvPXQubGVuZ3RoO3JldHVybiBuJiYodD10LnNsaWNlKHRoaXMuZmlyc3RSb3dJbmRleCx0aGlzLmxhc3RSb3dJbmRleCkpLHtyb3dzTnVtYmVyOm8scm93czp0fX0sY29tcHV0ZWRSb3dzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29tcHV0ZWREYXRhLnJvd3N9LGNvbXB1dGVkUm93c051bWJlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzU2VydmVyU2lkZT90aGlzLmNvbXB1dGVkUGFnaW5hdGlvbi5yb3dzTnVtYmVyfHwwOnRoaXMuY29tcHV0ZWREYXRhLnJvd3NOdW1iZXJ9LG5vdGhpbmdUb0Rpc3BsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuY29tcHV0ZWRSb3dzLmxlbmd0aH0saXNTZXJ2ZXJTaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcHV0ZWRQYWdpbmF0aW9uLnJvd3NOdW1iZXJ9fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7Y2xhc3M6e1wicS10YWJsZS1ncmlkXCI6dGhpcy5ncmlkLFwicS10YWJsZS1jb250YWluZXJcIjohMCxcInEtdGFibGUtZGFya1wiOnRoaXMuZGFyayxcInEtdGFibGUtZGVuc2VcIjp0aGlzLmRlbnNlLGZ1bGxzY3JlZW46dGhpcy5pbkZ1bGxzY3JlZW4sc2Nyb2xsOnRoaXMuaW5GdWxsc2NyZWVufX0sW3RoaXMuZ2V0VG9wKHQpLHRoaXMuZ2V0Qm9keSh0KSx0aGlzLmdldEJvdHRvbSh0KV0pfSxtZXRob2RzOntyZXF1ZXN0U2VydmVySW50ZXJhY3Rpb246ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLiRuZXh0VGljayhmdW5jdGlvbigpe2UuJGVtaXQoXCJyZXF1ZXN0XCIse3BhZ2luYXRpb246dC5wYWdpbmF0aW9ufHxlLmNvbXB1dGVkUGFnaW5hdGlvbixmaWx0ZXI6dC5maWx0ZXJ8fGUuZmlsdGVyLGdldENlbGxWYWx1ZTplLmdldENlbGxWYWx1ZX0pfSl9LGdldEJvZHk6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPSF0aGlzLmhpZGVIZWFkZXI7aWYodGhpcy5ncmlkKXt2YXIgcz10aGlzLiRzY29wZWRTbG90cy5pdGVtO2lmKHZvaWQgMCE9PXMpcmV0dXJuW2kmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlLW1pZGRsZSBzY3JvbGxcIn0sW3QoXCJ0YWJsZVwiLHtzdGF0aWNDbGFzczpcInEtdGFibGVcIisodGhpcy5kYXJrP1wiIHEtdGFibGUtZGFya1wiOlwiXCIpfSxbdGhpcy5nZXRUYWJsZUhlYWRlcih0KV0pXSl8fG51bGwsdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInJvd1wifSx0aGlzLmNvbXB1dGVkUm93cy5tYXAoZnVuY3Rpb24odCl7dmFyIGk9dFtlLnJvd0tleV0sbj1lLmlzUm93U2VsZWN0ZWQoaSk7cmV0dXJuIHMoZS5hZGRCb2R5Um93TWV0YSh7a2V5Omkscm93OnQsY29sczplLmNvbXB1dGVkQ29scyxjb2xzTWFwOmUuY29tcHV0ZWRDb2xzTWFwLF9fdHJDbGFzczpuP1wic2VsZWN0ZWRcIjpcIlwifSkpfSkpXX1yZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGFibGUtbWlkZGxlIHNjcm9sbFwiLGNsYXNzOnRoaXMudGFibGVDbGFzcyxzdHlsZTp0aGlzLnRhYmxlU3R5bGV9LFt0KFwidGFibGVcIix7c3RhdGljQ2xhc3M6XCJxLXRhYmxlIHEtdGFibGUtXCIrdGhpcy5zZXBhcmF0b3IrXCItc2VwYXJhdG9yXCIrKHRoaXMuZGFyaz9cIiBxLXRhYmxlLWRhcmtcIjpcIlwiKX0sW2kmJnRoaXMuZ2V0VGFibGVIZWFkZXIodCl8fG51bGwsdGhpcy5nZXRUYWJsZUJvZHkodCldKV0pfX19LFFUcj17bmFtZTpcIlFUclwiLHByb3BzOntwcm9wczpPYmplY3R9LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInRyXCIsIXRoaXMucHJvcHN8fHRoaXMucHJvcHMuaGVhZGVyP3t9OntjbGFzczp0aGlzLnByb3BzLl9fdHJDbGFzc30sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRVGQ9e25hbWU6XCJRVGRcIixwcm9wczp7cHJvcHM6T2JqZWN0LGF1dG9XaWR0aDpCb29sZWFufSxyZW5kZXI6ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJvcHMpcmV0dXJuIHQoXCJ0ZFwiLHtjbGFzczp7XCJxLXRhYmxlLWNvbC1hdXRvLXdpZHRoXCI6dGhpcy5hdXRvV2lkdGh9fSx0aGlzLiRzbG90cy5kZWZhdWx0KTt2YXIgZSxpPXRoaXMuJHZub2RlLmtleTtpZihpKXtpZighKGU9dGhpcy5wcm9wcy5jb2xzTWFwW2ldKSlyZXR1cm59ZWxzZSBlPXRoaXMucHJvcHMuY29sO3JldHVybiB0KFwidGRcIix7Y2xhc3M6W2UuX190ZENsYXNzLHtcInEtdGFibGUtY29sLWF1dG8td2lkdGhcIjp0aGlzLmF1dG9XaWR0aH1dfSx0aGlzLiRzbG90cy5kZWZhdWx0KX19LFFUYWJsZUNvbHVtbnM9e25hbWU6XCJRVGFibGVDb2x1bW5zXCIscHJvcHM6e3ZhbHVlOnt0eXBlOkFycmF5LHJlcXVpcmVkOiEwfSxsYWJlbDpTdHJpbmcsY29sdW1uczp7dHlwZTpBcnJheSxyZXF1aXJlZDohMH0sY29sb3I6U3RyaW5nLGRhcms6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NvbXB1dGVkT3B0aW9uczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiF0LnJlcXVpcmVkfSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybnt2YWx1ZTp0Lm5hbWUsbGFiZWw6dC5sYWJlbH19KX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiB0KFFTZWxlY3Qse3Byb3BzOnttdWx0aXBsZTohMCx0b2dnbGU6ITAsdmFsdWU6dGhpcy52YWx1ZSxvcHRpb25zOnRoaXMuY29tcHV0ZWRPcHRpb25zLGRpc3BsYXlWYWx1ZTp0aGlzLmxhYmVsfHx0aGlzLiRxLmkxOG4udGFibGUuY29sdW1ucyxjb2xvcjp0aGlzLmNvbG9yLGRhcms6dGhpcy5kYXJrLGhpZGVVbmRlcmxpbmU6ITB9LG9uOntpbnB1dDpmdW5jdGlvbih0KXtlLiRlbWl0KFwiaW5wdXRcIix0KX0sY2hhbmdlOmZ1bmN0aW9uKHQpe2UuJGVtaXQoXCJjaGFuZ2VcIix0KX19fSl9fSxRVGltZWxpbmU9e25hbWU6XCJRVGltZWxpbmVcIixwcm92aWRlOmZ1bmN0aW9uKCl7cmV0dXJue19fdGltZWxpbmU6dGhpc319LHByb3BzOntjb2xvcjp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcInByaW1hcnlcIn0scmVzcG9uc2l2ZTpCb29sZWFuLG5vSG92ZXI6Qm9vbGVhbixkYXJrOkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcInVsXCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZVwiLGNsYXNzOntcInEtdGltZWxpbmUtZGFya1wiOnRoaXMuZGFyayxcInEtdGltZWxpbmUtcmVzcG9uc2l2ZVwiOnRoaXMucmVzcG9uc2l2ZSxcInEtdGltZWxpbmUtaG92ZXJcIjohdGhpcy5ub0hvdmVyfX0sdGhpcy4kc2xvdHMuZGVmYXVsdCl9fSxRVGltZWxpbmVFbnRyeT17bmFtZTpcIlFUaW1lbGluZUVudHJ5XCIsaW5qZWN0OntfX3RpbWVsaW5lOntkZWZhdWx0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcihcIlFUaW1lbGluZUVudHJ5IG5lZWRzIHRvIGJlIGNoaWxkIG9mIFFUaW1lbGluZVwiKX19fSxwcm9wczp7aGVhZGluZzpCb29sZWFuLHRhZzp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImgzXCJ9LHNpZGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJyaWdodFwiLHZhbGlkYXRvcjpmdW5jdGlvbih0KXtyZXR1cm5bXCJsZWZ0XCIsXCJyaWdodFwiXS5pbmNsdWRlcyh0KX19LGljb246U3RyaW5nLGNvbG9yOlN0cmluZyx0aXRsZTpTdHJpbmcsc3VidGl0bGU6U3RyaW5nfSxjb21wdXRlZDp7Y29sb3JDbGFzczpmdW5jdGlvbigpe3JldHVyblwidGV4dC1cIisodGhpcy5jb2xvcnx8dGhpcy5fX3RpbWVsaW5lLmNvbG9yKX0sY2xhc3NlczpmdW5jdGlvbigpe3JldHVybltcInEtdGltZWxpbmUtZW50cnktXCIrKFwibGVmdFwiPT09dGhpcy5zaWRlP1wibGVmdFwiOlwicmlnaHRcIiksdGhpcy5pY29uP1wicS10aW1lbGluZS1lbnRyeS13aXRoLWljb25cIjpcIlwiXX19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oZWFkaW5nP3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRpbWVsaW5lLWhlYWRpbmdcIn0sW3QoXCJkaXZcIiksdChcImRpdlwiKSx0KHRoaXMudGFnLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtaGVhZGluZy10aXRsZVwifSx0aGlzLiRzbG90cy5kZWZhdWx0KV0pOnQoXCJsaVwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtZW50cnlcIixjbGFzczp0aGlzLmNsYXNzZXN9LFt0aGlzLiRzbG90cy5zdWJ0aXRsZXx8dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtc3VidGl0bGVcIn0sW3QoXCJzcGFuXCIsdGhpcy5zdWJ0aXRsZSldKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZS1kb3RcIixjbGFzczp0aGlzLmNvbG9yQ2xhc3N9LFt0aGlzLmljb24/dChRSWNvbix7cHJvcHM6e25hbWU6dGhpcy5pY29ufX0pOm51bGxdKSx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10aW1lbGluZS1jb250ZW50XCJ9LCh0aGlzLiRzbG90cy50aXRsZXx8W3QoXCJoNlwiLHtzdGF0aWNDbGFzczpcInEtdGltZWxpbmUtdGl0bGVcIn0sW3RoaXMudGl0bGVdKV0pLmNvbmNhdCh0aGlzLiRzbG90cy5kZWZhdWx0KSldKX19LFFUb29sYmFyPXtuYW1lOlwiUVRvb2xiYXJcIixwcm9wczp7Y29sb3I6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6XCJwcmltYXJ5XCJ9LHRleHRDb2xvcjpTdHJpbmcsaW52ZXJ0ZWQ6Qm9vbGVhbixnbG9zc3k6Qm9vbGVhbn0sY29tcHV0ZWQ6e2NsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXCJxLXRvb2xiYXItXCIrKHRoaXMuaW52ZXJ0ZWQ/XCJpbnZlcnRlZFwiOlwibm9ybWFsXCIpXTtyZXR1cm4gdGhpcy5nbG9zc3kmJnQucHVzaChcImdsb3NzeVwiKSx0aGlzLmludmVydGVkP3QucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHx0aGlzLmNvbG9yKSk6KHQucHVzaChcImJnLVwiK3RoaXMuY29sb3IpLHQucHVzaChcInRleHQtXCIrKHRoaXMudGV4dENvbG9yfHxcIndoaXRlXCIpKSksdH19LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbGJhciByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXIgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LHRoaXMuJHNsb3RzLmRlZmF1bHQpfX0sUVRvb2xiYXJUaXRsZT17bmFtZTpcIlFUb29sYmFyVGl0bGVcIixwcm9wczp7c2hyaW5rOkJvb2xlYW59LHJlbmRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdG9vbGJhci10aXRsZVwiLGNsYXNzOnRoaXMuc2hyaW5rP1wiY29sLWF1dG9cIjpudWxsfSxbdGhpcy4kc2xvdHMuZGVmYXVsdCx0aGlzLiRzbG90cy5zdWJ0aXRsZT90KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10b29sYmFyLXN1YnRpdGxlXCJ9LHRoaXMuJHNsb3RzLnN1YnRpdGxlKTpudWxsXSl9fSxRVHJlZT17bmFtZTpcIlFUcmVlXCIsZGlyZWN0aXZlczp7UmlwcGxlOlJpcHBsZX0scHJvcHM6e25vZGVzOkFycmF5LG5vZGVLZXk6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSxsYWJlbEtleTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcImxhYmVsXCJ9LGNvbG9yOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZ3JleVwifSxjb250cm9sQ29sb3I6U3RyaW5nLHRleHRDb2xvcjpTdHJpbmcsZGFyazpCb29sZWFuLGljb246U3RyaW5nLHRpY2tTdHJhdGVneTp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIm5vbmVcIix2YWxpZGF0b3I6ZnVuY3Rpb24odCl7cmV0dXJuW1wibm9uZVwiLFwic3RyaWN0XCIsXCJsZWFmXCIsXCJsZWFmLWZpbHRlcmVkXCJdLmluY2x1ZGVzKHQpfX0sdGlja2VkOkFycmF5LGV4cGFuZGVkOkFycmF5LHNlbGVjdGVkOnt9LGRlZmF1bHRFeHBhbmRBbGw6Qm9vbGVhbixhY2NvcmRpb246Qm9vbGVhbixmaWx0ZXI6U3RyaW5nLGZpbHRlck1ldGhvZDp7dHlwZTpGdW5jdGlvbixkZWZhdWx0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0W3RoaXMubGFiZWxLZXldJiZ0W3RoaXMubGFiZWxLZXldLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpKT4tMX19LGR1cmF0aW9uOk51bWJlcixub05vZGVzTGFiZWw6U3RyaW5nLG5vUmVzdWx0c0xhYmVsOlN0cmluZ30sY29tcHV0ZWQ6e2hhc1JpcHBsZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vUmlwcGxlfSxjbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuW1widGV4dC1cIit0aGlzLmNvbG9yLHtcInEtdHJlZS1kYXJrXCI6dGhpcy5kYXJrfV19LGhhc1NlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLnNlbGVjdGVkfSxjb21wdXRlZEljb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29ufHx0aGlzLiRxLmljb24udHJlZS5pY29ufSxjb21wdXRlZENvbnRyb2xDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRyb2xDb2xvcnx8dGhpcy5jb2xvcn0sY29udGVudENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuXCJ0ZXh0LVwiKyh0aGlzLnRleHRDb2xvcnx8KHRoaXMuZGFyaz9cIndoaXRlXCI6XCJibGFja1wiKSl9LG1ldGE6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e30saT1mdW5jdGlvbihzLG4pe3ZhciBvPXMudGlja1N0cmF0ZWd5fHwobj9uLnRpY2tTdHJhdGVneTp0LnRpY2tTdHJhdGVneSkscj1zW3Qubm9kZUtleV0sYT1zLmNoaWxkcmVuJiZzLmNoaWxkcmVuLmxlbmd0aD4wLGw9IWEsYz0hcy5kaXNhYmxlZCYmdC5oYXNTZWxlY3Rpb24mJiExIT09cy5zZWxlY3RhYmxlLGg9IXMuZGlzYWJsZWQmJiExIT09cy5leHBhbmRhYmxlLHU9XCJub25lXCIhPT1vLGQ9XCJzdHJpY3RcIj09PW8scD1cImxlYWYtZmlsdGVyZWRcIj09PW8sZj1cImxlYWZcIj09PW98fFwibGVhZi1maWx0ZXJlZFwiPT09byxtPSFzLmRpc2FibGVkJiYhMSE9PXMudGlja2FibGU7ZiYmbSYmbiYmIW4udGlja2FibGUmJihtPSExKTt2YXIgZz1zLmxhenk7ZyYmdC5sYXp5W3JdJiYoZz10Lmxhenlbcl0pO3ZhciB2PXtrZXk6cixwYXJlbnQ6bixpc1BhcmVudDphLGlzTGVhZjpsLGxhenk6ZyxkaXNhYmxlZDpzLmRpc2FibGVkLGxpbms6Y3x8aCYmKGF8fCEwPT09ZyksY2hpbGRyZW46W10sbWF0Y2hlc0ZpbHRlcjohdC5maWx0ZXJ8fHQuZmlsdGVyTWV0aG9kKHMsdC5maWx0ZXIpLHNlbGVjdGVkOnI9PT10LnNlbGVjdGVkJiZjLHNlbGVjdGFibGU6YyxleHBhbmRlZDohIWEmJnQuaW5uZXJFeHBhbmRlZC5pbmNsdWRlcyhyKSxleHBhbmRhYmxlOmgsbm9UaWNrOnMubm9UaWNrfHwhZCYmZyYmXCJsb2FkZWRcIiE9PWcsdGlja2FibGU6bSx0aWNrU3RyYXRlZ3k6byxoYXNUaWNraW5nOnUsc3RyaWN0VGlja2luZzpkLGxlYWZGaWx0ZXJlZFRpY2tpbmc6cCxsZWFmVGlja2luZzpmLHRpY2tlZDpkP3QuaW5uZXJUaWNrZWQuaW5jbHVkZXMocik6ISFsJiZ0LmlubmVyVGlja2VkLmluY2x1ZGVzKHIpfTtpZihlW3JdPXYsYSYmKHYuY2hpbGRyZW49cy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIGkodCx2KX0pLHQuZmlsdGVyJiYodi5tYXRjaGVzRmlsdGVyfHwodi5tYXRjaGVzRmlsdGVyPXYuY2hpbGRyZW4uc29tZShmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXRjaGVzRmlsdGVyfSkpLHYubWF0Y2hlc0ZpbHRlciYmIXYubm9UaWNrJiYhdi5kaXNhYmxlZCYmdi50aWNrYWJsZSYmcCYmdi5jaGlsZHJlbi5ldmVyeShmdW5jdGlvbih0KXtyZXR1cm4hdC5tYXRjaGVzRmlsdGVyfHx0Lm5vVGlja3x8IXQudGlja2FibGV9KSYmKHYudGlja2FibGU9ITEpKSx2Lm1hdGNoZXNGaWx0ZXImJih2Lm5vVGlja3x8ZHx8IXYuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24odCl7cmV0dXJuIHQubm9UaWNrfSl8fCh2Lm5vVGljaz0hMCksZiYmKHYudGlja2VkPSExLHYuaW5kZXRlcm1pbmF0ZT12LmNoaWxkcmVuLnNvbWUoZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5kZXRlcm1pbmF0ZX0pLCF2LmluZGV0ZXJtaW5hdGUpKSkpe3ZhciBiPXYuY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudGlja2VkP3QrMTp0fSwwKTtiPT09di5jaGlsZHJlbi5sZW5ndGg/di50aWNrZWQ9ITA6Yj4wJiYodi5pbmRldGVybWluYXRlPSEwKX1yZXR1cm4gdn07cmV0dXJuIHRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gaSh0LG51bGwpfSksZX19LGRhdGE6ZnVuY3Rpb24oKXtyZXR1cm57bGF6eTp7fSxpbm5lclRpY2tlZDp0aGlzLnRpY2tlZHx8W10saW5uZXJFeHBhbmRlZDp0aGlzLmV4cGFuZGVkfHxbXX19LHdhdGNoOnt0aWNrZWQ6ZnVuY3Rpb24odCl7dGhpcy5pbm5lclRpY2tlZD10fSxleHBhbmRlZDpmdW5jdGlvbih0KXt0aGlzLmlubmVyRXhwYW5kZWQ9dH19LG1ldGhvZHM6e2dldE5vZGVCeUtleTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W10ucmVkdWNlLHM9ZnVuY3Rpb24obixvKXtyZXR1cm4gbnx8IW8/bjpBcnJheS5pc0FycmF5KG8pP2kuY2FsbChPYmplY3QobykscyxuKTpvW2Uubm9kZUtleV09PT10P286by5jaGlsZHJlbj9zKG51bGwsby5jaGlsZHJlbik6dm9pZCAwfTtyZXR1cm4gcyhudWxsLHRoaXMubm9kZXMpfSxnZXRUaWNrZWROb2RlczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMuaW5uZXJUaWNrZWQubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmdldE5vZGVCeUtleShlKX0pfSxnZXRFeHBhbmRlZE5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5pbm5lckV4cGFuZGVkLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdC5nZXROb2RlQnlLZXkoZSl9KX0saXNFeHBhbmRlZDpmdW5jdGlvbih0KXtyZXR1cm4hKCF0fHwhdGhpcy5tZXRhW3RdKSYmdGhpcy5tZXRhW3RdLmV4cGFuZGVkfSxjb2xsYXBzZUFsbDpmdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuZXhwYW5kZWQ/dGhpcy4kZW1pdChcInVwZGF0ZTpleHBhbmRlZFwiLFtdKTp0aGlzLmlubmVyRXhwYW5kZWQ9W119LGV4cGFuZEFsbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10aGlzLmlubmVyRXhwYW5kZWQsaT1mdW5jdGlvbihzKXtzLmNoaWxkcmVuJiZzLmNoaWxkcmVuLmxlbmd0aD4wJiYhMSE9PXMuZXhwYW5kYWJsZSYmITAhPT1zLmRpc2FibGVkJiYoZS5wdXNoKHNbdC5ub2RlS2V5XSkscy5jaGlsZHJlbi5mb3JFYWNoKGkpKX07dGhpcy5ub2Rlcy5mb3JFYWNoKGkpLHZvaWQgMCE9PXRoaXMuZXhwYW5kZWQ/dGhpcy4kZW1pdChcInVwZGF0ZTpleHBhbmRlZFwiLGUpOnRoaXMuaW5uZXJFeHBhbmRlZD1lfSxzZXRFeHBhbmRlZDpmdW5jdGlvbih0LGUsaSxzKXt2YXIgbj10aGlzO2lmKHZvaWQgMD09PWkmJihpPXRoaXMuZ2V0Tm9kZUJ5S2V5KHQpKSx2b2lkIDA9PT1zJiYocz10aGlzLm1ldGFbdF0pLHMubGF6eSYmXCJsb2FkZWRcIiE9PXMubGF6eSl7aWYoXCJsb2FkaW5nXCI9PT1zLmxhenkpcmV0dXJuO3RoaXMuJHNldCh0aGlzLmxhenksdCxcImxvYWRpbmdcIiksdGhpcy4kZW1pdChcImxhenktbG9hZFwiLHtub2RlOmksa2V5OnQsZG9uZTpmdW5jdGlvbihlKXtuLmxhenlbdF09XCJsb2FkZWRcIixlJiYoaS5jaGlsZHJlbj1lKSxuLiRuZXh0VGljayhmdW5jdGlvbigpe3ZhciBlPW4ubWV0YVt0XTtlJiZlLmlzUGFyZW50JiZuLl9fc2V0RXhwYW5kZWQodCwhMCl9KX0sZmFpbDpmdW5jdGlvbigpe24uJGRlbGV0ZShuLmxhenksdCl9fSl9ZWxzZSBzLmlzUGFyZW50JiZzLmV4cGFuZGFibGUmJnRoaXMuX19zZXRFeHBhbmRlZCh0LGUpfSxfX3NldEV4cGFuZGVkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcyxzPXRoaXMuaW5uZXJFeHBhbmRlZCxuPXZvaWQgMCE9PXRoaXMuZXhwYW5kZWQ7aWYobiYmKHM9cy5zbGljZSgpKSxlKXtpZih0aGlzLmFjY29yZGlvbiYmdGhpcy5tZXRhW3RdKXt2YXIgbz1bXTt0aGlzLm1ldGFbdF0ucGFyZW50P3RoaXMubWV0YVt0XS5wYXJlbnQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXtlLmtleSE9PXQmJmUuZXhwYW5kYWJsZSYmby5wdXNoKGUua2V5KX0pOnRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgcz1lW2kubm9kZUtleV07cyE9PXQmJm8ucHVzaChzKX0pLG8ubGVuZ3RoPjAmJihzPXMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFvLmluY2x1ZGVzKHQpfSkpfXM9cy5jb25jYXQoW3RdKS5maWx0ZXIoZnVuY3Rpb24odCxlLGkpe3JldHVybiBpLmluZGV4T2YodCk9PT1lfSl9ZWxzZSBzPXMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pO24/dGhpcy4kZW1pdChcInVwZGF0ZTpleHBhbmRlZFwiLHMpOnRoaXMuaW5uZXJFeHBhbmRlZD1zfSxpc1RpY2tlZDpmdW5jdGlvbih0KXtyZXR1cm4hKCF0fHwhdGhpcy5tZXRhW3RdKSYmdGhpcy5tZXRhW3RdLnRpY2tlZH0sc2V0VGlja2VkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5pbm5lclRpY2tlZCxzPXZvaWQgMCE9PXRoaXMudGlja2VkO3MmJihpPWkuc2xpY2UoKSksaT1lP2kuY29uY2F0KHQpLmZpbHRlcihmdW5jdGlvbih0LGUsaSl7cmV0dXJuIGkuaW5kZXhPZih0KT09PWV9KTppLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4hdC5pbmNsdWRlcyhlKX0pLHMmJnRoaXMuJGVtaXQoXCJ1cGRhdGU6dGlja2VkXCIsaSl9LF9fZ2V0U2xvdFNjb3BlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLG49e3RyZWU6dGhpcyxub2RlOnQsa2V5OmksY29sb3I6dGhpcy5jb2xvcixkYXJrOnRoaXMuZGFya307cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwiZXhwYW5kZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZXhwYW5kZWR9LHNldDpmdW5jdGlvbih0KXt0IT09ZS5leHBhbmRlZCYmcy5zZXRFeHBhbmRlZChpLHQpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLFwidGlja2VkXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBlLnRpY2tlZH0sc2V0OmZ1bmN0aW9uKHQpe3QhPT1lLnRpY2tlZCYmcy5zZXRUaWNrZWQoW2ldLHQpfX0pLG59LF9fZ2V0Q2hpbGRyZW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO3JldHVybih0aGlzLmZpbHRlcj9lLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gaS5tZXRhW3RbaS5ub2RlS2V5XV0ubWF0Y2hlc0ZpbHRlcn0pOmUpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gaS5fX2dldE5vZGUodCxlKX0pfSxfX2dldE5vZGVNZWRpYTpmdW5jdGlvbih0LGUpe3JldHVybiBlLmljb24/dChRSWNvbix7c3RhdGljQ2xhc3M6XCJxLXRyZWUtaWNvbiBxLW1yLXNtXCIscHJvcHM6e25hbWU6ZS5pY29uLGNvbG9yOmUuaWNvbkNvbG9yfX0pOmUuaW1nfHxlLmF2YXRhcj90KFwiaW1nXCIse3N0YXRpY0NsYXNzOlwicS10cmVlLWltZyBxLW1yLXNtXCIsY2xhc3M6e2F2YXRhcjplLmF2YXRhcn0sYXR0cnM6e3NyYzplLmltZ3x8ZS5hdmF0YXJ9fSk6dm9pZCAwfSxfX2dldE5vZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLHM9ZVt0aGlzLm5vZGVLZXldLG49dGhpcy5tZXRhW3NdLG89ZS5oZWFkZXImJnRoaXMuJHNjb3BlZFNsb3RzW1wiaGVhZGVyLVwiK2UuaGVhZGVyXXx8dGhpcy4kc2NvcGVkU2xvdHNbXCJkZWZhdWx0LWhlYWRlclwiXSxyPW4uaXNQYXJlbnQ/dGhpcy5fX2dldENoaWxkcmVuKHQsZS5jaGlsZHJlbik6W10sYT1yLmxlbmd0aD4wfHxuLmxhenkmJlwibG9hZGVkXCIhPT1uLmxhenksbD1lLmJvZHkmJnRoaXMuJHNjb3BlZFNsb3RzW1wiYm9keS1cIitlLmJvZHldfHx0aGlzLiRzY29wZWRTbG90c1tcImRlZmF1bHQtYm9keVwiXSxjPW98fGw/dGhpcy5fX2dldFNsb3RTY29wZShlLG4scyk6bnVsbDtyZXR1cm4gbCYmKGw9dChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlLWJvZHkgcmVsYXRpdmUtcG9zaXRpb25cIn0sW3QoXCJkaXZcIix7Y2xhc3M6dGhpcy5jb250ZW50Q2xhc3N9LFtsKGMpXSldKSksdChcImRpdlwiLHtrZXk6cyxzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlXCIsY2xhc3M6e1wicS10cmVlLW5vZGUtcGFyZW50XCI6YSxcInEtdHJlZS1ub2RlLWNoaWxkXCI6IWF9fSxbdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlLWhlYWRlciByZWxhdGl2ZS1wb3NpdGlvbiByb3cgbm8td3JhcCBpdGVtcy1jZW50ZXJcIixjbGFzczp7XCJxLXRyZWUtbm9kZS1saW5rXCI6bi5saW5rLFwicS10cmVlLW5vZGUtc2VsZWN0ZWRcIjpuLnNlbGVjdGVkLGRpc2FibGVkOm4uZGlzYWJsZWR9LG9uOntjbGljazpmdW5jdGlvbigpe2kuX19vbkNsaWNrKGUsbil9fSxkaXJlY3RpdmVzOm4uc2VsZWN0YWJsZT9be25hbWU6XCJyaXBwbGVcIn1dOm51bGx9LFtcImxvYWRpbmdcIj09PW4ubGF6eT90KFFTcGlubmVyLHtzdGF0aWNDbGFzczpcInEtdHJlZS1ub2RlLWhlYWRlci1tZWRpYSBxLW1yLXhzXCIscHJvcHM6e2NvbG9yOnRoaXMuY29tcHV0ZWRDb250cm9sQ29sb3J9fSk6YT90KFFJY29uLHtzdGF0aWNDbGFzczpcInEtdHJlZS1hcnJvdyBxLW1yLXhzIHRyYW5zaXRpb24tZ2VuZXJpY1wiLGNsYXNzOntcInEtdHJlZS1hcnJvdy1yb3RhdGVcIjpuLmV4cGFuZGVkfSxwcm9wczp7bmFtZTp0aGlzLmNvbXB1dGVkSWNvbn0sbmF0aXZlT246e2NsaWNrOmZ1bmN0aW9uKHQpe2kuX19vbkV4cGFuZENsaWNrKGUsbix0KX19fSk6bnVsbCx0KFwic3BhblwiLHtzdGF0aWNDbGFzczpcInJvdyBuby13cmFwIGl0ZW1zLWNlbnRlclwiLGNsYXNzOnRoaXMuY29udGVudENsYXNzfSxbbi5oYXNUaWNraW5nJiYhbi5ub1RpY2s/dChRQ2hlY2tib3gse3N0YXRpY0NsYXNzOlwicS1tci14c1wiLHByb3BzOnt2YWx1ZTpuLmluZGV0ZXJtaW5hdGU/bnVsbDpuLnRpY2tlZCxjb2xvcjp0aGlzLmNvbXB1dGVkQ29udHJvbENvbG9yLGRhcms6dGhpcy5kYXJrLGtlZXBDb2xvcjohMCxkaXNhYmxlOiFuLnRpY2thYmxlfSxvbjp7aW5wdXQ6ZnVuY3Rpb24odCl7aS5fX29uVGlja2VkQ2xpY2soZSxuLHQpfX19KTpudWxsLG8/byhjKTpbdGhpcy5fX2dldE5vZGVNZWRpYSh0LGUpLHQoXCJzcGFuXCIsZVt0aGlzLmxhYmVsS2V5XSldXSldKSxhP3QoUVNsaWRlVHJhbnNpdGlvbix7cHJvcHM6e2R1cmF0aW9uOnRoaXMuZHVyYXRpb259fSxbdChcImRpdlwiLHtkaXJlY3RpdmVzOlt7bmFtZTpcInNob3dcIix2YWx1ZTpuLmV4cGFuZGVkfV0sc3RhdGljQ2xhc3M6XCJxLXRyZWUtbm9kZS1jb2xsYXBzaWJsZVwiLGNsYXNzOlwidGV4dC1cIit0aGlzLmNvbG9yfSxbbCx0KFwiZGl2XCIse3N0YXRpY0NsYXNzOlwicS10cmVlLWNoaWxkcmVuXCIsY2xhc3M6e2Rpc2FibGVkOm4uZGlzYWJsZWR9fSxyKV0pXSk6bF0pfSxfX29uQ2xpY2s6ZnVuY3Rpb24odCxlKXt0aGlzLmhhc1NlbGVjdGlvbj9lLnNlbGVjdGFibGUmJnRoaXMuJGVtaXQoXCJ1cGRhdGU6c2VsZWN0ZWRcIixlLmtleSE9PXRoaXMuc2VsZWN0ZWQ/ZS5rZXk6bnVsbCk6dGhpcy5fX29uRXhwYW5kQ2xpY2sodCxlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmhhbmRsZXImJnQuaGFuZGxlcih0KX0sX19vbkV4cGFuZENsaWNrOmZ1bmN0aW9uKHQsZSxpKXt2b2lkIDAhPT1pJiZpLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuc2V0RXhwYW5kZWQoZS5rZXksIWUuZXhwYW5kZWQsdCxlKX0sX19vblRpY2tlZENsaWNrOmZ1bmN0aW9uKHQsZSxpKXtpZihlLmluZGV0ZXJtaW5hdGUmJmkmJihpPSExKSxlLnN0cmljdFRpY2tpbmcpdGhpcy5zZXRUaWNrZWQoW2Uua2V5XSxpKTtlbHNlIGlmKGUubGVhZlRpY2tpbmcpe3ZhciBzPVtdLG49ZnVuY3Rpb24odCl7dC5pc1BhcmVudD8oaXx8dC5ub1RpY2t8fCF0LnRpY2thYmxlfHxzLnB1c2godC5rZXkpLHQubGVhZlRpY2tpbmcmJnQuY2hpbGRyZW4uZm9yRWFjaChuKSk6dC5ub1RpY2t8fCF0LnRpY2thYmxlfHx0LmxlYWZGaWx0ZXJlZFRpY2tpbmcmJiF0Lm1hdGNoZXNGaWx0ZXJ8fHMucHVzaCh0LmtleSl9O24oZSksdGhpcy5zZXRUaWNrZWQocyxpKX19fSxyZW5kZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2dldENoaWxkcmVuKHQsdGhpcy5ub2Rlcyk7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXRyZWUgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXN9LDA9PT1lLmxlbmd0aD90aGlzLmZpbHRlcj90aGlzLm5vUmVzdWx0c0xhYmVsfHx0aGlzLiRxLmkxOG4udHJlZS5ub1Jlc3VsdHM6dGhpcy5ub05vZGVzTGFiZWx8fHRoaXMuJHEuaTE4bi50cmVlLm5vTm9kZXM6ZSl9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRFeHBhbmRBbGwmJnRoaXMuZXhwYW5kQWxsKCl9fTtmdW5jdGlvbiBpbml0RmlsZSh0KXt0Ll9fZG9uZVVwbG9hZGluZz0hMSx0Ll9fZmFpbGVkPSExLHQuX191cGxvYWRlZD0wLHQuX19wcm9ncmVzcz0wfXZhciBRVXBsb2FkZXI9e25hbWU6XCJRVXBsb2FkZXJcIixtaXhpbnM6W0ZyYW1lTWl4aW5dLHByb3BzOntuYW1lOnt0eXBlOlN0cmluZyxkZWZhdWx0OlwiZmlsZVwifSxoZWFkZXJzOk9iamVjdCx1cmw6e3R5cGU6U3RyaW5nLHJlcXVpcmVkOiEwfSx1cmxGYWN0b3J5Ont0eXBlOkZ1bmN0aW9uLHJlcXVpcmVkOiExfSx1cGxvYWRGYWN0b3J5OkZ1bmN0aW9uLGFkZGl0aW9uYWxGaWVsZHM6e3R5cGU6QXJyYXksZGVmYXVsdDpmdW5jdGlvbigpe3JldHVybltdfX0sbm9Db250ZW50VHlwZTpCb29sZWFuLG1ldGhvZDp7dHlwZTpTdHJpbmcsZGVmYXVsdDpcIlBPU1RcIn0sZmlsdGVyOkZ1bmN0aW9uLGV4dGVuc2lvbnM6U3RyaW5nLG11bHRpcGxlOkJvb2xlYW4saGlkZVVwbG9hZEJ1dHRvbjpCb29sZWFuLGhpZGVVcGxvYWRQcm9ncmVzczpCb29sZWFuLG5vVGh1bWJuYWlsczpCb29sZWFuLGF1dG9FeHBhbmQ6Qm9vbGVhbixleHBhbmRTdHlsZTpbQXJyYXksU3RyaW5nLE9iamVjdF0sZXhwYW5kQ2xhc3M6W0FycmF5LFN0cmluZyxPYmplY3RdLHdpdGhDcmVkZW50aWFsczpCb29sZWFuLHNlbmRSYXc6e3R5cGU6Qm9vbGVhbixkZWZhdWx0OiExfX0sZGF0YTpmdW5jdGlvbigpe3JldHVybntxdWV1ZTpbXSxmaWxlczpbXSx1cGxvYWRpbmc6ITEsdXBsb2FkZWRTaXplOjAsdG90YWxTaXplOjAseGhyczpbXSxmb2N1c2VkOiExLGRuZDohMSxleHBhbmRlZDohMX19LGNvbXB1dGVkOntxdWV1ZUxlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlLmxlbmd0aH0saGFzRXhwYW5kZWRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsZXMubGVuZ3RoPjB9LGxhYmVsOmZ1bmN0aW9uKCl7dmFyIHQ9aHVtYW5TdG9yYWdlU2l6ZSh0aGlzLnRvdGFsU2l6ZSk7cmV0dXJuIHRoaXMudXBsb2FkaW5nP3RoaXMucHJvZ3Jlc3MudG9GaXhlZCgyKStcIiUgKFwiK2h1bWFuU3RvcmFnZVNpemUodGhpcy51cGxvYWRlZFNpemUpK1wiIC8gXCIrdCtcIilcIjp0aGlzLnF1ZXVlTGVuZ3RoK1wiIChcIit0K1wiKVwifSxwcm9ncmVzczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRvdGFsU2l6ZT9NYXRoLm1pbig5OS45OSx0aGlzLnVwbG9hZGVkU2l6ZS90aGlzLnRvdGFsU2l6ZSoxMDApOjB9LGFkZERpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGlzYWJsZXx8IXRoaXMubXVsdGlwbGUmJnRoaXMucXVldWVMZW5ndGg+PTF9LGZpbGVzU3R5bGU6ZnVuY3Rpb24oKXtpZih0aGlzLm1heEhlaWdodClyZXR1cm57bWF4SGVpZ2h0OnRoaXMubWF4SGVpZ2h0fX0sZG5kQ2xhc3M6ZnVuY3Rpb24oKXt2YXIgdD1bXCJ0ZXh0LVwiK3RoaXMuY29sb3JdO3JldHVybiB0aGlzLmlzSW52ZXJ0ZWQmJnQucHVzaChcImludmVydGVkXCIpLHR9LGNsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm57XCJxLXVwbG9hZGVyLWV4cGFuZGVkXCI6dGhpcy5leHBhbmRlZCxcInEtdXBsb2FkZXItZGFya1wiOnRoaXMuZGFyayxcInEtdXBsb2FkZXItZmlsZXMtbm8tYm9yZGVyXCI6dGhpcy5pc0ludmVydGVkfHwhdGhpcy5oaWRlVW5kZXJsaW5lfX0scHJvZ3Jlc3NDb2xvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhcms/XCJ3aGl0ZVwiOlwiZ3JleVwifSxjb21wdXRlZEV4dGVuc2lvbnM6ZnVuY3Rpb24oKXtpZih0aGlzLmV4dGVuc2lvbnMpcmV0dXJuIHRoaXMuZXh0ZW5zaW9ucy5zcGxpdChcIixcIikubWFwKGZ1bmN0aW9uKHQpe3JldHVybih0PXQudHJpbSgpKS5lbmRzV2l0aChcIi8qXCIpJiYodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpLHR9KX19LHdhdGNoOntoYXNFeHBhbmRlZENvbnRlbnQ6ZnVuY3Rpb24odCl7ITE9PT10P3RoaXMuZXhwYW5kZWQ9ITE6dGhpcy5hdXRvRXhwYW5kJiYodGhpcy5leHBhbmRlZD0hMCl9fSxtZXRob2RzOnthZGQ6ZnVuY3Rpb24odCl7dCYmdGhpcy5fX2FkZChudWxsLHQpfSxfX29uRHJhZ092ZXI6ZnVuY3Rpb24odCl7c3RvcEFuZFByZXZlbnQodCksdGhpcy5kbmQ9ITB9LF9fb25EcmFnTGVhdmU6ZnVuY3Rpb24odCl7c3RvcEFuZFByZXZlbnQodCksdGhpcy5kbmQ9ITF9LF9fb25Ecm9wOmZ1bmN0aW9uKHQpe3N0b3BBbmRQcmV2ZW50KHQpLHRoaXMuZG5kPSExO3ZhciBlPXQuZGF0YVRyYW5zZmVyLmZpbGVzOzAhPT1lLmxlbmd0aCYmKGU9dGhpcy5tdWx0aXBsZT9lOltlWzBdXSx0aGlzLl9fYWRkKG51bGwsZSkpfSxfX2ZpbHRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodCxmdW5jdGlvbih0KXtyZXR1cm4gZS5jb21wdXRlZEV4dGVuc2lvbnMuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC50eXBlLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChlLnRvVXBwZXJDYXNlKCkpfHx0Lm5hbWUudG9VcHBlckNhc2UoKS5lbmRzV2l0aChlLnRvVXBwZXJDYXNlKCkpfSl9KX0sX19hZGQ6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzO2lmKCF0aGlzLmFkZERpc2FibGVkJiYoZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlfHx0LnRhcmdldC5maWxlcyksIXRoaXMuZXh0ZW5zaW9uc3x8MCE9PShlPXRoaXMuX19maWx0ZXIoZSkpLmxlbmd0aCkpe3RoaXMuJHJlZnMuZmlsZS52YWx1ZT1cIlwiO3ZhciBzPVtdO2U9ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIWkucXVldWUuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gdC5uYW1lPT09ZS5uYW1lfSl9KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmZpbHRlciYmKGU9dGhpcy5maWx0ZXIoZSkpLChlPWUubWFwKGZ1bmN0aW9uKHQpe2lmKGluaXRGaWxlKHQpLHQuX19zaXplPWh1bWFuU3RvcmFnZVNpemUodC5zaXplKSx0Ll9fdGltZXN0YW1wPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGkubm9UaHVtYm5haWxzfHwhdC50eXBlLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChcIklNQUdFXCIpKWkucXVldWUucHVzaCh0KTtlbHNle3ZhciBlPW5ldyBGaWxlUmVhZGVyLG49bmV3IFByb21pc2UoZnVuY3Rpb24ocyxuKXtlLm9ubG9hZD1mdW5jdGlvbihlKXt2YXIgbj1uZXcgSW1hZ2U7bi5zcmM9ZS50YXJnZXQucmVzdWx0LHQuX19pbWc9bixpLnF1ZXVlLnB1c2godCksaS5fX2NvbXB1dGVUb3RhbFNpemUoKSxzKCEwKX0sZS5vbmVycm9yPWZ1bmN0aW9uKHQpe24odCl9fSk7ZS5yZWFkQXNEYXRhVVJMKHQpLHMucHVzaChuKX1yZXR1cm4gdH0pKS5sZW5ndGg+MCYmKHRoaXMuZmlsZXM9dGhpcy5maWxlcy5jb25jYXQoZSksUHJvbWlzZS5hbGwocykudGhlbihmdW5jdGlvbigpe2kuJGVtaXQoXCJhZGRcIixlKX0pLHRoaXMuX19jb21wdXRlVG90YWxTaXplKCkpfX0sX19jb21wdXRlVG90YWxTaXplOmZ1bmN0aW9uKCl7dGhpcy50b3RhbFNpemU9dGhpcy5xdWV1ZUxlbmd0aD90aGlzLnF1ZXVlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5zaXplfSkucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pOjB9LF9fcmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZSxpPXQuX19kb25lVXBsb2FkaW5nO3RoaXMudXBsb2FkaW5nJiYhaT8odGhpcy4kZW1pdChcInJlbW92ZTphYm9ydFwiLHQsdC54aHIpLHQueGhyJiZ0Lnhoci5hYm9ydCgpLHRoaXMudXBsb2FkZWRTaXplLT10Ll9fdXBsb2FkZWQpOnRoaXMuJGVtaXQoXCJyZW1vdmU6XCIrKGk/XCJkb25lXCI6XCJjYW5jZWxcIiksdCx0LnhociksaXx8KHRoaXMucXVldWU9dGhpcy5xdWV1ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZSE9PWV9KSksdC5fX3JlbW92ZWQ9ITAsdGhpcy5maWxlcz10aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lIT09ZX0pLHRoaXMuZmlsZXMubGVuZ3RofHwodGhpcy51cGxvYWRpbmc9ITEpLHRoaXMuX19jb21wdXRlVG90YWxTaXplKCl9LF9fcGljazpmdW5jdGlvbigpeyF0aGlzLmFkZERpc2FibGVkJiZ0aGlzLiRxLnBsYXRmb3JtLmlzLm1vemlsbGEmJnRoaXMuJHJlZnMuZmlsZS5jbGljaygpfSxfX2dldFVwbG9hZFByb21pc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihpbml0RmlsZSh0KSx0aGlzLnVwbG9hZEZhY3Rvcnkpe3ZhciBpPWZ1bmN0aW9uKGkpe3ZhciBzPWkqdC5zaXplO2UudXBsb2FkZWRTaXplKz1zLXQuX191cGxvYWRlZCx0Ll9fdXBsb2FkZWQ9cyx0Ll9fcHJvZ3Jlc3M9TWF0aC5taW4oOTkscGFyc2VJbnQoMTAwKmksMTApKSxlLiRmb3JjZVVwZGF0ZSgpfTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocyxuKXtlLnVwbG9hZEZhY3RvcnkodCxpKS50aGVuKGZ1bmN0aW9uKHQpe3QuX19kb25lVXBsb2FkaW5nPSEwLHQuX19wcm9ncmVzcz0xMDAsZS4kZW1pdChcInVwbG9hZGVkXCIsdCksZS4kZm9yY2VVcGRhdGUoKSxzKHQpfSkuY2F0Y2goZnVuY3Rpb24oaSl7dC5fX2ZhaWxlZD0hMCxlLiRlbWl0KFwiZmFpbFwiLHQpLGUuJGZvcmNlVXBkYXRlKCksbihpKX0pfSl9dmFyIHM9bmV3IEZvcm1EYXRhLG49bmV3IFhNTEh0dHBSZXF1ZXN0O3RyeXt0aGlzLmFkZGl0aW9uYWxGaWVsZHMuZm9yRWFjaChmdW5jdGlvbih0KXtzLmFwcGVuZCh0Lm5hbWUsdC52YWx1ZSl9KSwhMCE9PXRoaXMubm9Db250ZW50VHlwZSYmcy5hcHBlbmQoXCJDb250ZW50LVR5cGVcIix0LnR5cGV8fFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpLHMuYXBwZW5kKHRoaXMubmFtZSx0KX1jYXRjaCh0KXtyZXR1cm59cmV0dXJuIHQueGhyPW4sbmV3IFByb21pc2UoZnVuY3Rpb24oaSxvKXtuLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIixmdW5jdGlvbihpKXtpZighdC5fX3JlbW92ZWQpe2kucGVyY2VudD1pLnRvdGFsP2kubG9hZGVkL2kudG90YWw6MDt2YXIgcz1pLnBlcmNlbnQqdC5zaXplO2UudXBsb2FkZWRTaXplKz1zLXQuX191cGxvYWRlZCx0Ll9fdXBsb2FkZWQ9cyx0Ll9fcHJvZ3Jlc3M9TWF0aC5taW4oOTkscGFyc2VJbnQoMTAwKmkucGVyY2VudCwxMCkpfX0sITEpLG4ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7bi5yZWFkeVN0YXRlPDR8fChuLnN0YXR1cyYmbi5zdGF0dXM8NDAwPyh0Ll9fZG9uZVVwbG9hZGluZz0hMCx0Ll9fcHJvZ3Jlc3M9MTAwLGUuJGVtaXQoXCJ1cGxvYWRlZFwiLHQsbiksaSh0KSk6KHQuX19mYWlsZWQ9ITAsZS4kZW1pdChcImZhaWxcIix0LG4pLG8obikpKX0sbi5vbmVycm9yPWZ1bmN0aW9uKCl7dC5fX2ZhaWxlZD0hMCxlLiRlbWl0KFwiZmFpbFwiLHQsbiksbyhuKX0sKGUudXJsRmFjdG9yeT9lLnVybEZhY3RvcnkodCk6UHJvbWlzZS5yZXNvbHZlKGUudXJsKSkudGhlbihmdW5jdGlvbihpKXtuLm9wZW4oZS5tZXRob2QsaSwhMCksZS53aXRoQ3JlZGVudGlhbHMmJihuLndpdGhDcmVkZW50aWFscz0hMCksZS5oZWFkZXJzJiZPYmplY3Qua2V5cyhlLmhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24odCl7bi5zZXRSZXF1ZXN0SGVhZGVyKHQsZS5oZWFkZXJzW3RdKX0pLGUueGhycy5wdXNoKG4pLGUuc2VuZFJhdz9uLnNlbmQodCk6bi5zZW5kKHMpfSl9KX0scGljazpmdW5jdGlvbigpe3RoaXMuYWRkRGlzYWJsZWR8fHRoaXMuJHJlZnMuZmlsZS5jbGljaygpfSx1cGxvYWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dGhpcy5xdWV1ZUxlbmd0aDtpZighdGhpcy5kaXNhYmxlJiYwIT09ZSl7dmFyIGk9MDt0aGlzLnVwbG9hZGVkU2l6ZT0wLHRoaXMudXBsb2FkaW5nPSEwLHRoaXMueGhycz1bXSx0aGlzLiRlbWl0KFwic3RhcnRcIik7dmFyIHM9ZnVuY3Rpb24oKXsrK2k9PT1lJiYodC51cGxvYWRpbmc9ITEsdC54aHJzPVtdLHQucXVldWU9dC5xdWV1ZS5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIXQuX19kb25lVXBsb2FkaW5nfSksdC5fX2NvbXB1dGVUb3RhbFNpemUoKSx0LiRlbWl0KFwiZmluaXNoXCIpKX07dGhpcy5xdWV1ZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX19nZXRVcGxvYWRQcm9taXNlKGUpfSkuZm9yRWFjaChmdW5jdGlvbih0KXt0LnRoZW4ocykuY2F0Y2gocyl9KX19LGFib3J0OmZ1bmN0aW9uKCl7dGhpcy54aHJzLmZvckVhY2goZnVuY3Rpb24odCl7dC5hYm9ydCgpfSksdGhpcy51cGxvYWRpbmc9ITEsdGhpcy4kZW1pdChcImFib3J0XCIpfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuYWJvcnQoKSx0aGlzLmZpbGVzPVtdLHRoaXMucXVldWU9W10sdGhpcy5leHBhbmRlZD0hMSx0aGlzLl9fY29tcHV0ZVRvdGFsU2l6ZSgpLHRoaXMuJGVtaXQoXCJyZXNldFwiKX19LHJlbmRlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9W3QoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJjb2wgcS1pbnB1dC10YXJnZXQgZWxsaXBzaXNcIixjbGFzczp0aGlzLmFsaWduQ2xhc3N9LFt0aGlzLmxhYmVsXSldO3JldHVybiB0aGlzLnVwbG9hZGluZz9pLnB1c2godGhpcy4kc2xvdHMubG9hZGluZz90KFwiZGl2XCIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1lbmQgc2VsZi1jZW50ZXIgcS1pZi1jb250cm9sXCJ9LHRoaXMuJHNsb3RzLmxvYWRpbmcpOnQoUVNwaW5uZXIse3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1lbmQgc2VsZi1jZW50ZXJcIixwcm9wczp7c2l6ZTpcIjI0cHhcIn19KSx0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtaWYtZW5kIHNlbGYtY2VudGVyIHEtaWYtY29udHJvbFwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi51cGxvYWRlcltcImNsZWFyXCIrKHRoaXMuaXNJbnZlcnRlZD9cIkludmVydGVkXCI6XCJcIildfSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy5hYm9ydH19KSk6KGkucHVzaCh0KFFJY29uLHtzbG90OlwiYWZ0ZXJcIixzdGF0aWNDbGFzczpcInEtdXBsb2FkZXItcGljay1idXR0b24gc2VsZi1jZW50ZXIgcS1pZi1jb250cm9sIHJlbGF0aXZlLXBvc2l0aW9uIG92ZXJmbG93LWhpZGRlblwiLHByb3BzOntuYW1lOnRoaXMuJHEuaWNvbi51cGxvYWRlci5hZGR9LGF0dHJzOntkaXNhYmxlZDp0aGlzLmFkZERpc2FibGVkfX0sW3QoXCJpbnB1dFwiLHtyZWY6XCJmaWxlXCIsc3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLWlucHV0IGFic29sdXRlLWZ1bGwgY3Vyc29yLXBvaW50ZXJcIixhdHRyczpPYmplY3QuYXNzaWduKHt0eXBlOlwiZmlsZVwiLGFjY2VwdDp0aGlzLmV4dGVuc2lvbnN9LHRoaXMubXVsdGlwbGU/e211bHRpcGxlOiEwfTp7fSksb246e2NoYW5nZTp0aGlzLl9fYWRkfX0pXSkpLHRoaXMuaGlkZVVwbG9hZEJ1dHRvbnx8aS5wdXNoKHQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sIHNlbGYtY2VudGVyXCIscHJvcHM6e25hbWU6dGhpcy4kcS5pY29uLnVwbG9hZGVyLnVwbG9hZH0sYXR0cnM6e2Rpc2FibGVkOjA9PT10aGlzLnF1ZXVlTGVuZ3RofSxuYXRpdmVPbjp7Y2xpY2s6dGhpcy51cGxvYWR9fSkpKSx0aGlzLmhhc0V4cGFuZGVkQ29udGVudCYmaS5wdXNoKHQoUUljb24se3Nsb3Q6XCJhZnRlclwiLHN0YXRpY0NsYXNzOlwicS1pZi1jb250cm9sIGdlbmVyaWNfdHJhbnNpdGlvbiBzZWxmLWNlbnRlclwiLGNsYXNzOntcInJvdGF0ZS0xODBcIjp0aGlzLmV4cGFuZGVkfSxwcm9wczp7bmFtZTp0aGlzLiRxLmljb24udXBsb2FkZXIuZXhwYW5kfSxuYXRpdmVPbjp7Y2xpY2s6ZnVuY3Rpb24oKXtlLmV4cGFuZGVkPSFlLmV4cGFuZGVkfX19KSksdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdXBsb2FkZXIgcmVsYXRpdmUtcG9zaXRpb25cIixjbGFzczp0aGlzLmNsYXNzZXMsb246e2RyYWdvdmVyOnRoaXMuX19vbkRyYWdPdmVyfX0sW3QoUUlucHV0RnJhbWUse3JlZjpcImlucHV0XCIscHJvcHM6e3ByZWZpeDp0aGlzLnByZWZpeCxzdWZmaXg6dGhpcy5zdWZmaXgsc3RhY2tMYWJlbDp0aGlzLnN0YWNrTGFiZWwsZmxvYXRMYWJlbDp0aGlzLmZsb2F0TGFiZWwsZXJyb3I6dGhpcy5lcnJvcix3YXJuaW5nOnRoaXMud2FybmluZyxyZWFkb25seTp0aGlzLnJlYWRvbmx5LGludmVydGVkOnRoaXMuaW52ZXJ0ZWQsaW52ZXJ0ZWRMaWdodDp0aGlzLmludmVydGVkTGlnaHQsZGFyazp0aGlzLmRhcmssaGlkZVVuZGVybGluZTp0aGlzLmhpZGVVbmRlcmxpbmUsYmVmb3JlOnRoaXMuYmVmb3JlLGFmdGVyOnRoaXMuYWZ0ZXIsY29sb3I6dGhpcy5jb2xvcixhbGlnbjp0aGlzLmFsaWduLG5vUGFyZW50RmllbGQ6dGhpcy5ub1BhcmVudEZpZWxkLGxlbmd0aDp0aGlzLnF1ZXVlTGVuZ3RoLGFkZGl0aW9uYWxMZW5ndGg6ITB9fSxpKSx0KFFTbGlkZVRyYW5zaXRpb24sW3QoXCJkaXZcIix7Y2xhc3M6dGhpcy5leHBhbmRDbGFzcyxzdHlsZTp0aGlzLmV4cGFuZFN0eWxlLGRpcmVjdGl2ZXM6W3tuYW1lOlwic2hvd1wiLHZhbHVlOnRoaXMuZXhwYW5kZWR9XX0sW3QoUUxpc3Qse3N0YXRpY0NsYXNzOlwicS11cGxvYWRlci1maWxlcyBxLXB5LW5vbmUgc2Nyb2xsXCIsc3R5bGU6dGhpcy5maWxlc1N0eWxlLHByb3BzOntkYXJrOnRoaXMuZGFya319LHRoaXMuZmlsZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiB0KFFJdGVtLHtrZXk6aS5uYW1lK2kuX190aW1lc3RhbXAsc3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLWZpbGUgcS1wYS14c1wifSxbIWUuaGlkZVVwbG9hZFByb2dyZXNzJiZ0KFFQcm9ncmVzcyx7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLXByb2dyZXNzLWJnIGFic29sdXRlLWZ1bGxcIixwcm9wczp7Y29sb3I6aS5fX2ZhaWxlZD9cIm5lZ2F0aXZlXCI6ZS5wcm9ncmVzc0NvbG9yLHBlcmNlbnRhZ2U6aS5fX3Byb2dyZXNzLGhlaWdodDpcIjEwMCVcIn19KXx8dm9pZCAwLCFlLmhpZGVVcGxvYWRQcm9ncmVzcyYmdChcImRpdlwiLHtzdGF0aWNDbGFzczpcInEtdXBsb2FkZXItcHJvZ3Jlc3MtdGV4dCBhYnNvbHV0ZVwifSxbaS5fX3Byb2dyZXNzK1wiJVwiXSl8fHZvaWQgMCx0KFFJdGVtU2lkZSx7cHJvcHM6aS5fX2ltZz97aW1hZ2U6aS5fX2ltZy5zcmN9OntpY29uOmUuJHEuaWNvbi51cGxvYWRlci5maWxlLGNvbG9yOmUuY29sb3J9fSksdChRSXRlbU1haW4se3Byb3BzOntsYWJlbDppLm5hbWUsc3VibGFiZWw6aS5fX3NpemV9fSksdChRSXRlbVNpZGUse3Byb3BzOntyaWdodDohMH19LFt0KFFJdGVtVGlsZSx7c3RhdGljQ2xhc3M6XCJjdXJzb3ItcG9pbnRlclwiLHByb3BzOntpY29uOmUuJHEuaWNvbi51cGxvYWRlcltpLl9fZG9uZVVwbG9hZGluZz9cImRvbmVcIjpcImNsZWFyXCJdLGNvbG9yOmUuY29sb3J9LG5hdGl2ZU9uOntjbGljazpmdW5jdGlvbigpe2UuX19yZW1vdmUoaSl9fX0pXSldKX0pKV0pXSksdGhpcy5kbmQmJnQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXVwbG9hZGVyLWRuZCBmbGV4IHJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYWJzb2x1dGUtZnVsbFwiLGNsYXNzOnRoaXMuZG5kQ2xhc3Msb246e2RyYWdlbnRlcjpzdG9wQW5kUHJldmVudCxkcmFnb3ZlcjpzdG9wQW5kUHJldmVudCxkcmFnbGVhdmU6dGhpcy5fX29uRHJhZ0xlYXZlLGRyb3A6dGhpcy5fX29uRHJvcH19KXx8dm9pZCAwXSl9fSxRVmlkZW89e25hbWU6XCJRVmlkZW9cIixwcm9wczp7c3JjOnt0eXBlOlN0cmluZyxyZXF1aXJlZDohMH19LGNvbXB1dGVkOntpZnJhbWVEYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2F0dHJzOntzcmM6dGhpcy5zcmMsZnJhbWVib3JkZXI6XCIwXCIsYWxsb3dmdWxsc2NyZWVuOiEwfX19fSxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLXZpZGVvXCJ9LFt0KFwiaWZyYW1lXCIsdGhpcy5pZnJhbWVEYXRhKV0pfX0sY29tcG9uZW50cyQxPU9iamVjdC5mcmVlemUoe1FBY3Rpb25TaGVldDpRQWN0aW9uU2hlZXQsUUFqYXhCYXI6UUFqYXhCYXIsUUFsZXJ0OlFBbGVydCxRQXV0b2NvbXBsZXRlOlFBdXRvY29tcGxldGUsUUJyZWFkY3J1bWJzOlFCcmVhZGNydW1icyxRQnJlYWRjcnVtYnNFbDpRQnJlYWRjcnVtYnNFbCxRQnRuOlFCdG4sUUJ0bkdyb3VwOlFCdG5Hcm91cCxRQnRuRHJvcGRvd246UUJ0bkRyb3Bkb3duLFFCdG5Ub2dnbGU6UUJ0blRvZ2dsZSxRQ2FyZDpRQ2FyZCxRQ2FyZFRpdGxlOlFDYXJkVGl0bGUsUUNhcmRNYWluOlFDYXJkTWFpbixRQ2FyZEFjdGlvbnM6UUNhcmRBY3Rpb25zLFFDYXJkTWVkaWE6UUNhcmRNZWRpYSxRQ2FyZFNlcGFyYXRvcjpRQ2FyZFNlcGFyYXRvcixRQ2Fyb3VzZWw6UUNhcm91c2VsLFFDYXJvdXNlbFNsaWRlOlFDYXJvdXNlbFNsaWRlLFFDYXJvdXNlbENvbnRyb2w6UUNhcm91c2VsQ29udHJvbCxRQ2hhdE1lc3NhZ2U6UUNoYXRNZXNzYWdlLFFDaGVja2JveDpRQ2hlY2tib3gsUUNoaXA6UUNoaXAsUUNoaXBzSW5wdXQ6UUNoaXBzSW5wdXQsUUNvbGxhcHNpYmxlOlFDb2xsYXBzaWJsZSxRQ29sb3I6UUNvbG9yLFFDb2xvclBpY2tlcjpRQ29sb3JQaWNrZXIsUUNvbnRleHRNZW51OlFDb250ZXh0TWVudSxRRGF0ZXRpbWU6UURhdGV0aW1lLFFEYXRldGltZVBpY2tlcjpRRGF0ZXRpbWVQaWNrZXIsUURpYWxvZzpRRGlhbG9nLFFFZGl0b3I6UUVkaXRvcixRRmFiOlFGYWIsUUZhYkFjdGlvbjpRRmFiQWN0aW9uLFFGaWVsZDpRRmllbGQsUUljb246UUljb24sUUluZmluaXRlU2Nyb2xsOlFJbmZpbml0ZVNjcm9sbCxRSW5uZXJMb2FkaW5nOlFJbm5lckxvYWRpbmcsUUlucHV0OlFJbnB1dCxRSW5wdXRGcmFtZTpRSW5wdXRGcmFtZSxRSnVtYm90cm9uOlFKdW1ib3Ryb24sUUtub2I6UUtub2IsUUxheW91dDpRTGF5b3V0LFFMYXlvdXREcmF3ZXI6UUxheW91dERyYXdlcixRTGF5b3V0Rm9vdGVyOlFMYXlvdXRGb290ZXIsUUxheW91dEhlYWRlcjpRTGF5b3V0SGVhZGVyLFFQYWdlOlFQYWdlLFFQYWdlQ29udGFpbmVyOlFQYWdlQ29udGFpbmVyLFFQYWdlU3RpY2t5OlFQYWdlU3RpY2t5LFFJdGVtOlFJdGVtLFFJdGVtU2VwYXJhdG9yOlFJdGVtU2VwYXJhdG9yLFFJdGVtTWFpbjpRSXRlbU1haW4sUUl0ZW1TaWRlOlFJdGVtU2lkZSxRSXRlbVRpbGU6UUl0ZW1UaWxlLFFJdGVtV3JhcHBlcjpRSXRlbVdyYXBwZXIsUUxpc3Q6UUxpc3QsUUxpc3RIZWFkZXI6UUxpc3RIZWFkZXIsUU1vZGFsOlFNb2RhbCxRTW9kYWxMYXlvdXQ6UU1vZGFsTGF5b3V0LFFOb1NzcjpRTm9Tc3IsUVJlc2l6ZU9ic2VydmFibGU6UVJlc2l6ZU9ic2VydmFibGUsUVNjcm9sbE9ic2VydmFibGU6UVNjcm9sbE9ic2VydmFibGUsUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGU6UVdpbmRvd1Jlc2l6ZU9ic2VydmFibGUsUU9wdGlvbkdyb3VwOlFPcHRpb25Hcm91cCxRUGFnaW5hdGlvbjpRUGFnaW5hdGlvbixRUGFyYWxsYXg6UVBhcmFsbGF4LFFQb3BvdmVyOlFQb3BvdmVyLFFQb3B1cEVkaXQ6UVBvcHVwRWRpdCxRUHJvZ3Jlc3M6UVByb2dyZXNzLFFQdWxsVG9SZWZyZXNoOlFQdWxsVG9SZWZyZXNoLFFSYWRpbzpRUmFkaW8sUVJhbmdlOlFSYW5nZSxRUmF0aW5nOlFSYXRpbmcsUVNjcm9sbEFyZWE6UVNjcm9sbEFyZWEsUVNlYXJjaDpRU2VhcmNoLFFTZWxlY3Q6UVNlbGVjdCxRU2xpZGVUcmFuc2l0aW9uOlFTbGlkZVRyYW5zaXRpb24sUVNsaWRlcjpRU2xpZGVyLFFTcGlubmVyOlFTcGlubmVyLFFTcGlubmVyQXVkaW86UVNwaW5uZXJBdWRpbyxRU3Bpbm5lckJhbGw6UVNwaW5uZXJCYWxsLFFTcGlubmVyQmFyczpRU3Bpbm5lckJhcnMsUVNwaW5uZXJDaXJjbGVzOlFTcGlubmVyQ2lyY2xlcyxRU3Bpbm5lckNvbW1lbnQ6UVNwaW5uZXJDb21tZW50LFFTcGlubmVyQ3ViZTpRU3Bpbm5lckN1YmUsUVNwaW5uZXJEb3RzOlFTcGlubmVyRG90cyxRU3Bpbm5lckZhY2Vib29rOlFTcGlubmVyRmFjZWJvb2ssUVNwaW5uZXJHZWFyczpRU3Bpbm5lckdlYXJzLFFTcGlubmVyR3JpZDpRU3Bpbm5lckdyaWQsUVNwaW5uZXJIZWFydHM6UVNwaW5uZXJIZWFydHMsUVNwaW5uZXJIb3VyZ2xhc3M6UVNwaW5uZXJIb3VyZ2xhc3MsUVNwaW5uZXJJbmZpbml0eTpRU3Bpbm5lckluZmluaXR5LFFTcGlubmVySW9zOlFTcGlubmVyX2lvcyxRU3Bpbm5lck1hdDpEZWZhdWx0U3Bpbm5lcixRU3Bpbm5lck92YWw6UVNwaW5uZXJPdmFsLFFTcGlubmVyUGllOlFTcGlubmVyUGllLFFTcGlubmVyUHVmZjpRU3Bpbm5lclB1ZmYsUVNwaW5uZXJSYWRpbzpRU3Bpbm5lclJhZGlvLFFTcGlubmVyUmluZ3M6UVNwaW5uZXJSaW5ncyxRU3Bpbm5lclRhaWw6UVNwaW5uZXJUYWlsLFFTdGVwOlFTdGVwLFFTdGVwcGVyOlFTdGVwcGVyLFFTdGVwcGVyTmF2aWdhdGlvbjpRU3RlcHBlck5hdmlnYXRpb24sUVJvdXRlVGFiOlFSb3V0ZVRhYixRVGFiOlFUYWIsUVRhYlBhbmU6UVRhYlBhbmUsUVRhYnM6UVRhYnMsUVRhYmxlOlFUYWJsZSxRVGg6UVRoLFFUcjpRVHIsUVRkOlFUZCxRVGFibGVDb2x1bW5zOlFUYWJsZUNvbHVtbnMsUVRpbWVsaW5lOlFUaW1lbGluZSxRVGltZWxpbmVFbnRyeTpRVGltZWxpbmVFbnRyeSxRVG9nZ2xlOlFUb2dnbGUsUVRvb2xiYXI6UVRvb2xiYXIsUVRvb2xiYXJUaXRsZTpRVG9vbGJhclRpdGxlLFFUb29sdGlwOlFUb29sdGlwLFFUcmVlOlFUcmVlLFFVcGxvYWRlcjpRVXBsb2FkZXIsUVZpZGVvOlFWaWRlb30pO2Z1bmN0aW9uIHVwZGF0ZUJpbmRpbmcodCxlKXt2YXIgaT1lLnZhbHVlLHM9KGUubW9kaWZpZXJzLHQuX19xYmFja3RvdG9wKTtpZihpKXtpZihcIm51bWJlclwiPT10eXBlb2YgaSlyZXR1cm4gcy5vZmZzZXQ9aSx2b2lkIHMudXBkYXRlKCk7aWYoaSYmT2JqZWN0KGkpIT09aSljb25zb2xlLmVycm9yKFwidi1iYWNrLXRvLXRvcCByZXF1aXJlcyBhbiBvYmplY3Qge29mZnNldCwgZHVyYXRpb259IGFzIHBhcmFtZXRlclwiLHQpO2Vsc2V7aWYoaS5vZmZzZXQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBpLm9mZnNldClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFwidi1iYWNrLXRvLXRvcCByZXF1aXJlcyBhIG51bWJlciBhcyBvZmZzZXRcIix0KTtzLm9mZnNldD1pLm9mZnNldH1pZihpLmR1cmF0aW9uKXtpZihcIm51bWJlclwiIT10eXBlb2YgaS5kdXJhdGlvbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFwidi1iYWNrLXRvLXRvcCByZXF1aXJlcyBhIG51bWJlciBhcyBkdXJhdGlvblwiLHQpO3MuZHVyYXRpb249aS5kdXJhdGlvbn1zLnVwZGF0ZSgpfX1lbHNlIHMudXBkYXRlKCl9dmFyIGJhY2tUb1RvcD17bmFtZTpcImJhY2stdG8tdG9wXCIsYmluZDpmdW5jdGlvbih0KXt2YXIgZT17b2Zmc2V0OjIwMCxkdXJhdGlvbjozMDAsdXBkYXRlTm93OmZ1bmN0aW9uKCl7dmFyIGk9Z2V0U2Nyb2xsUG9zaXRpb24oZS5zY3JvbGxUYXJnZXQpPD1lLm9mZnNldDtpIT09dC5jbGFzc0xpc3QuY29udGFpbnMoXCJoaWRkZW5cIikmJnQuY2xhc3NMaXN0W2k/XCJhZGRcIjpcInJlbW92ZVwiXShcImhpZGRlblwiKX0sZ29Ub1RvcDpmdW5jdGlvbigpe3NldFNjcm9sbFBvc2l0aW9uKGUuc2Nyb2xsVGFyZ2V0LDAsZS5hbmltYXRlP2UuZHVyYXRpb246MCl9LGdvVG9Ub3BLZXk6ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnNldFNjcm9sbFBvc2l0aW9uKGUuc2Nyb2xsVGFyZ2V0LDAsZS5hbmltYXRlP2UuZHVyYXRpb246MCl9fTtlLnVwZGF0ZT1kZWJvdW5jZShlLnVwZGF0ZU5vdywyNSksdC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpLHQuX19xYmFja3RvdG9wPWV9LGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5fX3FiYWNrdG90b3A7aS5zY3JvbGxUYXJnZXQ9Z2V0U2Nyb2xsVGFyZ2V0KHQpLGkuYW5pbWF0ZT1lLm1vZGlmaWVycy5hbmltYXRlLHVwZGF0ZUJpbmRpbmcodCxlKSxpLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS51cGRhdGUsbGlzdGVuT3B0cy5wYXNzaXZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLGkudXBkYXRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixpLmdvVG9Ub3ApLHQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsaS5nb1RvVG9wS2V5KX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7SlNPTi5zdHJpbmdpZnkoZS5vbGRWYWx1ZSkhPT1KU09OLnN0cmluZ2lmeShlLnZhbHVlKT91cGRhdGVCaW5kaW5nKHQsZSk6c2V0VGltZW91dChmdW5jdGlvbigpe3QuX19xYmFja3RvdG9wJiZ0Ll9fcWJhY2t0b3RvcC51cGRhdGVOb3coKX0sMCl9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcWJhY2t0b3RvcDtlJiYoZS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGUudXBkYXRlLGxpc3Rlbk9wdHMucGFzc2l2ZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIixlLnVwZGF0ZSxsaXN0ZW5PcHRzLnBhc3NpdmUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5nb1RvVG9wKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUuZ29Ub1RvcEtleSksZGVsZXRlIHQuX19xYmFja3RvdG9wKX19LGNsb3NlT3ZlcmxheT17bmFtZTpcImNsb3NlLW92ZXJsYXlcIixiaW5kOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9aS5jb21wb25lbnRJbnN0YW5jZTtlPWUuJHBhcmVudDspe3ZhciBzPWUuJG9wdGlvbnMubmFtZTtpZihcIlFQb3BvdmVyXCI9PT1zfHxcIlFNb2RhbFwiPT09cyl7ZS5oaWRlKHQpO2JyZWFrfX19LG49ZnVuY3Rpb24odCl7MTM9PT10LmtleUNvZGUmJnModCl9O3QuX19xY2xvc2U9e2hhbmRsZXI6cyxoYW5kbGVyS2V5Om59LHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIscyksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixuKX0sdW5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX19xY2xvc2U7ZSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsZS5oYW5kbGVyKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUuaGFuZGxlcktleSksZGVsZXRlIHQuX19xY2xvc2UpfX0sZ29CYWNrPXtuYW1lOlwiZ28tYmFja1wiLGJpbmQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPWUudmFsdWUsbj1lLm1vZGlmaWVycyxvPXt2YWx1ZTpzLHBvc2l0aW9uOndpbmRvdy5oaXN0b3J5Lmxlbmd0aC0xLHNpbmdsZTpuLnNpbmdsZX07UGxhdGZvcm0uaXMuY29yZG92YT9vLmdvQmFjaz1mdW5jdGlvbigpe2kuY29udGV4dC4kcm91dGVyLmdvKG8uc2luZ2xlPy0xOm8ucG9zaXRpb24td2luZG93Lmhpc3RvcnkubGVuZ3RoKX06by5nb0JhY2s9ZnVuY3Rpb24oKXtpLmNvbnRleHQuJHJvdXRlci5yZXBsYWNlKG8udmFsdWUpfSxvLmdvQmFja0tleT1mdW5jdGlvbih0KXsxMz09PXQua2V5Q29kZSYmby5nb0JhY2sodCl9LHQuX19xZ29iYWNrPW8sdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixvLmdvQmFjayksdC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixvLmdvQmFja0tleSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2Uub2xkVmFsdWUhPT1lLnZhbHVlJiYodC5fX3Fnb2JhY2sudmFsdWU9ZS52YWx1ZSl9LHVuYmluZDpmdW5jdGlvbih0KXt2YXIgZT10Ll9fcWdvYmFjaztlJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixlLmdvQmFjayksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlLmdvQmFja0tleSksZGVsZXRlIHQuX19xZ29iYWNrKX19O2Z1bmN0aW9uIHVwZGF0ZUJpbmRpbmckMSh0LGUpe3ZhciBpPXQuX19xc2Nyb2xsZmlyZTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnZhbHVlKXJldHVybiBpLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwpLHZvaWQgY29uc29sZS5lcnJvcihcInYtc2Nyb2xsLWZpcmUgcmVxdWlyZXMgYSBmdW5jdGlvbiBhcyBwYXJhbWV0ZXJcIix0KTtpLmhhbmRsZXI9ZS52YWx1ZSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLm9sZFZhbHVlJiYoaS5zY3JvbGxUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGkuc2Nyb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSksaS5zY3JvbGwoKSl9dmFyIHNjcm9sbEZpcmU9e25hbWU6XCJzY3JvbGwtZmlyZVwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT17c2Nyb2xsOmRlYm91bmNlKGZ1bmN0aW9uKCl7dmFyIGUscztpLnNjcm9sbFRhcmdldD09PXdpbmRvdz8ocz10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxlPXdpbmRvdy5pbm5lckhlaWdodCk6KHM9b2Zmc2V0KHQpLnRvcCtoZWlnaHQodCksZT1vZmZzZXQoaS5zY3JvbGxUYXJnZXQpLnRvcCtoZWlnaHQoaS5zY3JvbGxUYXJnZXQpKSxzPjAmJnM8ZSYmKGkuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixpLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGkuaGFuZGxlcih0KSl9LDI1KX07dC5fX3FzY3JvbGxmaXJlPWl9LGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dC5fX3FzY3JvbGxmaXJlLnNjcm9sbFRhcmdldD1nZXRTY3JvbGxUYXJnZXQodCksdXBkYXRlQmluZGluZyQxKHQsZSl9LHVwZGF0ZTpmdW5jdGlvbih0LGUpe2UudmFsdWUhPT1lLm9sZFZhbHVlJiZ1cGRhdGVCaW5kaW5nJDEodCxlKX0sdW5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX19xc2Nyb2xsZmlyZTtlJiYoZS5zY3JvbGxUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLGUuc2Nyb2xsLGxpc3Rlbk9wdHMucGFzc2l2ZSksZGVsZXRlIHQuX19xc2Nyb2xsZmlyZSl9fTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nJDIodCxlKXt2YXIgaT10Ll9fcXNjcm9sbDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnZhbHVlKXJldHVybiBpLnNjcm9sbFRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsaS5zY3JvbGwsbGlzdGVuT3B0cy5wYXNzaXZlKSx2b2lkIGNvbnNvbGUuZXJyb3IoXCJ2LXNjcm9sbCByZXF1aXJlcyBhIGZ1bmN0aW9uIGFzIHBhcmFtZXRlclwiLHQpO2kuaGFuZGxlcj1lLnZhbHVlLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUub2xkVmFsdWUmJmkuc2Nyb2xsVGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixpLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpfXZhciBzY3JvbGwkMT17bmFtZTpcInNjcm9sbFwiLGJpbmQ6ZnVuY3Rpb24odCxlKXt2YXIgaT17c2Nyb2xsOmZ1bmN0aW9uKCl7aS5oYW5kbGVyKGdldFNjcm9sbFBvc2l0aW9uKGkuc2Nyb2xsVGFyZ2V0KSxnZXRIb3Jpem9udGFsU2Nyb2xsUG9zaXRpb24oaS5zY3JvbGxUYXJnZXQpKX19O3QuX19xc2Nyb2xsPWl9LGluc2VydGVkOmZ1bmN0aW9uKHQsZSl7dC5fX3FzY3JvbGwuc2Nyb2xsVGFyZ2V0PWdldFNjcm9sbFRhcmdldCh0KSx1cGRhdGVCaW5kaW5nJDIodCxlKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7ZS5vbGRWYWx1ZSE9PWUudmFsdWUmJnVwZGF0ZUJpbmRpbmckMih0LGUpfSx1bmJpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5fX3FzY3JvbGw7ZSYmKGUuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIixlLnNjcm9sbCxsaXN0ZW5PcHRzLnBhc3NpdmUpLGRlbGV0ZSB0Ll9fcXNjcm9sbCl9fTtmdW5jdGlvbiB1cGRhdGVCaW5kaW5nJDModCxlKXt2YXIgaT10Ll9fcXRvdWNoaG9sZDtpLmR1cmF0aW9uPXBhcnNlSW50KGUuYXJnLDEwKXx8NjAwLGUub2xkVmFsdWUhPT1lLnZhbHVlJiYoaS5oYW5kbGVyPWUudmFsdWUpfXZhciB0b3VjaEhvbGQ9e25hbWU6XCJ0b3VjaC1ob2xkXCIsYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPSFlLm1vZGlmaWVycy5ub01vdXNlLHM9ZS5tb2RpZmllcnMuc3RvcCxuPWUubW9kaWZpZXJzLnByZXZlbnQsbz17bW91c2VTdGFydDpmdW5jdGlvbih0KXtsZWZ0Q2xpY2sodCkmJihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsby5tb3VzZUFib3J0KSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLG8ubW91c2VBYm9ydCksby5zdGFydCh0KSl9LG1vdXNlQWJvcnQ6ZnVuY3Rpb24odCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLG8ubW91c2VBYm9ydCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIixvLm1vdXNlQWJvcnQpLG8uYWJvcnQodCl9LHN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3MmJnQuc3RvcFByb3BhZ2F0aW9uKCksbiYmdC5wcmV2ZW50RGVmYXVsdCgpLG8udGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2kmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsby5tb3VzZUFib3J0KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLG8ubW91c2VBYm9ydCkpLG8uaGFuZGxlcih7ZXZ0OnQscG9zaXRpb246cG9zaXRpb24odCksZHVyYXRpb246KG5ldyBEYXRlKS5nZXRUaW1lKCktZX0pfSxvLmR1cmF0aW9uKX0sYWJvcnQ6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KG8udGltZXIpLG8udGltZXI9bnVsbH19O3QuX19xdG91Y2hob2xkPW8sdXBkYXRlQmluZGluZyQzKHQsZSksaSYmdC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsby5tb3VzZVN0YXJ0KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsby5zdGFydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsby5hYm9ydCksdC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixvLmFib3J0KX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dXBkYXRlQmluZGluZyQzKHQsZSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3ZhciBpPXQuX19xdG91Y2hob2xkO2kmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsaS5zdGFydCksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIixpLmFib3J0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixpLmFib3J0KSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixpLm1vdXNlU3RhcnQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIixpLm1vdXNlQWJvcnQpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsaS5tb3VzZUFib3J0KSxkZWxldGUgdC5fX3F0b3VjaGhvbGQpfX0sZGlyZWN0aXZlcz1PYmplY3QuZnJlZXplKHtCYWNrVG9Ub3A6YmFja1RvVG9wLENsb3NlT3ZlcmxheTpjbG9zZU92ZXJsYXksR29CYWNrOmdvQmFjayxSaXBwbGU6UmlwcGxlLFNjcm9sbEZpcmU6c2Nyb2xsRmlyZSxTY3JvbGw6c2Nyb2xsJDEsVG91Y2hIb2xkOnRvdWNoSG9sZCxUb3VjaFBhbjpUb3VjaFBhbixUb3VjaFN3aXBlOlRvdWNoU3dpcGV9KTtmdW5jdGlvbiBvYmplY3RXaXRob3V0UHJvcGVydGllcyh0LGUpe3ZhciBpPXt9O2Zvcih2YXIgcyBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHMpJiYtMT09PWUuaW5kZXhPZihzKSYmKGlbc109dFtzXSk7cmV0dXJuIGl9ZnVuY3Rpb24gbW9kYWxGbih0LGUpe3JldHVybiBmdW5jdGlvbihpLHMpe3ZhciBuPWkuY2xhc3NOYW1lLG89b2JqZWN0V2l0aG91dFByb3BlcnRpZXMoaSxbXCJjbGFzc05hbWVcIl0pO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihpLHIpe2lmKGlzU1NSKXJldHVybiBpKCk7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO3ZhciBsPWZ1bmN0aW9uKHQpe2kodCksaC4kZGVzdHJveSgpfSxjPWZ1bmN0aW9uKHQpe3IodHx8bmV3IEVycm9yKSxoLiRkZXN0cm95KCl9LGg9bmV3IGUoe2VsOmEsZGF0YTpmdW5jdGlvbigpe3JldHVybntwcm9wczpvfX0scmVuZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlKHQse3JlZjpcIm1vZGFsXCIscHJvcHM6byxjbGFzczpuLG9uOntvazpsLGNhbmNlbDpjfX0pfSxtb3VudGVkOmZ1bmN0aW9uKCl7dGhpcy4kcmVmcy5tb2RhbC5zaG93KCl9fSk7cyYmcy50aGVuKGwsYyl9KX19dmFyIG1ldGFWYWx1ZSxhY3Rpb25TaGVldD17aW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWU7dGhpcy5jcmVhdGU9ZS5hY3Rpb25TaGVldD1tb2RhbEZuKFFBY3Rpb25TaGVldCxpKX19O2Z1bmN0aW9uIGdldFByb3AoKXtyZXR1cm4gUGxhdGZvcm0uaXMud2lucGhvbmU/XCJtc2FwcGxpY2F0aW9uLW5hdmJ1dHRvbi1jb2xvclwiOlBsYXRmb3JtLmlzLnNhZmFyaT9cImFwcGxlLW1vYmlsZS13ZWItYXBwLXN0YXR1cy1iYXItc3R5bGVcIjpcInRoZW1lLWNvbG9yXCJ9ZnVuY3Rpb24gZ2V0TWV0YVRhZyh0KXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIk1FVEFcIik7Zm9yKHZhciBpIGluIGUpaWYoZVtpXS5uYW1lPT09dClyZXR1cm4gZVtpXX1mdW5jdGlvbiBzZXRDb2xvcih0KXt2b2lkIDA9PT1tZXRhVmFsdWUmJihtZXRhVmFsdWU9Z2V0UHJvcCgpKTt2YXIgZT1nZXRNZXRhVGFnKG1ldGFWYWx1ZSksaT12b2lkIDA9PT1lO2kmJihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpKS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsbWV0YVZhbHVlKSxlLnNldEF0dHJpYnV0ZShcImNvbnRlbnRcIix0KSxpJiZkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGUpfXZhciBhZGRyZXNzYmFyQ29sb3I9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPSh0LlZ1ZSx0LmNmZyk7dGhpcy5zZXQ9IWlzU1NSJiZQbGF0Zm9ybS5pcy5tb2JpbGUmJihQbGF0Zm9ybS5pcy5jb3Jkb3ZhfHxQbGF0Zm9ybS5pcy53aW5waG9uZXx8UGxhdGZvcm0uaXMuc2FmYXJpfHxQbGF0Zm9ybS5pcy53ZWJraXR8fFBsYXRmb3JtLmlzLnZpdmFsZGkpP2Z1bmN0aW9uKHQpe3ZhciBlPXR8fGdldEJyYW5kKFwicHJpbWFyeVwiKTtQbGF0Zm9ybS5pcy5jb3Jkb3ZhJiZ3aW5kb3cuU3RhdHVzQmFyP3dpbmRvdy5TdGF0dXNCYXIuYmFja2dyb3VuZENvbG9yQnlIZXhTdHJpbmcoZSk6c2V0Q29sb3IoZSl9OmZ1bmN0aW9uKCl7fSxlLmFkZHJlc3NiYXJDb2xvcj10aGlzLGkuYWRkcmVzc2JhckNvbG9yJiZ0aGlzLnNldChpLmFkZHJlc3NiYXJDb2xvcil9fSxwcmVmaXhlcz17fSxhcHBGdWxsc2NyZWVuPXtpc0NhcGFibGU6ITEsaXNBY3RpdmU6ITEscmVxdWVzdDpmdW5jdGlvbih0KXt0aGlzLmlzQ2FwYWJsZSYmIXRoaXMuaXNBY3RpdmUmJih0PXR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClbcHJlZml4ZXMucmVxdWVzdF0oKX0sZXhpdDpmdW5jdGlvbigpe3RoaXMuaXNDYXBhYmxlJiZ0aGlzLmlzQWN0aXZlJiZkb2N1bWVudFtwcmVmaXhlcy5leGl0XSgpfSx0b2dnbGU6ZnVuY3Rpb24odCl7dGhpcy5pc0FjdGl2ZT90aGlzLmV4aXQoKTp0aGlzLnJlcXVlc3QodCl9LGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQuJHEscz10LlZ1ZTtpLmZ1bGxzY3JlZW49dGhpcyxpc1NTUnx8KHByZWZpeGVzLnJlcXVlc3Q9W1wicmVxdWVzdEZ1bGxzY3JlZW5cIixcIm1zUmVxdWVzdEZ1bGxzY3JlZW5cIixcIm1velJlcXVlc3RGdWxsU2NyZWVuXCIsXCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlblwiXS5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbdF19KSx0aGlzLmlzQ2FwYWJsZT12b2lkIDAhPT1wcmVmaXhlcy5yZXF1ZXN0LHRoaXMuaXNDYXBhYmxlJiYocHJlZml4ZXMuZXhpdD1bXCJleGl0RnVsbHNjcmVlblwiLFwibXNFeGl0RnVsbHNjcmVlblwiLFwibW96Q2FuY2VsRnVsbFNjcmVlblwiLFwid2Via2l0RXhpdEZ1bGxzY3JlZW5cIl0uZmluZChmdW5jdGlvbih0KXtyZXR1cm4gZG9jdW1lbnRbdF19KSx0aGlzLmlzQWN0aXZlPSEhKGRvY3VtZW50LmZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQud2Via2l0RnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQpLFtcIm9uZnVsbHNjcmVlbmNoYW5nZVwiLFwib25tc2Z1bGxzY3JlZW5jaGFuZ2VcIixcIm9ubW96ZnVsbHNjcmVlbmNoYW5nZVwiLFwib253ZWJraXRmdWxsc2NyZWVuY2hhbmdlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnRbdF09ZnVuY3Rpb24oKXtlLmlzQWN0aXZlPSFlLmlzQWN0aXZlfX0pLHMudXRpbC5kZWZpbmVSZWFjdGl2ZSh0aGlzLFwiaXNBY3RpdmVcIix0aGlzLmlzQWN0aXZlKSkpfX0sYXBwVmlzaWJpbGl0eT17YXBwVmlzaWJsZTohMSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10LiRxLHM9dC5WdWU7aWYoaXNTU1IpdGhpcy5hcHBWaXNpYmxlPWkuYXBwVmlzaWJsZT0hMDtlbHNle3ZhciBuLG87dm9pZCAwIT09ZG9jdW1lbnQuaGlkZGVuPyhuPVwiaGlkZGVuXCIsbz1cInZpc2liaWxpdHljaGFuZ2VcIik6dm9pZCAwIT09ZG9jdW1lbnQubXNIaWRkZW4/KG49XCJtc0hpZGRlblwiLG89XCJtc3Zpc2liaWxpdHljaGFuZ2VcIik6dm9pZCAwIT09ZG9jdW1lbnQud2Via2l0SGlkZGVuJiYobj1cIndlYmtpdEhpZGRlblwiLG89XCJ3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlXCIpO3ZhciByPWZ1bmN0aW9uKCl7ZS5hcHBWaXNpYmxlPWkuYXBwVmlzaWJsZT0hZG9jdW1lbnRbbl19O3IoKSxvJiZ2b2lkIDAhPT1kb2N1bWVudFtuXSYmKHMudXRpbC5kZWZpbmVSZWFjdGl2ZShpLFwiYXBwVmlzaWJsZVwiLHRoaXMuYXBwVmlzaWJsZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihvLHIsITEpKX19fTtmdW5jdGlvbiBlbmNvZGUodCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0KX1mdW5jdGlvbiBkZWNvZGUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX1mdW5jdGlvbiBzdHJpbmdpZnlDb29raWVWYWx1ZSh0KXtyZXR1cm4gZW5jb2RlKHQ9PT1PYmplY3QodCk/SlNPTi5zdHJpbmdpZnkodCk6XCJcIit0KX1mdW5jdGlvbiByZWFkKHQpe2lmKFwiXCI9PT10KXJldHVybiB0OzA9PT10LmluZGV4T2YoJ1wiJykmJih0PXQuc2xpY2UoMSwtMSkucmVwbGFjZSgvXFxcXFwiL2csJ1wiJykucmVwbGFjZSgvXFxcXFxcXFwvZyxcIlxcXFxcIikpLHQ9ZGVjb2RlKHQucmVwbGFjZSgvXFwrL2csXCIgXCIpKTt0cnl7dD1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe31yZXR1cm4gdH1mdW5jdGlvbiBzZXQodCxlLGkscyl7dmFyIG4sbztpZih2b2lkIDA9PT1pJiYoaT17fSksdm9pZCAwIT09aS5leHBpcmVzKXtpZihvPXBhcnNlSW50KGkuZXhwaXJlcywxMCksaXNOYU4obykpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcIlF1YXNhciBjb29raWU6IGV4cGlyZXMgbmVlZHMgdG8gYmUgYSBudW1iZXJcIik7KG49bmV3IERhdGUpLnNldE1pbGxpc2Vjb25kcyhuLmdldE1pbGxpc2Vjb25kcygpKzg2NGU1Km8pfXZhciByPWVuY29kZSh0KStcIj1cIitzdHJpbmdpZnlDb29raWVWYWx1ZShlKSxhPVtyLHZvaWQgMCE9PW4/XCI7IEV4cGlyZXM9XCIrbi50b1VUQ1N0cmluZygpOlwiXCIsaS5wYXRoP1wiOyBQYXRoPVwiK2kucGF0aDpcIlwiLGkuZG9tYWluP1wiOyBEb21haW49XCIraS5kb21haW46XCJcIixpLmh0dHBPbmx5P1wiOyBIdHRwT25seVwiOlwiXCIsaS5zZWN1cmU/XCI7IFNlY3VyZVwiOlwiXCJdLmpvaW4oXCJcIik7aWYocyl7cy5yZXEucUNvb2tpZXM/cy5yZXEucUNvb2tpZXMucHVzaChhKTpzLnJlcS5xQ29va2llcz1bYV0scy5yZXMuc2V0SGVhZGVyKFwiU2V0LUNvb2tpZVwiLHMucmVxLnFDb29raWVzKTt2YXIgbD1zLnJlcS5oZWFkZXJzLmNvb2tpZXx8XCJcIjtpZih2b2lkIDAhPT1uJiZvPDApe3ZhciBjPWdldCh0LHMpO3ZvaWQgMCE9PWMmJihsPWwucmVwbGFjZSh0K1wiPVwiK2MrXCI7IFwiLFwiXCIpLnJlcGxhY2UoXCI7IFwiK3QrXCI9XCIrYyxcIlwiKS5yZXBsYWNlKHQrXCI9XCIrYyxcIlwiKSl9ZWxzZSBsPWw/citcIjsgXCIrbDphO3MucmVxLmhlYWRlcnMuY29va2llPWx9ZWxzZSBkb2N1bWVudC5jb29raWU9YX1mdW5jdGlvbiBnZXQodCxlKXtmb3IodmFyIGkscyxuLG89dD92b2lkIDA6e30scj1lP2UucmVxLmhlYWRlcnM6ZG9jdW1lbnQsYT1yLmNvb2tpZT9yLmNvb2tpZS5zcGxpdChcIjsgXCIpOltdLGw9MCxjPWEubGVuZ3RoO2w8YztsKyspaWYocz1kZWNvZGUoKGk9YVtsXS5zcGxpdChcIj1cIikpLnNoaWZ0KCkpLG49aS5qb2luKFwiPVwiKSx0KXtpZih0PT09cyl7bz1yZWFkKG4pO2JyZWFrfX1lbHNlIG9bc109bjtyZXR1cm4gb31mdW5jdGlvbiByZW1vdmUodCxlLGkpe3NldCh0LFwiXCIsT2JqZWN0LmFzc2lnbih7fSxlLHtleHBpcmVzOi0xfSksaSl9ZnVuY3Rpb24gaGFzKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWdldCh0LGUpfWZ1bmN0aW9uIGdldE9iamVjdCh0KXt2b2lkIDA9PT10JiYodD17fSk7dmFyIGU9dC5zc3I7cmV0dXJue2dldDpmdW5jdGlvbih0KXtyZXR1cm4gZ2V0KHQsZSl9LHNldDpmdW5jdGlvbih0LGkscyl7cmV0dXJuIHNldCh0LGkscyxlKX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiBoYXModCxlKX0scmVtb3ZlOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIHJlbW92ZSh0LGksZSl9LGFsbDpmdW5jdGlvbigpe3JldHVybiBnZXQobnVsbCxlKX19fXZhciB2bSx0aW1lb3V0LHVwZGF0ZUlkLHNzclRha2VvdmVyLGNvb2tpZXM9e3BhcnNlU1NSOmZ1bmN0aW9uKHQpe3JldHVybiB0P2dldE9iamVjdCh7c3NyOnR9KTp0aGlzfSxpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT10LnF1ZXVlcztpc1NTUj9pLnNlcnZlci5wdXNoKGZ1bmN0aW9uKHQsZSl7dC5jb29raWVzPWdldE9iamVjdChlKX0pOihPYmplY3QuYXNzaWduKHRoaXMsZ2V0T2JqZWN0KCkpLGUuY29va2llcz10aGlzKX19LGRpYWxvZz17aW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWU7dGhpcy5jcmVhdGU9ZS5kaWFsb2c9bW9kYWxGbihRRGlhbG9nLGkpfX0sbG9hZGluZ0Jhcj17c3RhcnQ6ZnVuY3Rpb24oKXt9LHN0b3A6ZnVuY3Rpb24oKXt9LGluY3JlbWVudDpmdW5jdGlvbigpe30saW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWUscz10LmNmZztpZihpc1NTUillLmxvYWRpbmdCYXI9dGhpcztlbHNle3ZhciBuPWUubG9hZGluZ0Jhcj1uZXcgaSh7cmVuZGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0KFFBamF4QmFyLHtyZWY6XCJiYXJcIixwcm9wczpzLmxvYWRpbmdCYXJ9KX19KS4kbW91bnQoKS4kcmVmcy5iYXI7T2JqZWN0LmFzc2lnbih0aGlzLHtzdGFydDpuLnN0YXJ0LHN0b3A6bi5zdG9wLGluY3JlbWVudDpuLmluY3JlbWVudH0pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZS5sb2FkaW5nQmFyLiRwYXJlbnQuJGVsKX19fSxwcm9wcz17fSxkZWZhdWx0cz17ZGVsYXk6MCxtZXNzYWdlOiExLHNwaW5uZXJTaXplOjgwLHNwaW5uZXJDb2xvcjpcIndoaXRlXCIsbWVzc2FnZUNvbG9yOlwid2hpdGVcIixzcGlubmVyOlFTcGlubmVyLGN1c3RvbUNsYXNzOiExfSxzdGF0aWNDbGFzcz1cInEtbG9hZGluZyBhbmltYXRlLWZhZGUgZnVsbHNjcmVlbiBjb2x1bW4gZmxleC1jZW50ZXIgei1tYXhcIixsb2FkaW5nPXtpc0FjdGl2ZTohMSxzaG93OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aXNTU1J8fChcInN0cmluZ1wiPT10eXBlb2YocHJvcHM9T2JqZWN0LmFzc2lnbih7fSxkZWZhdWx0cyx0KSkuY3VzdG9tQ2xhc3MmJihwcm9wcy5jdXN0b21DbGFzcz1wcm9wcy5jdXN0b21DbGFzcy50cmltKCkpLHRoaXMuaXNBY3RpdmU/dm0mJnZtLiRmb3JjZVVwZGF0ZSgpOih0aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aW1lb3V0PW51bGw7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcIndpdGgtbG9hZGluZ1wiKSx2bT1uZXcgZS5fX1Z1ZSh7bmFtZTpcIlFMb2FkaW5nXCIsZWw6dCxyZW5kZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6c3RhdGljQ2xhc3MsY2xhc3M6cHJvcHMuY3VzdG9tQ2xhc3N9LFt0KHByb3BzLnNwaW5uZXIse3Byb3BzOntjb2xvcjpwcm9wcy5zcGlubmVyQ29sb3Isc2l6ZTpwcm9wcy5zcGlubmVyU2l6ZX19KSxwcm9wcy5tZXNzYWdlP3QoXCJkaXZcIix7Y2xhc3M6XCJ0ZXh0LVwiK3Byb3BzLm1lc3NhZ2VDb2xvcixkb21Qcm9wczp7aW5uZXJIVE1MOnByb3BzLm1lc3NhZ2V9fSk6bnVsbF0pfX0pfSxwcm9wcy5kZWxheSksdGhpcy5pc0FjdGl2ZT0hMCkpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5pc0FjdGl2ZSYmKHRpbWVvdXQ/KGNsZWFyVGltZW91dCh0aW1lb3V0KSx0aW1lb3V0PW51bGwpOih2bS4kZGVzdHJveSgpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIndpdGgtbG9hZGluZ1wiKSx2bS4kZWwucmVtb3ZlKCksdm09bnVsbCksdGhpcy5pc0FjdGl2ZT0hMSl9LHNldERlZmF1bHRzOmZ1bmN0aW9uKHQpe09iamVjdC5hc3NpZ24oZGVmYXVsdHMsdCl9LF9fVnVlOm51bGwsaW5zdGFsbDpmdW5jdGlvbih0KXt2YXIgZT10LiRxLGk9dC5WdWUscz10LmNmZy5sb2FkaW5nO3MmJnRoaXMuc2V0RGVmYXVsdHMocyksZS5sb2FkaW5nPXRoaXMsdGhpcy5fX1Z1ZT1pfX07ZnVuY3Rpb24gbm9ybWFsaXplKHQpe3QudGl0bGUmJih0LnRpdGxlPXQudGl0bGVUZW1wbGF0ZT90LnRpdGxlVGVtcGxhdGUodC50aXRsZXx8XCJcIik6dC50aXRsZSxkZWxldGUgdC50aXRsZVRlbXBsYXRlKSxbW1wibWV0YVwiLFwiY29udGVudFwiXSxbXCJsaW5rXCIsXCJocmVmXCJdXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPXRbZVswXV0scz1lWzFdO2Zvcih2YXIgbiBpbiBpKXt2YXIgbz1pW25dO28udGVtcGxhdGUmJigxPT09T2JqZWN0LmtleXMobykubGVuZ3RoP2RlbGV0ZSBpW25dOihvW3NdPW8udGVtcGxhdGUob1tzXXx8XCJcIiksZGVsZXRlIG8udGVtcGxhdGUpKX19KX1mdW5jdGlvbiBjaGFuZ2VkKHQsZSl7aWYoT2JqZWN0LmtleXModCkubGVuZ3RoIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgaSBpbiB0KWlmKHRbaV0hPT1lW2ldKXJldHVybiEwfWZ1bmN0aW9uIGJvZHlGaWx0ZXIodCl7cmV0dXJuIVtcImNsYXNzXCIsXCJzdHlsZVwiXS5pbmNsdWRlcyh0KX1mdW5jdGlvbiBodG1sRmlsdGVyKHQpe3JldHVybiFbXCJsYW5nXCIsXCJkaXJcIl0uaW5jbHVkZXModCl9ZnVuY3Rpb24gZGlmZih0LGUpe3ZhciBpPXt9LHM9e307cmV0dXJuIHQ/KHQudGl0bGUhPT1lLnRpdGxlJiYoaS50aXRsZT1lLnRpdGxlKSxbXCJtZXRhXCIsXCJsaW5rXCIsXCJzY3JpcHRcIixcImh0bWxBdHRyXCIsXCJib2R5QXR0clwiXS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciBvPXRbbl0scj1lW25dO2lmKHNbbl09W10sbyl7Zm9yKHZhciBhIGluIGlbbl09e30sbylyLmhhc093blByb3BlcnR5KGEpfHxzW25dLnB1c2goYSk7Zm9yKHZhciBsIGluIHIpby5oYXNPd25Qcm9wZXJ0eShsKT9jaGFuZ2VkKG9bbF0scltsXSkmJihzW25dLnB1c2gobCksaVtuXVtsXT1yW2xdKTppW25dW2xdPXJbbF19ZWxzZSBpW25dPXJ9KSx7YWRkOmkscmVtb3ZlOnN9KTp7YWRkOmUscmVtb3ZlOnN9fWZ1bmN0aW9uIGFwcGx5KHQpe3ZhciBlPXQuYWRkLGk9dC5yZW1vdmU7ZS50aXRsZSYmKGRvY3VtZW50LnRpdGxlPWUudGl0bGUpLE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoW1wibWV0YVwiLFwibGlua1wiLFwic2NyaXB0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7aVt0XS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2RvY3VtZW50LmhlYWQucXVlcnlTZWxlY3Rvcih0KydbZGF0YS1xbWV0YT1cIicrZSsnXCJdJykucmVtb3ZlKCl9KX0pLGkuaHRtbEF0dHIuZmlsdGVyKGh0bWxGaWx0ZXIpLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0KX0pLGkuYm9keUF0dHIuZmlsdGVyKGJvZHlGaWx0ZXIpLmZvckVhY2goZnVuY3Rpb24odCl7ZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUodCl9KSksW1wibWV0YVwiLFwibGlua1wiLFwic2NyaXB0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGk9ZVt0XTtmb3IodmFyIHMgaW4gaSl7dmFyIG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KTtmb3IodmFyIG8gaW4gaVtzXSlcImlubmVySFRNTFwiIT09byYmbi5zZXRBdHRyaWJ1dGUobyxpW3NdW29dKTtuLnNldEF0dHJpYnV0ZShcImRhdGEtcW1ldGFcIixzKSxcInNjcmlwdFwiPT09dCYmKG4uaW5uZXJIVE1MPWlbc10uaW5uZXJIVE1MfHxcIlwiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG4pfX0pLE9iamVjdC5rZXlzKGUuaHRtbEF0dHIpLmZpbHRlcihodG1sRmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUodCxlLmh0bWxBdHRyW3RdfHxcIlwiKX0pLE9iamVjdC5rZXlzKGUuYm9keUF0dHIpLmZpbHRlcihib2R5RmlsdGVyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKHQsZS5ib2R5QXR0clt0XXx8XCJcIil9KX1mdW5jdGlvbiBwYXJzZU1ldGEodCxlKXtpZighdC5faW5hY3RpdmUpe3ZhciBpPXQuJG9wdGlvbnMubWV0YTtpJiYoZXh0ZW5kKCEwLGUsdC5fX3FNZXRhKSxpLnN0b3BQcm9wYWdhdGlvbil8fHQuJGNoaWxkcmVuJiZ0LiRjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3BhcnNlTWV0YSh0LGUpfSl9fWZ1bmN0aW9uIHVwZGF0ZUNsaWVudCgpe2lmKHNzclRha2VvdmVyKXJldHVybiBzc3JUYWtlb3Zlcj0hMSx0aGlzLiRyb290Ll9fY3VycmVudE1ldGE9d2luZG93Ll9fUV9NRVRBX18sdm9pZCBkb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3IoXCJzY3JpcHRbZGF0YS1xbWV0YS1pbml0XVwiKS5yZW1vdmUoKTt2YXIgdD17dGl0bGU6XCJcIix0aXRsZVRlbXBsYXRlOm51bGwsbWV0YTp7fSxsaW5rOnt9LHNjcmlwdDp7fSxodG1sQXR0cjp7fSxib2R5QXR0cjp7fX07cGFyc2VNZXRhKHRoaXMuJHJvb3QsdCksbm9ybWFsaXplKHQpLGFwcGx5KGRpZmYodGhpcy4kcm9vdC5fX2N1cnJlbnRNZXRhLHQpKSx0aGlzLiRyb290Ll9fY3VycmVudE1ldGE9dH1mdW5jdGlvbiBnZXRBdHRyKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT10W2VdO3JldHVybiBlKyh2b2lkIDAhPT1pPyc9XCInK2krJ1wiJzpcIlwiKX19ZnVuY3Rpb24gZ2V0SGVhZCh0KXt2YXIgZT1cIlwiO3JldHVybiB0LnRpdGxlJiYoZSs9XCI8dGl0bGU+XCIrdC50aXRsZStcIjwvdGl0bGU+XCIpLFtcIm1ldGFcIixcImxpbmtcIixcInNjcmlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPXRbaV07Zm9yKHZhciBuIGluIHMpe3ZhciBvPU9iamVjdC5rZXlzKHNbbl0pLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm5cImlubmVySFRNTFwiIT09dH0pLm1hcChnZXRBdHRyKHNbbl0pKTtlKz1cIjxcIitpK1wiIFwiK28uam9pbihcIiBcIikrJyBkYXRhLXFtZXRhPVwiJytuKydcIj4nLFwic2NyaXB0XCI9PT1pJiYoZSs9KHNbbl0uaW5uZXJIVE1MfHxcIlwiKStcIjxcXC9zY3JpcHQ+XCIpfX0pLGV9ZnVuY3Rpb24gZ2V0U2VydmVyTWV0YSh0LGUpe3ZhciBpPXt0aXRsZTpcIlwiLHRpdGxlVGVtcGxhdGU6bnVsbCxtZXRhOnt9LGxpbms6e30saHRtbEF0dHI6e30sYm9keUF0dHI6e30sbm9zY3JpcHQ6e319O3BhcnNlTWV0YSh0LGkpLG5vcm1hbGl6ZShpKTt2YXIgcz17XCIlJVFfSFRNTF9BVFRSUyUlXCI6T2JqZWN0LmtleXMoaS5odG1sQXR0cikuZmlsdGVyKGh0bWxGaWx0ZXIpLm1hcChnZXRBdHRyKGkuaHRtbEF0dHIpKS5qb2luKFwiIFwiKSxcIiUlUV9IRUFEX1RBR1MlJVwiOmdldEhlYWQoaSksXCIlJVFfQk9EWV9BVFRSUyUlXCI6T2JqZWN0LmtleXMoaS5ib2R5QXR0cikuZmlsdGVyKGJvZHlGaWx0ZXIpLm1hcChnZXRBdHRyKGkuYm9keUF0dHIpKS5qb2luKFwiIFwiKSxcIiUlUV9CT0RZX1RBR1MlJVwiOk9iamVjdC5rZXlzKGkubm9zY3JpcHQpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4nPG5vc2NyaXB0IGRhdGEtcW1ldGE9XCInK3QrJ1wiPicraS5ub3NjcmlwdFt0XStcIjwvbm9zY3JpcHQ+XCJ9KS5qb2luKFwiXCIpK1wiPHNjcmlwdCBkYXRhLXFtZXRhLWluaXQ+d2luZG93Ll9fUV9NRVRBX189XCIrKGRlbGV0ZSBpLm5vc2NyaXB0JiZKU09OLnN0cmluZ2lmeShpKSkrXCI8XFwvc2NyaXB0PlwifTtyZXR1cm4gT2JqZWN0LmtleXMocykuZm9yRWFjaChmdW5jdGlvbih0KXtlPWUucmVwbGFjZSh0LHNbdF0pfSksZX1mdW5jdGlvbiBiZWZvcmVDcmVhdGUoKXt0aGlzLiRvcHRpb25zLm1ldGEmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLiRvcHRpb25zLm1ldGE/KHRoaXMuJG9wdGlvbnMuY29tcHV0ZWR8fCh0aGlzLiRvcHRpb25zLmNvbXB1dGVkPXt9KSx0aGlzLiRvcHRpb25zLmNvbXB1dGVkLl9fcU1ldGE9dGhpcy4kb3B0aW9ucy5tZXRhKTp0aGlzLl9fcU1ldGE9dGhpcy4kb3B0aW9ucy5tZXRhKX1mdW5jdGlvbiB0cmlnZ2VyTWV0YSgpe3RoaXMuJG9wdGlvbnMubWV0YSYmdGhpcy5fX3FNZXRhVXBkYXRlKCl9dmFyIG1ldGE9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC5xdWV1ZXMsaT10LlZ1ZTtpc1NTUj8oaS5wcm90b3R5cGUuJGdldE1ldGFIVE1MPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZ2V0U2VydmVyTWV0YSh0LGUpfX0saS5taXhpbih7YmVmb3JlQ3JlYXRlOmJlZm9yZUNyZWF0ZX0pLGUuc2VydmVyLnB1c2goZnVuY3Rpb24odCxlKXtlLnNzci5RX0hUTUxfQVRUUlMrPVwiICUlUV9IVE1MX0FUVFJTJSVcIixPYmplY3QuYXNzaWduKGUuc3NyLHtRX0hFQURfVEFHUzpcIiUlUV9IRUFEX1RBR1MlJVwiLFFfQk9EWV9BVFRSUzpcIiUlUV9CT0RZX0FUVFJTJSVcIixRX0JPRFlfVEFHUzpcIiUlUV9CT0RZX1RBR1MlJVwifSl9KSk6KHNzclRha2VvdmVyPWZyb21TU1IsaS5taXhpbih7YmVmb3JlQ3JlYXRlOmJlZm9yZUNyZWF0ZSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy4kb3B0aW9ucy5tZXRhJiYodGhpcy5fX3FNZXRhVW53YXRjaD10aGlzLiR3YXRjaChcIl9fcU1ldGFcIix0aGlzLl9fcU1ldGFVcGRhdGUpKX0sYWN0aXZhdGVkOnRyaWdnZXJNZXRhLGRlYWN0aXZhdGVkOnRyaWdnZXJNZXRhLGJlZm9yZU1vdW50OnRyaWdnZXJNZXRhLGRlc3Ryb3llZDpmdW5jdGlvbigpe3RoaXMuJG9wdGlvbnMubWV0YSYmKHRoaXMuX19xTWV0YVVud2F0Y2goKSx0aGlzLl9fcU1ldGFVcGRhdGUoKSl9LG1ldGhvZHM6e19fcU1ldGFVcGRhdGU6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodXBkYXRlSWQpLHVwZGF0ZUlkPXNldFRpbWVvdXQodXBkYXRlQ2xpZW50LmJpbmQodGhpcyksNTApfX19KSl9fSxkZWZhdWx0cyQxPXt9LHBvc2l0aW9uTGlzdD1bXCJ0b3AtbGVmdFwiLFwidG9wLXJpZ2h0XCIsXCJib3R0b20tbGVmdFwiLFwiYm90dG9tLXJpZ2h0XCIsXCJ0b3BcIixcImJvdHRvbVwiLFwibGVmdFwiLFwicmlnaHRcIixcImNlbnRlclwiXTtmdW5jdGlvbiBpbml0KHQpe3ZhciBlPXQuVnVlLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpLHRoaXMuX192bT1uZXcgZSh7bmFtZTpcIlFOb3RpZmljYXRpb25zXCIsZGF0YTp7bm90aWZzOntjZW50ZXI6W10sbGVmdDpbXSxyaWdodDpbXSx0b3A6W10sXCJ0b3AtbGVmdFwiOltdLFwidG9wLXJpZ2h0XCI6W10sYm90dG9tOltdLFwiYm90dG9tLWxlZnRcIjpbXSxcImJvdHRvbS1yaWdodFwiOltdfX0sbWV0aG9kczp7YWRkOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJOb3RpZnk6IHBhcmFtZXRlciByZXF1aXJlZFwiKSwhMTt2YXIgaT1PYmplY3QuYXNzaWduKHt9LGRlZmF1bHRzJDEsXCJzdHJpbmdcIj09dHlwZW9mIHQ/e21lc3NhZ2U6dH06Y2xvbmUodCkpO2lmKGkucG9zaXRpb24pe2lmKCFwb3NpdGlvbkxpc3QuaW5jbHVkZXMoaS5wb3NpdGlvbikpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJOb3RpZnk6IHdyb25nIHBvc2l0aW9uOiBcIitpLnBvc2l0aW9uKSwhMX1lbHNlIGkucG9zaXRpb249XCJib3R0b21cIjtpZihpLl9fdWlkPXVpZCgpLHZvaWQgMD09PWkudGltZW91dClpLnRpbWVvdXQ9NWUzO2Vsc2V7dmFyIHM9cGFyc2VJbnQoaS50aW1lb3V0LDEwKTtpZihpc05hTihzKXx8czwwKXJldHVybiBjb25zb2xlLmVycm9yKFwiTm90aWZ5OiB3cm9uZyB0aW1lb3V0OiBcIitpLnRpbWVvdXQpLCExO2kudGltZW91dD1zfXZhciBuPWZ1bmN0aW9uKCl7ZS5yZW1vdmUoaSl9O2lmKHQuYWN0aW9ucyYmKGkuYWN0aW9ucz10LmFjdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFuZGxlcixpPWNsb25lKHQpO3JldHVybiBpLmhhbmRsZXI9XCJmdW5jdGlvblwiPT10eXBlb2YgZT9mdW5jdGlvbigpe2UoKSwhdC5ub0Rpc21pc3MmJm4oKX06ZnVuY3Rpb24oKXtyZXR1cm4gbigpfSxpfSkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQub25EaXNtaXNzJiYoaS5vbkRpc21pc3M9dC5vbkRpc21pc3MpLGkuY2xvc2VCdG4pe3ZhciBvPVt7Y2xvc2VCdG46ITAsbGFiZWw6aS5jbG9zZUJ0bixoYW5kbGVyOm59XTtpLmFjdGlvbnM9aS5hY3Rpb25zP2kuYWN0aW9ucy5jb25jYXQobyk6b31pLnRpbWVvdXQ+MCYmKGkuX190aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuKCl9LGkudGltZW91dCsxZTMpKTt2YXIgcj1pLnBvc2l0aW9uLmluZGV4T2YoXCJ0b3BcIik+LTE/XCJ1bnNoaWZ0XCI6XCJwdXNoXCI7cmV0dXJuIHRoaXMubm90aWZzW2kucG9zaXRpb25dW3JdKGkpLG59LHJlbW92ZTpmdW5jdGlvbih0KXt0Ll9fdGltZW91dCYmY2xlYXJUaW1lb3V0KHQuX190aW1lb3V0KTt2YXIgZT10aGlzLm5vdGlmc1t0LnBvc2l0aW9uXS5pbmRleE9mKHQpO2lmKC0xIT09ZSl7dmFyIGk9dGhpcy4kcmVmc1tcIm5vdGlmX1wiK3QuX191aWRdO2lmKGkmJmkuJGVsKXt2YXIgcz1pLiRlbDtzLnN0eWxlLmxlZnQ9cy5vZmZzZXRMZWZ0K1wicHhcIixzLnN0eWxlLndpZHRoPWdldENvbXB1dGVkU3R5bGUocykud2lkdGh9dGhpcy5ub3RpZnNbdC5wb3NpdGlvbl0uc3BsaWNlKGUsMSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5vbkRpc21pc3MmJnQub25EaXNtaXNzKCl9fX0scmVuZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHQoXCJkaXZcIix7c3RhdGljQ2xhc3M6XCJxLW5vdGlmaWNhdGlvbnNcIn0scG9zaXRpb25MaXN0Lm1hcChmdW5jdGlvbihpKXt2YXIgcz1bXCJsZWZ0XCIsXCJjZW50ZXJcIixcInJpZ2h0XCJdLmluY2x1ZGVzKGkpP1wiY2VudGVyXCI6aS5pbmRleE9mKFwidG9wXCIpPi0xP1widG9wXCI6XCJib3R0b21cIixuPWkuaW5kZXhPZihcImxlZnRcIik+LTE/XCJzdGFydFwiOmkuaW5kZXhPZihcInJpZ2h0XCIpPi0xP1wiZW5kXCI6XCJjZW50ZXJcIixvPVtcImxlZnRcIixcInJpZ2h0XCJdLmluY2x1ZGVzKGkpP1wiaXRlbXMtXCIrKFwibGVmdFwiPT09aT9cInN0YXJ0XCI6XCJlbmRcIikrXCIganVzdGlmeS1jZW50ZXJcIjpcImNlbnRlclwiPT09aT9cImZsZXgtY2VudGVyXCI6XCJpdGVtcy1cIituO3JldHVybiB0KFwidHJhbnNpdGlvbi1ncm91cFwiLHtrZXk6aSxzdGF0aWNDbGFzczpcInEtbm90aWZpY2F0aW9uLWxpc3QgcS1ub3RpZmljYXRpb24tbGlzdC1cIitzK1wiIGZpeGVkIGNvbHVtbiBcIitvLHRhZzpcImRpdlwiLHByb3BzOntuYW1lOlwicS1ub3RpZmljYXRpb24tXCIraSxtb2RlOlwib3V0LWluXCJ9fSxlLm5vdGlmc1tpXS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQoUUFsZXJ0LHtyZWY6XCJub3RpZl9cIitlLl9fdWlkLGtleTplLl9fdWlkLHN0YXRpY0NsYXNzOlwicS1ub3RpZmljYXRpb25cIixwcm9wczplfSxbZS5tZXNzYWdlXSl9KSl9KSl9fSksdGhpcy5fX3ZtLiRtb3VudChpKX12YXIgbm90aWZ5PXtjcmVhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGlzU1NSP2Z1bmN0aW9uKCl7fTp0aGlzLl9fdm0uYWRkKHQpfSxzZXREZWZhdWx0czpmdW5jdGlvbih0KXtPYmplY3QuYXNzaWduKGRlZmF1bHRzJDEsdCl9LGluc3RhbGw6ZnVuY3Rpb24odCl7aWYoaXNTU1IpcmV0dXJuIHQuJHEubm90aWZ5PWZ1bmN0aW9uKCl7fSx2b2lkKHQuJHEubm90aWZ5LnNldERlZmF1bHRzPWZ1bmN0aW9uKCl7fSk7aW5pdC5jYWxsKHRoaXMsdCksdC5jZmcubm90aWZ5JiZ0aGlzLnNldERlZmF1bHRzKHQuY2ZnLm5vdGlmeSksdC4kcS5ub3RpZnk9dGhpcy5jcmVhdGUuYmluZCh0aGlzKSx0LiRxLm5vdGlmeS5zZXREZWZhdWx0cz10aGlzLnNldERlZmF1bHRzfX0sU0laRV9MSVNUPVtcInNtXCIsXCJtZFwiLFwibGdcIixcInhsXCJdLHNjcmVlbj17d2lkdGg6MCxzaXplczp7c206NTc2LG1kOjc2OCxsZzo5OTIseGw6MTIwMH0sbHQ6e3NtOiEwLG1kOiEwLGxnOiEwLHhsOiEwfSxndDp7fSx4czohMCxzZXRTaXplczpmdW5jdGlvbigpe30sc2V0RGVib3VuY2U6ZnVuY3Rpb24oKXt9LGluc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXQuJHEscz10LnF1ZXVlcyxuPXQuVnVlO2lmKGlzU1NSKWkuc2NyZWVuPXRoaXM7ZWxzZXt2YXIgbyxyLGE9ZnVuY3Rpb24odCl7dmFyIGk9d2luZG93LmlubmVyV2lkdGgscz1lLnNpemVzO3QmJmk9PT1lLndpZHRofHwoZS53aWR0aD1pLGUuZ3QueHM9aT49cy5zbSxlLmd0LnNtPWk+PXMubWQsZS5ndC5tZD1pPj1zLmxnLGUuZ3QubGc9aT49cy54bCxlLmx0LnNtPWk8cy5zbSxlLmx0Lm1kPWk8cy5tZCxlLmx0LmxnPWk8cy5sZyxlLmx0LnhsPWk8cy54bCxlLnhzPWUubHQuc20sZS5zbT1lLmd0LnhzJiZlLmx0Lm1kLGUubWQ9ZS5ndC5zbSYmZS5sdC5sZyxlLmxnPWUuZ3QubWQmJmUubHQueGwsZS54bD1pPnMueGwpfSxsPXt9O3RoaXMuc2V0U2l6ZXM9ZnVuY3Rpb24odCl7U0laRV9MSVNULmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXSYmKGxbZV09dFtlXSl9KX0sdGhpcy5zZXREZWJvdW5jZT1mdW5jdGlvbih0KXtyPXR9O3ZhciBjPWZ1bmN0aW9uKCl7dmFyIHQ9Z2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KTt0LmdldFByb3BlcnR5VmFsdWUoXCItLXEtc2l6ZS1zbVwiKSYmU0laRV9MSVNULmZvckVhY2goZnVuY3Rpb24oaSl7ZS5zaXplc1tpXT1wYXJzZUludCh0LmdldFByb3BlcnR5VmFsdWUoXCItLXEtc2l6ZS1cIitpKSwxMCl9KSxlLnNldFNpemVzPWZ1bmN0aW9uKHQpe1NJWkVfTElTVC5mb3JFYWNoKGZ1bmN0aW9uKGkpe3RbaV0mJihlLnNpemVzW2ldPXRbaV0pfSksYSgpfSxlLnNldERlYm91bmNlPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7YSghMCl9O28mJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsbyxsaXN0ZW5PcHRzLnBhc3NpdmUpLG89dD4wP2RlYm91bmNlKGUsdCk6ZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLG8sbGlzdGVuT3B0cy5wYXNzaXZlKX0sZS5zZXREZWJvdW5jZShyfHwxMDApLE9iamVjdC5rZXlzKGwpLmxlbmd0aD4wPyhlLnNldFNpemVzKGwpLGw9bnVsbCk6YSgpfTtmcm9tU1NSP3MudGFrZW92ZXIucHVzaChjKTpjKCksbi51dGlsLmRlZmluZVJlYWN0aXZlKGksXCJzY3JlZW5cIix0aGlzKX19fTtmdW5jdGlvbiBlbmNvZGUkMSh0KXtyZXR1cm5cIltvYmplY3QgRGF0ZV1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KT9cIl9fcV9kYXRlfFwiK3QudG9VVENTdHJpbmcoKTpcIltvYmplY3QgUmVnRXhwXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpP1wiX19xX2V4cHJ8XCIrdC5zb3VyY2U6XCJudW1iZXJcIj09dHlwZW9mIHQ/XCJfX3FfbnVtYnxcIit0OlwiYm9vbGVhblwiPT10eXBlb2YgdD9cIl9fcV9ib29sfFwiKyh0P1wiMVwiOlwiMFwiKTpcInN0cmluZ1wiPT10eXBlb2YgdD9cIl9fcV9zdHJufFwiK3Q6XCJmdW5jdGlvblwiPT10eXBlb2YgdD9cIl9fcV9zdHJufFwiK3QudG9TdHJpbmcoKTp0PT09T2JqZWN0KHQpP1wiX19xX29ianR8XCIrSlNPTi5zdHJpbmdpZnkodCk6dH1mdW5jdGlvbiBkZWNvZGUkMSh0KXt2YXIgZSxpO2lmKHQubGVuZ3RoPDkpcmV0dXJuIHQ7c3dpdGNoKGU9dC5zdWJzdHIoMCw4KSxpPXQuc3Vic3RyaW5nKDkpLGUpe2Nhc2VcIl9fcV9kYXRlXCI6cmV0dXJuIG5ldyBEYXRlKGkpO2Nhc2VcIl9fcV9leHByXCI6cmV0dXJuIG5ldyBSZWdFeHAoaSk7Y2FzZVwiX19xX251bWJcIjpyZXR1cm4gTnVtYmVyKGkpO2Nhc2VcIl9fcV9ib29sXCI6cmV0dXJuIEJvb2xlYW4oXCIxXCI9PT1pKTtjYXNlXCJfX3Ffc3RyblwiOnJldHVyblwiXCIraTtjYXNlXCJfX3Ffb2JqdFwiOnJldHVybiBKU09OLnBhcnNlKGkpO2RlZmF1bHQ6cmV0dXJuIHR9fWZ1bmN0aW9uIGdldEVtcHR5U3RvcmFnZSgpe3ZhciB0PWZ1bmN0aW9uKCl7fTtyZXR1cm57aGFzOnQsZ2V0OntsZW5ndGg6dCxpdGVtOnQsaW5kZXg6dCxhbGw6dH0sc2V0OnQscmVtb3ZlOnQsY2xlYXI6dCxpc0VtcHR5OnR9fWZ1bmN0aW9uIGdldFN0b3JhZ2UodCl7dmFyIGU9d2luZG93W3QrXCJTdG9yYWdlXCJdLGk9ZnVuY3Rpb24odCl7dmFyIGk9ZS5nZXRJdGVtKHQpO3JldHVybiBpP2RlY29kZSQxKGkpOm51bGx9O3JldHVybntoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPT1lLmdldEl0ZW0odCl9LGdldDp7bGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIGUubGVuZ3RofSxpdGVtOmksaW5kZXg6ZnVuY3Rpb24odCl7aWYodDxlLmxlbmd0aClyZXR1cm4gaShlLmtleSh0KSl9LGFsbDpmdW5jdGlvbigpe2Zvcih2YXIgdCxzPXt9LG49ZS5sZW5ndGgsbz0wO288bjtvKyspc1t0PWUua2V5KG8pXT1pKHQpO3JldHVybiBzfX0sc2V0OmZ1bmN0aW9uKHQsaSl7ZS5zZXRJdGVtKHQsZW5jb2RlJDEoaSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7ZS5yZW1vdmVJdGVtKHQpfSxjbGVhcjpmdW5jdGlvbigpe2UuY2xlYXIoKX0saXNFbXB0eTpmdW5jdGlvbigpe3JldHVybiAwPT09ZS5sZW5ndGh9fX12YXIgbG9jYWxTdG9yYWdlPXtpbnN0YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXQuJHEsaT1pc1NTUnx8IWhhc1dlYlN0b3JhZ2U/Z2V0RW1wdHlTdG9yYWdlKCk6Z2V0U3RvcmFnZShcImxvY2FsXCIpO2UubG9jYWxTdG9yYWdlPWksT2JqZWN0LmFzc2lnbih0aGlzLGkpfX0sc2Vzc2lvblN0b3JhZ2U9e2luc3RhbGw6ZnVuY3Rpb24odCl7dmFyIGU9dC4kcSxpPWlzU1NSfHwhaGFzV2ViU3RvcmFnZT9nZXRFbXB0eVN0b3JhZ2UoKTpnZXRTdG9yYWdlKFwic2Vzc2lvblwiKTtlLnNlc3Npb25TdG9yYWdlPWksT2JqZWN0LmFzc2lnbih0aGlzLGkpfX0scGx1Z2lucz1PYmplY3QuZnJlZXplKHtBY3Rpb25TaGVldDphY3Rpb25TaGVldCxBZGRyZXNzYmFyQ29sb3I6YWRkcmVzc2JhckNvbG9yLEFwcEZ1bGxzY3JlZW46YXBwRnVsbHNjcmVlbixBcHBWaXNpYmlsaXR5OmFwcFZpc2liaWxpdHksQ29va2llczpjb29raWVzLERpYWxvZzpkaWFsb2csTG9hZGluZ0Jhcjpsb2FkaW5nQmFyLExvYWRpbmc6bG9hZGluZyxNZXRhOm1ldGEsTm90aWZ5Om5vdGlmeSxQbGF0Zm9ybTpQbGF0Zm9ybSxTY3JlZW46c2NyZWVuLExvY2FsU3RvcmFnZTpsb2NhbFN0b3JhZ2UsU2Vzc2lvblN0b3JhZ2U6c2Vzc2lvblN0b3JhZ2V9KTtmdW5jdGlvbiBvcGVuVXJsKHQsZSl7aWYoUGxhdGZvcm0uaXMuY29yZG92YSYmbmF2aWdhdG9yJiZuYXZpZ2F0b3IuYXBwKXJldHVybiBuYXZpZ2F0b3IuYXBwLmxvYWRVcmwodCx7b3BlbkV4dGVybmFsOiEwfSk7dmFyIGk9d2luZG93Lm9wZW4odCxcIl9ibGFua1wiKTtpZihpKXJldHVybiBpLmZvY3VzKCksaTtlJiZlKCl9ZnVuY3Rpb24gbm9vcCgpe312YXIgaW5kZXhfZXNtPU9iamVjdC5hc3NpZ24oe30sVnVlUGx1Z2luLHtpbnN0YWxsOmZ1bmN0aW9uKHQsZSl7VnVlUGx1Z2luLmluc3RhbGwodCxPYmplY3QuYXNzaWduKHt9LHtjb21wb25lbnRzOmNvbXBvbmVudHMkMSxkaXJlY3RpdmVzOmRpcmVjdGl2ZXMscGx1Z2luczpwbHVnaW5zfSxlKSl9fSk7ZXhwb3J0IGRlZmF1bHQgaW5kZXhfZXNtO2V4cG9ydHtRQWN0aW9uU2hlZXQsUUFqYXhCYXIsUUFsZXJ0LFFBdXRvY29tcGxldGUsUUJyZWFkY3J1bWJzLFFCcmVhZGNydW1ic0VsLFFCdG4sUUJ0bkdyb3VwLFFCdG5Ecm9wZG93bixRQnRuVG9nZ2xlLFFDYXJkLFFDYXJkVGl0bGUsUUNhcmRNYWluLFFDYXJkQWN0aW9ucyxRQ2FyZE1lZGlhLFFDYXJkU2VwYXJhdG9yLFFDYXJvdXNlbCxRQ2Fyb3VzZWxTbGlkZSxRQ2Fyb3VzZWxDb250cm9sLFFDaGF0TWVzc2FnZSxRQ2hlY2tib3gsUUNoaXAsUUNoaXBzSW5wdXQsUUNvbGxhcHNpYmxlLFFDb2xvcixRQ29sb3JQaWNrZXIsUUNvbnRleHRNZW51LFFEYXRldGltZSxRRGF0ZXRpbWVQaWNrZXIsUURpYWxvZyxRRWRpdG9yLFFGYWIsUUZhYkFjdGlvbixRRmllbGQsUUljb24sUUluZmluaXRlU2Nyb2xsLFFJbm5lckxvYWRpbmcsUUlucHV0LFFJbnB1dEZyYW1lLFFKdW1ib3Ryb24sUUtub2IsUUxheW91dCxRTGF5b3V0RHJhd2VyLFFMYXlvdXRGb290ZXIsUUxheW91dEhlYWRlcixRUGFnZSxRUGFnZUNvbnRhaW5lcixRUGFnZVN0aWNreSxRSXRlbSxRSXRlbVNlcGFyYXRvcixRSXRlbU1haW4sUUl0ZW1TaWRlLFFJdGVtVGlsZSxRSXRlbVdyYXBwZXIsUUxpc3QsUUxpc3RIZWFkZXIsUU1vZGFsLFFNb2RhbExheW91dCxRTm9Tc3IsUVJlc2l6ZU9ic2VydmFibGUsUVNjcm9sbE9ic2VydmFibGUsUVdpbmRvd1Jlc2l6ZU9ic2VydmFibGUsUU9wdGlvbkdyb3VwLFFQYWdpbmF0aW9uLFFQYXJhbGxheCxRUG9wb3ZlcixRUG9wdXBFZGl0LFFQcm9ncmVzcyxRUHVsbFRvUmVmcmVzaCxRUmFkaW8sUVJhbmdlLFFSYXRpbmcsUVNjcm9sbEFyZWEsUVNlYXJjaCxRU2VsZWN0LFFTbGlkZVRyYW5zaXRpb24sUVNsaWRlcixRU3Bpbm5lcixRU3Bpbm5lckF1ZGlvLFFTcGlubmVyQmFsbCxRU3Bpbm5lckJhcnMsUVNwaW5uZXJDaXJjbGVzLFFTcGlubmVyQ29tbWVudCxRU3Bpbm5lckN1YmUsUVNwaW5uZXJEb3RzLFFTcGlubmVyRmFjZWJvb2ssUVNwaW5uZXJHZWFycyxRU3Bpbm5lckdyaWQsUVNwaW5uZXJIZWFydHMsUVNwaW5uZXJIb3VyZ2xhc3MsUVNwaW5uZXJJbmZpbml0eSxRU3Bpbm5lcl9pb3MgYXMgUVNwaW5uZXJJb3MsRGVmYXVsdFNwaW5uZXIgYXMgUVNwaW5uZXJNYXQsUVNwaW5uZXJPdmFsLFFTcGlubmVyUGllLFFTcGlubmVyUHVmZixRU3Bpbm5lclJhZGlvLFFTcGlubmVyUmluZ3MsUVNwaW5uZXJUYWlsLFFTdGVwLFFTdGVwcGVyLFFTdGVwcGVyTmF2aWdhdGlvbixRUm91dGVUYWIsUVRhYixRVGFiUGFuZSxRVGFicyxRVGFibGUsUVRoLFFUcixRVGQsUVRhYmxlQ29sdW1ucyxRVGltZWxpbmUsUVRpbWVsaW5lRW50cnksUVRvZ2dsZSxRVG9vbGJhcixRVG9vbGJhclRpdGxlLFFUb29sdGlwLFFUcmVlLFFVcGxvYWRlcixRVmlkZW8sYmFja1RvVG9wIGFzIEJhY2tUb1RvcCxjbG9zZU92ZXJsYXkgYXMgQ2xvc2VPdmVybGF5LGdvQmFjayBhcyBHb0JhY2ssUmlwcGxlLHNjcm9sbEZpcmUgYXMgU2Nyb2xsRmlyZSxzY3JvbGwkMSBhcyBTY3JvbGwsdG91Y2hIb2xkIGFzIFRvdWNoSG9sZCxUb3VjaFBhbixUb3VjaFN3aXBlLGFjdGlvblNoZWV0IGFzIEFjdGlvblNoZWV0LGFkZHJlc3NiYXJDb2xvciBhcyBBZGRyZXNzYmFyQ29sb3IsYXBwRnVsbHNjcmVlbiBhcyBBcHBGdWxsc2NyZWVuLGFwcFZpc2liaWxpdHkgYXMgQXBwVmlzaWJpbGl0eSxjb29raWVzIGFzIENvb2tpZXMsZGlhbG9nIGFzIERpYWxvZyxsb2FkaW5nQmFyIGFzIExvYWRpbmdCYXIsbG9hZGluZyBhcyBMb2FkaW5nLG1ldGEgYXMgTWV0YSxub3RpZnkgYXMgTm90aWZ5LFBsYXRmb3JtLHNjcmVlbiBhcyBTY3JlZW4sbG9jYWxTdG9yYWdlIGFzIExvY2FsU3RvcmFnZSxzZXNzaW9uU3RvcmFnZSBhcyBTZXNzaW9uU3RvcmFnZSxhbmltYXRlLGNsb25lLGNvbG9ycyxkYXRlLGRlYm91bmNlLGRvbSxlYXNpbmcsZXZlbnQsZXh0ZW5kLGZpbHRlcixmb3JtYXQsZnJhbWVEZWJvdW5jZSxub29wLG9wZW5VcmwgYXMgb3BlblVSTCxzY3JvbGwsdGhyb3R0bGUsdWlkfTsiLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9pbmRleC5qcyEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi9xdWFzYXIubWF0LmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjYzYmI0ZDYwXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2luZGV4LmpzIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuL3F1YXNhci5tYXQuY3NzXCIsIGZ1bmN0aW9uKCkge1xuICAgICB2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uLy4uL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vLi4vLi4vcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzIS4vcXVhc2FyLm1hdC5jc3NcIik7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuIiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiYXBwXCIgfSxcbiAgICBbXG4gICAgICBfdm0uX20oMCksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgZGF0YTogX3ZtLmluZGV4LCBlbW9qaTogXCI6c2FudGE6OnNraW4tdG9uZS0zOlwiLCBzaXplOiAzMiB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleCxcbiAgICAgICAgICAgICAgZW1vamk6IFwic2FudGFcIixcbiAgICAgICAgICAgICAgc2V0OiBcImVtb2ppb25lXCIsXG4gICAgICAgICAgICAgIHNpemU6IDMyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcImVtb2ppXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamk6IF92bS5zYW50YUVtb2ppT2JqZWN0LCBzaXplOiAzMiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgICAgX2MoXCJidXR0b25cIiwgeyBvbjogeyBjbGljazogX3ZtLnRvZ2dsZVZpc2libGUgfSB9LCBbXG4gICAgICAgICAgX3ZtLl92KFwiU2hvdyAvIGhpZGUgdGhlIHBpY2tlclwiKVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5zbWlsZSkgfSxcbiAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnRvZ2dsZVZpc2libGUgfVxuICAgICAgICB9KVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fbChcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgXCJuYXRpdmVcIixcbiAgICAgICAgICAgICAgXCJhcHBsZVwiLFxuICAgICAgICAgICAgICBcImdvb2dsZVwiLFxuICAgICAgICAgICAgICBcInR3aXR0ZXJcIixcbiAgICAgICAgICAgICAgXCJlbW9qaW9uZVwiLFxuICAgICAgICAgICAgICBcIm1lc3NlbmdlclwiLFxuICAgICAgICAgICAgICBcImZhY2Vib29rXCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmdW5jdGlvbihzZXQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogc2V0LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogX3ZtLmFjdGl2ZVNldCA9PSBzZXQgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uYWN0aXZlU2V0ID0gc2V0XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3Moc2V0KSArIFwiXFxuICAgICAgXCIpXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfdm0uaXNWaXNpYmxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInBpY2tlclwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5pbmRleCxcbiAgICAgICAgICAgICAgICAgIHNldDogX3ZtLmFjdGl2ZVNldCxcbiAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLm5hdGl2ZSxcbiAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uZW1vamksXG4gICAgICAgICAgICAgICAgICBlbW9qaVRvb2x0aXA6IHRydWUsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogX3ZtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgZW1vamlTaXplOiAzMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgc2VsZWN0OiBfdm0uc2hvd0Vtb2ppIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW192bS5fdihfdm0uX3MoX3ZtLmVtb2ppc091dHB1dCkpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl9tKDEpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJoMlwiLCBbX3ZtLl92KFwiUURpYWxvZyBFeGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwicS1idG5cIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgbGFiZWw6IFwiT3BlbiBRRGlhbG9nXCIgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZW1vamlQaWNrZXJEaWFsb2cgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwicS1kaWFsb2dcIiwge1xuICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwiYm9keVwiLFxuICAgICAgICAgICAgZm46IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIF9jKFwicGlja2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgZW1vamlTaXplOiAyNCwgbmF0aXZlOiB0cnVlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJveHk6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF0pLFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIHZhbHVlOiBfdm0uZW1vamlQaWNrZXJEaWFsb2csXG4gICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgX3ZtLmVtb2ppUGlja2VyRGlhbG9nID0gJCR2XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImVtb2ppUGlja2VyRGlhbG9nXCJcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJDdXN0b20gU2VhcmNoIEFuZCBQcmV2aWV3IFRlbXBsYXRlcyBFeGFtcGxlXCIpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9LCBbXG4gICAgICAgIF92bS5fdihcbiAgICAgICAgICAnXFxuICAgIEFsc28gaGVyZSB3ZSB1c2UgXCJTdGF0aWNQaWNrZXJcIiB3aGljaCBkb2VzIG5vdCB1c2UgdmlydHVhbCBzY3JvbGxlciAoaXQgaXNcXG4gICAgc2xvd2VyLCBidXQgZWFzaWVyIHRvIGN1c3RvbWl6ZSB3aXRoIGNzcylcXG4gICdcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiU3RhdGljUGlja2VyXCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IGRhdGE6IF92bS5pbmRleCwgbmF0aXZlOiB0cnVlIH0sXG4gICAgICAgICAgICBzY29wZWRTbG90czogX3ZtLl91KFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogXCJzZWFyY2hUZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbihzbG90UHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBzbG90UHJvcHMuaTE4bi5zZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzbG90UHJvcHMub25TZWFyY2goJGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAga2V5OiBcInByZXZpZXdUZW1wbGF0ZVwiLFxuICAgICAgICAgICAgICAgIGZuOiBmdW5jdGlvbihzbG90UHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJFbW9qaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHNsb3RQcm9wcy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1vamk6IHNsb3RQcm9wcy5lbW9qaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNsb3RQcm9wcy5lbW9qaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwicG9pbnRfdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogc2xvdFByb3BzLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpbjogc2xvdFByb3BzLmVtb2ppUHJvcHMuc2tpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogc2xvdFByb3BzLmVtb2ppUHJvcHMuc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90UHJvcHMuZW1vamlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiflwiICsgc2xvdFByb3BzLmVtb2ppLm5hbWUgKyBcIn5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJDaG9vc2UuLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVzXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90UHJvcHMuZW1vamkgPyBzbG90UHJvcHMuZW1vamkuY29sb25zIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdKVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3dcIiB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImgyXCIsIFtfdm0uX3YoXCJGaWx0ZXJlZCBwaWNrZXIgZXhhbXBsZVwiKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlBpY2tlclwiLCB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBuYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgIGVtb2ppOiBcImZsYWctdGZcIixcbiAgICAgICAgICAgICAgZW1vamlTaXplOiAxOCxcbiAgICAgICAgICAgICAgZGF0YTogX3ZtLmluZGV4RmlsdGVyZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXG4gIGZ1bmN0aW9uKCkge1xuICAgIHZhciBfdm0gPSB0aGlzXG4gICAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gICAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gICAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSwgW1xuICAgICAgX2MoXCJoMVwiLCBbX3ZtLl92KFwiRW1vamkgTWFydCBWdWUg8J+PrFwiKV0pXG4gICAgXSlcbiAgfSxcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJyb3ctc21hbGxcIiB9LCBbXG4gICAgICBfYyhcImlmcmFtZVwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgc3JjOlxuICAgICAgICAgICAgXCJodHRwczovL2doYnRucy5jb20vZ2l0aHViLWJ0bi5odG1sP3VzZXI9c2VyZWJyb3YmcmVwbz1lbW9qaS1tYXJ0LXZ1ZSZ0eXBlPXN0YXImY291bnQ9dHJ1ZVwiLFxuICAgICAgICAgIGZyYW1lQm9yZGVyOiBcIjBcIixcbiAgICAgICAgICBzY3JvbGxpbmc6IFwiMFwiLFxuICAgICAgICAgIHdpZHRoOiBcIjkwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiMjBweFwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSlcbiAgfVxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF92bS52aWV3LmNhblJlbmRlclxuICAgID8gX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1lbW9qaVwiLFxuICAgICAgICAgIGF0dHJzOiB7IHRpdGxlOiBfdm0udmlldy50aXRsZSwgXCJkYXRhLXRpdGxlXCI6IF92bS50aXRsZSB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBtb3VzZWVudGVyOiBfdm0ub25Nb3VzZUVudGVyLFxuICAgICAgICAgICAgbW91c2VsZWF2ZTogX3ZtLm9uTW91c2VMZWF2ZSxcbiAgICAgICAgICAgIGNsaWNrOiBfdm0ub25DbGlja1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7IGNsYXNzOiBfdm0udmlldy5jc3NDbGFzcywgc3R5bGU6IF92bS52aWV3LmNzc1N0eWxlIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnZpZXcuY29udGVudCkpXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIDogX3ZtLl9lKClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0XCIsIHN0eWxlOiBfdm0uY3VzdG9tU3R5bGVzIH0sXG4gICAgW1xuICAgICAgX3ZtLnNob3dDYXRlZ29yaWVzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1hbmNob3JzXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhbmNob3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBfdm0uY29sb3IsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzOiBfdm0uY2F0ZWdvcmllcyxcbiAgICAgICAgICAgICAgICAgIFwiYWN0aXZlLWNhdGVnb3J5XCI6IF92bS5hY3RpdmVDYXRlZ29yeVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbkFuY2hvckNsaWNrIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fdChcbiAgICAgICAgXCJzZWFyY2hUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dTZWFyY2hcbiAgICAgICAgICAgID8gX2MoXCJzZWFyY2hcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogXCJzZWFyY2hcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIFwiYXV0by1mb2N1c1wiOiBfdm0uYXV0b0ZvY3VzLFxuICAgICAgICAgICAgICAgICAgXCJvbi1zZWFyY2hcIjogX3ZtLm9uU2VhcmNoXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBzZWFyY2g6IF92bS5vblNlYXJjaCB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICBpMThuOiBfdm0uaTE4bixcbiAgICAgICAgICBhdXRvRm9jdXM6IF92bS5hdXRvRm9jdXMsXG4gICAgICAgICAgb25TZWFyY2g6IF92bS5vblNlYXJjaFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiY2F0ZWdvcnlcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInNlYXJjaEVtb2ppc1wiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXNlYXJjaC1yZXN1bHRzXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgaWQ6IFwic2VhcmNoXCIsXG4gICAgICAgICAgbmFtZTogXCJTZWFyY2hcIixcbiAgICAgICAgICBlbW9qaXM6IF92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wc1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcIkR5bmFtaWNTY3JvbGxlclwiLCB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogIV92bS5zZWFyY2hFbW9qaXMsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcIiFzZWFyY2hFbW9qaXNcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVmOiBcImR5blNjcm9sbGVyXCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcInNjcm9sbGVyXCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaXRlbXM6IF92bS5zY3JvbGxlckNhdGVnb3JpZXMsXG4gICAgICAgICAgXCJtaW4taXRlbS1zaXplXCI6IDYwLFxuICAgICAgICAgIGJ1ZmZlcjogNDAwLFxuICAgICAgICAgIFwia2V5LWZpZWxkXCI6IFwiaWRcIixcbiAgICAgICAgICBcImVtaXQtdXBkYXRlXCI6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgb246IHsgdXBkYXRlOiBfdm0ub25TY3JvbGxVcGRhdGUgfSxcbiAgICAgICAgc2NvcGVkU2xvdHM6IF92bS5fdShbXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIGZuOiBmdW5jdGlvbihyZWYpIHtcbiAgICAgICAgICAgICAgdmFyIGl0ZW0gPSByZWYuaXRlbVxuICAgICAgICAgICAgICB2YXIgYWN0aXZlID0gcmVmLmFjdGl2ZVxuICAgICAgICAgICAgICB2YXIgaW5kZXggPSByZWYuaW5kZXhcbiAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiRHluYW1pY1Njcm9sbGVySXRlbVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBpdGVtOiBpdGVtLCBhY3RpdmU6IGFjdGl2ZSwgXCJkYXRhLWluZGV4XCI6IGluZGV4IH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiY2F0ZWdvcnlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLnNob3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaXRlbS5zaG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGtleTogaXRlbS5jYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IFwiY2F0ZWdvcmllc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpMThuOiBpdGVtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5jYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb2ppczogaXRlbS5jYXRlZ29yeS5lbW9qaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVtb2ppLXByb3BzXCI6IGl0ZW0uZW1vamlQcm9wc1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdKVxuICAgICAgfSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl90KFxuICAgICAgICBcInByZXZpZXdUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dQcmV2aWV3XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1wcmV2aWV3XCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInByZXZpZXdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdm0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgZW1vamk6IF92bS5wcmV2aWV3RW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJpZGxlLWVtb2ppXCI6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJzaG93LXNraW4tdG9uZXNcIjogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcInNraW4tcHJvcHNcIjogX3ZtLnNraW5Qcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcIm9uLXNraW4tY2hhbmdlXCI6IF92bS5vblNraW5DaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgdGl0bGU6IF92bS50aXRsZSxcbiAgICAgICAgICBlbW9qaTogX3ZtLnByZXZpZXdFbW9qaSxcbiAgICAgICAgICBpZGxlRW1vamk6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgc2hvd1NraW5Ub25lczogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgZW1vamlQcm9wczogX3ZtLmVtb2ppUHJvcHMsXG4gICAgICAgICAgc2tpblByb3BzOiBfdm0uc2tpblByb3BzLFxuICAgICAgICAgIG9uU2tpbkNoYW5nZTogX3ZtLm9uU2tpbkNoYW5nZVxuICAgICAgICB9XG4gICAgICApXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0IGVtb2ppLW1hcnQtc3RhdGljXCIsIHN0eWxlOiBfdm0uY3VzdG9tU3R5bGVzIH0sXG4gICAgW1xuICAgICAgX3ZtLnNob3dDYXRlZ29yaWVzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1hbmNob3JzXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhbmNob3JzXCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBfdm0uY29sb3IsXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yaWVzOiBfdm0uY2F0ZWdvcmllcyxcbiAgICAgICAgICAgICAgICAgIFwiYWN0aXZlLWNhdGVnb3J5XCI6IF92bS5hY3RpdmVDYXRlZ29yeVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5vbkFuY2hvckNsaWNrIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fdChcbiAgICAgICAgXCJzZWFyY2hUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dTZWFyY2hcbiAgICAgICAgICAgID8gX2MoXCJzZWFyY2hcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogXCJzZWFyY2hcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgICAgIFwiYXV0by1mb2N1c1wiOiBfdm0uYXV0b0ZvY3VzLFxuICAgICAgICAgICAgICAgICAgXCJvbi1zZWFyY2hcIjogX3ZtLm9uU2VhcmNoXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBzZWFyY2g6IF92bS5vblNlYXJjaCB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICBpMThuOiBfdm0uaTE4bixcbiAgICAgICAgICBhdXRvRm9jdXM6IF92bS5hdXRvRm9jdXMsXG4gICAgICAgICAgb25TZWFyY2g6IF92bS5vblNlYXJjaFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcInNjcm9sbFwiLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtc2Nyb2xsXCIsXG4gICAgICAgICAgb246IHsgc2Nyb2xsOiBfdm0ub25TY3JvbGwgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJjYXRlZ29yeVwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VhcmNoRW1vamlzLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VhcmNoRW1vamlzXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICBpMThuOiBfdm0ubWVyZ2VkSTE4bixcbiAgICAgICAgICAgICAgaWQ6IFwic2VhcmNoXCIsXG4gICAgICAgICAgICAgIG5hbWU6IFwiU2VhcmNoXCIsXG4gICAgICAgICAgICAgIGVtb2ppczogX3ZtLnNlYXJjaEVtb2ppcyxcbiAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9sKF92bS5maWx0ZXJlZENhdGVnb3JpZXMsIGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXCJjYXRlZ29yeVwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgIV92bS5zZWFyY2hFbW9qaXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKF92bS5pbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkpLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgXCIhc2VhcmNoRW1vamlzICYmIChpbmZpbml0ZVNjcm9sbCB8fCBjYXRlZ29yeSA9PSBhY3RpdmVDYXRlZ29yeSlcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAga2V5OiBjYXRlZ29yeS5pZCxcbiAgICAgICAgICAgICAgcmVmOiBcImNhdGVnb3JpZXNcIixcbiAgICAgICAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgaTE4bjogX3ZtLm1lcmdlZEkxOG4sXG4gICAgICAgICAgICAgICAgaWQ6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5Lm5hbWUsXG4gICAgICAgICAgICAgICAgZW1vamlzOiBjYXRlZ29yeS5lbW9qaXMsXG4gICAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wc1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgICksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX3ZtLl90KFxuICAgICAgICBcInByZXZpZXdUZW1wbGF0ZVwiLFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLnNob3dQcmV2aWV3XG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWJhciBlbW9qaS1tYXJ0LWJhci1wcmV2aWV3XCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInByZXZpZXdcIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IF92bS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBfdm0udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgZW1vamk6IF92bS5wcmV2aWV3RW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJpZGxlLWVtb2ppXCI6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgICAgICAgICAgICAgXCJzaG93LXNraW4tdG9uZXNcIjogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbW9qaS1wcm9wc1wiOiBfdm0uZW1vamlQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcInNraW4tcHJvcHNcIjogX3ZtLnNraW5Qcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICBcIm9uLXNraW4tY2hhbmdlXCI6IF92bS5vblNraW5DaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgdGl0bGU6IF92bS50aXRsZSxcbiAgICAgICAgICBlbW9qaTogX3ZtLnByZXZpZXdFbW9qaSxcbiAgICAgICAgICBpZGxlRW1vamk6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgc2hvd1NraW5Ub25lczogX3ZtLnNob3dTa2luVG9uZXMsXG4gICAgICAgICAgZW1vamlQcm9wczogX3ZtLmVtb2ppUHJvcHMsXG4gICAgICAgICAgc2tpblByb3BzOiBfdm0uc2tpblByb3BzLFxuICAgICAgICAgIG9uU2tpbkNoYW5nZTogX3ZtLm9uU2tpbkNoYW5nZVxuICAgICAgICB9XG4gICAgICApXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LWFuY2hvcnNcIiB9LFxuICAgIF92bS5fbChfdm0uY2F0ZWdvcmllcywgZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybiBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IGNhdGVnb3J5LmlkLFxuICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtYW5jaG9yXCI6IHRydWUsXG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtYW5jaG9yLXNlbGVjdGVkXCI6IGNhdGVnb3J5LmlkID09IF92bS5hY3RpdmVDYXRlZ29yeS5pZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGNvbG9yOiBjYXRlZ29yeS5pZCA9PSBfdm0uYWN0aXZlQ2F0ZWdvcnkuaWQgPyBfdm0uY29sb3IgOiBcIlwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdHRyczogeyBcImRhdGEtdGl0bGVcIjogX3ZtLmkxOG4uY2F0ZWdvcmllc1tjYXRlZ29yeS5pZF0gfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRlbWl0KFwiY2xpY2tcIiwgY2F0ZWdvcnkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0uc3Znc1tjYXRlZ29yeS5pZF0pIH0gfSksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1hbmNob3ItYmFyXCIsXG4gICAgICAgICAgICBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IF92bS5jb2xvciB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIH0pLFxuICAgIDBcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX3ZtLmlzVmlzaWJsZSAmJiAoX3ZtLmlzU2VhcmNoIHx8IF92bS5oYXNSZXN1bHRzKVxuICAgID8gX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LWNhdGVnb3J5XCI6IHRydWUsXG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtbm8tcmVzdWx0c1wiOiAhX3ZtLmhhc1Jlc3VsdHNcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtY2F0ZWdvcnktbGFiZWxcIiB9LCBbXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLmkxOG4uY2F0ZWdvcmllc1tfdm0uaWRdKSldKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgX3ZtLl9sKF92bS5lbW9qaU9iamVjdHMsIGZ1bmN0aW9uKHJlZikge1xuICAgICAgICAgICAgdmFyIGVtb2ppT2JqZWN0ID0gcmVmLmVtb2ppT2JqZWN0XG4gICAgICAgICAgICB2YXIgZW1vamlWaWV3ID0gcmVmLmVtb2ppVmlld1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgZW1vamlWaWV3LmNhblJlbmRlclxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1lbW9qaVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdGl0bGVcIjogZW1vamlPYmplY3Quc2hvcnRfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBlbW9qaVZpZXcudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUHJvcHMub25FbnRlcihlbW9qaVZpZXcuZ2V0RW1vamkoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtb2ppUHJvcHMub25MZWF2ZShlbW9qaVZpZXcuZ2V0RW1vamkoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5lbW9qaVByb3BzLm9uQ2xpY2soZW1vamlWaWV3LmdldEVtb2ppKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IGVtb2ppVmlldy5jc3NDbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IGVtb2ppVmlldy5jc3NTdHlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGVtb2ppVmlldy5jb250ZW50KSldXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgIV92bS5oYXNSZXN1bHRzXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJlbW9qaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgZW1vamk6IFwic2xldXRoX29yX3NweVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgIHNraW46IF92bS5lbW9qaVByb3BzLnNraW4sXG4gICAgICAgICAgICAgICAgICAgICAgc2V0OiBfdm0uZW1vamlQcm9wcy5zZXRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LW5vLXJlc3VsdHMtbGFiZWxcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmkxOG4ubm90Zm91bmQpKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgOiBfdm0uX2UoKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlld1wiIH0sXG4gICAgW1xuICAgICAgX3ZtLmVtb2ppXG4gICAgICAgID8gW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCIgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFwiZW1vamlcIiwge1xuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogX3ZtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGVtb2ppOiBfdm0uZW1vamksXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICBza2luOiBfdm0uZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IF92bS5lbW9qaVByb3BzLnNldFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctbmFtZVwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5lbW9qaS5uYW1lKSlcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctc2hvcnRuYW1lc1wiIH0sXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5lbW9qaVNob3J0TmFtZXMsIGZ1bmN0aW9uKHNob3J0TmFtZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGtleTogc2hvcnROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiOlwiICsgX3ZtLl9zKHNob3J0TmFtZSkgKyBcIjpcIildXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LWVtb3RpY29uc1wiIH0sXG4gICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5lbW9qaUVtb3RpY29ucywgZnVuY3Rpb24oZW1vdGljb24pIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGVtb3RpY29uLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVtb2ppLW1hcnQtcHJldmlldy1lbW90aWNvblwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKGVtb3RpY29uKSldXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vamlcIiB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJlbW9qaVwiLCB7XG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBfdm0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZW1vamk6IF92bS5pZGxlRW1vamksXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZTogX3ZtLmVtb2ppUHJvcHMubmF0aXZlLFxuICAgICAgICAgICAgICAgICAgICBza2luOiBfdm0uZW1vamlQcm9wcy5za2luLFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IF92bS5lbW9qaVByb3BzLnNldFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC10aXRsZS1sYWJlbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICBfdm0uc2hvd1NraW5Ub25lc1xuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZW1vamktbWFydC1wcmV2aWV3LXNraW5zXCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJza2luc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc2tpbjogX3ZtLnNraW5Qcm9wcy5za2luIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0ub25Ta2luQ2hhbmdlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbW9qaS1tYXJ0LXNlYXJjaFwiIH0sIFtcbiAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwidmFsdWVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHsgdHlwZTogXCJ0ZXh0XCIsIHBsYWNlaG9sZGVyOiBfdm0uaTE4bi5zZWFyY2ggfSxcbiAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0udmFsdWUgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGlucHV0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBfdm0udmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICBdKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczoge1xuICAgICAgICBcImVtb2ppLW1hcnQtc2tpbi1zd2F0Y2hlc1wiOiB0cnVlLFxuICAgICAgICBcImVtb2ppLW1hcnQtc2tpbi1zd2F0Y2hlcy1vcGVuZWRcIjogX3ZtLm9wZW5lZFxuICAgICAgfVxuICAgIH0sXG4gICAgX3ZtLl9sKDYsIGZ1bmN0aW9uKHNraW5Ub25lKSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwic3BhblwiLFxuICAgICAgICB7XG4gICAgICAgICAga2V5OiBza2luVG9uZSxcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoXCI6IHRydWUsXG4gICAgICAgICAgICBcImVtb2ppLW1hcnQtc2tpbi1zd2F0Y2gtc2VsZWN0ZWRcIjogX3ZtLnNraW4gPT0gc2tpblRvbmVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICAgICAgY2xhc3M6IFwiZW1vamktbWFydC1za2luIGVtb2ppLW1hcnQtc2tpbi10b25lLVwiICsgc2tpblRvbmUsXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkNsaWNrKHNraW5Ub25lKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIH0pLFxuICAgIDBcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsIi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG4iLCIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIpO1xuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5pZihjb250ZW50LmxvY2FscykgbW9kdWxlLmV4cG9ydHMgPSBjb250ZW50LmxvY2Fscztcbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciBhZGQgPSByZXF1aXJlKFwiIS4uL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjcwNDJjNzhhXCIsIGNvbnRlbnQsIGZhbHNlLCB7fSk7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG4gLy8gV2hlbiB0aGUgc3R5bGVzIGNoYW5nZSwgdXBkYXRlIHRoZSA8c3R5bGU+IHRhZ3NcbiBpZighY29udGVudC5sb2NhbHMpIHtcbiAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy9zdHlsZVBvc3RMb2FkZXIuanMhLi4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcyEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FwcC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD00ZmJjNzM1YiZzY29wZWQ9dHJ1ZSZsYW5nPWNzcyZcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4uL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanMhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hcHAudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9NGZiYzczNWImc2NvcGVkPXRydWUmbGFuZz1jc3MmXCIpO1xuICAgICBpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcbiAgICAgdXBkYXRlKG5ld0NvbnRlbnQpO1xuICAgfSk7XG4gfVxuIC8vIFdoZW4gdGhlIG1vZHVsZSBpcyBkaXNwb3NlZCwgcmVtb3ZlIHRoZSA8c3R5bGU+IHRhZ3NcbiBtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4gIE1vZGlmaWVkIGJ5IEV2YW4gWW91IEB5eXg5OTA4MDNcbiovXG5cbmltcG9ydCBsaXN0VG9TdHlsZXMgZnJvbSAnLi9saXN0VG9TdHlsZXMnXG5cbnZhciBoYXNEb2N1bWVudCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcblxuaWYgKHR5cGVvZiBERUJVRyAhPT0gJ3VuZGVmaW5lZCcgJiYgREVCVUcpIHtcbiAgaWYgKCFoYXNEb2N1bWVudCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAndnVlLXN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiAnICtcbiAgICBcIlVzZSB7IHRhcmdldDogJ25vZGUnIH0gaW4geW91ciBXZWJwYWNrIGNvbmZpZyB0byBpbmRpY2F0ZSBhIHNlcnZlci1yZW5kZXJpbmcgZW52aXJvbm1lbnQuXCJcbiAgKSB9XG59XG5cbi8qXG50eXBlIFN0eWxlT2JqZWN0ID0ge1xuICBpZDogbnVtYmVyO1xuICBwYXJ0czogQXJyYXk8U3R5bGVPYmplY3RQYXJ0PlxufVxuXG50eXBlIFN0eWxlT2JqZWN0UGFydCA9IHtcbiAgY3NzOiBzdHJpbmc7XG4gIG1lZGlhOiBzdHJpbmc7XG4gIHNvdXJjZU1hcDogP3N0cmluZ1xufVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0gey8qXG4gIFtpZDogbnVtYmVyXToge1xuICAgIGlkOiBudW1iZXIsXG4gICAgcmVmczogbnVtYmVyLFxuICAgIHBhcnRzOiBBcnJheTwob2JqPzogU3R5bGVPYmplY3RQYXJ0KSA9PiB2b2lkPlxuICB9XG4qL31cblxudmFyIGhlYWQgPSBoYXNEb2N1bWVudCAmJiAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdKVxudmFyIHNpbmdsZXRvbkVsZW1lbnQgPSBudWxsXG52YXIgc2luZ2xldG9uQ291bnRlciA9IDBcbnZhciBpc1Byb2R1Y3Rpb24gPSBmYWxzZVxudmFyIG5vb3AgPSBmdW5jdGlvbiAoKSB7fVxudmFyIG9wdGlvbnMgPSBudWxsXG52YXIgc3NySWRLZXkgPSAnZGF0YS12dWUtc3NyLWlkJ1xuXG4vLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbi8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcbnZhciBpc09sZElFID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL21zaWUgWzYtOV1cXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRTdHlsZXNDbGllbnQgKHBhcmVudElkLCBsaXN0LCBfaXNQcm9kdWN0aW9uLCBfb3B0aW9ucykge1xuICBpc1Byb2R1Y3Rpb24gPSBfaXNQcm9kdWN0aW9uXG5cbiAgb3B0aW9ucyA9IF9vcHRpb25zIHx8IHt9XG5cbiAgdmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhwYXJlbnRJZCwgbGlzdClcbiAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcbiAgICB2YXIgbWF5UmVtb3ZlID0gW11cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGl0ZW0gPSBzdHlsZXNbaV1cbiAgICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgICBkb21TdHlsZS5yZWZzLS1cbiAgICAgIG1heVJlbW92ZS5wdXNoKGRvbVN0eWxlKVxuICAgIH1cbiAgICBpZiAobmV3TGlzdCkge1xuICAgICAgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBuZXdMaXN0KVxuICAgICAgYWRkU3R5bGVzVG9Eb20oc3R5bGVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZXMgPSBbXVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heVJlbW92ZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRvbVN0eWxlID0gbWF5UmVtb3ZlW2ldXG4gICAgICBpZiAoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgZG9tU3R5bGUucGFydHNbal0oKVxuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcyAvKiBBcnJheTxTdHlsZU9iamVjdD4gKi8pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgIHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdXG4gICAgaWYgKGRvbVN0eWxlKSB7XG4gICAgICBkb21TdHlsZS5yZWZzKytcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHNbal0oaXRlbS5wYXJ0c1tqXSlcbiAgICAgIH1cbiAgICAgIGZvciAoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgaWYgKGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA+IGl0ZW0ucGFydHMubGVuZ3RoKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLmxlbmd0aCA9IGl0ZW0ucGFydHMubGVuZ3RoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwYXJ0cyA9IFtdXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdKSlcbiAgICAgIH1cbiAgICAgIHN0eWxlc0luRG9tW2l0ZW0uaWRdID0geyBpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50ICgpIHtcbiAgdmFyIHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcbiAgc3R5bGVFbGVtZW50LnR5cGUgPSAndGV4dC9jc3MnXG4gIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KVxuICByZXR1cm4gc3R5bGVFbGVtZW50XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gIHZhciB1cGRhdGUsIHJlbW92ZVxuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc3R5bGVbJyArIHNzcklkS2V5ICsgJ349XCInICsgb2JqLmlkICsgJ1wiXScpXG5cbiAgaWYgKHN0eWxlRWxlbWVudCkge1xuICAgIGlmIChpc1Byb2R1Y3Rpb24pIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGFuZCBpbiBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAvLyBzaW1wbHkgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBub29wXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGhhcyBTU1Igc3R5bGVzIGJ1dCBpbiBkZXYgbW9kZS5cbiAgICAgIC8vIGZvciBzb21lIHJlYXNvbiBDaHJvbWUgY2FuJ3QgaGFuZGxlIHNvdXJjZSBtYXAgaW4gc2VydmVyLXJlbmRlcmVkXG4gICAgICAvLyBzdHlsZSB0YWdzIC0gc291cmNlIG1hcHMgaW4gPHN0eWxlPiBvbmx5IHdvcmtzIGlmIHRoZSBzdHlsZSB0YWcgaXNcbiAgICAgIC8vIGNyZWF0ZWQgYW5kIGluc2VydGVkIGR5bmFtaWNhbGx5LiBTbyB3ZSByZW1vdmUgdGhlIHNlcnZlciByZW5kZXJlZFxuICAgICAgLy8gc3R5bGVzIGFuZCBpbmplY3QgbmV3IG9uZXMuXG4gICAgICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzT2xkSUUpIHtcbiAgICAvLyB1c2Ugc2luZ2xldG9uIG1vZGUgZm9yIElFOS5cbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrK1xuICAgIHN0eWxlRWxlbWVudCA9IHNpbmdsZXRvbkVsZW1lbnQgfHwgKHNpbmdsZXRvbkVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKSlcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCBmYWxzZSlcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50LCBzdHlsZUluZGV4LCB0cnVlKVxuICB9IGVsc2Uge1xuICAgIC8vIHVzZSBtdWx0aS1zdHlsZS10YWcgbW9kZSBpbiBhbGwgb3RoZXIgY2FzZXNcbiAgICBzdHlsZUVsZW1lbnQgPSBjcmVhdGVTdHlsZUVsZW1lbnQoKVxuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZUVsZW1lbnQpXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZShvYmopXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmogLyogU3R5bGVPYmplY3RQYXJ0ICovKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcbiAgICAgICAgICBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuICAgICAgICAgIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgdGV4dFN0b3JlID0gW11cblxuICByZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgIHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudFxuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpXG4gIH1cbn0pKClcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGVFbGVtZW50LCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLmNzc1xuXG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKVxuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKVxuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGVFbGVtZW50LmNoaWxkTm9kZXNcbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSlcbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChjc3NOb2RlKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZUVsZW1lbnQsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzc1xuICB2YXIgbWVkaWEgPSBvYmoubWVkaWFcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXBcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKVxuICB9XG4gIGlmIChvcHRpb25zLnNzcklkKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShzc3JJZEtleSwgb2JqLmlkKVxuICB9XG5cbiAgaWYgKHNvdXJjZU1hcCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vZGV2dG9vbHMvZG9jcy9qYXZhc2NyaXB0LWRlYnVnZ2luZ1xuICAgIC8vIHRoaXMgbWFrZXMgc291cmNlIG1hcHMgaW5zaWRlIHN0eWxlIHRhZ3Mgd29yayBwcm9wZXJseSBpbiBDaHJvbWVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VVUkw9JyArIHNvdXJjZU1hcC5zb3VyY2VzWzBdICsgJyAqLydcbiAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuICAgIGNzcyArPSAnXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwnICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArICcgKi8nXG4gIH1cblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzXG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpXG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKVxuICB9XG59XG4iLCIvKipcbiAqIFRyYW5zbGF0ZXMgdGhlIGxpc3QgZm9ybWF0IHByb2R1Y2VkIGJ5IGNzcy1sb2FkZXIgaW50byBzb21ldGhpbmdcbiAqIGVhc2llciB0byBtYW5pcHVsYXRlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0VG9TdHlsZXMgKHBhcmVudElkLCBsaXN0KSB7XG4gIHZhciBzdHlsZXMgPSBbXVxuICB2YXIgbmV3U3R5bGVzID0ge31cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldXG4gICAgdmFyIGlkID0gaXRlbVswXVxuICAgIHZhciBjc3MgPSBpdGVtWzFdXG4gICAgdmFyIG1lZGlhID0gaXRlbVsyXVxuICAgIHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdXG4gICAgdmFyIHBhcnQgPSB7XG4gICAgICBpZDogcGFyZW50SWQgKyAnOicgKyBpLFxuICAgICAgY3NzOiBjc3MsXG4gICAgICBtZWRpYTogbWVkaWEsXG4gICAgICBzb3VyY2VNYXA6IHNvdXJjZU1hcFxuICAgIH1cbiAgICBpZiAoIW5ld1N0eWxlc1tpZF0pIHtcbiAgICAgIHN0eWxlcy5wdXNoKG5ld1N0eWxlc1tpZF0gPSB7IGlkOiBpZCwgcGFydHM6IFtwYXJ0XSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdHlsZXNbaWRdLnBhcnRzLnB1c2gocGFydClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0eWxlc1xufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuXG52YXIgY29uZmlnID0ge1xuICBpdGVtc0xpbWl0OiAxMDAwXG59O1xuXG5mdW5jdGlvbiBnZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbigpIHtcblx0dmFyIHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5cblx0dmFyIG1zaWUgPSB1YS5pbmRleE9mKCdNU0lFICcpO1xuXHRpZiAobXNpZSA+IDApIHtcblx0XHQvLyBJRSAxMCBvciBvbGRlciA9PiByZXR1cm4gdmVyc2lvbiBudW1iZXJcblx0XHRyZXR1cm4gcGFyc2VJbnQodWEuc3Vic3RyaW5nKG1zaWUgKyA1LCB1YS5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCk7XG5cdH1cblxuXHR2YXIgdHJpZGVudCA9IHVhLmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cdGlmICh0cmlkZW50ID4gMCkge1xuXHRcdC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuXHRcdHZhciBydiA9IHVhLmluZGV4T2YoJ3J2OicpO1xuXHRcdHJldHVybiBwYXJzZUludCh1YS5zdWJzdHJpbmcocnYgKyAzLCB1YS5pbmRleE9mKCcuJywgcnYpKSwgMTApO1xuXHR9XG5cblx0dmFyIGVkZ2UgPSB1YS5pbmRleE9mKCdFZGdlLycpO1xuXHRpZiAoZWRnZSA+IDApIHtcblx0XHQvLyBFZGdlIChJRSAxMispID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuXHRcdHJldHVybiBwYXJzZUludCh1YS5zdWJzdHJpbmcoZWRnZSArIDUsIHVhLmluZGV4T2YoJy4nLCBlZGdlKSksIDEwKTtcblx0fVxuXG5cdC8vIG90aGVyIGJyb3dzZXJcblx0cmV0dXJuIC0xO1xufVxuXG52YXIgaXNJRSA9IHZvaWQgMDtcblxuZnVuY3Rpb24gaW5pdENvbXBhdCgpIHtcblx0aWYgKCFpbml0Q29tcGF0LmluaXQpIHtcblx0XHRpbml0Q29tcGF0LmluaXQgPSB0cnVlO1xuXHRcdGlzSUUgPSBnZXRJbnRlcm5ldEV4cGxvcmVyVmVyc2lvbigpICE9PSAtMTtcblx0fVxufVxuXG52YXIgUmVzaXplT2JzZXJ2ZXIgPSB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuXHRcdHZhciBfdm0gPSB0aGlzO3ZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7cmV0dXJuIF9jKCdkaXYnLCB7IHN0YXRpY0NsYXNzOiBcInJlc2l6ZS1vYnNlcnZlclwiLCBhdHRyczogeyBcInRhYmluZGV4XCI6IFwiLTFcIiB9IH0pO1xuXHR9LCBzdGF0aWNSZW5kZXJGbnM6IFtdLCBfc2NvcGVJZDogJ2RhdGEtdi1iMzI5ZWU0YycsXG5cdG5hbWU6ICdyZXNpemUtb2JzZXJ2ZXInLFxuXG5cdG1ldGhvZHM6IHtcblx0XHRjb21wYXJlQW5kTm90aWZ5OiBmdW5jdGlvbiBjb21wYXJlQW5kTm90aWZ5KCkge1xuXHRcdFx0aWYgKHRoaXMuX3cgIT09IHRoaXMuJGVsLm9mZnNldFdpZHRoIHx8IHRoaXMuX2ggIT09IHRoaXMuJGVsLm9mZnNldEhlaWdodCkge1xuXHRcdFx0XHR0aGlzLl93ID0gdGhpcy4kZWwub2Zmc2V0V2lkdGg7XG5cdFx0XHRcdHRoaXMuX2ggPSB0aGlzLiRlbC5vZmZzZXRIZWlnaHQ7XG5cdFx0XHRcdHRoaXMuJGVtaXQoJ25vdGlmeScpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0YWRkUmVzaXplSGFuZGxlcnM6IGZ1bmN0aW9uIGFkZFJlc2l6ZUhhbmRsZXJzKCkge1xuXHRcdFx0dGhpcy5fcmVzaXplT2JqZWN0LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlldy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmNvbXBhcmVBbmROb3RpZnkpO1xuXHRcdFx0dGhpcy5jb21wYXJlQW5kTm90aWZ5KCk7XG5cdFx0fSxcblx0XHRyZW1vdmVSZXNpemVIYW5kbGVyczogZnVuY3Rpb24gcmVtb3ZlUmVzaXplSGFuZGxlcnMoKSB7XG5cdFx0XHRpZiAodGhpcy5fcmVzaXplT2JqZWN0ICYmIHRoaXMuX3Jlc2l6ZU9iamVjdC5vbmxvYWQpIHtcblx0XHRcdFx0aWYgKCFpc0lFICYmIHRoaXMuX3Jlc2l6ZU9iamVjdC5jb250ZW50RG9jdW1lbnQpIHtcblx0XHRcdFx0XHR0aGlzLl9yZXNpemVPYmplY3QuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuY29tcGFyZUFuZE5vdGlmeSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGVsZXRlIHRoaXMuX3Jlc2l6ZU9iamVjdC5vbmxvYWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblxuXHRcdGluaXRDb21wYXQoKTtcblx0XHR0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdFx0XHRfdGhpcy5fdyA9IF90aGlzLiRlbC5vZmZzZXRXaWR0aDtcblx0XHRcdF90aGlzLl9oID0gX3RoaXMuJGVsLm9mZnNldEhlaWdodDtcblx0XHR9KTtcblx0XHR2YXIgb2JqZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb2JqZWN0Jyk7XG5cdFx0dGhpcy5fcmVzaXplT2JqZWN0ID0gb2JqZWN0O1xuXHRcdG9iamVjdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcblx0XHRvYmplY3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIC0xKTtcblx0XHRvYmplY3Qub25sb2FkID0gdGhpcy5hZGRSZXNpemVIYW5kbGVycztcblx0XHRvYmplY3QudHlwZSA9ICd0ZXh0L2h0bWwnO1xuXHRcdGlmIChpc0lFKSB7XG5cdFx0XHR0aGlzLiRlbC5hcHBlbmRDaGlsZChvYmplY3QpO1xuXHRcdH1cblx0XHRvYmplY3QuZGF0YSA9ICdhYm91dDpibGFuayc7XG5cdFx0aWYgKCFpc0lFKSB7XG5cdFx0XHR0aGlzLiRlbC5hcHBlbmRDaGlsZChvYmplY3QpO1xuXHRcdH1cblx0fSxcblx0YmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0XHR0aGlzLnJlbW92ZVJlc2l6ZUhhbmRsZXJzKCk7XG5cdH1cbn07XG5cbi8vIEluc3RhbGwgdGhlIGNvbXBvbmVudHNcbmZ1bmN0aW9uIGluc3RhbGwoVnVlJCQxKSB7XG5cdFZ1ZSQkMS5jb21wb25lbnQoJ3Jlc2l6ZS1vYnNlcnZlcicsIFJlc2l6ZU9ic2VydmVyKTtcblx0VnVlJCQxLmNvbXBvbmVudCgnUmVzaXplT2JzZXJ2ZXInLCBSZXNpemVPYnNlcnZlcik7XG59XG5cbi8vIFBsdWdpblxudmFyIHBsdWdpbiQyID0ge1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcblx0dmVyc2lvbjogXCIwLjQuNVwiLFxuXHRpbnN0YWxsOiBpbnN0YWxsXG59O1xuXG4vLyBBdXRvLWluc3RhbGxcbnZhciBHbG9iYWxWdWUkMSA9IG51bGw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0R2xvYmFsVnVlJDEgPSB3aW5kb3cuVnVlO1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuXHRHbG9iYWxWdWUkMSA9IGdsb2JhbC5WdWU7XG59XG5pZiAoR2xvYmFsVnVlJDEpIHtcblx0R2xvYmFsVnVlJDEudXNlKHBsdWdpbiQyKTtcbn1cblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmo7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5cblxuXG5cblxudmFyIGFzeW5jR2VuZXJhdG9yID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBd2FpdFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gQXN5bmNHZW5lcmF0b3IoZ2VuKSB7XG4gICAgdmFyIGZyb250LCBiYWNrO1xuXG4gICAgZnVuY3Rpb24gc2VuZChrZXksIGFyZykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgYXJnOiBhcmcsXG4gICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGJhY2spIHtcbiAgICAgICAgICBiYWNrID0gYmFjay5uZXh0ID0gcmVxdWVzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcm9udCA9IGJhY2sgPSByZXF1ZXN0O1xuICAgICAgICAgIHJlc3VtZShrZXksIGFyZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3VtZShrZXksIGFyZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBd2FpdFZhbHVlKSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlLnZhbHVlKS50aGVuKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJlc3VtZShcIm5leHRcIiwgYXJnKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXN1bWUoXCJ0aHJvd1wiLCBhcmcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldHRsZShyZXN1bHQuZG9uZSA/IFwicmV0dXJuXCIgOiBcIm5vcm1hbFwiLCByZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0dGxlKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXR0bGUodHlwZSwgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwicmV0dXJuXCI6XG4gICAgICAgICAgZnJvbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgZnJvbnQucmVqZWN0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGZyb250LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZnJvbnQgPSBmcm9udC5uZXh0O1xuXG4gICAgICBpZiAoZnJvbnQpIHtcbiAgICAgICAgcmVzdW1lKGZyb250LmtleSwgZnJvbnQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhY2sgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludm9rZSA9IHNlbmQ7XG5cbiAgICBpZiAodHlwZW9mIGdlbi5yZXR1cm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5yZXR1cm4gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvcikge1xuICAgIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICB9XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcIm5leHRcIiwgYXJnKTtcbiAgfTtcblxuICBBc3luY0dlbmVyYXRvci5wcm90b3R5cGUudGhyb3cgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcInRocm93XCIsIGFyZyk7XG4gIH07XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLnJldHVybiA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlKFwicmV0dXJuXCIsIGFyZyk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB3cmFwOiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN5bmNHZW5lcmF0b3IoZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgYXdhaXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBBd2FpdFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH07XG59KCk7XG5cblxuXG5cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgdG9Db25zdW1hYmxlQXJyYXkgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oYXJyKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gcHJvY2Vzc09wdGlvbnModmFsdWUpIHtcblx0dmFyIG9wdGlvbnMgPSB2b2lkIDA7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBTaW1wbGUgb3B0aW9ucyAoY2FsbGJhY2stb25seSlcblx0XHRvcHRpb25zID0ge1xuXHRcdFx0Y2FsbGJhY2s6IHZhbHVlXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHQvLyBPcHRpb25zIG9iamVjdFxuXHRcdG9wdGlvbnMgPSB2YWx1ZTtcblx0fVxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gdGhyb3R0bGUoY2FsbGJhY2ssIGRlbGF5KSB7XG5cdHZhciB0aW1lb3V0ID0gdm9pZCAwO1xuXHR2YXIgbGFzdFN0YXRlID0gdm9pZCAwO1xuXHR2YXIgY3VycmVudEFyZ3MgPSB2b2lkIDA7XG5cdHZhciB0aHJvdHRsZWQgPSBmdW5jdGlvbiB0aHJvdHRsZWQoc3RhdGUpIHtcblx0XHRmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcblx0XHRcdGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuXHRcdH1cblxuXHRcdGN1cnJlbnRBcmdzID0gYXJncztcblx0XHRpZiAodGltZW91dCAmJiBzdGF0ZSA9PT0gbGFzdFN0YXRlKSByZXR1cm47XG5cdFx0bGFzdFN0YXRlID0gc3RhdGU7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQodG9Db25zdW1hYmxlQXJyYXkoY3VycmVudEFyZ3MpKSk7XG5cdFx0XHR0aW1lb3V0ID0gMDtcblx0XHR9LCBkZWxheSk7XG5cdH07XG5cdHRocm90dGxlZC5fY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHR9O1xuXHRyZXR1cm4gdGhyb3R0bGVkO1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWwodmFsMSwgdmFsMikge1xuXHRpZiAodmFsMSA9PT0gdmFsMikgcmV0dXJuIHRydWU7XG5cdGlmICgodHlwZW9mIHZhbDEgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbDEpKSA9PT0gJ29iamVjdCcpIHtcblx0XHRmb3IgKHZhciBrZXkgaW4gdmFsMSkge1xuXHRcdFx0aWYgKCFkZWVwRXF1YWwodmFsMVtrZXldLCB2YWwyW2tleV0pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG52YXIgVmlzaWJpbGl0eVN0YXRlID0gZnVuY3Rpb24gKCkge1xuXHRmdW5jdGlvbiBWaXNpYmlsaXR5U3RhdGUoZWwsIG9wdGlvbnMsIHZub2RlKSB7XG5cdFx0Y2xhc3NDYWxsQ2hlY2sodGhpcywgVmlzaWJpbGl0eVN0YXRlKTtcblxuXHRcdHRoaXMuZWwgPSBlbDtcblx0XHR0aGlzLm9ic2VydmVyID0gbnVsbDtcblx0XHR0aGlzLmZyb3plbiA9IGZhbHNlO1xuXHRcdHRoaXMuY3JlYXRlT2JzZXJ2ZXIob3B0aW9ucywgdm5vZGUpO1xuXHR9XG5cblx0Y3JlYXRlQ2xhc3MoVmlzaWJpbGl0eVN0YXRlLCBbe1xuXHRcdGtleTogJ2NyZWF0ZU9ic2VydmVyJyxcblx0XHR2YWx1ZTogZnVuY3Rpb24gY3JlYXRlT2JzZXJ2ZXIob3B0aW9ucywgdm5vZGUpIHtcblx0XHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cblx0XHRcdGlmICh0aGlzLm9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMuZGVzdHJveU9ic2VydmVyKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmZyb3plbikgcmV0dXJuO1xuXG5cdFx0XHR0aGlzLm9wdGlvbnMgPSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcblxuXHRcdFx0dGhpcy5jYWxsYmFjayA9IHRoaXMub3B0aW9ucy5jYWxsYmFjaztcblx0XHRcdC8vIFRocm90dGxlXG5cdFx0XHRpZiAodGhpcy5jYWxsYmFjayAmJiB0aGlzLm9wdGlvbnMudGhyb3R0bGUpIHtcblx0XHRcdFx0dGhpcy5jYWxsYmFjayA9IHRocm90dGxlKHRoaXMuY2FsbGJhY2ssIHRoaXMub3B0aW9ucy50aHJvdHRsZSk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMub2xkUmVzdWx0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHR0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7XG5cdFx0XHRcdHZhciBlbnRyeSA9IGVudHJpZXNbMF07XG5cdFx0XHRcdGlmIChfdGhpcy5jYWxsYmFjaykge1xuXHRcdFx0XHRcdC8vIFVzZSBpc0ludGVyc2VjdGluZyBpZiBwb3NzaWJsZSBiZWNhdXNlIGJyb3dzZXJzIGNhbiByZXBvcnQgaXNJbnRlcnNlY3RpbmcgYXMgdHJ1ZSwgYnV0IGludGVyc2VjdGlvblJhdGlvIGFzIDAsIHdoZW4gc29tZXRoaW5nIHZlcnkgc2xvd2x5IGVudGVycyB0aGUgdmlld3BvcnQuXG5cdFx0XHRcdFx0dmFyIHJlc3VsdCA9IGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIGVudHJ5LmludGVyc2VjdGlvblJhdGlvID49IF90aGlzLnRocmVzaG9sZDtcblx0XHRcdFx0XHRpZiAocmVzdWx0ID09PSBfdGhpcy5vbGRSZXN1bHQpIHJldHVybjtcblx0XHRcdFx0XHRfdGhpcy5vbGRSZXN1bHQgPSByZXN1bHQ7XG5cdFx0XHRcdFx0X3RoaXMuY2FsbGJhY2socmVzdWx0LCBlbnRyeSk7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCAmJiBfdGhpcy5vcHRpb25zLm9uY2UpIHtcblx0XHRcdFx0XHRcdF90aGlzLmZyb3plbiA9IHRydWU7XG5cdFx0XHRcdFx0XHRfdGhpcy5kZXN0cm95T2JzZXJ2ZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXMub3B0aW9ucy5pbnRlcnNlY3Rpb24pO1xuXG5cdFx0XHQvLyBXYWl0IGZvciB0aGUgZWxlbWVudCB0byBiZSBpbiBkb2N1bWVudFxuXHRcdFx0dm5vZGUuY29udGV4dC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRfdGhpcy5vYnNlcnZlci5vYnNlcnZlKF90aGlzLmVsKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSwge1xuXHRcdGtleTogJ2Rlc3Ryb3lPYnNlcnZlcicsXG5cdFx0dmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3lPYnNlcnZlcigpIHtcblx0XHRcdGlmICh0aGlzLm9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR0aGlzLm9ic2VydmVyID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FuY2VsIHRocm90dGxlZCBjYWxsXG5cdFx0XHRpZiAodGhpcy5jYWxsYmFjayAmJiB0aGlzLmNhbGxiYWNrLl9jbGVhcikge1xuXHRcdFx0XHR0aGlzLmNhbGxiYWNrLl9jbGVhcigpO1xuXHRcdFx0XHR0aGlzLmNhbGxiYWNrID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH0sIHtcblx0XHRrZXk6ICd0aHJlc2hvbGQnLFxuXHRcdGdldDogZnVuY3Rpb24gZ2V0JCQxKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5pbnRlcnNlY3Rpb24gJiYgdGhpcy5vcHRpb25zLmludGVyc2VjdGlvbi50aHJlc2hvbGQgfHwgMDtcblx0XHR9XG5cdH1dKTtcblx0cmV0dXJuIFZpc2liaWxpdHlTdGF0ZTtcbn0oKTtcblxuZnVuY3Rpb24gYmluZChlbCwgX3JlZiwgdm5vZGUpIHtcblx0dmFyIHZhbHVlID0gX3JlZi52YWx1ZTtcblxuXHRpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAndW5kZWZpbmVkJykge1xuXHRcdGNvbnNvbGUud2FybignW3Z1ZS1vYnNlcnZlLXZpc2liaWxpdHldIEludGVyc2VjdGlvbk9ic2VydmVyIEFQSSBpcyBub3QgYXZhaWxhYmxlIGluIHlvdXIgYnJvd3Nlci4gUGxlYXNlIGluc3RhbGwgdGhpcyBwb2x5ZmlsbDogaHR0cHM6Ly9naXRodWIuY29tL3czYy9JbnRlcnNlY3Rpb25PYnNlcnZlci90cmVlL21hc3Rlci9wb2x5ZmlsbCcpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzdGF0ZSA9IG5ldyBWaXNpYmlsaXR5U3RhdGUoZWwsIHZhbHVlLCB2bm9kZSk7XG5cdFx0ZWwuX3Z1ZV92aXNpYmlsaXR5U3RhdGUgPSBzdGF0ZTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGUoZWwsIF9yZWYyLCB2bm9kZSkge1xuXHR2YXIgdmFsdWUgPSBfcmVmMi52YWx1ZSxcblx0ICAgIG9sZFZhbHVlID0gX3JlZjIub2xkVmFsdWU7XG5cblx0aWYgKGRlZXBFcXVhbCh2YWx1ZSwgb2xkVmFsdWUpKSByZXR1cm47XG5cdHZhciBzdGF0ZSA9IGVsLl92dWVfdmlzaWJpbGl0eVN0YXRlO1xuXHRpZiAoc3RhdGUpIHtcblx0XHRzdGF0ZS5jcmVhdGVPYnNlcnZlcih2YWx1ZSwgdm5vZGUpO1xuXHR9IGVsc2Uge1xuXHRcdGJpbmQoZWwsIHsgdmFsdWU6IHZhbHVlIH0sIHZub2RlKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoZWwpIHtcblx0dmFyIHN0YXRlID0gZWwuX3Z1ZV92aXNpYmlsaXR5U3RhdGU7XG5cdGlmIChzdGF0ZSkge1xuXHRcdHN0YXRlLmRlc3Ryb3lPYnNlcnZlcigpO1xuXHRcdGRlbGV0ZSBlbC5fdnVlX3Zpc2liaWxpdHlTdGF0ZTtcblx0fVxufVxuXG52YXIgT2JzZXJ2ZVZpc2liaWxpdHkgPSB7XG5cdGJpbmQ6IGJpbmQsXG5cdHVwZGF0ZTogdXBkYXRlLFxuXHR1bmJpbmQ6IHVuYmluZFxufTtcblxuLy8gSW5zdGFsbCB0aGUgY29tcG9uZW50c1xuZnVuY3Rpb24gaW5zdGFsbCQxKFZ1ZSQkMSkge1xuXHRWdWUkJDEuZGlyZWN0aXZlKCdvYnNlcnZlLXZpc2liaWxpdHknLCBPYnNlcnZlVmlzaWJpbGl0eSk7XG5cdC8qIC0tIEFkZCBtb3JlIGNvbXBvbmVudHMgaGVyZSAtLSAqL1xufVxuXG4vKiAtLSBQbHVnaW4gZGVmaW5pdGlvbiAmIEF1dG8taW5zdGFsbCAtLSAqL1xuLyogWW91IHNob3VsZG4ndCBoYXZlIHRvIG1vZGlmeSB0aGUgY29kZSBiZWxvdyAqL1xuXG4vLyBQbHVnaW5cbnZhciBwbHVnaW4kNCA9IHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG5cdHZlcnNpb246IFwiMC40LjNcIixcblx0aW5zdGFsbDogaW5zdGFsbCQxXG59O1xuXG4vLyBBdXRvLWluc3RhbGxcbnZhciBHbG9iYWxWdWUkMiA9IG51bGw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0R2xvYmFsVnVlJDIgPSB3aW5kb3cuVnVlO1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuXHRHbG9iYWxWdWUkMiA9IGdsb2JhbC5WdWU7XG59XG5pZiAoR2xvYmFsVnVlJDIpIHtcblx0R2xvYmFsVnVlJDIudXNlKHBsdWdpbiQ0KTtcbn1cblxudmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fTtcblxuXG5cblxuXG5mdW5jdGlvbiBjcmVhdGVDb21tb25qc01vZHVsZShmbiwgbW9kdWxlKSB7XG5cdHJldHVybiBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH0sIGZuKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMpLCBtb2R1bGUuZXhwb3J0cztcbn1cblxudmFyIHNjcm9sbHBhcmVudCA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIHVuZGVmaW5lZCA9PT0gXCJmdW5jdGlvblwiICYmIHVuZGVmaW5lZC5hbWQpIHtcbiAgICB1bmRlZmluZWQoW10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKCdvYmplY3QnID09PSBcIm9iamVjdFwiICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5TY3JvbGxwYXJlbnQgPSBmYWN0b3J5KCk7XG4gIH1cbn0oY29tbW9uanNHbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZ2V4ID0gLyhhdXRvfHNjcm9sbCkvO1xuXG4gIHZhciBwYXJlbnRzID0gZnVuY3Rpb24gKG5vZGUsIHBzKSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgeyByZXR1cm4gcHM7IH1cblxuICAgIHJldHVybiBwYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgcHMuY29uY2F0KFtub2RlXSkpO1xuICB9O1xuXG4gIHZhciBzdHlsZSA9IGZ1bmN0aW9uIChub2RlLCBwcm9wKSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgfTtcblxuICB2YXIgb3ZlcmZsb3cgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBzdHlsZShub2RlLCBcIm92ZXJmbG93XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy15XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy14XCIpO1xuICB9O1xuXG4gIHZhciBzY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgcmV0dXJuIHJlZ2V4LnRlc3Qob3ZlcmZsb3cobm9kZSkpO1xuICB9O1xuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdmFyIHBzID0gcGFyZW50cyhub2RlLnBhcmVudE5vZGUsIFtdKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzY3JvbGwocHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBwc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH07XG5cbiAgcmV0dXJuIHNjcm9sbFBhcmVudDtcbn0pKTtcbn0pO1xuXG52YXIgX3R5cGVvZiQxID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqO1xufSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG59O1xuXG5cblxuXG5cbnZhciBhc3luY0dlbmVyYXRvciQxID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBd2FpdFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gQXN5bmNHZW5lcmF0b3IoZ2VuKSB7XG4gICAgdmFyIGZyb250LCBiYWNrO1xuXG4gICAgZnVuY3Rpb24gc2VuZChrZXksIGFyZykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgYXJnOiBhcmcsXG4gICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGJhY2spIHtcbiAgICAgICAgICBiYWNrID0gYmFjay5uZXh0ID0gcmVxdWVzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmcm9udCA9IGJhY2sgPSByZXF1ZXN0O1xuICAgICAgICAgIHJlc3VtZShrZXksIGFyZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc3VtZShrZXksIGFyZykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGdlbltrZXldKGFyZyk7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBd2FpdFZhbHVlKSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHZhbHVlLnZhbHVlKS50aGVuKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJlc3VtZShcIm5leHRcIiwgYXJnKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXN1bWUoXCJ0aHJvd1wiLCBhcmcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldHRsZShyZXN1bHQuZG9uZSA/IFwicmV0dXJuXCIgOiBcIm5vcm1hbFwiLCByZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0dGxlKFwidGhyb3dcIiwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXR0bGUodHlwZSwgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwicmV0dXJuXCI6XG4gICAgICAgICAgZnJvbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInRocm93XCI6XG4gICAgICAgICAgZnJvbnQucmVqZWN0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGZyb250LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZnJvbnQgPSBmcm9udC5uZXh0O1xuXG4gICAgICBpZiAoZnJvbnQpIHtcbiAgICAgICAgcmVzdW1lKGZyb250LmtleSwgZnJvbnQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhY2sgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludm9rZSA9IHNlbmQ7XG5cbiAgICBpZiAodHlwZW9mIGdlbi5yZXR1cm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5yZXR1cm4gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuYXN5bmNJdGVyYXRvcikge1xuICAgIEFzeW5jR2VuZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICB9XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcIm5leHRcIiwgYXJnKTtcbiAgfTtcblxuICBBc3luY0dlbmVyYXRvci5wcm90b3R5cGUudGhyb3cgPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZShcInRocm93XCIsIGFyZyk7XG4gIH07XG5cbiAgQXN5bmNHZW5lcmF0b3IucHJvdG90eXBlLnJldHVybiA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlKFwicmV0dXJuXCIsIGFyZyk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB3cmFwOiBmdW5jdGlvbiAoZm4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXN5bmNHZW5lcmF0b3IoZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgYXdhaXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIG5ldyBBd2FpdFZhbHVlKHZhbHVlKTtcbiAgICB9XG4gIH07XG59KCk7XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbnZhciBwcm9wcyA9IHtcbiAgaXRlbXM6IHtcbiAgICB0eXBlOiBBcnJheSxcbiAgICByZXF1aXJlZDogdHJ1ZVxuICB9LFxuXG4gIGtleUZpZWxkOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdpZCdcbiAgfSxcblxuICBkaXJlY3Rpb246IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJ3ZlcnRpY2FsJyxcbiAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFsndmVydGljYWwnLCAnaG9yaXpvbnRhbCddLmluY2x1ZGVzKHZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNpbXBsZUFycmF5KCkge1xuICByZXR1cm4gdGhpcy5pdGVtcy5sZW5ndGggJiYgX3R5cGVvZiQxKHRoaXMuaXRlbXNbMF0pICE9PSAnb2JqZWN0Jztcbn1cblxudmFyIHN1cHBvcnRzUGFzc2l2ZSA9IGZhbHNlO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdwYXNzaXZlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBudWxsLCBvcHRzKTtcbiAgfSBjYXRjaCAoZSkge31cbn1cblxudmFyIHVpZCA9IDA7XG5cbnZhciBSZWN5Y2xlU2Nyb2xsZXIgPSB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdm0gPSB0aGlzO3ZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7cmV0dXJuIF9jKCdkaXYnLCB7IGRpcmVjdGl2ZXM6IFt7IG5hbWU6IFwib2JzZXJ2ZS12aXNpYmlsaXR5XCIsIHJhd05hbWU6IFwidi1vYnNlcnZlLXZpc2liaWxpdHlcIiwgdmFsdWU6IF92bS5oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBleHByZXNzaW9uOiBcImhhbmRsZVZpc2liaWxpdHlDaGFuZ2VcIiB9XSwgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJcIiwgY2xhc3M6IGRlZmluZVByb3BlcnR5KHsgcmVhZHk6IF92bS5yZWFkeSwgJ3BhZ2UtbW9kZSc6IF92bS5wYWdlTW9kZSB9LCAnZGlyZWN0aW9uLScgKyBfdm0uZGlyZWN0aW9uLCB0cnVlKSwgb246IHsgXCImc2Nyb2xsXCI6IGZ1bmN0aW9uIHNjcm9sbCgkZXZlbnQpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZVNjcm9sbCgkZXZlbnQpO1xuICAgICAgICB9IH0gfSwgW192bS4kc2xvdHMuYmVmb3JlID8gX2MoJ2RpdicsIHsgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJfX3Nsb3RcIiB9LCBbX3ZtLl90KFwiYmVmb3JlXCIpXSwgMikgOiBfdm0uX2UoKSwgX3ZtLl92KFwiIFwiKSwgX2MoJ2RpdicsIHsgcmVmOiBcIndyYXBwZXJcIiwgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0td3JhcHBlclwiLCBzdHlsZTogZGVmaW5lUHJvcGVydHkoe30sIF92bS5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyAnbWluSGVpZ2h0JyA6ICdtaW5XaWR0aCcsIF92bS50b3RhbFNpemUgKyAncHgnKSB9LCBfdm0uX2woX3ZtLnBvb2wsIGZ1bmN0aW9uICh2aWV3KSB7XG4gICAgICByZXR1cm4gX2MoJ2RpdicsIHsga2V5OiB2aWV3Lm5yLmlkLCBzdGF0aWNDbGFzczogXCJ2dWUtcmVjeWNsZS1zY3JvbGxlcl9faXRlbS12aWV3XCIsIGNsYXNzOiB7IGhvdmVyOiBfdm0uaG92ZXJLZXkgPT09IHZpZXcubnIua2V5IH0sIHN0eWxlOiBfdm0ucmVhZHkgPyB7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZScgKyAoX3ZtLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/ICdZJyA6ICdYJykgKyAnKCcgKyB2aWV3LnBvc2l0aW9uICsgJ3B4KScgfSA6IG51bGwsIG9uOiB7IFwibW91c2VlbnRlclwiOiBmdW5jdGlvbiBtb3VzZWVudGVyKCRldmVudCkge1xuICAgICAgICAgICAgX3ZtLmhvdmVyS2V5ID0gdmlldy5uci5rZXk7XG4gICAgICAgICAgfSwgXCJtb3VzZWxlYXZlXCI6IGZ1bmN0aW9uIG1vdXNlbGVhdmUoJGV2ZW50KSB7XG4gICAgICAgICAgICBfdm0uaG92ZXJLZXkgPSBudWxsO1xuICAgICAgICAgIH0gfSB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiLCBudWxsLCB7IGl0ZW06IHZpZXcuaXRlbSwgaW5kZXg6IHZpZXcubnIuaW5kZXgsIGFjdGl2ZTogdmlldy5uci51c2VkIH0pXSwgMik7XG4gICAgfSksIDApLCBfdm0uX3YoXCIgXCIpLCBfdm0uJHNsb3RzLmFmdGVyID8gX2MoJ2RpdicsIHsgc3RhdGljQ2xhc3M6IFwidnVlLXJlY3ljbGUtc2Nyb2xsZXJfX3Nsb3RcIiB9LCBbX3ZtLl90KFwiYWZ0ZXJcIildLCAyKSA6IF92bS5fZSgpLCBfdm0uX3YoXCIgXCIpLCBfYygnUmVzaXplT2JzZXJ2ZXInLCB7IG9uOiB7IFwibm90aWZ5XCI6IF92bS5oYW5kbGVSZXNpemUgfSB9KV0sIDEpO1xuICB9LCBzdGF0aWNSZW5kZXJGbnM6IFtdLFxuICBuYW1lOiAnUmVjeWNsZVNjcm9sbGVyJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgUmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyXG4gIH0sXG5cbiAgZGlyZWN0aXZlczoge1xuICAgIE9ic2VydmVWaXNpYmlsaXR5OiBPYnNlcnZlVmlzaWJpbGl0eVxuICB9LFxuXG4gIHByb3BzOiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcblxuICAgIGl0ZW1TaXplOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcblxuICAgIG1pbkl0ZW1TaXplOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG5cbiAgICBzaXplRmllbGQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdzaXplJ1xuICAgIH0sXG5cbiAgICB0eXBlRmllbGQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd0eXBlJ1xuICAgIH0sXG5cbiAgICBidWZmZXI6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDIwMFxuICAgIH0sXG5cbiAgICBwYWdlTW9kZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIHByZXJlbmRlcjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBlbWl0VXBkYXRlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0pLFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvb2w6IFtdLFxuICAgICAgdG90YWxTaXplOiAwLFxuICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgaG92ZXJLZXk6IG51bGxcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzaXplczogZnVuY3Rpb24gc2l6ZXMoKSB7XG4gICAgICBpZiAodGhpcy5pdGVtU2l6ZSA9PT0gbnVsbCkge1xuICAgICAgICB2YXIgc2l6ZXMgPSB7XG4gICAgICAgICAgJy0xJzogeyBhY2N1bXVsYXRvcjogMCB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICAgIHZhciBmaWVsZCA9IHRoaXMuc2l6ZUZpZWxkO1xuICAgICAgICB2YXIgbWluSXRlbVNpemUgPSB0aGlzLm1pbkl0ZW1TaXplO1xuICAgICAgICB2YXIgYWNjdW11bGF0b3IgPSAwO1xuICAgICAgICB2YXIgY3VycmVudCA9IHZvaWQgMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBjdXJyZW50ID0gaXRlbXNbaV1bZmllbGRdIHx8IG1pbkl0ZW1TaXplO1xuICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGN1cnJlbnQ7XG4gICAgICAgICAgc2l6ZXNbaV0gPSB7IGFjY3VtdWxhdG9yOiBhY2N1bXVsYXRvciwgc2l6ZTogY3VycmVudCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaXplcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuXG5cbiAgICBzaW1wbGVBcnJheTogc2ltcGxlQXJyYXlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGl0ZW1zOiBmdW5jdGlvbiBpdGVtcygpIHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKHRydWUpO1xuICAgIH0sXG4gICAgcGFnZU1vZGU6IGZ1bmN0aW9uIHBhZ2VNb2RlKCkge1xuICAgICAgdGhpcy5hcHBseVBhZ2VNb2RlKCk7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgfSxcblxuXG4gICAgc2l6ZXM6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKGZhbHNlKTtcbiAgICAgIH0sXG5cbiAgICAgIGRlZXA6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLiRfc3RhcnRJbmRleCA9IDA7XG4gICAgdGhpcy4kX2VuZEluZGV4ID0gMDtcbiAgICB0aGlzLiRfdmlld3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy4kX3VudXNlZFZpZXdzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuJF9zY3JvbGxEaXJ0eSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuJGlzU2VydmVyKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLmFwcGx5UGFnZU1vZGUoKTtcbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy51cGRhdGVWaXNpYmxlSXRlbXModHJ1ZSk7XG4gICAgICBfdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgfSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRWaWV3OiBmdW5jdGlvbiBhZGRWaWV3KHBvb2wsIGluZGV4LCBpdGVtLCBrZXksIHR5cGUpIHtcbiAgICAgIHZhciB2aWV3ID0ge1xuICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICBwb3NpdGlvbjogMFxuICAgICAgfTtcbiAgICAgIHZhciBub25SZWFjdGl2ZSA9IHtcbiAgICAgICAgaWQ6IHVpZCsrLFxuICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgIHVzZWQ6IHRydWUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZpZXcsICducicsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5vblJlYWN0aXZlXG4gICAgICB9KTtcbiAgICAgIHBvb2wucHVzaCh2aWV3KTtcbiAgICAgIHJldHVybiB2aWV3O1xuICAgIH0sXG4gICAgdW51c2VWaWV3OiBmdW5jdGlvbiB1bnVzZVZpZXcodmlldykge1xuICAgICAgdmFyIGZha2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICB2YXIgdW51c2VkVmlld3MgPSB0aGlzLiRfdW51c2VkVmlld3M7XG4gICAgICB2YXIgdHlwZSA9IHZpZXcubnIudHlwZTtcbiAgICAgIHZhciB1bnVzZWRQb29sID0gdW51c2VkVmlld3MuZ2V0KHR5cGUpO1xuICAgICAgaWYgKCF1bnVzZWRQb29sKSB7XG4gICAgICAgIHVudXNlZFBvb2wgPSBbXTtcbiAgICAgICAgdW51c2VkVmlld3Muc2V0KHR5cGUsIHVudXNlZFBvb2wpO1xuICAgICAgfVxuICAgICAgdW51c2VkUG9vbC5wdXNoKHZpZXcpO1xuICAgICAgaWYgKCFmYWtlKSB7XG4gICAgICAgIHZpZXcubnIudXNlZCA9IGZhbHNlO1xuICAgICAgICB2aWV3LnBvc2l0aW9uID0gLTk5OTk7XG4gICAgICAgIHRoaXMuJF92aWV3cy5kZWxldGUodmlldy5uci5rZXkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlUmVzaXplOiBmdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdyZXNpemUnKTtcbiAgICAgIGlmICh0aGlzLnJlYWR5KSB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgfSxcbiAgICBoYW5kbGVTY3JvbGw6IGZ1bmN0aW9uIGhhbmRsZVNjcm9sbChldmVudCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy4kX3Njcm9sbERpcnR5KSB7XG4gICAgICAgIHRoaXMuJF9zY3JvbGxEaXJ0eSA9IHRydWU7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLiRfc2Nyb2xsRGlydHkgPSBmYWxzZTtcblxuICAgICAgICAgIHZhciBfdXBkYXRlVmlzaWJsZUl0ZW1zID0gX3RoaXMyLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSksXG4gICAgICAgICAgICAgIGNvbnRpbnVvdXMgPSBfdXBkYXRlVmlzaWJsZUl0ZW1zLmNvbnRpbnVvdXM7XG5cbiAgICAgICAgICAvLyBJdCBzZWVtcyBzb21ldGltZXMgY2hyb21lIGRvZXNuJ3QgZmlyZSBzY3JvbGwgZXZlbnQgOi9cbiAgICAgICAgICAvLyBXaGVuIG5vbiBjb250aW5vdXMgc2Nyb2xsaW5nIGlzIGVuZGluZywgd2UgZm9yY2UgYSByZWZyZXNoXG5cblxuICAgICAgICAgIGlmICghY29udGludW91cykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KF90aGlzMi4kX3JlZnJlc2hUaW1vdXQpO1xuICAgICAgICAgICAgX3RoaXMyLiRfcmVmcmVzaFRpbW91dCA9IHNldFRpbWVvdXQoX3RoaXMyLmhhbmRsZVNjcm9sbCwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlVmlzaWJpbGl0eUNoYW5nZShpc1Zpc2libGUsIGVudHJ5KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMucmVhZHkpIHtcbiAgICAgICAgaWYgKGlzVmlzaWJsZSB8fCBlbnRyeS5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggIT09IDAgfHwgZW50cnkuYm91bmRpbmdDbGllbnRSZWN0LmhlaWdodCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUnKTtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXMzLnVwZGF0ZVZpc2libGVJdGVtcyhmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVZpc2libGVJdGVtczogZnVuY3Rpb24gdXBkYXRlVmlzaWJsZUl0ZW1zKGNoZWNrSXRlbSkge1xuICAgICAgdmFyIGl0ZW1TaXplID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgIHZhciB0eXBlRmllbGQgPSB0aGlzLnR5cGVGaWVsZDtcbiAgICAgIHZhciBrZXlGaWVsZCA9IHRoaXMuc2ltcGxlQXJyYXkgPyBudWxsIDogdGhpcy5rZXlGaWVsZDtcbiAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgICB2YXIgY291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgc2l6ZXMgPSB0aGlzLnNpemVzO1xuICAgICAgdmFyIHZpZXdzID0gdGhpcy4kX3ZpZXdzO1xuICAgICAgdmFyIHVudXNlZFZpZXdzID0gdGhpcy4kX3VudXNlZFZpZXdzO1xuICAgICAgdmFyIHBvb2wgPSB0aGlzLnBvb2w7XG4gICAgICB2YXIgc3RhcnRJbmRleCA9IHZvaWQgMCxcbiAgICAgICAgICBlbmRJbmRleCA9IHZvaWQgMDtcbiAgICAgIHZhciB0b3RhbFNpemUgPSB2b2lkIDA7XG5cbiAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgc3RhcnRJbmRleCA9IGVuZEluZGV4ID0gdG90YWxTaXplID0gMDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4kaXNTZXJ2ZXIpIHtcbiAgICAgICAgc3RhcnRJbmRleCA9IDA7XG4gICAgICAgIGVuZEluZGV4ID0gdGhpcy5wcmVyZW5kZXI7XG4gICAgICAgIHRvdGFsU2l6ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc2Nyb2xsID0gdGhpcy5nZXRTY3JvbGwoKTtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICBzY3JvbGwuc3RhcnQgLT0gYnVmZmVyO1xuICAgICAgICBzY3JvbGwuZW5kICs9IGJ1ZmZlcjtcblxuICAgICAgICAvLyBWYXJpYWJsZSBzaXplIG1vZGVcbiAgICAgICAgaWYgKGl0ZW1TaXplID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGggPSB2b2lkIDA7XG4gICAgICAgICAgdmFyIGEgPSAwO1xuICAgICAgICAgIHZhciBiID0gY291bnQgLSAxO1xuICAgICAgICAgIHZhciBpID0gfn4oY291bnQgLyAyKTtcbiAgICAgICAgICB2YXIgb2xkSSA9IHZvaWQgMDtcblxuICAgICAgICAgIC8vIFNlYXJjaGluZyBmb3Igc3RhcnRJbmRleFxuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIG9sZEkgPSBpO1xuICAgICAgICAgICAgaCA9IHNpemVzW2ldLmFjY3VtdWxhdG9yO1xuICAgICAgICAgICAgaWYgKGggPCBzY3JvbGwuc3RhcnQpIHtcbiAgICAgICAgICAgICAgYSA9IGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPCBjb3VudCAtIDEgJiYgc2l6ZXNbaSArIDFdLmFjY3VtdWxhdG9yID4gc2Nyb2xsLnN0YXJ0KSB7XG4gICAgICAgICAgICAgIGIgPSBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSA9IH5+KChhICsgYikgLyAyKTtcbiAgICAgICAgICB9IHdoaWxlIChpICE9PSBvbGRJKTtcbiAgICAgICAgICBpIDwgMCAmJiAoaSA9IDApO1xuICAgICAgICAgIHN0YXJ0SW5kZXggPSBpO1xuXG4gICAgICAgICAgLy8gRm9yIGNvbnRhaW5lciBzdHlsZVxuICAgICAgICAgIHRvdGFsU2l6ZSA9IHNpemVzW2NvdW50IC0gMV0uYWNjdW11bGF0b3I7XG5cbiAgICAgICAgICAvLyBTZWFyY2hpbmcgZm9yIGVuZEluZGV4XG4gICAgICAgICAgZm9yIChlbmRJbmRleCA9IGk7IGVuZEluZGV4IDwgY291bnQgJiYgc2l6ZXNbZW5kSW5kZXhdLmFjY3VtdWxhdG9yIDwgc2Nyb2xsLmVuZDsgZW5kSW5kZXgrKykge31cbiAgICAgICAgICBpZiAoZW5kSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBlbmRJbmRleCA9IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVuZEluZGV4Kys7XG4gICAgICAgICAgICAvLyBCb3VuZHNcbiAgICAgICAgICAgIGVuZEluZGV4ID4gY291bnQgJiYgKGVuZEluZGV4ID0gY291bnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGaXhlZCBzaXplIG1vZGVcbiAgICAgICAgICBzdGFydEluZGV4ID0gfn4oc2Nyb2xsLnN0YXJ0IC8gaXRlbVNpemUpO1xuICAgICAgICAgIGVuZEluZGV4ID0gTWF0aC5jZWlsKHNjcm9sbC5lbmQgLyBpdGVtU2l6ZSk7XG5cbiAgICAgICAgICAvLyBCb3VuZHNcbiAgICAgICAgICBzdGFydEluZGV4IDwgMCAmJiAoc3RhcnRJbmRleCA9IDApO1xuICAgICAgICAgIGVuZEluZGV4ID4gY291bnQgJiYgKGVuZEluZGV4ID0gY291bnQpO1xuXG4gICAgICAgICAgdG90YWxTaXplID0gY291bnQgKiBpdGVtU2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZW5kSW5kZXggLSBzdGFydEluZGV4ID4gY29uZmlnLml0ZW1zTGltaXQpIHtcbiAgICAgICAgdGhpcy5pdGVtc0xpbWl0RXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b3RhbFNpemUgPSB0b3RhbFNpemU7XG5cbiAgICAgIHZhciB2aWV3ID0gdm9pZCAwO1xuXG4gICAgICB2YXIgY29udGludW91cyA9IHN0YXJ0SW5kZXggPD0gdGhpcy4kX2VuZEluZGV4ICYmIGVuZEluZGV4ID49IHRoaXMuJF9zdGFydEluZGV4O1xuICAgICAgdmFyIHVudXNlZEluZGV4ID0gdm9pZCAwO1xuXG4gICAgICBpZiAodGhpcy4kX2NvbnRpbnVvdXMgIT09IGNvbnRpbnVvdXMpIHtcbiAgICAgICAgaWYgKGNvbnRpbnVvdXMpIHtcbiAgICAgICAgICB2aWV3cy5jbGVhcigpO1xuICAgICAgICAgIHVudXNlZFZpZXdzLmNsZWFyKCk7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBsID0gcG9vbC5sZW5ndGg7IF9pIDwgbDsgX2krKykge1xuICAgICAgICAgICAgdmlldyA9IHBvb2xbX2ldO1xuICAgICAgICAgICAgdGhpcy51bnVzZVZpZXcodmlldyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuJF9jb250aW51b3VzID0gY29udGludW91cztcbiAgICAgIH0gZWxzZSBpZiAoY29udGludW91cykge1xuICAgICAgICBmb3IgKHZhciBfaTIgPSAwLCBfbCA9IHBvb2wubGVuZ3RoOyBfaTIgPCBfbDsgX2kyKyspIHtcbiAgICAgICAgICB2aWV3ID0gcG9vbFtfaTJdO1xuICAgICAgICAgIGlmICh2aWV3Lm5yLnVzZWQpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB2aWV3IGl0ZW0gaW5kZXhcbiAgICAgICAgICAgIGlmIChjaGVja0l0ZW0pIHtcbiAgICAgICAgICAgICAgdmlldy5uci5pbmRleCA9IGl0ZW1zLmZpbmRJbmRleChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBrZXlGaWVsZCA/IGl0ZW1ba2V5RmllbGRdID09PSB2aWV3Lml0ZW1ba2V5RmllbGRdIDogaXRlbSA9PT0gdmlldy5pdGVtO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaW5kZXggaXMgc3RpbGwgaW4gdmlzaWJsZSByYW5nZVxuICAgICAgICAgICAgaWYgKHZpZXcubnIuaW5kZXggPT09IC0xIHx8IHZpZXcubnIuaW5kZXggPCBzdGFydEluZGV4IHx8IHZpZXcubnIuaW5kZXggPj0gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgdGhpcy51bnVzZVZpZXcodmlldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGludW91cykge1xuICAgICAgICB1bnVzZWRJbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZW0gPSB2b2lkIDAsXG4gICAgICAgICAgdHlwZSA9IHZvaWQgMCxcbiAgICAgICAgICB1bnVzZWRQb29sID0gdm9pZCAwO1xuICAgICAgdmFyIHYgPSB2b2lkIDA7XG4gICAgICBmb3IgKHZhciBfaTMgPSBzdGFydEluZGV4OyBfaTMgPCBlbmRJbmRleDsgX2kzKyspIHtcbiAgICAgICAgaXRlbSA9IGl0ZW1zW19pM107XG4gICAgICAgIHZhciBrZXkgPSBrZXlGaWVsZCA/IGl0ZW1ba2V5RmllbGRdIDogaXRlbTtcbiAgICAgICAgdmlldyA9IHZpZXdzLmdldChrZXkpO1xuXG4gICAgICAgIGlmICghaXRlbVNpemUgJiYgIXNpemVzW19pM10uc2l6ZSkge1xuICAgICAgICAgIGlmICh2aWV3KSB0aGlzLnVudXNlVmlldyh2aWV3KTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIHZpZXcgYXNzaWduZWQgdG8gaXRlbVxuICAgICAgICBpZiAoIXZpZXcpIHtcbiAgICAgICAgICB0eXBlID0gaXRlbVt0eXBlRmllbGRdO1xuXG4gICAgICAgICAgaWYgKGNvbnRpbnVvdXMpIHtcbiAgICAgICAgICAgIHVudXNlZFBvb2wgPSB1bnVzZWRWaWV3cy5nZXQodHlwZSk7XG4gICAgICAgICAgICAvLyBSZXVzZSBleGlzdGluZyB2aWV3XG4gICAgICAgICAgICBpZiAodW51c2VkUG9vbCAmJiB1bnVzZWRQb29sLmxlbmd0aCkge1xuICAgICAgICAgICAgICB2aWV3ID0gdW51c2VkUG9vbC5wb3AoKTtcbiAgICAgICAgICAgICAgdmlldy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgICAgdmlldy5uci51c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmlldy5uci5pbmRleCA9IF9pMztcbiAgICAgICAgICAgICAgdmlldy5uci5rZXkgPSBrZXk7XG4gICAgICAgICAgICAgIHZpZXcubnIudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2aWV3ID0gdGhpcy5hZGRWaWV3KHBvb2wsIF9pMywgaXRlbSwga2V5LCB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW51c2VkUG9vbCA9IHVudXNlZFZpZXdzLmdldCh0eXBlKTtcbiAgICAgICAgICAgIHYgPSB1bnVzZWRJbmRleC5nZXQodHlwZSkgfHwgMDtcbiAgICAgICAgICAgIC8vIFVzZSBleGlzdGluZyB2aWV3XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGlmIHRoZXkgYXJlIGFscmVhZHkgdXNlZFxuICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBhcmUgbm90IGluIGNvbnRpbm91cyBzY3JvbGxpbmdcbiAgICAgICAgICAgIGlmICh1bnVzZWRQb29sICYmIHYgPCB1bnVzZWRQb29sLmxlbmd0aCkge1xuICAgICAgICAgICAgICB2aWV3ID0gdW51c2VkUG9vbFt2XTtcbiAgICAgICAgICAgICAgdmlldy5pdGVtID0gaXRlbTtcbiAgICAgICAgICAgICAgdmlldy5uci51c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmlldy5uci5pbmRleCA9IF9pMztcbiAgICAgICAgICAgICAgdmlldy5uci5rZXkgPSBrZXk7XG4gICAgICAgICAgICAgIHZpZXcubnIudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgIHVudXNlZEluZGV4LnNldCh0eXBlLCB2ICsgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2aWV3ID0gdGhpcy5hZGRWaWV3KHBvb2wsIF9pMywgaXRlbSwga2V5LCB0eXBlKTtcbiAgICAgICAgICAgICAgdGhpcy51bnVzZVZpZXcodmlldywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZpZXdzLnNldChrZXksIHZpZXcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpZXcubnIudXNlZCA9IHRydWU7XG4gICAgICAgICAgdmlldy5pdGVtID0gaXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBwb3NpdGlvblxuICAgICAgICBpZiAoaXRlbVNpemUgPT09IG51bGwpIHtcbiAgICAgICAgICB2aWV3LnBvc2l0aW9uID0gc2l6ZXNbX2kzIC0gMV0uYWNjdW11bGF0b3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlldy5wb3NpdGlvbiA9IF9pMyAqIGl0ZW1TaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJF9zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgIHRoaXMuJF9lbmRJbmRleCA9IGVuZEluZGV4O1xuXG4gICAgICBpZiAodGhpcy5lbWl0VXBkYXRlKSB0aGlzLiRlbWl0KCd1cGRhdGUnLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRpbnVvdXM6IGNvbnRpbnVvdXNcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRMaXN0ZW5lclRhcmdldDogZnVuY3Rpb24gZ2V0TGlzdGVuZXJUYXJnZXQoKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gc2Nyb2xscGFyZW50KHRoaXMuJGVsKTtcbiAgICAgIC8vIEZpeCBnbG9iYWwgc2Nyb2xsIHRhcmdldCBmb3IgQ2hyb21lIGFuZCBTYWZhcmlcbiAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgKHRhcmdldCA9PT0gd2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCB0YXJnZXQgPT09IHdpbmRvdy5kb2N1bWVudC5ib2R5KSkge1xuICAgICAgICB0YXJnZXQgPSB3aW5kb3c7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0sXG4gICAgZ2V0U2Nyb2xsOiBmdW5jdGlvbiBnZXRTY3JvbGwoKSB7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbCxcbiAgICAgICAgICBkaXJlY3Rpb24gPSB0aGlzLmRpcmVjdGlvbjtcblxuICAgICAgdmFyIGlzVmVydGljYWwgPSBkaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCc7XG4gICAgICB2YXIgc2Nyb2xsU3RhdGUgPSB2b2lkIDA7XG5cbiAgICAgIGlmICh0aGlzLnBhZ2VNb2RlKSB7XG4gICAgICAgIHZhciBib3VuZHMgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdmFyIGJvdW5kc1NpemUgPSBpc1ZlcnRpY2FsID8gYm91bmRzLmhlaWdodCA6IGJvdW5kcy53aWR0aDtcbiAgICAgICAgdmFyIHN0YXJ0ID0gLShpc1ZlcnRpY2FsID8gYm91bmRzLnRvcCA6IGJvdW5kcy5sZWZ0KTtcbiAgICAgICAgdmFyIHNpemUgPSBpc1ZlcnRpY2FsID8gd2luZG93LmlubmVySGVpZ2h0IDogd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICBzaXplICs9IHN0YXJ0O1xuICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgKyBzaXplID4gYm91bmRzU2l6ZSkge1xuICAgICAgICAgIHNpemUgPSBib3VuZHNTaXplIC0gc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgc2Nyb2xsU3RhdGUgPSB7XG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgIGVuZDogc3RhcnQgKyBzaXplXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGlzVmVydGljYWwpIHtcbiAgICAgICAgc2Nyb2xsU3RhdGUgPSB7XG4gICAgICAgICAgc3RhcnQ6IGVsLnNjcm9sbFRvcCxcbiAgICAgICAgICBlbmQ6IGVsLnNjcm9sbFRvcCArIGVsLmNsaWVudEhlaWdodFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Nyb2xsU3RhdGUgPSB7XG4gICAgICAgICAgc3RhcnQ6IGVsLnNjcm9sbExlZnQsXG4gICAgICAgICAgZW5kOiBlbC5zY3JvbGxMZWZ0ICsgZWwuY2xpZW50V2lkdGhcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjcm9sbFN0YXRlO1xuICAgIH0sXG4gICAgYXBwbHlQYWdlTW9kZTogZnVuY3Rpb24gYXBwbHlQYWdlTW9kZSgpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VNb2RlKSB7XG4gICAgICAgIHRoaXMuYWRkTGlzdGVuZXJzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkTGlzdGVuZXJzOiBmdW5jdGlvbiBhZGRMaXN0ZW5lcnMoKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyVGFyZ2V0ID0gdGhpcy5nZXRMaXN0ZW5lclRhcmdldCgpO1xuICAgICAgdGhpcy5saXN0ZW5lclRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCwgc3VwcG9ydHNQYXNzaXZlID8ge1xuICAgICAgICBwYXNzaXZlOiB0cnVlXG4gICAgICB9IDogZmFsc2UpO1xuICAgICAgdGhpcy5saXN0ZW5lclRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmhhbmRsZVJlc2l6ZSk7XG4gICAgfSxcbiAgICByZW1vdmVMaXN0ZW5lcnM6IGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICAgIGlmICghdGhpcy5saXN0ZW5lclRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGlzdGVuZXJUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgdGhpcy5saXN0ZW5lclRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmhhbmRsZVJlc2l6ZSk7XG5cbiAgICAgIHRoaXMubGlzdGVuZXJUYXJnZXQgPSBudWxsO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9JdGVtOiBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oaW5kZXgpIHtcbiAgICAgIHZhciBzY3JvbGwgPSB2b2lkIDA7XG4gICAgICBpZiAodGhpcy5pdGVtU2l6ZSA9PT0gbnVsbCkge1xuICAgICAgICBzY3JvbGwgPSBpbmRleCA+IDAgPyB0aGlzLnNpemVzW2luZGV4IC0gMV0uYWNjdW11bGF0b3IgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2Nyb2xsID0gaW5kZXggKiB0aGlzLml0ZW1TaXplO1xuICAgICAgfVxuICAgICAgdGhpcy5zY3JvbGxUb1Bvc2l0aW9uKHNjcm9sbCk7XG4gICAgfSxcbiAgICBzY3JvbGxUb1Bvc2l0aW9uOiBmdW5jdGlvbiBzY3JvbGxUb1Bvc2l0aW9uKHBvc2l0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgdGhpcy4kZWwuc2Nyb2xsVG9wID0gcG9zaXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbC5zY3JvbGxMZWZ0ID0gcG9zaXRpb247XG4gICAgICB9XG4gICAgfSxcbiAgICBpdGVtc0xpbWl0RXJyb3I6IGZ1bmN0aW9uIGl0ZW1zTGltaXRFcnJvcigpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0l0IHNlZW1zIHRoZSBzY3JvbGxlciBlbGVtZW50IGlzblxcJ3Qgc2Nyb2xsaW5nLCBzbyBpdCB0cmllcyB0byByZW5kZXIgYWxsIHRoZSBpdGVtcyBhdCBvbmNlLicsICdTY3JvbGxlcjonLCBfdGhpczQuJGVsKTtcbiAgICAgICAgY29uc29sZS5sb2coJ01ha2Ugc3VyZSB0aGUgc2Nyb2xsZXIgaGFzIGEgZml4ZWQgaGVpZ2h0IChvciB3aWR0aCkgYW5kIFxcJ292ZXJmbG93LXlcXCcgKG9yIFxcJ292ZXJmbG93LXhcXCcpIHNldCB0byBcXCdhdXRvXFwnIHNvIGl0IGNhbiBzY3JvbGwgY29ycmVjdGx5IGFuZCBvbmx5IHJlbmRlciB0aGUgaXRlbXMgdmlzaWJsZSBpbiB0aGUgc2Nyb2xsIHZpZXdwb3J0LicpO1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbmRlcmVkIGl0ZW1zIGxpbWl0IHJlYWNoZWQnKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBEeW5hbWljU2Nyb2xsZXIgPSB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdm0gPSB0aGlzO3ZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2g7cmV0dXJuIF9jKCdSZWN5Y2xlU2Nyb2xsZXInLCBfdm0uX2coX3ZtLl9iKHsgcmVmOiBcInNjcm9sbGVyXCIsIGF0dHJzOiB7IFwiaXRlbXNcIjogX3ZtLml0ZW1zV2l0aFNpemUsIFwibWluLWl0ZW0tc2l6ZVwiOiBfdm0ubWluSXRlbVNpemUsIFwiZGlyZWN0aW9uXCI6IF92bS5kaXJlY3Rpb24sIFwia2V5LWZpZWxkXCI6IFwiaWRcIiB9LCBvbjogeyBcInJlc2l6ZVwiOiBfdm0ub25TY3JvbGxlclJlc2l6ZSwgXCJ2aXNpYmxlXCI6IF92bS5vblNjcm9sbGVyVmlzaWJsZSB9LCBzY29wZWRTbG90czogX3ZtLl91KFt7IGtleTogXCJkZWZhdWx0XCIsIGZuOiBmdW5jdGlvbiBmbihfcmVmKSB7XG4gICAgICAgICAgdmFyIGl0ZW1XaXRoU2l6ZSA9IF9yZWYuaXRlbSxcbiAgICAgICAgICAgICAgaW5kZXggPSBfcmVmLmluZGV4LFxuICAgICAgICAgICAgICBhY3RpdmUgPSBfcmVmLmFjdGl2ZTtcbiAgICAgICAgICByZXR1cm4gW192bS5fdChcImRlZmF1bHRcIiwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgaXRlbTogaXRlbVdpdGhTaXplLml0ZW0sXG4gICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICBhY3RpdmU6IGFjdGl2ZSxcbiAgICAgICAgICAgIGl0ZW1XaXRoU2l6ZTogaXRlbVdpdGhTaXplXG4gICAgICAgICAgfSldO1xuICAgICAgICB9IH1dKSB9LCAnUmVjeWNsZVNjcm9sbGVyJywgX3ZtLiRhdHRycywgZmFsc2UpLCBfdm0ubGlzdGVuZXJzKSwgW19jKCd0ZW1wbGF0ZScsIHsgc2xvdDogXCJiZWZvcmVcIiB9LCBbX3ZtLl90KFwiYmVmb3JlXCIpXSwgMiksIF92bS5fdihcIiBcIiksIF9jKCd0ZW1wbGF0ZScsIHsgc2xvdDogXCJhZnRlclwiIH0sIFtfdm0uX3QoXCJhZnRlclwiKV0sIDIpXSwgMik7XG4gIH0sIHN0YXRpY1JlbmRlckZuczogW10sXG4gIG5hbWU6ICdEeW5hbWljU2Nyb2xsZXInLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBSZWN5Y2xlU2Nyb2xsZXI6IFJlY3ljbGVTY3JvbGxlclxuICB9LFxuXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdnNjcm9sbERhdGE6IHRoaXMudnNjcm9sbERhdGEsXG4gICAgICB2c2Nyb2xsUGFyZW50OiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcblxuICAgIG1pbkl0ZW1TaXplOiB7XG4gICAgICB0eXBlOiBbTnVtYmVyLCBTdHJpbmddLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0pLFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZzY3JvbGxEYXRhOiB7XG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgc2l6ZXM6IHt9LFxuICAgICAgICB2YWxpZFNpemVzOiB7fSxcbiAgICAgICAga2V5RmllbGQ6IHRoaXMua2V5RmllbGQsXG4gICAgICAgIHNpbXBsZUFycmF5OiBmYWxzZVxuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHNpbXBsZUFycmF5OiBzaW1wbGVBcnJheSxcblxuICAgIGl0ZW1zV2l0aFNpemU6IGZ1bmN0aW9uIGl0ZW1zV2l0aFNpemUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLFxuICAgICAgICAgIGtleUZpZWxkID0gdGhpcy5rZXlGaWVsZCxcbiAgICAgICAgICBzaW1wbGVBcnJheSQkMSA9IHRoaXMuc2ltcGxlQXJyYXk7XG5cbiAgICAgIHZhciBzaXplcyA9IHRoaXMudnNjcm9sbERhdGEuc2l6ZXM7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgIHZhciBpZCA9IHNpbXBsZUFycmF5JCQxID8gaSA6IGl0ZW1ba2V5RmllbGRdO1xuICAgICAgICB2YXIgc2l6ZSA9IHNpemVzW2lkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBzaXplID09PSAndW5kZWZpbmVkJyAmJiAhdGhpcy4kX3VuZGVmaW5lZE1hcFtpZF0pIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy4kX3VuZGVmaW5lZFNpemVzKys7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJF91bmRlZmluZWRNYXBbaWRdID0gdHJ1ZTtcbiAgICAgICAgICBzaXplID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICBsaXN0ZW5lcnM6IGZ1bmN0aW9uIGxpc3RlbmVycygpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLiRsaXN0ZW5lcnMpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gJ3Jlc2l6ZScgJiYga2V5ICE9PSAndmlzaWJsZScpIHtcbiAgICAgICAgICBsaXN0ZW5lcnNba2V5XSA9IHRoaXMuJGxpc3RlbmVyc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGl0ZW1zOiBmdW5jdGlvbiBpdGVtcygpIHtcbiAgICAgIHRoaXMuZm9yY2VVcGRhdGUoZmFsc2UpO1xuICAgIH0sXG5cblxuICAgIHNpbXBsZUFycmF5OiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudnNjcm9sbERhdGEuc2ltcGxlQXJyYXkgPSB2YWx1ZTtcbiAgICAgIH0sXG5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgIH0sXG5cbiAgICBkaXJlY3Rpb246IGZ1bmN0aW9uIGRpcmVjdGlvbih2YWx1ZSkge1xuICAgICAgdGhpcy5mb3JjZVVwZGF0ZSh0cnVlKTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLiRfdXBkYXRlcyA9IFtdO1xuICAgIHRoaXMuJF91bmRlZmluZWRTaXplcyA9IDA7XG4gICAgdGhpcy4kX3VuZGVmaW5lZE1hcCA9IHt9O1xuICB9LFxuICBhY3RpdmF0ZWQ6IGZ1bmN0aW9uIGFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLnZzY3JvbGxEYXRhLmFjdGl2ZSA9IHRydWU7XG4gIH0sXG4gIGRlYWN0aXZhdGVkOiBmdW5jdGlvbiBkZWFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLnZzY3JvbGxEYXRhLmFjdGl2ZSA9IGZhbHNlO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU2Nyb2xsZXJSZXNpemU6IGZ1bmN0aW9uIG9uU2Nyb2xsZXJSZXNpemUoKSB7XG4gICAgICB2YXIgc2Nyb2xsZXIgPSB0aGlzLiRyZWZzLnNjcm9sbGVyO1xuICAgICAgaWYgKHNjcm9sbGVyKSB7XG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ3Jlc2l6ZScpO1xuICAgIH0sXG4gICAgb25TY3JvbGxlclZpc2libGU6IGZ1bmN0aW9uIG9uU2Nyb2xsZXJWaXNpYmxlKCkge1xuICAgICAgdGhpcy4kZW1pdCgndnNjcm9sbDp1cGRhdGUnLCB7IGZvcmNlOiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUnKTtcbiAgICB9LFxuICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgIHZhciBjbGVhciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgaWYgKGNsZWFyIHx8IHRoaXMuc2ltcGxlQXJyYXkpIHtcbiAgICAgICAgdGhpcy52c2Nyb2xsRGF0YS52YWxpZFNpemVzID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCd2c2Nyb2xsOnVwZGF0ZScsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgfSxcbiAgICBzY3JvbGxUb0l0ZW06IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShpbmRleCkge1xuICAgICAgdmFyIHNjcm9sbGVyID0gdGhpcy4kcmVmcy5zY3JvbGxlcjtcbiAgICAgIGlmIChzY3JvbGxlcikgc2Nyb2xsZXIuc2Nyb2xsVG9JdGVtKGluZGV4KTtcbiAgICB9LFxuICAgIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShpdGVtKSB7XG4gICAgICB2YXIgaW5kZXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgdmFyIGlkID0gdGhpcy5zaW1wbGVBcnJheSA/IGluZGV4ICE9IG51bGwgPyBpbmRleCA6IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKSA6IGl0ZW1bdGhpcy5rZXlGaWVsZF07XG4gICAgICByZXR1cm4gdGhpcy52c2Nyb2xsRGF0YS5zaXplc1tpZF0gfHwgMDtcbiAgICB9LFxuICAgIHNjcm9sbFRvQm90dG9tOiBmdW5jdGlvbiBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRfc2Nyb2xsaW5nVG9Cb3R0b20pIHJldHVybjtcbiAgICAgIHRoaXMuJF9zY3JvbGxpbmdUb0JvdHRvbSA9IHRydWU7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIC8vIEl0ZW0gaXMgaW5zZXJ0ZWQgdG8gdGhlIERPTVxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBJdGVtIHNpemVzIGFyZSBjb21wdXRlZFxuICAgICAgICB2YXIgY2IgPSBmdW5jdGlvbiBjYigpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgaWYgKF90aGlzLiRfdW5kZWZpbmVkU2l6ZXMgPT09IDApIHtcbiAgICAgICAgICAgIF90aGlzLiRfc2Nyb2xsaW5nVG9Cb3R0b20gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBEeW5hbWljU2Nyb2xsZXJJdGVtID0ge1xuICBuYW1lOiAnRHluYW1pY1Njcm9sbGVySXRlbScsXG5cbiAgaW5qZWN0OiBbJ3ZzY3JvbGxEYXRhJywgJ3ZzY3JvbGxQYXJlbnQnXSxcblxuICBwcm9wczoge1xuICAgIGl0ZW06IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcblxuICAgIHdhdGNoRGF0YToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIGFjdGl2ZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcblxuICAgIGluZGV4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgc2l6ZURlcGVuZGVuY2llczoge1xuICAgICAgdHlwZTogW0FycmF5LCBPYmplY3RdLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG5cbiAgICBlbWl0UmVzaXplOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlkOiBmdW5jdGlvbiBpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZzY3JvbGxEYXRhLnNpbXBsZUFycmF5ID8gdGhpcy5pbmRleCA6IHRoaXMuaXRlbVt0aGlzLnZzY3JvbGxEYXRhLmtleUZpZWxkXTtcbiAgICB9LFxuICAgIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52c2Nyb2xsRGF0YS52YWxpZFNpemVzW3RoaXMuaWRdICYmIHRoaXMudnNjcm9sbERhdGEuc2l6ZXNbdGhpcy5pZF0gfHwgMDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB3YXRjaERhdGE6ICd1cGRhdGVXYXRjaERhdGEnLFxuXG4gICAgaWQ6IGZ1bmN0aW9uIGlkKCkge1xuICAgICAgaWYgKCF0aGlzLnNpemUpIHtcbiAgICAgICAgdGhpcy5vbkRhdGFVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFjdGl2ZTogZnVuY3Rpb24gYWN0aXZlKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdGhpcy4kX3BlbmRpbmdWU2Nyb2xsVXBkYXRlID09PSB0aGlzLmlkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2l6ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgIHRoaXMuJF9mb3JjZU5leHRWU2Nyb2xsVXBkYXRlID0gbnVsbDtcbiAgICB0aGlzLnVwZGF0ZVdhdGNoRGF0YSgpO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3Aoaykge1xuICAgICAgX3RoaXMuJHdhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnNpemVEZXBlbmRlbmNpZXNba107XG4gICAgICB9LCBfdGhpcy5vbkRhdGFVcGRhdGUpO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBrIGluIHRoaXMuc2l6ZURlcGVuZGVuY2llcykge1xuICAgICAgX2xvb3Aoayk7XG4gICAgfVxuXG4gICAgdGhpcy52c2Nyb2xsUGFyZW50LiRvbigndnNjcm9sbDp1cGRhdGUnLCB0aGlzLm9uVnNjcm9sbFVwZGF0ZSk7XG4gICAgdGhpcy52c2Nyb2xsUGFyZW50LiRvbigndnNjcm9sbDp1cGRhdGUtc2l6ZScsIHRoaXMub25Wc2Nyb2xsVXBkYXRlU2l6ZSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMudnNjcm9sbERhdGEuYWN0aXZlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcbiAgICB9XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy52c2Nyb2xsUGFyZW50LiRvZmYoJ3ZzY3JvbGw6dXBkYXRlJywgdGhpcy5vblZzY3JvbGxVcGRhdGUpO1xuICAgIHRoaXMudnNjcm9sbFBhcmVudC4kb2ZmKCd2c2Nyb2xsOnVwZGF0ZS1zaXplJywgdGhpcy5vblZzY3JvbGxVcGRhdGVTaXplKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVTaXplOiBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlICYmIHRoaXMudnNjcm9sbERhdGEuYWN0aXZlKSB7XG4gICAgICAgIGlmICh0aGlzLiRfcGVuZGluZ1NpemVVcGRhdGUgIT09IHRoaXMuaWQpIHtcbiAgICAgICAgICB0aGlzLiRfcGVuZGluZ1NpemVVcGRhdGUgPSB0aGlzLmlkO1xuICAgICAgICAgIHRoaXMuJF9mb3JjZU5leHRWU2Nyb2xsVXBkYXRlID0gbnVsbDtcbiAgICAgICAgICB0aGlzLiRfcGVuZGluZ1ZTY3JvbGxVcGRhdGUgPSBudWxsO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZSAmJiB0aGlzLnZzY3JvbGxEYXRhLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5jb21wdXRlU2l6ZSh0aGlzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJF9mb3JjZU5leHRWU2Nyb2xsVXBkYXRlID0gdGhpcy5pZDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEJvdW5kczogZnVuY3Rpb24gZ2V0Qm91bmRzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH0sXG4gICAgdXBkYXRlV2F0Y2hEYXRhOiBmdW5jdGlvbiB1cGRhdGVXYXRjaERhdGEoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMud2F0Y2hEYXRhKSB7XG4gICAgICAgIHRoaXMuJF93YXRjaERhdGEgPSB0aGlzLiR3YXRjaCgnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIub25EYXRhVXBkYXRlKCk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLiRfd2F0Y2hEYXRhKSB7XG4gICAgICAgIHRoaXMuJF93YXRjaERhdGEoKTtcbiAgICAgICAgdGhpcy4kX3dhdGNoRGF0YSA9IG51bGw7XG4gICAgICB9XG4gICAgfSxcbiAgICBvblZzY3JvbGxVcGRhdGU6IGZ1bmN0aW9uIG9uVnNjcm9sbFVwZGF0ZShfcmVmKSB7XG4gICAgICB2YXIgZm9yY2UgPSBfcmVmLmZvcmNlO1xuXG4gICAgICBpZiAoIXRoaXMuYWN0aXZlICYmIGZvcmNlKSB7XG4gICAgICAgIHRoaXMuJF9wZW5kaW5nVlNjcm9sbFVwZGF0ZSA9IHRoaXMuaWQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy4kX2ZvcmNlTmV4dFZTY3JvbGxVcGRhdGUgPT09IHRoaXMuaWQgfHwgZm9yY2UgfHwgIXRoaXMuc2l6ZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNpemUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRGF0YVVwZGF0ZTogZnVuY3Rpb24gb25EYXRhVXBkYXRlKCkge1xuICAgICAgdGhpcy51cGRhdGVTaXplKCk7XG4gICAgfSxcbiAgICBjb21wdXRlU2l6ZTogZnVuY3Rpb24gY29tcHV0ZVNpemUoaWQpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczMuaWQgPT09IGlkKSB7XG4gICAgICAgICAgdmFyIGJvdW5kcyA9IF90aGlzMy5nZXRCb3VuZHMoKTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IE1hdGgucm91bmQoX3RoaXMzLnZzY3JvbGxQYXJlbnQuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gYm91bmRzLmhlaWdodCA6IGJvdW5kcy53aWR0aCk7XG4gICAgICAgICAgaWYgKHNpemUgJiYgX3RoaXMzLnNpemUgIT09IHNpemUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczMudnNjcm9sbFBhcmVudC4kX3VuZGVmaW5lZE1hcFtpZF0pIHtcbiAgICAgICAgICAgICAgX3RoaXMzLnZzY3JvbGxQYXJlbnQuJF91bmRlZmluZWRTaXplcy0tO1xuICAgICAgICAgICAgICBfdGhpczMudnNjcm9sbFBhcmVudC4kX3VuZGVmaW5lZE1hcFtpZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpczMuJHNldChfdGhpczMudnNjcm9sbERhdGEuc2l6ZXMsIF90aGlzMy5pZCwgc2l6ZSk7XG4gICAgICAgICAgICBfdGhpczMuJHNldChfdGhpczMudnNjcm9sbERhdGEudmFsaWRTaXplcywgX3RoaXMzLmlkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChfdGhpczMuZW1pdFJlc2l6ZSkgX3RoaXMzLiRlbWl0KCdyZXNpemUnLCBfdGhpczMuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpczMuJF9wZW5kaW5nU2l6ZVVwZGF0ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHJldHVybiBoKHRoaXMudGFnLCB0aGlzLiRzbG90cy5kZWZhdWx0KTtcbiAgfVxufTtcblxudmFyIElkU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgIF9yZWYkaWRQcm9wID0gX3JlZi5pZFByb3AsXG4gICAgICBpZFByb3AgPSBfcmVmJGlkUHJvcCA9PT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKHZtKSB7XG4gICAgcmV0dXJuIHZtLml0ZW0uaWQ7XG4gIH0gOiBfcmVmJGlkUHJvcDtcblxuICB2YXIgc3RvcmUgPSB7fTtcbiAgdmFyIHZtID0gbmV3IFZ1ZSh7XG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0b3JlOiBzdG9yZVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHJldHVybiB7XG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkU3RhdGU6IG51bGxcbiAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy4kX2lkID0gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgaWRQcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuJF9nZXRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gaWRQcm9wLmNhbGwoX3RoaXMsIF90aGlzKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJF9nZXRJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXNbaWRQcm9wXTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJHdhdGNoKHRoaXMuJF9nZXRJZCwge1xuICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczIuJF9pZCA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRfdXBkYXRlSWRTdGF0ZSgpO1xuICAgIH0sXG4gICAgYmVmb3JlVXBkYXRlOiBmdW5jdGlvbiBiZWZvcmVVcGRhdGUoKSB7XG4gICAgICB0aGlzLiRfdXBkYXRlSWRTdGF0ZSgpO1xuICAgIH0sXG5cblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8qKlxuICAgICAgICogSW5pdGlhbGl6ZSBhbiBpZFN0YXRlXG4gICAgICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGlkIFVuaXF1ZSBpZCBmb3IgdGhlIGRhdGFcbiAgICAgICAqL1xuICAgICAgJF9pZFN0YXRlSW5pdDogZnVuY3Rpb24gJF9pZFN0YXRlSW5pdChpZCkge1xuICAgICAgICB2YXIgZmFjdG9yeSA9IHRoaXMuJG9wdGlvbnMuaWRTdGF0ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBmYWN0b3J5LmNhbGwodGhpcywgdGhpcyk7XG4gICAgICAgICAgdm0uJHNldChzdG9yZSwgaWQsIGRhdGEpO1xuICAgICAgICAgIHRoaXMuJF9pZCA9IGlkO1xuICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW21peGluIElkU3RhdGVdIE1pc3NpbmcgYGlkU3RhdGVgIGZ1bmN0aW9uIG9uIGNvbXBvbmVudCBkZWZpbml0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9LFxuXG5cbiAgICAgIC8qKlxuICAgICAgICogRW5zdXJlIGlkU3RhdGUgaXMgY3JlYXRlZCBhbmQgdXAtdG8tZGF0ZVxuICAgICAgICovXG4gICAgICAkX3VwZGF0ZUlkU3RhdGU6IGZ1bmN0aW9uICRfdXBkYXRlSWRTdGF0ZSgpIHtcbiAgICAgICAgdmFyIGlkID0gdGhpcy4kX2dldElkKCk7XG4gICAgICAgIGlmIChpZCA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdObyBpZCBmb3VuZCBmb3IgSWRTdGF0ZSB3aXRoIGlkUHJvcDogXFwnJyArIGlkUHJvcCArICdcXCcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9PSB0aGlzLiRfaWQpIHtcbiAgICAgICAgICBpZiAoIXN0b3JlW2lkXSkge1xuICAgICAgICAgICAgdGhpcy4kX2lkU3RhdGVJbml0KGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pZFN0YXRlID0gc3RvcmVbaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJDb21wb25lbnRzKFZ1ZSQkMSwgcHJlZml4KSB7XG4gIFZ1ZSQkMS5jb21wb25lbnQocHJlZml4ICsgJ3JlY3ljbGUtc2Nyb2xsZXInLCBSZWN5Y2xlU2Nyb2xsZXIpO1xuICBWdWUkJDEuY29tcG9uZW50KHByZWZpeCArICdSZWN5Y2xlU2Nyb2xsZXInLCBSZWN5Y2xlU2Nyb2xsZXIpO1xuICBWdWUkJDEuY29tcG9uZW50KHByZWZpeCArICdkeW5hbWljLXNjcm9sbGVyJywgRHluYW1pY1Njcm9sbGVyKTtcbiAgVnVlJCQxLmNvbXBvbmVudChwcmVmaXggKyAnRHluYW1pY1Njcm9sbGVyJywgRHluYW1pY1Njcm9sbGVyKTtcbiAgVnVlJCQxLmNvbXBvbmVudChwcmVmaXggKyAnZHluYW1pYy1zY3JvbGxlci1pdGVtJywgRHluYW1pY1Njcm9sbGVySXRlbSk7XG4gIFZ1ZSQkMS5jb21wb25lbnQocHJlZml4ICsgJ0R5bmFtaWNTY3JvbGxlckl0ZW0nLCBEeW5hbWljU2Nyb2xsZXJJdGVtKTtcbn1cblxudmFyIHBsdWdpbiA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZlcnNpb246IFwiMS4wLjAtcmMuMlwiLFxuICBpbnN0YWxsOiBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSQkMSwgb3B0aW9ucykge1xuICAgIHZhciBmaW5hbE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB7XG4gICAgICBpbnN0YWxsQ29tcG9uZW50czogdHJ1ZSxcbiAgICAgIGNvbXBvbmVudHNQcmVmaXg6ICcnXG4gICAgfSwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gZmluYWxPcHRpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIGZpbmFsT3B0aW9uc1trZXldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25maWdba2V5XSA9IGZpbmFsT3B0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaW5hbE9wdGlvbnMuaW5zdGFsbENvbXBvbmVudHMpIHtcbiAgICAgIHJlZ2lzdGVyQ29tcG9uZW50cyhWdWUkJDEsIGZpbmFsT3B0aW9ucy5jb21wb25lbnRzUHJlZml4KTtcbiAgICB9XG4gIH1cbn07XG5cbi8vIEF1dG8taW5zdGFsbFxudmFyIEdsb2JhbFZ1ZSA9IG51bGw7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgR2xvYmFsVnVlID0gd2luZG93LlZ1ZTtcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgR2xvYmFsVnVlID0gZ2xvYmFsLlZ1ZTtcbn1cbmlmIChHbG9iYWxWdWUpIHtcbiAgR2xvYmFsVnVlLnVzZShwbHVnaW4pO1xufVxuXG5leHBvcnQgeyBSZWN5Y2xlU2Nyb2xsZXIsIER5bmFtaWNTY3JvbGxlciwgRHluYW1pY1Njcm9sbGVySXRlbSwgSWRTdGF0ZSB9O1xuZXhwb3J0IGRlZmF1bHQgcGx1Z2luO1xuIiwiLyohXG4gKiBWdWUuanMgdjIuNi4xMFxuICogKGMpIDIwMTQtMjAxOSBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxudmFyIGVtcHR5T2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbi8vIFRoZXNlIGhlbHBlcnMgcHJvZHVjZSBiZXR0ZXIgVk0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5jdGlvbiBpbmxpbmluZy5cbmZ1bmN0aW9uIGlzVW5kZWYgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVmICh2KSB7XG4gIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc1RydWUgKHYpIHtcbiAgcmV0dXJuIHYgPT09IHRydWVcbn1cblxuZnVuY3Rpb24gaXNGYWxzZSAodikge1xuICByZXR1cm4gdiA9PT0gZmFsc2Vcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmltaXRpdmUuXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlICh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cblxuLyoqXG4gKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIE9iamVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSwgZS5nLiwgW29iamVjdCBPYmplY3RdLlxuICovXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gdG9SYXdUeXBlICh2YWx1ZSkge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG4vKipcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2YWwpXG59XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZSAodmFsKSB7XG4gIHJldHVybiAoXG4gICAgaXNEZWYodmFsKSAmJlxuICAgIHR5cGVvZiB2YWwudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiB2YWwuY2F0Y2ggPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICovXG5mdW5jdGlvbiB0b1N0cmluZyAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbFxuICAgID8gJydcbiAgICA6IEFycmF5LmlzQXJyYXkodmFsKSB8fCAoaXNQbGFpbk9iamVjdCh2YWwpICYmIHZhbC50b1N0cmluZyA9PT0gX3RvU3RyaW5nKVxuICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpXG4gICAgICA6IFN0cmluZyh2YWwpXG59XG5cbi8qKlxuICogQ29udmVydCBhbiBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIgKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxufVxuXG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAgKFxuICBzdHIsXG4gIGV4cGVjdHNMb3dlckNhc2Vcbikge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXTsgfVxuICAgIDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICovXG52YXIgaXNSZXNlcnZlZEF0dHJpYnV0ZSA9IG1ha2VNYXAoJ2tleSxyZWYsc2xvdCxzbG90LXNjb3BlLGlzJyk7XG5cbi8qKlxuICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSBhbiBhcnJheS5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgaWYgKGFyci5sZW5ndGgpIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmV0dXJuIGFyci5zcGxpY2UoaW5kZXgsIDEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgY2FjaGVkIHZlcnNpb24gb2YgYSBwdXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjYWNoZWQgKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiAoZnVuY3Rpb24gY2FjaGVkRm4gKHN0cikge1xuICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgIHJldHVybiBoaXQgfHwgKGNhY2hlW3N0cl0gPSBmbihzdHIpKVxuICB9KVxufVxuXG4vKipcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbnZhciBjYW1lbGl6ZVJFID0gLy0oXFx3KS9nO1xudmFyIGNhbWVsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7IH0pXG59KTtcblxuLyoqXG4gKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICovXG52YXIgY2FwaXRhbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSlcbn0pO1xuXG4vKipcbiAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gKi9cbnZhciBoeXBoZW5hdGVSRSA9IC9cXEIoW0EtWl0pL2c7XG52YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKGh5cGhlbmF0ZVJFLCAnLSQxJykudG9Mb3dlckNhc2UoKVxufSk7XG5cbi8qKlxuICogU2ltcGxlIGJpbmQgcG9seWZpbGwgZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0LFxuICogZS5nLiwgUGhhbnRvbUpTIDEueC4gVGVjaG5pY2FsbHksIHdlIGRvbid0IG5lZWQgdGhpcyBhbnltb3JlXG4gKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAqIEJ1dCByZW1vdmluZyBpdCB3b3VsZCBtZWFuIGJyZWFraW5nIGNvZGUgdGhhdCB3YXMgYWJsZSB0byBydW4gaW5cbiAqIFBoYW50b21KUyAxLngsIHNvIHRoaXMgbXVzdCBiZSBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBwb2x5ZmlsbEJpbmQgKGZuLCBjdHgpIHtcbiAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbFxuICAgICAgPyBsID4gMVxuICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxuICAgICAgOiBmbi5jYWxsKGN0eClcbiAgfVxuXG4gIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgcmV0dXJuIGJvdW5kRm5cbn1cblxuZnVuY3Rpb24gbmF0aXZlQmluZCAoZm4sIGN0eCkge1xuICByZXR1cm4gZm4uYmluZChjdHgpXG59XG5cbnZhciBiaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbiAgPyBuYXRpdmVCaW5kXG4gIDogcG9seWZpbGxCaW5kO1xuXG4vKipcbiAqIENvbnZlcnQgYW4gQXJyYXktbGlrZSBvYmplY3QgdG8gYSByZWFsIEFycmF5LlxuICovXG5mdW5jdGlvbiB0b0FycmF5IChsaXN0LCBzdGFydCkge1xuICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gIHZhciBpID0gbGlzdC5sZW5ndGggLSBzdGFydDtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSkge1xuICAgIHJldFtpXSA9IGxpc3RbaSArIHN0YXJ0XTtcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbi8qKlxuICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBleHRlbmQgKHRvLCBfZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgfVxuICByZXR1cm4gdG9cbn1cblxuLyoqXG4gKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICovXG5mdW5jdGlvbiB0b09iamVjdCAoYXJyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyW2ldKSB7XG4gICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUGVyZm9ybSBubyBvcGVyYXRpb24uXG4gKiBTdHViYmluZyBhcmdzIHRvIG1ha2UgRmxvdyBoYXBweSB3aXRob3V0IGxlYXZpbmcgdXNlbGVzcyB0cmFuc3BpbGVkIGNvZGVcbiAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAqL1xuZnVuY3Rpb24gbm9vcCAoYSwgYiwgYykge31cblxuLyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gKi9cbnZhciBpZGVudGl0eSA9IGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9O1xuXG4vKipcbiAqIENoZWNrIGlmIHR3byB2YWx1ZXMgYXJlIGxvb3NlbHkgZXF1YWwgLSB0aGF0IGlzLFxuICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICovXG5mdW5jdGlvbiBsb29zZUVxdWFsIChhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgdmFyIGlzT2JqZWN0QSA9IGlzT2JqZWN0KGEpO1xuICB2YXIgaXNPYmplY3RCID0gaXNPYmplY3QoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBpc0FycmF5QSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgaWYgKGlzQXJyYXlBICYmIGlzQXJyYXlCKSB7XG4gICAgICAgIHJldHVybiBhLmxlbmd0aCA9PT0gYi5sZW5ndGggJiYgYS5ldmVyeShmdW5jdGlvbiAoZSwgaSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgIH0gZWxzZSBpZiAoIWlzQXJyYXlBICYmICFpc0FycmF5Qikge1xuICAgICAgICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgIHJldHVybiBrZXlzQS5sZW5ndGggPT09IGtleXNCLmxlbmd0aCAmJiBrZXlzQS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGxvb3NlRXF1YWwoYVtrZXldLCBiW2tleV0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgIHJldHVybiBTdHJpbmcoYSkgPT09IFN0cmluZyhiKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBhdCB3aGljaCBhIGxvb3NlbHkgZXF1YWwgdmFsdWUgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgYXJyYXkgKGlmIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGUgYXJyYXkgbXVzdFxuICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50JyxcbiAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAnbW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnLFxuICAnZXJyb3JDYXB0dXJlZCcsXG4gICdzZXJ2ZXJQcmVmZXRjaCdcbl07XG5cbi8qICAqL1xuXG5cblxudmFyIGNvbmZpZyA9ICh7XG4gIC8qKlxuICAgKiBPcHRpb24gbWVyZ2Ugc3RyYXRlZ2llcyAodXNlZCBpbiBjb3JlL3V0aWwvb3B0aW9ucylcbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBvcHRpb25NZXJnZVN0cmF0ZWdpZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAqL1xuICBzaWxlbnQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBTaG93IHByb2R1Y3Rpb24gbW9kZSB0aXAgbWVzc2FnZSBvbiBib290P1xuICAgKi9cbiAgcHJvZHVjdGlvblRpcDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZGV2dG9vbHNcbiAgICovXG4gIGRldnRvb2xzOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlY29yZCBwZXJmXG4gICAqL1xuICBwZXJmb3JtYW5jZTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIEVycm9yIGhhbmRsZXIgZm9yIHdhdGNoZXIgZXJyb3JzXG4gICAqL1xuICBlcnJvckhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgKi9cbiAgd2FybkhhbmRsZXI6IG51bGwsXG5cbiAgLyoqXG4gICAqIElnbm9yZSBjZXJ0YWluIGN1c3RvbSBlbGVtZW50c1xuICAgKi9cbiAgaWdub3JlZEVsZW1lbnRzOiBbXSxcblxuICAvKipcbiAgICogQ3VzdG9tIHVzZXIga2V5IGFsaWFzZXMgZm9yIHYtb25cbiAgICovXG4gIC8vICRmbG93LWRpc2FibGUtbGluZVxuICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXG4gICAqIGNvbXBvbmVudC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRUYWc6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxuICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZEF0dHI6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XG4gICAqL1xuICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSByZWFsIHRhZyBuYW1lIGZvciB0aGUgc3BlY2lmaWMgcGxhdGZvcm0uXG4gICAqL1xuICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIG11c3RVc2VQcm9wOiBubyxcblxuICAvKipcbiAgICogUGVyZm9ybSB1cGRhdGVzIGFzeW5jaHJvbm91c2x5LiBJbnRlbmRlZCB0byBiZSB1c2VkIGJ5IFZ1ZSBUZXN0IFV0aWxzXG4gICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAqL1xuICBhc3luYzogdHJ1ZSxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICovXG4gIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXG59KTtcblxuLyogICovXG5cbi8qKlxuICogdW5pY29kZSBsZXR0ZXJzIHVzZWQgZm9yIHBhcnNpbmcgaHRtbCB0YWdzLCBjb21wb25lbnQgbmFtZXMgYW5kIHByb3BlcnR5IHBhdGhzLlxuICogdXNpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL2h0bWw1My9zZW1hbnRpY3Mtc2NyaXB0aW5nLmh0bWwjcG90ZW50aWFsY3VzdG9tZWxlbWVudG5hbWVcbiAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAqL1xudmFyIHVuaWNvZGVSZWdFeHAgPSAvYS16QS1aXFx1MDBCN1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwM0YtXFx1MjA0MFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRC87XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBzdHJpbmcgc3RhcnRzIHdpdGggJCBvciBfXG4gKi9cbmZ1bmN0aW9uIGlzUmVzZXJ2ZWQgKHN0cikge1xuICB2YXIgYyA9IChzdHIgKyAnJykuY2hhckNvZGVBdCgwKTtcbiAgcmV0dXJuIGMgPT09IDB4MjQgfHwgYyA9PT0gMHg1RlxufVxuXG4vKipcbiAqIERlZmluZSBhIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBkZWYgKG9iaiwga2V5LCB2YWwsIGVudW1lcmFibGUpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgdmFsdWU6IHZhbCxcbiAgICBlbnVtZXJhYmxlOiAhIWVudW1lcmFibGUsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlIHNpbXBsZSBwYXRoLlxuICovXG52YXIgYmFpbFJFID0gbmV3IFJlZ0V4cCgoXCJbXlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiLiRfXFxcXGRdXCIpKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aCAocGF0aCkge1xuICBpZiAoYmFpbFJFLnRlc3QocGF0aCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFvYmopIHsgcmV0dXJuIH1cbiAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgfVxuICAgIHJldHVybiBvYmpcbiAgfVxufVxuXG4vKiAgKi9cblxuLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG52YXIgaGFzUHJvdG8gPSAnX19wcm90b19fJyBpbiB7fTtcblxuLy8gQnJvd3NlciBlbnZpcm9ubWVudCBzbmlmZmluZ1xudmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xudmFyIGluV2VleCA9IHR5cGVvZiBXWEVudmlyb25tZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhIVdYRW52aXJvbm1lbnQucGxhdGZvcm07XG52YXIgd2VleFBsYXRmb3JtID0gaW5XZWV4ICYmIFdYRW52aXJvbm1lbnQucGxhdGZvcm0udG9Mb3dlckNhc2UoKTtcbnZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xudmFyIGlzSUUgPSBVQSAmJiAvbXNpZXx0cmlkZW50Ly50ZXN0KFVBKTtcbnZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xudmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xudmFyIGlzQW5kcm9pZCA9IChVQSAmJiBVQS5pbmRleE9mKCdhbmRyb2lkJykgPiAwKSB8fCAod2VleFBsYXRmb3JtID09PSAnYW5kcm9pZCcpO1xudmFyIGlzSU9TID0gKFVBICYmIC9pcGhvbmV8aXBhZHxpcG9kfGlvcy8udGVzdChVQSkpIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdpb3MnKTtcbnZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xudmFyIGlzUGhhbnRvbUpTID0gVUEgJiYgL3BoYW50b21qcy8udGVzdChVQSk7XG52YXIgaXNGRiA9IFVBICYmIFVBLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLyk7XG5cbi8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbnZhciBuYXRpdmVXYXRjaCA9ICh7fSkud2F0Y2g7XG5cbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbmlmIChpbkJyb3dzZXIpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSkpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbi8vIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgY2FuIHNldCBWVUVfRU5WXG52YXIgX2lzU2VydmVyO1xudmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3NlciAmJiAhaW5XZWV4ICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkZXRlY3QgcHJlc2VuY2Ugb2YgdnVlLXNlcnZlci1yZW5kZXJlciBhbmQgYXZvaWRcbiAgICAgIC8vIFdlYnBhY2sgc2hpbW1pbmcgdGhlIHByb2Nlc3NcbiAgICAgIF9pc1NlcnZlciA9IGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICB9IGVsc2Uge1xuICAgICAgX2lzU2VydmVyID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBfaXNTZXJ2ZXJcbn07XG5cbi8vIGRldGVjdCBkZXZ0b29sc1xudmFyIGRldnRvb2xzID0gaW5Ccm93c2VyICYmIHdpbmRvdy5fX1ZVRV9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaXNOYXRpdmUgKEN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSAnZnVuY3Rpb24nICYmIC9uYXRpdmUgY29kZS8udGVzdChDdG9yLnRvU3RyaW5nKCkpXG59XG5cbnZhciBoYXNTeW1ib2wgPVxuICB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTeW1ib2wpICYmXG4gIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xuXG52YXIgX1NldDtcbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqLyAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbmlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gIC8vIHVzZSBuYXRpdmUgU2V0IHdoZW4gYXZhaWxhYmxlLlxuICBfU2V0ID0gU2V0O1xufSBlbHNlIHtcbiAgLy8gYSBub24tc3RhbmRhcmQgU2V0IHBvbHlmaWxsIHRoYXQgb25seSB3b3JrcyB3aXRoIHByaW1pdGl2ZSBrZXlzLlxuICBfU2V0ID0gLypAX19QVVJFX18qLyhmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0W2tleV0gPT09IHRydWVcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNldDtcbiAgfSgpKTtcbn1cblxuLyogICovXG5cbnZhciB3YXJuID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG5vb3ApO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaGFzQ29uc29sZSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGNsYXNzaWZ5UkUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pXG4gICAgLnJlcGxhY2UoL1stX10vZywgJycpOyB9O1xuXG4gIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcblxuICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbVnVlIHdhcm5dOiBcIiArIG1zZyArIHRyYWNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIiArIG1zZyArIChcbiAgICAgICAgdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnXG4gICAgICApKTtcbiAgICB9XG4gIH07XG5cbiAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm07XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAoXCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkID0gMDtcblxuLyoqXG4gKiBBIGRlcCBpcyBhbiBvYnNlcnZhYmxlIHRoYXQgY2FuIGhhdmUgbXVsdGlwbGVcbiAqIGRpcmVjdGl2ZXMgc3Vic2NyaWJpbmcgdG8gaXQuXG4gKi9cbnZhciBEZXAgPSBmdW5jdGlvbiBEZXAgKCkge1xuICB0aGlzLmlkID0gdWlkKys7XG4gIHRoaXMuc3VicyA9IFtdO1xufTtcblxuRGVwLnByb3RvdHlwZS5hZGRTdWIgPSBmdW5jdGlvbiBhZGRTdWIgKHN1Yikge1xuICB0aGlzLnN1YnMucHVzaChzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiByZW1vdmVTdWIgKHN1Yikge1xuICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICBpZiAoRGVwLnRhcmdldCkge1xuICAgIERlcC50YXJnZXQuYWRkRGVwKHRoaXMpO1xuICB9XG59O1xuXG5EZXAucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSAoKSB7XG4gIC8vIHN0YWJpbGl6ZSB0aGUgc3Vic2NyaWJlciBsaXN0IGZpcnN0XG4gIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAvLyBzdWJzIGFyZW4ndCBzb3J0ZWQgaW4gc2NoZWR1bGVyIGlmIG5vdCBydW5uaW5nIGFzeW5jXG4gICAgLy8gd2UgbmVlZCB0byBzb3J0IHRoZW0gbm93IHRvIG1ha2Ugc3VyZSB0aGV5IGZpcmUgaW4gY29ycmVjdFxuICAgIC8vIG9yZGVyXG4gICAgc3Vicy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHN1YnNbaV0udXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIFRoZSBjdXJyZW50IHRhcmdldCB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZC5cbi8vIFRoaXMgaXMgZ2xvYmFsbHkgdW5pcXVlIGJlY2F1c2Ugb25seSBvbmUgd2F0Y2hlclxuLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXG5EZXAudGFyZ2V0ID0gbnVsbDtcbnZhciB0YXJnZXRTdGFjayA9IFtdO1xuXG5mdW5jdGlvbiBwdXNoVGFyZ2V0ICh0YXJnZXQpIHtcbiAgdGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICBEZXAudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBwb3BUYXJnZXQgKCkge1xuICB0YXJnZXRTdGFjay5wb3AoKTtcbiAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrW3RhcmdldFN0YWNrLmxlbmd0aCAtIDFdO1xufVxuXG4vKiAgKi9cblxudmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUgKFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICB0ZXh0LFxuICBlbG0sXG4gIGNvbnRleHQsXG4gIGNvbXBvbmVudE9wdGlvbnMsXG4gIGFzeW5jRmFjdG9yeVxuKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMuZWxtID0gZWxtO1xuICB0aGlzLm5zID0gdW5kZWZpbmVkO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLmZuQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5mbk9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5TY29wZUlkID0gdW5kZWZpbmVkO1xuICB0aGlzLmtleSA9IGRhdGEgJiYgZGF0YS5rZXk7XG4gIHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICB0aGlzLnJhdyA9IGZhbHNlO1xuICB0aGlzLmlzU3RhdGljID0gZmFsc2U7XG4gIHRoaXMuaXNSb290SW5zZXJ0ID0gdHJ1ZTtcbiAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgdGhpcy5pc0Nsb25lZCA9IGZhbHNlO1xuICB0aGlzLmlzT25jZSA9IGZhbHNlO1xuICB0aGlzLmFzeW5jRmFjdG9yeSA9IGFzeW5jRmFjdG9yeTtcbiAgdGhpcy5hc3luY01ldGEgPSB1bmRlZmluZWQ7XG4gIHRoaXMuaXNBc3luY1BsYWNlaG9sZGVyID0gZmFsc2U7XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjaGlsZDogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4vLyBERVBSRUNBVEVEOiBhbGlhcyBmb3IgY29tcG9uZW50SW5zdGFuY2UgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucHJvdG90eXBlQWNjZXNzb3JzLmNoaWxkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2Vcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWTm9kZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIGlmICggdGV4dCA9PT0gdm9pZCAwICkgdGV4dCA9ICcnO1xuXG4gIHZhciBub2RlID0gbmV3IFZOb2RlKCk7XG4gIG5vZGUudGV4dCA9IHRleHQ7XG4gIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcbiAgcmV0dXJuIG5vZGVcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSAodmFsKSB7XG4gIHJldHVybiBuZXcgVk5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgU3RyaW5nKHZhbCkpXG59XG5cbi8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXG4vLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbi8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG5mdW5jdGlvbiBjbG9uZVZOb2RlICh2bm9kZSkge1xuICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKFxuICAgIHZub2RlLnRhZyxcbiAgICB2bm9kZS5kYXRhLFxuICAgIC8vICM3OTc1XG4gICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgLy8gYSBjaGlsZC5cbiAgICB2bm9kZS5jaGlsZHJlbiAmJiB2bm9kZS5jaGlsZHJlbi5zbGljZSgpLFxuICAgIHZub2RlLnRleHQsXG4gICAgdm5vZGUuZWxtLFxuICAgIHZub2RlLmNvbnRleHQsXG4gICAgdm5vZGUuY29tcG9uZW50T3B0aW9ucyxcbiAgICB2bm9kZS5hc3luY0ZhY3RvcnlcbiAgKTtcbiAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gIGNsb25lZC5pc1N0YXRpYyA9IHZub2RlLmlzU3RhdGljO1xuICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICBjbG9uZWQuZm5Db250ZXh0ID0gdm5vZGUuZm5Db250ZXh0O1xuICBjbG9uZWQuZm5PcHRpb25zID0gdm5vZGUuZm5PcHRpb25zO1xuICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICBjbG9uZWQuYXN5bmNNZXRhID0gdm5vZGUuYXN5bmNNZXRhO1xuICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICByZXR1cm4gY2xvbmVkXG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG5cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVhdGUoYXJyYXlQcm90byk7XG5cbnZhciBtZXRob2RzVG9QYXRjaCA9IFtcbiAgJ3B1c2gnLFxuICAncG9wJyxcbiAgJ3NoaWZ0JyxcbiAgJ3Vuc2hpZnQnLFxuICAnc3BsaWNlJyxcbiAgJ3NvcnQnLFxuICAncmV2ZXJzZSdcbl07XG5cbi8qKlxuICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXG4gKi9cbm1ldGhvZHNUb1BhdGNoLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgdmFyIG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICBkZWYoYXJyYXlNZXRob2RzLCBtZXRob2QsIGZ1bmN0aW9uIG11dGF0b3IgKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NwbGljZSc6XG4gICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKGluc2VydGVkKSB7IG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7IH1cbiAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgfSk7XG59KTtcblxuLyogICovXG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4vKipcbiAqIEluIHNvbWUgY2FzZXMgd2UgbWF5IHdhbnQgdG8gZGlzYWJsZSBvYnNlcnZhdGlvbiBpbnNpZGUgYSBjb21wb25lbnQnc1xuICogdXBkYXRlIGNvbXB1dGF0aW9uLlxuICovXG52YXIgc2hvdWxkT2JzZXJ2ZSA9IHRydWU7XG5cbmZ1bmN0aW9uIHRvZ2dsZU9ic2VydmluZyAodmFsdWUpIHtcbiAgc2hvdWxkT2JzZXJ2ZSA9IHZhbHVlO1xufVxuXG4vKipcbiAqIE9ic2VydmVyIGNsYXNzIHRoYXQgaXMgYXR0YWNoZWQgdG8gZWFjaCBvYnNlcnZlZFxuICogb2JqZWN0LiBPbmNlIGF0dGFjaGVkLCB0aGUgb2JzZXJ2ZXIgY29udmVydHMgdGhlIHRhcmdldFxuICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAqIGNvbGxlY3QgZGVwZW5kZW5jaWVzIGFuZCBkaXNwYXRjaCB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSBmdW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzLmRlcCA9IG5ldyBEZXAoKTtcbiAgdGhpcy52bUNvdW50ID0gMDtcbiAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmIChoYXNQcm90bykge1xuICAgICAgcHJvdG9BdWdtZW50KHZhbHVlLCBhcnJheU1ldGhvZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3B5QXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzLCBhcnJheUtleXMpO1xuICAgIH1cbiAgICB0aGlzLm9ic2VydmVBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53YWxrKHZhbHVlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXYWxrIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgYW5kIGNvbnZlcnQgdGhlbSBpbnRvXG4gKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAqIHZhbHVlIHR5cGUgaXMgT2JqZWN0LlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIHdhbGsgKG9iaikge1xuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iaiwga2V5c1tpXSk7XG4gIH1cbn07XG5cbi8qKlxuICogT2JzZXJ2ZSBhIGxpc3Qgb2YgQXJyYXkgaXRlbXMuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiBvYnNlcnZlQXJyYXkgKGl0ZW1zKSB7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb2JzZXJ2ZShpdGVtc1tpXSk7XG4gIH1cbn07XG5cbi8vIGhlbHBlcnNcblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBpbnRlcmNlcHRpbmdcbiAqIHRoZSBwcm90b3R5cGUgY2hhaW4gdXNpbmcgX19wcm90b19fXG4gKi9cbmZ1bmN0aW9uIHByb3RvQXVnbWVudCAodGFyZ2V0LCBzcmMpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbiAgdGFyZ2V0Ll9fcHJvdG9fXyA9IHNyYztcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wcm90byAqL1xufVxuXG4vKipcbiAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmluaW5nXG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYjtcbiAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgb2IgPSB2YWx1ZS5fX29iX187XG4gIH0gZWxzZSBpZiAoXG4gICAgc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICFpc1NlcnZlclJlbmRlcmluZygpICYmXG4gICAgKEFycmF5LmlzQXJyYXkodmFsdWUpIHx8IGlzUGxhaW5PYmplY3QodmFsdWUpKSAmJlxuICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgIXZhbHVlLl9pc1Z1ZVxuICApIHtcbiAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSk7XG4gIH1cbiAgaWYgKGFzUm9vdERhdGEgJiYgb2IpIHtcbiAgICBvYi52bUNvdW50Kys7XG4gIH1cbiAgcmV0dXJuIG9iXG59XG5cbi8qKlxuICogRGVmaW5lIGEgcmVhY3RpdmUgcHJvcGVydHkgb24gYW4gT2JqZWN0LlxuICovXG5mdW5jdGlvbiBkZWZpbmVSZWFjdGl2ZSQkMSAoXG4gIG9iaixcbiAga2V5LFxuICB2YWwsXG4gIGN1c3RvbVNldHRlcixcbiAgc2hhbGxvd1xuKSB7XG4gIHZhciBkZXAgPSBuZXcgRGVwKCk7XG5cbiAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gIGlmIChwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5jb25maWd1cmFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBjYXRlciBmb3IgcHJlLWRlZmluZWQgZ2V0dGVyL3NldHRlcnNcbiAgdmFyIGdldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LmdldDtcbiAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgaWYgKCghZ2V0dGVyIHx8IHNldHRlcikgJiYgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIHZhbCA9IG9ialtrZXldO1xuICB9XG5cbiAgdmFyIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKHZhbCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gcmVhY3RpdmVHZXR0ZXIgKCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgIGlmIChnZXR0ZXIgJiYgIXNldHRlcikgeyByZXR1cm4gfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJ2F0IHJ1bnRpbWUgLSBkZWNsYXJlIGl0IHVwZnJvbnQgaW4gdGhlIGRhdGEgb3B0aW9uLidcbiAgICApO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoIW9iKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGRlZmluZVJlYWN0aXZlJCQxKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gIG9iLmRlcC5ub3RpZnkoKTtcbiAgcmV0dXJuIHZhbFxufVxuXG4vKipcbiAqIERlbGV0ZSBhIHByb3BlcnR5IGFuZCB0cmlnZ2VyIGNoYW5nZSBpZiBuZWNlc3NhcnkuXG4gKi9cbmZ1bmN0aW9uIGRlbCAodGFyZ2V0LCBrZXkpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IGRlbGV0ZSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAnLSBqdXN0IHNldCBpdCB0byBudWxsLidcbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XTtcbiAgaWYgKCFvYikge1xuICAgIHJldHVyblxuICB9XG4gIG9iLmRlcC5ub3RpZnkoKTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICogd2UgY2Fubm90IGludGVyY2VwdCBhcnJheSBlbGVtZW50IGFjY2VzcyBsaWtlIHByb3BlcnR5IGdldHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICBmb3IgKHZhciBlID0gKHZvaWQgMCksIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZSA9IHZhbHVlW2ldO1xuICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBkZXBlbmRBcnJheShlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogT3B0aW9uIG92ZXJ3cml0aW5nIHN0cmF0ZWdpZXMgYXJlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZVxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICovXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICdjcmVhdGlvbiB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0U3RyYXQocGFyZW50LCBjaGlsZClcbiAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhICh0bywgZnJvbSkge1xuICBpZiAoIWZyb20pIHsgcmV0dXJuIHRvIH1cbiAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG5cbiAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICA/IFJlZmxlY3Qub3duS2V5cyhmcm9tKVxuICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICAvLyBpbiBjYXNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBvYnNlcnZlZC4uLlxuICAgIGlmIChrZXkgPT09ICdfX29iX18nKSB7IGNvbnRpbnVlIH1cbiAgICB0b1ZhbCA9IHRvW2tleV07XG4gICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICBpZiAoIWhhc093bih0bywga2V5KSkge1xuICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0b1ZhbCAhPT0gZnJvbVZhbCAmJlxuICAgICAgaXNQbGFpbk9iamVjdCh0b1ZhbCkgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbClcbiAgICApIHtcbiAgICAgIG1lcmdlRGF0YSh0b1ZhbCwgZnJvbVZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIC8vIGluIGEgVnVlLmV4dGVuZCBtZXJnZSwgYm90aCBzaG91bGQgYmUgZnVuY3Rpb25zXG4gICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgfVxuICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAvLyBtZXJnZWQgcmVzdWx0IG9mIGJvdGggZnVuY3Rpb25zLi4uIG5vIG5lZWQgdG9cbiAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkRGF0YUZuICgpIHtcbiAgICAgIHJldHVybiBtZXJnZURhdGEoXG4gICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGhpcykgOiBjaGlsZFZhbCxcbiAgICAgICAgdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbiAoKSB7XG4gICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0sIHZtKVxuICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgdmFyIGRlZmF1bHREYXRhID0gdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICBpZiAoaW5zdGFuY2VEYXRhKSB7XG4gICAgICAgIHJldHVybiBtZXJnZURhdGEoaW5zdGFuY2VEYXRhLCBkZWZhdWx0RGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm1cbikge1xuICBpZiAoIXZtKSB7XG4gICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAgICB2bVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsKVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pXG59O1xuXG4vKipcbiAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbFxuKSB7XG4gIHZhciByZXMgPSBjaGlsZFZhbFxuICAgID8gcGFyZW50VmFsXG4gICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgID8gY2hpbGRWYWxcbiAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgOiBwYXJlbnRWYWw7XG4gIHJldHVybiByZXNcbiAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICA6IHJlc1xufVxuXG5mdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5MSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICBzdHJhdHNbaG9va10gPSBtZXJnZUhvb2s7XG59KTtcblxuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICBpZiAoY2hpbGRWYWwpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSB7fTtcbiAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgZm9yICh2YXIga2V5JDEgaW4gY2hpbGRWYWwpIHtcbiAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZFZhbFtrZXkkMV07XG4gICAgaWYgKHBhcmVudCAmJiAhQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICB9XG4gICAgcmV0W2tleSQxXSA9IHBhcmVudFxuICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgfVxuICByZXR1cm4gcmV0XG59O1xuXG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG5zdHJhdHMubWV0aG9kcyA9XG5zdHJhdHMuaW5qZWN0ID1cbnN0cmF0cy5jb21wdXRlZCA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIGlmIChjaGlsZFZhbCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghbmV3IFJlZ0V4cCgoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUocHJvcHMpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9wdGlvbnMsIHZtKSB7XG4gIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgaWYgKCFpbmplY3QpIHsgcmV0dXJuIH1cbiAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYkJDEsIHVwZGF0ZTogZGVmJCQxIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gIH1cblxuICBub3JtYWxpemVQcm9wcyhjaGlsZCwgdm0pO1xuICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGlsZCk7XG5cbiAgLy8gQXBwbHkgZXh0ZW5kcyBhbmQgbWl4aW5zIG9uIHRoZSBjaGlsZCBvcHRpb25zLFxuICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgLy8gT25seSBtZXJnZWQgb3B0aW9ucyBoYXMgdGhlIF9iYXNlIHByb3BlcnR5LlxuICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgaWYgKGNoaWxkLmV4dGVuZHMpIHtcbiAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTtcbiAgICB9XG4gICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZC5taXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvcHRpb25zID0ge307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0eXBlLFxuICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNzZXRzW2lkXSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gIHZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1cbiAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBib29sZWFuIGNhc3RpbmdcbiAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIG9ic2VydmUodmFsdWUpO1xuICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gIH1cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAvLyBza2lwIHZhbGlkYXRpb24gZm9yIHdlZXggcmVjeWNsZS1saXN0IGNoaWxkIGNvbXBvbmVudCBwcm9wc1xuICAgICEoZmFsc2UpXG4gICkge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIHByb3AgXCInICsga2V5ICsgJ1wiOiAnICtcbiAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgaWYgKHZtICYmIHZtLiRvcHRpb25zLnByb3BzRGF0YSAmJlxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiB2bS5fcHJvcHNba2V5XVxuICB9XG4gIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gIC8vIGEgdmFsdWUgaXMgRnVuY3Rpb24gaWYgaXRzIHByb3RvdHlwZSBpcyBmdW5jdGlvbiBldmVuIGFjcm9zcyBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgPyBkZWYuY2FsbCh2bSlcbiAgICA6IGRlZlxufVxuXG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcCAoXG4gIHByb3AsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICB2bSxcbiAgYWJzZW50XG4pIHtcbiAgaWYgKHByb3AucmVxdWlyZWQgJiYgYWJzZW50KSB7XG4gICAgd2FybihcbiAgICAgICdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XG4gIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gIGlmICh0eXBlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlID0gW3R5cGVdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoICYmICF2YWxpZDsgaSsrKSB7XG4gICAgICB2YXIgYXNzZXJ0ZWRUeXBlID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZVtpXSk7XG4gICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICB9XG4gIH1cblxuICBpZiAoIXZhbGlkKSB7XG4gICAgd2FybihcbiAgICAgIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICBpZiAodmFsaWRhdG9yKSB7XG4gICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbmZ1bmN0aW9uIGFzc2VydFR5cGUgKHZhbHVlLCB0eXBlKSB7XG4gIHZhciB2YWxpZDtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgIHZhciB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgdmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB2YWxpZCxcbiAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICB9XG59XG5cbi8qKlxuICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICogYmVjYXVzZSBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjayB3aWxsIGZhaWwgd2hlbiBydW5uaW5nXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUgKGZuKSB7XG4gIHZhciBtYXRjaCA9IGZuICYmIGZuLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbn1cblxuZnVuY3Rpb24gaXNTYW1lVHlwZSAoYSwgYikge1xuICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlSW5kZXggKHR5cGUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgcmV0dXJuIGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlcywgdHlwZSkgPyAwIDogLTFcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXNbaV0sIHR5cGUpKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gLTFcbn1cblxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlIChuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICB2YXIgbWVzc2FnZSA9IFwiSW52YWxpZCBwcm9wOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLlwiICtcbiAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XG4gIHZhciByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciByZWNlaXZlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKTtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGVjdGVkIHZhbHVlXG4gIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XG4gICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgZXhwZWN0ZWRWYWx1ZTtcbiAgfVxuICBtZXNzYWdlICs9IFwiLCBnb3QgXCIgKyByZWNlaXZlZFR5cGUgKyBcIiBcIjtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IHJlY2VpdmVkIHZhbHVlXG4gIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCJ3aXRoIHZhbHVlIFwiICsgcmVjZWl2ZWRWYWx1ZSArIFwiLlwiO1xuICB9XG4gIHJldHVybiBtZXNzYWdlXG59XG5cbmZ1bmN0aW9uIHN0eWxlVmFsdWUgKHZhbHVlLCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgIHJldHVybiAoXCJcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgcmV0dXJuIChcIlwiICsgKE51bWJlcih2YWx1ZSkpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCJcIiArIHZhbHVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSAodmFsdWUpIHtcbiAgdmFyIGV4cGxpY2l0VHlwZXMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddO1xuICByZXR1cm4gZXhwbGljaXRUeXBlcy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KVxufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4gKCkge1xuICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHJldHVybiBhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGVsZW0udG9Mb3dlckNhc2UoKSA9PT0gJ2Jvb2xlYW4nOyB9KVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgLy8gRGVhY3RpdmF0ZSBkZXBzIHRyYWNraW5nIHdoaWxlIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxlciB0byBhdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSByZW5kZXJpbmcuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIGlmICh2bSkge1xuICAgICAgdmFyIGN1ciA9IHZtO1xuICAgICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgIGlmIChob29rcykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gaG9va3NbaV0uY2FsbChjdXIsIGVyciwgdm0sIGluZm8pID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHsgcmV0dXJuIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZSwgY3VyLCAnZXJyb3JDYXB0dXJlZCBob29rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nIChcbiAgaGFuZGxlcixcbiAgY29udGV4dCxcbiAgYXJncyxcbiAgdm0sXG4gIGluZm9cbikge1xuICB2YXIgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgIGlmIChyZXMgJiYgIXJlcy5faXNWdWUgJiYgaXNQcm9taXNlKHJlcykgJiYgIXJlcy5faGFuZGxlZCkge1xuICAgICAgcmVzLmNhdGNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyArIFwiIChQcm9taXNlL2FzeW5jKVwiKTsgfSk7XG4gICAgICAvLyBpc3N1ZSAjOTUxMVxuICAgICAgLy8gYXZvaWQgY2F0Y2ggdHJpZ2dlcmluZyBtdWx0aXBsZSB0aW1lcyB3aGVuIG5lc3RlZCBjYWxsc1xuICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAoY29uZmlnLmVycm9ySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWYgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB0aHJvd3MgdGhlIG9yaWdpbmFsIGVycm9yIGluIHRoZSBoYW5kbGVyLFxuICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgaWYgKGUgIT09IGVycikge1xuICAgICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG5cbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgdmFyIHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gSW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xuICBpc1VzaW5nTWljcm9UYXNrID0gdHJ1ZTtcbn0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgaXNOYXRpdmUoTXV0YXRpb25PYnNlcnZlcikgfHxcbiAgLy8gUGhhbnRvbUpTIGFuZCBpT1MgNy54XG4gIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbikpIHtcbiAgLy8gVXNlIE11dGF0aW9uT2JzZXJ2ZXIgd2hlcmUgbmF0aXZlIFByb21pc2UgaXMgbm90IGF2YWlsYWJsZSxcbiAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gIC8vICgjNjQ2NiBNdXRhdGlvbk9ic2VydmVyIGlzIHVucmVsaWFibGUgaW4gSUUxMSlcbiAgdmFyIGNvdW50ZXIgPSAxO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gIHZhciB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFN0cmluZyhjb3VudGVyKSk7XG4gIG9ic2VydmVyLm9ic2VydmUodGV4dE5vZGUsIHtcbiAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gIH0pO1xuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgIHRleHROb2RlLmRhdGEgPSBTdHJpbmcoY291bnRlcik7XG4gIH07XG4gIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xufSBlbHNlIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShzZXRJbW1lZGlhdGUpKSB7XG4gIC8vIEZhbGxiYWNrIHRvIHNldEltbWVkaWF0ZS5cbiAgLy8gVGVjaGluaWNhbGx5IGl0IGxldmVyYWdlcyB0aGUgKG1hY3JvKSB0YXNrIHF1ZXVlLFxuICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBGYWxsYmFjayB0byBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gIHZhciBfcmVzb2x2ZTtcbiAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCBjdHgsICduZXh0VGljaycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgfVxuICB9KTtcbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgcGVuZGluZyA9IHRydWU7XG4gICAgdGltZXJGdW5jKCk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSlcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbnZhciBpbml0UHJveHk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsJyArXG4gICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgKTtcblxuICB2YXIgd2Fybk5vblByZXNlbnQgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgJ3JlZmVyZW5jZWQgZHVyaW5nIHJlbmRlci4gTWFrZSBzdXJlIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyByZWFjdGl2ZSwgJyArXG4gICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvcmVhY3Rpdml0eS5odG1sI0RlY2xhcmluZy1SZWFjdGl2ZS1Qcm9wZXJ0aWVzLicsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciB3YXJuUmVzZXJ2ZWRQcmVmaXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIiArIGtleSArIFwiXFxcIiBiZWNhdXNlIFwiICtcbiAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXG4gICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9hcGkvI2RhdGEnLFxuICAgICAgdGFyZ2V0XG4gICAgKTtcbiAgfTtcblxuICB2YXIgaGFzUHJveHkgPVxuICAgIHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJveHkpO1xuXG4gIGlmIChoYXNQcm94eSkge1xuICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICBjb25maWcua2V5Q29kZXMgPSBuZXcgUHJveHkoY29uZmlnLmtleUNvZGVzLCB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCAodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgd2FybigoXCJBdm9pZCBvdmVyd3JpdGluZyBidWlsdC1pbiBtb2RpZmllciBpbiBjb25maWcua2V5Q29kZXM6IC5cIiArIGtleSkpO1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIGhhc0hhbmRsZXIgPSB7XG4gICAgaGFzOiBmdW5jdGlvbiBoYXMgKHRhcmdldCwga2V5KSB7XG4gICAgICB2YXIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgIHZhciBpc0FsbG93ZWQgPSBhbGxvd2VkR2xvYmFscyhrZXkpIHx8XG4gICAgICAgICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkuY2hhckF0KDApID09PSAnXycgJiYgIShrZXkgaW4gdGFyZ2V0LiRkYXRhKSk7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0LiRkYXRhKSB7IHdhcm5SZXNlcnZlZFByZWZpeCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhcyB8fCAhaXNBbGxvd2VkXG4gICAgfVxuICB9O1xuXG4gIHZhciBnZXRIYW5kbGVyID0ge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0ICh0YXJnZXQsIGtleSkge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICB9XG4gIH07XG5cbiAgaW5pdFByb3h5ID0gZnVuY3Rpb24gaW5pdFByb3h5ICh2bSkge1xuICAgIGlmIChoYXNQcm94eSkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIGhhbmRsZXJzID0gb3B0aW9ucy5yZW5kZXIgJiYgb3B0aW9ucy5yZW5kZXIuX3dpdGhTdHJpcHBlZFxuICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgOiBoYXNIYW5kbGVyO1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gbmV3IFByb3h5KHZtLCBoYW5kbGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gIF90cmF2ZXJzZSh2YWwsIHNlZW5PYmplY3RzKTtcbiAgc2Vlbk9iamVjdHMuY2xlYXIoKTtcbn1cblxuZnVuY3Rpb24gX3RyYXZlcnNlICh2YWwsIHNlZW4pIHtcbiAgdmFyIGksIGtleXM7XG4gIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gIGlmICgoIWlzQSAmJiAhaXNPYmplY3QodmFsKSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbCkgfHwgdmFsIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbnZhciBtYXJrO1xudmFyIG1lYXN1cmU7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBwZXJmID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChcbiAgICBwZXJmICYmXG4gICAgcGVyZi5tYXJrICYmXG4gICAgcGVyZi5tZWFzdXJlICYmXG4gICAgcGVyZi5jbGVhck1hcmtzICYmXG4gICAgcGVyZi5jbGVhck1lYXN1cmVzXG4gICkge1xuICAgIG1hcmsgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiBwZXJmLm1hcmsodGFnKTsgfTtcbiAgICBtZWFzdXJlID0gZnVuY3Rpb24gKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpIHtcbiAgICAgIHBlcmYubWVhc3VyZShuYW1lLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3MoZW5kVGFnKTtcbiAgICAgIC8vIHBlcmYuY2xlYXJNZWFzdXJlcyhuYW1lKVxuICAgIH07XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBub3JtYWxpemVFdmVudCA9IGNhY2hlZChmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgcGFzc2l2ZSA9IG5hbWUuY2hhckF0KDApID09PSAnJic7XG4gIG5hbWUgPSBwYXNzaXZlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHZhciBvbmNlJCQxID0gbmFtZS5jaGFyQXQoMCkgPT09ICd+JzsgLy8gUHJlZml4ZWQgbGFzdCwgY2hlY2tlZCBmaXJzdFxuICBuYW1lID0gb25jZSQkMSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICB2YXIgY2FwdHVyZSA9IG5hbWUuY2hhckF0KDApID09PSAnISc7XG4gIG5hbWUgPSBjYXB0dXJlID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBvbmNlOiBvbmNlJCQxLFxuICAgIGNhcHR1cmU6IGNhcHR1cmUsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9XG59KTtcblxuZnVuY3Rpb24gY3JlYXRlRm5JbnZva2VyIChmbnMsIHZtKSB7XG4gIGZ1bmN0aW9uIGludm9rZXIgKCkge1xuICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgIHZhciBmbnMgPSBpbnZva2VyLmZucztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbnMpKSB7XG4gICAgICB2YXIgY2xvbmVkID0gZm5zLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsb25lZC5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhjbG9uZWRbaV0sIG51bGwsIGFyZ3VtZW50cyQxLCB2bSwgXCJ2LW9uIGhhbmRsZXJcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBoYW5kbGVyIHJldHVybiB2YWx1ZSBmb3Igc2luZ2xlIGhhbmRsZXJzXG4gICAgICByZXR1cm4gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoZm5zLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKVxuICAgIH1cbiAgfVxuICBpbnZva2VyLmZucyA9IGZucztcbiAgcmV0dXJuIGludm9rZXJcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGlzdGVuZXJzIChcbiAgb24sXG4gIG9sZE9uLFxuICBhZGQsXG4gIHJlbW92ZSQkMSxcbiAgY3JlYXRlT25jZUhhbmRsZXIsXG4gIHZtXG4pIHtcbiAgdmFyIG5hbWUsIGRlZiQkMSwgY3VyLCBvbGQsIGV2ZW50O1xuICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICBkZWYkJDEgPSBjdXIgPSBvbltuYW1lXTtcbiAgICBvbGQgPSBvbGRPbltuYW1lXTtcbiAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgIGlmIChpc1VuZGVmKGN1cikpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIGhhbmRsZXIgZm9yIGV2ZW50IFxcXCJcIiArIChldmVudC5uYW1lKSArIFwiXFxcIjogZ290IFwiICsgU3RyaW5nKGN1ciksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4gICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZUZuSW52b2tlcihjdXIsIHZtKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1RydWUoZXZlbnQub25jZSkpIHtcbiAgICAgICAgY3VyID0gb25bbmFtZV0gPSBjcmVhdGVPbmNlSGFuZGxlcihldmVudC5uYW1lLCBjdXIsIGV2ZW50LmNhcHR1cmUpO1xuICAgICAgfVxuICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSwgZXZlbnQucGFyYW1zKTtcbiAgICB9IGVsc2UgaWYgKGN1ciAhPT0gb2xkKSB7XG4gICAgICBvbGQuZm5zID0gY3VyO1xuICAgICAgb25bbmFtZV0gPSBvbGQ7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBvbGRPbikge1xuICAgIGlmIChpc1VuZGVmKG9uW25hbWVdKSkge1xuICAgICAgZXZlbnQgPSBub3JtYWxpemVFdmVudChuYW1lKTtcbiAgICAgIHJlbW92ZSQkMShldmVudC5uYW1lLCBvbGRPbltuYW1lXSwgZXZlbnQuY2FwdHVyZSk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBtZXJnZVZOb2RlSG9vayAoZGVmLCBob29rS2V5LCBob29rKSB7XG4gIGlmIChkZWYgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIGRlZiA9IGRlZi5kYXRhLmhvb2sgfHwgKGRlZi5kYXRhLmhvb2sgPSB7fSk7XG4gIH1cbiAgdmFyIGludm9rZXI7XG4gIHZhciBvbGRIb29rID0gZGVmW2hvb2tLZXldO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWRIb29rICgpIHtcbiAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgLy8gaW1wb3J0YW50OiByZW1vdmUgbWVyZ2VkIGhvb2sgdG8gZW5zdXJlIGl0J3MgY2FsbGVkIG9ubHkgb25jZVxuICAgIC8vIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrXG4gICAgcmVtb3ZlKGludm9rZXIuZm5zLCB3cmFwcGVkSG9vayk7XG4gIH1cblxuICBpZiAoaXNVbmRlZihvbGRIb29rKSkge1xuICAgIC8vIG5vIGV4aXN0aW5nIGhvb2tcbiAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFt3cmFwcGVkSG9va10pO1xuICB9IGVsc2Uge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihvbGRIb29rLmZucykgJiYgaXNUcnVlKG9sZEhvb2subWVyZ2VkKSkge1xuICAgICAgLy8gYWxyZWFkeSBhIG1lcmdlZCBpbnZva2VyXG4gICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgIGludm9rZXIuZm5zLnB1c2god3JhcHBlZEhvb2spO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleGlzdGluZyBwbGFpbiBob29rXG4gICAgICBpbnZva2VyID0gY3JlYXRlRm5JbnZva2VyKFtvbGRIb29rLCB3cmFwcGVkSG9va10pO1xuICAgIH1cbiAgfVxuXG4gIGludm9rZXIubWVyZ2VkID0gdHJ1ZTtcbiAgZGVmW2hvb2tLZXldID0gaW52b2tlcjtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEgKFxuICBkYXRhLFxuICBDdG9yLFxuICB0YWdcbikge1xuICAvLyB3ZSBhcmUgb25seSBleHRyYWN0aW5nIHJhdyB2YWx1ZXMgaGVyZS5cbiAgLy8gdmFsaWRhdGlvbiBhbmQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGNoaWxkXG4gIC8vIGNvbXBvbmVudCBpdHNlbGYuXG4gIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzVW5kZWYocHJvcE9wdGlvbnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzO1xuICB2YXIgcHJvcHMgPSBkYXRhLnByb3BzO1xuICBpZiAoaXNEZWYoYXR0cnMpIHx8IGlzRGVmKHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIGtleUluTG93ZXJDYXNlID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgIT09IGtleUluTG93ZXJDYXNlICYmXG4gICAgICAgICAgYXR0cnMgJiYgaGFzT3duKGF0dHJzLCBrZXlJbkxvd2VyQ2FzZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGlwKFxuICAgICAgICAgICAgXCJQcm9wIFxcXCJcIiArIGtleUluTG93ZXJDYXNlICsgXCJcXFwiIGlzIHBhc3NlZCB0byBjb21wb25lbnQgXCIgK1xuICAgICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodGFnIHx8IEN0b3IpKSArIFwiLCBidXQgdGhlIGRlY2xhcmVkIHByb3AgbmFtZSBpc1wiICtcbiAgICAgICAgICAgIFwiIFxcXCJcIiArIGtleSArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgICAgXCJOb3RlIHRoYXQgSFRNTCBhdHRyaWJ1dGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBjYW1lbENhc2VkIFwiICtcbiAgICAgICAgICAgIFwicHJvcHMgbmVlZCB0byB1c2UgdGhlaXIga2ViYWItY2FzZSBlcXVpdmFsZW50cyB3aGVuIHVzaW5nIGluLURPTSBcIiArXG4gICAgICAgICAgICBcInRlbXBsYXRlcy4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgYWx0S2V5ICsgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2hlY2tQcm9wKHJlcywgcHJvcHMsIGtleSwgYWx0S2V5LCB0cnVlKSB8fFxuICAgICAgY2hlY2tQcm9wKHJlcywgYXR0cnMsIGtleSwgYWx0S2V5LCBmYWxzZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wIChcbiAgcmVzLFxuICBoYXNoLFxuICBrZXksXG4gIGFsdEtleSxcbiAgcHJlc2VydmVcbikge1xuICBpZiAoaXNEZWYoaGFzaCkpIHtcbiAgICBpZiAoaGFzT3duKGhhc2gsIGtleSkpIHtcbiAgICAgIHJlc1trZXldID0gaGFzaFtrZXldO1xuICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2UgaWYgKGhhc093bihoYXNoLCBhbHRLZXkpKSB7XG4gICAgICByZXNba2V5XSA9IGhhc2hbYWx0S2V5XTtcbiAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgZGVsZXRlIGhhc2hbYWx0S2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vKiAgKi9cblxuLy8gVGhlIHRlbXBsYXRlIGNvbXBpbGVyIGF0dGVtcHRzIHRvIG1pbmltaXplIHRoZSBuZWVkIGZvciBub3JtYWxpemF0aW9uIGJ5XG4vLyBzdGF0aWNhbGx5IGFuYWx5emluZyB0aGUgdGVtcGxhdGUgYXQgY29tcGlsZSB0aW1lLlxuLy9cbi8vIEZvciBwbGFpbiBIVE1MIG1hcmt1cCwgbm9ybWFsaXphdGlvbiBjYW4gYmUgY29tcGxldGVseSBza2lwcGVkIGJlY2F1c2UgdGhlXG4vLyBnZW5lcmF0ZWQgcmVuZGVyIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIEFycmF5PFZOb2RlPi4gVGhlcmUgYXJlXG4vLyB0d28gY2FzZXMgd2hlcmUgZXh0cmEgbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQ6XG5cbi8vIDEuIFdoZW4gdGhlIGNoaWxkcmVuIGNvbnRhaW5zIGNvbXBvbmVudHMgLSBiZWNhdXNlIGEgZnVuY3Rpb25hbCBjb21wb25lbnRcbi8vIG1heSByZXR1cm4gYW4gQXJyYXkgaW5zdGVhZCBvZiBhIHNpbmdsZSByb290LiBJbiB0aGlzIGNhc2UsIGp1c3QgYSBzaW1wbGVcbi8vIG5vcm1hbGl6YXRpb24gaXMgbmVlZGVkIC0gaWYgYW55IGNoaWxkIGlzIGFuIEFycmF5LCB3ZSBmbGF0dGVuIHRoZSB3aG9sZVxuLy8gdGhpbmcgd2l0aCBBcnJheS5wcm90b3R5cGUuY29uY2F0LiBJdCBpcyBndWFyYW50ZWVkIHRvIGJlIG9ubHkgMS1sZXZlbCBkZWVwXG4vLyBiZWNhdXNlIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhbHJlYWR5IG5vcm1hbGl6ZSB0aGVpciBvd24gY2hpbGRyZW4uXG5mdW5jdGlvbiBzaW1wbGVOb3JtYWxpemVDaGlsZHJlbiAoY2hpbGRyZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuW2ldKSkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGNoaWxkcmVuKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbi8vIGUuZy4gPHRlbXBsYXRlPiwgPHNsb3Q+LCB2LWZvciwgb3Igd2hlbiB0aGUgY2hpbGRyZW4gaXMgcHJvdmlkZWQgYnkgdXNlclxuLy8gd2l0aCBoYW5kLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucyAvIEpTWC4gSW4gc3VjaCBjYXNlcyBhIGZ1bGwgbm9ybWFsaXphdGlvblxuLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG5mdW5jdGlvbiBub3JtYWxpemVDaGlsZHJlbiAoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIGlzUHJpbWl0aXZlKGNoaWxkcmVuKVxuICAgID8gW2NyZWF0ZVRleHRWTm9kZShjaGlsZHJlbildXG4gICAgOiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKVxuICAgICAgPyBub3JtYWxpemVBcnJheUNoaWxkcmVuKGNoaWxkcmVuKVxuICAgICAgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gaXNUZXh0Tm9kZSAobm9kZSkge1xuICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheUNoaWxkcmVuIChjaGlsZHJlbiwgbmVzdGVkSW5kZXgpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICB2YXIgaSwgYywgbGFzdEluZGV4LCBsYXN0O1xuICBmb3IgKGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBjID0gY2hpbGRyZW5baV07XG4gICAgaWYgKGlzVW5kZWYoYykgfHwgdHlwZW9mIGMgPT09ICdib29sZWFuJykgeyBjb250aW51ZSB9XG4gICAgbGFzdEluZGV4ID0gcmVzLmxlbmd0aCAtIDE7XG4gICAgbGFzdCA9IHJlc1tsYXN0SW5kZXhdO1xuICAgIC8vICBuZXN0ZWRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjKSkge1xuICAgICAgaWYgKGMubGVuZ3RoID4gMCkge1xuICAgICAgICBjID0gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjLCAoKG5lc3RlZEluZGV4IHx8ICcnKSArIFwiX1wiICsgaSkpO1xuICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIGlmIChpc1RleHROb2RlKGNbMF0pICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyAoY1swXSkudGV4dCk7XG4gICAgICAgICAgYy5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoLmFwcGx5KHJlcywgYyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgaWYgKGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAvLyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgU1NSIGh5ZHJhdGlvbiBiZWNhdXNlIHRleHQgbm9kZXMgYXJlXG4gICAgICAgIC8vIGVzc2VudGlhbGx5IG1lcmdlZCB3aGVuIHJlbmRlcmVkIHRvIEhUTUwgc3RyaW5nc1xuICAgICAgICByZXNbbGFzdEluZGV4XSA9IGNyZWF0ZVRleHRWTm9kZShsYXN0LnRleHQgKyBjKTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgLy8gY29udmVydCBwcmltaXRpdmUgdG8gdm5vZGVcbiAgICAgICAgcmVzLnB1c2goY3JlYXRlVGV4dFZOb2RlKGMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzVGV4dE5vZGUoYykgJiYgaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMudGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtlbHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICBpZiAoaXNUcnVlKGNoaWxkcmVuLl9pc1ZMaXN0KSAmJlxuICAgICAgICAgIGlzRGVmKGMudGFnKSAmJlxuICAgICAgICAgIGlzVW5kZWYoYy5rZXkpICYmXG4gICAgICAgICAgaXNEZWYobmVzdGVkSW5kZXgpKSB7XG4gICAgICAgICAgYy5rZXkgPSBcIl9fdmxpc3RcIiArIG5lc3RlZEluZGV4ICsgXCJfXCIgKyBpICsgXCJfX1wiO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5wdXNoKGMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UHJvdmlkZSAodm0pIHtcbiAgdmFyIHByb3ZpZGUgPSB2bS4kb3B0aW9ucy5wcm92aWRlO1xuICBpZiAocHJvdmlkZSkge1xuICAgIHZtLl9wcm92aWRlZCA9IHR5cGVvZiBwcm92aWRlID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb3ZpZGUuY2FsbCh2bSlcbiAgICAgIDogcHJvdmlkZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0SW5qZWN0aW9ucyAodm0pIHtcbiAgdmFyIHJlc3VsdCA9IHJlc29sdmVJbmplY3Qodm0uJG9wdGlvbnMuaW5qZWN0LCB2bSk7XG4gIGlmIChyZXN1bHQpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICAgIE9iamVjdC5rZXlzKHJlc3VsdCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhbiBpbmplY3RlZCB2YWx1ZSBkaXJlY3RseSBzaW5jZSB0aGUgY2hhbmdlcyB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcImluamVjdGlvbiBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwga2V5LCByZXN1bHRba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVJbmplY3QgKGluamVjdCwgdm0pIHtcbiAgaWYgKGluamVjdCkge1xuICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICAgID8gUmVmbGVjdC5vd25LZXlzKGluamVjdClcbiAgICAgIDogT2JqZWN0LmtleXMoaW5qZWN0KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAvLyAjNjU3NCBpbiBjYXNlIHRoZSBpbmplY3Qgb2JqZWN0IGlzIG9ic2VydmVkLi4uXG4gICAgICBpZiAoa2V5ID09PSAnX19vYl9fJykgeyBjb250aW51ZSB9XG4gICAgICB2YXIgcHJvdmlkZUtleSA9IGluamVjdFtrZXldLmZyb207XG4gICAgICB2YXIgc291cmNlID0gdm07XG4gICAgICB3aGlsZSAoc291cmNlKSB7XG4gICAgICAgIGlmIChzb3VyY2UuX3Byb3ZpZGVkICYmIGhhc093bihzb3VyY2UuX3Byb3ZpZGVkLCBwcm92aWRlS2V5KSkge1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gc291cmNlLl9wcm92aWRlZFtwcm92aWRlS2V5XTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZS4kcGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgaWYgKCdkZWZhdWx0JyBpbiBpbmplY3Rba2V5XSkge1xuICAgICAgICAgIHZhciBwcm92aWRlRGVmYXVsdCA9IGluamVjdFtrZXldLmRlZmF1bHQ7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSB0eXBlb2YgcHJvdmlkZURlZmF1bHQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgID8gcHJvdmlkZURlZmF1bHQuY2FsbCh2bSlcbiAgICAgICAgICAgIDogcHJvdmlkZURlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm4oKFwiSW5qZWN0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBub3QgZm91bmRcIiksIHZtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuLyogICovXG5cblxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgcmF3IGNoaWxkcmVuIFZOb2RlcyBpbnRvIGEgc2xvdCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTbG90cyAoXG4gIGNoaWxkcmVuLFxuICBjb250ZXh0XG4pIHtcbiAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cbiAgdmFyIHNsb3RzID0ge307XG4gIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgdmFyIGRhdGEgPSBjaGlsZC5kYXRhO1xuICAgIC8vIHJlbW92ZSBzbG90IGF0dHJpYnV0ZSBpZiB0aGUgbm9kZSBpcyByZXNvbHZlZCBhcyBhIFZ1ZSBzbG90IG5vZGVcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMuc2xvdCkge1xuICAgICAgZGVsZXRlIGRhdGEuYXR0cnMuc2xvdDtcbiAgICB9XG4gICAgLy8gbmFtZWQgc2xvdHMgc2hvdWxkIG9ubHkgYmUgcmVzcGVjdGVkIGlmIHRoZSB2bm9kZSB3YXMgcmVuZGVyZWQgaW4gdGhlXG4gICAgLy8gc2FtZSBjb250ZXh0LlxuICAgIGlmICgoY2hpbGQuY29udGV4dCA9PT0gY29udGV4dCB8fCBjaGlsZC5mbkNvbnRleHQgPT09IGNvbnRleHQpICYmXG4gICAgICBkYXRhICYmIGRhdGEuc2xvdCAhPSBudWxsXG4gICAgKSB7XG4gICAgICB2YXIgbmFtZSA9IGRhdGEuc2xvdDtcbiAgICAgIHZhciBzbG90ID0gKHNsb3RzW25hbWVdIHx8IChzbG90c1tuYW1lXSA9IFtdKSk7XG4gICAgICBpZiAoY2hpbGQudGFnID09PSAndGVtcGxhdGUnKSB7XG4gICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbG90LnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAoc2xvdHMuZGVmYXVsdCB8fCAoc2xvdHMuZGVmYXVsdCA9IFtdKSkucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG4gIC8vIGlnbm9yZSBzbG90cyB0aGF0IGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZVxuICBmb3IgKHZhciBuYW1lJDEgaW4gc2xvdHMpIHtcbiAgICBpZiAoc2xvdHNbbmFtZSQxXS5ldmVyeShpc1doaXRlc3BhY2UpKSB7XG4gICAgICBkZWxldGUgc2xvdHNbbmFtZSQxXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNsb3RzXG59XG5cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAobm9kZSkge1xuICByZXR1cm4gKG5vZGUuaXNDb21tZW50ICYmICFub2RlLmFzeW5jRmFjdG9yeSkgfHwgbm9kZS50ZXh0ID09PSAnICdcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3RzIChcbiAgc2xvdHMsXG4gIG5vcm1hbFNsb3RzLFxuICBwcmV2U2xvdHNcbikge1xuICB2YXIgcmVzO1xuICB2YXIgaGFzTm9ybWFsU2xvdHMgPSBPYmplY3Qua2V5cyhub3JtYWxTbG90cykubGVuZ3RoID4gMDtcbiAgdmFyIGlzU3RhYmxlID0gc2xvdHMgPyAhIXNsb3RzLiRzdGFibGUgOiAhaGFzTm9ybWFsU2xvdHM7XG4gIHZhciBrZXkgPSBzbG90cyAmJiBzbG90cy4ka2V5O1xuICBpZiAoIXNsb3RzKSB7XG4gICAgcmVzID0ge307XG4gIH0gZWxzZSBpZiAoc2xvdHMuX25vcm1hbGl6ZWQpIHtcbiAgICAvLyBmYXN0IHBhdGggMTogY2hpbGQgY29tcG9uZW50IHJlLXJlbmRlciBvbmx5LCBwYXJlbnQgZGlkIG5vdCBjaGFuZ2VcbiAgICByZXR1cm4gc2xvdHMuX25vcm1hbGl6ZWRcbiAgfSBlbHNlIGlmIChcbiAgICBpc1N0YWJsZSAmJlxuICAgIHByZXZTbG90cyAmJlxuICAgIHByZXZTbG90cyAhPT0gZW1wdHlPYmplY3QgJiZcbiAgICBrZXkgPT09IHByZXZTbG90cy4ka2V5ICYmXG4gICAgIWhhc05vcm1hbFNsb3RzICYmXG4gICAgIXByZXZTbG90cy4kaGFzTm9ybWFsXG4gICkge1xuICAgIC8vIGZhc3QgcGF0aCAyOiBzdGFibGUgc2NvcGVkIHNsb3RzIHcvIG5vIG5vcm1hbCBzbG90cyB0byBwcm94eSxcbiAgICAvLyBvbmx5IG5lZWQgdG8gbm9ybWFsaXplIG9uY2VcbiAgICByZXR1cm4gcHJldlNsb3RzXG4gIH0gZWxzZSB7XG4gICAgcmVzID0ge307XG4gICAgZm9yICh2YXIga2V5JDEgaW4gc2xvdHMpIHtcbiAgICAgIGlmIChzbG90c1trZXkkMV0gJiYga2V5JDFbMF0gIT09ICckJykge1xuICAgICAgICByZXNba2V5JDFdID0gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5JDEsIHNsb3RzW2tleSQxXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGV4cG9zZSBub3JtYWwgc2xvdHMgb24gc2NvcGVkU2xvdHNcbiAgZm9yICh2YXIga2V5JDIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICBpZiAoIShrZXkkMiBpbiByZXMpKSB7XG4gICAgICByZXNba2V5JDJdID0gcHJveHlOb3JtYWxTbG90KG5vcm1hbFNsb3RzLCBrZXkkMik7XG4gICAgfVxuICB9XG4gIC8vIGF2b3JpYXogc2VlbXMgdG8gbW9jayBhIG5vbi1leHRlbnNpYmxlICRzY29wZWRTbG90cyBvYmplY3RcbiAgLy8gYW5kIHdoZW4gdGhhdCBpcyBwYXNzZWQgZG93biB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yXG4gIGlmIChzbG90cyAmJiBPYmplY3QuaXNFeHRlbnNpYmxlKHNsb3RzKSkge1xuICAgIChzbG90cykuX25vcm1hbGl6ZWQgPSByZXM7XG4gIH1cbiAgZGVmKHJlcywgJyRzdGFibGUnLCBpc1N0YWJsZSk7XG4gIGRlZihyZXMsICcka2V5Jywga2V5KTtcbiAgZGVmKHJlcywgJyRoYXNOb3JtYWwnLCBoYXNOb3JtYWxTbG90cyk7XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5LCBmbikge1xuICB2YXIgbm9ybWFsaXplZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzID0gYXJndW1lbnRzLmxlbmd0aCA/IGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cykgOiBmbih7fSk7XG4gICAgcmVzID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlcylcbiAgICAgID8gW3Jlc10gLy8gc2luZ2xlIHZub2RlXG4gICAgICA6IG5vcm1hbGl6ZUNoaWxkcmVuKHJlcyk7XG4gICAgcmV0dXJuIHJlcyAmJiAoXG4gICAgICByZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAocmVzLmxlbmd0aCA9PT0gMSAmJiByZXNbMF0uaXNDb21tZW50KSAvLyAjOTY1OFxuICAgICkgPyB1bmRlZmluZWRcbiAgICAgIDogcmVzXG4gIH07XG4gIC8vIHRoaXMgaXMgYSBzbG90IHVzaW5nIHRoZSBuZXcgdi1zbG90IHN5bnRheCB3aXRob3V0IHNjb3BlLiBhbHRob3VnaCBpdCBpc1xuICAvLyBjb21waWxlZCBhcyBhIHNjb3BlZCBzbG90LCByZW5kZXIgZm4gdXNlcnMgd291bGQgZXhwZWN0IGl0IHRvIGJlIHByZXNlbnRcbiAgLy8gb24gdGhpcy4kc2xvdHMgYmVjYXVzZSB0aGUgdXNhZ2UgaXMgc2VtYW50aWNhbGx5IGEgbm9ybWFsIHNsb3QuXG4gIGlmIChmbi5wcm94eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub3JtYWxTbG90cywga2V5LCB7XG4gICAgICBnZXQ6IG5vcm1hbGl6ZWQsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRcbn1cblxuZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNsb3RzW2tleV07IH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyB2LWZvciBsaXN0cy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyTGlzdCAoXG4gIHZhbCxcbiAgcmVuZGVyXG4pIHtcbiAgdmFyIHJldCwgaSwgbCwga2V5cywga2V5O1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGwgPSB2YWwubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgdmFsOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IHJlbmRlcihpICsgMSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXQgPSBbXTtcbiAgICAgIHZhciBpdGVyYXRvciA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoKSk7XG4gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFpc0RlZihyZXQpKSB7XG4gICAgcmV0ID0gW107XG4gIH1cbiAgKHJldCkuX2lzVkxpc3QgPSB0cnVlO1xuICByZXR1cm4gcmV0XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gKi9cbmZ1bmN0aW9uIHJlbmRlclNsb3QgKFxuICBuYW1lLFxuICBmYWxsYmFjayxcbiAgcHJvcHMsXG4gIGJpbmRPYmplY3Rcbikge1xuICB2YXIgc2NvcGVkU2xvdEZuID0gdGhpcy4kc2NvcGVkU2xvdHNbbmFtZV07XG4gIHZhciBub2RlcztcbiAgaWYgKHNjb3BlZFNsb3RGbikgeyAvLyBzY29wZWQgc2xvdFxuICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdzbG90IHYtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0JyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgfVxuICAgIG5vZGVzID0gc2NvcGVkU2xvdEZuKHByb3BzKSB8fCBmYWxsYmFjaztcbiAgfSBlbHNlIHtcbiAgICBub2RlcyA9IHRoaXMuJHNsb3RzW25hbWVdIHx8IGZhbGxiYWNrO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gIGlmICh0YXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy4kY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnLCB7IHNsb3Q6IHRhcmdldCB9LCBub2RlcylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9kZXNcbiAgfVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUZpbHRlciAoaWQpIHtcbiAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0KSkge1xuICAgIHJldHVybiBleHBlY3QuaW5kZXhPZihhY3R1YWwpID09PSAtMVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBleHBlY3QgIT09IGFjdHVhbFxuICB9XG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluS2V5Q29kZSxcbiAgZXZlbnRLZXlOYW1lLFxuICBidWlsdEluS2V5TmFtZVxuKSB7XG4gIHZhciBtYXBwZWRLZXlDb2RlID0gY29uZmlnLmtleUNvZGVzW2tleV0gfHwgYnVpbHRJbktleUNvZGU7XG4gIGlmIChidWlsdEluS2V5TmFtZSAmJiBldmVudEtleU5hbWUgJiYgIWNvbmZpZy5rZXlDb2Rlc1trZXldKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgfSBlbHNlIGlmIChtYXBwZWRLZXlDb2RlKSB7XG4gICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2gobWFwcGVkS2V5Q29kZSwgZXZlbnRLZXlDb2RlKVxuICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgIHJldHVybiBoeXBoZW5hdGUoZXZlbnRLZXlOYW1lKSAhPT0ga2V5XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAqL1xuZnVuY3Rpb24gYmluZE9iamVjdFByb3BzIChcbiAgZGF0YSxcbiAgdGFnLFxuICB2YWx1ZSxcbiAgYXNQcm9wLFxuICBpc1N5bmNcbikge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1iaW5kIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3Qgb3IgQXJyYXkgdmFsdWUnLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSB0b09iamVjdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgaGFzaDtcbiAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09ICdjbGFzcycgfHxcbiAgICAgICAgICBrZXkgPT09ICdzdHlsZScgfHxcbiAgICAgICAgICBpc1Jlc2VydmVkQXR0cmlidXRlKGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaGFzaCA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMudHlwZTtcbiAgICAgICAgICBoYXNoID0gYXNQcm9wIHx8IGNvbmZpZy5tdXN0VXNlUHJvcCh0YWcsIHR5cGUsIGtleSlcbiAgICAgICAgICAgID8gZGF0YS5kb21Qcm9wcyB8fCAoZGF0YS5kb21Qcm9wcyA9IHt9KVxuICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjYW1lbGl6ZWRLZXkgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICBpZiAoIShjYW1lbGl6ZWRLZXkgaW4gaGFzaCkgJiYgIShoeXBoZW5hdGVkS2V5IGluIGhhc2gpKSB7XG4gICAgICAgICAgaGFzaFtrZXldID0gdmFsdWVba2V5XTtcblxuICAgICAgICAgIGlmIChpc1N5bmMpIHtcbiAgICAgICAgICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gICAgICAgICAgICBvblsoXCJ1cGRhdGU6XCIgKyBrZXkpXSA9IGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgdmFsdWVba2V5XSA9ICRldmVudDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIGxvb3AoIGtleSApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU3RhdGljIChcbiAgaW5kZXgsXG4gIGlzSW5Gb3Jcbikge1xuICB2YXIgY2FjaGVkID0gdGhpcy5fc3RhdGljVHJlZXMgfHwgKHRoaXMuX3N0YXRpY1RyZWVzID0gW10pO1xuICB2YXIgdHJlZSA9IGNhY2hlZFtpbmRleF07XG4gIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxuICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZS5cbiAgaWYgKHRyZWUgJiYgIWlzSW5Gb3IpIHtcbiAgICByZXR1cm4gdHJlZVxuICB9XG4gIC8vIG90aGVyd2lzZSwgcmVuZGVyIGEgZnJlc2ggdHJlZS5cbiAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSB0aGlzLiRvcHRpb25zLnN0YXRpY1JlbmRlckZuc1tpbmRleF0uY2FsbChcbiAgICB0aGlzLl9yZW5kZXJQcm94eSxcbiAgICBudWxsLFxuICAgIHRoaXMgLy8gZm9yIHJlbmRlciBmbnMgZ2VuZXJhdGVkIGZvciBmdW5jdGlvbmFsIGNvbXBvbmVudCB0ZW1wbGF0ZXNcbiAgKTtcbiAgbWFya1N0YXRpYyh0cmVlLCAoXCJfX3N0YXRpY19fXCIgKyBpbmRleCksIGZhbHNlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3Igdi1vbmNlLlxuICogRWZmZWN0aXZlbHkgaXQgbWVhbnMgbWFya2luZyB0aGUgbm9kZSBhcyBzdGF0aWMgd2l0aCBhIHVuaXF1ZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIG1hcmtPbmNlIChcbiAgdHJlZSxcbiAgaW5kZXgsXG4gIGtleVxuKSB7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19vbmNlX19cIiArIGluZGV4ICsgKGtleSA/IChcIl9cIiArIGtleSkgOiBcIlwiKSksIHRydWUpO1xuICByZXR1cm4gdHJlZVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljIChcbiAgdHJlZSxcbiAga2V5LFxuICBpc09uY2Vcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheSh0cmVlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHJlZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRyZWVbaV0gJiYgdHlwZW9mIHRyZWVbaV0gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWVbaV0sIChrZXkgKyBcIl9cIiArIGkpLCBpc09uY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtYXJrU3RhdGljTm9kZSh0cmVlLCBrZXksIGlzT25jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpY05vZGUgKG5vZGUsIGtleSwgaXNPbmNlKSB7XG4gIG5vZGUuaXNTdGF0aWMgPSB0cnVlO1xuICBub2RlLmtleSA9IGtleTtcbiAgbm9kZS5pc09uY2UgPSBpc09uY2U7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBiaW5kT2JqZWN0TGlzdGVuZXJzIChkYXRhLCB2YWx1ZSkge1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICd2LW9uIHdpdGhvdXQgYXJndW1lbnQgZXhwZWN0cyBhbiBPYmplY3QgdmFsdWUnLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb24gPSBkYXRhLm9uID0gZGF0YS5vbiA/IGV4dGVuZCh7fSwgZGF0YS5vbikgOiB7fTtcbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSBvbltrZXldO1xuICAgICAgICB2YXIgb3VycyA9IHZhbHVlW2tleV07XG4gICAgICAgIG9uW2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgb3VycykgOiBvdXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVNjb3BlZFNsb3RzIChcbiAgZm5zLCAvLyBzZWUgZmxvdy92bm9kZVxuICByZXMsXG4gIC8vIHRoZSBmb2xsb3dpbmcgYXJlIGFkZGVkIGluIDIuNlxuICBoYXNEeW5hbWljS2V5cyxcbiAgY29udGVudEhhc2hLZXlcbikge1xuICByZXMgPSByZXMgfHwgeyAkc3RhYmxlOiAhaGFzRHluYW1pY0tleXMgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc2xvdCA9IGZuc1tpXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzbG90KSkge1xuICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xuICAgIH0gZWxzZSBpZiAoc2xvdCkge1xuICAgICAgLy8gbWFya2VyIGZvciByZXZlcnNlIHByb3h5aW5nIHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgICBpZiAoc2xvdC5wcm94eSkge1xuICAgICAgICBzbG90LmZuLnByb3h5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJlc1tzbG90LmtleV0gPSBzbG90LmZuO1xuICAgIH1cbiAgfVxuICBpZiAoY29udGVudEhhc2hLZXkpIHtcbiAgICAocmVzKS4ka2V5ID0gY29udGVudEhhc2hLZXk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzIChiYXNlT2JqLCB2YWx1ZXMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIga2V5ID0gdmFsdWVzW2ldO1xuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcbiAgICAgIGJhc2VPYmpbdmFsdWVzW2ldXSA9IHZhbHVlc1tpICsgMV07XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGtleSAhPT0gJycgJiYga2V5ICE9PSBudWxsKSB7XG4gICAgICAvLyBudWxsIGlzIGEgc3BlaWNhbCB2YWx1ZSBmb3IgZXhwbGljaXRseSByZW1vdmluZyBhIGJpbmRpbmdcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkludmFsaWQgdmFsdWUgZm9yIGR5bmFtaWMgZGlyZWN0aXZlIGFyZ3VtZW50IChleHBlY3RlZCBzdHJpbmcgb3IgbnVsbCk6IFwiICsga2V5KSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJhc2VPYmpcbn1cblxuLy8gaGVscGVyIHRvIGR5bmFtaWNhbGx5IGFwcGVuZCBtb2RpZmllciBydW50aW1lIG1hcmtlcnMgdG8gZXZlbnQgbmFtZXMuXG4vLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuLy8gdG8gc3RyaW5nIGFuZCBjYXVzZSB0aGUgdHlwZSBjaGVjayB0byBtaXNzLlxuZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyICh2YWx1ZSwgc3ltYm9sKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gc3ltYm9sICsgdmFsdWUgOiB2YWx1ZVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnMgKHRhcmdldCkge1xuICB0YXJnZXQuX28gPSBtYXJrT25jZTtcbiAgdGFyZ2V0Ll9uID0gdG9OdW1iZXI7XG4gIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICB0YXJnZXQuX2wgPSByZW5kZXJMaXN0O1xuICB0YXJnZXQuX3QgPSByZW5kZXJTbG90O1xuICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICB0YXJnZXQuX2kgPSBsb29zZUluZGV4T2Y7XG4gIHRhcmdldC5fbSA9IHJlbmRlclN0YXRpYztcbiAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgdGFyZ2V0Ll9rID0gY2hlY2tLZXlDb2RlcztcbiAgdGFyZ2V0Ll9iID0gYmluZE9iamVjdFByb3BzO1xuICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gIHRhcmdldC5fZSA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gIHRhcmdldC5fdSA9IHJlc29sdmVTY29wZWRTbG90cztcbiAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgdGFyZ2V0Ll9kID0gYmluZER5bmFtaWNLZXlzO1xuICB0YXJnZXQuX3AgPSBwcmVwZW5kTW9kaWZpZXI7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCAoXG4gIGRhdGEsXG4gIHByb3BzLFxuICBjaGlsZHJlbixcbiAgcGFyZW50LFxuICBDdG9yXG4pIHtcbiAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIC8vIGVuc3VyZSB0aGUgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiBpbiBmdW5jdGlvbmFsIGNvbXBvbmVudHNcbiAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICB2YXIgY29udGV4dFZtO1xuICBpZiAoaGFzT3duKHBhcmVudCwgJ191aWQnKSkge1xuICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICBjb250ZXh0Vm0uX29yaWdpbmFsID0gcGFyZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIHRoZSBjb250ZXh0IHZtIHBhc3NlZCBpbiBpcyBhIGZ1bmN0aW9uYWwgY29udGV4dCBhcyB3ZWxsLlxuICAgIC8vIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBhcmUgYWJsZSB0byBnZXQgYSBob2xkIHRvIHRoZVxuICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICBjb250ZXh0Vm0gPSBwYXJlbnQ7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgfVxuICB2YXIgaXNDb21waWxlZCA9IGlzVHJ1ZShvcHRpb25zLl9jb21waWxlZCk7XG4gIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5saXN0ZW5lcnMgPSBkYXRhLm9uIHx8IGVtcHR5T2JqZWN0O1xuICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICB0aGlzLnNsb3RzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcyQxLiRzbG90cykge1xuICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIGRhdGEuc2NvcGVkU2xvdHMsXG4gICAgICAgIHRoaXMkMS4kc2xvdHMgPSByZXNvbHZlU2xvdHMoY2hpbGRyZW4sIHBhcmVudClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzJDEuJHNsb3RzXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdzY29wZWRTbG90cycsICh7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy5zbG90cygpKVxuICAgIH1cbiAgfSkpO1xuXG4gIC8vIHN1cHBvcnQgZm9yIGNvbXBpbGVkIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGlzQ29tcGlsZWQpIHtcbiAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICB0aGlzLiRvcHRpb25zID0gb3B0aW9ucztcbiAgICAvLyBwcmUtcmVzb2x2ZSBzbG90cyBmb3IgcmVuZGVyU2xvdCgpXG4gICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgdGhpcy4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLiRzbG90cyk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgdmFyIHZub2RlID0gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTtcbiAgICAgIGlmICh2bm9kZSAmJiAhQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgdm5vZGUuZm5TY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcbiAgICAgICAgdm5vZGUuZm5Db250ZXh0ID0gcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZub2RlXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7IH07XG4gIH1cbn1cblxuaW5zdGFsbFJlbmRlckhlbHBlcnMoRnVuY3Rpb25hbFJlbmRlckNvbnRleHQucHJvdG90eXBlKTtcblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudCAoXG4gIEN0b3IsXG4gIHByb3BzRGF0YSxcbiAgZGF0YSxcbiAgY29udGV4dFZtLFxuICBjaGlsZHJlblxuKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIHByb3BPcHRpb25zID0gb3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgcHJvcHNba2V5XSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BPcHRpb25zLCBwcm9wc0RhdGEgfHwgZW1wdHlPYmplY3QpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoaXNEZWYoZGF0YS5hdHRycykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5hdHRycyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7IH1cbiAgfVxuXG4gIHZhciByZW5kZXJDb250ZXh0ID0gbmV3IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0KFxuICAgIGRhdGEsXG4gICAgcHJvcHMsXG4gICAgY2hpbGRyZW4sXG4gICAgY29udGV4dFZtLFxuICAgIEN0b3JcbiAgKTtcblxuICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuXG4gIGlmICh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSB7XG4gICAgcmV0dXJuIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGUsIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgdmFyIHZub2RlcyA9IG5vcm1hbGl6ZUNoaWxkcmVuKHZub2RlKSB8fCBbXTtcbiAgICB2YXIgcmVzID0gbmV3IEFycmF5KHZub2Rlcy5sZW5ndGgpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXNbaV0gPSBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2Rlc1tpXSwgZGF0YSwgcmVuZGVyQ29udGV4dC5wYXJlbnQsIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCAodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAvLyAjNzgxNyBjbG9uZSBub2RlIGJlZm9yZSBzZXR0aW5nIGZuQ29udGV4dCwgb3RoZXJ3aXNlIGlmIHRoZSBub2RlIGlzIHJldXNlZFxuICAvLyAoZS5nLiBpdCB3YXMgZnJvbSBhIGNhY2hlZCBub3JtYWwgc2xvdCkgdGhlIGZuQ29udGV4dCBjYXVzZXMgbmFtZWQgc2xvdHNcbiAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gIHZhciBjbG9uZSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICBjbG9uZS5mbkNvbnRleHQgPSBjb250ZXh0Vm07XG4gIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9IHJlbmRlckNvbnRleHQ7XG4gIH1cbiAgaWYgKGRhdGEuc2xvdCkge1xuICAgIChjbG9uZS5kYXRhIHx8IChjbG9uZS5kYXRhID0ge30pKS5zbG90ID0gZGF0YS5zbG90O1xuICB9XG4gIHJldHVybiBjbG9uZVxufVxuXG5mdW5jdGlvbiBtZXJnZVByb3BzICh0bywgZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuICAgIHRvW2NhbWVsaXplKGtleSldID0gZnJvbVtrZXldO1xuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vLyBpbmxpbmUgaG9va3MgdG8gYmUgaW52b2tlZCBvbiBjb21wb25lbnQgVk5vZGVzIGR1cmluZyBwYXRjaFxudmFyIGNvbXBvbmVudFZOb2RlSG9va3MgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQgKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICBpZiAoXG4gICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJlxuICAgICAgIXZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCAmJlxuICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmVcbiAgICApIHtcbiAgICAgIC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgdmFyIG1vdW50ZWROb2RlID0gdm5vZGU7IC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgIGNvbXBvbmVudFZOb2RlSG9va3MucHJlcGF0Y2gobW91bnRlZE5vZGUsIG1vdW50ZWROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKFxuICAgICAgICB2bm9kZSxcbiAgICAgICAgYWN0aXZlSW5zdGFuY2VcbiAgICAgICk7XG4gICAgICBjaGlsZC4kbW91bnQoaHlkcmF0aW5nID8gdm5vZGUuZWxtIDogdW5kZWZpbmVkLCBoeWRyYXRpbmcpO1xuICAgIH1cbiAgfSxcblxuICBwcmVwYXRjaDogZnVuY3Rpb24gcHJlcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IG9sZFZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIHVwZGF0ZUNoaWxkQ29tcG9uZW50KFxuICAgICAgY2hpbGQsXG4gICAgICBvcHRpb25zLnByb3BzRGF0YSwgLy8gdXBkYXRlZCBwcm9wc1xuICAgICAgb3B0aW9ucy5saXN0ZW5lcnMsIC8vIHVwZGF0ZWQgbGlzdGVuZXJzXG4gICAgICB2bm9kZSwgLy8gbmV3IHBhcmVudCB2bm9kZVxuICAgICAgb3B0aW9ucy5jaGlsZHJlbiAvLyBuZXcgY2hpbGRyZW5cbiAgICApO1xuICB9LFxuXG4gIGluc2VydDogZnVuY3Rpb24gaW5zZXJ0ICh2bm9kZSkge1xuICAgIHZhciBjb250ZXh0ID0gdm5vZGUuY29udGV4dDtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQpIHtcbiAgICAgIGNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgY2FsbEhvb2soY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgfVxuICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAvLyB2dWUtcm91dGVyIzEyMTJcbiAgICAgICAgLy8gRHVyaW5nIHVwZGF0ZXMsIGEga2VwdC1hbGl2ZSBjb21wb25lbnQncyBjaGlsZCBjb21wb25lbnRzIG1heVxuICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgLy8gb24gaW5jb3JyZWN0IGNoaWxkcmVuLiBJbnN0ZWFkIHdlIHB1c2ggdGhlbSBpbnRvIGEgcXVldWUgd2hpY2ggd2lsbFxuICAgICAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHdob2xlIHBhdGNoIHByb2Nlc3MgZW5kZWQuXG4gICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAoXG4gIEN0b3IsXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICBpZiAoaXNVbmRlZihDdG9yKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcblxuICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcbiAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgfVxuXG4gIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgLy8gcmVqZWN0LlxuICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybigoXCJJbnZhbGlkIENvbXBvbmVudCBkZWZpbml0aW9uOiBcIiArIChTdHJpbmcoQ3RvcikpKSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gYXN5bmMgY29tcG9uZW50XG4gIHZhciBhc3luY0ZhY3Rvcnk7XG4gIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgQ3RvciA9IHJlc29sdmVBc3luY0NvbXBvbmVudChhc3luY0ZhY3RvcnksIGJhc2VDdG9yKTtcbiAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICBhc3luY0ZhY3RvcnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB0YWdcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBkYXRhIGludG8gcHJvcHMgJiBldmVudHNcbiAgaWYgKGlzRGVmKGRhdGEubW9kZWwpKSB7XG4gICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgfVxuXG4gIC8vIGV4dHJhY3QgcHJvcHNcbiAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcblxuICAvLyBmdW5jdGlvbmFsIGNvbXBvbmVudFxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5mdW5jdGlvbmFsKSkge1xuICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pXG4gIH1cblxuICAvLyBleHRyYWN0IGxpc3RlbmVycywgc2luY2UgdGhlc2UgbmVlZHMgdG8gYmUgdHJlYXRlZCBhc1xuICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICB2YXIgbGlzdGVuZXJzID0gZGF0YS5vbjtcbiAgLy8gcmVwbGFjZSB3aXRoIGxpc3RlbmVycyB3aXRoIC5uYXRpdmUgbW9kaWZpZXJcbiAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gIGRhdGEub24gPSBkYXRhLm5hdGl2ZU9uO1xuXG4gIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmFic3RyYWN0KSkge1xuICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAvLyBvdGhlciB0aGFuIHByb3BzICYgbGlzdGVuZXJzICYgc2xvdFxuXG4gICAgLy8gd29yayBhcm91bmQgZmxvd1xuICAgIHZhciBzbG90ID0gZGF0YS5zbG90O1xuICAgIGRhdGEgPSB7fTtcbiAgICBpZiAoc2xvdCkge1xuICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICB9XG4gIH1cblxuICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgaW5zdGFsbENvbXBvbmVudEhvb2tzKGRhdGEpO1xuXG4gIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIHZub2RlXG4gIHZhciBuYW1lID0gQ3Rvci5vcHRpb25zLm5hbWUgfHwgdGFnO1xuICB2YXIgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgKFwidnVlLWNvbXBvbmVudC1cIiArIChDdG9yLmNpZCkgKyAobmFtZSA/IChcIi1cIiArIG5hbWUpIDogJycpKSxcbiAgICBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LFxuICAgIHsgQ3RvcjogQ3RvciwgcHJvcHNEYXRhOiBwcm9wc0RhdGEsIGxpc3RlbmVyczogbGlzdGVuZXJzLCB0YWc6IHRhZywgY2hpbGRyZW46IGNoaWxkcmVuIH0sXG4gICAgYXN5bmNGYWN0b3J5XG4gICk7XG5cbiAgcmV0dXJuIHZub2RlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUgKFxuICB2bm9kZSwgLy8gd2Uga25vdyBpdCdzIE1vdW50ZWRDb21wb25lbnRWTm9kZSBidXQgZmxvdyBkb2Vzbid0XG4gIHBhcmVudCAvLyBhY3RpdmVJbnN0YW5jZSBpbiBsaWZlY3ljbGUgc3RhdGVcbikge1xuICB2YXIgb3B0aW9ucyA9IHtcbiAgICBfaXNDb21wb25lbnQ6IHRydWUsXG4gICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICBwYXJlbnQ6IHBhcmVudFxuICB9O1xuICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICB2YXIgaW5saW5lVGVtcGxhdGUgPSB2bm9kZS5kYXRhLmlubGluZVRlbXBsYXRlO1xuICBpZiAoaXNEZWYoaW5saW5lVGVtcGxhdGUpKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBpbmxpbmVUZW1wbGF0ZS5yZW5kZXI7XG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBpbmxpbmVUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnM7XG4gIH1cbiAgcmV0dXJuIG5ldyB2bm9kZS5jb21wb25lbnRPcHRpb25zLkN0b3Iob3B0aW9ucylcbn1cblxuZnVuY3Rpb24gaW5zdGFsbENvbXBvbmVudEhvb2tzIChkYXRhKSB7XG4gIHZhciBob29rcyA9IGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzVG9NZXJnZS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBob29rc1RvTWVyZ2VbaV07XG4gICAgdmFyIGV4aXN0aW5nID0gaG9va3Nba2V5XTtcbiAgICB2YXIgdG9NZXJnZSA9IGNvbXBvbmVudFZOb2RlSG9va3Nba2V5XTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IHRvTWVyZ2UgJiYgIShleGlzdGluZyAmJiBleGlzdGluZy5fbWVyZ2VkKSkge1xuICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rJDEodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VIb29rJDEgKGYxLCBmMikge1xuICB2YXIgbWVyZ2VkID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAvLyBmbG93IGNvbXBsYWlucyBhYm91dCBleHRyYSBhcmdzIHdoaWNoIGlzIHdoeSB3ZSB1c2UgYW55XG4gICAgZjEoYSwgYik7XG4gICAgZjIoYSwgYik7XG4gIH07XG4gIG1lcmdlZC5fbWVyZ2VkID0gdHJ1ZTtcbiAgcmV0dXJuIG1lcmdlZFxufVxuXG4vLyB0cmFuc2Zvcm0gY29tcG9uZW50IHYtbW9kZWwgaW5mbyAodmFsdWUgYW5kIGNhbGxiYWNrKSBpbnRvXG4vLyBwcm9wIGFuZCBldmVudCBoYW5kbGVyIHJlc3BlY3RpdmVseS5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsIChvcHRpb25zLCBkYXRhKSB7XG4gIHZhciBwcm9wID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5wcm9wKSB8fCAndmFsdWUnO1xuICB2YXIgZXZlbnQgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLmV2ZW50KSB8fCAnaW5wdXQnXG4gIDsoZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KSlbcHJvcF0gPSBkYXRhLm1vZGVsLnZhbHVlO1xuICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICB2YXIgZXhpc3RpbmcgPSBvbltldmVudF07XG4gIHZhciBjYWxsYmFjayA9IGRhdGEubW9kZWwuY2FsbGJhY2s7XG4gIGlmIChpc0RlZihleGlzdGluZykpIHtcbiAgICBpZiAoXG4gICAgICBBcnJheS5pc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICA/IGV4aXN0aW5nLmluZGV4T2YoY2FsbGJhY2spID09PSAtMVxuICAgICAgICA6IGV4aXN0aW5nICE9PSBjYWxsYmFja1xuICAgICkge1xuICAgICAgb25bZXZlbnRdID0gW2NhbGxiYWNrXS5jb25jYXQoZXhpc3RpbmcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvbltldmVudF0gPSBjYWxsYmFjaztcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuXG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxuLy8gd2l0aG91dCBnZXR0aW5nIHllbGxlZCBhdCBieSBmbG93XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50IChcbiAgY29udGV4dCxcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgbm9ybWFsaXphdGlvblR5cGUsXG4gIGFsd2F5c05vcm1hbGl6ZVxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcbiAgICBjaGlsZHJlbiA9IGRhdGE7XG4gICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXNUcnVlKGFsd2F5c05vcm1hbGl6ZSkpIHtcbiAgICBub3JtYWxpemF0aW9uVHlwZSA9IEFMV0FZU19OT1JNQUxJWkU7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlXG4pIHtcbiAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKChkYXRhKS5fX29iX18pKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCJBdm9pZCB1c2luZyBvYnNlcnZlZCBkYXRhIG9iamVjdCBhcyB2bm9kZSBkYXRhOiBcIiArIChKU09OLnN0cmluZ2lmeShkYXRhKSkgKyBcIlxcblwiICtcbiAgICAgICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIG9iamVjdCBzeW50YXggaW4gdi1iaW5kXG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgIHRhZyA9IGRhdGEuaXM7XG4gIH1cbiAgaWYgKCF0YWcpIHtcbiAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpXG4gICkge1xuICAgIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdBdm9pZCB1c2luZyBub24tcHJpbWl0aXZlIHZhbHVlIGFzIGtleSwgJyArXG4gICAgICAgICd1c2Ugc3RyaW5nL251bWJlciB2YWx1ZSBpbnN0ZWFkLicsXG4gICAgICAgIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vIHN1cHBvcnQgc2luZ2xlIGZ1bmN0aW9uIGNoaWxkcmVuIGFzIGRlZmF1bHQgc2NvcGVkIHNsb3RcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgfVxuICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfSBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICB9XG4gIHZhciB2bm9kZSwgbnM7XG4gIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgIHZhciBDdG9yO1xuICAgIG5zID0gKGNvbnRleHQuJHZub2RlICYmIGNvbnRleHQuJHZub2RlLm5zKSB8fCBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1lbnRzXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCghZGF0YSB8fCAhZGF0YS5wcmUpICYmIGlzRGVmKEN0b3IgPSByZXNvbHZlQXNzZXQoY29udGV4dC4kb3B0aW9ucywgJ2NvbXBvbmVudHMnLCB0YWcpKSkge1xuICAgICAgLy8gY29tcG9uZW50XG4gICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAvLyBjaGVjayBhdCBydW50aW1lIGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICB0YWcsIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudCh0YWcsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIGlmIChpc0RlZih2bm9kZSkpIHtcbiAgICBpZiAoaXNEZWYobnMpKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgIGlmIChpc0RlZihkYXRhKSkgeyByZWdpc3RlckRlZXBCaW5kaW5ncyhkYXRhKTsgfVxuICAgIHJldHVybiB2bm9kZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseU5TICh2bm9kZSwgbnMsIGZvcmNlKSB7XG4gIHZub2RlLm5zID0gbnM7XG4gIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIHVzZSBkZWZhdWx0IG5hbWVzcGFjZSBpbnNpZGUgZm9yZWlnbk9iamVjdFxuICAgIG5zID0gdW5kZWZpbmVkO1xuICAgIGZvcmNlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXNEZWYodm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiYgKFxuICAgICAgICBpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgYXBwbHlOUyhjaGlsZCwgbnMsIGZvcmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gcmVmICM1MzE4XG4vLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHBhcmVudCByZS1yZW5kZXIgd2hlbiBkZWVwIGJpbmRpbmdzIGxpa2UgOnN0eWxlIGFuZFxuLy8gOmNsYXNzIGFyZSB1c2VkIG9uIHNsb3Qgbm9kZXNcbmZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzIChkYXRhKSB7XG4gIGlmIChpc09iamVjdChkYXRhLnN0eWxlKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuc3R5bGUpO1xuICB9XG4gIGlmIChpc09iamVjdChkYXRhLmNsYXNzKSkge1xuICAgIHRyYXZlcnNlKGRhdGEuY2xhc3MpO1xuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xuICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICB2bS5fc3RhdGljVHJlZXMgPSBudWxsOyAvLyB2LW9uY2UgY2FjaGVkIHRyZWVzXG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gIHZhciBwYXJlbnRWbm9kZSA9IHZtLiR2bm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlOyAvLyB0aGUgcGxhY2Vob2xkZXIgbm9kZSBpbiBwYXJlbnQgdHJlZVxuICB2YXIgcmVuZGVyQ29udGV4dCA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmNvbnRleHQ7XG4gIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gIHZtLiRzY29wZWRTbG90cyA9IGVtcHR5T2JqZWN0O1xuICAvLyBiaW5kIHRoZSBjcmVhdGVFbGVtZW50IGZuIHRvIHRoaXMgaW5zdGFuY2VcbiAgLy8gc28gdGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgLy8gYXJncyBvcmRlcjogdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUsIGFsd2F5c05vcm1hbGl6ZVxuICAvLyBpbnRlcm5hbCB2ZXJzaW9uIGlzIHVzZWQgYnkgcmVuZGVyIGZ1bmN0aW9ucyBjb21waWxlZCBmcm9tIHRlbXBsYXRlc1xuICB2bS5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gIC8vIG5vcm1hbGl6YXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgZm9yIHRoZSBwdWJsaWMgdmVyc2lvbiwgdXNlZCBpblxuICAvLyB1c2VyLXdyaXR0ZW4gcmVuZGVyIGZ1bmN0aW9ucy5cbiAgdm0uJGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG5cbiAgLy8gJGF0dHJzICYgJGxpc3RlbmVycyBhcmUgZXhwb3NlZCBmb3IgZWFzaWVyIEhPQyBjcmVhdGlvbi5cbiAgLy8gdGhleSBuZWVkIHRvIGJlIHJlYWN0aXZlIHNvIHRoYXQgSE9DcyB1c2luZyB0aGVtIGFyZSBhbHdheXMgdXBkYXRlZFxuICB2YXIgcGFyZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRhdHRycycsIHBhcmVudERhdGEgJiYgcGFyZW50RGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGF0dHJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckbGlzdGVuZXJzJywgb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAhaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ICYmIHdhcm4oXCIkbGlzdGVuZXJzIGlzIHJlYWRvbmx5LlwiLCB2bSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgbnVsbCwgdHJ1ZSk7XG4gIH1cbn1cblxudmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5cbmZ1bmN0aW9uIHJlbmRlck1peGluIChWdWUpIHtcbiAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgVnVlLnByb3RvdHlwZS4kbmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgIHZhciBfcGFyZW50Vm5vZGUgPSByZWYuX3BhcmVudFZub2RlO1xuXG4gICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgdm0uJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgIF9wYXJlbnRWbm9kZS5kYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB2bS4kc2xvdHMsXG4gICAgICAgIHZtLiRzY29wZWRTbG90c1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBzZXQgcGFyZW50IHZub2RlLiB0aGlzIGFsbG93cyByZW5kZXIgZnVuY3Rpb25zIHRvIGhhdmUgYWNjZXNzXG4gICAgLy8gdG8gdGhlIGRhdGEgb24gdGhlIHBsYWNlaG9sZGVyIG5vZGUuXG4gICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgIC8vIHJlbmRlciBzZWxmXG4gICAgdmFyIHZub2RlO1xuICAgIHRyeSB7XG4gICAgICAvLyBUaGVyZSdzIG5vIG5lZWQgdG8gbWFpbnRhaW4gYSBzdGFjayBiZWNhdWVzIGFsbCByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHNlcGFyYXRlbHkgZnJvbSBvbmUgYW5vdGhlci4gTmVzdGVkIGNvbXBvbmVudCdzIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSB2bTtcbiAgICAgIHZub2RlID0gcmVuZGVyLmNhbGwodm0uX3JlbmRlclByb3h5LCB2bS4kY3JlYXRlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyXCIpO1xuICAgICAgLy8gcmV0dXJuIGVycm9yIHJlbmRlciByZXN1bHQsXG4gICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIFwicmVuZGVyRXJyb3JcIik7XG4gICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgcmV0dXJuZWQgYXJyYXkgY29udGFpbnMgb25seSBhIHNpbmdsZSBub2RlLCBhbGxvdyBpdFxuICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSAmJiB2bm9kZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZub2RlID0gdm5vZGVbMF07XG4gICAgfVxuICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICBpZiAoISh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2bm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcmVudFxuICAgIHZub2RlLnBhcmVudCA9IF9wYXJlbnRWbm9kZTtcbiAgICByZXR1cm4gdm5vZGVcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVuc3VyZUN0b3IgKGNvbXAsIGJhc2UpIHtcbiAgaWYgKFxuICAgIGNvbXAuX19lc01vZHVsZSB8fFxuICAgIChoYXNTeW1ib2wgJiYgY29tcFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJylcbiAgKSB7XG4gICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QoY29tcClcbiAgICA/IGJhc2UuZXh0ZW5kKGNvbXApXG4gICAgOiBjb21wXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIgKFxuICBmYWN0b3J5LFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgdmFyIG5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gIG5vZGUuYXN5bmNGYWN0b3J5ID0gZmFjdG9yeTtcbiAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgcmV0dXJuIG5vZGVcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50IChcbiAgZmFjdG9yeSxcbiAgYmFzZUN0b3Jcbikge1xuICBpZiAoaXNUcnVlKGZhY3RvcnkuZXJyb3IpICYmIGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmVycm9yQ29tcFxuICB9XG5cbiAgaWYgKGlzRGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxuXG4gIHZhciBvd25lciA9IGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZTtcbiAgaWYgKG93bmVyICYmIGlzRGVmKGZhY3Rvcnkub3duZXJzKSAmJiBmYWN0b3J5Lm93bmVycy5pbmRleE9mKG93bmVyKSA9PT0gLTEpIHtcbiAgICAvLyBhbHJlYWR5IHBlbmRpbmdcbiAgICBmYWN0b3J5Lm93bmVycy5wdXNoKG93bmVyKTtcbiAgfVxuXG4gIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihmYWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdDb21wXG4gIH1cblxuICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xuICAgIHZhciBvd25lcnMgPSBmYWN0b3J5Lm93bmVycyA9IFtvd25lcl07XG4gICAgdmFyIHN5bmMgPSB0cnVlO1xuICAgIHZhciB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgIHZhciB0aW1lclRpbWVvdXQgPSBudWxsXG5cbiAgICA7KG93bmVyKS4kb24oJ2hvb2s6ZGVzdHJveWVkJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlKG93bmVycywgb3duZXIpOyB9KTtcblxuICAgIHZhciBmb3JjZVJlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gb3duZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAob3duZXJzW2ldKS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlbmRlckNvbXBsZXRlZCkge1xuICAgICAgICBvd25lcnMubGVuZ3RoID0gMDtcbiAgICAgICAgaWYgKHRpbWVyTG9hZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lckxvYWRpbmcpO1xuICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVyVGltZW91dCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lclRpbWVvdXQpO1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIC8vIGNhY2hlIHJlc29sdmVkXG4gICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgIC8vIGludm9rZSBjYWxsYmFja3Mgb25seSBpZiB0aGlzIGlzIG5vdCBhIHN5bmNocm9ub3VzIHJlc29sdmVcbiAgICAgIC8vIChhc3luYyByZXNvbHZlcyBhcmUgc2hpbW1lZCBhcyBzeW5jaHJvbm91cyBkdXJpbmcgU1NSKVxuICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50OiBcIiArIChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgKHJlYXNvbiA/IChcIlxcblJlYXNvbjogXCIgKyByZWFzb24pIDogJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVzID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgaWYgKGlzT2JqZWN0KHJlcykpIHtcbiAgICAgIGlmIChpc1Byb21pc2UocmVzKSkge1xuICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1Byb21pc2UocmVzLmNvbXBvbmVudCkpIHtcbiAgICAgICAgcmVzLmNvbXBvbmVudC50aGVuKHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICBmYWN0b3J5LmVycm9yQ29tcCA9IGVuc3VyZUN0b3IocmVzLmVycm9yLCBiYXNlQ3Rvcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgZmFjdG9yeS5sb2FkaW5nQ29tcCA9IGVuc3VyZUN0b3IocmVzLmxvYWRpbmcsIGJhc2VDdG9yKTtcbiAgICAgICAgICBpZiAocmVzLmRlbGF5ID09PSAwKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkgJiYgaXNVbmRlZihmYWN0b3J5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGZhY3RvcnkubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoZmFsc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZXMuZGVsYXkgfHwgMjAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWYocmVzLnRpbWVvdXQpKSB7XG4gICAgICAgICAgdGltZXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgICAgICAgICAgID8gKFwidGltZW91dCAoXCIgKyAocmVzLnRpbWVvdXQpICsgXCJtcylcIilcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHJlcy50aW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHN5bmMgPSBmYWxzZTtcbiAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ1xuICAgICAgPyBmYWN0b3J5LmxvYWRpbmdDb21wXG4gICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaXNBc3luY1BsYWNlaG9sZGVyIChub2RlKSB7XG4gIHJldHVybiBub2RlLmlzQ29tbWVudCAmJiBub2RlLmFzeW5jRmFjdG9yeVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCAoY2hpbGRyZW4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgIHJldHVybiBjXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEV2ZW50cyAodm0pIHtcbiAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZtLl9oYXNIb29rRXZlbnQgPSBmYWxzZTtcbiAgLy8gaW5pdCBwYXJlbnQgYXR0YWNoZWQgZXZlbnRzXG4gIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBpZiAobGlzdGVuZXJzKSB7XG4gICAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMpO1xuICB9XG59XG5cbnZhciB0YXJnZXQ7XG5cbmZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4kb24oZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9mZihldmVudCwgZm4pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoZXZlbnQsIGZuKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0O1xuICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIF90YXJnZXQuJG9mZihldmVudCwgb25jZUhhbmRsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMgKFxuICB2bSxcbiAgbGlzdGVuZXJzLFxuICBvbGRMaXN0ZW5lcnNcbikge1xuICB0YXJnZXQgPSB2bTtcbiAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pO1xuICB0YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgdmFyIGhvb2tSRSA9IC9eaG9vazovO1xuICBWdWUucHJvdG90eXBlLiRvbiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgLy8gb3B0aW1pemUgaG9vazpldmVudCBjb3N0IGJ5IHVzaW5nIGEgYm9vbGVhbiBmbGFnIG1hcmtlZCBhdCByZWdpc3RyYXRpb25cbiAgICAgIC8vIGluc3RlYWQgb2YgYSBoYXNoIGxvb2t1cFxuICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICB2bS5faGFzSG9va0V2ZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGZ1bmN0aW9uIG9uICgpIHtcbiAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgIGZuLmFwcGx5KHZtLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgICBvbi5mbiA9IGZuO1xuICAgIHZtLiRvbihldmVudCwgb24pO1xuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9mZiA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGFsbFxuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gYXJyYXkgb2YgZXZlbnRzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICBmb3IgKHZhciBpJDEgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpJDEgPCBsOyBpJDErKykge1xuICAgICAgICB2bS4kb2ZmKGV2ZW50W2kkMV0sIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoIWNicykge1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIGlmICghZm4pIHtcbiAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgdmFyIGNiO1xuICAgIHZhciBpID0gY2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjYiA9IGNic1tpXTtcbiAgICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICB0aXAoXG4gICAgICAgICAgXCJFdmVudCBcXFwiXCIgKyBsb3dlckNhc2VFdmVudCArIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgIFwidi1vbiB0byBsaXN0ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIFwiICtcbiAgICAgICAgICBcIllvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIChoeXBoZW5hdGUoZXZlbnQpKSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoY2JzKSB7XG4gICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcbiAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgdmFyIGluZm8gPSBcImV2ZW50IGhhbmRsZXIgZm9yIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiXCI7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2JzW2ldLCB2bSwgYXJncywgdm0sIGluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNldEFjdGl2ZUluc3RhbmNlKHZtKSB7XG4gIHZhciBwcmV2QWN0aXZlSW5zdGFuY2UgPSBhY3RpdmVJbnN0YW5jZTtcbiAgYWN0aXZlSW5zdGFuY2UgPSB2bTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBhY3RpdmVJbnN0YW5jZSA9IHByZXZBY3RpdmVJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0TGlmZWN5Y2xlICh2bSkge1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuXG4gIC8vIGxvY2F0ZSBmaXJzdCBub24tYWJzdHJhY3QgcGFyZW50XG4gIHZhciBwYXJlbnQgPSBvcHRpb25zLnBhcmVudDtcbiAgaWYgKHBhcmVudCAmJiAhb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcbiAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgIH1cbiAgICBwYXJlbnQuJGNoaWxkcmVuLnB1c2godm0pO1xuICB9XG5cbiAgdm0uJHBhcmVudCA9IHBhcmVudDtcbiAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcblxuICB2bS4kY2hpbGRyZW4gPSBbXTtcbiAgdm0uJHJlZnMgPSB7fTtcblxuICB2bS5fd2F0Y2hlciA9IG51bGw7XG4gIHZtLl9pbmFjdGl2ZSA9IG51bGw7XG4gIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IGZhbHNlO1xuICB2bS5faXNNb3VudGVkID0gZmFsc2U7XG4gIHZtLl9pc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICB2bS5faXNCZWluZ0Rlc3Ryb3llZCA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsaWZlY3ljbGVNaXhpbiAoVnVlKSB7XG4gIFZ1ZS5wcm90b3R5cGUuX3VwZGF0ZSA9IGZ1bmN0aW9uICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICB2YXIgcHJldkVsID0gdm0uJGVsO1xuICAgIHZhciBwcmV2Vm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHZtKTtcbiAgICB2bS5fdm5vZGUgPSB2bm9kZTtcbiAgICAvLyBWdWUucHJvdG90eXBlLl9fcGF0Y2hfXyBpcyBpbmplY3RlZCBpbiBlbnRyeSBwb2ludHNcbiAgICAvLyBiYXNlZCBvbiB0aGUgcmVuZGVyaW5nIGJhY2tlbmQgdXNlZC5cbiAgICBpZiAoIXByZXZWbm9kZSkge1xuICAgICAgLy8gaW5pdGlhbCByZW5kZXJcbiAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGVzXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XG4gICAgfVxuICAgIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSgpO1xuICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmIChwcmV2RWwpIHtcbiAgICAgIHByZXZFbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHZtLiRlbCkge1xuICAgICAgdm0uJGVsLl9fdnVlX18gPSB2bTtcbiAgICB9XG4gICAgLy8gaWYgcGFyZW50IGlzIGFuIEhPQywgdXBkYXRlIGl0cyAkZWwgYXMgd2VsbFxuICAgIGlmICh2bS4kdm5vZGUgJiYgdm0uJHBhcmVudCAmJiB2bS4kdm5vZGUgPT09IHZtLiRwYXJlbnQuX3Zub2RlKSB7XG4gICAgICB2bS4kcGFyZW50LiRlbCA9IHZtLiRlbDtcbiAgICB9XG4gICAgLy8gdXBkYXRlZCBob29rIGlzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyIHRvIGVuc3VyZSB0aGF0IGNoaWxkcmVuIGFyZVxuICAgIC8vIHVwZGF0ZWQgaW4gYSBwYXJlbnQncyB1cGRhdGVkIGhvb2suXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnVwZGF0ZSgpO1xuICAgIH1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRkZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVEZXN0cm95Jyk7XG4gICAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IHZtLiRwYXJlbnQ7XG4gICAgaWYgKHBhcmVudCAmJiAhcGFyZW50Ll9pc0JlaW5nRGVzdHJveWVkICYmICF2bS4kb3B0aW9ucy5hYnN0cmFjdCkge1xuICAgICAgcmVtb3ZlKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICB9XG4gICAgLy8gdGVhcmRvd24gd2F0Y2hlcnNcbiAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgIHZtLl93YXRjaGVyLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIHZhciBpID0gdm0uX3dhdGNoZXJzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2bS5fd2F0Y2hlcnNbaV0udGVhcmRvd24oKTtcbiAgICB9XG4gICAgLy8gcmVtb3ZlIHJlZmVyZW5jZSBmcm9tIGRhdGEgb2JcbiAgICAvLyBmcm96ZW4gb2JqZWN0IG1heSBub3QgaGF2ZSBvYnNlcnZlci5cbiAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICB2bS5fZGF0YS5fX29iX18udm1Db3VudC0tO1xuICAgIH1cbiAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAgICB2bS5faXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIC8vIGludm9rZSBkZXN0cm95IGhvb2tzIG9uIGN1cnJlbnQgcmVuZGVyZWQgdHJlZVxuICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwpO1xuICAgIC8vIGZpcmUgZGVzdHJveWVkIGhvb2tcbiAgICBjYWxsSG9vayh2bSwgJ2Rlc3Ryb3llZCcpO1xuICAgIC8vIHR1cm4gb2ZmIGFsbCBpbnN0YW5jZSBsaXN0ZW5lcnMuXG4gICAgdm0uJG9mZigpO1xuICAgIC8vIHJlbW92ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gbnVsbDtcbiAgICB9XG4gICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxuICAgIGlmICh2bS4kdm5vZGUpIHtcbiAgICAgIHZtLiR2bm9kZS5wYXJlbnQgPSBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbW91bnRDb21wb25lbnQgKFxuICB2bSxcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIHZtLiRlbCA9IGVsO1xuICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xuICAgIHZtLiRvcHRpb25zLnJlbmRlciA9IGNyZWF0ZUVtcHR5Vk5vZGU7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCh2bS4kb3B0aW9ucy50ZW1wbGF0ZSAmJiB2bS4kb3B0aW9ucy50ZW1wbGF0ZS5jaGFyQXQoMCkgIT09ICcjJykgfHxcbiAgICAgICAgdm0uJG9wdGlvbnMuZWwgfHwgZWwpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnWW91IGFyZSB1c2luZyB0aGUgcnVudGltZS1vbmx5IGJ1aWxkIG9mIFZ1ZSB3aGVyZSB0aGUgdGVtcGxhdGUgJyArXG4gICAgICAgICAgJ2NvbXBpbGVyIGlzIG5vdCBhdmFpbGFibGUuIEVpdGhlciBwcmUtY29tcGlsZSB0aGUgdGVtcGxhdGVzIGludG8gJyArXG4gICAgICAgICAgJ3JlbmRlciBmdW5jdGlvbnMsIG9yIHVzZSB0aGUgY29tcGlsZXItaW5jbHVkZWQgYnVpbGQuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnRmFpbGVkIHRvIG1vdW50IGNvbXBvbmVudDogdGVtcGxhdGUgb3IgcmVuZGVyIGZ1bmN0aW9uIG5vdCBkZWZpbmVkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2FsbEhvb2sodm0sICdiZWZvcmVNb3VudCcpO1xuXG4gIHZhciB1cGRhdGVDb21wb25lbnQ7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBuYW1lID0gdm0uX25hbWU7XG4gICAgICB2YXIgaWQgPSB2bS5fdWlkO1xuICAgICAgdmFyIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArIGlkO1xuICAgICAgdmFyIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgaWQ7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyBuYW1lICsgXCIgcmVuZGVyXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcblxuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICB2bS5fdXBkYXRlKHZub2RlLCBoeWRyYXRpbmcpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyBuYW1lICsgXCIgcGF0Y2hcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdm0uX3VwZGF0ZSh2bS5fcmVuZGVyKCksIGh5ZHJhdGluZyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIHdlIHNldCB0aGlzIHRvIHZtLl93YXRjaGVyIGluc2lkZSB0aGUgd2F0Y2hlcidzIGNvbnN0cnVjdG9yXG4gIC8vIHNpbmNlIHRoZSB3YXRjaGVyJ3MgaW5pdGlhbCBwYXRjaCBtYXkgY2FsbCAkZm9yY2VVcGRhdGUgKGUuZy4gaW5zaWRlIGNoaWxkXG4gIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcbiAgbmV3IFdhdGNoZXIodm0sIHVwZGF0ZUNvbXBvbmVudCwgbm9vcCwge1xuICAgIGJlZm9yZTogZnVuY3Rpb24gYmVmb3JlICgpIHtcbiAgICAgIGlmICh2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgY2FsbEhvb2sodm0sICdiZWZvcmVVcGRhdGUnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHRydWUgLyogaXNSZW5kZXJXYXRjaGVyICovKTtcbiAgaHlkcmF0aW5nID0gZmFsc2U7XG5cbiAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZcbiAgLy8gbW91bnRlZCBpcyBjYWxsZWQgZm9yIHJlbmRlci1jcmVhdGVkIGNoaWxkIGNvbXBvbmVudHMgaW4gaXRzIGluc2VydGVkIGhvb2tcbiAgaWYgKHZtLiR2bm9kZSA9PSBudWxsKSB7XG4gICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgY2FsbEhvb2sodm0sICdtb3VudGVkJyk7XG4gIH1cbiAgcmV0dXJuIHZtXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50IChcbiAgdm0sXG4gIHByb3BzRGF0YSxcbiAgbGlzdGVuZXJzLFxuICBwYXJlbnRWbm9kZSxcbiAgcmVuZGVyQ2hpbGRyZW5cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICAvLyBkZXRlcm1pbmUgd2hldGhlciBjb21wb25lbnQgaGFzIHNsb3QgY2hpbGRyZW5cbiAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBvdmVyd3JpdGluZyAkb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4uXG5cbiAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAvLyBkeW5hbWljIHNsb3QgbmFtZXMpLiBTdGF0aWMgc2NvcGVkIHNsb3RzIGNvbXBpbGVkIGZyb20gdGVtcGxhdGUgaGFzIHRoZVxuICAvLyBcIiRzdGFibGVcIiBtYXJrZXIuXG4gIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gIHZhciBvbGRTY29wZWRTbG90cyA9IHZtLiRzY29wZWRTbG90cztcbiAgdmFyIGhhc0R5bmFtaWNTY29wZWRTbG90ID0gISEoXG4gICAgKG5ld1Njb3BlZFNsb3RzICYmICFuZXdTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChvbGRTY29wZWRTbG90cyAhPT0gZW1wdHlPYmplY3QgJiYgIW9sZFNjb3BlZFNsb3RzLiRzdGFibGUpIHx8XG4gICAgKG5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5ICE9PSBuZXdTY29wZWRTbG90cy4ka2V5KVxuICApO1xuXG4gIC8vIEFueSBzdGF0aWMgc2xvdCBjaGlsZHJlbiBmcm9tIHRoZSBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgcGFyZW50J3NcbiAgLy8gdXBkYXRlLiBEeW5hbWljIHNjb3BlZCBzbG90cyBtYXkgYWxzbyBoYXZlIGNoYW5nZWQuIEluIHN1Y2ggY2FzZXMsIGEgZm9yY2VkXG4gIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICB2YXIgbmVlZHNGb3JjZVVwZGF0ZSA9ICEhKFxuICAgIHJlbmRlckNoaWxkcmVuIHx8ICAgICAgICAgICAgICAgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcbiAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgIC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4gICAgaGFzRHluYW1pY1Njb3BlZFNsb3RcbiAgKTtcblxuICB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcbiAgdm0uJHZub2RlID0gcGFyZW50Vm5vZGU7IC8vIHVwZGF0ZSB2bSdzIHBsYWNlaG9sZGVyIG5vZGUgd2l0aG91dCByZS1yZW5kZXJcblxuICBpZiAodm0uX3Zub2RlKSB7IC8vIHVwZGF0ZSBjaGlsZCB0cmVlJ3MgcGFyZW50XG4gICAgdm0uX3Zub2RlLnBhcmVudCA9IHBhcmVudFZub2RlO1xuICB9XG4gIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuXG4gIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAvLyB0aGVzZSBhcmUgYWxzbyByZWFjdGl2ZSBzbyB0aGV5IG1heSB0cmlnZ2VyIGNoaWxkIHVwZGF0ZSBpZiB0aGUgY2hpbGRcbiAgLy8gdXNlZCB0aGVtIGR1cmluZyByZW5kZXJcbiAgdm0uJGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgdm0uJGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcblxuICAvLyB1cGRhdGUgcHJvcHNcbiAgaWYgKHByb3BzRGF0YSAmJiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgdmFyIHByb3BzID0gdm0uX3Byb3BzO1xuICAgIHZhciBwcm9wS2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyB8fCBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgIH1cbiAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YSA9IHByb3BzRGF0YTtcbiAgfVxuXG4gIC8vIHVwZGF0ZSBsaXN0ZW5lcnNcbiAgbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuICB2YXIgb2xkTGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyA9IGxpc3RlbmVycztcbiAgdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzKHZtLCBsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyk7XG5cbiAgLy8gcmVzb2x2ZSBzbG90cyArIGZvcmNlIHVwZGF0ZSBpZiBoYXMgY2hpbGRyZW5cbiAgaWYgKG5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMocmVuZGVyQ2hpbGRyZW4sIHBhcmVudFZub2RlLmNvbnRleHQpO1xuICAgIHZtLiRmb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luSW5hY3RpdmVUcmVlICh2bSkge1xuICB3aGlsZSAodm0gJiYgKHZtID0gdm0uJHBhcmVudCkpIHtcbiAgICBpZiAodm0uX2luYWN0aXZlKSB7IHJldHVybiB0cnVlIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgaWYgKGlzSW5JbmFjdGl2ZVRyZWUodm0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodm0uX2RpcmVjdEluYWN0aXZlKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHZtLl9pbmFjdGl2ZSB8fCB2bS5faW5hY3RpdmUgPT09IG51bGwpIHtcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2FjdGl2YXRlZCcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICBpZiAoZGlyZWN0KSB7XG4gICAgdm0uX2RpcmVjdEluYWN0aXZlID0gdHJ1ZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuICBpZiAoIXZtLl9pbmFjdGl2ZSkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCh2bS4kY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgICBjYWxsSG9vayh2bSwgJ2RlYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbEhvb2sgKHZtLCBob29rKSB7XG4gIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBsaWZlY3ljbGUgaG9va3NcbiAgcHVzaFRhcmdldCgpO1xuICB2YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgdmFyIGluZm8gPSBob29rICsgXCIgaG9va1wiO1xuICBpZiAoaGFuZGxlcnMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBudWxsLCB2bSwgaW5mbyk7XG4gICAgfVxuICB9XG4gIGlmICh2bS5faGFzSG9va0V2ZW50KSB7XG4gICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xuICB9XG4gIHBvcFRhcmdldCgpO1xufVxuXG4vKiAgKi9cblxudmFyIE1BWF9VUERBVEVfQ09VTlQgPSAxMDA7XG5cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG52YXIgaGFzID0ge307XG52YXIgY2lyY3VsYXIgPSB7fTtcbnZhciB3YWl0aW5nID0gZmFsc2U7XG52YXIgZmx1c2hpbmcgPSBmYWxzZTtcbnZhciBpbmRleCA9IDA7XG5cbi8qKlxuICogUmVzZXQgdGhlIHNjaGVkdWxlcidzIHN0YXRlLlxuICovXG5mdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlICgpIHtcbiAgaW5kZXggPSBxdWV1ZS5sZW5ndGggPSBhY3RpdmF0ZWRDaGlsZHJlbi5sZW5ndGggPSAwO1xuICBoYXMgPSB7fTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjaXJjdWxhciA9IHt9O1xuICB9XG4gIHdhaXRpbmcgPSBmbHVzaGluZyA9IGZhbHNlO1xufVxuXG4vLyBBc3luYyBlZGdlIGNhc2UgIzY1NjYgcmVxdWlyZXMgc2F2aW5nIHRoZSB0aW1lc3RhbXAgd2hlbiBldmVudCBsaXN0ZW5lcnMgYXJlXG4vLyBhdHRhY2hlZC4gSG93ZXZlciwgY2FsbGluZyBwZXJmb3JtYW5jZS5ub3coKSBoYXMgYSBwZXJmIG92ZXJoZWFkIGVzcGVjaWFsbHlcbi8vIGlmIHRoZSBwYWdlIGhhcyB0aG91c2FuZHMgb2YgZXZlbnQgbGlzdGVuZXJzLiBJbnN0ZWFkLCB3ZSB0YWtlIGEgdGltZXN0YW1wXG4vLyBldmVyeSB0aW1lIHRoZSBzY2hlZHVsZXIgZmx1c2hlcyBhbmQgdXNlIHRoYXQgZm9yIGFsbCBldmVudCBsaXN0ZW5lcnNcbi8vIGF0dGFjaGVkIGR1cmluZyB0aGF0IGZsdXNoLlxudmFyIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IDA7XG5cbi8vIEFzeW5jIGVkZ2UgY2FzZSBmaXggcmVxdWlyZXMgc3RvcmluZyBhbiBldmVudCBsaXN0ZW5lcidzIGF0dGFjaCB0aW1lc3RhbXAuXG52YXIgZ2V0Tm93ID0gRGF0ZS5ub3c7XG5cbi8vIERldGVybWluZSB3aGF0IGV2ZW50IHRpbWVzdGFtcCB0aGUgYnJvd3NlciBpcyB1c2luZy4gQW5ub3lpbmdseSwgdGhlXG4vLyB0aW1lc3RhbXAgY2FuIGVpdGhlciBiZSBoaS1yZXMgKHJlbGF0aXZlIHRvIHBhZ2UgbG9hZCkgb3IgbG93LXJlc1xuLy8gKHJlbGF0aXZlIHRvIFVOSVggZXBvY2gpLCBzbyBpbiBvcmRlciB0byBjb21wYXJlIHRpbWUgd2UgaGF2ZSB0byB1c2UgdGhlXG4vLyBzYW1lIHRpbWVzdGFtcCB0eXBlIHdoZW4gc2F2aW5nIHRoZSBmbHVzaCB0aW1lc3RhbXAuXG4vLyBBbGwgSUUgdmVyc2lvbnMgdXNlIGxvdy1yZXMgZXZlbnQgdGltZXN0YW1wcywgYW5kIGhhdmUgcHJvYmxlbWF0aWMgY2xvY2tcbi8vIGltcGxlbWVudGF0aW9ucyAoIzk2MzIpXG5pZiAoaW5Ccm93c2VyICYmICFpc0lFKSB7XG4gIHZhciBwZXJmb3JtYW5jZSA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgaWYgKFxuICAgIHBlcmZvcm1hbmNlICYmXG4gICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIGdldE5vdygpID4gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50JykudGltZVN0YW1wXG4gICkge1xuICAgIC8vIGlmIHRoZSBldmVudCB0aW1lc3RhbXAsIGFsdGhvdWdoIGV2YWx1YXRlZCBBRlRFUiB0aGUgRGF0ZS5ub3coKSwgaXNcbiAgICAvLyBzbWFsbGVyIHRoYW4gaXQsIGl0IG1lYW5zIHRoZSBldmVudCBpcyB1c2luZyBhIGhpLXJlcyB0aW1lc3RhbXAsXG4gICAgLy8gYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBoaS1yZXMgdmVyc2lvbiBmb3IgZXZlbnQgbGlzdGVuZXIgdGltZXN0YW1wcyBhc1xuICAgIC8vIHdlbGwuXG4gICAgZ2V0Tm93ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7IH07XG4gIH1cbn1cblxuLyoqXG4gKiBGbHVzaCBib3RoIHF1ZXVlcyBhbmQgcnVuIHRoZSB3YXRjaGVycy5cbiAqL1xuZnVuY3Rpb24gZmx1c2hTY2hlZHVsZXJRdWV1ZSAoKSB7XG4gIGN1cnJlbnRGbHVzaFRpbWVzdGFtcCA9IGdldE5vdygpO1xuICBmbHVzaGluZyA9IHRydWU7XG4gIHZhciB3YXRjaGVyLCBpZDtcblxuICAvLyBTb3J0IHF1ZXVlIGJlZm9yZSBmbHVzaC5cbiAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gIC8vIDEuIENvbXBvbmVudHMgYXJlIHVwZGF0ZWQgZnJvbSBwYXJlbnQgdG8gY2hpbGQuIChiZWNhdXNlIHBhcmVudCBpcyBhbHdheXNcbiAgLy8gICAgY3JlYXRlZCBiZWZvcmUgdGhlIGNoaWxkKVxuICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gIC8vICAgIHVzZXIgd2F0Y2hlcnMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSByZW5kZXIgd2F0Y2hlcilcbiAgLy8gMy4gSWYgYSBjb21wb25lbnQgaXMgZGVzdHJveWVkIGR1cmluZyBhIHBhcmVudCBjb21wb25lbnQncyB3YXRjaGVyIHJ1bixcbiAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICBxdWV1ZS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhLmlkIC0gYi5pZDsgfSk7XG5cbiAgLy8gZG8gbm90IGNhY2hlIGxlbmd0aCBiZWNhdXNlIG1vcmUgd2F0Y2hlcnMgbWlnaHQgYmUgcHVzaGVkXG4gIC8vIGFzIHdlIHJ1biBleGlzdGluZyB3YXRjaGVyc1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBxdWV1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICB3YXRjaGVyID0gcXVldWVbaW5kZXhdO1xuICAgIGlmICh3YXRjaGVyLmJlZm9yZSkge1xuICAgICAgd2F0Y2hlci5iZWZvcmUoKTtcbiAgICB9XG4gICAgaWQgPSB3YXRjaGVyLmlkO1xuICAgIGhhc1tpZF0gPSBudWxsO1xuICAgIHdhdGNoZXIucnVuKCk7XG4gICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArIChcbiAgICAgICAgICAgIHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gIHZhciB1cGRhdGVkUXVldWUgPSBxdWV1ZS5zbGljZSgpO1xuXG4gIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3RpdmF0ZWQgaG9va3NcbiAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gIC8vIGRldnRvb2wgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyAocXVldWUpIHtcbiAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgd2F0Y2hlciA9IHF1ZXVlW2ldO1xuICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgY2FsbEhvb2sodm0sICd1cGRhdGVkJyk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICogVGhlIHF1ZXVlIHdpbGwgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiBwYXRjaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCAodm0pIHtcbiAgLy8gc2V0dGluZyBfaW5hY3RpdmUgdG8gZmFsc2UgaGVyZSBzbyB0aGF0IGEgcmVuZGVyIGZ1bmN0aW9uIGNhblxuICAvLyByZWx5IG9uIGNoZWNraW5nIHdoZXRoZXIgaXQncyBpbiBhbiBpbmFjdGl2ZSB0cmVlIChlLmcuIHJvdXRlci12aWV3KVxuICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgYWN0aXZhdGVkQ2hpbGRyZW4ucHVzaCh2bSk7XG59XG5cbmZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyAocXVldWUpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgIHF1ZXVlW2ldLl9pbmFjdGl2ZSA9IHRydWU7XG4gICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgfVxufVxuXG4vKipcbiAqIFB1c2ggYSB3YXRjaGVyIGludG8gdGhlIHdhdGNoZXIgcXVldWUuXG4gKiBKb2JzIHdpdGggZHVwbGljYXRlIElEcyB3aWxsIGJlIHNraXBwZWQgdW5sZXNzIGl0J3NcbiAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICovXG5mdW5jdGlvbiBxdWV1ZVdhdGNoZXIgKHdhdGNoZXIpIHtcbiAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgaWYgKGhhc1tpZF0gPT0gbnVsbCkge1xuICAgIGhhc1tpZF0gPSB0cnVlO1xuICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgIHF1ZXVlLnB1c2god2F0Y2hlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIGFscmVhZHkgZmx1c2hpbmcsIHNwbGljZSB0aGUgd2F0Y2hlciBiYXNlZCBvbiBpdHMgaWRcbiAgICAgIC8vIGlmIGFscmVhZHkgcGFzdCBpdHMgaWQsIGl0IHdpbGwgYmUgcnVuIG5leHQgaW1tZWRpYXRlbHkuXG4gICAgICB2YXIgaSA9IHF1ZXVlLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaSA+IGluZGV4ICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgIH1cbiAgICAvLyBxdWV1ZSB0aGUgZmx1c2hcbiAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgIHdhaXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgICAgIGZsdXNoU2NoZWR1bGVyUXVldWUoKTtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBuZXh0VGljayhmbHVzaFNjaGVkdWxlclF1ZXVlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cblxuXG52YXIgdWlkJDIgPSAwO1xuXG4vKipcbiAqIEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxuICogYW5kIGZpcmVzIGNhbGxiYWNrIHdoZW4gdGhlIGV4cHJlc3Npb24gdmFsdWUgY2hhbmdlcy5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgYm90aCB0aGUgJHdhdGNoKCkgYXBpIGFuZCBkaXJlY3RpdmVzLlxuICovXG52YXIgV2F0Y2hlciA9IGZ1bmN0aW9uIFdhdGNoZXIgKFxuICB2bSxcbiAgZXhwT3JGbixcbiAgY2IsXG4gIG9wdGlvbnMsXG4gIGlzUmVuZGVyV2F0Y2hlclxuKSB7XG4gIHRoaXMudm0gPSB2bTtcbiAgaWYgKGlzUmVuZGVyV2F0Y2hlcikge1xuICAgIHZtLl93YXRjaGVyID0gdGhpcztcbiAgfVxuICB2bS5fd2F0Y2hlcnMucHVzaCh0aGlzKTtcbiAgLy8gb3B0aW9uc1xuICBpZiAob3B0aW9ucykge1xuICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgIHRoaXMudXNlciA9ICEhb3B0aW9ucy51c2VyO1xuICAgIHRoaXMubGF6eSA9ICEhb3B0aW9ucy5sYXp5O1xuICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICAgIHRoaXMuYmVmb3JlID0gb3B0aW9ucy5iZWZvcmU7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5ID0gdGhpcy5zeW5jID0gZmFsc2U7XG4gIH1cbiAgdGhpcy5jYiA9IGNiO1xuICB0aGlzLmlkID0gKyt1aWQkMjsgLy8gdWlkIGZvciBiYXRjaGluZ1xuICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gIHRoaXMuZGlydHkgPSB0aGlzLmxhenk7IC8vIGZvciBsYXp5IHdhdGNoZXJzXG4gIHRoaXMuZGVwcyA9IFtdO1xuICB0aGlzLm5ld0RlcHMgPSBbXTtcbiAgdGhpcy5kZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLm5ld0RlcElkcyA9IG5ldyBfU2V0KCk7XG4gIHRoaXMuZXhwcmVzc2lvbiA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICA/IGV4cE9yRm4udG9TdHJpbmcoKVxuICAgIDogJyc7XG4gIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICBpZiAodHlwZW9mIGV4cE9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLmdldHRlciA9IGV4cE9yRm47XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBwYXJzZVBhdGgoZXhwT3JGbik7XG4gICAgaWYgKCF0aGlzLmdldHRlcikge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB3YXRjaGluZyBwYXRoOiBcXFwiXCIgKyBleHBPckZuICsgXCJcXFwiIFwiICtcbiAgICAgICAgJ1dhdGNoZXIgb25seSBhY2NlcHRzIHNpbXBsZSBkb3QtZGVsaW1pdGVkIHBhdGhzLiAnICtcbiAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHRoaXMudmFsdWUgPSB0aGlzLmxhenlcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogdGhpcy5nZXQoKTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIGdldHRlciwgYW5kIHJlLWNvbGxlY3QgZGVwZW5kZW5jaWVzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKCkge1xuICBwdXNoVGFyZ2V0KHRoaXMpO1xuICB2YXIgdmFsdWU7XG4gIHZhciB2bSA9IHRoaXMudm07XG4gIHRyeSB7XG4gICAgdmFsdWUgPSB0aGlzLmdldHRlci5jYWxsKHZtLCB2bSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bSwgKFwiZ2V0dGVyIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBcInRvdWNoXCIgZXZlcnkgcHJvcGVydHkgc28gdGhleSBhcmUgYWxsIHRyYWNrZWQgYXNcbiAgICAvLyBkZXBlbmRlbmNpZXMgZm9yIGRlZXAgd2F0Y2hpbmdcbiAgICBpZiAodGhpcy5kZWVwKSB7XG4gICAgICB0cmF2ZXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIHBvcFRhcmdldCgpO1xuICAgIHRoaXMuY2xlYW51cERlcHMoKTtcbiAgfVxuICByZXR1cm4gdmFsdWVcbn07XG5cbi8qKlxuICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuYWRkRGVwID0gZnVuY3Rpb24gYWRkRGVwIChkZXApIHtcbiAgdmFyIGlkID0gZGVwLmlkO1xuICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhpZCkpIHtcbiAgICB0aGlzLm5ld0RlcElkcy5hZGQoaWQpO1xuICAgIHRoaXMubmV3RGVwcy5wdXNoKGRlcCk7XG4gICAgaWYgKCF0aGlzLmRlcElkcy5oYXMoaWQpKSB7XG4gICAgICBkZXAuYWRkU3ViKHRoaXMpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBDbGVhbiB1cCBmb3IgZGVwZW5kZW5jeSBjb2xsZWN0aW9uLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5jbGVhbnVwRGVwcyA9IGZ1bmN0aW9uIGNsZWFudXBEZXBzICgpIHtcbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGRlcCA9IHRoaXMuZGVwc1tpXTtcbiAgICBpZiAoIXRoaXMubmV3RGVwSWRzLmhhcyhkZXAuaWQpKSB7XG4gICAgICBkZXAucmVtb3ZlU3ViKHRoaXMpO1xuICAgIH1cbiAgfVxuICB2YXIgdG1wID0gdGhpcy5kZXBJZHM7XG4gIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4gIHRoaXMubmV3RGVwSWRzID0gdG1wO1xuICB0aGlzLm5ld0RlcElkcy5jbGVhcigpO1xuICB0bXAgPSB0aGlzLmRlcHM7XG4gIHRoaXMuZGVwcyA9IHRoaXMubmV3RGVwcztcbiAgdGhpcy5uZXdEZXBzID0gdG1wO1xuICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbn07XG5cbi8qKlxuICogU3Vic2NyaWJlciBpbnRlcmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCB3aGVuIGEgZGVwZW5kZW5jeSBjaGFuZ2VzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodGhpcy5sYXp5KSB7XG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodGhpcy5zeW5jKSB7XG4gICAgdGhpcy5ydW4oKTtcbiAgfSBlbHNlIHtcbiAgICBxdWV1ZVdhdGNoZXIodGhpcyk7XG4gIH1cbn07XG5cbi8qKlxuICogU2NoZWR1bGVyIGpvYiBpbnRlcmZhY2UuXG4gKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiBydW4gKCkge1xuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldCgpO1xuICAgIGlmIChcbiAgICAgIHZhbHVlICE9PSB0aGlzLnZhbHVlIHx8XG4gICAgICAvLyBEZWVwIHdhdGNoZXJzIGFuZCB3YXRjaGVycyBvbiBPYmplY3QvQXJyYXlzIHNob3VsZCBmaXJlIGV2ZW5cbiAgICAgIC8vIHdoZW4gdGhlIHZhbHVlIGlzIHRoZSBzYW1lLCBiZWNhdXNlIHRoZSB2YWx1ZSBtYXlcbiAgICAgIC8vIGhhdmUgbXV0YXRlZC5cbiAgICAgIGlzT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgdGhpcy5kZWVwXG4gICAgKSB7XG4gICAgICAvLyBzZXQgbmV3IHZhbHVlXG4gICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaGFuZGxlRXJyb3IoZSwgdGhpcy52bSwgKFwiY2FsbGJhY2sgZm9yIHdhdGNoZXIgXFxcIlwiICsgKHRoaXMuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogRXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSB3YXRjaGVyLlxuICogVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZvciBsYXp5IHdhdGNoZXJzLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIGV2YWx1YXRlICgpIHtcbiAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gIHRoaXMuZGlydHkgPSBmYWxzZTtcbn07XG5cbi8qKlxuICogRGVwZW5kIG9uIGFsbCBkZXBzIGNvbGxlY3RlZCBieSB0aGlzIHdhdGNoZXIuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHRoaXMuZGVwc1tpXS5kZXBlbmQoKTtcbiAgfVxufTtcblxuLyoqXG4gKiBSZW1vdmUgc2VsZiBmcm9tIGFsbCBkZXBlbmRlbmNpZXMnIHN1YnNjcmliZXIgbGlzdC5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiB0ZWFyZG93biAoKSB7XG4gIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gdm0ncyB3YXRjaGVyIGxpc3RcbiAgICAvLyB0aGlzIGlzIGEgc29tZXdoYXQgZXhwZW5zaXZlIG9wZXJhdGlvbiBzbyB3ZSBza2lwIGl0XG4gICAgLy8gaWYgdGhlIHZtIGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICBpZiAoIXRoaXMudm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgIHJlbW92ZSh0aGlzLnZtLl93YXRjaGVycywgdGhpcyk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB0aGlzLmRlcHNbaV0ucmVtb3ZlU3ViKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICB9XG59O1xuXG4vKiAgKi9cblxudmFyIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IG5vb3AsXG4gIHNldDogbm9vcFxufTtcblxuZnVuY3Rpb24gcHJveHkgKHRhcmdldCwgc291cmNlS2V5LCBrZXkpIHtcbiAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IGZ1bmN0aW9uIHByb3h5R2V0dGVyICgpIHtcbiAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV1cbiAgfTtcbiAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IGZ1bmN0aW9uIHByb3h5U2V0dGVyICh2YWwpIHtcbiAgICB0aGlzW3NvdXJjZUtleV1ba2V5XSA9IHZhbDtcbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBpbml0U3RhdGUgKHZtKSB7XG4gIHZtLl93YXRjaGVycyA9IFtdO1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zO1xuICBpZiAob3B0cy5wcm9wcykgeyBpbml0UHJvcHModm0sIG9wdHMucHJvcHMpOyB9XG4gIGlmIChvcHRzLm1ldGhvZHMpIHsgaW5pdE1ldGhvZHModm0sIG9wdHMubWV0aG9kcyk7IH1cbiAgaWYgKG9wdHMuZGF0YSkge1xuICAgIGluaXREYXRhKHZtKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZlKHZtLl9kYXRhID0ge30sIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG4gIH1cbiAgaWYgKG9wdHMuY29tcHV0ZWQpIHsgaW5pdENvbXB1dGVkKHZtLCBvcHRzLmNvbXB1dGVkKTsgfVxuICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgIGluaXRXYXRjaCh2bSwgb3B0cy53YXRjaCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFByb3BzICh2bSwgcHJvcHNPcHRpb25zKSB7XG4gIHZhciBwcm9wc0RhdGEgPSB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgfHwge307XG4gIHZhciBwcm9wcyA9IHZtLl9wcm9wcyA9IHt9O1xuICAvLyBjYWNoZSBwcm9wIGtleXMgc28gdGhhdCBmdXR1cmUgcHJvcHMgdXBkYXRlcyBjYW4gaXRlcmF0ZSB1c2luZyBBcnJheVxuICAvLyBpbnN0ZWFkIG9mIGR5bmFtaWMgb2JqZWN0IGtleSBlbnVtZXJhdGlvbi5cbiAgdmFyIGtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgPSBbXTtcbiAgdmFyIGlzUm9vdCA9ICF2bS4kcGFyZW50O1xuICAvLyByb290IGluc3RhbmNlIHByb3BzIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgaWYgKCFpc1Jvb3QpIHtcbiAgICB0b2dnbGVPYnNlcnZpbmcoZmFsc2UpO1xuICB9XG4gIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gICAgdmFyIHZhbHVlID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcHNPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoaHlwaGVuYXRlZEtleSkgfHxcbiAgICAgICAgICBjb25maWcuaXNSZXNlcnZlZEF0dHIoaHlwaGVuYXRlZEtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJcXFwiXCIgKyBoeXBoZW5hdGVkS2V5ICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcIkluc3RlYWQsIHVzZSBhIGRhdGEgb3IgY29tcHV0ZWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3AncyBcIiArXG4gICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmaW5lUmVhY3RpdmUkJDEocHJvcHMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvLyBzdGF0aWMgcHJvcHMgYXJlIGFscmVhZHkgcHJveGllZCBvbiB0aGUgY29tcG9uZW50J3MgcHJvdG90eXBlXG4gICAgLy8gZHVyaW5nIFZ1ZS5leHRlbmQoKS4gV2Ugb25seSBuZWVkIHRvIHByb3h5IHByb3BzIGRlZmluZWQgYXRcbiAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgcHJveHkodm0sIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wc09wdGlvbnMpIGxvb3AoIGtleSApO1xuICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhICh2bSkge1xuICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gIGRhdGEgPSB2bS5fZGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nXG4gICAgPyBnZXREYXRhKGRhdGEsIHZtKVxuICAgIDogZGF0YSB8fCB7fTtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGRhdGEpKSB7XG4gICAgZGF0YSA9IHt9O1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICdodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9jb21wb25lbnRzLmh0bWwjZGF0YS1NdXN0LUJlLWEtRnVuY3Rpb24nLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIC8vIHByb3h5IGRhdGEgb24gaW5zdGFuY2VcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgdmFyIHByb3BzID0gdm0uJG9wdGlvbnMucHJvcHM7XG4gIHZhciBtZXRob2RzID0gdm0uJG9wdGlvbnMubWV0aG9kcztcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAobWV0aG9kcyAmJiBoYXNPd24obWV0aG9kcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIGEgZGF0YSBwcm9wZXJ0eS5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIlRoZSBkYXRhIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlY2xhcmVkIGFzIGEgcHJvcC4gXCIgK1xuICAgICAgICBcIlVzZSBwcm9wIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5cIixcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICBwcm94eSh2bSwgXCJfZGF0YVwiLCBrZXkpO1xuICAgIH1cbiAgfVxuICAvLyBvYnNlcnZlIGRhdGFcbiAgb2JzZXJ2ZShkYXRhLCB0cnVlIC8qIGFzUm9vdERhdGEgKi8pO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhIChkYXRhLCB2bSkge1xuICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgZGF0YSBnZXR0ZXJzXG4gIHB1c2hUYXJnZXQoKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICByZXR1cm4ge31cbiAgfSBmaW5hbGx5IHtcbiAgICBwb3BUYXJnZXQoKTtcbiAgfVxufVxuXG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQgKHZtLCBjb21wdXRlZCkge1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgdmFyIHdhdGNoZXJzID0gdm0uX2NvbXB1dGVkV2F0Y2hlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBqdXN0IGdldHRlcnMgZHVyaW5nIFNTUlxuICB2YXIgaXNTU1IgPSBpc1NlcnZlclJlbmRlcmluZygpO1xuXG4gIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgIHZhciB1c2VyRGVmID0gY29tcHV0ZWRba2V5XTtcbiAgICB2YXIgZ2V0dGVyID0gdHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicgPyB1c2VyRGVmIDogdXNlckRlZi5nZXQ7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgZ2V0dGVyID09IG51bGwpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkdldHRlciBpcyBtaXNzaW5nIGZvciBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCIpLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzU1NSKSB7XG4gICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgd2F0Y2hlcnNba2V5XSA9IG5ldyBXYXRjaGVyKFxuICAgICAgICB2bSxcbiAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgIG5vb3AsXG4gICAgICAgIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gY29tcG9uZW50LWRlZmluZWQgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZVxuICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgLy8gYXQgaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGluIGRhdGEuXCIpLCB2bSk7XG4gICAgICB9IGVsc2UgaWYgKHZtLiRvcHRpb25zLnByb3BzICYmIGtleSBpbiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmaW5lQ29tcHV0ZWQgKFxuICB0YXJnZXQsXG4gIGtleSxcbiAgdXNlckRlZlxuKSB7XG4gIHZhciBzaG91bGRDYWNoZSA9ICFpc1NlcnZlclJlbmRlcmluZygpO1xuICBpZiAodHlwZW9mIHVzZXJEZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gc2hvdWxkQ2FjaGVcbiAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYpO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICB9IGVsc2Uge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSB1c2VyRGVmLmdldFxuICAgICAgPyBzaG91bGRDYWNoZSAmJiB1c2VyRGVmLmNhY2hlICE9PSBmYWxzZVxuICAgICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgICAgOiBjcmVhdGVHZXR0ZXJJbnZva2VyKHVzZXJEZWYuZ2V0KVxuICAgICAgOiBub29wO1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSB1c2VyRGVmLnNldCB8fCBub29wO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID09PSBub29wKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIChcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wdXRlZEdldHRlciAoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb21wdXRlZEdldHRlciAoKSB7XG4gICAgdmFyIHdhdGNoZXIgPSB0aGlzLl9jb21wdXRlZFdhdGNoZXJzICYmIHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNba2V5XTtcbiAgICBpZiAod2F0Y2hlcikge1xuICAgICAgaWYgKHdhdGNoZXIuZGlydHkpIHtcbiAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3YXRjaGVyLnZhbHVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdldHRlckludm9rZXIoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyICgpIHtcbiAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB0aGlzKVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRNZXRob2RzICh2bSwgbWV0aG9kcykge1xuICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIG1ldGhvZHMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBtZXRob2RzW2tleV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIHR5cGUgXFxcIlwiICsgKHR5cGVvZiBtZXRob2RzW2tleV0pICsgXCJcXFwiIGluIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbi4gXCIgK1xuICAgICAgICAgIFwiRGlkIHlvdSByZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseT9cIixcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkIGFzIGEgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICgoa2V5IGluIHZtKSAmJiBpc1Jlc2VydmVkKGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgVnVlIGluc3RhbmNlIG1ldGhvZC4gXCIgK1xuICAgICAgICAgIFwiQXZvaWQgZGVmaW5pbmcgY29tcG9uZW50IG1ldGhvZHMgdGhhdCBzdGFydCB3aXRoIF8gb3IgJC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2bVtrZXldID0gdHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJyA/IG5vb3AgOiBiaW5kKG1ldGhvZHNba2V5XSwgdm0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRXYXRjaCAodm0sIHdhdGNoKSB7XG4gIGZvciAodmFyIGtleSBpbiB3YXRjaCkge1xuICAgIHZhciBoYW5kbGVyID0gd2F0Y2hba2V5XTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYW5kbGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcltpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNyZWF0ZVdhdGNoZXIodm0sIGtleSwgaGFuZGxlcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIgKFxuICB2bSxcbiAgZXhwT3JGbixcbiAgaGFuZGxlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGlmIChpc1BsYWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgb3B0aW9ucyA9IGhhbmRsZXI7XG4gICAgaGFuZGxlciA9IGhhbmRsZXIuaGFuZGxlcjtcbiAgfVxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgaGFuZGxlciA9IHZtW2hhbmRsZXJdO1xuICB9XG4gIHJldHVybiB2bS4kd2F0Y2goZXhwT3JGbiwgaGFuZGxlciwgb3B0aW9ucylcbn1cblxuZnVuY3Rpb24gc3RhdGVNaXhpbiAoVnVlKSB7XG4gIC8vIGZsb3cgc29tZWhvdyBoYXMgcHJvYmxlbXMgd2l0aCBkaXJlY3RseSBkZWNsYXJlZCBkZWZpbml0aW9uIG9iamVjdFxuICAvLyB3aGVuIHVzaW5nIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgc28gd2UgaGF2ZSB0byBwcm9jZWR1cmFsbHkgYnVpbGQgdXBcbiAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICB2YXIgZGF0YURlZiA9IHt9O1xuICBkYXRhRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RhdGEgfTtcbiAgdmFyIHByb3BzRGVmID0ge307XG4gIHByb3BzRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3Byb3BzIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGF0YURlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAnVXNlIG5lc3RlZCBkYXRhIHByb3BlcnRpZXMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gICAgcHJvcHNEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHByb3BzJywgcHJvcHNEZWYpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHNldCA9IHNldDtcbiAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHdhdGNoID0gZnVuY3Rpb24gKFxuICAgIGV4cE9yRm4sXG4gICAgY2IsXG4gICAgb3B0aW9uc1xuICApIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGNiKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKVxuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnVzZXIgPSB0cnVlO1xuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNiLmNhbGwodm0sIHdhdGNoZXIudmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIHZtLCAoXCJjYWxsYmFjayBmb3IgaW1tZWRpYXRlIHdhdGNoZXIgXFxcIlwiICsgKHdhdGNoZXIuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gdW53YXRjaEZuICgpIHtcbiAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgdWlkJDMgPSAwO1xuXG5mdW5jdGlvbiBpbml0TWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGEgdWlkXG4gICAgdm0uX3VpZCA9IHVpZCQzKys7XG5cbiAgICB2YXIgc3RhcnRUYWcsIGVuZFRhZztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgc3RhcnRUYWcgPSBcInZ1ZS1wZXJmLXN0YXJ0OlwiICsgKHZtLl91aWQpO1xuICAgICAgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICB9XG5cbiAgICAvLyBhIGZsYWcgdG8gYXZvaWQgdGhpcyBiZWluZyBvYnNlcnZlZFxuICAgIHZtLl9pc1Z1ZSA9IHRydWU7XG4gICAgLy8gbWVyZ2Ugb3B0aW9uc1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuX2lzQ29tcG9uZW50KSB7XG4gICAgICAvLyBvcHRpbWl6ZSBpbnRlcm5hbCBjb21wb25lbnQgaW5zdGFudGlhdGlvblxuICAgICAgLy8gc2luY2UgZHluYW1pYyBvcHRpb25zIG1lcmdpbmcgaXMgcHJldHR5IHNsb3csIGFuZCBub25lIG9mIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgY29tcG9uZW50IG9wdGlvbnMgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQuXG4gICAgICBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS4kb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgICAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyh2bS5jb25zdHJ1Y3RvciksXG4gICAgICAgIG9wdGlvbnMgfHwge30sXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpbml0UHJveHkodm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSB2bTtcbiAgICB9XG4gICAgLy8gZXhwb3NlIHJlYWwgc2VsZlxuICAgIHZtLl9zZWxmID0gdm07XG4gICAgaW5pdExpZmVjeWNsZSh2bSk7XG4gICAgaW5pdEV2ZW50cyh2bSk7XG4gICAgaW5pdFJlbmRlcih2bSk7XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVDcmVhdGUnKTtcbiAgICBpbml0SW5qZWN0aW9ucyh2bSk7IC8vIHJlc29sdmUgaW5qZWN0aW9ucyBiZWZvcmUgZGF0YS9wcm9wc1xuICAgIGluaXRTdGF0ZSh2bSk7XG4gICAgaW5pdFByb3ZpZGUodm0pOyAvLyByZXNvbHZlIHByb3ZpZGUgYWZ0ZXIgZGF0YS9wcm9wc1xuICAgIGNhbGxIb29rKHZtLCAnY3JlYXRlZCcpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHZtLl9uYW1lID0gZm9ybWF0Q29tcG9uZW50TmFtZSh2bSwgZmFsc2UpO1xuICAgICAgbWFyayhlbmRUYWcpO1xuICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodm0uX25hbWUpICsgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLmVsKSB7XG4gICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdEludGVybmFsQ29tcG9uZW50ICh2bSwgb3B0aW9ucykge1xuICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zID0gT2JqZWN0LmNyZWF0ZSh2bS5jb25zdHJ1Y3Rvci5vcHRpb25zKTtcbiAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgdmFyIHBhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG5cbiAgdmFyIHZub2RlQ29tcG9uZW50T3B0aW9ucyA9IHBhcmVudFZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIG9wdHMucHJvcHNEYXRhID0gdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YTtcbiAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMuY2hpbGRyZW47XG4gIG9wdHMuX2NvbXBvbmVudFRhZyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy50YWc7XG5cbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlmIChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9ucykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9ucztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNcbiAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgc2VhbGVkID0gQ3Rvci5zZWFsZWRPcHRpb25zO1xuICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0KSB7XG4gICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgaWYgKCFtb2RpZmllZCkgeyBtb2RpZmllZCA9IHt9OyB9XG4gICAgICBtb2RpZmllZFtrZXldID0gbGF0ZXN0W2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBtb2RpZmllZFxufVxuXG5mdW5jdGlvbiBWdWUgKG9wdGlvbnMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAhKHRoaXMgaW5zdGFuY2VvZiBWdWUpXG4gICkge1xuICAgIHdhcm4oJ1Z1ZSBpcyBhIGNvbnN0cnVjdG9yIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGBuZXdgIGtleXdvcmQnKTtcbiAgfVxuICB0aGlzLl9pbml0KG9wdGlvbnMpO1xufVxuXG5pbml0TWl4aW4oVnVlKTtcbnN0YXRlTWl4aW4oVnVlKTtcbmV2ZW50c01peGluKFZ1ZSk7XG5saWZlY3ljbGVNaXhpbihWdWUpO1xucmVuZGVyTWl4aW4oVnVlKTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRVc2UgKFZ1ZSkge1xuICBWdWUudXNlID0gZnVuY3Rpb24gKHBsdWdpbikge1xuICAgIHZhciBpbnN0YWxsZWRQbHVnaW5zID0gKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgfHwgKHRoaXMuX2luc3RhbGxlZFBsdWdpbnMgPSBbXSkpO1xuICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmluZGV4T2YocGx1Z2luKSA+IC0xKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgIGFyZ3MudW5zaGlmdCh0aGlzKTtcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5pbnN0YWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwbHVnaW4uaW5zdGFsbC5hcHBseShwbHVnaW4sIGFyZ3MpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsdWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2gocGx1Z2luKTtcbiAgICByZXR1cm4gdGhpc1xuICB9O1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdE1peGluJDEgKFZ1ZSkge1xuICBWdWUubWl4aW4gPSBmdW5jdGlvbiAobWl4aW4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFeHRlbmQgKFZ1ZSkge1xuICAvKipcbiAgICogRWFjaCBpbnN0YW5jZSBjb25zdHJ1Y3RvciwgaW5jbHVkaW5nIFZ1ZSwgaGFzIGEgdW5pcXVlXG4gICAqIGNpZC4gVGhpcyBlbmFibGVzIHVzIHRvIGNyZWF0ZSB3cmFwcGVkIFwiY2hpbGRcbiAgICogY29uc3RydWN0b3JzXCIgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UgYW5kIGNhY2hlIHRoZW0uXG4gICAqL1xuICBWdWUuY2lkID0gMDtcbiAgdmFyIGNpZCA9IDE7XG5cbiAgLyoqXG4gICAqIENsYXNzIGluaGVyaXRhbmNlXG4gICAqL1xuICBWdWUuZXh0ZW5kID0gZnVuY3Rpb24gKGV4dGVuZE9wdGlvbnMpIHtcbiAgICBleHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgU3VwZXIgPSB0aGlzO1xuICAgIHZhciBTdXBlcklkID0gU3VwZXIuY2lkO1xuICAgIHZhciBjYWNoZWRDdG9ycyA9IGV4dGVuZE9wdGlvbnMuX0N0b3IgfHwgKGV4dGVuZE9wdGlvbnMuX0N0b3IgPSB7fSk7XG4gICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XG4gICAgICByZXR1cm4gY2FjaGVkQ3RvcnNbU3VwZXJJZF1cbiAgICB9XG5cbiAgICB2YXIgbmFtZSA9IGV4dGVuZE9wdGlvbnMubmFtZSB8fCBTdXBlci5vcHRpb25zLm5hbWU7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgbmFtZSkge1xuICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gICAgfTtcbiAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgIFN1Yi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdWI7XG4gICAgU3ViLmNpZCA9IGNpZCsrO1xuICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgU3VwZXIub3B0aW9ucyxcbiAgICAgIGV4dGVuZE9wdGlvbnNcbiAgICApO1xuICAgIFN1Ylsnc3VwZXInXSA9IFN1cGVyO1xuXG4gICAgLy8gRm9yIHByb3BzIGFuZCBjb21wdXRlZCBwcm9wZXJ0aWVzLCB3ZSBkZWZpbmUgdGhlIHByb3h5IGdldHRlcnMgb25cbiAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgIC8vIGF2b2lkcyBPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbHMgZm9yIGVhY2ggaW5zdGFuY2UgY3JlYXRlZC5cbiAgICBpZiAoU3ViLm9wdGlvbnMucHJvcHMpIHtcbiAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgfVxuICAgIGlmIChTdWIub3B0aW9ucy5jb21wdXRlZCkge1xuICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICB9XG5cbiAgICAvLyBhbGxvdyBmdXJ0aGVyIGV4dGVuc2lvbi9taXhpbi9wbHVnaW4gdXNhZ2VcbiAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgIFN1Yi5taXhpbiA9IFN1cGVyLm1peGluO1xuICAgIFN1Yi51c2UgPSBTdXBlci51c2U7XG5cbiAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgLy8gY2FuIGhhdmUgdGhlaXIgcHJpdmF0ZSBhc3NldHMgdG9vLlxuICAgIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgIH0pO1xuICAgIC8vIGVuYWJsZSByZWN1cnNpdmUgc2VsZi1sb29rdXBcbiAgICBpZiAobmFtZSkge1xuICAgICAgU3ViLm9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IFN1YjtcbiAgICB9XG5cbiAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgIC8vIGxhdGVyIGF0IGluc3RhbnRpYXRpb24gd2UgY2FuIGNoZWNrIGlmIFN1cGVyJ3Mgb3B0aW9ucyBoYXZlXG4gICAgLy8gYmVlbiB1cGRhdGVkLlxuICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgIFN1Yi5leHRlbmRPcHRpb25zID0gZXh0ZW5kT3B0aW9ucztcbiAgICBTdWIuc2VhbGVkT3B0aW9ucyA9IGV4dGVuZCh7fSwgU3ViLm9wdGlvbnMpO1xuXG4gICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICBjYWNoZWRDdG9yc1tTdXBlcklkXSA9IFN1YjtcbiAgICByZXR1cm4gU3ViXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wcyQxIChDb21wKSB7XG4gIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgcHJveHkoQ29tcC5wcm90b3R5cGUsIFwiX3Byb3BzXCIsIGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkJDEgKENvbXApIHtcbiAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICBkZWZpbmVDb21wdXRlZChDb21wLnByb3RvdHlwZSwga2V5LCBjb21wdXRlZFtrZXldKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhc3NldCByZWdpc3RyYXRpb24gbWV0aG9kcy5cbiAgICovXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWVbdHlwZV0gPSBmdW5jdGlvbiAoXG4gICAgICBpZCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApIHtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IGRlZmluaXRpb24ubmFtZSB8fCBpZDtcbiAgICAgICAgICBkZWZpbml0aW9uID0gdGhpcy5vcHRpb25zLl9iYXNlLmV4dGVuZChkZWZpbml0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2RpcmVjdGl2ZScgJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uID0geyBiaW5kOiBkZWZpbml0aW9uLCB1cGRhdGU6IGRlZmluaXRpb24gfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb25cbiAgICAgIH1cbiAgICB9O1xuICB9KTtcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lIChvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVzIChwYXR0ZXJuLCBuYW1lKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTFcbiAgfSBlbHNlIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZSAoa2VlcEFsaXZlSW5zdGFuY2UsIGZpbHRlcikge1xuICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZTtcbiAgdmFyIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzO1xuICB2YXIgX3Zub2RlID0ga2VlcEFsaXZlSW5zdGFuY2UuX3Zub2RlO1xuICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICB2YXIgY2FjaGVkTm9kZSA9IGNhY2hlW2tleV07XG4gICAgaWYgKGNhY2hlZE5vZGUpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjYWNoZWROb2RlLmNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgaWYgKG5hbWUgJiYgIWZpbHRlcihuYW1lKSkge1xuICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgX3Zub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5IChcbiAgY2FjaGUsXG4gIGtleSxcbiAga2V5cyxcbiAgY3VycmVudFxuKSB7XG4gIHZhciBjYWNoZWQkJDEgPSBjYWNoZVtrZXldO1xuICBpZiAoY2FjaGVkJCQxICYmICghY3VycmVudCB8fCBjYWNoZWQkJDEudGFnICE9PSBjdXJyZW50LnRhZykpIHtcbiAgICBjYWNoZWQkJDEuY29tcG9uZW50SW5zdGFuY2UuJGRlc3Ryb3koKTtcbiAgfVxuICBjYWNoZVtrZXldID0gbnVsbDtcbiAgcmVtb3ZlKGtleXMsIGtleSk7XG59XG5cbnZhciBwYXR0ZXJuVHlwZXMgPSBbU3RyaW5nLCBSZWdFeHAsIEFycmF5XTtcblxudmFyIEtlZXBBbGl2ZSA9IHtcbiAgbmFtZTogJ2tlZXAtYWxpdmUnLFxuICBhYnN0cmFjdDogdHJ1ZSxcblxuICBwcm9wczoge1xuICAgIGluY2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICBleGNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgbWF4OiBbU3RyaW5nLCBOdW1iZXJdXG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCAoKSB7XG4gICAgdGhpcy5jYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5rZXlzID0gW107XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQgKCkge1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICBwcnVuZUNhY2hlRW50cnkodGhpcy5jYWNoZSwga2V5LCB0aGlzLmtleXMpO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgIH0pO1xuICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcHJ1bmVDYWNoZSh0aGlzJDEsIGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoKSB7XG4gICAgdmFyIHNsb3QgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChjb21wb25lbnRPcHRpb25zKSB7XG4gICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY29tcG9uZW50T3B0aW9ucyk7XG4gICAgICB2YXIgcmVmID0gdGhpcztcbiAgICAgIHZhciBpbmNsdWRlID0gcmVmLmluY2x1ZGU7XG4gICAgICB2YXIgZXhjbHVkZSA9IHJlZi5leGNsdWRlO1xuICAgICAgaWYgKFxuICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgKGluY2x1ZGUgJiYgKCFuYW1lIHx8ICFtYXRjaGVzKGluY2x1ZGUsIG5hbWUpKSkgfHxcbiAgICAgICAgLy8gZXhjbHVkZWRcbiAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB2bm9kZVxuICAgICAgfVxuXG4gICAgICB2YXIgcmVmJDEgPSB0aGlzO1xuICAgICAgdmFyIGNhY2hlID0gcmVmJDEuY2FjaGU7XG4gICAgICB2YXIga2V5cyA9IHJlZiQxLmtleXM7XG4gICAgICB2YXIga2V5ID0gdm5vZGUua2V5ID09IG51bGxcbiAgICAgICAgLy8gc2FtZSBjb25zdHJ1Y3RvciBtYXkgZ2V0IHJlZ2lzdGVyZWQgYXMgZGlmZmVyZW50IGxvY2FsIGNvbXBvbmVudHNcbiAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICA/IGNvbXBvbmVudE9wdGlvbnMuQ3Rvci5jaWQgKyAoY29tcG9uZW50T3B0aW9ucy50YWcgPyAoXCI6OlwiICsgKGNvbXBvbmVudE9wdGlvbnMudGFnKSkgOiAnJylcbiAgICAgICAgOiB2bm9kZS5rZXk7XG4gICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNhY2hlW2tleV0uY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIC8vIG1ha2UgY3VycmVudCBrZXkgZnJlc2hlc3RcbiAgICAgICAgcmVtb3ZlKGtleXMsIGtleSk7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVba2V5XSA9IHZub2RlO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgLy8gcHJ1bmUgb2xkZXN0IGVudHJ5XG4gICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5c1swXSwga2V5cywgdGhpcy5fdm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pXG4gIH1cbn07XG5cbnZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgS2VlcEFsaXZlOiBLZWVwQWxpdmVcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0R2xvYmFsQVBJIChWdWUpIHtcbiAgLy8gY29uZmlnXG4gIHZhciBjb25maWdEZWYgPSB7fTtcbiAgY29uZmlnRGVmLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpZzsgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25maWdEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdjb25maWcnLCBjb25maWdEZWYpO1xuXG4gIC8vIGV4cG9zZWQgdXRpbCBtZXRob2RzLlxuICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgLy8gdGhlbSB1bmxlc3MgeW91IGFyZSBhd2FyZSBvZiB0aGUgcmlzay5cbiAgVnVlLnV0aWwgPSB7XG4gICAgd2Fybjogd2FybixcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBtZXJnZU9wdGlvbnM6IG1lcmdlT3B0aW9ucyxcbiAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFcbiAgfTtcblxuICBWdWUuc2V0ID0gc2V0O1xuICBWdWUuZGVsZXRlID0gZGVsO1xuICBWdWUubmV4dFRpY2sgPSBuZXh0VGljaztcblxuICAvLyAyLjYgZXhwbGljaXQgb2JzZXJ2YWJsZSBBUElcbiAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgb2JzZXJ2ZShvYmopO1xuICAgIHJldHVybiBvYmpcbiAgfTtcblxuICBWdWUub3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH0pO1xuXG4gIC8vIHRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgXCJiYXNlXCIgY29uc3RydWN0b3IgdG8gZXh0ZW5kIGFsbCBwbGFpbi1vYmplY3RcbiAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gIFZ1ZS5vcHRpb25zLl9iYXNlID0gVnVlO1xuXG4gIGV4dGVuZChWdWUub3B0aW9ucy5jb21wb25lbnRzLCBidWlsdEluQ29tcG9uZW50cyk7XG5cbiAgaW5pdFVzZShWdWUpO1xuICBpbml0TWl4aW4kMShWdWUpO1xuICBpbml0RXh0ZW5kKFZ1ZSk7XG4gIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xufVxuXG5pbml0R2xvYmFsQVBJKFZ1ZSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHRcbiAgfVxufSk7XG5cbi8vIGV4cG9zZSBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCBmb3Igc3NyIHJ1bnRpbWUgaGVscGVyIGluc3RhbGxhdGlvblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ0Z1bmN0aW9uYWxSZW5kZXJDb250ZXh0Jywge1xuICB2YWx1ZTogRnVuY3Rpb25hbFJlbmRlckNvbnRleHRcbn0pO1xuXG5WdWUudmVyc2lvbiA9ICcyLjYuMTAnO1xuXG4vKiAgKi9cblxuLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4vLyBkdXJpbmcgdGVtcGxhdGUgY29tcGlsYXRpb25cbnZhciBpc1Jlc2VydmVkQXR0ciA9IG1ha2VNYXAoJ3N0eWxlLGNsYXNzJyk7XG5cbi8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbnZhciBhY2NlcHRWYWx1ZSA9IG1ha2VNYXAoJ2lucHV0LHRleHRhcmVhLG9wdGlvbixzZWxlY3QscHJvZ3Jlc3MnKTtcbnZhciBtdXN0VXNlUHJvcCA9IGZ1bmN0aW9uICh0YWcsIHR5cGUsIGF0dHIpIHtcbiAgcmV0dXJuIChcbiAgICAoYXR0ciA9PT0gJ3ZhbHVlJyAmJiBhY2NlcHRWYWx1ZSh0YWcpKSAmJiB0eXBlICE9PSAnYnV0dG9uJyB8fFxuICAgIChhdHRyID09PSAnc2VsZWN0ZWQnICYmIHRhZyA9PT0gJ29wdGlvbicpIHx8XG4gICAgKGF0dHIgPT09ICdjaGVja2VkJyAmJiB0YWcgPT09ICdpbnB1dCcpIHx8XG4gICAgKGF0dHIgPT09ICdtdXRlZCcgJiYgdGFnID09PSAndmlkZW8nKVxuICApXG59O1xuXG52YXIgaXNFbnVtZXJhdGVkQXR0ciA9IG1ha2VNYXAoJ2NvbnRlbnRlZGl0YWJsZSxkcmFnZ2FibGUsc3BlbGxjaGVjaycpO1xuXG52YXIgaXNWYWxpZENvbnRlbnRFZGl0YWJsZVZhbHVlID0gbWFrZU1hcCgnZXZlbnRzLGNhcmV0LHR5cGluZyxwbGFpbnRleHQtb25seScpO1xuXG52YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJ2ZhbHNlJ1xuICAgID8gJ2ZhbHNlJ1xuICAgIC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgIDoga2V5ID09PSAnY29udGVudGVkaXRhYmxlJyAmJiBpc1ZhbGlkQ29udGVudEVkaXRhYmxlVmFsdWUodmFsdWUpXG4gICAgICA/IHZhbHVlXG4gICAgICA6ICd0cnVlJ1xufTtcblxudmFyIGlzQm9vbGVhbkF0dHIgPSBtYWtlTWFwKFxuICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgJ2RlZmF1bHQsZGVmYXVsdGNoZWNrZWQsZGVmYXVsdG11dGVkLGRlZmF1bHRzZWxlY3RlZCxkZWZlcixkaXNhYmxlZCwnICtcbiAgJ2VuYWJsZWQsZm9ybW5vdmFsaWRhdGUsaGlkZGVuLGluZGV0ZXJtaW5hdGUsaW5lcnQsaXNtYXAsaXRlbXNjb3BlLGxvb3AsbXVsdGlwbGUsJyArXG4gICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAncmVxdWlyZWQscmV2ZXJzZWQsc2NvcGVkLHNlYW1sZXNzLHNlbGVjdGVkLHNvcnRhYmxlLHRyYW5zbGF0ZSwnICtcbiAgJ3RydWVzcGVlZCx0eXBlbXVzdG1hdGNoLHZpc2libGUnXG4pO1xuXG52YXIgeGxpbmtOUyA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJztcblxudmFyIGlzWGxpbmsgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAsIDUpID09PSAneGxpbmsnXG59O1xuXG52YXIgZ2V0WGxpbmtQcm9wID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnXG59O1xuXG52YXIgaXNGYWxzeUF0dHJWYWx1ZSA9IGZ1bmN0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2Vcbn07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgd2hpbGUgKGlzRGVmKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChpc0RlZihwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5kYXRhKSB7XG4gICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2xhc3NEYXRhIChjaGlsZCwgcGFyZW50KSB7XG4gIHJldHVybiB7XG4gICAgc3RhdGljQ2xhc3M6IGNvbmNhdChjaGlsZC5zdGF0aWNDbGFzcywgcGFyZW50LnN0YXRpY0NsYXNzKSxcbiAgICBjbGFzczogaXNEZWYoY2hpbGQuY2xhc3MpXG4gICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXVxuICAgICAgOiBwYXJlbnQuY2xhc3NcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJDbGFzcyAoXG4gIHN0YXRpY0NsYXNzLFxuICBkeW5hbWljQ2xhc3Ncbikge1xuICBpZiAoaXNEZWYoc3RhdGljQ2xhc3MpIHx8IGlzRGVmKGR5bmFtaWNDbGFzcykpIHtcbiAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBjb25jYXQgKGEsIGIpIHtcbiAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5Q2xhc3MgKHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlBcnJheSh2YWx1ZSlcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeU9iamVjdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiAnJ1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgc3RyaW5naWZpZWQ7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGlzRGVmKHN0cmluZ2lmaWVkID0gc3RyaW5naWZ5Q2xhc3ModmFsdWVbaV0pKSAmJiBzdHJpbmdpZmllZCAhPT0gJycpIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdCAodmFsdWUpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWVba2V5XSkge1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0ga2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG52YXIgbmFtZXNwYWNlTWFwID0ge1xuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG4gIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xufTtcblxudmFyIGlzSFRNTFRhZyA9IG1ha2VNYXAoXG4gICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhncm91cCxuYXYsc2VjdGlvbiwnICtcbiAgJ2RpdixkZCxkbCxkdCxmaWdjYXB0aW9uLGZpZ3VyZSxwaWN0dXJlLGhyLGltZyxsaSxtYWluLG9sLHAscHJlLHVsLCcgK1xuICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAncyxzYW1wLHNtYWxsLHNwYW4sc3Ryb25nLHN1YixzdXAsdGltZSx1LHZhcix3YnIsYXJlYSxhdWRpbyxtYXAsdHJhY2ssdmlkZW8sJyArXG4gICdlbWJlZCxvYmplY3QscGFyYW0sc291cmNlLGNhbnZhcyxzY3JpcHQsbm9zY3JpcHQsZGVsLGlucywnICtcbiAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAnYnV0dG9uLGRhdGFsaXN0LGZpZWxkc2V0LGZvcm0saW5wdXQsbGFiZWwsbGVnZW5kLG1ldGVyLG9wdGdyb3VwLG9wdGlvbiwnICtcbiAgJ291dHB1dCxwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWEsJyArXG4gICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICdjb250ZW50LGVsZW1lbnQsc2hhZG93LHRlbXBsYXRlLGJsb2NrcXVvdGUsaWZyYW1lLHRmb290J1xuKTtcblxuLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4vLyBjb250YWluIGNoaWxkIGVsZW1lbnRzLlxudmFyIGlzU1ZHID0gbWFrZU1hcChcbiAgJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgJ2ZvcmVpZ25PYmplY3QsZyxnbHlwaCxpbWFnZSxsaW5lLG1hcmtlcixtYXNrLG1pc3NpbmctZ2x5cGgscGF0aCxwYXR0ZXJuLCcgK1xuICAncG9seWdvbixwb2x5bGluZSxyZWN0LHN3aXRjaCxzeW1ib2wsdGV4dCx0ZXh0cGF0aCx0c3Bhbix1c2UsdmlldycsXG4gIHRydWVcbik7XG5cbnZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICByZXR1cm4gaXNIVE1MVGFnKHRhZykgfHwgaXNTVkcodGFnKVxufTtcblxuZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0YWcpIHtcbiAgaWYgKGlzU1ZHKHRhZykpIHtcbiAgICByZXR1cm4gJ3N2ZydcbiAgfVxuICAvLyBiYXNpYyBzdXBwb3J0IGZvciBNYXRoTUxcbiAgLy8gbm90ZSBpdCBkb2Vzbid0IHN1cHBvcnQgb3RoZXIgTWF0aE1MIGVsZW1lbnRzIGJlaW5nIGNvbXBvbmVudCByb290c1xuICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICByZXR1cm4gJ21hdGgnXG4gIH1cbn1cblxudmFyIHVua25vd25FbGVtZW50Q2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gaXNVbmtub3duRWxlbWVudCAodGFnKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoIWluQnJvd3Nlcikge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHVua25vd25FbGVtZW50Q2FjaGVbdGFnXVxuICB9XG4gIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKHRhZy5pbmRleE9mKCctJykgPiAtMSkge1xuICAgIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI4MjEwMzY0LzEwNzAyNDRcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTFVua25vd25FbGVtZW50IHx8XG4gICAgICBlbC5jb25zdHJ1Y3RvciA9PT0gd2luZG93LkhUTUxFbGVtZW50XG4gICAgKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IC9IVE1MVW5rbm93bkVsZW1lbnQvLnRlc3QoZWwudG9TdHJpbmcoKSkpXG4gIH1cbn1cblxudmFyIGlzVGV4dElucHV0VHlwZSA9IG1ha2VNYXAoJ3RleHQsbnVtYmVyLHBhc3N3b3JkLHNlYXJjaCxlbWFpbCx0ZWwsdXJsJyk7XG5cbi8qICAqL1xuXG4vKipcbiAqIFF1ZXJ5IGFuIGVsZW1lbnQgc2VsZWN0b3IgaWYgaXQncyBub3QgYW4gZWxlbWVudCBhbHJlYWR5LlxuICovXG5mdW5jdGlvbiBxdWVyeSAoZWwpIHtcbiAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgICdDYW5ub3QgZmluZCBlbGVtZW50OiAnICsgZWxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGVsXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQkMSAodGFnTmFtZSwgdm5vZGUpIHtcbiAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0YWdOYW1lICE9PSAnc2VsZWN0Jykge1xuICAgIHJldHVybiBlbG1cbiAgfVxuICAvLyBmYWxzZSBvciBudWxsIHdpbGwgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgYnV0IHVuZGVmaW5lZCB3aWxsIG5vdFxuICBpZiAodm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMubXVsdGlwbGUgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsbS5zZXRBdHRyaWJ1dGUoJ211bHRpcGxlJywgJ211bHRpcGxlJyk7XG4gIH1cbiAgcmV0dXJuIGVsbVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50TlMgKG5hbWVzcGFjZSwgdGFnTmFtZSkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Tm9kZSAodGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dClcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tbWVudCAodGV4dCkge1xuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KVxufVxuXG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUgKHBhcmVudE5vZGUsIG5ld05vZGUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkIChub2RlLCBjaGlsZCkge1xuICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQgKG5vZGUsIGNoaWxkKSB7XG4gIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuXG5mdW5jdGlvbiBwYXJlbnROb2RlIChub2RlKSB7XG4gIHJldHVybiBub2RlLnBhcmVudE5vZGVcbn1cblxuZnVuY3Rpb24gbmV4dFNpYmxpbmcgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmdcbn1cblxuZnVuY3Rpb24gdGFnTmFtZSAobm9kZSkge1xuICByZXR1cm4gbm9kZS50YWdOYW1lXG59XG5cbmZ1bmN0aW9uIHNldFRleHRDb250ZW50IChub2RlLCB0ZXh0KSB7XG4gIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xufVxuXG5mdW5jdGlvbiBzZXRTdHlsZVNjb3BlIChub2RlLCBzY29wZUlkKSB7XG4gIG5vZGUuc2V0QXR0cmlidXRlKHNjb3BlSWQsICcnKTtcbn1cblxudmFyIG5vZGVPcHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQkMSxcbiAgY3JlYXRlRWxlbWVudE5TOiBjcmVhdGVFbGVtZW50TlMsXG4gIGNyZWF0ZVRleHROb2RlOiBjcmVhdGVUZXh0Tm9kZSxcbiAgY3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcbiAgaW5zZXJ0QmVmb3JlOiBpbnNlcnRCZWZvcmUsXG4gIHJlbW92ZUNoaWxkOiByZW1vdmVDaGlsZCxcbiAgYXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuICBwYXJlbnROb2RlOiBwYXJlbnROb2RlLFxuICBuZXh0U2libGluZzogbmV4dFNpYmxpbmcsXG4gIHRhZ05hbWU6IHRhZ05hbWUsXG4gIHNldFRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudCxcbiAgc2V0U3R5bGVTY29wZTogc2V0U3R5bGVTY29wZVxufSk7XG5cbi8qICAqL1xuXG52YXIgcmVmID0ge1xuICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSAoXywgdm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAob2xkVm5vZGUuZGF0YS5yZWYgIT09IHZub2RlLmRhdGEucmVmKSB7XG4gICAgICByZWdpc3RlclJlZihvbGRWbm9kZSwgdHJ1ZSk7XG4gICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgfVxuICB9LFxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgIHJlZ2lzdGVyUmVmKHZub2RlLCB0cnVlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJSZWYgKHZub2RlLCBpc1JlbW92YWwpIHtcbiAgdmFyIGtleSA9IHZub2RlLmRhdGEucmVmO1xuICBpZiAoIWlzRGVmKGtleSkpIHsgcmV0dXJuIH1cblxuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICB2YXIgcmVmID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxtO1xuICB2YXIgcmVmcyA9IHZtLiRyZWZzO1xuICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgcmVtb3ZlKHJlZnNba2V5XSwgcmVmKTtcbiAgICB9IGVsc2UgaWYgKHJlZnNba2V5XSA9PT0gcmVmKSB7XG4gICAgICByZWZzW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2bm9kZS5kYXRhLnJlZkluRm9yKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgICByZWZzW2tleV0gPSBbcmVmXTtcbiAgICAgIH0gZWxzZSBpZiAocmVmc1trZXldLmluZGV4T2YocmVmKSA8IDApIHtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHJlZnNba2V5XS5wdXNoKHJlZik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZnNba2V5XSA9IHJlZjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0gYmFzZWQgb24gU25hYmJkb20gYnlcbiAqIFNpbW9uIEZyaWlzIFZpbmR1bSAoQHBhbGRlcGluZClcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogbW9kaWZpZWQgYnkgRXZhbiBZb3UgKEB5eXg5OTA4MDMpXG4gKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBiZWNhdXNlIHRoaXMgZmlsZSBpcyBwZXJmLWNyaXRpY2FsIGFuZCB0aGUgY29zdFxuICogb2YgbWFraW5nIGZsb3cgdW5kZXJzdGFuZCBpdCBpcyBub3Qgd29ydGggaXQuXG4gKi9cblxudmFyIGVtcHR5Tm9kZSA9IG5ldyBWTm9kZSgnJywge30sIFtdKTtcblxudmFyIGhvb2tzID0gWydjcmVhdGUnLCAnYWN0aXZhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95J107XG5cbmZ1bmN0aW9uIHNhbWVWbm9kZSAoYSwgYikge1xuICByZXR1cm4gKFxuICAgIGEua2V5ID09PSBiLmtleSAmJiAoXG4gICAgICAoXG4gICAgICAgIGEudGFnID09PSBiLnRhZyAmJlxuICAgICAgICBhLmlzQ29tbWVudCA9PT0gYi5pc0NvbW1lbnQgJiZcbiAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxuICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpXG4gICAgICApIHx8IChcbiAgICAgICAgaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJlxuICAgICAgICBhLmFzeW5jRmFjdG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiZcbiAgICAgICAgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcilcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gc2FtZUlucHV0VHlwZSAoYSwgYikge1xuICBpZiAoYS50YWcgIT09ICdpbnB1dCcpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaTtcbiAgdmFyIHR5cGVBID0gaXNEZWYoaSA9IGEuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgdmFyIHR5cGVCID0gaXNEZWYoaSA9IGIuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCBpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQilcbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHggKGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gIHZhciBpLCBrZXk7XG4gIHZhciBtYXAgPSB7fTtcbiAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgaWYgKGlzRGVmKGtleSkpIHsgbWFwW2tleV0gPSBpOyB9XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uIChiYWNrZW5kKSB7XG4gIHZhciBpLCBqO1xuICB2YXIgY2JzID0ge307XG5cbiAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXM7XG4gIHZhciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9va3NbaV1dKSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tpXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0pIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSbUNiIChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgZnVuY3Rpb24gcmVtb3ZlJCQxICgpIHtcbiAgICAgIGlmICgtLXJlbW92ZSQkMS5saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbW92ZSQkMS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgcmV0dXJuIHJlbW92ZSQkMVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlTm9kZSAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcbiAgICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwgLyB2LXRleHRcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50JCQxICh2bm9kZSwgaW5WUHJlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICFpblZQcmUgJiZcbiAgICAgICF2bm9kZS5ucyAmJlxuICAgICAgIShcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5zb21lKGZ1bmN0aW9uIChpZ25vcmUpIHtcbiAgICAgICAgICByZXR1cm4gaXNSZWdFeHAoaWdub3JlKVxuICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICA6IGlnbm9yZSA9PT0gdm5vZGUudGFnXG4gICAgICAgIH0pXG4gICAgICApICYmXG4gICAgICBjb25maWcuaXNVbmtub3duRWxlbWVudCh2bm9kZS50YWcpXG4gICAgKVxuICB9XG5cbiAgdmFyIGNyZWF0aW5nRWxtSW5WUHJlID0gMDtcblxuICBmdW5jdGlvbiBjcmVhdGVFbG0gKFxuICAgIHZub2RlLFxuICAgIGluc2VydGVkVm5vZGVRdWV1ZSxcbiAgICBwYXJlbnRFbG0sXG4gICAgcmVmRWxtLFxuICAgIG5lc3RlZCxcbiAgICBvd25lckFycmF5LFxuICAgIGluZGV4XG4gICkge1xuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgLy8gbm93IGl0J3MgdXNlZCBhcyBhIG5ldyBub2RlLCBvdmVyd3JpdGluZyBpdHMgZWxtIHdvdWxkIGNhdXNlXG4gICAgICAvLyBwb3RlbnRpYWwgcGF0Y2ggZXJyb3JzIGRvd24gdGhlIHJvYWQgd2hlbiBpdCdzIHVzZWQgYXMgYW4gaW5zZXJ0aW9uXG4gICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgLy8gYXNzb2NpYXRlZCBET00gZWxlbWVudCBmb3IgaXQuXG4gICAgICB2bm9kZSA9IG93bmVyQXJyYXlbaW5kZXhdID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgfVxuXG4gICAgdm5vZGUuaXNSb290SW5zZXJ0ID0gIW5lc3RlZDsgLy8gZm9yIHRyYW5zaXRpb24gZW50ZXIgY2hlY2tcbiAgICBpZiAoY3JlYXRlQ29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgaWYgKGlzRGVmKHRhZykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEucHJlKSB7XG4gICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbmtub3duRWxlbWVudCQkMSh2bm9kZSwgY3JlYXRpbmdFbG1JblZQcmUpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgICdVbmtub3duIGN1c3RvbSBlbGVtZW50OiA8JyArIHRhZyArICc+IC0gZGlkIHlvdSAnICtcbiAgICAgICAgICAgICdyZWdpc3RlciB0aGUgY29tcG9uZW50IGNvcnJlY3RseT8gRm9yIHJlY3Vyc2l2ZSBjb21wb25lbnRzLCAnICtcbiAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgaWYgKGlzRGVmKGkgPSBpLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7XG4gICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLyk7XG4gICAgICB9XG4gICAgICAvLyBhZnRlciBjYWxsaW5nIHRoZSBpbml0IGhvb2ssIGlmIHRoZSB2bm9kZSBpcyBhIGNoaWxkIGNvbXBvbmVudFxuICAgICAgLy8gaXQgc2hvdWxkJ3ZlIGNyZWF0ZWQgYSBjaGlsZCBpbnN0YW5jZSBhbmQgbW91bnRlZCBpdC4gdGhlIGNoaWxkXG4gICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4ganVzdCByZXR1cm4gdGhlIGVsZW1lbnQgYW5kIGJlIGRvbmUuXG4gICAgICBpZiAoaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIGluc2VydChwYXJlbnRFbG0sIHZub2RlLmVsbSwgcmVmRWxtKTtcbiAgICAgICAgaWYgKGlzVHJ1ZShpc1JlYWN0aXZhdGVkKSkge1xuICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGlmIChpc0RlZih2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpKSB7XG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaC5hcHBseShpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCk7XG4gICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgIH1cbiAgICB2bm9kZS5lbG0gPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS4kZWw7XG4gICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICBzZXRTY29wZSh2bm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVtcHR5IGNvbXBvbmVudCByb290LlxuICAgICAgLy8gc2tpcCBhbGwgZWxlbWVudC1yZWxhdGVkIG1vZHVsZXMgZXhjZXB0IGZvciByZWYgKCMzNDU1KVxuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgLy8gbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgaW5zZXJ0IGhvb2tcbiAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKHZub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFjdGl2YXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpO1xuICAgIC8vIGhhY2sgZm9yICM0MzM5OiBhIHJlYWN0aXZhdGVkIGNvbXBvbmVudCB3aXRoIGlubmVyIHRyYW5zaXRpb25cbiAgICAvLyBkb2VzIG5vdCB0cmlnZ2VyIGJlY2F1c2UgdGhlIGlubmVyIG5vZGUncyBjcmVhdGVkIGhvb2tzIGFyZSBub3QgY2FsbGVkXG4gICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgLy8gdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgYmV0dGVyIHdheSB0byBkbyBpdC5cbiAgICB2YXIgaW5uZXJOb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgaW5uZXJOb2RlID0gaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChpc0RlZihpID0gaW5uZXJOb2RlLmRhdGEpICYmIGlzRGVmKGkgPSBpLnRyYW5zaXRpb24pKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBjYnMuYWN0aXZhdGVbaV0oZW1wdHlOb2RlLCBpbm5lck5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKGlubmVyTm9kZSk7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVubGlrZSBhIG5ld2x5IGNyZWF0ZWQgY29tcG9uZW50LFxuICAgIC8vIGEgcmVhY3RpdmF0ZWQga2VlcC1hbGl2ZSBjb21wb25lbnQgZG9lc24ndCBpbnNlcnQgaXRzZWxmXG4gICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0IChwYXJlbnQsIGVsbSwgcmVmJCQxKSB7XG4gICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgIGlmIChpc0RlZihyZWYkJDEpKSB7XG4gICAgICAgIGlmIChub2RlT3BzLnBhcmVudE5vZGUocmVmJCQxKSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50LCBlbG0sIHJlZiQkMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQocGFyZW50LCBlbG0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoaWxkcmVuICh2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY2hlY2tEdXBsaWNhdGVLZXlzKGNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY3JlYXRlRWxtKGNoaWxkcmVuW2ldLCBpbnNlcnRlZFZub2RlUXVldWUsIHZub2RlLmVsbSwgbnVsbCwgdHJ1ZSwgY2hpbGRyZW4sIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKFN0cmluZyh2bm9kZS50ZXh0KSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF0Y2hhYmxlICh2bm9kZSkge1xuICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgdm5vZGUgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgfVxuICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VDcmVhdGVIb29rcyAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgIGlmIChpc0RlZihpKSkge1xuICAgICAgaWYgKGlzRGVmKGkuY3JlYXRlKSkgeyBpLmNyZWF0ZShlbXB0eU5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAgICB9XG4gIH1cblxuICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGFzIGEgc3BlY2lhbCBjYXNlIHRvIGF2b2lkIHRoZSBvdmVyaGVhZFxuICAvLyBvZiBnb2luZyB0aHJvdWdoIHRoZSBub3JtYWwgYXR0cmlidXRlIHBhdGNoaW5nIHByb2Nlc3MuXG4gIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgIHZhciBpO1xuICAgIGlmIChpc0RlZihpID0gdm5vZGUuZm5TY29wZUlkKSkge1xuICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gYW5jZXN0b3IuY29udGV4dCkgJiYgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSB7XG4gICAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGZvciBzbG90IGNvbnRlbnQgdGhleSBzaG91bGQgYWxzbyBnZXQgdGhlIHNjb3BlSWQgZnJvbSB0aGUgaG9zdCBpbnN0YW5jZS5cbiAgICBpZiAoaXNEZWYoaSA9IGFjdGl2ZUluc3RhbmNlKSAmJlxuICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgaSAhPT0gdm5vZGUuZm5Db250ZXh0ICYmXG4gICAgICBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZClcbiAgICApIHtcbiAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZFZub2RlcyAocGFyZW50RWxtLCByZWZFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAodm5vZGUpIHtcbiAgICB2YXIgaSwgajtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkuZGVzdHJveSkpIHsgaSh2bm9kZSk7IH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuZGVzdHJveS5sZW5ndGg7ICsraSkgeyBjYnMuZGVzdHJveVtpXSh2bm9kZSk7IH1cbiAgICB9XG4gICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7ICsraikge1xuICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVm5vZGVzIChwYXJlbnRFbG0sIHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgIHZhciBjaCA9IHZub2Rlc1tzdGFydElkeF07XG4gICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgIGlmIChpc0RlZihjaC50YWcpKSB7XG4gICAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhjaCk7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICB9IGVsc2UgeyAvLyBUZXh0IG5vZGVcbiAgICAgICAgICByZW1vdmVOb2RlKGNoLmVsbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rICh2bm9kZSwgcm0pIHtcbiAgICBpZiAoaXNEZWYocm0pIHx8IGlzRGVmKHZub2RlLmRhdGEpKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjYnMucmVtb3ZlLmxlbmd0aCArIDE7XG4gICAgICBpZiAoaXNEZWYocm0pKSB7XG4gICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGlzdGVuZXJzIGNvdW50XG4gICAgICAgIHJtLmxpc3RlbmVycyArPSBsaXN0ZW5lcnM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkaXJlY3RseSByZW1vdmluZ1xuICAgICAgICBybSA9IGNyZWF0ZVJtQ2Iodm5vZGUuZWxtLCBsaXN0ZW5lcnMpO1xuICAgICAgfVxuICAgICAgLy8gcmVjdXJzaXZlbHkgaW52b2tlIGhvb2tzIG9uIGNoaWxkIGNvbXBvbmVudCByb290IG5vZGVcbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGlzRGVmKGkgPSBpLl92bm9kZSkgJiYgaXNEZWYoaS5kYXRhKSkge1xuICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGksIHJtKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMucmVtb3ZlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNicy5yZW1vdmVbaV0odm5vZGUsIHJtKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5yZW1vdmUpKSB7XG4gICAgICAgIGkodm5vZGUsIHJtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZU5vZGUodm5vZGUuZWxtKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbiAocGFyZW50RWxtLCBvbGRDaCwgbmV3Q2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSkge1xuICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgdmFyIG5ld1N0YXJ0SWR4ID0gMDtcbiAgICB2YXIgb2xkRW5kSWR4ID0gb2xkQ2gubGVuZ3RoIC0gMTtcbiAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgIHZhciBvbGRFbmRWbm9kZSA9IG9sZENoW29sZEVuZElkeF07XG4gICAgdmFyIG5ld0VuZElkeCA9IG5ld0NoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICB2YXIgbmV3RW5kVm5vZGUgPSBuZXdDaFtuZXdFbmRJZHhdO1xuICAgIHZhciBvbGRLZXlUb0lkeCwgaWR4SW5PbGQsIHZub2RlVG9Nb3ZlLCByZWZFbG07XG5cbiAgICAvLyByZW1vdmVPbmx5IGlzIGEgc3BlY2lhbCBmbGFnIHVzZWQgb25seSBieSA8dHJhbnNpdGlvbi1ncm91cD5cbiAgICAvLyB0byBlbnN1cmUgcmVtb3ZlZCBlbGVtZW50cyBzdGF5IGluIGNvcnJlY3QgcmVsYXRpdmUgcG9zaXRpb25zXG4gICAgLy8gZHVyaW5nIGxlYXZpbmcgdHJhbnNpdGlvbnNcbiAgICB2YXIgY2FuTW92ZSA9ICFyZW1vdmVPbmx5O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhuZXdDaCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKG9sZFN0YXJ0SWR4IDw9IG9sZEVuZElkeCAmJiBuZXdTdGFydElkeCA8PSBuZXdFbmRJZHgpIHtcbiAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTsgLy8gVm5vZGUgaGFzIGJlZW4gbW92ZWQgbGVmdFxuICAgICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZEVuZFZub2RlKSkge1xuICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSkpIHtcbiAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCByaWdodFxuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdFbmRJZHgpO1xuICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRW5kVm5vZGUuZWxtKSk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHsgLy8gVm5vZGUgbW92ZWQgbGVmdFxuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRFbmRWbm9kZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1VuZGVmKG9sZEtleVRvSWR4KSkgeyBvbGRLZXlUb0lkeCA9IGNyZWF0ZUtleVRvT2xkSWR4KG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTsgfVxuICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxuICAgICAgICAgID8gb2xkS2V5VG9JZHhbbmV3U3RhcnRWbm9kZS5rZXldXG4gICAgICAgICAgOiBmaW5kSWR4SW5PbGQobmV3U3RhcnRWbm9kZSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICBpZiAoaXNVbmRlZihpZHhJbk9sZCkpIHsgLy8gTmV3IGVsZW1lbnRcbiAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2bm9kZVRvTW92ZSA9IG9sZENoW2lkeEluT2xkXTtcbiAgICAgICAgICBpZiAoc2FtZVZub2RlKHZub2RlVG9Nb3ZlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICAgICAgcGF0Y2hWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIHZub2RlVG9Nb3ZlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzYW1lIGtleSBidXQgZGlmZmVyZW50IGVsZW1lbnQuIHRyZWF0IGFzIG5ldyBlbGVtZW50XG4gICAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBmYWxzZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2xkU3RhcnRJZHggPiBvbGRFbmRJZHgpIHtcbiAgICAgIHJlZkVsbSA9IGlzVW5kZWYobmV3Q2hbbmV3RW5kSWR4ICsgMV0pID8gbnVsbCA6IG5ld0NoW25ld0VuZElkeCArIDFdLmVsbTtcbiAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgfSBlbHNlIGlmIChuZXdTdGFydElkeCA+IG5ld0VuZElkeCkge1xuICAgICAgcmVtb3ZlVm5vZGVzKHBhcmVudEVsbSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRHVwbGljYXRlS2V5cyAoY2hpbGRyZW4pIHtcbiAgICB2YXIgc2VlbktleXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdm5vZGUgPSBjaGlsZHJlbltpXTtcbiAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXk7XG4gICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICBpZiAoc2VlbktleXNba2V5XSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAoXCJEdXBsaWNhdGUga2V5cyBkZXRlY3RlZDogJ1wiICsga2V5ICsgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLFxuICAgICAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VlbktleXNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQgKG5vZGUsIG9sZENoLCBzdGFydCwgZW5kKSB7XG4gICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgIHZhciBjID0gb2xkQ2hbaV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgc2FtZVZub2RlKG5vZGUsIGMpKSB7IHJldHVybiBpIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXRjaFZub2RlIChcbiAgICBvbGRWbm9kZSxcbiAgICB2bm9kZSxcbiAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgb3duZXJBcnJheSxcbiAgICBpbmRleCxcbiAgICByZW1vdmVPbmx5XG4gICkge1xuICAgIGlmIChvbGRWbm9kZSA9PT0gdm5vZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0RlZih2bm9kZS5lbG0pICYmIGlzRGVmKG93bmVyQXJyYXkpKSB7XG4gICAgICAvLyBjbG9uZSByZXVzZWQgdm5vZGVcbiAgICAgIHZub2RlID0gb3duZXJBcnJheVtpbmRleF0gPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgICB9XG5cbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgLVxuICAgIC8vIGlmIHRoZSBuZXcgbm9kZSBpcyBub3QgY2xvbmVkIGl0IG1lYW5zIHRoZSByZW5kZXIgZnVuY3Rpb25zIGhhdmUgYmVlblxuICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIGlzVHJ1ZShvbGRWbm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSlcbiAgICApIHtcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnByZXBhdGNoKSkge1xuICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBvbGRDaCA9IG9sZFZub2RlLmNoaWxkcmVuO1xuICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKSB7IGNicy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAob2xkQ2ggIT09IGNoKSB7IHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpOyB9XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7IG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7IH1cbiAgICAgICAgYWRkVm5vZGVzKGVsbSwgbnVsbCwgY2gsIDAsIGNoLmxlbmd0aCAtIDEsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICByZW1vdmVWbm9kZXMoZWxtLCBvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRleHQpKSB7XG4gICAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCAnJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZS50ZXh0ICE9PSB2bm9kZS50ZXh0KSB7XG4gICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgdm5vZGUudGV4dCk7XG4gICAgfVxuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnBvc3RwYXRjaCkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlSW5zZXJ0SG9vayAodm5vZGUsIHF1ZXVlLCBpbml0aWFsKSB7XG4gICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgLy8gZWxlbWVudCBpcyByZWFsbHkgaW5zZXJ0ZWRcbiAgICBpZiAoaXNUcnVlKGluaXRpYWwpICYmIGlzRGVmKHZub2RlLnBhcmVudCkpIHtcbiAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBxdWV1ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBxdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaHlkcmF0aW9uQmFpbGVkID0gZmFsc2U7XG4gIC8vIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGNhbiBza2lwIGNyZWF0ZSBob29rIGR1cmluZyBoeWRyYXRpb24gYmVjYXVzZSB0aGV5XG4gIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5vIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gIC8vIE5vdGU6IHN0eWxlIGlzIGV4Y2x1ZGVkIGJlY2F1c2UgaXQgcmVsaWVzIG9uIGluaXRpYWwgY2xvbmUgZm9yIGZ1dHVyZVxuICAvLyBkZWVwIHVwZGF0ZXMgKCM3MDYzKS5cbiAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAvLyBOb3RlOiB0aGlzIGlzIGEgYnJvd3Nlci1vbmx5IGZ1bmN0aW9uIHNvIHdlIGNhbiBhc3N1bWUgZWxtcyBhcmUgRE9NIG5vZGVzLlxuICBmdW5jdGlvbiBoeWRyYXRlIChlbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkge1xuICAgIHZhciBpO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGluVlByZSA9IGluVlByZSB8fCAoZGF0YSAmJiBkYXRhLnByZSk7XG4gICAgdm5vZGUuZWxtID0gZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgIHZub2RlLmlzQXN5bmNQbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICAvLyBhc3NlcnQgbm9kZSBtYXRjaFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlLCBpblZQcmUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgIGlmIChpc0RlZihpID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIGNoaWxkIGNvbXBvbmVudC4gaXQgc2hvdWxkIGhhdmUgaHlkcmF0ZWQgaXRzIG93biB0cmVlLlxuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgaWYgKGlzRGVmKGNoaWxkcmVuKSkge1xuICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgaWYgKCFlbG0uaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHYtaHRtbCBhbmQgZG9tUHJvcHM6IGlubmVySFRNTFxuICAgICAgICAgIGlmIChpc0RlZihpID0gZGF0YSkgJiYgaXNEZWYoaSA9IGkuZG9tUHJvcHMpICYmIGlzRGVmKGkgPSBpLmlubmVySFRNTCkpIHtcbiAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICFoeWRyYXRpb25CYWlsZWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhcmVudDogJywgZWxtKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3NlcnZlciBpbm5lckhUTUw6ICcsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignY2xpZW50IGlubmVySFRNTDogJywgZWxtLmlubmVySFRNTCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgYW5kIGNvbXBhcmUgY2hpbGRyZW4gbGlzdHNcbiAgICAgICAgICAgIHZhciBjaGlsZHJlbk1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBlbG0uZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNoaWxkcmVuLmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHwgIWh5ZHJhdGUoY2hpbGROb2RlLCBjaGlsZHJlbltpJDFdLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbk1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAgICAvLyBsb25nZXIgdGhhbiB0aGUgdmlydHVhbCBjaGlsZHJlbiBsaXN0LlxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbk1hdGNoIHx8IGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGh5ZHJhdGlvbkJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNtYXRjaGluZyBjaGlsZE5vZGVzIHZzLiBWTm9kZXM6ICcsIGVsbS5jaGlsZE5vZGVzLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgdmFyIGZ1bGxJbnZva2UgPSBmYWxzZTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICBpZiAoIWlzUmVuZGVyZWRNb2R1bGUoa2V5KSkge1xuICAgICAgICAgICAgZnVsbEludm9rZSA9IHRydWU7XG4gICAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZnVsbEludm9rZSAmJiBkYXRhWydjbGFzcyddKSB7XG4gICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICB0cmF2ZXJzZShkYXRhWydjbGFzcyddKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZWxtLmRhdGEgIT09IHZub2RlLnRleHQpIHtcbiAgICAgIGVsbS5kYXRhID0gdm5vZGUudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaCAobm9kZSwgdm5vZGUsIGluVlByZSkge1xuICAgIGlmIChpc0RlZih2bm9kZS50YWcpKSB7XG4gICAgICByZXR1cm4gdm5vZGUudGFnLmluZGV4T2YoJ3Z1ZS1jb21wb25lbnQnKSA9PT0gMCB8fCAoXG4gICAgICAgICFpc1Vua25vd25FbGVtZW50JCQxKHZub2RlLCBpblZQcmUpICYmXG4gICAgICAgIHZub2RlLnRhZy50b0xvd2VyQ2FzZSgpID09PSAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gKHZub2RlLmlzQ29tbWVudCA/IDggOiAzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBwYXRjaCAob2xkVm5vZGUsIHZub2RlLCBoeWRyYXRpbmcsIHJlbW92ZU9ubHkpIHtcbiAgICBpZiAoaXNVbmRlZih2bm9kZSkpIHtcbiAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkpIHsgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpOyB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICB2YXIgaW5zZXJ0ZWRWbm9kZVF1ZXVlID0gW107XG5cbiAgICBpZiAoaXNVbmRlZihvbGRWbm9kZSkpIHtcbiAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAgICAgIGlzSW5pdGlhbFBhdGNoID0gdHJ1ZTtcbiAgICAgIGNyZWF0ZUVsbSh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGlzUmVhbEVsZW1lbnQgPSBpc0RlZihvbGRWbm9kZS5ub2RlVHlwZSk7XG4gICAgICBpZiAoIWlzUmVhbEVsZW1lbnQgJiYgc2FtZVZub2RlKG9sZFZub2RlLCB2bm9kZSkpIHtcbiAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG51bGwsIG51bGwsIHJlbW92ZU9ubHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBtb3VudGluZyB0byBhIHJlYWwgZWxlbWVudFxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQgYW5kIGlmIHdlIGNhbiBwZXJmb3JtXG4gICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICBpZiAob2xkVm5vZGUubm9kZVR5cGUgPT09IDEgJiYgb2xkVm5vZGUuaGFzQXR0cmlidXRlKFNTUl9BVFRSKSkge1xuICAgICAgICAgICAgb2xkVm5vZGUucmVtb3ZlQXR0cmlidXRlKFNTUl9BVFRSKTtcbiAgICAgICAgICAgIGh5ZHJhdGluZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1RydWUoaHlkcmF0aW5nKSkge1xuICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRWbm9kZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBpbmNvcnJlY3QgJyArXG4gICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICdmdWxsIGNsaWVudC1zaWRlIHJlbmRlci4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICB2YXIgb2xkRWxtID0gb2xkVm5vZGUuZWxtO1xuICAgICAgICB2YXIgcGFyZW50RWxtID0gbm9kZU9wcy5wYXJlbnROb2RlKG9sZEVsbSk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgIGNyZWF0ZUVsbShcbiAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0sXG4gICAgICAgICAgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbG0pXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgIGlmIChpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgaW5zZXJ0LmZucy5sZW5ndGg7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgaWYgKGlzRGVmKHBhcmVudEVsbSkpIHtcbiAgICAgICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBbb2xkVm5vZGVdLCAwLCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZihvbGRWbm9kZS50YWcpKSB7XG4gICAgICAgICAgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpc0luaXRpYWxQYXRjaCk7XG4gICAgcmV0dXJuIHZub2RlLmVsbVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgZGlyZWN0aXZlcyA9IHtcbiAgY3JlYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICB1cGRhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXMgKHZub2RlKSB7XG4gICAgdXBkYXRlRGlyZWN0aXZlcyh2bm9kZSwgZW1wdHlOb2RlKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdXBkYXRlRGlyZWN0aXZlcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMgfHwgdm5vZGUuZGF0YS5kaXJlY3RpdmVzKSB7XG4gICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF91cGRhdGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgaXNDcmVhdGUgPSBvbGRWbm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgaXNEZXN0cm95ID0gdm5vZGUgPT09IGVtcHR5Tm9kZTtcbiAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgdmFyIG5ld0RpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEodm5vZGUuZGF0YS5kaXJlY3RpdmVzLCB2bm9kZS5jb250ZXh0KTtcblxuICB2YXIgZGlyc1dpdGhJbnNlcnQgPSBbXTtcbiAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG5cbiAgdmFyIGtleSwgb2xkRGlyLCBkaXI7XG4gIGZvciAoa2V5IGluIG5ld0RpcnMpIHtcbiAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgZGlyID0gbmV3RGlyc1trZXldO1xuICAgIGlmICghb2xkRGlyKSB7XG4gICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICBjYWxsSG9vayQxKGRpciwgJ2JpbmQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5pbnNlcnRlZCkge1xuICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICBkaXIub2xkVmFsdWUgPSBvbGREaXIudmFsdWU7XG4gICAgICBkaXIub2xkQXJnID0gb2xkRGlyLmFyZztcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICBkaXJzV2l0aFBvc3RwYXRjaC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGNhbGxJbnNlcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgZm9yIChrZXkgaW4gb2xkRGlycykge1xuICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgLy8gbm8gbG9uZ2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICBjYWxsSG9vayQxKG9sZERpcnNba2V5XSwgJ3VuYmluZCcsIG9sZFZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxIChcbiAgZGlycyxcbiAgdm1cbikge1xuICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCFkaXJzKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIHZhciBpLCBkaXI7XG4gIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZGlyLm1vZGlmaWVycyA9IGVtcHR5TW9kaWZpZXJzO1xuICAgIH1cbiAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIpXSA9IGRpcjtcbiAgICBkaXIuZGVmID0gcmVzb2x2ZUFzc2V0KHZtLiRvcHRpb25zLCAnZGlyZWN0aXZlcycsIGRpci5uYW1lLCB0cnVlKTtcbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgcmV0dXJuIGRpci5yYXdOYW1lIHx8ICgoZGlyLm5hbWUpICsgXCIuXCIgKyAoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSkuam9pbignLicpKSlcbn1cblxuZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9va107XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBcIiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGJhc2VNb2R1bGVzID0gW1xuICByZWYsXG4gIGRpcmVjdGl2ZXNcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIHZhciBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSkge1xuICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0cnMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIpO1xuICAgIH1cbiAgfVxuICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoKGlzSUUgfHwgaXNFZGdlKSAmJiBhdHRycy52YWx1ZSAhPT0gb2xkQXR0cnMudmFsdWUpIHtcbiAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xuICB9XG4gIGZvciAoa2V5IGluIG9sZEF0dHJzKSB7XG4gICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICBlbG0ucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gIGlmIChlbC50YWdOYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgIC8vIHNldCBhdHRyaWJ1dGUgZm9yIGJsYW5rIHZhbHVlXG4gICAgLy8gZS5nLiA8b3B0aW9uIGRpc2FibGVkPlNlbGVjdCBvbmU8L29wdGlvbj5cbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAvLyBidXQgRmxhc2ggZXhwZWN0cyBhIHZhbHVlIG9mIFwidHJ1ZVwiIHdoZW4gdXNlZCBvbiA8ZW1iZWQ+IHRhZ1xuICAgICAgdmFsdWUgPSBrZXkgPT09ICdhbGxvd2Z1bGxzY3JlZW4nICYmIGVsLnRhZ05hbWUgPT09ICdFTUJFRCdcbiAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgOiBrZXk7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIGNvbnZlcnRFbnVtZXJhdGVkVmFsdWUoa2V5LCB2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlTlMoeGxpbmtOUywgZ2V0WGxpbmtQcm9wKGtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bGlua05TLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYmFzZVNldEF0dHIoZWwsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2VTZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgfSBlbHNlIHtcbiAgICAvLyAjNzEzODogSUUxMCAmIDExIGZpcmVzIGlucHV0IGV2ZW50IHdoZW4gc2V0dGluZyBwbGFjZWhvbGRlciBvblxuICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAvLyBpbW1lZGlhdGVseS5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoXG4gICAgICBpc0lFICYmICFpc0lFOSAmJlxuICAgICAgZWwudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyAmJlxuICAgICAga2V5ID09PSAncGxhY2Vob2xkZXInICYmIHZhbHVlICE9PSAnJyAmJiAhZWwuX19pZXBoXG4gICAgKSB7XG4gICAgICB2YXIgYmxvY2tlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2lucHV0JywgYmxvY2tlcik7XG4gICAgICB9O1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgZWwuX19pZXBoID0gdHJ1ZTsgLyogSUUgcGxhY2Vob2xkZXIgcGF0Y2hlZCAqL1xuICAgIH1cbiAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxudmFyIGF0dHJzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICB1cGRhdGU6IHVwZGF0ZUF0dHJzXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICBpZiAoXG4gICAgaXNVbmRlZihkYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgaXNVbmRlZihvbGREYXRhKSB8fCAoXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgLy8gaGFuZGxlIHRyYW5zaXRpb24gY2xhc3Nlc1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBjbGFzc1xuICBpZiAoY2xzICE9PSBlbC5fcHJldkNsYXNzKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgfVxufVxuXG52YXIga2xhc3MgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQ2xhc3MsXG4gIHVwZGF0ZTogdXBkYXRlQ2xhc3Ncbn07XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXG4vLyBzbyB3ZSB1c2VkIHNvbWUgcmVzZXJ2ZWQgdG9rZW5zIGR1cmluZyBjb21waWxlLlxudmFyIFJBTkdFX1RPS0VOID0gJ19fcic7XG52YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcblxuLyogICovXG5cbi8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbi8vIGl0J3MgaW1wb3J0YW50IHRvIHBsYWNlIHRoZSBldmVudCBhcyB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGJlY2F1c2Vcbi8vIHRoZSB3aG9sZSBwb2ludCBpcyBlbnN1cmluZyB0aGUgdi1tb2RlbCBjYWxsYmFjayBnZXRzIGNhbGxlZCBiZWZvcmVcbi8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudHMgKG9uKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgIC8vIElFIGlucHV0W3R5cGU9cmFuZ2VdIG9ubHkgc3VwcG9ydHMgYGNoYW5nZWAgZXZlbnRcbiAgICB2YXIgZXZlbnQgPSBpc0lFID8gJ2NoYW5nZScgOiAnaW5wdXQnO1xuICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW1JBTkdFX1RPS0VOXTtcbiAgfVxuICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAvLyBhZnRlciAyLjUuIEtlZXBpbmcgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBnZW5lcmF0ZWQgY29kZSBmcm9tIDwgMi40XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgIG9uLmNoYW5nZSA9IFtdLmNvbmNhdChvbltDSEVDS0JPWF9SQURJT19UT0tFTl0sIG9uLmNoYW5nZSB8fCBbXSk7XG4gICAgZGVsZXRlIG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0JDE7XG5cbmZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEgKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gIHZhciBfdGFyZ2V0ID0gdGFyZ2V0JDE7IC8vIHNhdmUgY3VycmVudCB0YXJnZXQgZWxlbWVudCBpbiBjbG9zdXJlXG4gIHJldHVybiBmdW5jdGlvbiBvbmNlSGFuZGxlciAoKSB7XG4gICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICByZW1vdmUkMihldmVudCwgb25jZUhhbmRsZXIsIGNhcHR1cmUsIF90YXJnZXQpO1xuICAgIH1cbiAgfVxufVxuXG4vLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuLy8gaW1wbGVtZW50YXRpb24gYW5kIGRvZXMgbm90IGZpcmUgbWljcm90YXNrcyBpbiBiZXR3ZWVuIGV2ZW50IHByb3BhZ2F0aW9uLCBzb1xuLy8gc2FmZSB0byBleGNsdWRlLlxudmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5cbmZ1bmN0aW9uIGFkZCQxIChcbiAgbmFtZSxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgcGFzc2l2ZVxuKSB7XG4gIC8vIGFzeW5jIGVkZ2UgY2FzZSAjNjU2NjogaW5uZXIgY2xpY2sgZXZlbnQgdHJpZ2dlcnMgcGF0Y2gsIGV2ZW50IGhhbmRsZXJcbiAgLy8gYXR0YWNoZWQgdG8gb3V0ZXIgZWxlbWVudCBkdXJpbmcgcGF0Y2gsIGFuZCB0cmlnZ2VyZWQgYWdhaW4uIFRoaXNcbiAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gIC8vIHRoZSBzb2x1dGlvbiBpcyBzaW1wbGU6IHdlIHNhdmUgdGhlIHRpbWVzdGFtcCB3aGVuIGEgaGFuZGxlciBpcyBhdHRhY2hlZCxcbiAgLy8gYW5kIHRoZSBoYW5kbGVyIHdvdWxkIG9ubHkgZmlyZSBpZiB0aGUgZXZlbnQgcGFzc2VkIHRvIGl0IHdhcyBmaXJlZFxuICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gIGlmICh1c2VNaWNyb3Rhc2tGaXgpIHtcbiAgICB2YXIgYXR0YWNoZWRUaW1lc3RhbXAgPSBjdXJyZW50Rmx1c2hUaW1lc3RhbXA7XG4gICAgdmFyIG9yaWdpbmFsID0gaGFuZGxlcjtcbiAgICBoYW5kbGVyID0gb3JpZ2luYWwuX3dyYXBwZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKFxuICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAvLyB0aGlzIGlzIGp1c3QgYSBzYWZldHkgbmV0IGluIGNhc2UgZXZlbnQudGltZVN0YW1wIGlzIHVucmVsaWFibGUgaW5cbiAgICAgICAgLy8gY2VydGFpbiB3ZWlyZCBlbnZpcm9ubWVudHMuLi5cbiAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAvLyBldmVudCBpcyBmaXJlZCBhZnRlciBoYW5kbGVyIGF0dGFjaG1lbnRcbiAgICAgICAgZS50aW1lU3RhbXAgPj0gYXR0YWNoZWRUaW1lc3RhbXAgfHxcbiAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgIC8vICM5NDYyIGlPUyA5IGJ1ZzogZXZlbnQudGltZVN0YW1wIGlzIDAgYWZ0ZXIgaGlzdG9yeS5wdXNoU3RhdGVcbiAgICAgICAgLy8gIzk2ODEgUXRXZWJFbmdpbmUgZXZlbnQudGltZVN0YW1wIGlzIG5lZ2F0aXZlIHZhbHVlXG4gICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgLy8gIzk0NDggYmFpbCBpZiBldmVudCBpcyBmaXJlZCBpbiBhbm90aGVyIGRvY3VtZW50IGluIGEgbXVsdGktcGFnZVxuICAgICAgICAvLyBlbGVjdHJvbi9udy5qcyBhcHAsIHNpbmNlIGV2ZW50LnRpbWVTdGFtcCB3aWxsIGJlIHVzaW5nIGEgZGlmZmVyZW50XG4gICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICBlLnRhcmdldC5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlcixcbiAgICBzdXBwb3J0c1Bhc3NpdmVcbiAgICAgID8geyBjYXB0dXJlOiBjYXB0dXJlLCBwYXNzaXZlOiBwYXNzaXZlIH1cbiAgICAgIDogY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiByZW1vdmUkMiAoXG4gIG5hbWUsXG4gIGhhbmRsZXIsXG4gIGNhcHR1cmUsXG4gIF90YXJnZXRcbikge1xuICAoX3RhcmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIuX3dyYXBwZXIgfHwgaGFuZGxlcixcbiAgICBjYXB0dXJlXG4gICk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIGlmIChpc1VuZGVmKG9sZFZub2RlLmRhdGEub24pICYmIGlzVW5kZWYodm5vZGUuZGF0YS5vbikpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuICB2YXIgb2xkT24gPSBvbGRWbm9kZS5kYXRhLm9uIHx8IHt9O1xuICB0YXJnZXQkMSA9IHZub2RlLmVsbTtcbiAgbm9ybWFsaXplRXZlbnRzKG9uKTtcbiAgdXBkYXRlTGlzdGVuZXJzKG9uLCBvbGRPbiwgYWRkJDEsIHJlbW92ZSQyLCBjcmVhdGVPbmNlSGFuZGxlciQxLCB2bm9kZS5jb250ZXh0KTtcbiAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG59XG5cbnZhciBldmVudHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICB1cGRhdGU6IHVwZGF0ZURPTUxpc3RlbmVyc1xufTtcblxuLyogICovXG5cbnZhciBzdmdDb250YWluZXI7XG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1cjtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihwcm9wcy5fX29iX18pKSB7XG4gICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgIGVsbVtrZXldID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICBjdXIgPSBwcm9wc1trZXldO1xuICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgIC8vIGFzIHRoZXNlIHdpbGwgdGhyb3cgYXdheSBleGlzdGluZyBET00gbm9kZXMgYW5kIGNhdXNlIHJlbW92YWwgZXJyb3JzXG4gICAgLy8gb24gc3Vic2VxdWVudCBwYXRjaGVzICgjMzM2MClcbiAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgIGlmICh2bm9kZS5jaGlsZHJlbikgeyB2bm9kZS5jaGlsZHJlbi5sZW5ndGggPSAwOyB9XG4gICAgICBpZiAoY3VyID09PSBvbGRQcm9wc1trZXldKSB7IGNvbnRpbnVlIH1cbiAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgIC8vIHJlcGxhY2VkIGJ5IGlubmVySFRNTC90ZXh0Q29udGVudCByZXRhaW5zIGl0cyBwYXJlbnROb2RlIHByb3BlcnR5XG4gICAgICBpZiAoZWxtLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgLy8gc3RvcmUgdmFsdWUgYXMgX3ZhbHVlIGFzIHdlbGwgc2luY2VcbiAgICAgIC8vIG5vbi1zdHJpbmcgdmFsdWVzIHdpbGwgYmUgc3RyaW5naWZpZWRcbiAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAvLyBhdm9pZCByZXNldHRpbmcgY3Vyc29yIHBvc2l0aW9uIHdoZW4gdmFsdWUgaXMgdGhlIHNhbWVcbiAgICAgIHZhciBzdHJDdXIgPSBpc1VuZGVmKGN1cikgPyAnJyA6IFN0cmluZyhjdXIpO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICBlbG0udmFsdWUgPSBzdHJDdXI7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmIGlzU1ZHKGVsbS50YWdOYW1lKSAmJiBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAvLyBJRSBkb2Vzbid0IHN1cHBvcnQgaW5uZXJIVE1MIGZvciBTVkcgZWxlbWVudHNcbiAgICAgIHN2Z0NvbnRhaW5lciA9IHN2Z0NvbnRhaW5lciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIgKyBjdXIgKyBcIjwvc3ZnPlwiO1xuICAgICAgdmFyIHN2ZyA9IHN2Z0NvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgd2hpbGUgKGVsbS5maXJzdENoaWxkKSB7XG4gICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoc3ZnLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAvLyBgdmFsdWVgIGlzIGhhbmRsZWQgc2VwYXJhdGVseSBiZWNhdXNlIHRoZSBET00gdmFsdWUgbWF5IGJlIHRlbXBvcmFyaWx5XG4gICAgICAvLyBvdXQgb2Ygc3luYyB3aXRoIFZET00gc3RhdGUgZHVlIHRvIGZvY3VzLCBjb21wb3NpdGlvbiBhbmQgbW9kaWZpZXJzLlxuICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNhcnJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICBjdXIgIT09IG9sZFByb3BzW2tleV1cbiAgICApIHtcbiAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgIC8vIGUuZy4gYHZhbHVlYCBvbiA8cHJvZ3Jlc3M+IHcvIG5vbi1maW5pdGUgdmFsdWVcbiAgICAgIHRyeSB7XG4gICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gIH1cbn1cblxuLy8gY2hlY2sgcGxhdGZvcm1zL3dlYi91dGlsL2F0dHJzLmpzIGFjY2VwdFZhbHVlXG5cblxuZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUgKGVsbSwgY2hlY2tWYWwpIHtcbiAgcmV0dXJuICghZWxtLmNvbXBvc2luZyAmJiAoXG4gICAgZWxtLnRhZ05hbWUgPT09ICdPUFRJT04nIHx8XG4gICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICBpc0RpcnR5V2l0aE1vZGlmaWVycyhlbG0sIGNoZWNrVmFsKVxuICApKVxufVxuXG5mdW5jdGlvbiBpc05vdEluRm9jdXNBbmREaXJ0eSAoZWxtLCBjaGVja1ZhbCkge1xuICAvLyByZXR1cm4gdHJ1ZSB3aGVuIHRleHRib3ggKC5udW1iZXIgYW5kIC50cmltKSBsb3NlcyBmb2N1cyBhbmQgaXRzIHZhbHVlIGlzXG4gIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICB2YXIgbm90SW5Gb2N1cyA9IHRydWU7XG4gIC8vICM2MTU3XG4gIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICB0cnkgeyBub3RJbkZvY3VzID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWxtOyB9IGNhdGNoIChlKSB7fVxuICByZXR1cm4gbm90SW5Gb2N1cyAmJiBlbG0udmFsdWUgIT09IGNoZWNrVmFsXG59XG5cbmZ1bmN0aW9uIGlzRGlydHlXaXRoTW9kaWZpZXJzIChlbG0sIG5ld1ZhbCkge1xuICB2YXIgdmFsdWUgPSBlbG0udmFsdWU7XG4gIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICBpZiAoaXNEZWYobW9kaWZpZXJzKSkge1xuICAgIGlmIChtb2RpZmllcnMubnVtYmVyKSB7XG4gICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgfVxuICAgIGlmIChtb2RpZmllcnMudHJpbSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxufVxuXG52YXIgZG9tUHJvcHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gIHVwZGF0ZTogdXBkYXRlRE9NUHJvcHNcbn07XG5cbi8qICAqL1xuXG52YXIgcGFyc2VTdHlsZVRleHQgPSBjYWNoZWQoZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gIHZhciBwcm9wZXJ0eURlbGltaXRlciA9IC86KC4rKS87XG4gIGNzc1RleHQuc3BsaXQobGlzdERlbGltaXRlcikuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB2YXIgdG1wID0gaXRlbS5zcGxpdChwcm9wZXJ0eURlbGltaXRlcik7XG4gICAgICB0bXAubGVuZ3RoID4gMSAmJiAocmVzW3RtcFswXS50cmltKCldID0gdG1wWzFdLnRyaW0oKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8vIG1lcmdlIHN0YXRpYyBhbmQgZHluYW1pYyBzdHlsZSBkYXRhIG9uIHRoZSBzYW1lIHZub2RlXG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZURhdGEgKGRhdGEpIHtcbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAvLyBzdGF0aWMgc3R5bGUgaXMgcHJlLXByb2Nlc3NlZCBpbnRvIGFuIG9iamVjdCBkdXJpbmcgY29tcGlsYXRpb25cbiAgLy8gYW5kIGlzIGFsd2F5cyBhIGZyZXNoIG9iamVjdCwgc28gaXQncyBzYWZlIHRvIG1lcmdlIGludG8gaXRcbiAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGVcbiAgICA/IGV4dGVuZChkYXRhLnN0YXRpY1N0eWxlLCBzdHlsZSlcbiAgICA6IHN0eWxlXG59XG5cbi8vIG5vcm1hbGl6ZSBwb3NzaWJsZSBhcnJheSAvIHN0cmluZyB2YWx1ZXMgaW50byBPYmplY3RcbmZ1bmN0aW9uIG5vcm1hbGl6ZVN0eWxlQmluZGluZyAoYmluZGluZ1N0eWxlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICByZXR1cm4gdG9PYmplY3QoYmluZGluZ1N0eWxlKVxuICB9XG4gIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXJzZVN0eWxlVGV4dChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgcmV0dXJuIGJpbmRpbmdTdHlsZVxufVxuXG4vKipcbiAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAqIHNvIHRoYXQgcGFyZW50IGNvbXBvbmVudCdzIHN0eWxlIGNvdWxkIG92ZXJyaWRlIGl0XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlICh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBzdHlsZURhdGE7XG5cbiAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChcbiAgICAgICAgY2hpbGROb2RlICYmIGNoaWxkTm9kZS5kYXRhICYmXG4gICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKVxuICAgICAgKSB7XG4gICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShoeXBoZW5hdGUobmFtZSksIHZhbC5yZXBsYWNlKGltcG9ydGFudFJFLCAnJyksICdpbXBvcnRhbnQnKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgLy8gU3VwcG9ydCB2YWx1ZXMgYXJyYXkgY3JlYXRlZCBieSBhdXRvcHJlZml4ZXIsIGUuZy5cbiAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgIC8vIFNldCB0aGVtIG9uZSBieSBvbmUsIGFuZCB0aGUgYnJvd3NlciB3aWxsIG9ubHkgc2V0IHRob3NlIGl0IGNhbiByZWNvZ25pemVcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgfVxuICB9XG59O1xuXG52YXIgdmVuZG9yTmFtZXMgPSBbJ1dlYmtpdCcsICdNb3onLCAnbXMnXTtcblxudmFyIGVtcHR5U3R5bGU7XG52YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gIGVtcHR5U3R5bGUgPSBlbXB0eVN0eWxlIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLnN0eWxlO1xuICBwcm9wID0gY2FtZWxpemUocHJvcCk7XG4gIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgIHJldHVybiBwcm9wXG4gIH1cbiAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZW5kb3JOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBuYW1lID0gdmVuZG9yTmFtZXNbaV0gKyBjYXBOYW1lO1xuICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgIHJldHVybiBuYW1lXG4gICAgfVxuICB9XG59KTtcblxuZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gIHZhciBvbGREYXRhID0gb2xkVm5vZGUuZGF0YTtcblxuICBpZiAoaXNVbmRlZihkYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKGRhdGEuc3R5bGUpICYmXG4gICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGN1ciwgbmFtZTtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICB2YXIgb2xkU3R5bGVCaW5kaW5nID0gb2xkRGF0YS5ub3JtYWxpemVkU3R5bGUgfHwgb2xkRGF0YS5zdHlsZSB8fCB7fTtcblxuICAvLyBpZiBzdGF0aWMgc3R5bGUgZXhpc3RzLCBzdHlsZWJpbmRpbmcgYWxyZWFkeSBtZXJnZWQgaW50byBpdCB3aGVuIGRvaW5nIG5vcm1hbGl6ZVN0eWxlRGF0YVxuICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKHZub2RlLmRhdGEuc3R5bGUpIHx8IHt9O1xuXG4gIC8vIHN0b3JlIG5vcm1hbGl6ZWQgc3R5bGUgdW5kZXIgYSBkaWZmZXJlbnQga2V5IGZvciBuZXh0IGRpZmZcbiAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAvLyB0byBtdXRhdGUgaXQuXG4gIHZub2RlLmRhdGEubm9ybWFsaXplZFN0eWxlID0gaXNEZWYoc3R5bGUuX19vYl9fKVxuICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICA6IHN0eWxlO1xuXG4gIHZhciBuZXdTdHlsZSA9IGdldFN0eWxlKHZub2RlLCB0cnVlKTtcblxuICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICBpZiAoaXNVbmRlZihuZXdTdHlsZVtuYW1lXSkpIHtcbiAgICAgIHNldFByb3AoZWwsIG5hbWUsICcnKTtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG5ld1N0eWxlKSB7XG4gICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgaWYgKGN1ciAhPT0gb2xkU3R5bGVbbmFtZV0pIHtcbiAgICAgIC8vIGllOSBzZXR0aW5nIHRvIG51bGwgaGFzIG5vIGVmZmVjdCwgbXVzdCB1c2UgZW1wdHkgc3RyaW5nXG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHN0eWxlID0ge1xuICBjcmVhdGU6IHVwZGF0ZVN0eWxlLFxuICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG59O1xuXG4vKiAgKi9cblxudmFyIHdoaXRlc3BhY2VSRSA9IC9cXHMrLztcblxuLyoqXG4gKiBBZGQgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiBhZGRDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5hZGQoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgaWYgKGN1ci5pbmRleE9mKCcgJyArIGNscyArICcgJykgPCAwKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGN1ciArIGNscykudHJpbSgpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgY2xhc3Mgd2l0aCBjb21wYXRpYmlsaXR5IGZvciBTVkcgc2luY2UgY2xhc3NMaXN0IGlzIG5vdCBzdXBwb3J0ZWQgb25cbiAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICovXG5mdW5jdGlvbiByZW1vdmVDbGFzcyAoZWwsIGNscykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNscyk7XG4gICAgfVxuICAgIGlmICghZWwuY2xhc3NMaXN0Lmxlbmd0aCkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgd2hpbGUgKGN1ci5pbmRleE9mKHRhcikgPj0gMCkge1xuICAgICAgY3VyID0gY3VyLnJlcGxhY2UodGFyLCAnICcpO1xuICAgIH1cbiAgICBjdXIgPSBjdXIudHJpbSgpO1xuICAgIGlmIChjdXIpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiByZXNvbHZlVHJhbnNpdGlvbiAoZGVmJCQxKSB7XG4gIGlmICghZGVmJCQxKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHJlcyA9IHt9O1xuICAgIGlmIChkZWYkJDEuY3NzICE9PSBmYWxzZSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxLm5hbWUgfHwgJ3YnKSk7XG4gICAgfVxuICAgIGV4dGVuZChyZXMsIGRlZiQkMSk7XG4gICAgcmV0dXJuIHJlc1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZiQkMSlcbiAgfVxufVxuXG52YXIgYXV0b0Nzc1RyYW5zaXRpb24gPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnRlckNsYXNzOiAobmFtZSArIFwiLWVudGVyXCIpLFxuICAgIGVudGVyVG9DbGFzczogKG5hbWUgKyBcIi1lbnRlci10b1wiKSxcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICBsZWF2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlXCIpLFxuICAgIGxlYXZlVG9DbGFzczogKG5hbWUgKyBcIi1sZWF2ZS10b1wiKSxcbiAgICBsZWF2ZUFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICB9XG59KTtcblxudmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xudmFyIFRSQU5TSVRJT04gPSAndHJhbnNpdGlvbic7XG52YXIgQU5JTUFUSU9OID0gJ2FuaW1hdGlvbic7XG5cbi8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbnZhciB0cmFuc2l0aW9uUHJvcCA9ICd0cmFuc2l0aW9uJztcbnZhciB0cmFuc2l0aW9uRW5kRXZlbnQgPSAndHJhbnNpdGlvbmVuZCc7XG52YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xudmFyIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ2FuaW1hdGlvbmVuZCc7XG5pZiAoaGFzVHJhbnNpdGlvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHdpbmRvdy5vbnRyYW5zaXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdHRyYW5zaXRpb25lbmQgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICB0cmFuc2l0aW9uUHJvcCA9ICdXZWJraXRUcmFuc2l0aW9uJztcbiAgICB0cmFuc2l0aW9uRW5kRXZlbnQgPSAnd2Via2l0VHJhbnNpdGlvbkVuZCc7XG4gIH1cbiAgaWYgKHdpbmRvdy5vbmFuaW1hdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgd2luZG93Lm9ud2Via2l0YW5pbWF0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgYW5pbWF0aW9uUHJvcCA9ICdXZWJraXRBbmltYXRpb24nO1xuICAgIGFuaW1hdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdEFuaW1hdGlvbkVuZCc7XG4gIH1cbn1cblxuLy8gYmluZGluZyB0byB3aW5kb3cgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgaG90IHJlbG9hZCB3b3JrIGluIElFIGluIHN0cmljdCBtb2RlXG52YXIgcmFmID0gaW5Ccm93c2VyXG4gID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZVxuICAgID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdylcbiAgICA6IHNldFRpbWVvdXRcbiAgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqLyBmdW5jdGlvbiAoZm4pIHsgcmV0dXJuIGZuKCk7IH07XG5cbmZ1bmN0aW9uIG5leHRGcmFtZSAoZm4pIHtcbiAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICByYWYoZm4pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIHZhciB0cmFuc2l0aW9uQ2xhc3NlcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcyB8fCAoZWwuX3RyYW5zaXRpb25DbGFzc2VzID0gW10pO1xuICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgIHRyYW5zaXRpb25DbGFzc2VzLnB1c2goY2xzKTtcbiAgICBhZGRDbGFzcyhlbCwgY2xzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgIHJlbW92ZShlbC5fdHJhbnNpdGlvbkNsYXNzZXMsIGNscyk7XG4gIH1cbiAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG59XG5cbmZ1bmN0aW9uIHdoZW5UcmFuc2l0aW9uRW5kcyAoXG4gIGVsLFxuICBleHBlY3RlZFR5cGUsXG4gIGNiXG4pIHtcbiAgdmFyIHJlZiA9IGdldFRyYW5zaXRpb25JbmZvKGVsLCBleHBlY3RlZFR5cGUpO1xuICB2YXIgdHlwZSA9IHJlZi50eXBlO1xuICB2YXIgdGltZW91dCA9IHJlZi50aW1lb3V0O1xuICB2YXIgcHJvcENvdW50ID0gcmVmLnByb3BDb3VudDtcbiAgaWYgKCF0eXBlKSB7IHJldHVybiBjYigpIH1cbiAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICB2YXIgZW5kZWQgPSAwO1xuICB2YXIgZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICBjYigpO1xuICB9O1xuICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZWwpIHtcbiAgICAgIGlmICgrK2VuZGVkID49IHByb3BDb3VudCkge1xuICAgICAgICBlbmQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgIGlmIChlbmRlZCA8IHByb3BDb3VudCkge1xuICAgICAgZW5kKCk7XG4gICAgfVxuICB9LCB0aW1lb3V0ICsgMSk7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbn1cblxudmFyIHRyYW5zZm9ybVJFID0gL1xcYih0cmFuc2Zvcm18YWxsKSgsfCQpLztcblxuZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8gKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgdmFyIHN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcbiAgLy8gSlNET00gbWF5IHJldHVybiB1bmRlZmluZWQgZm9yIHRyYW5zaXRpb24gcHJvcGVydGllc1xuICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gKHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIHRyYW5zaXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dCh0cmFuc2l0aW9uRGVsYXlzLCB0cmFuc2l0aW9uRHVyYXRpb25zKTtcbiAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvbkR1cmF0aW9ucyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEdXJhdGlvbiddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcblxuICB2YXIgdHlwZTtcbiAgdmFyIHRpbWVvdXQgPSAwO1xuICB2YXIgcHJvcENvdW50ID0gMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xuICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XG4gICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG4gIHZhciBoYXNUcmFuc2Zvcm0gPVxuICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgcHJvcENvdW50OiBwcm9wQ291bnQsXG4gICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gIH0pKVxufVxuXG4vLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4vLyBpbiBhIGxvY2FsZS1kZXBlbmRlbnQgd2F5LCB1c2luZyBhIGNvbW1hIGluc3RlYWQgb2YgYSBkb3QuXG4vLyBJZiBjb21tYSBpcyBub3QgcmVwbGFjZWQgd2l0aCBhIGRvdCwgdGhlIGlucHV0IHdpbGwgYmUgcm91bmRlZCBkb3duIChpLmUuIGFjdGluZ1xuLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuZnVuY3Rpb24gdG9NcyAocykge1xuICByZXR1cm4gTnVtYmVyKHMuc2xpY2UoMCwgLTEpLnJlcGxhY2UoJywnLCAnLicpKSAqIDEwMDBcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVudGVyICh2bm9kZSwgdG9nZ2xlRGlzcGxheSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgLy8gY2FsbCBsZWF2ZSBjYWxsYmFjayBub3dcbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgZWwuX2xlYXZlQ2IoKTtcbiAgfVxuXG4gIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgaWYgKGlzVW5kZWYoZGF0YSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgZW50ZXJDbGFzcyA9IGRhdGEuZW50ZXJDbGFzcztcbiAgdmFyIGVudGVyVG9DbGFzcyA9IGRhdGEuZW50ZXJUb0NsYXNzO1xuICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgdmFyIGFwcGVhckNsYXNzID0gZGF0YS5hcHBlYXJDbGFzcztcbiAgdmFyIGFwcGVhclRvQ2xhc3MgPSBkYXRhLmFwcGVhclRvQ2xhc3M7XG4gIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVFbnRlciA9IGRhdGEuYmVmb3JlRW50ZXI7XG4gIHZhciBlbnRlciA9IGRhdGEuZW50ZXI7XG4gIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICB2YXIgZW50ZXJDYW5jZWxsZWQgPSBkYXRhLmVudGVyQ2FuY2VsbGVkO1xuICB2YXIgYmVmb3JlQXBwZWFyID0gZGF0YS5iZWZvcmVBcHBlYXI7XG4gIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgdmFyIGFmdGVyQXBwZWFyID0gZGF0YS5hZnRlckFwcGVhcjtcbiAgdmFyIGFwcGVhckNhbmNlbGxlZCA9IGRhdGEuYXBwZWFyQ2FuY2VsbGVkO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIC8vIGFjdGl2ZUluc3RhbmNlIHdpbGwgYWx3YXlzIGJlIHRoZSA8dHJhbnNpdGlvbj4gY29tcG9uZW50IG1hbmFnaW5nIHRoaXNcbiAgLy8gdHJhbnNpdGlvbi4gT25lIGVkZ2UgY2FzZSB0byBjaGVjayBpcyB3aGVuIHRoZSA8dHJhbnNpdGlvbj4gaXMgcGxhY2VkXG4gIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gIC8vIDx0cmFuc2l0aW9uPidzIHBhcmVudCBmb3IgYXBwZWFyIGNoZWNrLlxuICB2YXIgY29udGV4dCA9IGFjdGl2ZUluc3RhbmNlO1xuICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gIHdoaWxlICh0cmFuc2l0aW9uTm9kZSAmJiB0cmFuc2l0aW9uTm9kZS5wYXJlbnQpIHtcbiAgICBjb250ZXh0ID0gdHJhbnNpdGlvbk5vZGUuY29udGV4dDtcbiAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgfVxuXG4gIHZhciBpc0FwcGVhciA9ICFjb250ZXh0Ll9pc01vdW50ZWQgfHwgIXZub2RlLmlzUm9vdEluc2VydDtcblxuICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgPyBhcHBlYXJDbGFzc1xuICAgIDogZW50ZXJDbGFzcztcbiAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA/IGFwcGVhckFjdGl2ZUNsYXNzXG4gICAgOiBlbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICA/IGFwcGVhclRvQ2xhc3NcbiAgICA6IGVudGVyVG9DbGFzcztcblxuICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChiZWZvcmVBcHBlYXIgfHwgYmVmb3JlRW50ZXIpXG4gICAgOiBiZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAodHlwZW9mIGFwcGVhciA9PT0gJ2Z1bmN0aW9uJyA/IGFwcGVhciA6IGVudGVyKVxuICAgIDogZW50ZXI7XG4gIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYWZ0ZXJBcHBlYXIgfHwgYWZ0ZXJFbnRlcilcbiAgICA6IGFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgID8gKGFwcGVhckNhbmNlbGxlZCB8fCBlbnRlckNhbmNlbGxlZClcbiAgICA6IGVudGVyQ2FuY2VsbGVkO1xuXG4gIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24uZW50ZXJcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBleHBsaWNpdEVudGVyRHVyYXRpb24gIT0gbnVsbCkge1xuICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uLCAnZW50ZXInLCB2bm9kZSk7XG4gIH1cblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgoZW50ZXJIb29rKTtcblxuICB2YXIgY2IgPSBlbC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICB9XG4gICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWZ0ZXJFbnRlckhvb2sgJiYgYWZ0ZXJFbnRlckhvb2soZWwpO1xuICAgIH1cbiAgICBlbC5fZW50ZXJDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgLy8gcmVtb3ZlIHBlbmRpbmcgbGVhdmUgZWxlbWVudCBvbiBlbnRlciBieSBpbmplY3RpbmcgYW4gaW5zZXJ0IGhvb2tcbiAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ2luc2VydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgdmFyIHBlbmRpbmdOb2RlID0gcGFyZW50ICYmIHBhcmVudC5fcGVuZGluZyAmJiBwYXJlbnQuX3BlbmRpbmdbdm5vZGUua2V5XTtcbiAgICAgIGlmIChwZW5kaW5nTm9kZSAmJlxuICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2JcbiAgICAgICkge1xuICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgIH1cbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHN0YXJ0IGVudGVyIHRyYW5zaXRpb25cbiAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICAgIGlmICghdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRFbnRlckR1cmF0aW9uKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgdG9nZ2xlRGlzcGxheSAmJiB0b2dnbGVEaXNwbGF5KCk7XG4gICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICB9XG5cbiAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgY2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZWF2ZSAodm5vZGUsIHJtKSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBjYWxsIGVudGVyIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2VudGVyQ2IpKSB7XG4gICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fZW50ZXJDYigpO1xuICB9XG5cbiAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICBpZiAoaXNVbmRlZihkYXRhKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVybiBybSgpXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKGVsLl9sZWF2ZUNiKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgdmFyIGxlYXZlQ2xhc3MgPSBkYXRhLmxlYXZlQ2xhc3M7XG4gIHZhciBsZWF2ZVRvQ2xhc3MgPSBkYXRhLmxlYXZlVG9DbGFzcztcbiAgdmFyIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gIHZhciBiZWZvcmVMZWF2ZSA9IGRhdGEuYmVmb3JlTGVhdmU7XG4gIHZhciBsZWF2ZSA9IGRhdGEubGVhdmU7XG4gIHZhciBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlO1xuICB2YXIgbGVhdmVDYW5jZWxsZWQgPSBkYXRhLmxlYXZlQ2FuY2VsbGVkO1xuICB2YXIgZGVsYXlMZWF2ZSA9IGRhdGEuZGVsYXlMZWF2ZTtcbiAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICB2YXIgZXhwZWN0c0NTUyA9IGNzcyAhPT0gZmFsc2UgJiYgIWlzSUU5O1xuICB2YXIgdXNlcldhbnRzQ29udHJvbCA9IGdldEhvb2tBcmd1bWVudHNMZW5ndGgobGVhdmUpO1xuXG4gIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihcbiAgICBpc09iamVjdChkdXJhdGlvbilcbiAgICAgID8gZHVyYXRpb24ubGVhdmVcbiAgICAgIDogZHVyYXRpb25cbiAgKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0RlZihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24sICdsZWF2ZScsIHZub2RlKTtcbiAgfVxuXG4gIHZhciBjYiA9IGVsLl9sZWF2ZUNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgZWwucGFyZW50Tm9kZS5fcGVuZGluZykge1xuICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9kZS5rZXldID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgfVxuICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBsZWF2ZUNhbmNlbGxlZCAmJiBsZWF2ZUNhbmNlbGxlZChlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgICBhZnRlckxlYXZlICYmIGFmdGVyTGVhdmUoZWwpO1xuICAgIH1cbiAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gIH0pO1xuXG4gIGlmIChkZWxheUxlYXZlKSB7XG4gICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICB9IGVsc2Uge1xuICAgIHBlcmZvcm1MZWF2ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVyZm9ybUxlYXZlICgpIHtcbiAgICAvLyB0aGUgZGVsYXllZCBsZWF2ZSBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY2FuY2VsbGVkXG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICBpZiAoIXZub2RlLmRhdGEuc2hvdyAmJiBlbC5wYXJlbnROb2RlKSB7XG4gICAgICAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyB8fCAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyA9IHt9KSlbKHZub2RlLmtleSldID0gdm5vZGU7XG4gICAgfVxuICAgIGJlZm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICBpZiAoIWNiLmNhbmNlbGxlZCkge1xuICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdExlYXZlRHVyYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgbGVhdmUgJiYgbGVhdmUoZWwsIGNiKTtcbiAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG59XG5cbi8vIG9ubHkgdXNlZCBpbiBkZXYgbW9kZVxuZnVuY3Rpb24gY2hlY2tEdXJhdGlvbiAodmFsLCBuYW1lLCB2bm9kZSkge1xuICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1lICsgXCIgZHVyYXRpb24gaXMgbm90IGEgdmFsaWQgbnVtYmVyIC0gXCIgK1xuICAgICAgXCJnb3QgXCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsKSkgKyBcIi5cIixcbiAgICAgIHZub2RlLmNvbnRleHRcbiAgICApO1xuICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICB3YXJuKFxuICAgICAgXCI8dHJhbnNpdGlvbj4gZXhwbGljaXQgXCIgKyBuYW1lICsgXCIgZHVyYXRpb24gaXMgTmFOIC0gXCIgK1xuICAgICAgJ3RoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4nLFxuICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYWxpZER1cmF0aW9uICh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05hTih2YWwpXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gKiAtIGEgbWVyZ2VkIGhvb2sgKGludm9rZXIpIHdpdGggdGhlIG9yaWdpbmFsIGluIC5mbnNcbiAqIC0gYSB3cmFwcGVkIGNvbXBvbmVudCBtZXRob2QgKGNoZWNrIC5fbGVuZ3RoKVxuICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICovXG5mdW5jdGlvbiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoIChmbikge1xuICBpZiAoaXNVbmRlZihmbikpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgaWYgKGlzRGVmKGludm9rZXJGbnMpKSB7XG4gICAgLy8gaW52b2tlclxuICAgIHJldHVybiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKFxuICAgICAgQXJyYXkuaXNBcnJheShpbnZva2VyRm5zKVxuICAgICAgICA/IGludm9rZXJGbnNbMF1cbiAgICAgICAgOiBpbnZva2VyRm5zXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoZm4uX2xlbmd0aCB8fCBmbi5sZW5ndGgpID4gMVxuICB9XG59XG5cbmZ1bmN0aW9uIF9lbnRlciAoXywgdm5vZGUpIHtcbiAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgIGVudGVyKHZub2RlKTtcbiAgfVxufVxuXG52YXIgdHJhbnNpdGlvbiA9IGluQnJvd3NlciA/IHtcbiAgY3JlYXRlOiBfZW50ZXIsXG4gIGFjdGl2YXRlOiBfZW50ZXIsXG4gIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlJCQxICh2bm9kZSwgcm0pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh2bm9kZS5kYXRhLnNob3cgIT09IHRydWUpIHtcbiAgICAgIGxlYXZlKHZub2RlLCBybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJtKCk7XG4gICAgfVxuICB9XG59IDoge307XG5cbnZhciBwbGF0Zm9ybU1vZHVsZXMgPSBbXG4gIGF0dHJzLFxuICBrbGFzcyxcbiAgZXZlbnRzLFxuICBkb21Qcm9wcyxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb25cbl07XG5cbi8qICAqL1xuXG4vLyB0aGUgZGlyZWN0aXZlIG1vZHVsZSBzaG91bGQgYmUgYXBwbGllZCBsYXN0LCBhZnRlciBhbGxcbi8vIGJ1aWx0LWluIG1vZHVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuXG52YXIgbW9kdWxlcyA9IHBsYXRmb3JtTW9kdWxlcy5jb25jYXQoYmFzZU1vZHVsZXMpO1xuXG52YXIgcGF0Y2ggPSBjcmVhdGVQYXRjaEZ1bmN0aW9uKHsgbm9kZU9wczogbm9kZU9wcywgbW9kdWxlczogbW9kdWxlcyB9KTtcblxuLyoqXG4gKiBOb3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgbGlrZSBhdHRhY2hpbmdcbiAqIHByb3BlcnRpZXMgdG8gRWxlbWVudHMuXG4gKi9cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAoaXNJRTkpIHtcbiAgLy8gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9pbnRlcm5ldC1leHBsb3Jlci05LW9uaW5wdXQvXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIGlmIChlbCAmJiBlbC52bW9kZWwpIHtcbiAgICAgIHRyaWdnZXIoZWwsICdpbnB1dCcpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBkaXJlY3RpdmUgPSB7XG4gIGluc2VydGVkOiBmdW5jdGlvbiBpbnNlcnRlZCAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAvLyAjNjkwM1xuICAgICAgaWYgKG9sZFZub2RlLmVsbSAmJiAhb2xkVm5vZGUuZWxtLl92T3B0aW9ucykge1xuICAgICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZSwgJ3Bvc3RwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBkaXJlY3RpdmUuY29tcG9uZW50VXBkYXRlZChlbCwgYmluZGluZywgdm5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gJ3RleHRhcmVhJyB8fCBpc1RleHRJbnB1dFR5cGUoZWwudHlwZSkpIHtcbiAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICBpZiAoIWJpbmRpbmcubW9kaWZpZXJzLmxhenkpIHtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIG9uQ29tcG9zaXRpb25TdGFydCk7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIC8vIFNhZmFyaSA8IDEwLjIgJiBVSVdlYlZpZXcgZG9lc24ndCBmaXJlIGNvbXBvc2l0aW9uZW5kIHdoZW5cbiAgICAgICAgLy8gc3dpdGNoaW5nIGZvY3VzIGJlZm9yZSBjb25maXJtaW5nIGNvbXBvc2l0aW9uIGNob2ljZVxuICAgICAgICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBpT1MgQ2hyb21lXG4gICAgICAgIC8vIGZpcmVzIFwiY2hhbmdlXCIgaW5zdGVhZCBvZiBcImlucHV0XCIgb24gYXV0b2NvbXBsZXRlLlxuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBvbkNvbXBvc2l0aW9uRW5kKTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFOSkge1xuICAgICAgICAgIGVsLnZtb2RlbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50VXBkYXRlZDogZnVuY3Rpb24gY29tcG9uZW50VXBkYXRlZCAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIC8vIGluIGNhc2UgdGhlIG9wdGlvbnMgcmVuZGVyZWQgYnkgdi1mb3IgaGF2ZSBjaGFuZ2VkLFxuICAgICAgLy8gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSB2YWx1ZSBpcyBvdXQtb2Ytc3luYyB3aXRoIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICAgICAgLy8gZGV0ZWN0IHN1Y2ggY2FzZXMgYW5kIGZpbHRlciBvdXQgdmFsdWVzIHRoYXQgbm8gbG9uZ2VyIGhhcyBhIG1hdGNoaW5nXG4gICAgICAvLyBvcHRpb24gaW4gdGhlIERPTS5cbiAgICAgIHZhciBwcmV2T3B0aW9ucyA9IGVsLl92T3B0aW9ucztcbiAgICAgIHZhciBjdXJPcHRpb25zID0gZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgaWYgKGN1ck9wdGlvbnMuc29tZShmdW5jdGlvbiAobywgaSkgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgcHJldk9wdGlvbnNbaV0pOyB9KSkge1xuICAgICAgICAvLyB0cmlnZ2VyIGNoYW5nZSBldmVudCBpZlxuICAgICAgICAvLyBubyBtYXRjaGluZyBvcHRpb24gZm91bmQgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZVxuICAgICAgICB2YXIgbmVlZFJlc2V0ID0gZWwubXVsdGlwbGVcbiAgICAgICAgICA/IGJpbmRpbmcudmFsdWUuc29tZShmdW5jdGlvbiAodikgeyByZXR1cm4gaGFzTm9NYXRjaGluZ09wdGlvbih2LCBjdXJPcHRpb25zKTsgfSlcbiAgICAgICAgICA6IGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgJiYgaGFzTm9NYXRjaGluZ09wdGlvbihiaW5kaW5nLnZhbHVlLCBjdXJPcHRpb25zKTtcbiAgICAgICAgaWYgKG5lZWRSZXNldCkge1xuICAgICAgICAgIHRyaWdnZXIoZWwsICdjaGFuZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2VsZWN0ZWQgKGVsLCBiaW5kaW5nLCB2bSkge1xuICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNJRSB8fCBpc0VkZ2UpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdHVhbGx5U2V0U2VsZWN0ZWQoZWwsIGJpbmRpbmcsIHZtKTtcbiAgICB9LCAwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY3R1YWxseVNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcbiAgdmFyIGlzTXVsdGlwbGUgPSBlbC5tdWx0aXBsZTtcbiAgaWYgKGlzTXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCI8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+IFwiICtcbiAgICAgIFwiZXhwZWN0cyBhbiBBcnJheSB2YWx1ZSBmb3IgaXRzIGJpbmRpbmcsIGJ1dCBnb3QgXCIgKyAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSkpLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBzZWxlY3RlZCwgb3B0aW9uO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGVsLm9wdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb3B0aW9uID0gZWwub3B0aW9uc1tpXTtcbiAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgc2VsZWN0ZWQgPSBsb29zZUluZGV4T2YodmFsdWUsIGdldFZhbHVlKG9wdGlvbikpID4gLTE7XG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgIGlmIChlbC5zZWxlY3RlZEluZGV4ICE9PSBpKSB7XG4gICAgICAgICAgZWwuc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNNdWx0aXBsZSkge1xuICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5ldmVyeShmdW5jdGlvbiAobykgeyByZXR1cm4gIWxvb3NlRXF1YWwobywgdmFsdWUpOyB9KVxufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gIHJldHVybiAnX3ZhbHVlJyBpbiBvcHRpb25cbiAgICA/IG9wdGlvbi5fdmFsdWVcbiAgICA6IG9wdGlvbi52YWx1ZVxufVxuXG5mdW5jdGlvbiBvbkNvbXBvc2l0aW9uU3RhcnQgKGUpIHtcbiAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvbkVuZCAoZSkge1xuICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICBpZiAoIWUudGFyZ2V0LmNvbXBvc2luZykgeyByZXR1cm4gfVxuICBlLnRhcmdldC5jb21wb3NpbmcgPSBmYWxzZTtcbiAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIgKGVsLCB0eXBlKSB7XG4gIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgZS5pbml0RXZlbnQodHlwZSwgdHJ1ZSwgdHJ1ZSk7XG4gIGVsLmRpc3BhdGNoRXZlbnQoZSk7XG59XG5cbi8qICAqL1xuXG4vLyByZWN1cnNpdmVseSBzZWFyY2ggZm9yIHBvc3NpYmxlIHRyYW5zaXRpb24gZGVmaW5lZCBpbnNpZGUgdGhlIGNvbXBvbmVudCByb290XG5mdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9kZSkge1xuICByZXR1cm4gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiYgKCF2bm9kZS5kYXRhIHx8ICF2bm9kZS5kYXRhLnRyYW5zaXRpb24pXG4gICAgPyBsb2NhdGVOb2RlKHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZSlcbiAgICA6IHZub2RlXG59XG5cbnZhciBzaG93ID0ge1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcblxuICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICB2YXIgb3JpZ2luYWxEaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5ID1cbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICcnIDogZWwuc3R5bGUuZGlzcGxheTtcbiAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgIH1cbiAgfSxcblxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG4gICAgdmFyIG9sZFZhbHVlID0gcmVmLm9sZFZhbHVlO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCF2YWx1ZSA9PT0gIW9sZFZhbHVlKSB7IHJldHVybiB9XG4gICAgdm5vZGUgPSBsb2NhdGVOb2RlKHZub2RlKTtcbiAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgIGlmICh0cmFuc2l0aW9uJCQxKSB7XG4gICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVudGVyKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWF2ZSh2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gdmFsdWUgPyBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgOiAnbm9uZSc7XG4gICAgfVxuICB9LFxuXG4gIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kIChcbiAgICBlbCxcbiAgICBiaW5kaW5nLFxuICAgIHZub2RlLFxuICAgIG9sZFZub2RlLFxuICAgIGlzRGVzdHJveVxuICApIHtcbiAgICBpZiAoIWlzRGVzdHJveSkge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBwbGF0Zm9ybURpcmVjdGl2ZXMgPSB7XG4gIG1vZGVsOiBkaXJlY3RpdmUsXG4gIHNob3c6IHNob3dcbn07XG5cbi8qICAqL1xuXG52YXIgdHJhbnNpdGlvblByb3BzID0ge1xuICBuYW1lOiBTdHJpbmcsXG4gIGFwcGVhcjogQm9vbGVhbixcbiAgY3NzOiBCb29sZWFuLFxuICBtb2RlOiBTdHJpbmcsXG4gIHR5cGU6IFN0cmluZyxcbiAgZW50ZXJDbGFzczogU3RyaW5nLFxuICBsZWF2ZUNsYXNzOiBTdHJpbmcsXG4gIGVudGVyVG9DbGFzczogU3RyaW5nLFxuICBsZWF2ZVRvQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJBY3RpdmVDbGFzczogU3RyaW5nLFxuICBsZWF2ZUFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGFwcGVhclRvQ2xhc3M6IFN0cmluZyxcbiAgZHVyYXRpb246IFtOdW1iZXIsIFN0cmluZywgT2JqZWN0XVxufTtcblxuLy8gaW4gY2FzZSB0aGUgY2hpbGQgaXMgYWxzbyBhbiBhYnN0cmFjdCBjb21wb25lbnQsIGUuZy4gPGtlZXAtYWxpdmU+XG4vLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuZnVuY3Rpb24gZ2V0UmVhbENoaWxkICh2bm9kZSkge1xuICB2YXIgY29tcE9wdGlvbnMgPSB2bm9kZSAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgcmV0dXJuIGdldFJlYWxDaGlsZChnZXRGaXJzdENvbXBvbmVudENoaWxkKGNvbXBPcHRpb25zLmNoaWxkcmVuKSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdm5vZGVcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEgKGNvbXApIHtcbiAgdmFyIGRhdGEgPSB7fTtcbiAgdmFyIG9wdGlvbnMgPSBjb21wLiRvcHRpb25zO1xuICAvLyBwcm9wc1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5wcm9wc0RhdGEpIHtcbiAgICBkYXRhW2tleV0gPSBjb21wW2tleV07XG4gIH1cbiAgLy8gZXZlbnRzLlxuICAvLyBleHRyYWN0IGxpc3RlbmVycyBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSB0cmFuc2l0aW9uIG1ldGhvZHNcbiAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgZm9yICh2YXIga2V5JDEgaW4gbGlzdGVuZXJzKSB7XG4gICAgZGF0YVtjYW1lbGl6ZShrZXkkMSldID0gbGlzdGVuZXJzW2tleSQxXTtcbiAgfVxuICByZXR1cm4gZGF0YVxufVxuXG5mdW5jdGlvbiBwbGFjZWhvbGRlciAoaCwgcmF3Q2hpbGQpIHtcbiAgaWYgKC9cXGQta2VlcC1hbGl2ZSQvLnRlc3QocmF3Q2hpbGQudGFnKSkge1xuICAgIHJldHVybiBoKCdrZWVwLWFsaXZlJywge1xuICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRUcmFuc2l0aW9uICh2bm9kZSkge1xuICB3aGlsZSAoKHZub2RlID0gdm5vZGUucGFyZW50KSkge1xuICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZUNoaWxkIChjaGlsZCwgb2xkQ2hpbGQpIHtcbiAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnXG59XG5cbnZhciBpc05vdFRleHROb2RlID0gZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfTtcblxudmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG5cbnZhciBUcmFuc2l0aW9uID0ge1xuICBuYW1lOiAndHJhbnNpdGlvbicsXG4gIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gIGFic3RyYWN0OiB0cnVlLFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGZpbHRlciBvdXQgdGV4dCBub2RlcyAocG9zc2libGUgd2hpdGVzcGFjZXMpXG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnPHRyYW5zaXRpb24+IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBzaW5nbGUgZWxlbWVudC4gVXNlICcgK1xuICAgICAgICAnPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy4nLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICAvLyB3YXJuIGludmFsaWQgbW9kZVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBtb2RlICYmIG1vZGUgIT09ICdpbi1vdXQnICYmIG1vZGUgIT09ICdvdXQtaW4nXG4gICAgKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnaW52YWxpZCA8dHJhbnNpdGlvbj4gbW9kZTogJyArIG1vZGUsXG4gICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgYSBjb21wb25lbnQgcm9vdCBub2RlIGFuZCB0aGUgY29tcG9uZW50J3NcbiAgICAvLyBwYXJlbnQgY29udGFpbmVyIG5vZGUgYWxzbyBoYXMgdHJhbnNpdGlvbiwgc2tpcC5cbiAgICBpZiAoaGFzUGFyZW50VHJhbnNpdGlvbih0aGlzLiR2bm9kZSkpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIC8vIGFwcGx5IHRyYW5zaXRpb24gZGF0YSB0byBjaGlsZFxuICAgIC8vIHVzZSBnZXRSZWFsQ2hpbGQoKSB0byBpZ25vcmUgYWJzdHJhY3QgY29tcG9uZW50cyBlLmcuIGtlZXAtYWxpdmVcbiAgICB2YXIgY2hpbGQgPSBnZXRSZWFsQ2hpbGQocmF3Q2hpbGQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9sZWF2aW5nKSB7XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpXG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGEga2V5IHRoYXQgaXMgdW5pcXVlIHRvIHRoZSB2bm9kZSB0eXBlIGFuZCB0byB0aGlzIHRyYW5zaXRpb25cbiAgICAvLyBjb21wb25lbnQgaW5zdGFuY2UuIFRoaXMga2V5IHdpbGwgYmUgdXNlZCB0byByZW1vdmUgcGVuZGluZyBsZWF2aW5nIG5vZGVzXG4gICAgLy8gZHVyaW5nIGVudGVyaW5nLlxuICAgIHZhciBpZCA9IFwiX190cmFuc2l0aW9uLVwiICsgKHRoaXMuX3VpZCkgKyBcIi1cIjtcbiAgICBjaGlsZC5rZXkgPSBjaGlsZC5rZXkgPT0gbnVsbFxuICAgICAgPyBjaGlsZC5pc0NvbW1lbnRcbiAgICAgICAgPyBpZCArICdjb21tZW50J1xuICAgICAgICA6IGlkICsgY2hpbGQudGFnXG4gICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgPyAoU3RyaW5nKGNoaWxkLmtleSkuaW5kZXhPZihpZCkgPT09IDAgPyBjaGlsZC5rZXkgOiBpZCArIGNoaWxkLmtleSlcbiAgICAgICAgOiBjaGlsZC5rZXk7XG5cbiAgICB2YXIgZGF0YSA9IChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuICAgIHZhciBvbGRSYXdDaGlsZCA9IHRoaXMuX3Zub2RlO1xuICAgIHZhciBvbGRDaGlsZCA9IGdldFJlYWxDaGlsZChvbGRSYXdDaGlsZCk7XG5cbiAgICAvLyBtYXJrIHYtc2hvd1xuICAgIC8vIHNvIHRoYXQgdGhlIHRyYW5zaXRpb24gbW9kdWxlIGNhbiBoYW5kIG92ZXIgdGhlIGNvbnRyb2wgdG8gdGhlIGRpcmVjdGl2ZVxuICAgIGlmIChjaGlsZC5kYXRhLmRpcmVjdGl2ZXMgJiYgY2hpbGQuZGF0YS5kaXJlY3RpdmVzLnNvbWUoaXNWU2hvd0RpcmVjdGl2ZSkpIHtcbiAgICAgIGNoaWxkLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgb2xkQ2hpbGQgJiZcbiAgICAgIG9sZENoaWxkLmRhdGEgJiZcbiAgICAgICFpc1NhbWVDaGlsZChjaGlsZCwgb2xkQ2hpbGQpICYmXG4gICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgLy8gIzY2ODcgY29tcG9uZW50IHJvb3QgaXMgYSBjb21tZW50IG5vZGVcbiAgICAgICEob2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UgJiYgb2xkQ2hpbGQuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlLmlzQ29tbWVudClcbiAgICApIHtcbiAgICAgIC8vIHJlcGxhY2Ugb2xkIGNoaWxkIHRyYW5zaXRpb24gZGF0YSB3aXRoIGZyZXNoIG9uZVxuICAgICAgLy8gaW1wb3J0YW50IGZvciBkeW5hbWljIHRyYW5zaXRpb25zIVxuICAgICAgdmFyIG9sZERhdGEgPSBvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpO1xuICAgICAgLy8gaGFuZGxlIHRyYW5zaXRpb24gbW9kZVxuICAgICAgaWYgKG1vZGUgPT09ICdvdXQtaW4nKSB7XG4gICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICB0aGlzLl9sZWF2aW5nID0gdHJ1ZTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2sob2xkRGF0YSwgJ2FmdGVyTGVhdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcyQxLl9sZWF2aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcyQxLiRmb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAnaW4tb3V0Jykge1xuICAgICAgICBpZiAoaXNBc3luY1BsYWNlaG9sZGVyKGNoaWxkKSkge1xuICAgICAgICAgIHJldHVybiBvbGRSYXdDaGlsZFxuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxheWVkTGVhdmU7XG4gICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7IGRlbGF5ZWRMZWF2ZSgpOyB9O1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnYWZ0ZXJFbnRlcicsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdlbnRlckNhbmNlbGxlZCcsIHBlcmZvcm1MZWF2ZSk7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdkZWxheUxlYXZlJywgZnVuY3Rpb24gKGxlYXZlKSB7IGRlbGF5ZWRMZWF2ZSA9IGxlYXZlOyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmF3Q2hpbGRcbiAgfVxufTtcblxuLyogICovXG5cbnZhciBwcm9wcyA9IGV4dGVuZCh7XG4gIHRhZzogU3RyaW5nLFxuICBtb3ZlQ2xhc3M6IFN0cmluZ1xufSwgdHJhbnNpdGlvblByb3BzKTtcblxuZGVsZXRlIHByb3BzLm1vZGU7XG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gIHByb3BzOiBwcm9wcyxcblxuICBiZWZvcmVNb3VudDogZnVuY3Rpb24gYmVmb3JlTW91bnQgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHVwZGF0ZSA9IHRoaXMuX3VwZGF0ZTtcbiAgICB0aGlzLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHRoaXMkMSk7XG4gICAgICAvLyBmb3JjZSByZW1vdmluZyBwYXNzXG4gICAgICB0aGlzJDEuX19wYXRjaF9fKFxuICAgICAgICB0aGlzJDEuX3Zub2RlLFxuICAgICAgICB0aGlzJDEua2VwdCxcbiAgICAgICAgZmFsc2UsIC8vIGh5ZHJhdGluZ1xuICAgICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICAgICk7XG4gICAgICB0aGlzJDEuX3Zub2RlID0gdGhpcyQxLmtlcHQ7XG4gICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgIHVwZGF0ZS5jYWxsKHRoaXMkMSwgdm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgfTtcbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgIHZhciB0YWcgPSB0aGlzLnRhZyB8fCB0aGlzLiR2bm9kZS5kYXRhLnRhZyB8fCAnc3Bhbic7XG4gICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMucHJldkNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICB2YXIgcmF3Q2hpbGRyZW4gPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB2YXIgdHJhbnNpdGlvbkRhdGEgPSBleHRyYWN0VHJhbnNpdGlvbkRhdGEodGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhd0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgaWYgKGMudGFnKSB7XG4gICAgICAgIGlmIChjLmtleSAhPSBudWxsICYmIFN0cmluZyhjLmtleSkuaW5kZXhPZignX192bGlzdCcpICE9PSAwKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICBtYXBbYy5rZXldID0gY1xuICAgICAgICAgIDsoYy5kYXRhIHx8IChjLmRhdGEgPSB7fSkpLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSBjLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgd2FybigoXCI8dHJhbnNpdGlvbi1ncm91cD4gY2hpbGRyZW4gbXVzdCBiZSBrZXllZDogPFwiICsgbmFtZSArIFwiPlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJldkNoaWxkcmVuKSB7XG4gICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgdmFyIHJlbW92ZWQgPSBbXTtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IHByZXZDaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgYyQxLmRhdGEudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25EYXRhO1xuICAgICAgICBjJDEuZGF0YS5wb3MgPSBjJDEuZWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAga2VwdC5wdXNoKGMkMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgIHRoaXMucmVtb3ZlZCA9IHJlbW92ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkICgpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICB2YXIgbW92ZUNsYXNzID0gdGhpcy5tb3ZlQ2xhc3MgfHwgKCh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZScpO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSBkaXZpZGUgdGhlIHdvcmsgaW50byB0aHJlZSBsb29wcyB0byBhdm9pZCBtaXhpbmcgRE9NIHJlYWRzIGFuZCB3cml0ZXNcbiAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXG4gICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0aGlzLl9yZWZsb3cgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgdmFyIGVsID0gYy5lbG07XG4gICAgICAgIHZhciBzID0gZWwuc3R5bGU7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBlbC5fbW92ZUNiID0gZnVuY3Rpb24gY2IgKGUpIHtcbiAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgY2IpO1xuICAgICAgICAgICAgZWwuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzTW92ZTogZnVuY3Rpb24gaGFzTW92ZSAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNNb3ZlXG4gICAgICB9XG4gICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgIGVsLl90cmFuc2l0aW9uQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHsgcmVtb3ZlQ2xhc3MoY2xvbmUsIGNscyk7IH0pO1xuICAgICAgfVxuICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzIChjKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgYy5lbG0uX2VudGVyQ2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbiAoYykge1xuICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24gKGMpIHtcbiAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgaWYgKGR4IHx8IGR5KSB7XG4gICAgYy5kYXRhLm1vdmVkID0gdHJ1ZTtcbiAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCJweCxcIiArIGR5ICsgXCJweClcIjtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gIH1cbn1cblxudmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcbiAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8qICAqL1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXG5WdWUuY29uZmlnLm11c3RVc2VQcm9wID0gbXVzdFVzZVByb3A7XG5WdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuVnVlLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xuVnVlLmNvbmZpZy5nZXRUYWdOYW1lc3BhY2UgPSBnZXRUYWdOYW1lc3BhY2U7XG5WdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHJ1bnRpbWUgZGlyZWN0aXZlcyAmIGNvbXBvbmVudHNcbmV4dGVuZChWdWUub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbi8vIGluc3RhbGwgcGxhdGZvcm0gcGF0Y2ggZnVuY3Rpb25cblZ1ZS5wcm90b3R5cGUuX19wYXRjaF9fID0gaW5Ccm93c2VyID8gcGF0Y2ggOiBub29wO1xuXG4vLyBwdWJsaWMgbW91bnQgbWV0aG9kXG5WdWUucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8vIGRldnRvb2xzIGdsb2JhbCBob29rXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGluQnJvd3Nlcikge1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICBpZiAoZGV2dG9vbHMpIHtcbiAgICAgICAgZGV2dG9vbHMuZW1pdCgnaW5pdCcsIFZ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCdcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICAnRG93bmxvYWQgdGhlIFZ1ZSBEZXZ0b29scyBleHRlbnNpb24gZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6XFxuJyArXG4gICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmXG4gICAgICBjb25maWcucHJvZHVjdGlvblRpcCAhPT0gZmFsc2UgJiZcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJ1xuICAgICkge1xuICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgIFwiWW91IGFyZSBydW5uaW5nIFZ1ZSBpbiBkZXZlbG9wbWVudCBtb2RlLlxcblwiICtcbiAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCJcbiAgICAgICk7XG4gICAgfVxuICB9LCAwKTtcbn1cblxuLyogICovXG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vRW1vamkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUzNGFkOTQ2JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0Vtb2ppLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vRW1vamkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc1MzRhZDk0NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc1MzRhZDk0NicsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vRW1vamkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUzNGFkOTQ2JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzUzNGFkOTQ2Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9FbW9qaS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRW1vamkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vRW1vamkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0Vtb2ppLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MzRhZDk0NiZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTZlOTA4NCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdkMTZlOTA4NCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1kMTZlOTA4NCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCdkMTZlOTA4NCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvUGlja2VyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vUGlja2VyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9QaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQxNmU5MDg0JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9TdGF0aWNQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiMTZjMjY4JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzJiMTZjMjY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzJiMTZjMjY4JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9TdGF0aWNQaWNrZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJiMTZjMjY4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzJiMTZjMjY4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9TdGF0aWNQaWNrZXIudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9TdGF0aWNQaWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL1N0YXRpY1BpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmIxNmMyNjgmXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUxMTg4MTA0JlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvc2ViL3dlYi9lbW9qaS1tYXJ0LXZ1ZS9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIW1vZHVsZS5ob3QuZGF0YSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNTExODgxMDQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNTExODgxMDQnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUxMTg4MTA0JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzUxMTg4MTA0Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJzcmMvY29tcG9uZW50cy9hbmNob3JzLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9hbmNob3JzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL2FuY2hvcnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUxMTg4MTA0JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2Y2RhMGUmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vY2F0ZWdvcnkudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzM3NmNkYTBlJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Mzc2Y2RhMGUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMzc2Y2RhMGUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL2NhdGVnb3J5LnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9jYXRlZ29yeS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vY2F0ZWdvcnkudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM3NmNkYTBlJlwiIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBBbmNob3JzIH0gZnJvbSAnLi9hbmNob3JzJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYXRlZ29yeSB9IGZyb20gJy4vY2F0ZWdvcnknXG5leHBvcnQgeyBkZWZhdWx0IGFzIFByZXZpZXcgfSBmcm9tICcuL3ByZXZpZXcnXG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gJy4vc2VhcmNoJ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTa2lucyB9IGZyb20gJy4vc2tpbnMnXG5leHBvcnQgeyBkZWZhdWx0IGFzIEVtb2ppIH0gZnJvbSAnLi9FbW9qaSdcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGlja2VyIH0gZnJvbSAnLi9QaWNrZXInXG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0YXRpY1BpY2tlciB9IGZyb20gJy4vU3RhdGljUGlja2VyJ1xuIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzM1MDU2YzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzM1MDU2YzMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCczNTA1NmMzMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvcHJldmlldy52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vcHJldmlldy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wcmV2aWV3LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNTA1NmMzMCZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YWQ0MWJiOCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9zZWIvd2ViL2Vtb2ppLW1hcnQtdnVlL25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCc0YWQ0MWJiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCc0YWQ0MWJiOCcsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vc2VhcmNoLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YWQ0MWJiOCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0YWQ0MWJiOCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwic3JjL2NvbXBvbmVudHMvc2VhcmNoLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2VhcmNoLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9zZWFyY2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRhZDQxYmI4JlwiIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9za2lucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWM2MTQ4OTQmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vc2tpbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL3NlYi93ZWIvZW1vamktbWFydC12dWUvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFtb2R1bGUuaG90LmRhdGEpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFjNjE0ODk0JywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9za2lucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWM2MTQ4OTQmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignMWM2MTQ4OTQnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9jb21wb25lbnRzL3NraW5zLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanMhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9za2lucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vc2tpbnMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFjNjE0ODk0JlwiIiwiaW1wb3J0IHN0b3JlIGZyb20gJy4vdXRpbHMvc3RvcmUnXG5pbXBvcnQgeyB1bmNvbXByZXNzIH0gZnJvbSAnLi91dGlscy9kYXRhJ1xuaW1wb3J0IGZyZXF1ZW50bHkgZnJvbSAnLi91dGlscy9mcmVxdWVudGx5J1xuXG5leHBvcnQge1xuICBQaWNrZXIsXG4gIFN0YXRpY1BpY2tlcixcbiAgRW1vamksXG4gIEFuY2hvcnMsXG4gIFByZXZpZXcsXG4gIFNlYXJjaCxcbiAgQ2F0ZWdvcnksXG4gIFNraW5zLFxufSBmcm9tICcuL2NvbXBvbmVudHMnXG5cbmV4cG9ydCB7IEVtb2ppSW5kZXgsIEVtb2ppVmlldywgRW1vamlEYXRhLCBzYW5pdGl6ZSB9IGZyb20gJy4vdXRpbHMvZW1vamktZGF0YSdcbmV4cG9ydCB7IHVuY29tcHJlc3MsIHN0b3JlLCBmcmVxdWVudGx5IH1cbiIsImNvbnN0IF9TdHJpbmcgPSBTdHJpbmdcblxuZXhwb3J0IGRlZmF1bHQgX1N0cmluZy5mcm9tQ29kZVBvaW50IHx8XG4gIGZ1bmN0aW9uIHN0cmluZ0Zyb21Db2RlUG9pbnQoKSB7XG4gICAgdmFyIE1BWF9TSVpFID0gMHg0MDAwXG4gICAgdmFyIGNvZGVVbml0cyA9IFtdXG4gICAgdmFyIGhpZ2hTdXJyb2dhdGVcbiAgICB2YXIgbG93U3Vycm9nYXRlXG4gICAgdmFyIGluZGV4ID0gLTFcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aFxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9ICcnXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciBjb2RlUG9pbnQgPSBOdW1iZXIoYXJndW1lbnRzW2luZGV4XSlcbiAgICAgIGlmIChcbiAgICAgICAgIWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuICAgICAgICBjb2RlUG9pbnQgPCAwIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuICAgICAgICBjb2RlUG9pbnQgPiAweDEwZmZmZiB8fCAvLyBub3QgYSB2YWxpZCBVbmljb2RlIGNvZGUgcG9pbnRcbiAgICAgICAgTWF0aC5mbG9vcihjb2RlUG9pbnQpICE9IGNvZGVQb2ludCAvLyBub3QgYW4gaW50ZWdlclxuICAgICAgKSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludDogJyArIGNvZGVQb2ludClcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlUG9pbnQgPD0gMHhmZmZmKSB7XG4gICAgICAgIC8vIEJNUCBjb2RlIHBvaW50XG4gICAgICAgIGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG4gICAgICAgIC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICAgIGhpZ2hTdXJyb2dhdGUgPSAoY29kZVBvaW50ID4+IDEwKSArIDB4ZDgwMFxuICAgICAgICBsb3dTdXJyb2dhdGUgPSAoY29kZVBvaW50ICUgMHg0MDApICsgMHhkYzAwXG4gICAgICAgIGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCArIDEgPT09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcbiAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY29kZVVuaXRzKVxuICAgICAgICBjb2RlVW5pdHMubGVuZ3RoID0gMFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbiIsImNvbnN0IFNWR3MgPSB7XG4gIGFjdGl2aXR5OiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTIgMEM1LjM3MyAwIDAgNS4zNzIgMCAxMmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyIDYuNjI4IDAgMTItNS4zNzMgMTItMTIgMC02LjYyOC01LjM3Mi0xMi0xMi0xMm05Ljk0OSAxMUgxNy4wNWMuMjI0LTIuNTI3IDEuMjMyLTQuNzczIDEuOTY4LTYuMTEzQTkuOTY2IDkuOTY2IDAgMCAxIDIxLjk0OSAxMU0xMyAxMVYyLjA1MWE5Ljk0NSA5Ljk0NSAwIDAgMSA0LjQzMiAxLjU2NGMtLjg1OCAxLjQ5MS0yLjE1NiA0LjIyLTIuMzkyIDcuMzg1SDEzem0tMiAwSDguOTYxYy0uMjM4LTMuMTY1LTEuNTM2LTUuODk0LTIuMzkzLTcuMzg1QTkuOTUgOS45NSAwIDAgMSAxMSAyLjA1MVYxMXptMCAydjguOTQ5YTkuOTM3IDkuOTM3IDAgMCAxLTQuNDMyLTEuNTY0Yy44NTctMS40OTIgMi4xNTUtNC4yMjEgMi4zOTMtNy4zODVIMTF6bTQuMDQgMGMuMjM2IDMuMTY0IDEuNTM0IDUuODkzIDIuMzkyIDcuMzg1QTkuOTIgOS45MiAwIDAgMSAxMyAyMS45NDlWMTNoMi4wNHpNNC45ODIgNC44ODdDNS43MTggNi4yMjcgNi43MjYgOC40NzMgNi45NTEgMTFoLTQuOWE5Ljk3NyA5Ljk3NyAwIDAgMSAyLjkzMS02LjExM00yLjA1MSAxM2g0LjljLS4yMjYgMi41MjctMS4yMzMgNC43NzEtMS45NjkgNi4xMTNBOS45NzIgOS45NzIgMCAwIDEgMi4wNTEgMTNtMTYuOTY3IDYuMTEzYy0uNzM1LTEuMzQyLTEuNzQ0LTMuNTg2LTEuOTY4LTYuMTEzaDQuODk5YTkuOTYxIDkuOTYxIDAgMCAxLTIuOTMxIDYuMTEzXCIvPjwvc3ZnPmAsXG5cbiAgY3VzdG9tOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgyLjAwMDAwMCwgMS4wMDAwMDApXCI+PHJlY3QgaWQ9XCJSZWN0YW5nbGVcIiB4PVwiOFwiIHk9XCIwXCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMjFcIiByeD1cIjEuNVwiPjwvcmVjdD48cmVjdCBpZD1cIlJlY3RhbmdsZVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg5Ljg0MywgMTAuNTQ5KSByb3RhdGUoNjApIHRyYW5zbGF0ZSgtOS44NDMsIC0xMC41NDkpIFwiIHg9XCI4LjM0M1wiIHk9XCIwLjA0OVwiIHdpZHRoPVwiM1wiIGhlaWdodD1cIjIxXCIgcng9XCIxLjVcIj48L3JlY3Q+PHJlY3QgaWQ9XCJSZWN0YW5nbGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOS44NDMsIDEwLjU0OSkgcm90YXRlKC02MCkgdHJhbnNsYXRlKC05Ljg0MywgLTEwLjU0OSkgXCIgeD1cIjguMzQzXCIgeT1cIjAuMDQ5XCIgd2lkdGg9XCIzXCIgaGVpZ2h0PVwiMjFcIiByeD1cIjEuNVwiPjwvcmVjdD48L2c+PC9zdmc+YCxcblxuICBmbGFnczogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIj48cGF0aCBkPVwiTTAgMGw2LjA4NCAyNEg4TDEuOTE2IDB6TTIxIDVoLTRsLTEtNEg0bDMgMTJoM2wxIDRoMTNMMjEgNXpNNi41NjMgM2g3Ljg3NWwyIDhIOC41NjNsLTItOHptOC44MzIgMTBsLTIuODU2IDEuOTA0TDEyLjA2MyAxM2gzLjMzMnpNMTkgMTNsLTEuNS02aDEuOTM4bDIgOEgxNmwzLTJ6XCIvPjwvc3ZnPmAsXG5cbiAgZm9vZHM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xNyA0Ljk3OGMtMS44MzggMC0yLjg3Ni4zOTYtMy42OC45MzQuNTEzLTEuMTcyIDEuNzY4LTIuOTM0IDQuNjgtMi45MzRhMSAxIDAgMCAwIDAtMmMtMi45MjEgMC00LjYyOSAxLjM2NS01LjU0NyAyLjUxMi0uMDY0LjA3OC0uMTE5LjE2Mi0uMTguMjQ0QzExLjczIDEuODM4IDEwLjc5OC4wMjMgOS4yMDcuMDIzIDguNTc5LjAyMiA3Ljg1LjMwNiA3IC45NzggNS4wMjcgMi41NCA1LjMyOSAzLjkwMiA2LjQ5MiA0Ljk5OSAzLjYwOSA1LjIyMiAwIDcuMzUyIDAgMTIuOTY5YzAgNC41ODIgNC45NjEgMTEuMDA5IDkgMTEuMDA5IDEuOTc1IDAgMi4zNzEtLjQ4NiAzLTEgLjYyOS41MTQgMS4wMjUgMSAzIDEgNC4wMzkgMCA5LTYuNDE4IDktMTEgMC01Ljk1My00LjA1NS04LTctOE04LjI0MiAyLjU0NmMuNjQxLS41MDguOTQzLS41MjMuOTY1LS41MjMuNDI2LjE2OS45NzUgMS40MDUgMS4zNTcgMy4wNTUtMS41MjctLjYyOS0yLjc0MS0xLjM1Mi0yLjk4LTEuODQ2LjA1OS0uMTEyLjI0MS0uMzU2LjY1OC0uNjg2TTE1IDIxLjk3OGMtMS4wOCAwLTEuMjEtLjEwOS0xLjU1OS0uNDAybC0uMTc2LS4xNDZjLS4zNjctLjMwMi0uODE2LS40NTItMS4yNjYtLjQ1MnMtLjg5OC4xNS0xLjI2Ni40NTJsLS4xNzYuMTQ2Yy0uMzQ3LjI5Mi0uNDc3LjQwMi0xLjU1Ny40MDItMi44MTMgMC03LTUuMzg5LTctOS4wMDkgMC01LjgyMyA0LjQ4OC01Ljk5MSA1LTUuOTkxIDEuOTM5IDAgMi40ODQuNDcxIDMuMzg3IDEuMjUxbC4zMjMuMjc2YTEuOTk1IDEuOTk1IDAgMCAwIDIuNTggMGwuMzIzLS4yNzZjLjkwMi0uNzggMS40NDctMS4yNTEgMy4zODctMS4yNTEuNTEyIDAgNSAuMTY4IDUgNiAwIDMuNjE3LTQuMTg3IDktNyA5XCIvPjwvc3ZnPmAsXG5cbiAgbmF0dXJlOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMTUuNSA4YTEuNSAxLjUgMCAxIDAgLjAwMSAzLjAwMUExLjUgMS41IDAgMCAwIDE1LjUgOE04LjUgOGExLjUgMS41IDAgMSAwIC4wMDEgMy4wMDFBMS41IDEuNSAwIDAgMCA4LjUgOFwiLz48cGF0aCBkPVwiTTE4LjkzMyAwaC0uMDI3Yy0uOTcgMC0yLjEzOC43ODctMy4wMTggMS40OTctMS4yNzQtLjM3NC0yLjYxMi0uNTEtMy44ODctLjUxLTEuMjg1IDAtMi42MTYuMTMzLTMuODc0LjUxN0M3LjI0NS43OSA2LjA2OSAwIDUuMDkzIDBoLS4wMjdDMy4zNTIgMCAuMDcgMi42Ny4wMDIgNy4wMjZjLS4wMzkgMi40NzkuMjc2IDQuMjM4IDEuMDQgNS4wMTMuMjU0LjI1OC44ODIuNjc3IDEuMjk1Ljg4Mi4xOTEgMy4xNzcuOTIyIDUuMjM4IDIuNTM2IDYuMzguODk3LjYzNyAyLjE4Ny45NDkgMy4yIDEuMTAyQzguMDQgMjAuNiA4IDIwLjc5NSA4IDIxYzAgMS43NzMgMi4zNSAzIDQgMyAxLjY0OCAwIDQtMS4yMjcgNC0zIDAtLjIwMS0uMDM4LS4zOTMtLjA3Mi0uNTg2IDIuNTczLS4zODUgNS40MzUtMS44NzcgNS45MjUtNy41ODcuMzk2LS4yMi44ODctLjU2OCAxLjEwNC0uNzg4Ljc2My0uNzc0IDEuMDc5LTIuNTM0IDEuMDQtNS4wMTNDMjMuOTI5IDIuNjcgMjAuNjQ2IDAgMTguOTMzIDBNMy4yMjMgOS4xMzVjLS4yMzcuMjgxLS44MzcgMS4xNTUtLjg4NCAxLjIzOC0uMTUtLjQxLS4zNjgtMS4zNDktLjMzNy0zLjI5MS4wNTEtMy4yODEgMi40NzgtNC45NzIgMy4wOTEtNS4wMzEuMjU2LjAxNS43MzEuMjcgMS4yNjUuNjQ2LTEuMTEgMS4xNzEtMi4yNzUgMi45MTUtMi4zNTIgNS4xMjUtLjEzMy41NDYtLjM5OC44NTgtLjc4MyAxLjMxM00xMiAyMmMtLjkwMSAwLTEuOTU0LS42OTMtMi0xIDAtLjY1NC40NzUtMS4yMzYgMS0xLjYwMlYyMGExIDEgMCAxIDAgMiAwdi0uNjAyYy41MjQuMzY1IDEgLjk0NyAxIDEuNjAyLS4wNDYuMzA3LTEuMDk5IDEtMiAxbTMtMy40OHYuMDJhNC43NTIgNC43NTIgMCAwIDAtMS4yNjItMS4wMmMxLjA5Mi0uNTE2IDIuMjM5LTEuMzM0IDIuMjM5LTIuMjE3IDAtMS44NDItMS43ODEtMi4xOTUtMy45NzctMi4xOTUtMi4xOTYgMC0zLjk3OC4zNTQtMy45NzggMi4xOTUgMCAuODgzIDEuMTQ4IDEuNzAxIDIuMjM4IDIuMjE3QTQuOCA0LjggMCAwIDAgOSAxOC41Mzl2LS4wMjVjLTEtLjA3Ni0yLjE4Mi0uMjgxLTIuOTczLS44NDItMS4zMDEtLjkyLTEuODM4LTMuMDQ1LTEuODUzLTYuNDc4bC4wMjMtLjA0MWMuNDk2LS44MjYgMS40OS0xLjQ1IDEuODA0LTMuMTAyIDAtMi4wNDcgMS4zNTctMy42MzEgMi4zNjItNC41MjJDOS4zNyAzLjE3OCAxMC41NTUgMyAxMS45NDggM2MxLjQ0NyAwIDIuNjg1LjE5MiAzLjczMy41NyAxIC45IDIuMzE2IDIuNDY1IDIuMzE2IDQuNDguMzEzIDEuNjUxIDEuMzA3IDIuMjc1IDEuODAzIDMuMTAyLjAzNS4wNTguMDY4LjExNy4xMDIuMTc4LS4wNTkgNS45NjctMS45NDkgNy4wMS00LjkwMiA3LjE5bTYuNjI4LTguMjAyYy0uMDM3LS4wNjUtLjA3NC0uMTMtLjExMy0uMTk1YTcuNTg3IDcuNTg3IDAgMCAwLS43MzktLjk4N2MtLjM4NS0uNDU1LS42NDgtLjc2OC0uNzgyLTEuMzEzLS4wNzYtMi4yMDktMS4yNDEtMy45NTQtMi4zNTMtNS4xMjQuNTMxLS4zNzYgMS4wMDQtLjYzIDEuMjYxLS42NDcuNjM2LjA3MSAzLjA0NCAxLjc2NCAzLjA5NiA1LjAzMS4wMjcgMS44MS0uMzQ3IDMuMjE4LS4zNyAzLjIzNVwiLz48L3N2Zz5gLFxuXG4gIG9iamVjdHM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiAwYTkgOSAwIDAgMC01IDE2LjQ4MlYyMXMyLjAzNSAzIDUgMyA1LTMgNS0zdi00LjUxOEE5IDkgMCAwIDAgMTIgMHptMCAyYzMuODYgMCA3IDMuMTQxIDcgN3MtMy4xNCA3LTcgNy03LTMuMTQxLTctNyAzLjE0LTcgNy03ek05IDE3LjQ3N2MuOTQuMzMyIDEuOTQ2LjUyMyAzIC41MjNzMi4wNi0uMTkgMy0uNTIzdi44MzRjLS45MS40MzYtMS45MjUuNjg5LTMgLjY4OWE2LjkyNCA2LjkyNCAwIDAgMS0zLS42OXYtLjgzM3ptLjIzNiAzLjA3QTguODU0IDguODU0IDAgMCAwIDEyIDIxYy45NjUgMCAxLjg4OC0uMTY3IDIuNzU4LS40NTFDMTQuMTU1IDIxLjE3MyAxMy4xNTMgMjIgMTIgMjJjLTEuMTAyIDAtMi4xMTctLjc4OS0yLjc2NC0xLjQ1M3pcIi8+PHBhdGggZD1cIk0xNC43NDUgMTIuNDQ5aC0uMDA0Yy0uODUyLS4wMjQtMS4xODgtLjg1OC0xLjU3Ny0xLjgyNC0uNDIxLTEuMDYxLS43MDMtMS41NjEtMS4xODItMS41NjZoLS4wMDljLS40ODEgMC0uNzgzLjQ5Ny0xLjIzNSAxLjUzNy0uNDM2Ljk4Mi0uODAxIDEuODExLTEuNjM2IDEuNzkxbC0uMjc2LS4wNDNjLS41NjUtLjE3MS0uODUzLS42OTEtMS4yODQtMS43OTQtLjEyNS0uMzEzLS4yMDItLjYzMi0uMjctLjkxMy0uMDUxLS4yMTMtLjEyNy0uNTMtLjE5NS0uNjM0QzcuMDY3IDkuMDA0IDcuMDM5IDkgNi45OSA5QTEgMSAwIDAgMSA3IDdoLjAxYzEuNjYyLjAxNyAyLjAxNSAxLjM3MyAyLjE5OCAyLjEzNC40ODYtLjk4MSAxLjMwNC0yLjA1OCAyLjc5Ny0yLjA3NSAxLjUzMS4wMTggMi4yOCAxLjE1MyAyLjczMSAyLjE0MWwuMDAyLS4wMDhDMTQuOTQ0IDguNDI0IDE1LjMyNyA3IDE2Ljk3OSA3aC4wMzJBMSAxIDAgMSAxIDE3IDloLS4wMTFjLS4xNDkuMDc2LS4yNTYuNDc0LS4zMTkuNzA5YTYuNDg0IDYuNDg0IDAgMCAxLS4zMTEuOTUxYy0uNDI5Ljk3My0uNzkgMS43ODktMS42MTQgMS43ODlcIi8+PC9zdmc+YCxcblxuICBwZW9wbGU6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMiAwQzUuMzczIDAgMCA1LjM3MyAwIDEyczUuMzczIDEyIDEyIDEyIDEyLTUuMzczIDEyLTEyUzE4LjYyNyAwIDEyIDBtMCAyMkM2LjQ4NiAyMiAyIDE3LjUxNCAyIDEyUzYuNDg2IDIgMTIgMnMxMCA0LjQ4NiAxMCAxMC00LjQ4NiAxMC0xMCAxMFwiLz48cGF0aCBkPVwiTTggN2EyIDIgMCAxIDAtLjAwMSAzLjk5OUEyIDIgMCAwIDAgOCA3TTE2IDdhMiAyIDAgMSAwLS4wMDEgMy45OTlBMiAyIDAgMCAwIDE2IDdNMTUuMjMyIDE1Yy0uNjkzIDEuMTk1LTEuODcgMi0zLjM0OSAyLTEuNDc3IDAtMi42NTUtLjgwNS0zLjM0Ny0ySDE1bTMtMkg2YTYgNiAwIDEgMCAxMiAwXCIvPjwvc3ZnPmAsXG5cbiAgcGxhY2VzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNNi41IDEyQzUuMTIyIDEyIDQgMTMuMTIxIDQgMTQuNVM1LjEyMiAxNyA2LjUgMTcgOSAxNS44NzkgOSAxNC41IDcuODc4IDEyIDYuNSAxMm0wIDNjLS4yNzUgMC0uNS0uMjI1LS41LS41cy4yMjUtLjUuNS0uNS41LjIyNS41LjUtLjIyNS41LS41LjVNMTcuNSAxMmMtMS4zNzggMC0yLjUgMS4xMjEtMi41IDIuNXMxLjEyMiAyLjUgMi41IDIuNSAyLjUtMS4xMjEgMi41LTIuNS0xLjEyMi0yLjUtMi41LTIuNW0wIDNjLS4yNzUgMC0uNS0uMjI1LS41LS41cy4yMjUtLjUuNS0uNS41LjIyNS41LjUtLjIyNS41LS41LjVcIi8+PHBhdGggZD1cIk0yMi40ODIgOS40OTRsLTEuMDM5LS4zNDZMMjEuNCA5aC42Yy41NTIgMCAxLS40MzkgMS0uOTkyIDAtLjAwNi0uMDAzLS4wMDgtLjAwMy0uMDA4SDIzYzAtMS0uODg5LTItMS45ODQtMmgtLjY0MmwtLjczMS0xLjcxN0MxOS4yNjIgMy4wMTIgMTguMDkxIDIgMTYuNzY0IDJINy4yMzZDNS45MDkgMiA0LjczOCAzLjAxMiA0LjM1NyA0LjI4M0wzLjYyNiA2aC0uNjQyQzEuODg5IDYgMSA3IDEgOGguMDAzUzEgOC4wMDIgMSA4LjAwOEMxIDguNTYxIDEuNDQ4IDkgMiA5aC42bC0uMDQzLjE0OC0xLjAzOS4zNDZhMi4wMDEgMi4wMDEgMCAwIDAtMS4zNTkgMi4wOTdsLjc1MSA3LjUwOGExIDEgMCAwIDAgLjk5NC45MDFIM3YxYzAgMS4xMDMuODk2IDIgMiAyaDJjMS4xMDQgMCAyLS44OTcgMi0ydi0xaDZ2MWMwIDEuMTAzLjg5NiAyIDIgMmgyYzEuMTA0IDAgMi0uODk3IDItMnYtMWgxLjA5NmEuOTk5Ljk5OSAwIDAgMCAuOTk0LS45MDFsLjc1MS03LjUwOGEyLjAwMSAyLjAwMSAwIDAgMC0xLjM1OS0yLjA5N002LjI3MyA0Ljg1N0M2LjQwMiA0LjQzIDYuNzg4IDQgNy4yMzYgNGg5LjUyN2MuNDQ4IDAgLjgzNC40My45NjMuODU3TDE5LjMxMyA5SDQuNjg4bDEuNTg1LTQuMTQzek03IDIxSDV2LTFoMnYxem0xMiAwaC0ydi0xaDJ2MXptMi4xODktM0gyLjgxMWwtLjY2Mi02LjYwN0wzIDExaDE4bC44NTIuMzkzTDIxLjE4OSAxOHpcIi8+PC9zdmc+YCxcblxuICByZWNlbnQ6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCI+PHBhdGggZD1cIk0xMyA0aC0ybC0uMDAxIDdIOXYyaDJ2Mmgydi0yaDR2LTJoLTR6XCIvPjxwYXRoIGQ9XCJNMTIgMEM1LjM3MyAwIDAgNS4zNzMgMCAxMnM1LjM3MyAxMiAxMiAxMiAxMi01LjM3MyAxMi0xMlMxOC42MjcgMCAxMiAwbTAgMjJDNi40ODYgMjIgMiAxNy41MTQgMiAxMlM2LjQ4NiAyIDEyIDJzMTAgNC40ODYgMTAgMTAtNC40ODYgMTAtMTAgMTBcIi8+PC9zdmc+YCxcblxuICBzeW1ib2xzOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPjxwYXRoIGQ9XCJNMCAwaDExdjJIMHpNNCAxMWgzVjZoNFY0SDB2Mmg0ek0xNS41IDE3YzEuMzgxIDAgMi41LTEuMTE2IDIuNS0yLjQ5M3MtMS4xMTktMi40OTMtMi41LTIuNDkzUzEzIDEzLjEzIDEzIDE0LjUwNyAxNC4xMTkgMTcgMTUuNSAxN20wLTIuOTg2Yy4yNzYgMCAuNS4yMjIuNS40OTMgMCAuMjcyLS4yMjQuNDkzLS41LjQ5M3MtLjUtLjIyMS0uNS0uNDkzLjIyNC0uNDkzLjUtLjQ5M00yMS41IDE5LjAxNGMtMS4zODEgMC0yLjUgMS4xMTYtMi41IDIuNDkzUzIwLjExOSAyNCAyMS41IDI0czIuNS0xLjExNiAyLjUtMi40OTMtMS4xMTktMi40OTMtMi41LTIuNDkzbTAgMi45ODZhLjQ5Ny40OTcgMCAwIDEtLjUtLjQ5M2MwLS4yNzEuMjI0LS40OTMuNS0uNDkzcy41LjIyMi41LjQ5M2EuNDk3LjQ5NyAwIDAgMS0uNS40OTNNMjIgMTNsLTkgOSAxLjUxMyAxLjUgOC45OS05LjAwOXpNMTcgMTFjMi4yMDkgMCA0LTEuMTE5IDQtMi41VjJzLjk4NS0uMTYxIDEuNDk4Ljk0OUMyMy4wMSA0LjA1NSAyMyA2IDIzIDZzMS0xLjExOSAxLTMuMTM1QzI0LS4wMiAyMSAwIDIxIDBoLTJ2Ni4zNDdBNS44NTMgNS44NTMgMCAwIDAgMTcgNmMtMi4yMDkgMC00IDEuMTE5LTQgMi41czEuNzkxIDIuNSA0IDIuNU0xMC4yOTcgMjAuNDgybC0xLjQ3NS0xLjU4NWE0Ny41NCA0Ny41NCAwIDAgMS0xLjQ0MiAxLjEyOWMtLjMwNy0uMjg4LS45ODktMS4wMTYtMi4wNDUtMi4xODMuOTAyLS44MzYgMS40NzktMS40NjYgMS43MjktMS44OTJzLjM3Ni0uODcxLjM3Ni0xLjMzNmMwLS41OTItLjI3My0xLjE3OC0uODE4LTEuNzU5LS41NDYtLjU4MS0xLjMyOS0uODcxLTIuMzQ5LS44NzEtMS4wMDggMC0xLjc5LjI5My0yLjM0NC44NzktLjU1Ni41ODctLjgzMiAxLjE4MS0uODMyIDEuNzg0IDAgLjgxMy40MTkgMS43NDggMS4yNTYgMi44MDUtLjg0Ny42MTQtMS40NDQgMS4yMDgtMS43OTQgMS43ODRhMy40NjUgMy40NjUgMCAwIDAtLjUyMyAxLjgzM2MwIC44NTcuMzA4IDEuNTYuOTI0IDIuMTA3LjYxNi41NDkgMS40MjMuODIzIDIuNDIuODIzIDEuMTczIDAgMi40NDQtLjM3OSAzLjgxMy0xLjEzN0w4LjIzNSAyNGgyLjgxOWwtMi4wOS0yLjM4MyAxLjMzMy0xLjEzNXptLTYuNzM2LTYuMzg5YTEuMDIgMS4wMiAwIDAgMSAuNzMtLjI4NmMuMzEgMCAuNTU5LjA4NS43NDcuMjU0YS44NDkuODQ5IDAgMCAxIC4yODMuNjU5YzAgLjUxOC0uNDE5IDEuMTEyLTEuMjU3IDEuNzg0LS41MzYtLjY1MS0uODA1LTEuMjMxLS44MDUtMS43NDJhLjkwMS45MDEgMCAwIDEgLjMwMi0uNjY5TTMuNzQgMjJjLS40MjcgMC0uNzc4LS4xMTYtMS4wNTctLjM0OS0uMjc5LS4yMzItLjQxOC0uNDg3LS40MTgtLjc2NiAwLS41OTQuNTA5LTEuMjg4IDEuNTI3LTIuMDgzLjk2OCAxLjEzNCAxLjcxNyAxLjk0NiAyLjI0OCAyLjQzOC0uOTIxLjUwNy0xLjY4Ni43Ni0yLjMuNzZcIi8+PC9zdmc+YCxcbn1cblxuZXhwb3J0IGRlZmF1bHQgU1ZHc1xuIiwiY29uc3QgbWFwcGluZyA9IHtcbiAgbmFtZTogJ2EnLFxuICB1bmlmaWVkOiAnYicsXG4gIG5vbl9xdWFsaWZpZWQ6ICdjJyxcbiAgaGFzX2ltZ19hcHBsZTogJ2QnLFxuICBoYXNfaW1nX2dvb2dsZTogJ2UnLFxuICBoYXNfaW1nX3R3aXR0ZXI6ICdmJyxcbiAgaGFzX2ltZ19lbW9qaW9uZTogJ2cnLFxuICBoYXNfaW1nX2ZhY2Vib29rOiAnaCcsXG4gIGhhc19pbWdfbWVzc2VuZ2VyOiAnaScsXG4gIGtleXdvcmRzOiAnaicsXG4gIHNoZWV0OiAnaycsXG4gIGVtb3RpY29uczogJ2wnLFxuICB0ZXh0OiAnbScsXG4gIHNob3J0X25hbWVzOiAnbicsXG4gIGFkZGVkX2luOiAnbycsXG59XG5cbmNvbnN0IGJ1aWxkU2VhcmNoID0gKGVtb2ppKSA9PiB7XG4gIGNvbnN0IHNlYXJjaCA9IFtdXG5cbiAgdmFyIGFkZFRvU2VhcmNoID0gKHN0cmluZ3MsIHNwbGl0KSA9PiB7XG4gICAgaWYgKCFzdHJpbmdzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICA7KEFycmF5LmlzQXJyYXkoc3RyaW5ncykgPyBzdHJpbmdzIDogW3N0cmluZ3NdKS5mb3JFYWNoKChzdHJpbmcpID0+IHtcbiAgICAgIDsoc3BsaXQgPyBzdHJpbmcuc3BsaXQoL1stfF98XFxzXSsvKSA6IFtzdHJpbmddKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICAgIHMgPSBzLnRvTG93ZXJDYXNlKClcblxuICAgICAgICBpZiAoc2VhcmNoLmluZGV4T2YocykgPT0gLTEpIHtcbiAgICAgICAgICBzZWFyY2gucHVzaChzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBhZGRUb1NlYXJjaChlbW9qaS5zaG9ydF9uYW1lcywgdHJ1ZSlcbiAgYWRkVG9TZWFyY2goZW1vamkubmFtZSwgdHJ1ZSlcbiAgYWRkVG9TZWFyY2goZW1vamkua2V5d29yZHMsIGZhbHNlKVxuICBhZGRUb1NlYXJjaChlbW9qaS5lbW90aWNvbnMsIGZhbHNlKVxuXG4gIHJldHVybiBzZWFyY2guam9pbignLCcpXG59XG5cbmNvbnN0IGNvbXByZXNzID0gKGVtb2ppKSA9PiB7XG4gIGVtb2ppLnNob3J0X25hbWVzID0gZW1vamkuc2hvcnRfbmFtZXMuZmlsdGVyKChzaG9ydF9uYW1lKSA9PiB7XG4gICAgcmV0dXJuIHNob3J0X25hbWUgIT09IGVtb2ppLnNob3J0X25hbWVcbiAgfSlcbiAgZGVsZXRlIGVtb2ppLnNob3J0X25hbWVcblxuICBlbW9qaS5zaGVldCA9IFtlbW9qaS5zaGVldF94LCBlbW9qaS5zaGVldF95XVxuICBkZWxldGUgZW1vamkuc2hlZXRfeFxuICBkZWxldGUgZW1vamkuc2hlZXRfeVxuXG4gIGVtb2ppLmFkZGVkX2luID0gcGFyc2VJbnQoZW1vamkuYWRkZWRfaW4pXG4gIGlmIChlbW9qaS5hZGRlZF9pbiA9PT0gNikge1xuICAgIGRlbGV0ZSBlbW9qaS5hZGRlZF9pblxuICB9XG5cbiAgZm9yIChsZXQga2V5IGluIG1hcHBpbmcpIHtcbiAgICBlbW9qaVttYXBwaW5nW2tleV1dID0gZW1vamlba2V5XVxuICAgIGRlbGV0ZSBlbW9qaVtrZXldXG4gIH1cblxuICBmb3IgKGxldCBrZXkgaW4gZW1vamkpIHtcbiAgICBsZXQgdmFsdWUgPSBlbW9qaVtrZXldXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgIXZhbHVlLmxlbmd0aCkge1xuICAgICAgZGVsZXRlIGVtb2ppW2tleV1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgIXZhbHVlLmxlbmd0aCkge1xuICAgICAgZGVsZXRlIGVtb2ppW2tleV1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBkZWxldGUgZW1vamlba2V5XVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWVwRnJlZXplKG9iamVjdCkge1xuICAvLyBSZXRyaWV2ZSB0aGUgcHJvcGVydHkgbmFtZXMgZGVmaW5lZCBvbiBvYmplY3RcbiAgdmFyIHByb3BOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdClcblxuICAvLyBGcmVlemUgcHJvcGVydGllcyBiZWZvcmUgZnJlZXppbmcgc2VsZlxuICBmb3IgKGxldCBuYW1lIG9mIHByb3BOYW1lcykge1xuICAgIGxldCB2YWx1ZSA9IG9iamVjdFtuYW1lXVxuICAgIG9iamVjdFtuYW1lXSA9XG4gICAgICB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gZGVlcEZyZWV6ZSh2YWx1ZSkgOiB2YWx1ZVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKG9iamVjdClcbn1cblxuY29uc3QgdW5jb21wcmVzcyA9IChkYXRhKSA9PiB7XG4gIGlmICghZGF0YS5jb21wcmVzc2VkKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuICBkYXRhLmNvbXByZXNzZWQgPSBmYWxzZVxuXG4gIGZvciAobGV0IGlkIGluIGRhdGEuZW1vamlzKSB7XG4gICAgbGV0IGVtb2ppID0gZGF0YS5lbW9qaXNbaWRdXG5cbiAgICBmb3IgKGxldCBrZXkgaW4gbWFwcGluZykge1xuICAgICAgZW1vamlba2V5XSA9IGVtb2ppW21hcHBpbmdba2V5XV1cbiAgICAgIGRlbGV0ZSBlbW9qaVttYXBwaW5nW2tleV1dXG4gICAgfVxuXG4gICAgaWYgKCFlbW9qaS5zaG9ydF9uYW1lcykgZW1vamkuc2hvcnRfbmFtZXMgPSBbXVxuICAgIGVtb2ppLnNob3J0X25hbWVzLnVuc2hpZnQoaWQpXG5cbiAgICBlbW9qaS5zaGVldF94ID0gZW1vamkuc2hlZXRbMF1cbiAgICBlbW9qaS5zaGVldF95ID0gZW1vamkuc2hlZXRbMV1cbiAgICBkZWxldGUgZW1vamkuc2hlZXRcblxuICAgIGlmICghZW1vamkudGV4dCkgZW1vamkudGV4dCA9ICcnXG5cbiAgICBpZiAoIWVtb2ppLmFkZGVkX2luKSBlbW9qaS5hZGRlZF9pbiA9IDZcbiAgICBlbW9qaS5hZGRlZF9pbiA9IGVtb2ppLmFkZGVkX2luLnRvRml4ZWQoMSlcblxuICAgIGVtb2ppLnNlYXJjaCA9IGJ1aWxkU2VhcmNoKGVtb2ppKVxuICB9XG4gIGRhdGEgPSBkZWVwRnJlZXplKGRhdGEpXG4gIHJldHVybiBkYXRhXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBidWlsZFNlYXJjaCwgY29tcHJlc3MsIHVuY29tcHJlc3MgfVxuIiwiaW1wb3J0IHsgaW50ZXJzZWN0LCB1bmlmaWVkVG9OYXRpdmUgfSBmcm9tICcuL2luZGV4J1xuaW1wb3J0IHsgdW5jb21wcmVzcywgYnVpbGRTZWFyY2ggfSBmcm9tICcuL2RhdGEnXG5pbXBvcnQgZnJlcXVlbnRseSBmcm9tICcuL2ZyZXF1ZW50bHknXG5cbmNvbnN0IFNIRUVUX0NPTFVNTlMgPSA1MlxuY29uc3QgQ09MT05TX1JFR0VYID0gL14oPzpcXDooW15cXDpdKylcXDopKD86XFw6c2tpbi10b25lLShcXGQpXFw6KT8kL1xuLy8gU2tpbiB0b25lc1xuY29uc3QgU0tJTlMgPSBbJzFGM0ZBJywgJzFGM0ZCJywgJzFGM0ZDJywgJzFGM0ZEJywgJzFGM0ZFJywgJzFGM0ZGJ11cblxuLyoqXG4gKiBFbW9qaSBkYXRhIHN0cnVjdHVyZTpcbiAqIHtcbiAqICAgIFwiY29tcHJlc3NlZFwiOiBmYWxzZSxcbiAqICAgIFwiYWxpYXNlc1wiOiB7XG4gKiAgICAgIGNvbGxpc2lvbjogXCJib29tXCJcbiAqICAgICAgY29va2luZzogXCJmcmllZF9lZ2dcIlxuICogICAgICBlbnZlbG9wZTogXCJlbWFpbFwiXG4gKiAgICAgIGZhY2Vfd2l0aF9maW5nZXJfY292ZXJpbmdfY2xvc2VkX2xpcHM6IFwic2h1c2hpbmdfZmFjZVwiXG4gKiAgICAgIC4uLlxuICogICAgfSxcbiAqICAgIFwiY2F0ZWdvcmllc1wiOiBbIHtcbiAqICAgICAgaWQ6IFwicGVvcGxlXCIsXG4gKiAgICAgIG5hbWU6IFwiU21pbGV5cyAmIFBlb3BsZVwiLFxuICogICAgICBlbW9qaXM6IFsgXCJncmlubmluZ1wiLCBcImdyaW5cIiwgXCJqb3lcIiwgLi4uIF1cbiAqICAgIH0sIHtcbiAqICAgICAgaWQ6IFwibmF0dXJlXCIsXG4gKiAgICAgIG5hbWU6IFwiQW5pbWFscyAmIE5hdHVyZVwiLFxuICogICAgICBlbW9qaXM6IFsgXCJtb25rZXlfZmFjZVwiLCBcIm1vbmV5XCIsIFwiZ29yaWxsYVwiLCAuLi4gXVxuICogICAgfSxcbiAqICAgIC4uLlxuICogICAgXSxcbiAqICAgIFwiZW1vamlzXCI6IFtcbiAqICAgICAgc21pbGV5OiB7XG4gKiAgICAgICAgYWRkZWRfaW46IFwiNi4wXCIsXG4gKiAgICAgICAgZW1vdGljb25zOiBbXCI9KVwiLCBcIj0tKVwiXSxcbiAqICAgICAgICBoYXNfaW1nX2FwcGxlOiB0cnVlLFxuICogICAgICAgIGhhc19pbWdfZW1vamlvbmU6IHRydWUsXG4gKiAgICAgICAgaGFzX2ltZ19mYWNlYm9vazogdHJ1ZSxcbiAqICAgICAgICBoYXNfaW1nX2dvb2dsZTogdHJ1ZSxcbiAqICAgICAgICBoYXNfaW1nX21lc3NlbmdlcjogdHJ1ZSxcbiAqICAgICAgICBoYXNfaW1nX3R3aXR0ZXI6IHRydWUsXG4gKiAgICAgICAga2V5d29yZHM6IFtcImZhY2VcIiwgXCJoYXBweVwiLCBcImpveVwiLCBcImhhaGFcIiwgXCI6RFwiLCBcIjopXCIsIFwic21pbGVcIiwgXCJmdW5ueVwiXSxcbiAqICAgICAgICBuYW1lOiBcIlNtaWxpbmcgRmFjZSB3aXRoIE9wZW4gTW91dGhcIixcbiAqICAgICAgICBub25fcXVhbGlmaWVkOiB1bmRlZmluZWQsXG4gKiAgICAgICAgc2VhcmNoOiBcInNtaWxleSxzbWlsaW5nLGZhY2Usd2l0aCxvcGVuLG1vdXRoLGhhcHB5LGpveSxoYWhhLDpkLDopLHNtaWxlLGZ1bm55LD0pLD0tKVwiLFxuICogICAgICAgIHNoZWV0X3g6IDMwLFxuICogICAgICAgIHNoZWV0X3k6IDI3LFxuICogICAgICAgIHNob3J0X25hbWVzOiBbXCJzbWlsZXlcIl0sXG4gKiAgICAgICAgdGV4dDogXCI6KVwiLFxuICogICAgICAgIHVuaWZpZWQ6IFwiMUY2MDNcIixcbiAqICAgICAgfSwge1xuICogICAgICArMTogeyAgICAvLyBlbW9qaSB3aXRoIHNraW5fdmFyaWF0aW9uc1xuICogICAgICAgICAgLi4uLCAvLyBhbGwgdGhlIHJlZ3VsYXIgZmllbGRzIGFyZSBwcmVzZW50XG4gKiAgICAgICAgICBuYW1lOiBcIlRodW1icyBVcCBTaWduXCIsXG4gKiAgICAgICAgICBzaG9ydF9uYW1lczogKDIpIFtcIisxXCIsIFwidGh1bWJzdXBcIl0sXG4gKiAgICAgICAgICBza2luX3ZhcmlhdGlvbnM6IHtcbiAqICAgICAgICAgICAgMUYzRkI6ICAgICAgICAgICAgIC8vIGVhY2ggdmFyaWF0aW9uIGhhcyBhZGRpdGlvbmFsIHNldCBvZiBmaWVsZHM6XG4gKiAgICAgICAgICAgICAgYWRkZWRfaW46IFwiOC4wXCIsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19hcHBsZTogdHJ1ZSxcbiAqICAgICAgICAgICAgICBoYXNfaW1nX2Vtb2ppb25lOiB0cnVlLFxuICogICAgICAgICAgICAgIGhhc19pbWdfZmFjZWJvb2s6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19nb29nbGU6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ19tZXNzZW5nZXI6IHRydWUsXG4gKiAgICAgICAgICAgICAgaGFzX2ltZ190d2l0dGVyOiB0cnVlLFxuICogICAgICAgICAgICAgIGltYWdlOiBcIjFmNDRkLTFmM2ZiLnBuZ1wiLFxuICogICAgICAgICAgICAgIG5vbl9xdWFsaWZpZWQ6IG51bGwsXG4gKiAgICAgICAgICAgICAgc2hlZXRfeDogMTQsXG4gKiAgICAgICAgICAgICAgc2hlZXRfeTogNTAsXG4gKiAgICAgICAgICAgICAgdW5pZmllZDogXCIxRjQ0RC0xRjNGQlwiLFxuICogICAgICAgICAgICAxRjNGQjoge+KApn0sXG4gKiAgICAgICAgICAgIDFGM0ZDOiB74oCmfSxcbiAqICAgICAgICAgICAgMUYzRkQ6IHvigKZ9LFxuICogICAgICAgICAgICAxRjNGRToge+KApn0sXG4gKiAgICAgICAgICAgIDFGM0ZGOiB74oCmfVxuICogICAgICAgICAgICB9LFxuICogICAgICAgICAgLi4uXG4gKiAgICAgIH0sXG4gKiAgICAgIGE6IHsgIC8vIGVtb2ppIHdpdGggbm9uX3F1YWxpZmllZCBmaWVsZCBzZXRcbiAqICAgICAgICBhZGRlZF9pbjogXCI2LjBcIixcbiAqICAgICAgICBlbW90aWNvbnM6IHVuZGVmaW5lZCxcbiAqICAgICAgICBoYXNfaW1nX2FwcGxlOiB0cnVlLFxuICogICAgICAgIC4uLlxuICogICAgICAgIG5vbl9xdWFsaWZpZWQ6IFwiMUYxNzBcIixcbiAqICAgICAgICB1bmlmaWVkOiBcIjFGMTcwLUZFMEZcIixcbiAqICAgICB9LFxuICogICAgIC4uLlxuICogICBdXG4gKiB9XG4gKi9cblxuLyoqXG4gKiBXcmFwcyByYXcgamFzb24gZW1vamkgZGF0YSwgc2VydmVzIGFzIGRhdGEgc291cmNlIGZvclxuICogZW1vamkgcGlja2VyIGNvbXBvbmVudHMuXG4gKlxuICogVXNhZ2U6XG4gKlxuICogICBpbXBvcnQgZGF0YSBmcm9tICcuLi9kYXRhL2FsbC5qc29uJ1xuICogICBsZXQgaW5kZXggPSBuZXcgRW1vamlJbmRleChkYXRhKVxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEVtb2ppSW5kZXgge1xuICAvKipcbiAgICogQ29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIC0gUmF3IGpzb24gZGF0YSwgc2VlIHRoZSBzdHJ1Y3R1cmUgYWJvdmUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gYWRkaXRpb25hbCBvcHRpb25zLCBhcyBhbiBvYmplY3Q6XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVtb2ppc1RvU2hvd0ZpbHRlciAtIG9wdGlvbmFsLCBmdW5jdGlvbiB0byBmaWx0ZXIgb3V0XG4gICAqICAgc29tZSBlbW9qaXMsIGZ1bmN0aW9uKGVtb2ppKSB7IHJldHVybiB0cnVlfGZhbHNlIH1cbiAgICogICB3aGVyZSBgZW1vamlgIGlzIGFuIHJhdyBlbW9qaSBvYmplY3QsIHNlZSBkYXRhLmVtb2ppcyBhYm92ZS5cbiAgICogQHBhcmFtIHtBcnJheX0gaW5jbHVkZSAtIG9wdGlvbmFsLCBhIGxpc3Qgb2YgY2F0ZWdvcnkgaWRzIHRvIGluY2x1ZGUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGV4Y2x1ZGUgLSBvcHRpb25hbCwgYSBsaXN0IG9mIGNhdGVnb3J5IGlkcyB0byBleGNsdWRlLlxuICAgKiBAcGFyYW0ge0FycmF5fSBjdXN0b20gLSBvcHRpb25hbCwgYSBsaXN0IGN1c3RvbSBlbW9qaXMsIGVhY2ggZW1vamkgaXNcbiAgICogICBhbiBvYmplY3QsIHNlZSBkYXRhLmVtb2ppcyBhYm92ZSBmb3IgZXhhbXBsZXMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhLFxuICAgIHtcbiAgICAgIGVtb2ppc1RvU2hvd0ZpbHRlcixcbiAgICAgIGluY2x1ZGUsXG4gICAgICBleGNsdWRlLFxuICAgICAgY3VzdG9tLFxuICAgICAgcmVjZW50LFxuICAgICAgcmVjZW50TGVuZ3RoID0gMjAsXG4gICAgfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLl9kYXRhID0gdW5jb21wcmVzcyhkYXRhKVxuICAgIC8vIENhbGxiYWNrIHRvIGV4Y2x1ZGUgc3BlY2lmaWMgZW1vamlzXG4gICAgdGhpcy5fZW1vamlzRmlsdGVyID0gZW1vamlzVG9TaG93RmlsdGVyIHx8IG51bGxcbiAgICAvLyBDYXRlZ29yaWVzIHRvIGluY2x1ZGUgLyBleGNsdWRlXG4gICAgdGhpcy5faW5jbHVkZSA9IGluY2x1ZGUgfHwgbnVsbFxuICAgIHRoaXMuX2V4Y2x1ZGUgPSBleGNsdWRlIHx8IG51bGxcbiAgICAvLyBDdXN0b20gZW1vamlzXG4gICAgdGhpcy5fY3VzdG9tID0gY3VzdG9tIHx8IFtdXG4gICAgLy8gUmVjZW50IGVtb2ppc1xuICAgIC8vIFRPRE86IG1ha2UgcGFyYW1ldGVyIGNvbmZpZ3VyYWJsZVxuICAgIHRoaXMuX3JlY2VudCA9IHJlY2VudCB8fCBmcmVxdWVudGx5LmdldChyZWNlbnRMZW5ndGgpXG5cbiAgICB0aGlzLl9lbW9qaXMgPSB7fVxuICAgIHRoaXMuX25hdGl2ZUVtb2ppcyA9IHt9XG4gICAgdGhpcy5fZW1vdGljb25zID0ge31cblxuICAgIHRoaXMuX2NhdGVnb3JpZXMgPSBbXVxuICAgIHRoaXMuX3JlY2VudENhdGVnb3J5ID0geyBpZDogJ3JlY2VudCcsIG5hbWU6ICdSZWNlbnQnLCBlbW9qaXM6IFtdIH1cbiAgICB0aGlzLl9jdXN0b21DYXRlZ29yeSA9IHsgaWQ6ICdjdXN0b20nLCBuYW1lOiAnQ3VzdG9tJywgZW1vamlzOiBbXSB9XG4gICAgdGhpcy5fc2VhcmNoSW5kZXggPSB7fVxuICAgIHRoaXMuYnVpbGRJbmRleCgpXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKVxuICB9XG5cbiAgYnVpbGRJbmRleCgpIHtcbiAgICB0aGlzLl9kYXRhLmNhdGVnb3JpZXMuZm9yRWFjaCgoY2F0ZWdvcnlEYXRhKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNDYXRlZ29yeU5lZWRlZChjYXRlZ29yeURhdGEuaWQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgbGV0IGNhdGVnb3J5ID0ge1xuICAgICAgICBpZDogY2F0ZWdvcnlEYXRhLmlkLFxuICAgICAgICBuYW1lOiBjYXRlZ29yeURhdGEubmFtZSxcbiAgICAgICAgZW1vamlzOiBbXSxcbiAgICAgIH1cbiAgICAgIGNhdGVnb3J5RGF0YS5lbW9qaXMuZm9yRWFjaCgoZW1vamlJZCkgPT4ge1xuICAgICAgICBsZXQgZW1vamkgPSB0aGlzLmFkZEVtb2ppKGVtb2ppSWQpXG4gICAgICAgIGlmIChlbW9qaSkge1xuICAgICAgICAgIGNhdGVnb3J5LmVtb2ppcy5wdXNoKGVtb2ppKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGNhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdjdXN0b20nKSkge1xuICAgICAgaWYgKHRoaXMuX2N1c3RvbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGN1c3RvbUVtb2ppIG9mIHRoaXMuX2N1c3RvbSkge1xuICAgICAgICAgIHRoaXMuYWRkQ3VzdG9tRW1vamkoY3VzdG9tRW1vamkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2NhdGVnb3JpZXMucHVzaCh0aGlzLl9jdXN0b21DYXRlZ29yeSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NhdGVnb3J5TmVlZGVkKCdyZWNlbnQnKSkge1xuICAgICAgaWYgKHRoaXMuX3JlY2VudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fcmVjZW50Lm1hcCgoaWQpID0+IHtcbiAgICAgICAgICBmb3IgKGxldCBjdXN0b21FbW9qaSBvZiB0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMpIHtcbiAgICAgICAgICAgIGlmIChjdXN0b21FbW9qaS5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVjZW50Q2F0ZWdvcnkuZW1vamlzLnB1c2goY3VzdG9tRW1vamkpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5oYXNFbW9qaShpZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5wdXNoKHRoaXMuZW1vamkoaWQpKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIEFkZCByZWNlbnQgY2F0ZWdvcnkgdG8gdGhlIHRvcFxuICAgICAgaWYgKHRoaXMuX3JlY2VudENhdGVnb3J5LmVtb2ppcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fY2F0ZWdvcmllcy51bnNoaWZ0KHRoaXMuX3JlY2VudENhdGVnb3J5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBlbW9qaSBmcm9tIHRoZSBzdHJpbmdcbiAgICovXG4gIGZpbmRFbW9qaShlbW9qaSwgc2tpbikge1xuICAgIC8vIDEuIFBhcnNlIGFzIDplbW9qaV9uYW1lOnNraW4tdG9uZS14eDpcbiAgICBsZXQgbWF0Y2hlcyA9IGVtb2ppLm1hdGNoKENPTE9OU19SRUdFWClcblxuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICBlbW9qaSA9IG1hdGNoZXNbMV1cbiAgICAgIGlmIChtYXRjaGVzWzJdKSB7XG4gICAgICAgIHNraW4gPSBwYXJzZUludChtYXRjaGVzWzJdLCAxMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLiBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIGVtb2ppIGlzIGFuIGFsaWFzXG4gICAgaWYgKHRoaXMuX2RhdGEuYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShlbW9qaSkpIHtcbiAgICAgIGVtb2ppID0gdGhpcy5fZGF0YS5hbGlhc2VzW2Vtb2ppXVxuICAgIH1cblxuICAgIC8vIDMuIENoZWNrIGlmIHdlIGhhdmUgdGhlIHNwZWNpZmllZCBlbW9qaVxuICAgIGlmICh0aGlzLl9lbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICBsZXQgZW1vamlPYmplY3QgPSB0aGlzLl9lbW9qaXNbZW1vamldXG4gICAgICBpZiAoc2tpbikge1xuICAgICAgICByZXR1cm4gZW1vamlPYmplY3QuZ2V0U2tpbihza2luKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVtb2ppT2JqZWN0XG4gICAgfVxuXG4gICAgLy8gNC4gQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgc3BlY2lmaWVkIG5hdGl2ZSBlbW9qaVxuICAgIGlmICh0aGlzLl9uYXRpdmVFbW9qaXMuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmF0aXZlRW1vamlzW2Vtb2ppXVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgY2F0ZWdvcmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY2F0ZWdvcmllc1xuICB9XG5cbiAgZW1vamkoZW1vamlJZCkge1xuICAgIGlmICh0aGlzLl9kYXRhLmFsaWFzZXMuaGFzT3duUHJvcGVydHkoZW1vamlJZCkpIHtcbiAgICAgIGVtb2ppSWQgPSB0aGlzLl9kYXRhLmFsaWFzZXNbZW1vamlJZF1cbiAgICB9XG4gICAgbGV0IGVtb2ppID0gdGhpcy5fZW1vamlzW2Vtb2ppSWRdXG4gICAgaWYgKCFlbW9qaSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgZW1vamkgYnkgaWQ6ICcgKyBlbW9qaUlkKVxuICAgIH1cbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIGhhc0Vtb2ppKGVtb2ppSWQpIHtcbiAgICBpZiAodGhpcy5fZGF0YS5hbGlhc2VzLmhhc093blByb3BlcnR5KGVtb2ppSWQpKSB7XG4gICAgICBlbW9qaUlkID0gdGhpcy5fZGF0YS5hbGlhc2VzW2Vtb2ppSWRdXG4gICAgfVxuICAgIGlmICh0aGlzLl9lbW9qaXNbZW1vamlJZF0pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgbmF0aXZlRW1vamkodW5pY29kZUVtb2ppKSB7XG4gICAgaWYgKHRoaXMuX25hdGl2ZUVtb2ppcy5oYXNPd25Qcm9wZXJ0eSh1bmljb2RlRW1vamkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbmF0aXZlRW1vamlzW3VuaWNvZGVFbW9qaV1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHNlYXJjaCh2YWx1ZSwgbWF4UmVzdWx0cykge1xuICAgIG1heFJlc3VsdHMgfHwgKG1heFJlc3VsdHMgPSA3NSlcbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgaWYgKHZhbHVlID09ICctJyB8fCB2YWx1ZSA9PSAnLTEnKSB7XG4gICAgICByZXR1cm4gW3RoaXMuZW1vamkoJy0xJyldXG4gICAgfVxuXG4gICAgbGV0IHZhbHVlcyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tcXHN8LHxcXC18X10rLylcbiAgICBsZXQgYWxsUmVzdWx0cyA9IFtdXG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDIpIHtcbiAgICAgIHZhbHVlcyA9IFt2YWx1ZXNbMF0sIHZhbHVlc1sxXV1cbiAgICB9XG5cbiAgICBhbGxSZXN1bHRzID0gdmFsdWVzXG4gICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyBTdGFydCBzZWFyY2hpbiBpbiB0aGUgZ2xvYmFsIGxpc3Qgb2YgZW1vamlzXG4gICAgICAgIGxldCBlbW9qaXMgPSB0aGlzLl9lbW9qaXNcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IHRoaXMuX3NlYXJjaEluZGV4XG4gICAgICAgIGxldCBsZW5ndGggPSAwXG5cbiAgICAgICAgZm9yIChsZXQgY2hhckluZGV4ID0gMDsgY2hhckluZGV4IDwgdmFsdWUubGVuZ3RoOyBjaGFySW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGNoYXIgPSB2YWx1ZVtjaGFySW5kZXhdXG4gICAgICAgICAgbGVuZ3RoKytcblxuICAgICAgICAgIGN1cnJlbnRJbmRleFtjaGFyXSB8fCAoY3VycmVudEluZGV4W2NoYXJdID0ge30pXG4gICAgICAgICAgY3VycmVudEluZGV4ID0gY3VycmVudEluZGV4W2NoYXJdXG5cbiAgICAgICAgICBpZiAoIWN1cnJlbnRJbmRleC5yZXN1bHRzKSB7XG4gICAgICAgICAgICBsZXQgc2NvcmVzID0ge31cbiAgICAgICAgICAgIGN1cnJlbnRJbmRleC5yZXN1bHRzID0gW11cbiAgICAgICAgICAgIGN1cnJlbnRJbmRleC5lbW9qaXMgPSB7fVxuXG4gICAgICAgICAgICBmb3IgKGxldCBlbW9qaUlkIGluIGVtb2ppcykge1xuICAgICAgICAgICAgICBsZXQgZW1vamkgPSBlbW9qaXNbZW1vamlJZF1cbiAgICAgICAgICAgICAgLy8gc2VhcmNoIGlzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyB3aXRoIHdvcmRzLCByZWxhdGVkXG4gICAgICAgICAgICAgIC8vIHRvIHRoZSBlbW9qaSwgZm9yIGV4YW1wbGU6XG4gICAgICAgICAgICAgIC8vIHNlYXJjaDogXCJzbWlsZXksc21pbGluZyxmYWNlLGpveSxoYWhhLDpkLDopLHNtaWxlLGZ1bm55LD0pLD0tKVwiLFxuICAgICAgICAgICAgICBsZXQgc2VhcmNoID0gZW1vamkuX2RhdGEuc2VhcmNoXG4gICAgICAgICAgICAgIGxldCBzdWIgPSB2YWx1ZS5zdWJzdHIoMCwgbGVuZ3RoKVxuICAgICAgICAgICAgICBsZXQgc3ViSW5kZXggPSBzZWFyY2guaW5kZXhPZihzdWIpXG4gICAgICAgICAgICAgIGlmIChzdWJJbmRleCAhPSAtMSkge1xuICAgICAgICAgICAgICAgIGxldCBzY29yZSA9IHN1YkluZGV4ICsgMVxuICAgICAgICAgICAgICAgIGlmIChzdWIgPT0gZW1vamlJZCkgc2NvcmUgPSAwXG5cbiAgICAgICAgICAgICAgICBjdXJyZW50SW5kZXgucmVzdWx0cy5wdXNoKGVtb2ppKVxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleC5lbW9qaXNbZW1vamlJZF0gPSBlbW9qaVxuXG4gICAgICAgICAgICAgICAgc2NvcmVzW2Vtb2ppSWRdID0gc2NvcmVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VycmVudEluZGV4LnJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICB2YXIgYVNjb3JlID0gc2NvcmVzW2EuaWRdLFxuICAgICAgICAgICAgICAgIGJTY29yZSA9IHNjb3Jlc1tiLmlkXVxuICAgICAgICAgICAgICByZXR1cm4gYVNjb3JlIC0gYlNjb3JlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNvbnRpbnVlIHNlYXJjaCBpbiB0aGUgcmVkdWNlZCBzZXQgb2YgZW1vamlzXG4gICAgICAgICAgZW1vamlzID0gY3VycmVudEluZGV4LmVtb2ppc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50SW5kZXgucmVzdWx0c1xuICAgICAgICAvLyBUaGUgXCJmaWx0ZXJcIiBjYWxsIHJlbW92ZXMgdW5kZWZpbmVkIHZhbHVlcyBmcm9tIGFsbFJlc3VsdHNcbiAgICAgICAgLy8gYXJyYXksIGZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIFwidGVzdCBcIiAod2l0aCB0cmFpbGluZyBzcGFjZSksXG4gICAgICAgIC8vIHdlIHdpbGwgZ2V0IFwiW0FycmF5LCB1bmRlZmluZWRdXCIgZm9yIGFsbFJlc3VsdHMgYW5kIGFmdGVyXG4gICAgICAgIC8vIHRoZSBcImZpbHRlclwiIGNhbGwgaXQgd2lsbCB0dXJuIGludG8gXCJbQXJyYXldXCJcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChhKSA9PiBhKVxuXG4gICAgdmFyIHJlc3VsdHMgPSBudWxsXG4gICAgaWYgKGFsbFJlc3VsdHMubGVuZ3RoID4gMSkge1xuICAgICAgcmVzdWx0cyA9IGludGVyc2VjdC5hcHBseShudWxsLCBhbGxSZXN1bHRzKVxuICAgIH0gZWxzZSBpZiAoYWxsUmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdHMgPSBhbGxSZXN1bHRzWzBdXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdHMgPSBbXVxuICAgIH1cbiAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IG1heFJlc3VsdHMpIHtcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKDAsIG1heFJlc3VsdHMpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBhZGRDdXN0b21FbW9qaShjdXN0b21FbW9qaSkge1xuICAgIGxldCBlbW9qaURhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBjdXN0b21FbW9qaSwge1xuICAgICAgaWQ6IGN1c3RvbUVtb2ppLnNob3J0X25hbWVzWzBdLFxuICAgICAgY3VzdG9tOiB0cnVlLFxuICAgIH0pXG4gICAgaWYgKCFlbW9qaURhdGEuc2VhcmNoKSB7XG4gICAgICBlbW9qaURhdGEuc2VhcmNoID0gYnVpbGRTZWFyY2goZW1vamlEYXRhKVxuICAgIH1cbiAgICBsZXQgZW1vamkgPSBuZXcgRW1vamlEYXRhKGVtb2ppRGF0YSlcbiAgICB0aGlzLl9lbW9qaXNbZW1vamkuaWRdID0gZW1vamlcbiAgICB0aGlzLl9jdXN0b21DYXRlZ29yeS5lbW9qaXMucHVzaChlbW9qaSlcbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIGFkZEVtb2ppKGVtb2ppSWQpIHtcbiAgICAvLyBXZSBleHBlY3QgdGhlIGNvcnJlY3QgZW1vamkgaWQgdGhhdCBpcyBwcmVzZW50IGluIHRoZSBlbW9qaXMgZGF0YS5cbiAgICBsZXQgZGF0YSA9IHRoaXMuX2RhdGEuZW1vamlzW2Vtb2ppSWRdXG5cbiAgICBpZiAoIXRoaXMuaXNFbW9qaU5lZWRlZChkYXRhKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgbGV0IGVtb2ppID0gbmV3IEVtb2ppRGF0YShkYXRhKVxuICAgIHRoaXMuX2Vtb2ppc1tlbW9qaUlkXSA9IGVtb2ppXG4gICAgaWYgKGVtb2ppLm5hdGl2ZSkge1xuICAgICAgdGhpcy5fbmF0aXZlRW1vamlzW2Vtb2ppLm5hdGl2ZV0gPSBlbW9qaVxuICAgIH1cbiAgICBpZiAoZW1vamkuX3NraW5zKSB7XG4gICAgICBmb3IgKGxldCBpZHggaW4gZW1vamkuX3NraW5zKSB7XG4gICAgICAgIGxldCBza2luID0gZW1vamkuX3NraW5zW2lkeF1cbiAgICAgICAgaWYgKHNraW4ubmF0aXZlKSB7XG4gICAgICAgICAgdGhpcy5fbmF0aXZlRW1vamlzW3NraW4ubmF0aXZlXSA9IHNraW5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbW9qaS5lbW90aWNvbnMpIHtcbiAgICAgIGVtb2ppLmVtb3RpY29ucy5mb3JFYWNoKChlbW90aWNvbikgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZW1vdGljb25zW2Vtb3RpY29uXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Vtb3RpY29uc1tlbW90aWNvbl0gPSBlbW9qaUlkXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gZW1vamlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIGluY2x1ZGUgZ2l2ZW4gY2F0ZWdvcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYXRlZ29yeV9pZCAtIFRoZSBjYXRlZ29yeSBpZC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVtb2ppLlxuICAgKi9cbiAgaXNDYXRlZ29yeU5lZWRlZChjYXRlZ29yeV9pZCkge1xuICAgIGxldCBpc0luY2x1ZGVkID1cbiAgICAgIHRoaXMuX2luY2x1ZGUgJiYgdGhpcy5faW5jbHVkZS5sZW5ndGhcbiAgICAgICAgPyB0aGlzLl9pbmNsdWRlLmluZGV4T2YoY2F0ZWdvcnlfaWQpID4gLTFcbiAgICAgICAgOiB0cnVlXG4gICAgbGV0IGlzRXhjbHVkZWQgPVxuICAgICAgdGhpcy5fZXhjbHVkZSAmJiB0aGlzLl9leGNsdWRlLmxlbmd0aFxuICAgICAgICA/IHRoaXMuX2V4Y2x1ZGUuaW5kZXhPZihjYXRlZ29yeV9pZCkgPiAtMVxuICAgICAgICA6IGZhbHNlXG4gICAgaWYgKCFpc0luY2x1ZGVkIHx8IGlzRXhjbHVkZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdlIG5lZWQgdG8gaW5jbHVkZSBnaXZlbiBlbW9qaS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGVtb2ppIC0gVGhlIHJhdyBlbW9qaSBvYmplY3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IC0gV2hldGhlciB0byBpbmNsdWRlIHRoZSBlbW9qaS5cbiAgICovXG4gIGlzRW1vamlOZWVkZWQoZW1vamkpIHtcbiAgICBpZiAodGhpcy5fZW1vamlzRmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZW1vamlzRmlsdGVyKGVtb2ppKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbW9qaURhdGEge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgdGhpcy5fZGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIGRhdGEpXG4gICAgdGhpcy5fc2tpbnMgPSBudWxsXG4gICAgaWYgKHRoaXMuX2RhdGEuc2tpbl92YXJpYXRpb25zKSB7XG4gICAgICB0aGlzLl9za2lucyA9IFtdXG4gICAgICBmb3IgKHZhciBza2luSWR4IGluIFNLSU5TKSB7XG4gICAgICAgIGxldCBza2luS2V5ID0gU0tJTlNbc2tpbklkeF1cbiAgICAgICAgbGV0IHZhcmlhdGlvbkRhdGEgPSB0aGlzLl9kYXRhLnNraW5fdmFyaWF0aW9uc1tza2luS2V5XVxuICAgICAgICBsZXQgc2tpbkRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKVxuICAgICAgICBmb3IgKGxldCBrIGluIHZhcmlhdGlvbkRhdGEpIHtcbiAgICAgICAgICBza2luRGF0YVtrXSA9IHZhcmlhdGlvbkRhdGFba11cbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgc2tpbkRhdGEuc2tpbl92YXJpYXRpb25zXG4gICAgICAgIHRoaXMuX3NraW5zLnB1c2gobmV3IEVtb2ppRGF0YShza2luRGF0YSkpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3Nhbml0aXplZCA9IHNhbml0aXplKHRoaXMuX2RhdGEpXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuX3Nhbml0aXplZCkge1xuICAgICAgdGhpc1trZXldID0gdGhpcy5fc2FuaXRpemVkW2tleV1cbiAgICB9XG4gICAgdGhpcy5zaG9ydF9uYW1lcyA9IHRoaXMuX2RhdGEuc2hvcnRfbmFtZXNcbiAgICB0aGlzLnNob3J0X25hbWUgPSB0aGlzLl9kYXRhLnNob3J0X25hbWVzWzBdXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKVxuICB9XG5cbiAgZ2V0U2tpbihza2luSWR4KSB7XG4gICAgaWYgKHNraW5JZHggJiYgc2tpbklkeCAhPSAnbmF0aXZlJyAmJiB0aGlzLl9za2lucykge1xuICAgICAgcmV0dXJuIHRoaXMuX3NraW5zW3NraW5JZHggLSAxXVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0UG9zaXRpb24oKSB7XG4gICAgbGV0IG11bHRpcGx5ID0gMTAwIC8gKFNIRUVUX0NPTFVNTlMgLSAxKSxcbiAgICAgIHggPSBNYXRoLnJvdW5kKG11bHRpcGx5ICogdGhpcy5fZGF0YS5zaGVldF94ICogMTAwKSAvIDEwMCxcbiAgICAgIHkgPSBNYXRoLnJvdW5kKG11bHRpcGx5ICogdGhpcy5fZGF0YS5zaGVldF95ICogMTAwKSAvIDEwMFxuICAgIHJldHVybiBgJHt4fSUgJHt5fSVgXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVtb2ppVmlldyB7XG4gIC8qKlxuICAgKiBlbW9qaSAtIEVtb2ppIHRvIGRpc3BsYXlcbiAgICogc2V0IC0gc3RyaW5nLCBlbW9qaSBzZXQgbmFtZVxuICAgKiBuYXRpdmUgLSBib29sZWFuLCB3aGV0aGVyIHRvIHJlbmRlciBuYXRpdmUgZW1vamlcbiAgICogZmFsbGJhY2sgLSBmYWxsYmFjayBmdW5jdGlvbiB0byByZW5kZXIgbWlzc2luZyBlbW9qaSwgb3B0aW9uYWxcbiAgICogZW1vamlUb29sdGlwIC0gd2V0aGVyIHdlIG5lZWQgdG8gc2hvdyB0aGUgZW1vamkgdG9vbHRpcCwgb3B0aW9uYWxcbiAgICogZW1vamlTaXplIC0gZW1vamkgc2l6ZSBpbiBwaXhlbHMsIG9wdGlvbmFsXG4gICAqL1xuICBjb25zdHJ1Y3RvcihlbW9qaSwgc2tpbiwgc2V0LCBuYXRpdmUsIGZhbGxiYWNrLCBlbW9qaVRvb2x0aXAsIGVtb2ppU2l6ZSkge1xuICAgIHRoaXMuX2Vtb2ppID0gZW1vamlcbiAgICB0aGlzLl9uYXRpdmUgPSBuYXRpdmVcbiAgICB0aGlzLl9za2luID0gc2tpblxuICAgIHRoaXMuX3NldCA9IHNldFxuICAgIHRoaXMuX2ZhbGxiYWNrID0gZmFsbGJhY2tcblxuICAgIHRoaXMuY2FuUmVuZGVyID0gdGhpcy5fY2FuUmVuZGVyKClcbiAgICB0aGlzLmNzc0NsYXNzID0gdGhpcy5fY3NzQ2xhc3MoKVxuICAgIHRoaXMuY3NzU3R5bGUgPSB0aGlzLl9jc3NTdHlsZShlbW9qaVNpemUpXG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5fY29udGVudCgpXG4gICAgdGhpcy50aXRsZSA9IGVtb2ppVG9vbHRpcCA9PT0gdHJ1ZSA/IGVtb2ppLnNob3J0X25hbWUgOiBudWxsXG5cbiAgICBPYmplY3QuZnJlZXplKHRoaXMpXG4gIH1cblxuICBnZXRFbW9qaSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZW1vamkuZ2V0U2tpbih0aGlzLl9za2luKVxuICB9XG5cbiAgX2NhblJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5faXNDdXN0b20oKSB8fCB0aGlzLl9pc05hdGl2ZSgpIHx8IHRoaXMuX2hhc0Vtb2ppKCkgfHwgdGhpcy5fZmFsbGJhY2tcbiAgICApXG4gIH1cblxuICBfY3NzQ2xhc3MoKSB7XG4gICAgcmV0dXJuIFsnZW1vamktc2V0LScgKyB0aGlzLl9zZXQsICdlbW9qaS10eXBlLScgKyB0aGlzLl9lbW9qaVR5cGUoKV1cbiAgfVxuXG4gIF9jc3NTdHlsZShlbW9qaVNpemUpIHtcbiAgICBsZXQgY3NzU3R5bGUgPSB7fVxuICAgIGlmICh0aGlzLl9pc0N1c3RvbSgpKSB7XG4gICAgICBjc3NTdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAndXJsKCcgKyB0aGlzLmdldEVtb2ppKCkuX2RhdGEuaW1hZ2VVcmwgKyAnKScsXG4gICAgICAgIGJhY2tncm91bmRTaXplOiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiBlbW9qaVNpemUgKyAncHgnLFxuICAgICAgICBoZWlnaHQ6IGVtb2ppU2l6ZSArICdweCcsXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNFbW9qaSgpICYmICF0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICBjc3NTdHlsZSA9IHtcbiAgICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiB0aGlzLmdldEVtb2ppKCkuZ2V0UG9zaXRpb24oKSxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVtb2ppU2l6ZSkge1xuICAgICAgaWYgKHRoaXMuX2lzTmF0aXZlKCkpIHtcbiAgICAgICAgLy8gU2V0IGZvbnQtc2l6ZSBmb3IgbmF0aXZlIGVtb2ppLlxuICAgICAgICBjc3NTdHlsZSA9IE9iamVjdC5hc3NpZ24oY3NzU3R5bGUsIHtcbiAgICAgICAgICAvLyBmb250LXNpemUgaXMgdXNlZCBmb3IgbmF0aXZlIGVtb2ppIHdoaWNoIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2FsZSB3aXRoIDAuOCBmYWN0b3IgdG8gaGF2ZSB0aGVtIGxvb2sgYXBwcm94aW1hdGVseVxuICAgICAgICAgIC8vIHRoZSBzYW1lIHNpemUgYXMgaW1hZ2UtYmFzZWQgZW1vamwuXG4gICAgICAgICAgZm9udFNpemU6IE1hdGgucm91bmQoZW1vamlTaXplICogMC44ICogMTApIC8gMTAgKyAncHgnLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0IHdpZHRoL2hlaWdodCBmb3IgaW1hZ2UgZW1vamkuXG4gICAgICAgIGNzc1N0eWxlID0gT2JqZWN0LmFzc2lnbihjc3NTdHlsZSwge1xuICAgICAgICAgIHdpZHRoOiBlbW9qaVNpemUgKyAncHgnLFxuICAgICAgICAgIGhlaWdodDogZW1vamlTaXplICsgJ3B4JyxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNzc1N0eWxlXG4gIH1cblxuICBfY29udGVudCgpIHtcbiAgICBpZiAodGhpcy5faXNDdXN0b20oKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0aGlzLl9pc05hdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRFbW9qaSgpLm5hdGl2ZVxuICAgIH1cbiAgICBpZiAodGhpcy5faGFzRW1vamkoKSkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mYWxsYmFjayA/IHRoaXMuX2ZhbGxiYWNrKHRoaXMuZ2V0RW1vamkoKSkgOiBudWxsXG4gIH1cblxuICBfaXNOYXRpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hdGl2ZVxuICB9XG5cbiAgX2lzQ3VzdG9tKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVtb2ppKCkuY3VzdG9tXG4gIH1cblxuICBfaGFzRW1vamkoKSB7XG4gICAgaWYgKCF0aGlzLmdldEVtb2ppKCkuX2RhdGEpIHtcbiAgICAgIC8vIFJldHVybiBmYWxzZSBpZiB3ZSBoYXZlIG5vIGRhdGEuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgaGFzSW1hZ2UgPSB0aGlzLmdldEVtb2ppKCkuX2RhdGFbJ2hhc19pbWdfJyArIHRoaXMuX3NldF1cbiAgICBpZiAoaGFzSW1hZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gaGFzX2ltZ194eHggaW4gdGhlIGRhdGEsIHdlIGFyZSB3b3JraW5nIHdpdGhcbiAgICAgIC8vIHNwZWNpZmljIGRhdGEgZmlsZSwgbGlrZSBtZXNzZW5nZXIuanNvbiwgc28gd2UgYXNzdW1lIGFsbFxuICAgICAgLy8gZW1vamlzIGFyZSBhdmFpbGFibGUgKHRoZSA6c2V0IHNldHRpbmcgZm9yIHBpY2tlciBzaG91bGRcbiAgICAgIC8vIG1hdGNoIHRoZSBkYXRhIGZpbGUpLlxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlLCB3ZSBhcmUgdXNpbmcgYWxsLmpzb24gYW5kIGNhbiBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnRcbiAgICAvLyBzZXRzIC0gaW4gdGhpcyBjYXNlIHRoZSBgaGFzX2ltZ197c2V0X25hbWV9YCBpcyBhIGJvb2xlYW4gdGhhdFxuICAgIC8vIGluZGljYXRlcyBpZiB0aGVyZSBpcyBzdWNoIGltYWdlIG9yIG5vdCBmb3IgYSBnaXZlbiBzZXQuXG4gICAgcmV0dXJuIGhhc0ltYWdlXG4gIH1cblxuICBfZW1vamlUeXBlKCkge1xuICAgIGlmICh0aGlzLl9pc0N1c3RvbSgpKSB7XG4gICAgICByZXR1cm4gJ2N1c3RvbSdcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzTmF0aXZlKCkpIHtcbiAgICAgIHJldHVybiAnbmF0aXZlJ1xuICAgIH1cbiAgICBpZiAodGhpcy5faGFzRW1vamkoKSkge1xuICAgICAgcmV0dXJuICdpbWFnZSdcbiAgICB9XG4gICAgcmV0dXJuICdmYWxsYmFjaydcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemUoZW1vamkpIHtcbiAgdmFyIHtcbiAgICAgIG5hbWUsXG4gICAgICBzaG9ydF9uYW1lcyxcbiAgICAgIHNraW5fdG9uZSxcbiAgICAgIHNraW5fdmFyaWF0aW9ucyxcbiAgICAgIGVtb3RpY29ucyxcbiAgICAgIHVuaWZpZWQsXG4gICAgICBjdXN0b20sXG4gICAgICBpbWFnZVVybCxcbiAgICB9ID0gZW1vamksXG4gICAgaWQgPSBlbW9qaS5pZCB8fCBzaG9ydF9uYW1lc1swXSxcbiAgICBjb2xvbnMgPSBgOiR7aWR9OmBcblxuICBpZiAoY3VzdG9tKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGNvbG9ucyxcbiAgICAgIGVtb3RpY29ucyxcbiAgICAgIGN1c3RvbSxcbiAgICAgIGltYWdlVXJsLFxuICAgIH1cbiAgfVxuXG4gIGlmIChza2luX3RvbmUpIHtcbiAgICBjb2xvbnMgKz0gYDpza2luLXRvbmUtJHtza2luX3RvbmV9OmBcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgbmFtZSxcbiAgICBjb2xvbnMsXG4gICAgZW1vdGljb25zLFxuICAgIHVuaWZpZWQ6IHVuaWZpZWQudG9Mb3dlckNhc2UoKSxcbiAgICBza2luOiBza2luX3RvbmUgfHwgKHNraW5fdmFyaWF0aW9ucyA/IDEgOiBudWxsKSxcbiAgICBuYXRpdmU6IHVuaWZpZWRUb05hdGl2ZSh1bmlmaWVkKSxcbiAgfVxufVxuIiwiaW1wb3J0IHN0b3JlIGZyb20gJy4vc3RvcmUnXG5cbmNvbnN0IERFRkFVTFRTID0gW1xuICAnKzEnLFxuICAnZ3Jpbm5pbmcnLFxuICAna2lzc2luZ19oZWFydCcsXG4gICdoZWFydF9leWVzJyxcbiAgJ2xhdWdoaW5nJyxcbiAgJ3N0dWNrX291dF90b25ndWVfd2lua2luZ19leWUnLFxuICAnc3dlYXRfc21pbGUnLFxuICAnam95JyxcbiAgJ3NjcmVhbScsXG4gICdkaXNhcHBvaW50ZWQnLFxuICAndW5hbXVzZWQnLFxuICAnd2VhcnknLFxuICAnc29iJyxcbiAgJ3N1bmdsYXNzZXMnLFxuICAnaGVhcnQnLFxuICAncG9vcCcsXG5dXG5cbmxldCBmcmVxdWVudGx5LCBpbml0aWFsaXplZFxubGV0IGRlZmF1bHRzID0ge31cblxuZnVuY3Rpb24gaW5pdCgpIHtcbiAgaW5pdGlhbGl6ZWQgPSB0cnVlXG4gIGZyZXF1ZW50bHkgPSBzdG9yZS5nZXQoJ2ZyZXF1ZW50bHknKVxufVxuXG5mdW5jdGlvbiBhZGQoZW1vamkpIHtcbiAgaWYgKCFpbml0aWFsaXplZCkgaW5pdCgpXG4gIHZhciB7IGlkIH0gPSBlbW9qaVxuXG4gIGZyZXF1ZW50bHkgfHwgKGZyZXF1ZW50bHkgPSBkZWZhdWx0cylcbiAgZnJlcXVlbnRseVtpZF0gfHwgKGZyZXF1ZW50bHlbaWRdID0gMClcbiAgZnJlcXVlbnRseVtpZF0gKz0gMVxuXG4gIHN0b3JlLnNldCgnbGFzdCcsIGlkKVxuICBzdG9yZS5zZXQoJ2ZyZXF1ZW50bHknLCBmcmVxdWVudGx5KVxufVxuXG5mdW5jdGlvbiBnZXQobWF4TnVtYmVyKSB7XG4gIGlmICghaW5pdGlhbGl6ZWQpIGluaXQoKVxuICBpZiAoIWZyZXF1ZW50bHkpIHtcbiAgICBkZWZhdWx0cyA9IHt9XG5cbiAgICBjb25zdCByZXN1bHQgPSBbXVxuXG4gICAgbGV0IGRlZmF1bHRMZW5ndGggPSBNYXRoLm1pbihtYXhOdW1iZXIsIERFRkFVTFRTLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlZmF1bHRMZW5ndGg7IGkrKykge1xuICAgICAgZGVmYXVsdHNbREVGQVVMVFNbaV1dID0gZGVmYXVsdExlbmd0aCAtIGlcbiAgICAgIHJlc3VsdC5wdXNoKERFRkFVTFRTW2ldKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGNvbnN0IHF1YW50aXR5ID0gbWF4TnVtYmVyXG4gIGNvbnN0IGZyZXF1ZW50bHlLZXlzID0gW11cblxuICBmb3IgKGxldCBrZXkgaW4gZnJlcXVlbnRseSkge1xuICAgIGlmIChmcmVxdWVudGx5Lmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGZyZXF1ZW50bHlLZXlzLnB1c2goa2V5KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNvcnRlZCA9IGZyZXF1ZW50bHlLZXlzXG4gICAgLnNvcnQoKGEsIGIpID0+IGZyZXF1ZW50bHlbYV0gLSBmcmVxdWVudGx5W2JdKVxuICAgIC5yZXZlcnNlKClcbiAgY29uc3Qgc2xpY2VkID0gc29ydGVkLnNsaWNlKDAsIHF1YW50aXR5KVxuXG4gIGNvbnN0IGxhc3QgPSBzdG9yZS5nZXQoJ2xhc3QnKVxuXG4gIGlmIChsYXN0ICYmIHNsaWNlZC5pbmRleE9mKGxhc3QpID09IC0xKSB7XG4gICAgc2xpY2VkLnBvcCgpXG4gICAgc2xpY2VkLnB1c2gobGFzdClcbiAgfVxuXG4gIHJldHVybiBzbGljZWRcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBhZGQsIGdldCB9XG4iLCJpbXBvcnQgc3RyaW5nRnJvbUNvZGVQb2ludCBmcm9tICcuLi9wb2x5ZmlsbHMvc3RyaW5nRnJvbUNvZGVQb2ludCdcblxuZnVuY3Rpb24gdW5pZmllZFRvTmF0aXZlKHVuaWZpZWQpIHtcbiAgdmFyIHVuaWNvZGVzID0gdW5pZmllZC5zcGxpdCgnLScpLFxuICAgIGNvZGVQb2ludHMgPSB1bmljb2Rlcy5tYXAoKHUpID0+IGAweCR7dX1gKVxuXG4gIHJldHVybiBzdHJpbmdGcm9tQ29kZVBvaW50LmFwcGx5KG51bGwsIGNvZGVQb2ludHMpXG59XG5cbmZ1bmN0aW9uIHVuaXEoYXJyKSB7XG4gIHJldHVybiBhcnIucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICBpZiAoYWNjLmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG4gICAgICBhY2MucHVzaChpdGVtKVxuICAgIH1cbiAgICByZXR1cm4gYWNjXG4gIH0sIFtdKVxufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoYSwgYikge1xuICBjb25zdCB1bmlxQSA9IHVuaXEoYSlcbiAgY29uc3QgdW5pcUIgPSB1bmlxKGIpXG5cbiAgcmV0dXJuIHVuaXFBLmZpbHRlcigoaXRlbSkgPT4gdW5pcUIuaW5kZXhPZihpdGVtKSA+PSAwKVxufVxuXG5mdW5jdGlvbiBkZWVwTWVyZ2UoYSwgYikge1xuICB2YXIgbyA9IHt9XG5cbiAgZm9yIChsZXQga2V5IGluIGEpIHtcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IGFba2V5XSxcbiAgICAgIHZhbHVlID0gb3JpZ2luYWxWYWx1ZVxuXG4gICAgaWYgKGIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgdmFsdWUgPSBiW2tleV1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsdWUgPSBkZWVwTWVyZ2Uob3JpZ2luYWxWYWx1ZSwgdmFsdWUpXG4gICAgfVxuXG4gICAgb1trZXldID0gdmFsdWVcbiAgfVxuXG4gIHJldHVybiBvXG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zb25pY2RvZS9tZWFzdXJlLXNjcm9sbGJhclxuZnVuY3Rpb24gbWVhc3VyZVNjcm9sbGJhcigpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PSAndW5kZWZpbmVkJykgcmV0dXJuIDBcbiAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcblxuICBkaXYuc3R5bGUud2lkdGggPSAnMTAwcHgnXG4gIGRpdi5zdHlsZS5oZWlnaHQgPSAnMTAwcHgnXG4gIGRpdi5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnXG4gIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcbiAgZGl2LnN0eWxlLnRvcCA9ICctOTk5OXB4J1xuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KVxuICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aFxuICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdilcblxuICByZXR1cm4gc2Nyb2xsYmFyV2lkdGhcbn1cblxuZXhwb3J0IHsgdW5pcSwgaW50ZXJzZWN0LCBkZWVwTWVyZ2UsIHVuaWZpZWRUb05hdGl2ZSwgbWVhc3VyZVNjcm9sbGJhciB9XG4iLCJjb25zdCBFbW9qaVByb3BzID0ge1xuICBuYXRpdmU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICB0b29sdGlwOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZmFsbGJhY2s6IHtcbiAgICB0eXBlOiBGdW5jdGlvbixcbiAgfSxcbiAgc2tpbjoge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAxLFxuICB9LFxuICBzZXQ6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJ2FwcGxlJyxcbiAgfSxcbiAgZW1vamk6IHtcbiAgICB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLFxuICAgIHJlcXVpcmVkOiB0cnVlLFxuICB9LFxuICBzaXplOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IG51bGwsXG4gIH0sXG59XG5cbmNvbnN0IFBpY2tlclByb3BzID0ge1xuICBwZXJMaW5lOiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDksXG4gIH0sXG4gIG1heFNlYXJjaFJlc3VsdHM6IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogNzUsXG4gIH0sXG4gIGVtb2ppU2l6ZToge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAyNCxcbiAgfSxcbiAgdGl0bGU6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZGVmYXVsdDogJ0Vtb2ppIE1hcnTihKInLFxuICB9LFxuICBlbW9qaToge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBkZWZhdWx0OiAnZGVwYXJ0bWVudF9zdG9yZScsXG4gIH0sXG4gIGNvbG9yOiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICcjYWU2NWM1JyxcbiAgfSxcbiAgc2V0OiB7XG4gICAgdHlwZTogU3RyaW5nLFxuICAgIGRlZmF1bHQ6ICdhcHBsZScsXG4gIH0sXG4gIHNraW46IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogbnVsbCxcbiAgfSxcbiAgZGVmYXVsdFNraW46IHtcbiAgICB0eXBlOiBOdW1iZXIsXG4gICAgZGVmYXVsdDogMSxcbiAgfSxcbiAgbmF0aXZlOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZW1vamlUb29sdGlwOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgYXV0b0ZvY3VzOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgaTE4bjoge1xuICAgIHR5cGU6IE9iamVjdCxcbiAgICBkZWZhdWx0KCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfSxcbiAgfSxcbiAgc2hvd1ByZXZpZXc6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNob3dTZWFyY2g6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHNob3dDYXRlZ29yaWVzOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBzaG93U2tpblRvbmVzOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBpbmZpbml0ZVNjcm9sbDoge1xuICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSxcbiAgcGlja2VyU3R5bGVzOiB7XG4gICAgdHlwZTogT2JqZWN0LFxuICAgIGRlZmF1bHQoKSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9LFxuICB9LFxufVxuXG5leHBvcnQgeyBFbW9qaVByb3BzLCBQaWNrZXJQcm9wcyB9XG4iLCJ2YXIgTkFNRVNQQUNFID0gJ2Vtb2ppLW1hcnQnXG5cbmNvbnN0IF9KU09OID0gSlNPTlxuXG52YXIgaXNMb2NhbFN0b3JhZ2VTdXBwb3J0ZWQgPVxuICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAnbG9jYWxTdG9yYWdlJyBpbiB3aW5kb3dcblxubGV0IGdldHRlclxubGV0IHNldHRlclxuXG5mdW5jdGlvbiBzZXRIYW5kbGVycyhoYW5kbGVycykge1xuICBoYW5kbGVycyB8fCAoaGFuZGxlcnMgPSB7fSlcblxuICBnZXR0ZXIgPSBoYW5kbGVycy5nZXR0ZXJcbiAgc2V0dGVyID0gaGFuZGxlcnMuc2V0dGVyXG59XG5cbmZ1bmN0aW9uIHNldE5hbWVzcGFjZShuYW1lc3BhY2UpIHtcbiAgTkFNRVNQQUNFID0gbmFtZXNwYWNlXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZShzdGF0ZSkge1xuICBmb3IgKGxldCBrZXkgaW4gc3RhdGUpIHtcbiAgICBsZXQgdmFsdWUgPSBzdGF0ZVtrZXldXG4gICAgc2V0KGtleSwgdmFsdWUpXG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgaWYgKHNldHRlcikge1xuICAgIHNldHRlcihrZXksIHZhbHVlKVxuICB9IGVsc2Uge1xuICAgIGlmICghaXNMb2NhbFN0b3JhZ2VTdXBwb3J0ZWQpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICB3aW5kb3cubG9jYWxTdG9yYWdlW2Ake05BTUVTUEFDRX0uJHtrZXl9YF0gPSBfSlNPTi5zdHJpbmdpZnkodmFsdWUpXG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXQoa2V5KSB7XG4gIGlmIChnZXR0ZXIpIHtcbiAgICByZXR1cm4gZ2V0dGVyKGtleSlcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWlzTG9jYWxTdG9yYWdlU3VwcG9ydGVkKSByZXR1cm5cbiAgICB0cnkge1xuICAgICAgdmFyIHZhbHVlID0gd2luZG93LmxvY2FsU3RvcmFnZVtgJHtOQU1FU1BBQ0V9LiR7a2V5fWBdXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgeyB1cGRhdGUsIHNldCwgZ2V0LCBzZXROYW1lc3BhY2UsIHNldEhhbmRsZXJzIH1cbiIsIi8vIGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXG4vLyBodHRwOi8vbXkub3BlcmEuY29tL2Vtb2xsZXIvYmxvZy8yMDExLzEyLzIwL3JlcXVlc3RhbmltYXRpb25mcmFtZS1mb3Itc21hcnQtZXItYW5pbWF0aW5nXG5cbi8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSBwb2x5ZmlsbCBieSBFcmlrIE3DtmxsZXIuIGZpeGVzIGZyb20gUGF1bCBJcmlzaCBhbmQgVGlubyBaaWpkZWxcblxuLy8gTUlUIGxpY2Vuc2VcblxudmFyIGlzV2luZG93QXZhaWxhYmxlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcblxuaXNXaW5kb3dBdmFpbGFibGUgJiZcbiAgKGZ1bmN0aW9uKCkge1xuICAgIHZhciBsYXN0VGltZSA9IDBcbiAgICB2YXIgdmVuZG9ycyA9IFsnbXMnLCAnbW96JywgJ3dlYmtpdCcsICdvJ11cblxuICAgIGZvciAodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgJ1JlcXVlc3RBbmltYXRpb25GcmFtZSddXG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPVxuICAgICAgICB3aW5kb3dbdmVuZG9yc1t4XSArICdDYW5jZWxBbmltYXRpb25GcmFtZSddIHx8XG4gICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgJ0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSddXG4gICAgfVxuXG4gICAgaWYgKCF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKVxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgIHZhciB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAoY3VyclRpbWUgLSBsYXN0VGltZSkpXG4gICAgICAgIHZhciBpZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbClcbiAgICAgICAgfSwgdGltZVRvQ2FsbClcblxuICAgICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbFxuICAgICAgICByZXR1cm4gaWRcbiAgICAgIH1cblxuICAgIGlmICghd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKVxuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24oaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKVxuICAgICAgfVxuICB9KSgpXG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file